make use of received= and rport= fields in sip replies.
authorLuigi Rizzo <rizzo@icir.org>
Sat, 28 Jul 2007 07:44:16 +0000 (07:44 +0000)
committerLuigi Rizzo <rizzo@icir.org>
Sat, 28 Jul 2007 07:44:16 +0000 (07:44 +0000)
commit6d8c6a9961e3362d0e84cfe10ebd7082b925c219
treee361694e895b96fb5c378e8967d4120f1517c855
parent7f570a8b3df8c1f3d2960754cf2b5de363212ec7
make use of received= and rport= fields in sip replies.

In a nutshell, these fields are used to tell a sip entity
the address and port its request came from, and are extremely
useful in the presence of NATs, especially with symmetric NATs
where STUN is totally ineffective.

This patch stores the address and port in the 'ourip' field of
the dialog descriptor, so they can be reused in subsequent transactions.
As it is, it works well for things like REGISTER requiring authentication,
because the second REGISTER request (with auth credentials) will carry
the correct address. Maybe it can also be useful, in case of an address
change, to do one or both of the following:

+ propagate the new address to the parent user/peer descriptor so that new
  dialogs will use the correct address from the beginning.
  This is trivial to implement, I am just waiting for feedback on this.

+ re-issue a request in case of an address change. This a lot less trivial,
  maybe unnecessary, and probably covered by the previous item.

I would seriously consider this patch for addition to 1.4 and 1.2.
The code is very little intrusive, and it would solve in a correct
way the nat traversal problems for which externip/externaddr/stunaddr
are only a partial and expensive workaround.

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@77616 65c4cc65-6c06-0410-ace0-fbb531ad65f3
channels/chan_sip.c