/* Return the value of the "rn" parameter if exists, otherwise the user name. * The user name is normalized if needed, i.e. visual separators are removed, * the "rn" param is always normalized. */ int select_uri_rn_user(str* res, select_t* s, struct sip_msg* msg) { int ret; str val; if (select_uri_p == NULL) { if (parse_uri(res->s, res->len, &uri)<0) return -1; select_uri_p = &uri; } /* search for the "rn" parameter */ if ((ret = search_param(select_uri_p->params, "rn", 2, &val)) != 0) goto done; if (select_uri_p->sip_params.s != select_uri_p->params.s) { /* check also the original sip: URI parameters */ if ((ret = search_param(select_uri_p->sip_params, "rn", 2, &val)) != 0) goto done; } if ((select_uri_p->flags & URI_USER_NORMALIZE) == 0) RETURN0_res(select_uri_p->user); /* else normalize the user name */ val = select_uri_p->user; done: if (ret < 0) return -1; /* error */ if (!(res->s=get_static_buffer(val.len))) return -1; if ((res->len=normalize_tel_user(res->s, &val))==0) return 1; return 0; }
int select_any_params(str* res, select_t* s, struct sip_msg* msg) { str* wanted; int i; if (!msg || !res) { if (s->param_offset[select_level+1]-s->param_offset[select_level]==1) return 0; if (s->params[s->param_offset[select_level]+1].type!=SEL_PARAM_STR) return -1; wanted=&s->params[s->param_offset[select_level]+1].v.s; for (i=0; i<wanted->len; i++) if (wanted->s[i]=='_') wanted->s[i]='-'; return 0; } if (s->params[s->param_offset[select_level]+1].type!=SEL_PARAM_STR) return -1; wanted=&s->params[s->param_offset[select_level]+1].v.s; if (!res->len) return -1; if (search_param(*res, wanted->s, wanted->len, res) <= 0) { LM_DBG("uri.params.%s NOT FOUND !\n", wanted->s); return -1; } else { return (res->len) ? 0 : 1; } }
char * get_param_option(char *name) { struct param_ptr *p; p = search_param(name); return p ? to_str(p)->ptr : NULL; }
static int set_param(char *name, char *value) { struct param_ptr *p; double ppc; if (value == NULL) return 0; p = search_param(name); if (p == NULL) return 0; switch (p->type) { case P_INT: if (atoi(value) >= 0) *(int *)p->varptr = (p->inputtype == PI_ONOFF) ? str_to_bool(value, *(int *)p->varptr) : atoi(value); break; case P_NZINT: if (atoi(value) > 0) *(int *)p->varptr = atoi(value); break; case P_SHORT: *(short *)p->varptr = (p->inputtype == PI_ONOFF) ? str_to_bool(value, *(short *)p->varptr) : atoi(value); break; case P_CHARINT: *(char *)p->varptr = (p->inputtype == PI_ONOFF) ? str_to_bool(value, *(char *)p->varptr) : atoi(value); break; case P_CHAR: *(char *)p->varptr = value[0]; break; case P_STRING: *(char **)p->varptr = value; break; #if defined(USE_SSL) && defined(USE_SSL_VERIFY) case P_SSLPATH: if (value != NULL && value[0] != '\0') *(char **)p->varptr = rcFile(value); else *(char **)p->varptr = NULL; ssl_path_modified = 1; break; #endif #ifdef USE_COLOR case P_COLOR: *(int *)p->varptr = str_to_color(value); break; #endif #ifdef USE_M17N case P_CODE: *(wc_ces *) p->varptr = wc_guess_charset_short(value, *(wc_ces *) p->varptr); break; #endif case P_PIXELS: ppc = atof(value); if (ppc >= MINIMUM_PIXEL_PER_CHAR && ppc <= MAXIMUM_PIXEL_PER_CHAR * 2) *(double *)p->varptr = ppc; break; case P_SCALE: ppc = atof(value); if (ppc >= 10 && ppc <= 1000) *(double *)p->varptr = ppc; break; } return 1; }