<div style="line-height:1.7;color:#000000;font-size:14px;font-family:Arial"><span style="line-height: 23.7999992370605px;">One more question based the last mail, if I want to return the j object pointer via PV to script( created as </span><span style="line-height: 23.7999992370605px;">struct json_object *j = json_tokener_parse(json_s.s);</span><span style="line-height: 23.7999992370605px;">), how can I achieve that? Then I can put the pointer back to another exported api and release the pointer via json_object_put, thanks!</span><br><br><br><br><br><div></div><div id="divNeteaseMailCard"></div><br>At 2014-11-05 17:54:46, "dongwf" <dongwflj@163.com> wrote:<br> <blockquote id="isReplyContent" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid"><div style="line-height:1.7;color:#000000;font-size:14px;font-family:Arial"><div>Hi:</div><div>I am trying to use json module in script with json_get_field exported api, I found in it's implementation, the api will call struct json_object *j = json_tokener_parse(json_s.s); but didn't call json_object_put for this j object, then the object will leak. So my question is how to release the new j object? We can't release in json_get_field(), that will cause the returned string become to rubbish, thanks!</div><div>Below is the api's code in module\json\json_funcs.c:</div><div><div>int json_get_field(struct sip_msg* msg, char* json, char* field, char* dst)</div><div>{</div><div>  str json_s;</div><div>  str field_s;</div><div>  pv_spec_t *dst_pv;</div><div>  pv_value_t dst_val;</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">       </span>if (fixup_get_svalue(msg, (gparam_p)json, &json_s) != 0) {</div><div><span class="Apple-tab-span" style="white-space:pre">               </span>LM_ERR("cannot get json string value\n");</div><div><span class="Apple-tab-span" style="white-space:pre">          </span>return -1;</div><div><span class="Apple-tab-span" style="white-space:pre">   </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">   </span>if (fixup_get_svalue(msg, (gparam_p)field, &field_s) != 0) {</div><div><span class="Apple-tab-span" style="white-space:pre">             </span>LM_ERR("cannot get field string value\n");</div><div><span class="Apple-tab-span" style="white-space:pre">         </span>return -1;</div><div><span class="Apple-tab-span" style="white-space:pre">   </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">    </span></div><div><span class="Apple-tab-span" style="white-space:pre">     </span>dst_pv = (pv_spec_t *)dst;</div><div><span class="Apple-tab-span" style="white-space:pre">   </span></div><div><span class="Apple-tab-span" style="white-space:pre">     </span>struct json_object *j = json_tokener_parse(json_s.s);</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">       </span>if (is_error(j)) {</div><div><span class="Apple-tab-span" style="white-space:pre">           </span>LM_ERR("empty or invalid JSON\n");</div><div><span class="Apple-tab-span" style="white-space:pre">         </span>return -1;</div><div><span class="Apple-tab-span" style="white-space:pre">   </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">   </span>char *value = (char*)json_object_to_json_string(json_object_object_get(j, field_s.s));</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">      </span>dst_val.rs.s = value;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>dst_val.rs.len = strlen(value);</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>dst_val.flags = PV_VAL_STR;</div><div><span class="Apple-tab-span" style="white-space:pre">  </span>dst_pv->setf(msg, &dst_pv->pvp, (int)EQ_T, &dst_val);</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>return 1;</div><div>}</div></div><br><blockquote id="isReplyContent" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid"><br>
</blockquote></div><br><br><span title="neteasefooter"><span id="netease_mail_footer"></span></span></blockquote></div><br><br><span title="neteasefooter"><span id="netease_mail_footer"></span></span>