Hi Bogdan,

I am using version 1.6.0-notls. Last week I did not test everything 
methodically enough. I only tested
using store_dlg_value() and fetch_dlg_value(). The module documentation does 
not say that these dialog
functions are valid in local_route, only in REQUEST_ROUTE, BRANCH_ROUTE, 
REPLY_ROUTE and
FAILURE_ROUTE. Also, when you try to use fetch_dlg_value() in LOCAL_ROUTE it 
gives this error:
"command cannot be used in the block" and will not run. A bug perhaps?

Today I have done some more tests. It does allow me to use store_dlg_value() in 
the LOCAL_ROUTE, but
this is no use without fetch_dlg_value().

I had not previously tried set_dlg_flag() and is_dlg_flag_set() because I 
assumed they would give the
same error as fetch_dlg_value(). Today I tried them and they are working ok so 
this will give me a
good solution. Much better than gflag.

Also, it is only $DLG_dir that returns <null>. $DLG_status returns 4. Sorry for 
any incorrect
information in my earlier posts.

Thanks for your help.

Regards
John Quick

> -----Original Message-----
> From: Bogdan-Andrei Iancu [mailto:[email protected]]
> Sent: 16 November 2009 13:59
> To: [email protected]
> Cc: 'OpenSIPS users mailling list'
> Subject: Re: [OpenSIPS-Users] Cleanup acc & mediaproxy when dialog 
> bye_on_timeout triggers
> 
> Hi John,
> 
> What version of opensips are you using? because in 1.6 you are allowed
> to use those functions in LOCAL_ROUTE.
> 
> Regards,
> Bogdan
> 
> John Quick wrote:
> > Hi Bogdan
> >
> > I have changed my script to only use engage_media_proxy() - I believe this 
> > has solved the problem
> with
> > ending the media proxy sessions.
> >
> > However, local_route calling acc_aaa_request twice continues to be a 
> > problem. Thanks, I was aware
> of
> > the risk that gflag will not always work if there are many calls all timing 
> > out together. I would
> > prefer to use flags in the dialog or $DLG_dir, but practical tests showed 
> > that this was not
> possible.
> > $DLG_dir and $DLG_status both return null, yet $DLG_lifetime returns a 
> > proper value. When I tried
> to
> > use the function store_dlg_value() in local_route, opensips refused to run 
> > and reports an error
> in the
> > script.
> >
> > John
> >
> >
> >> -----Original Message-----
> >> From: Bogdan-Andrei Iancu [mailto:[email protected]]
> >> Sent: 15 November 2009 19:32
> >> To: [email protected]; OpenSIPS users mailling list
> >> Subject: Re: [OpenSIPS-Users] Cleanup acc & mediaproxy when dialog 
> >> bye_on_timeout triggers
> >>
> >> Hi John,
> >>
> >> John Quick wrote:
> >>
> >>> I am using the bye_on_timeout_flag within the Dialog module to limit the 
> >>> maximum duration for a
> >>>
> >> call.
> >>
> >>> When it is triggered I am having problems cleaning up - i.e. accounting 
> >>> the end of call
> correctly
> >>>
> >> and
> >>
> >>> ending the mediaproxy session. I am not using engage_media_proxy() 
> >>> function, instead preferring
> >>>
> >> to
> >>
> >>> have more control with use_media_proxy() and end_media_session().
> >>>
> >>> >From a search of the archived questions on this forum I found the trick 
> >>> >is to create a
> >>>
> >> local_route
> >>
> >>> section and use a check based on is_method("BYE") to determine when to 
> >>> execute
> acc_aaa_request().
> >>>
> >>> This works ok, but it is triggered twice at the end of the call - once 
> >>> for the BYE sent
> upstream
> >>>
> >> and
> >>
> >>> again for the BYE sent downstream. The only solution I could find (I've 
> >>> spent many hours
> testing
> >>>
> >> ideas
> >>
> >>> for this) is the use of a global flag that is toggled each time the 
> >>> local_route block gets a
> BYE
> >>> method. Then the code only calls acc_aaa_request() when the global flag 
> >>> is set - i.e. only one
> in
> >>> every two times.
> >>>   if (is_gflag("1")) {
> >>>       acc_aaa_request("Internal BYE");
> >>>   }
> >>>
> >>>   # Use Global flag 1 to avoid double reporting/accounting of timeout 
> >>> BYE's
> >>>   if (is_gflag("1")) {
> >>>       reset_gflag("1");
> >>>   } else {
> >>>       set_gflag("1");
> >>>   }
> >>>
> >>> This is not a very elegant or satisfactory solution but it should just 
> >>> about work and hopefully
> >>>
> >> not
> >>
> >>> many timeouts will occur anyway. Any suggestions for a better solution 
> >>> would be welcome. I have
> >>>
> >> tried
> >>
> >>> Dialog values and transaction flags - they don't work.
> >>>
> >>>
> >> This solution is not correct (using the gflags) - triggering the acc
> >> from local_route is the right thing to do, but not using the gflags -
> >> these flags are global and shared by entire opensips which can run (in
> >> the same time) multiple local_routes for different calls -> so you may
> >> have a mixture between different calls.
> >>
> >> Try using the "$DLG_dir" script variable
> >> (http://www.opensips.org/html/docs/modules/devel/dialog.html#id273200)
> >> to do the acc only for only one direction will be ideally, but reviewing
> >> the code I think that variable is not populated in local_route - if you
> >> could give it a try and let me know, it will be great.
> >>
> >> Other idea will be to use the dialog flag or values - you said they do
> >> not work, even if they should - what seams to be the problem here ?
> >>
> >>
> >>> The other problem is how to end the media proxy session. The transaction 
> >>> flags set for the
> Invite
> >>>
> >> are
> >>
> >>> not visible in the local_route block when it is handling the internally 
> >>> generated BYE's so I
> >>>
> >> cannot
> >>
> >>> try the normal checks that would be used in the main route block for BYE. 
> >>> Perhaps I should just
> >>>
> >> call
> >>
> >>> end_media_session(), but will it even work from local_route? If I change 
> >>> my script to start
> using
> >>> engage_media_proxy() will I lose the flexibility of being able to check 
> >>> which calls need media
> >>>
> >> proxy
> >>
> >>> and which don't? I don't want them all using it - only those with far-end 
> >>> NAT.
> >>>
> >>>
> >> Shouldn't the media proxy automatically stop when the dialog is
> >> destroyed ? if you use the enagage_mediaproxy(), I think you do not have
> >> to explicitly terminate the relay session as the this op will be done
> >> based on the "dialog destroyed" event.
> >>
> >> If it does not work like this, you can use a dialog flag to remember
> >> (from INVITE time) if the NAT was detected or not. And in local_route
> >> you can do an explicit end_mediaproxy().
> >>
> >> Regards,
> >> Bogdan
> >>
> >>
> >>> John Quick
> >>> Smartvox Limited
> >>>
> >>>
> >>>
> >>> _______________________________________________
> >>> Users mailing list
> >>> [email protected]
> >>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
> >>>
> >>>
> >>>
> >
> >
> >
> >



_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users

Reply via email to