static int fixup_b2b_logic(void** param, int param_no) { pv_elem_t *model; str s; str flags_s; int st; struct b2b_scen_fl *scf; if(param_no== 0) return 0; if(*param) { s.s = (char*)(*param); s.len = strlen(s.s); if(pv_parse_format(&s, &model)<0) { LM_ERR( "wrong format[%s]\n",(char*)(*param)); return E_UNSPEC; } /* the first parameter must be the scenario id and possible flags, must be a string */ if(param_no == 1) { if(model->spec.type != PVT_NONE ) { LM_ERR("The first parameter is not a string\n"); return -1; } scf = prepare_b2b_scen_fl_struct(); if (scf == NULL) { LM_ERR("no more pkg memory\n"); return -1; } scf->params.init_timeout = b2bl_th_init_timeout; if ( (flags_s.s = strchr(s.s,'/')) != NULL) { s.len = flags_s.s - s.s; flags_s.s++; flags_s.len = strlen(flags_s.s); /* parse flags */ for( st=0 ; st< flags_s.len ; st++ ) { switch (flags_s.s[st]) { case 't': scf->params.init_timeout = 0; while (st<flags_s.len-1 && isdigit(flags_s.s[st+1])) { scf->params.init_timeout = scf->params.init_timeout*10 + flags_s.s[st+1] - '0'; st++; } break; case 'a': scf->params.flags |= B2BL_FLAG_TRANSPARENT_AUTH; break; case 'p': scf->params.flags |= B2BL_FLAG_TRANSPARENT_TO; break; default: LM_WARN("unknown option `%c'\n", *flags_s.s); } } } if(s.len == B2B_TOP_HIDING_SCENARY_LEN && strncmp(s.s,B2B_TOP_HIDING_SCENARY,B2B_TOP_HIDING_SCENARY_LEN)==0) { scf->scenario = NULL; } else { scf->scenario = get_scenario_id_list(&s, script_scenarios); if (!scf->scenario) { LM_ERR("Wrong Scenary ID. No scenario with this ID [%.*s]\n", s.len, s.s); return E_UNSPEC; } } *param=(void*)scf; return 0; } *param = (void*)model; return 0; } LM_ERR( "null format\n"); return E_UNSPEC; }
static int fixup_b2b_logic(void** param) { str s; str flags_s; int st; struct b2b_scen_fl *scf; s = *(str*)*param; scf = prepare_b2b_scen_fl_struct(); if (scf == NULL) { LM_ERR("no more pkg memory\n"); return -1; } scf->params.init_timeout = b2bl_th_init_timeout; if ( (flags_s.s = q_memchr(s.s,'/',s.len)) != NULL) { flags_s.s++; flags_s.len = s.len - (flags_s.s - s.s); s.len = s.len - flags_s.len - 1; /* parse flags */ for( st=0 ; st< flags_s.len ; st++ ) { switch (flags_s.s[st]) { case 't': scf->params.init_timeout = 0; while (st<flags_s.len-1 && isdigit(flags_s.s[st+1])) { scf->params.init_timeout = scf->params.init_timeout*10 + flags_s.s[st+1] - '0'; st++; } break; case 'a': scf->params.flags |= B2BL_FLAG_TRANSPARENT_AUTH; break; case 'p': scf->params.flags |= B2BL_FLAG_TRANSPARENT_TO; break; default: LM_WARN("unknown option `%c'\n", *flags_s.s); } } } if(s.len == B2B_TOP_HIDING_SCENARY_LEN && strncmp(s.s,B2B_TOP_HIDING_SCENARY,B2B_TOP_HIDING_SCENARY_LEN)==0) { scf->scenario = NULL; } else { scf->scenario = get_scenario_id_list(&s, script_scenarios); if (!scf->scenario) { LM_ERR("Wrong Scenary ID. No scenario with this ID [%.*s]\n", s.len, s.s); return E_UNSPEC; } } *param=(void*)scf; return 0; }