int pv_set_dlg_val(struct sip_msg* msg, pv_param_t *param, int op, pv_value_t *val) { struct dlg_cell *dlg; if ( (dlg=get_current_dialog())==NULL ) return -1; if (param==NULL || param->pvn.type!=PV_NAME_INTSTR || param->pvn.u.isname.type!=AVP_NAME_STR || param->pvn.u.isname.name.s.s==NULL ) { LM_CRIT("BUG - bad parameters\n"); return -1; } if (val==NULL || val->flags&(PV_VAL_NONE|PV_VAL_NULL|PV_VAL_EMPTY)) { /* if NULL, remove the value */ if (store_dlg_value( dlg, ¶m->pvn.u.isname.name.s, NULL)!=0) { LM_ERR("failed to delete dialog values <%.*s>\n", param->pvn.u.isname.name.s.len,param->pvn.u.isname.name.s.s); return -1; } } else { /* if value, must be string */ if ( !(val->flags&PV_VAL_STR)) { LM_ERR("non-string values are not supported\n"); return -1; } if (store_dlg_value( dlg, ¶m->pvn.u.isname.name.s, &val->rs)!=0) { LM_ERR("failed to store dialog values <%.*s>\n", param->pvn.u.isname.name.s.len,param->pvn.u.isname.name.s.s); return -1; } } return 0; }
int set_dlg_shtag(struct dlg_cell *dlg, str *tag_name) { if (get_shtag(tag_name, 1) == NULL) { LM_ERR("Unable to fetch sharing tag\n"); return -1; } if (store_dlg_value(dlg, &shtag_dlg_val, tag_name) < 0) { LM_ERR("Failed to store dlg value for sharing tag\n"); return -1; } return 0; }
int w_store_dlg_value(struct sip_msg *msg, char *name, char *val) { struct dlg_cell *dlg; pv_elem_t *pve = (pv_elem_t *)val; str val_s; if ( (dlg=get_current_dialog())==NULL ) return -1; if ( pve==NULL || pv_printf_s(msg, pve, &val_s)!=0 || val_s.len == 0 || val_s.s == NULL) { LM_WARN("cannot get string for value\n"); return -1; } return (store_dlg_value( dlg, (str*)name, &val_s)==0)?1:-1; }
static void read_dialog_vars(char *b, int l, struct dlg_cell *dlg) { str name, val; char *end; char *p; end = b + l; p = b; do { /* read a new pair from input string */ p = read_pair( p, end, &name, &val); if (p==NULL) break; if (val.len==0) continue; LM_DBG("new var found <%.*s>=<%.*s>\n",name.len,name.s,val.len,val.s); /* add the variable */ if (store_dlg_value( dlg, &name, &val)!=0) LM_ERR("failed to add val, skipping...\n"); } while(p!=end); }