*/
bool unlang_section(CONF_SECTION *cs)
{
- unlang_t *instruction = NULL;
-
- instruction = (unlang_t *)cf_data_value(cf_data_find(cs, unlang_group_t, NULL));
- if (instruction) return true;
-
- return false;
+ return (cf_data_find(cs, unlang_group_t, NULL) != NULL);
}
/** Register an operation with the interpreter
}
-static unlang_action_t unlang_call_run(REQUEST *request, rlm_rcode_t *presult)
+static unlang_action_t unlang_call_child(REQUEST *request, rlm_rcode_t *presult)
{
unlang_stack_t *stack = request->stack;
unlang_stack_frame_t *frame = &stack->frame[stack->depth];
return UNLANG_ACTION_YIELD;
}
- frame->process = unlang_call_run;
- return unlang_call_run(request, presult);
+ frame->interpret = unlang_call_child;
+ return unlang_call_child(request, presult);
}
static unlang_action_t unlang_call(REQUEST *request, rlm_rcode_t *presult)
*/
unlang_interpret_push(child, g->children, frame->result,
UNLANG_NEXT_SIBLING, UNLANG_TOP_FRAME);
- frame->process = unlang_call_process;
+ frame->interpret = unlang_call_process;
frame->state = child;
return unlang_call_process(request, presult);
}
unlang_register(UNLANG_TYPE_CALL,
&(unlang_op_t){
.name = "call",
- .func = unlang_call,
+ .interpret = unlang_call,
.signal = unlang_call_signal,
.debug_braces = true
});
unlang_register(UNLANG_TYPE_IF,
&(unlang_op_t){
.name = "if",
- .func = unlang_if,
+ .interpret = unlang_if,
.debug_braces = true
});
unlang_register(UNLANG_TYPE_ELSE,
&(unlang_op_t){
.name = "else",
- .func = unlang_group,
+ .interpret = unlang_group,
.debug_braces = true
});
unlang_register(UNLANG_TYPE_ELSIF,
&(unlang_op_t){
.name = "elseif",
- .func = unlang_if,
+ .interpret = unlang_if,
.debug_braces = true
});
}
#endif
talloc_set_destructor(foreach, _free_unlang_frame_state_foreach);
- frame->process = unlang_foreach_next;
+ frame->interpret = unlang_foreach_next;
return unlang_foreach_next(request, presult);
}
unlang_register(UNLANG_TYPE_FOREACH,
&(unlang_op_t){
.name = "foreach",
- .func = unlang_foreach,
+ .interpret = unlang_foreach,
.debug_braces = true
});
unlang_register(UNLANG_TYPE_BREAK,
&(unlang_op_t){
.name = "break",
- .func = unlang_break,
+ .interpret = unlang_break,
});
}
unlang_register(UNLANG_TYPE_FUNCTION,
&(unlang_op_t){
.name = "function",
- .func = unlang_function_call,
+ .interpret = unlang_function_call,
.debug_braces = false,
.frame_state_size = sizeof(unlang_frame_state_func_t),
.frame_state_name = "unlang_frame_state_func_t",
unlang_register(UNLANG_TYPE_GROUP,
&(unlang_op_t){
.name = "group",
- .func = unlang_group,
+ .interpret = unlang_group,
.debug_braces = true
});
unlang_register(UNLANG_TYPE_POLICY,
&(unlang_op_t){
.name = "policy",
- .func = unlang_policy,
+ .interpret = unlang_policy,
.debug_braces = true
});
}
op = &unlang_ops[instruction->type];
- frame->process = op->func;
+ frame->interpret = op->interpret;
frame->signal = op->signal;
/*
RDEBUG4("** [%i] %s >> %s", stack->depth, __FUNCTION__,
unlang_ops[instruction->type].name);
- rad_assert(frame->process != NULL);
- action = frame->process(request, result);
+ rad_assert(frame->interpret != NULL);
+ action = frame->interpret(request, result);
RDEBUG4("** [%i] %s << %s (%d)", stack->depth, __FUNCTION__,
fr_table_str_by_value(unlang_action_table, action, "<INVALID>"), *priority);
#define UNLANG_TOP_FRAME (true)
#define UNLANG_SUB_FRAME (false)
-/** Function to call when first evaluating a frame
+/** Function to call when interpreting a frame
*
* @param[in] request The current request.
* @param[in,out] presult Pointer to the current rcode, may be modified by the function.
* @return an action for the interpreter to perform.
*/
-typedef unlang_action_t (*unlang_op_call_t)(REQUEST *request, rlm_rcode_t *presult);
+typedef unlang_action_t (*unlang_op_interpret_t)(REQUEST *request, rlm_rcode_t *presult);
/** Function to call if the initial function yielded and the request was signalled
*
* This is the operation specific cancellation function. This function will usually
* either call a more specialised cancellation function set when something like a module yielded,
- * or just cleanup the state of the original #unlang_op_call_t.
+ * or just cleanup the state of the original #unlang_op_interpret_t.
*
* @param[in] request The current request.
* @param[in] action We're being signalled with.
typedef struct {
char const *name; //!< Name of the operation.
- unlang_op_call_t func; //!< Called when we start the operation.
+ unlang_op_interpret_t interpret; //!< Function to interpret the keyword
- unlang_op_signal_t signal; //!< Called if the request is to be destroyed
- ///< and we need to cleanup any residual state.
+ unlang_op_signal_t signal; //!< Function to signal stop / dup / whatever
bool debug_braces; //!< Whether the operation needs to print braces
///< in debug mode.
*/
redundant->child = NULL;
- frame->process = unlang_load_balance_next;
+ frame->interpret = unlang_load_balance_next;
return unlang_load_balance_next(request, presult);
}
unlang_register(UNLANG_TYPE_LOAD_BALANCE,
&(unlang_op_t){
.name = "load-balance group",
- .func = unlang_load_balance,
+ .interpret = unlang_load_balance,
.debug_braces = true,
.frame_state_size = sizeof(unlang_frame_state_redundant_t),
.frame_state_name = "unlang_frame_state_redundant_t",
unlang_register(UNLANG_TYPE_REDUNDANT_LOAD_BALANCE,
&(unlang_op_t){
.name = "redundant-load-balance group",
- .func = unlang_redundant_load_balance,
+ .interpret = unlang_redundant_load_balance,
.debug_braces = true,
.frame_state_size = sizeof(unlang_frame_state_redundant_t),
.frame_state_name = "unlang_frame_state_redundant_t",
/*
* Call list_mod_create
*/
- frame->process = list_mod_create;
+ frame->interpret = list_mod_create;
return list_mod_create(request, presult);
}
* Set this BEFORE doing anything else, as we will be
* called again after unlang_xlat_push() returns.
*/
- frame->process = map_proc_apply;
+ frame->interpret = map_proc_apply;
/*
* Expand the map source
unlang_register(UNLANG_TYPE_FILTER,
&(unlang_op_t){
.name = "filter",
- .func = unlang_update_state_init,
+ .interpret = unlang_update_state_init,
.debug_braces = true
});
unlang_register(UNLANG_TYPE_UPDATE,
&(unlang_op_t){
.name = "update",
- .func = unlang_update_state_init,
+ .interpret = unlang_update_state_init,
.debug_braces = true
});
unlang_register(UNLANG_TYPE_MAP,
&(unlang_op_t){
.name = "map",
- .func = unlang_map_state_init,
+ .interpret = unlang_map_state_init,
.frame_state_size = sizeof(unlang_frame_state_map_proc_t),
.frame_state_name = "unlang_frame_state_map_proc_t",
});
state->resume = resume;
state->signal = signal;
- frame->process = unlang_module_resume;
+ frame->interpret = unlang_module_resume;
return RLM_MODULE_YIELD;
}
if (stack_depth < stack->depth) return UNLANG_ACTION_PUSHED_CHILD;
rad_assert(stack_depth == stack->depth);
*presult = rcode;
- frame->process = unlang_module_resume;
+ frame->interpret = unlang_module_resume;
return UNLANG_ACTION_YIELD;
}
unlang_register(UNLANG_TYPE_MODULE,
&(unlang_op_t){
.name = "module",
- .func = unlang_module,
+ .interpret = unlang_module,
.signal = unlang_module_signal,
.frame_state_size = sizeof(unlang_frame_state_module_t),
.frame_state_name = "unlang_frame_state_module_t",
state->children[i].instruction = instruction;
}
- frame->process = unlang_parallel_process;
+ frame->interpret = unlang_parallel_process;
return unlang_parallel_process(request, presult);
}
unlang_register(UNLANG_TYPE_PARALLEL,
&(unlang_op_t){
.name = "parallel",
- .func = unlang_parallel,
+ .interpret = unlang_parallel,
.signal = unlang_parallel_signal,
.debug_braces = true
});
unlang_register(UNLANG_TYPE_RETURN,
&(unlang_op_t){
.name = "return",
- .func = unlang_return,
+ .interpret = unlang_return,
});
}
RDEBUG2("Creating subrequest (%s)", child->name);
log_request_pair_list(L_DBG_LVL_1, request, child->packet->vps, NULL);
- frame->process = unlang_subrequest_process;
+ frame->interpret = unlang_subrequest_process;
return unlang_subrequest_process(request, presult);
}
state->persist = true;
state->child = child;
- frame->process = unlang_subrequest_process;
+ frame->interpret = unlang_subrequest_process;
}
int unlang_subrequest_op_init(void)
unlang_register(UNLANG_TYPE_SUBREQUEST,
&(unlang_op_t){
.name = "subrequest",
- .func = unlang_subrequest_state_init,
+ .interpret = unlang_subrequest_state_init,
.signal = unlang_subrequest_signal,
.debug_braces = true,
.frame_state_size = sizeof(unlang_frame_state_subrequest_t),
unlang_register(UNLANG_TYPE_DETACH,
&(unlang_op_t){
.name = "detach",
- .func = unlang_detach,
+ .interpret = unlang_detach,
.frame_state_size = sizeof(unlang_frame_state_detach_t),
.frame_state_name = "unlang_frame_state_detach_t",
});
unlang_register(UNLANG_TYPE_SWITCH,
&(unlang_op_t){
.name = "switch",
- .func = unlang_switch,
+ .interpret = unlang_switch,
.debug_braces = true
});
unlang_register(UNLANG_TYPE_CASE,
&(unlang_op_t){
.name = "case",
- .func = unlang_case,
+ .interpret = unlang_case,
.debug_braces = true
});
}
unlang_t *instruction; //!< The unlang node we're evaluating.
unlang_t *next; //!< The next unlang node we will evaluate
- unlang_op_call_t process; //!< function to call for processing this stack frame
+ unlang_op_interpret_t interpret; //!< function to call for interpreting this stack frame
unlang_op_signal_t signal; //!< function to call when signalling this stack frame
/** Stack frame specialisations
unlang_stack_frame_t *frame = &stack->frame[stack->depth];
unlang_frame_state_xlat_t *state = talloc_get_type_abort(frame->state, unlang_frame_state_xlat_t);
- frame->process = unlang_xlat_resume;
+ frame->interpret = unlang_xlat_resume;
/*
* Over-ride whatever functions were there before.
unlang_register(UNLANG_TYPE_XLAT,
&(unlang_op_t){
.name = "xlat_eval",
- .func = unlang_xlat,
+ .interpret = unlang_xlat,
.signal = unlang_xlat_signal,
.debug_braces = false,
.frame_state_size = sizeof(unlang_frame_state_xlat_t),
unlang_register(UNLANG_TYPE_XLAT_INLINE,
&(unlang_op_t){
.name = "xlat_inline",
- .func = unlang_xlat_inline,
+ .interpret = unlang_xlat_inline,
.debug_braces = false
});
}