/* * Create a new sublist. */ static indexed_modcallable *new_sublist(rbtree_t *components, int comp, int idx) { indexed_modcallable *c; c = lookup_by_index(components, comp, idx); /* It is an error to try to create a sublist that already * exists. It would almost certainly be caused by accidental * duplication in the config file. * * index 0 is the exception, because it is used when we want * to collect _all_ listed modules under a single index by * default, which is currently the case in all components * except authenticate. */ if (c) { if (idx == 0) { return c; } return NULL; } c = rad_malloc(sizeof(*c)); c->modulelist = NULL; c->comp = comp; c->idx = idx; if (!rbtree_insert(components, c)) { free(c); return NULL; } return c; }
rlm_rcode_t indexed_modcall(int comp, int idx, REQUEST *request) { rlm_rcode_t rcode; modcallable *list = NULL; virtual_server_t *server; /* * Hack to find the correct virtual server. */ server = virtual_server_find(request->server); if (!server) { RDEBUG("No such virtual server \"%s\"", request->server); return RLM_MODULE_FAIL; } if (idx == 0) { list = server->mc[comp]; if (!list) RWDEBUG2("Empty %s section. Using default return values.", section_type_value[comp].section); } else { indexed_modcallable *this; this = lookup_by_index(server->components, comp, idx); if (this) { list = this->modulelist; } else { RWDEBUG2("Unknown value specified for %s. Cannot perform requested action.", section_type_value[comp].typename); } } if (server->subcs[comp]) { if (idx == 0) { RDEBUG("# Executing section %s from file %s", section_type_value[comp].section, cf_section_filename(server->subcs[comp])); } else { RDEBUG("# Executing group from file %s", cf_section_filename(server->subcs[comp])); } } request->component = section_type_value[comp].section; rcode = modcall(comp, list, request); request->module = ""; request->component = "<core>"; return rcode; }
Json::Value json_of_paudio_settings( const paudio_settings_t &settings, portaudio::System &pa_system ) { Json::Value root; root["sample_rate"] = settings.sample_rate; root["host_api"] = lookup_by_index(paudio_api_names, settings.host_api); root["device"] = pa_system.deviceByIndex(settings.device).name(); root["latency"] = settings.latency; root["buffer_length"] = settings.buffer_length; root["channels"] = settings.channels; return root; }
static int indexed_modcall(int comp, int idx, REQUEST *request) { indexed_modcallable *this; this = lookup_by_index(components[comp], idx); if (!this) { /* Return a default value appropriate for the component */ switch(comp) { case RLM_COMPONENT_AUTZ: return RLM_MODULE_NOTFOUND; case RLM_COMPONENT_AUTH: return RLM_MODULE_REJECT; case RLM_COMPONENT_PREACCT: return RLM_MODULE_NOOP; case RLM_COMPONENT_ACCT: return RLM_MODULE_NOOP; case RLM_COMPONENT_SESS: return RLM_MODULE_FAIL; case RLM_COMPONENT_PRE_PROXY: return RLM_MODULE_NOOP; case RLM_COMPONENT_POST_PROXY: return RLM_MODULE_NOOP; case RLM_COMPONENT_POST_AUTH: return RLM_MODULE_NOOP; default: return RLM_MODULE_FAIL; } } return modcall(comp, this->modulelist, request); }