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 <[email protected]>
Committer: Victor Seva <[email protected]>
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


_______________________________________________
sr-dev mailing list
[email protected]
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to