[OpenSIPS-Users] fix_route_dialog problem
Vlad Paiu
vladpaiu at opensips.org
Tue Jan 25 12:14:15 CET 2011
Hi,
Are you sure you are calling record_route() properly in your script ?
If you do this, you shouldn't receive any SIP msgs without any route
headers, as there would be at least 1 route header, the one OpenSIPS has
added in the first place.
The dialog module depends on the RR module. If a SIP msg with no route
headers is received, the loose_route() part rejects it as it isn't valid
from it's point of view, and the message isn't attempted to be matched
to any certain dialog.
Could you please post a full SIP trace for such a call ?
Regards,
Vlad
On 01/24/2011 06:35 PM, Guido Negro wrote:
> Hi,
>
> thanks for your reply.
>
> I am using the script reported in the Opensips book ("Building
> telephony systems with Opensips") at page 81, that is :
>
>
> if (has_totag() ) {
> # sequential request withing a dialog should
> # take the path determined by record-routing
> if (loose_route() ) {
> if (is_method("BYE" ) ) {
> setflag(1) ; # do accounting . . .
> setflag(3 ) ; # . . . even if the transaction fails
> } else if ( is_method( "INVITE" ) ) {
> # even if in most of the cases is useless, do RR for
> # re-INVITEs alos, as some buggy clients do change route set
> # during the dialog.
> record_route() ;
> }
> # route it out to whatever destination was set by loose_route()
> # in $du (destination URI) .
> route( 1) ;
> } else {
> if ( is_method(" ACK") ) {
> if ( t_check_trans( ) ) {
> # non loose- route, but stateful ACK; must be an ACK after
> # a 487 or e. g. 4 04 from upstream server
> t_relay() ;
> exit;
> } else {
> # ACK without matching transaction ->
> # ignore and discard
> exit;
> }
> }
> sl_send_reply("4 04" , " Not here") ;
> }
> exit;
> }
>
>
> Now I've got 2 problems. When a BYE with correct to/from tag & correct
> call-id, but without any route headers arrives (a message I'd like to
> 'fix'):
>
> 1) I get the variable $DLG_status to be <null> after loose_route() (I
> checked with specific experiments) and this also causes an error in
> the log: opensips[3216]: ERROR:dialog:w_validate_dialog: null dialog
>
> 2) loose_route() fails, so I always get a 404 response on the callee
> side that tried to disconnect, and the caller remains connected.
>
>
> I am probably using fix_route_dialog not in the correct way, but what
> I wanted to do is something like this (very-pseudo code):
>
> When loose_route fails (or more in general for every in-dialog
> subsequent request):
> Try to fix the request according to saved dialog infos:
> - Fix succesful: forward the request.
> - Couldnt fix it: reject the request (send 404 back).
>
>
> Regards,
>
> Guido.
>
--
Vlad Paiu
www.voice-system.ro
More information about the Users
mailing list