/*! * */ int dlg_cmd_remote_profile(str *cmd, str *pname, str *value, str *puid, time_t expires, int flags) { dlg_profile_table_t *dprofile; int ret; if(cmd==NULL || cmd->s==NULL || cmd->len<=0 || pname==NULL || pname->s==NULL || pname->len<=0 || puid==NULL || puid->s==NULL || puid->len<=0) { LM_ERR("invalid parameters\n"); return -1; } dprofile = search_dlg_profile(pname); if(dprofile==NULL) { LM_ERR("profile [%.*s] not found\n", pname->len, pname->s); return -1; } if(dprofile->has_value) { if(value==NULL || value->s==NULL || value->len<=0) { LM_ERR("profile [%.*s] requires a value\n", pname->len, pname->s); return -1; } } if(cmd->len==3 && strncmp(cmd->s, "add", 3)==0) { if(value && value->s && value->len>0) { ret = dlg_add_profile(NULL, value, dprofile, puid, expires, flags); } else { ret = dlg_add_profile(NULL, NULL, dprofile, puid, expires, flags); } if(ret<0) { LM_ERR("failed to add to profile [%.*s]\n", pname->len, pname->s); return -1; } } else if(cmd->len==2 && strncmp(cmd->s, "rm", 2)==0) { ret = remove_profile(dprofile, value, puid); return ret; } else { LM_ERR("unknown command [%.*s]\n", cmd->len, cmd->s); return -1; } return 0; }
/** * json de-serialization of dialog profiles */ int dlg_json_to_profiles(dlg_cell_t *dlg, srjson_doc_t *jdoc) { srjson_t *aj = NULL; srjson_t *it = NULL; srjson_t *jt = NULL; dlg_profile_table_t *profile; str name; str val; str puid; time_t expires; int flags; if(dlg==NULL || jdoc==NULL || jdoc->buf.s==NULL) return -1; if(jdoc->root == NULL) { jdoc->root = srjson_Parse(jdoc, jdoc->buf.s); if(jdoc->root == NULL) { LM_ERR("invalid json doc [[%s]]\n", jdoc->buf.s); return -1; } } aj = srjson_GetObjectItem(jdoc, jdoc->root, "profiles"); if(aj!=NULL) { for(it=aj->child; it; it = it->next) { name.s = val.s = puid.s = NULL; expires = 0; flags = 0; for(jt = it->child; jt; jt = jt->next) { if(strcmp(jt->string, "name")==0) { name.s = jt->valuestring; name.len = strlen(name.s); } else if(strcmp(jt->string, "value")==0) { val.s = jt->valuestring; val.len = strlen(val.s); } else if(strcmp(jt->string, "puid")==0) { puid.s = jt->valuestring; puid.len = strlen(puid.s); } else if(strcmp(jt->string, "expires")==0) { expires = (time_t)SRJSON_GET_ULONG(jt); } else if(strcmp(jt->string, "flags")==0) { flags = SRJSON_GET_UINT(jt); } } if(name.s==NULL) continue; profile = search_dlg_profile(&name); if(profile==NULL) { LM_ERR("profile [%.*s] not found\n", name.len, name.s); continue; } if(val.s!=NULL) { if(profile->has_value) { if(dlg_add_profile(dlg, &val, profile, &puid, expires, flags) < 0) LM_ERR("dynamic profile cannot be added, ignore!\n"); else LM_DBG("dynamic profile added [%s : %s]\n", name.s, val.s); } } else { if(!profile->has_value) { if(dlg_add_profile(dlg, NULL, profile, &puid, expires, flags) < 0) LM_ERR("static profile cannot be added, ignore!\n"); else LM_DBG("static profile added [%s]\n", name.s); } } } } return 0; }
/** * json de-serialization of dialog profiles */ int dlg_json_to_profiles(dlg_cell_t *dlg, srjson_doc_t *jdoc) { srjson_t *sj = NULL; srjson_t *dj = NULL; srjson_t *it = NULL; dlg_profile_table_t *profile; str name; str val; if(dlg==NULL || jdoc==NULL || jdoc->buf.s==NULL) return -1; if(jdoc->root == NULL) { jdoc->root = srjson_Parse(jdoc, jdoc->buf.s); if(jdoc->root == NULL) { LM_ERR("invalid json doc [[%s]]\n", jdoc->buf.s); return -1; } } dj = srjson_GetObjectItem(jdoc, jdoc->root, "dprofiles"); sj = srjson_GetObjectItem(jdoc, jdoc->root, "sprofiles"); if(dj!=NULL) { for(it=dj->child; it; it = it->next) { name.s = it->string; name.len = strlen(name.s); val.s = it->valuestring; val.len = strlen(val.s); profile = search_dlg_profile(&name); if(profile==NULL) { LM_ERR("profile [%.*s] not found\n", name.len, name.s); continue; } if(profile->has_value) { if(dlg_add_profile(dlg, &val, profile) < 0) LM_ERR("dynamic profile cannot be added, ignore!\n"); else LM_DBG("dynamic profile added [%s : %s]\n", name.s, val.s); } } } if(sj!=NULL) { for(it=sj->child; it; it = it->next) { name.s = it->valuestring; name.len = strlen(name.s); profile = search_dlg_profile(&name); if(profile==NULL) { LM_ERR("profile [%.*s] not found\n", name.len, name.s); continue; } if(!profile->has_value) { if(dlg_add_profile(dlg, NULL, profile) < 0) LM_ERR("static profile cannot be added, ignore!\n"); else LM_DBG("static profile added [%s]\n", name.s); } } } return 0; }