MCPcopy Create free account
hub / github.com/OpenSIPS/opensips / mi_xmlrpc_get_param

Function mi_xmlrpc_get_param

modules/mi_xmlrpc/http_fnc.c:316–420  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

314}
315
316static int mi_xmlrpc_get_param(xmlNodePtr value_node, mi_item_t *req_params_item,
317 const char *name)
318{
319 static str esc_buf = {NULL, 0};
320 str val = {NULL, 0}, esc_val = {NULL, 0};
321 xmlNodePtr string_node = NULL;
322 xmlNodePtr int_node = NULL;
323 xmlNodePtr array_node = NULL;
324 int intval;
325 mi_item_t *param_item;
326
327 string_node = mi_xmlNodeGetNodeByName(value_node->children,
328 MI_XMLRPC_XML_STRING_NODE);
329 if (string_node) {
330 val.s = (char*)xmlNodeGetContent(string_node);
331 if(val.s==NULL){
332 LM_ERR("No content for node [%s]\n",
333 string_node->name);
334 return 1;
335 }
336 val.len = strlen(val.s);
337 if(val.len==0){
338 LM_ERR("Empty content for node [%s]\n",
339 string_node->name);
340 return 1;
341 }
342
343 if (val.len > esc_buf.len) {
344 esc_buf.s = shm_realloc(esc_buf.s, val.len);
345 if (!esc_buf.s) {
346 LM_ERR("No more shm memory\n");
347 esc_buf.len = 0;
348 return -1;
349 }
350 esc_buf.len = val.len;
351 }
352
353 esc_val.s = esc_buf.s;
354 esc_val.len = unescape_xml(esc_val.s, val.s, val.len);
355 LM_DBG("got escaped string param [%.*s]\n", esc_val.len, esc_val.s);
356
357 xmlFree(val.s);
358
359 param_item = cJSON_CreateStr(esc_val.s, esc_val.len);
360 if (!param_item) {
361 LM_ERR("Failed to create string item in temporary json request\n");
362 return -1;
363 }
364
365 if (name)
366 cJSON_AddItemToObject(req_params_item, name, param_item);
367 else
368 cJSON_AddItemToArray(req_params_item, param_item);
369
370 return 0;
371 }
372
373 int_node = mi_xmlNodeGetNodeByName(value_node->children,

Callers 3

mi_xmlrpc_parse_paramsFunction · 0.85

Calls 9

mi_xmlNodeGetNodeByNameFunction · 0.85
shm_reallocFunction · 0.85
unescape_xmlFunction · 0.85
cJSON_CreateStrFunction · 0.85
str2sintFunction · 0.85
cJSON_AddItemToObjectFunction · 0.50
cJSON_AddItemToArrayFunction · 0.50
cJSON_CreateNumberFunction · 0.50

Tested by

no test coverage detected