module LibSqreen::WAF

Public Class Methods

[]=(p1, p2) click to toggle source
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;
}
clear() click to toggle source
static VALUE
libsqreen_waf_clear(VALUE self) {
    (void)self;

    pw_clearAll();

    return Qnil;
}
delete(p1) click to toggle source
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;
}
run(p1, p2, p3, p4 = v4) click to toggle source
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(p1, p2) click to toggle source
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;
}