[OpenSIPS-Devel] Using dialog module functions from LOCAL_ROUTE

Bogdan-Andrei Iancu bogdan at voice-system.ro
Tue Sep 29 11:06:51 CEST 2009


Hi Alex,

Thanks for the confirmation - I uploaded the fix on trunk and 1.5 also.

Regards,
Bogdan

Alex Massover wrote:
> Hi Bogdan!
>
> The patch works perfectly for me, thank you!
>
> Do you plan to commit it to SVN?
>
> --
> 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:54 PM
> To: OpenSIPS devel mailling list
> Subject: Re: [OpenSIPS-Devel] Using dialog module functions from LOCAL_ROUTE
>
> 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
>>>>>>>               




More information about the Devel mailing list