Hi all,
I have been trying to find an answer to this question on this forum as
well as googled it all over but can't seem to find the answer to it.
My apologies if I'm just bad at searching...
I am trying to get a regular B2BUA scenario going and all the normal
stuff is working just fine but I can't seem to get the “honor what's
in the VIA header” working. As the headline eludes to, I want the
server to basically:
1. Ignore whatever the contact header says since this is over TCP so
reuse the TCP connection when sending subsequent requests back to the
client.
2. If the TCP connection has gone down for whatever reason, then
ignore the contact header once again and try to reuse the rport and
received parameter from the VIA header.
I do realize that especially no 2 may not really be correct SIP (have
to read the spec a little closer I guess) but it make sense (at least
in my particular use case). I guess they both are kind of pointing to
the sip outbound rfc (rfc5626), but I don't currently need that entire
thing.
As you probably have guess, one of my clients is behind a NAT so just
to be 100% clear about what I am trying to accomplish, I have the
following user scenario:
* Client A – behind NAT
* Server acting as a B2BUA (mobicents)
* Client B – somewhere else, not important for this discussion.
* A sends invite to the server (over tcp), stamps the Contact header
and the Via header with A's local ip and port (which is wrong in this
case).
* Server receives the invite, processes it and sends it over to B. It
will send back the 100 trying to client A and the server has filled
out rport and the received parameter correctly.
* B responds with 200, which is “b2bua:ed” by the server to side A.
The response will make it back since it either is using the same TCP
connection (as it should and clients should not terminate a tcp
connection until a final response – if I remember my sip correctly) or
will establish a new connection using the connection info in the via
header (received:rport - hence, symmetric response routing rfc thing).
* A acks and all things are good.
* Eventually, B decides to hang up, meaning that once the BYE has
reached the server, the server has to create a subsequent request on
A's dialog and send it back to A.
* Currently, this request will not make it back to A because the ACK
is being sent to the local ip and port of A.
So, my question is, is there any setting or something that I can use,
or anything I can do programatically, that will get this use case to
work?
Should probably mention that I am using mss-1.6.0.Final on-top of
jboss
5.1.0.GA
Thanks,
/Jonas