示例#1
0
int select_uri_params(str* res, select_t* s, struct sip_msg* msg)
{
	int	ret;
	if (!msg || !res) {
		return select_any_params(res, s, msg);
	}

	if (select_uri_p == NULL) {
		if (parse_uri(res->s, res->len, &uri)<0)
			return -1;
		select_uri_p = &uri;
	}
	
	if (s->param_offset[select_level+1]-s->param_offset[select_level]==1)
		RETURN0_res(select_uri_p->params);

	*res=select_uri_p->params;
	ret = select_any_params(res, s, msg);
	if ((ret < 0)
		&& (select_uri_p->sip_params.s != NULL)
		&& (select_uri_p->sip_params.s != select_uri_p->params.s)
	) {
		/* Search also in the original sip: uri parameters. */
		*res = select_uri_p->sip_params;
		ret = select_any_params(res, s, msg);
	}
	return ret;
}
示例#2
0
int select_uri_params(str* res, select_t* s, struct sip_msg* msg)
{
	if (!msg || !res) {
		return select_any_params(res, s, msg);
	}

	if (parse_uri(res->s, res->len, &uri)<0)
		return -1;
	
	if (s->param_offset[s->lvl+1]-s->param_offset[s->lvl]==1)
		RETURN0_res(uri.params);

	*res=uri.params;
	return select_any_params(res, s, msg);
}
示例#3
0
int select_nameaddr_params(str* res, select_t* s, struct sip_msg* msg)
{
	char *p;
	
	p=find_not_quoted(res, '<');
	if (!p) {
		p=find_not_quoted(res, ';');
	} else {
		res->len=res->len - (p-res->s) -1;
		res->s=p +1;
		p=find_not_quoted(res, '>');
		if (!p) {
			LM_ERR("no > found, invalid nameaddr value\n");
			return -1;
		}
		res->len=res->len - (p-res->s) -1;
		res->s=p +1;
		
		p=find_not_quoted(res, ';');
	}
	if (!p) return 1;
	
	res->len=res->len - (p-res->s) -1;
	res->s=p +1;
	
	if (s->param_offset[select_level+1]-s->param_offset[select_level]==1)
		return (res->len ? 0 : 1);

	return select_any_params(res, s, msg);
}