[sr-dev] git:vseva/6565: debugger: create _dbg_get_json function
Victor Seva
linuxmaniac at torreviejawireless.org
Sat May 24 23:55:30 CEST 2014
Module: sip-router
Branch: vseva/6565
Commit: f9d8d2b24f8840fe9ef1acab44502d346bb77457
URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=f9d8d2b24f8840fe9ef1acab44502d346bb77457
Author: Victor Seva <linuxmaniac at torreviejawireless.org>
Committer: Victor Seva <linuxmaniac at torreviejawireless.org>
Date: Fri May 23 19:30:35 2014 +0200
debugger: create _dbg_get_json function
---
modules/debugger/debugger_api.c | 71 +++++++++++++++++++++++---------------
1 files changed, 43 insertions(+), 28 deletions(-)
diff --git a/modules/debugger/debugger_api.c b/modules/debugger/debugger_api.c
index c611fa1..9655491 100644
--- a/modules/debugger/debugger_api.c
+++ b/modules/debugger/debugger_api.c
@@ -1622,36 +1622,27 @@ int _dbg_get_obj_xavp_vals(struct sip_msg *msg,
return 0;
}
-int dbg_dump_json(struct sip_msg* msg, unsigned int mask, int level)
+int _dbg_get_json(struct sip_msg* msg, unsigned int mask, srjson_doc_t *jdoc)
{
int i;
pv_value_t value;
pv_cache_t **_pv_cache = pv_cache_get_table();
pv_cache_t *el = NULL;
- srjson_doc_t jdoc;
srjson_t *jobj = NULL;
- char *output = NULL;
str item_name = STR_NULL;
static char iname[128];
- int result = -1;
if(_pv_cache==NULL)
{
LM_ERR("cannot access pv_cache\n");
return -1;
}
+ if(jdoc==NULL){
+ LM_ERR("jdoc is null\n");
+ return -1;
+ }
memset(_dbg_xavp_dump, 0, sizeof(str*)*DBG_XAVP_DUMP_SIZE);
- srjson_InitDoc(&jdoc, NULL);
- if(jdoc.root==NULL)
- {
- jdoc.root = srjson_CreateObject(&jdoc);
- if(jdoc.root==NULL)
- {
- LM_ERR("cannot create json root\n");
- goto error;
- }
- }
for(i=0;i<PV_CACHE_SIZE;i++)
{
el = _pv_cache[i];
@@ -1684,13 +1675,13 @@ int dbg_dump_json(struct sip_msg* msg, unsigned int mask, int level)
}
else
{
- if(_dbg_get_array_avp_vals(msg, &el->spec.pvp, &jdoc, &jobj, &item_name)!=0)
+ if(_dbg_get_array_avp_vals(msg, &el->spec.pvp, jdoc, &jobj, &item_name)!=0)
{
LM_WARN("can't get value[%.*s]\n", el->pvname.len, el->pvname.s);
el = el->next;
continue;
}
- if(srjson_GetArraySize(&jdoc, jobj)==0 && !(mask&DBG_DP_NULL))
+ if(srjson_GetArraySize(jdoc, jobj)==0 && !(mask&DBG_DP_NULL))
{
el = el->next;
continue;
@@ -1705,13 +1696,13 @@ int dbg_dump_json(struct sip_msg* msg, unsigned int mask, int level)
el = el->next;
continue;
}
- if(_dbg_get_obj_xavp_vals(msg, &el->spec.pvp, &jdoc, &jobj, &item_name)!=0)
+ if(_dbg_get_obj_xavp_vals(msg, &el->spec.pvp, jdoc, &jobj, &item_name)!=0)
{
LM_WARN("can't get value[%.*s]\n", el->pvname.len, el->pvname.s);
el = el->next;
continue;
}
- if(srjson_GetArraySize(&jdoc, jobj)==0 && !(mask&DBG_DP_NULL))
+ if(srjson_GetArraySize(jdoc, jobj)==0 && !(mask&DBG_DP_NULL))
{
el = el->next;
continue;
@@ -1730,7 +1721,7 @@ int dbg_dump_json(struct sip_msg* msg, unsigned int mask, int level)
{
if(mask&DBG_DP_NULL)
{
- jobj = srjson_CreateNull(&jdoc);
+ jobj = srjson_CreateNull(jdoc);
}
else
{
@@ -1738,9 +1729,9 @@ int dbg_dump_json(struct sip_msg* msg, unsigned int mask, int level)
continue;
}
}else if(value.flags&(PV_VAL_INT)){
- jobj = srjson_CreateNumber(&jdoc, value.ri);
+ jobj = srjson_CreateNumber(jdoc, value.ri);
}else if(value.flags&(PV_VAL_STR)){
- jobj = srjson_CreateStr(&jdoc, value.rs.s, value.rs.len);
+ jobj = srjson_CreateStr(jdoc, value.rs.s, value.rs.len);
}else {
LM_WARN("el->pvname[%.*s] value[%d] unhandled\n", el->pvname.len, el->pvname.s,
value.flags);
@@ -1757,23 +1748,47 @@ int dbg_dump_json(struct sip_msg* msg, unsigned int mask, int level)
}
if(jobj!=NULL)
{
- srjson_AddItemToObject(&jdoc, jdoc.root, iname, jobj);
+ srjson_AddItemToObject(jdoc, jdoc->root, iname, jobj);
}
el = el->next;
}
}
+ return 0;
+
+error:
+ srjson_DestroyDoc(jdoc);
+ return -1;
+}
+
+int dbg_dump_json(struct sip_msg* msg, unsigned int mask, int level)
+{
+ char *output = NULL;
+ srjson_doc_t jdoc;
+
+ srjson_InitDoc(&jdoc, NULL);
+ if(jdoc.root==NULL)
+ {
+ jdoc.root = srjson_CreateObject(&jdoc);
+ if(jdoc.root==NULL)
+ {
+ LM_ERR("cannot create json root\n");
+ goto error;
+ }
+ }
+
+ if(_dbg_get_json(msg, mask, &jdoc)<0) return -1;
output = srjson_PrintUnformatted(&jdoc, jdoc.root);
if(output==NULL)
{
LM_ERR("cannot print json doc\n");
- goto error;
+ srjson_DestroyDoc(&jdoc);
}
LOG(level, "%s\n", output);
- result = 0;
+ jdoc.free_fn(output);
+ srjson_DestroyDoc(&jdoc);
+ return 0;
error:
- if(output!=NULL) jdoc.free_fn(output);
srjson_DestroyDoc(&jdoc);
-
- return result;
-}
+ return -1;
+}
\ No newline at end of file
More information about the sr-dev
mailing list