Module: LibSqreen::WAF

Defined in:
ext/libsqreen_extension/libsqreen_extension.c

Defined Under Namespace

Classes: Args

Class Method Summary collapse

Class Method Details

.[]=(name, rules) ⇒ Object



133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# File 'ext/libsqreen_extension/libsqreen_extension.c', line 133

static VALUE
libsqreen_waf_set(VALUE self, VALUE name, VALUE rules) {
    (void)self;
    char * pw_name;
    char * pw_rules;
    bool pw_result;
    VALUE result;

    Check_Type(name, T_STRING);
    Check_Type(rules, T_STRING);

    pw_name = StringValueCStr(name);
    pw_rules = StringValueCStr(rules);
    pw_result = pw_init(pw_name, pw_rules, &pw_config, NULL);

    result = pw_result ? Qtrue : Qfalse;

    return result;
}

.clearObject



167
168
169
170
171
172
173
174
# File 'ext/libsqreen_extension/libsqreen_extension.c', line 167

static VALUE
libsqreen_waf_clear(VALUE self) {
    (void)self;

    pw_clearAll();

    return Qnil;
}

.delete(name) ⇒ Object



153
154
155
156
157
158
159
160
161
162
163
164
165
# File 'ext/libsqreen_extension/libsqreen_extension.c', line 153

static VALUE
libsqreen_waf_delete(VALUE self, VALUE name) {
    (void)self;

    char * pw_name;

    Check_Type(name, T_STRING);

    pw_name = StringValueCStr(name);
    pw_clearRule(pw_name);

    return Qnil;
}

.log_disableObject



117
118
119
120
121
122
123
124
125
126
# File 'ext/libsqreen_extension/logging.c', line 117

VALUE
libsqreen_waf_log_disable(VALUE self) {
    (void)self;
    PW_LOG_LEVEL level = PWL_ERROR;

    pw_setupLogging(NULL, level);
    log_threshold = _PWL_AFTER_LAST;

    return Qnil;
}

.log_level=(severity) ⇒ Object



103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'ext/libsqreen_extension/logging.c', line 103

VALUE
libsqreen_waf_log_enable(VALUE self, VALUE severity) {
    (void)self;
    PW_LOG_LEVEL level;

    Check_Type(severity, T_SYMBOL);

    level = sym_to_log_level(severity);
    pw_setupLogging(on_log, level);
    log_threshold = level;

    return Qnil;
}

.loggerObject



146
147
148
149
150
151
152
153
154
155
# File 'ext/libsqreen_extension/logging.c', line 146

VALUE
libsqreen_waf_get_logger(VALUE self) {
    VALUE logger;
    ID i_logger;

    i_logger = rb_intern("@logger");
    logger = rb_ivar_get(self, i_logger);

    return logger;
}

.logger=(logger) ⇒ Object



128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
# File 'ext/libsqreen_extension/logging.c', line 128

VALUE
libsqreen_waf_set_logger(VALUE self, VALUE logger) {
    ID i_logger;

    if (logger == Qnil) {
        libsqreen_waf_log_disable(self);
    }

    i_logger = rb_intern("@logger");
    rb_ivar_set(self, i_logger, logger);

    if (logger != Qnil) {
        libsqreen_waf_log_enable(self, ID2SYM(rb_intern("error")));
    }

    return logger;
}

.run(*args) ⇒ Object



428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
# File 'ext/libsqreen_extension/libsqreen_extension.c', line 428

static VALUE
libsqreen_waf_run(int argc, const VALUE *argv, VALUE self) {
    (void)self;

    VALUE name, args, budget, max_run_budget;

    rb_scan_args(argc, argv, "31", &name, &args, &budget, &max_run_budget);

    PWRet pw_ret;
    VALUE result = rb_ary_new();

    Check_Type(name, T_STRING);
    Check_Type(args, T_HASH);
    Check_Type(budget, T_FIXNUM);
    if (!NIL_P(max_run_budget)) {
        Check_Type(max_run_budget, T_FIXNUM);
    }

    int64_t gen_budget = (int64_t)FIX2LONG(budget); // in us
    struct timespec start = get_time_mono();

    VALUE waf_args = libsqreen_waf_args_new_from_hash(args);
    PWArgs pw_args = *libsqreen_waf_args_get_boxed(waf_args);
    const char *pw_name = StringValueCStr(name);
    size_t run_budget = calc_run_budget(start, gen_budget, max_run_budget);
    if (run_budget == 0) {
        rb_ary_push(result,  ID2SYM(rb_intern("timeout")));
        rb_ary_push(result, Qnil);
        return result;
    }

    pw_ret = pw_run(pw_name, pw_args, run_budget);

    rb_ary_push(result, ret_code_to_sym(pw_ret.action));
    rb_ary_push(result, pw_ret.data == NULL ? Qnil : rb_str_new2(pw_ret.data));

    libsqreen_waf_args_invalidate(waf_args);
    pw_freeReturn(pw_ret);

    return result;
}

.set(name, rules) ⇒ Object



133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# File 'ext/libsqreen_extension/libsqreen_extension.c', line 133

static VALUE
libsqreen_waf_set(VALUE self, VALUE name, VALUE rules) {
    (void)self;
    char * pw_name;
    char * pw_rules;
    bool pw_result;
    VALUE result;

    Check_Type(name, T_STRING);
    Check_Type(rules, T_STRING);

    pw_name = StringValueCStr(name);
    pw_rules = StringValueCStr(rules);
    pw_result = pw_init(pw_name, pw_rules, &pw_config, NULL);

    result = pw_result ? Qtrue : Qfalse;

    return result;
}