Example #1
0
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;
}
Example #2
0
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;
}