[sr-dev] dlg_handlers.c BUG or missing initialization
Daniel-Constantin Mierla
miconda at gmail.com
Wed Feb 10 17:50:47 CET 2010
Hi Torben,
thanks for the patch. I will take care, just on question, is it for 1.5
or 3.0?
Daniel
On 2/10/10 12:31 PM, Torben Friese wrote:
> Hi all,
>
> we had problems with some callback-functions. The problem is isolated to
> the unref_new_dialog function in dlg_handlers.c
>
> If the whole tmcb_params structure is not initialized, we run into
> segfaults in a later usage.
>
>
> here a patch for this problem ("inspired" by openSIPS code)
>
>
> @@ -417,7 +420,7 @@
> void unref_new_dialog(void *dialog)
> {
> struct tmcb_params p;
> -
> + memset(&p, 0, sizeof(struct tmcb_params));
> p.param = (void*)&dialog;
> dlg_onreply(0, TMCB_TRANS_DELETED,&p);
> }
>
>
> Down below the whole patch for the dlg_handlers.c file, the second thing
> is a extra control part for FAKED_REPLY's in the dlg_onreply function.
>
> I hope this is useful.
>
> best regards
>
> Torben Friese
>
>
>
>
> Index: modules/dialog/dlg_handlers.c
> ===================================================================
> --- modules/dialog/dlg_handlers.c (revision 5983)
> +++ modules/dialog/dlg_handlers.c (working copy)
> @@ -280,24 +280,27 @@
> if (new_state==DLG_STATE_CONFIRMED_NA&&
> old_state!=DLG_STATE_CONFIRMED_NA&& old_state!=DLG_STATE_CONFIRMED )
> {
> LM_DBG("dialog %p confirmed\n",dlg);
> -
> - /* get to tag*/
> - if ( !rpl->to&& ((parse_headers(rpl, HDR_TO_F,0)<0) || !rpl->to) ) {
> - LM_ERR("bad reply or missing TO hdr :-/\n");
> - tag.s = 0;
> - tag.len = 0;
> - } else {
> - tag = get_to(rpl)->tag_value;
> - if (tag.s==0 || tag.len==0) {
> - LM_ERR("missing TAG param in TO hdr :-/\n");
> + if (rpl != FAKED_REPLY) {
> + /* get to tag*/
> + if ( !rpl->to&& ((parse_headers(rpl, HDR_TO_F,0)<0) || !rpl->to) )
> {
> + LM_ERR("bad reply or missing TO hdr :-/\n");
> tag.s = 0;
> tag.len = 0;
> + } else {
> + tag = get_to(rpl)->tag_value;
> + if (tag.s==0 || tag.len==0) {
> + LM_ERR("missing TAG param in TO hdr :-/\n");
> + tag.s = 0;
> + tag.len = 0;
> + }
> }
> - }
>
> - /* save callee's tag, cseq, contact and record route*/
> - if (populate_leg_info( dlg, rpl, t, DLG_CALLEE_LEG,&tag) !=0) {
> - LM_ERR("could not add further info to the dialog\n");
> + /* save callee's tag, cseq, contact and record route*/
> + if (populate_leg_info( dlg, rpl, t, DLG_CALLEE_LEG,&tag) !=0) {
> + LM_ERR("could not add further info to the dialog\n");
> + }
> + } else {
> + LM_ERR("Faked reply!\n");
> }
>
> /* set start time */
> @@ -417,7 +420,7 @@
> void unref_new_dialog(void *dialog)
> {
> struct tmcb_params p;
> -
> + memset(&p, 0, sizeof(struct tmcb_params));
> p.param = (void*)&dialog;
> dlg_onreply(0, TMCB_TRANS_DELETED,&p);
> }
>
>
> _______________________________________________
> sr-dev mailing list
> sr-dev at lists.sip-router.org
> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev
>
>
--
Daniel-Constantin Mierla
eLearning class for Kamailio 3.0.0
* http://www.asipto.com/
More information about the sr-dev
mailing list