[OpenSIPS-Devel] Using dialog module functions from LOCAL_ROUTE

Bogdan-Andrei Iancu bogdan at voice-system.ro
Sun Sep 27 22:54:16 CEST 2009


Alex,

The simpler way to do it is to set the static dialog reference to the 
dialog before calling the TM ....more efficient as you do not have to 
find a dialog you already know...

Try the attached patch.

Regards,
Bogdan

Alex Massover wrote:
> Hi!
>
> Here's a patch that worked for me (for 1.5.3). Probably there're better ways to do it.
>
> --
> Best Regards,
> Alex Massover
> VoIP R&D TL
> Jajah Inc.
> -----Original Message-----
> From: devel-bounces at lists.opensips.org [mailto:devel-bounces at lists.opensips.org] On Behalf Of Bogdan-Andrei Iancu
> Sent: Sunday, September 27, 2009 10:09 PM
> To: OpenSIPS devel mailling list
> Subject: Re: [OpenSIPS-Devel] Using dialog module functions from LOCAL_ROUTE
>
> Hi Alex,
>
> Alex Massover wrote:
>   
>>> It fails in dialog.c in w_fetch_dlg_value () here:
>>>
>>> if ( (dlg=get_current_dialog())==NULL ) {
>>>                 return -1;
>>>
>>> get_current_dialog() doesn't return a dialog :(
>>>
>>>       
>> [Alex]
>>
>> get_current_dialog() looks to work either for initial requests or for established transactions.
>> I switched to get_dlg() that receives sip_msg.
>> The following works for me:
>>
>>         unsigned int dir;
>>         if ( ((dlg=get_current_dialog())==NULL) && ((dlg=get_dlg(&(msg->callid->body),&(get_from(msg)->tag_value),&(get_to(msg)->tag_value),&dir))==NULL) ) {
>>                 return -1;
>>         }
>>
>> Why not to enable something like this in the version?
>> The only obstacle I can think of is a race condition (dialog can be destroyed) - but the same can happen in any other type or route as well.
>>
>>     
> There is no race as the dialog module is based on a mechanism of
> referencing the dialog - as time the dialog is refed, it cannot be
> deleted ... as said, let me have a look into this...
>
> Regards,
> Bogdan
>
>
>   
>>     
>>> --
>>> Sincerely yours,
>>> Alex Massover
>>> VoIP R&D TL
>>> Jajah Inc.
>>>
>>>
>>>
>>>       
>>>> -----Original Message-----
>>>> From: devel-bounces at lists.opensips.org [mailto:devel-
>>>> bounces at lists.opensips.org] On Behalf Of Alex Massover
>>>> Sent: Sunday, September 27, 2009 1:10 PM
>>>> To: OpenSIPS devel mailling list
>>>> Subject: Re: [OpenSIPS-Devel] Using dialog module functions from
>>>> LOCAL_ROUTE
>>>>
>>>> Hi!
>>>>
>>>> It's a BYE request generated by dlg_end_dlg(). I need to
>>>> fetch_dlg_value() to get variables stored on the dialog to send them
>>>> with accounting extra headers.
>>>>
>>>> This is what I have in opensips.cfg:
>>>>
>>>> modparam("acc", "radius_extra", "Connect-Info=$avp(s:info);....... ")
>>>> ...
>>>> ...
>>>> ...
>>>> local_route
>>>> {
>>>>          if(is_method("BYE"))
>>>>          {
>>>>                 fetch_dlg_value("internal_callid","$avp(s:info)");
>>>>                 acc_rad_request("200");
>>>>          }
>>>> }
>>>>
>>>> This works for me for regular BYEs, but not with locally generated
>>>> BYEs, even with the hack below.
>>>>
>>>>
>>>> --
>>>> Sincerely yours,
>>>> Alex Massover
>>>> VoIP R&D TL
>>>> Jajah Inc.
>>>>
>>>>
>>>>         
>>>>> -----Original Message-----
>>>>> From: devel-bounces at lists.opensips.org [mailto:devel-
>>>>> bounces at lists.opensips.org] On Behalf Of Bogdan-Andrei Iancu
>>>>> Sent: Sunday, September 27, 2009 1:32 PM
>>>>> To: OpenSIPS devel mailling list
>>>>> Subject: Re: [OpenSIPS-Devel] Using dialog module functions from
>>>>> LOCAL_ROUTE
>>>>>
>>>>> Hi Alex,
>>>>>
>>>>> for what kind of requests (from LOCAL route) you try to use the dlg
>>>>> stuff?
>>>>>
>>>>> Regards,
>>>>> Bogdan
>>>>>
>>>>> Alex Massover wrote:
>>>>>
>>>>>           
>>>>>> Hi!
>>>>>>
>>>>>> I'm looking for a way to use fetch_dlg_value() inside
>>>>>>
>>>>>>             
>>> LOCAL_ROUTE.
>>>
>>>       
>>>> I
>>>>
>>>>         
>>>>>> edited dialog.c to to enable it:
>>>>>>
>>>>>> {"fetch_dlg_value",(cmd_function)w_fetch_dlg_value,
>>>>>>
>>>>>>             
>>>> 2,fixup_dlg_fval,
>>>>
>>>>         
>>>>>> 0, REQUEST_ROUTE| FAILURE_ROUTE | ONREPLY_ROUTE | BRANCH_ROUTE |
>>>>>> LOCAL_ROUTE },
>>>>>>
>>>>>> Now I can write fetch_dlg_value() inside the LOCAL_ROUTE, but I'm
>>>>>> getting NULLs always.
>>>>>>
>>>>>> Can anybody point me what else do I need to hack to have access
>>>>>>
>>>>>>             
>>> to
>>>
>>>       
>>>>>> dialog variables from LOCAL_ROUTE?
>>>>>>
>>>>>> Also what is the reason not to enable all dialog functions from
>>>>>> LOCAL_ROUTE?
>>>>>>
>>>>>>
>>>>>>             
>
>
> _______________________________________________
> Devel mailing list
> Devel at lists.opensips.org
> http://lists.opensips.org/cgi-bin/mailman/listinfo/devel
>
> This mail was received via Mail-SeCure System.
>
>
>
>
> This mail was sent via Mail-SeCure System.
>
>
>   
> ------------------------------------------------------------------------
>
> _______________________________________________
> Devel mailing list
> Devel at lists.opensips.org
> http://lists.opensips.org/cgi-bin/mailman/listinfo/devel
>   

-------------- next part --------------
A non-text attachment was scrubbed...
Name: dialog.patch
Type: text/x-diff
Size: 3623 bytes
Desc: not available
Url : http://lists.opensips.org/pipermail/devel/attachments/20090927/fb973d40/attachment.patch 


More information about the Devel mailing list