El Jueves, 23 de Octubre de 2008, Zappasodi Daniele escribió:
Thanks for your reply.
I'm agree with your observations. I had already tried to solve the
situations as described in the draft (avoiding spiral) and I have built a
configuration that seem to work, at least for the basic call, but my
solution needs to much tricks and I'm not sure that what I have done is
safe and if it works in more complex call flows. I set the IP address in
Record Route depending on position public\private of the callee and I
substitute the IP address in Record Route for each reply, when it needs.
First of all I suppose to know if the caller and callee is private or
public (I check if the Request URI domain with RFC 1918) and I don't know
if this is right. Then there is the problem to write the record route. I
have moved the record route section in a branch route, because here I know
the final destination for each branch. Here there is another doubt: I
rewrote the record_route_preset function in order to remove the limit of
one record route because in parallel forking I set more than record for
each transaction, one record route for each branch. What are the
consequences? I risk "only" to loose a call or to kill the proxy? I would
prefer to leave the record route section at the beginning, but is it
possible to substitute the record route after it is added? I remember that
is possible to change only the original message and that there are some
limitations on the possibility to change an header added during the message
processing (I had some segmentation faults when I tryed with a custom
header). Just now I'm looking on what to do with a relay from the failure
route to a second destination. Before I proceding on this way I would like
to know if I'm going on the wrong direction and if someone has found a
simpler solution with this kind of scenarios.
Honestly, I suggest you to get a proxy with public IP. SIP was not designed to
work behind NAT.
It's possible to have an UAC behind NAT with some methods (STUN, painful AGL
SIP routers, comedia mode, proxies that replace "Contact" with received IP to
get in-dialog messages working...), but having a proxy behind NAT working
with devices outside is IMHO impossible.
;)
--
Iñaki Baz Castillo