Hi,

just a quick note to tell you that I actually thought about this way of using fix_route_dialog() because of this ticket:

http://sourceforge.net/tracker/?func=detail&aid=3090388&group_id=232389&atid=1086413

You may want to correct it?

Guido

On 25/01/11 11:14, Vlad Paiu wrote:
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.





_______________________________________________
Users mailing list
Users@lists.opensips.org
http://lists.opensips.org/cgi-bin/mailman/listinfo/users

Reply via email to