Dan,

Wouldn't you experience the problem with any in-dialog request coming from the 
PSTN gateway?  Most commonly, a BYE?

I have a strong personal bias against SIP Session Timers in Opensips.  I strip 
advertised support for them as the messages pass through my proxy with this:

route[21] {     # Suppresses SST announcements
        if (is_present_hf("Session-Expires")) remove_hf("Session-Expires");
        if (is_present_hf("Min-SE")) remove_hf("Min-SE");

        if (is_present_hf("Supported")) {
                if (subst('/^(Supported:.*)timer\s*,(.*)$/\1\2/i')) {
                        #xlog("L_INFO", "Removed timer support (1)\n");
                } else if (subst('/^(Supported:.*),\s*timer(.*)$/\1\2/i')) {
                        #xlog("L_INFO", "Removed timer support (2)\n");
                } else if (search('^Supported:.*timer.*$')) {
                        remove_hf("Supported");
                        #xlog("L_INFO", "Removed timer support (3)\n");
                }
        }
}

I cannot take credit for this code; I found it linked on the Opensips site 
somewhere.  Anyway, it would likely prevent your reinvites from happening in 
the first place.  But that does nothing to address the NAT issue.  My config 
contains the following:

some module parameters:
  modparam("registrar", "received_avp", "$avp(s:received_uri)")
  modparam("usrloc", "nat_bflag", 7)

Very close to the top of the request route script, I have:
        if (client_nat_test("3")) {
                force_rport();
                $avp(s:received_uri) = $source_uri;
                if (!is_method("REGISTER"))
                        fix_contact();
                setbflag(7);
        }

And that's it, really.  I thought I had more in the loose_route section but I 
do not.  I don't have any problems with in-dialog requests from either side 
during a call where one side is behind NAT.


- Jeff



On Apr 22, 2010, at 11:07 PM, Daniel Goepp wrote:

Was it really this simple, am I really that stupid?  After looking into the 
nat_uac_test more, it's just testing for RFC 1918 the way we have it 
configured, so I put into the reply_route:

        if ($ct.fields(uri)=~"10\.*|^192\.168\.*|^172\.16\.*") {
                xlog ("Found a response from a private address! - 
$ct.fields(uri)");
                fix_nated_contact();
        }

And my calls are now staying up past the UPDATE messages, with the correct 
Contact information.  I'm sure this will break something else.  Is this the 
correct / recommended way to do this?  I also took out the INVITE test in the 
routes.  Why wouldn't you treat all messages the same once it reaches that 
routing logic, be it an UPDATE, INFO, etc...?

-dg


On Thu, Apr 22, 2010 at 6:43 PM, Daniel Goepp 
<[email protected]<mailto:[email protected]>> wrote:
To further clarify this, what I could just be looking for is the reverse of the 
nat_uac_test, which tests if the request is coming from a NAT'd endpoint.  What 
if the call was sent _to_ a NAT'd endpoint, and we need to appropriately handle 
the contact in the response, not the request?  I have a 200 OK coming back in 
response to an UPDATE message, but the contact is a private address.  After 
looking deeper into the dialog module, I'm not even sure it can help me with 
this one.  I'm sure I can't be the first person dealing with responses sent to 
a NAT'd endpoint :)  But I'm not seeing a clear way to identify these, so again 
any thoughts are much appreciated.

Thanks

-dg



On Thu, Apr 22, 2010 at 4:20 PM, Daniel Goepp 
<[email protected]<mailto:[email protected]>> wrote:
I have two questions, one specific and one general, but I have a feeling the 
answers might be similar to both.

First, we are having an issue with a gateway that does a re-INVITE.  The call 
scenario is like this, registered user X calls out via a carrier to the PSTN, 
we identify that the customer is behind NAT, and do the proper contact rewrite. 
 However then the carrier then re-INVITEs at 15 minutes to make sure the call 
is up, everything goes through fine, except we are not rewriting the contact in 
the 200 OK back, because the carrier was not behind NAT.  So my thought is that 
this would be a situation for an AVP (of which my knowledge is limited and I 
can't wait for the next webinar on the topic).  That when the call gets setup, 
I set a variable to identify that I should act differently for this call when I 
see that re-INVITE.  Or would the more appropriate solution be to just bit the 
bullet and use the dialog module?  Or perhaps there is yet another better 
solution I'm not aware of.  I haven't implemented the dialog module so far due 
to concerns regarding resource consumption.  So I guess the bigger question is, 
do most of the folks out there use the dialog module?

My next question is related to the fact that the default route for a call that 
has a totag (existing transaction) is route 1.  However the initial call might 
well have been routed using a different route in the first place.  Again, I was 
thinking would I use AVP here to put into the has totag section of the script 
to go to the same route used the first time, or should I again be looking to 
the dialog module to just make sure I'm keeping track of all calls more 
completely, and then can make sure that a subsequent messages coming in with a 
totag, that was let's say originally routed using route 3, again goes to route 
3.

I sort of feel I have answered my own question here, that dialog is my only 
solution, but any feedback regarding other people experiences is handing in 
call re-signaling would be greatly appreciated.

Thanks

-dg


_______________________________________________
Users mailing list
[email protected]<mailto:[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