mCfgGrp *mms_get_multi_by_field(mCfg *cfg, Octstr *name, Octstr *field, Octstr *value) { gw_assert(name); gw_assert(is_multigroup(name) == 1); if (!valid_in_group(name, field)) panic(0, "Request for invalid field/variable `%s' in group `%s', unexpected!", octstr_get_cstr(field), octstr_get_cstr(name)); if (cfg->xcfg == NULL) { mCfgGrp *grp; Octstr *val; List *r; int i; r = dict_get(cfg->grps, name); if (r) for (i = 0; i < gwlist_len(r); i++) if ((grp = gwlist_get(r, i)) != NULL && (val = dict_get(grp->fields, field)) != NULL && octstr_compare(val, value) == 0) return grp; return NULL; } else return cfg->cfg_funcs->get_multi_by_field(cfg->xcfg, name, field, value); }
static void check_and_add_field(mCfgGrp *grp, Octstr *field, Octstr *value, int lineno) { if (!valid_in_group(grp->name, field)) mms_info(0, "mms_cfg", NULL, "field `%s' is not expected within group `%s' at line %d in conf file - skipped", octstr_get_cstr(field), octstr_get_cstr(grp->name), lineno); else if (dict_put_once(grp->fields, field, octstr_duplicate(value)) == 0) mms_error(0, "mms_cfg", NULL, "Duplicate field `%s' at line %d in conf file, ignored", octstr_get_cstr(field), lineno); }
Octstr *mms_cfg_get(mCfgGrp *grp, Octstr *name) { Octstr *val; gw_assert(grp); if (!valid_in_group(grp->name, name)) panic(0, "Request for invalid field/variable `%s' in group `%s', unexpected!", octstr_get_cstr(name), octstr_get_cstr(grp->name)); val = dict_get(grp->fields, name); if (!val) return NULL; else return octstr_duplicate(val); }
Octstr *mms_cfg_get(mCfg *cfg, mCfgGrp *grp, Octstr *name) { Octstr *val; Octstr *grp_name = cfg->xcfg ? cfg->cfg_funcs->get_grp_name(cfg->xcfg, grp) : octstr_duplicate(grp->name); if (!valid_in_group(grp_name, name)) panic(0, "Request for invalid field/variable `%s' in group `%s', unexpected!", octstr_get_cstr(name), octstr_get_cstr(grp_name)); octstr_destroy(grp_name); if (cfg->xcfg == NULL) { gw_assert(grp); val = dict_get(grp->fields, name); val = octstr_duplicate(val); } else { val = cfg->cfg_funcs->get(cfg->xcfg, grp, name); if (val) fixup_value(val, 0); } return val; }