From: Nick Porter Date: Mon, 9 Jun 2025 15:40:39 +0000 (+0100) Subject: Add mruby Pair class X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d32ce6e49fe4c626ca96fe2cf2c65e61f6ea94b7;p=thirdparty%2Ffreeradius-server.git Add mruby Pair class For leaf pairs --- diff --git a/src/modules/rlm_mruby/mruby.c b/src/modules/rlm_mruby/mruby.c index 9344f298ad1..2acf107b153 100644 --- a/src/modules/rlm_mruby/mruby.c +++ b/src/modules/rlm_mruby/mruby.c @@ -195,3 +195,14 @@ struct RClass *mruby_pair_list_class(mrb_state *mrb, struct RClass *parent) return pair_list; } +struct RClass *mruby_pair_class(mrb_state *mrb, struct RClass *parent) +{ + struct RClass *pair; + + pair = mrb_define_class_under(mrb, parent, "Pair", mrb->object_class); + MRB_SET_INSTANCE_TT(pair, MRB_TT_DATA); + + mrb_define_method(mrb, pair, "initialize", mruby_pair_init, MRB_ARGS_ARG(5,1)); + + return pair; +} diff --git a/src/modules/rlm_mruby/rlm_mruby.c b/src/modules/rlm_mruby/rlm_mruby.c index 317395a2e2b..fe51726c4ad 100644 --- a/src/modules/rlm_mruby/rlm_mruby.c +++ b/src/modules/rlm_mruby/rlm_mruby.c @@ -202,6 +202,8 @@ static int mod_instantiate(module_inst_ctx_t const *mctx) inst->mruby_request = mruby_request_class(mrb, inst->mruby_module); inst->mruby_pair_list = mruby_pair_list_class(mrb, inst->mruby_module); + inst->mruby_pair = mruby_pair_class(mrb, inst->mruby_module); + inst->mruby_ptr = mrb_define_class_under(mrb, inst->mruby_module, "Ptr", mrb->object_class); MRB_SET_INSTANCE_TT(inst->mruby_ptr, MRB_TT_DATA); diff --git a/src/modules/rlm_mruby/rlm_mruby.h b/src/modules/rlm_mruby/rlm_mruby.h index 51c5586a87b..161dc1b0d6b 100644 --- a/src/modules/rlm_mruby/rlm_mruby.h +++ b/src/modules/rlm_mruby/rlm_mruby.h @@ -51,11 +51,13 @@ typedef struct { struct RClass *mruby_request; struct RClass *mruby_ptr; struct RClass *mruby_pair_list; + struct RClass *mruby_pair; mrb_value mrubyconf_hash; } rlm_mruby_t; struct RClass *mruby_request_class(mrb_state *mrb, struct RClass *parent); struct RClass *mruby_pair_list_class(mrb_state *mrb, struct RClass *parent); +struct RClass *mruby_pair_class(mrb_state *mrb, struct RClass *parent); mrb_value mruby_inst_object(mrb_state *mrb, struct RClass *klass, rlm_mruby_t const *inst); mrb_value mruby_request_object(mrb_state *mrb, struct RClass *klass, request_t *request); mrb_value mruby_value_pair_object(mrb_state *mrb, struct RClass *klass, fr_pair_t *vp);