<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1250">


<META content="MSHTML 6.00.2900.2627" name=GENERATOR></HEAD>
<BODY>
<DIV><FONT face=Arial size=2><SPAN 
class=921464523-18052005>Hello,</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=921464523-18052005></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><SPAN class=921464523-18052005>I was very 
interested in the outbound proxy functionality discussed last december on the 
serdev list:</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=921464523-18052005>has anyone seen any 
implementations come out ?</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=921464523-18052005></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><SPAN class=921464523-18052005>Thanks in 
advance,</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=921464523-18052005></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=921464523-18052005>Giuseppe</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=921464523-18052005></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=921464523-18052005></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV>On 04-12 15:12, Adrian Georgescu wrote:<BR>&gt;<I> I think there should be 
no "sigle" outbound proxy out there, if it is <BR></I>&gt;<I> it becomes just 
another single point of failure. The ideal solution <BR></I>&gt;<I> would 
provide a shared user-location database between multiple servers </I>&gt;<I> 
which would all act as outbound-proxy for each call they serve and 
<BR></I>&gt;<I> would enable NAT traversal only at the edges when and if 
necessary.<BR></I><BR>&nbsp; I think this is exactly what Path is about, you can 
have different<BR>&nbsp; outbound proxy for each registered 
contact.<BR><BR>&gt;<I> A first step in this direction would be to store more 
information in <BR></I>&gt;<I> the location table like the address of the server 
that handled the <BR></I>&gt;<I> registration and both NAT ed and not NAT-ed 
contacts. <BR></I><BR>&nbsp; You mean the destination IP of the REGISTER request 
so that some other<BR>&nbsp; server elected when the original server fails can 
select which IP to use<BR>&nbsp; to get the INVITE through the NAT, right ? 
That's on my todo list<BR>&nbsp; (with quite high priority).<BR><BR>&nbsp; The 
other part -- NATed and non-NATed contact -- is already<BR>&nbsp; implemented. 
If you call fix_nated_register then the original Contact<BR>&nbsp; value would 
be preserved and the source IP and port of the request<BR>&nbsp; would be stored 
in the received column of location table (or can be<BR>&nbsp; appended to the 
message as ;received parameter of the Contact if the<BR>&nbsp; registrar is not 
co-located with the NAT-enabled proxy).<BR><BR>&nbsp; The lookup function would 
put the original Contact into the<BR>&nbsp; Request-URI but the request would be 
forwarded to the IP and port in<BR>&nbsp; received parameter. For the scenario 
with decoupled outbound proxies<BR>&nbsp; and registrar (and also if Path is 
used) we would need to communicate<BR>&nbsp; the IP and port of the NAT to the 
outbound proxy instead -- Route<BR>&nbsp; header field could be used for this, 
for example.<BR><BR>&nbsp;&nbsp;&nbsp; Jan.<BR>&nbsp; <BR>&gt;<I> Based on this 
<BR></I>&gt;<I> information depending on the call flow the SIP farm members 
should <BR></I>&gt;<I> route the call to the member that serves the NAT-ed 
client and should <BR></I>&gt;<I> expire only locations served 
locally.<BR></I>&gt;<I> <BR></I>&gt;<I> I am somewhere between Jan and Klaus 
opinions working on a similar <BR></I>&gt;<I> concept, it will be nice to see 
some implementations available to <BR></I>&gt;<I> compare them.<BR></I>&gt;<I> 
<BR></I>&gt;<I> Adrian<BR></I>&gt;<I> <BR></I>&gt;<I> On Dec 4, 2004, at 2:58 
PM, Jan Janak wrote:<BR></I>&gt;<I> <BR></I>&gt;<I> &gt;On 04-12 13:24, Klaus 
Darilion wrote:<BR></I>&gt;<I> &gt;&gt;<BR></I>&gt;<I> &gt;&gt;<BR></I>&gt;<I> 
&gt;&gt;Jan Janak wrote:<BR></I>&gt;<I> &gt;&gt;&gt;I like 1) more than 2). 
Support for Path header field could be also<BR></I>&gt;<I> &gt;&gt;&gt;useful 
for other stuff then NAT traversal. We will definitely accept<BR></I>&gt;<I> 
&gt;&gt;&gt;that into the main tree if you implement it.<BR></I>&gt;<I> 
&gt;&gt;<BR></I>&gt;<I> &gt;&gt;Uuh, you're right - someone has to implement it! 
:-)<BR></I>&gt;<I> &gt;<BR></I>&gt;<I> &gt;&nbsp; Yeah :-).<BR></I>&gt;<I> 
&gt;<BR></I>&gt;<I> &gt;&gt;&gt; And we could do something like:<BR></I>&gt;<I> 
&gt;&gt;&gt; if (save("location")) {<BR></I>&gt;<I> &gt;&gt;&gt; 
        save_path();<BR></I>&gt;<I> &gt;&gt;&gt;         copy_path_to_reply();<BR></I>&gt;<I> 
&gt;&gt;&gt;        sl_send_reply("200", "OK");<BR></I>&gt;<I> &gt;&gt;&gt; 
};<BR></I>&gt;<I> &gt;&gt;&gt;<BR></I>&gt;<I> &gt;&gt;&gt; That would allow us 
to keep this logic separated from registrar.<BR></I>&gt;<I> &gt;&gt;&gt;- The 
path vector should be probably stored separately -- outside the<BR></I>&gt;<I> 
&gt;&gt;&gt;&nbsp; location table and outside usrloc. In the script we could 
do<BR></I>&gt;<I> &gt;&gt;&gt;&nbsp; something like:<BR></I>&gt;<I> 
&gt;&gt;&gt;<BR></I>&gt;<I> &gt;&gt;&gt;&nbsp; 
lookup("location");<BR></I>&gt;<I> &gt;&gt;&gt;&nbsp; 
lookup_path("path_table");<BR></I>&gt;<I> &gt;&gt;&gt;<BR></I>&gt;<I> 
&gt;&gt;&gt;&nbsp; Function lookup_path would lookup the path vector and add it 
to the<BR></I>&gt;<I> &gt;&gt;&gt;&nbsp; message as the pre-loaded route 
set.<BR></I>&gt;<I> &gt;&gt;<BR></I>&gt;<I> &gt;&gt;This would ensure to do not 
influence the registrar und location <BR></I>&gt;<I> 
&gt;&gt;module,<BR></I>&gt;<I> &gt;&gt;but I think implementation would be much 
more easier if we include it<BR></I>&gt;<I> &gt;&gt;into the registrar module 
and enable it with a configuration parameter<BR></I>&gt;<I> 
&gt;&gt;(usepath=0/1). Also from the database schema it makes sense to 
include<BR></I>&gt;<I> &gt;&gt;it into the location table. There is a 1:1 
relation between the path <BR></I>&gt;<I> &gt;&gt;and<BR></I>&gt;<I> &gt;&gt;the 
location (and the path value may be NULL).<BR></I>&gt;<I> &gt;<BR></I>&gt;<I> 
&gt;&nbsp; I proposed separate table because, in my opinion, it is easier 
to<BR></I>&gt;<I> &gt;&nbsp; implement. Moreover, if you keep it separately -- 
independent of<BR></I>&gt;<I> &gt;&nbsp; usrloc, you can retrieve the path 
vector even if you do not use user<BR></I>&gt;<I> &gt;&nbsp; location to get the 
next hop URI (PSTN gateways, static <BR></I>&gt;<I> 
&gt;configuration,<BR></I>&gt;<I> &gt;&nbsp; path vector configured by users, 
and so on).<BR></I>&gt;<I> &gt;<BR></I>&gt;<I> &gt;&gt;&gt;- One problem here 
might be the limitation of SER to execute the <BR></I>&gt;<I> 
&gt;&gt;&gt;routing<BR></I>&gt;<I> &gt;&gt;&gt; logic only for one branch only. 
That means it would not be possible <BR></I>&gt;<I> 
&gt;&gt;&gt;to<BR></I>&gt;<I> &gt;&gt;&gt; lookup different path vector for 
different contacts. I think that <BR></I>&gt;<I> &gt;&gt;&gt;this<BR></I>&gt;<I> 
&gt;&gt;&gt; problem can be ignored at the beginning, SER would be simply 
limited<BR></I>&gt;<I> &gt;&gt;&gt; to using one path vector per 
AOR.<BR></I>&gt;<I> &gt;&gt;<BR></I>&gt;<I> &gt;&gt;That's a problem. In case 
for 3GPP this might be negligible (there is<BR></I>&gt;<I> &gt;&gt;always only 1 
handset registered). But for typical VoIP this won't <BR></I>&gt;<I> 
&gt;&gt;work.<BR></I>&gt;<I> &gt;&gt;E.g. I have to phones registered: one at 
home, one at work, and both <BR></I>&gt;<I> &gt;&gt;are<BR></I>&gt;<I> 
&gt;&gt;behind NAT and use an outbound proxy.<BR></I>&gt;<I> 
&gt;&gt;<BR></I>&gt;<I> &gt;&gt;This limitation can be bypassed by using 
solution 2 - as the "route"<BR></I>&gt;<I> &gt;&gt;will be hidden in the contact 
uri. Furthermore, solution 2 would not<BR></I>&gt;<I> &gt;&gt;requrie changes to 
the main proxy and therefore testing and rollout<BR></I>&gt;<I> &gt;&gt;would be 
much easier.<BR></I>&gt;<I> &gt;&gt;<BR></I>&gt;<I> &gt;&gt;I also think 
solution 2 would be easier to implement, but still <BR></I>&gt;<I> 
&gt;&gt;solution<BR></I>&gt;<I> &gt;&gt;1 would be a more generic 
solution.<BR></I>&gt;<I> &gt;<BR></I>&gt;<I> &gt;&nbsp; Yes, that's true. I 
think, however, that 1) is the right approach.<BR></I>&gt;<I> 
&gt;<BR></I>&gt;<I> &gt;&nbsp;&nbsp;&nbsp; Jan.<BR></I>&gt;<I> 
&gt;<BR></I>&gt;<I> 
&gt;_______________________________________________<BR></I>&gt;<I> &gt;Serdev 
mailing list<BR></I>&gt;<I> &gt;<A 
href="http://lists.iptel.org/mailman/listinfo/serdev">Serdev at 
iptel.org</A><BR></I>&gt;<I> &gt;<A 
href="http://lists.iptel.org/mailman/listinfo/serdev">http://mail.iptel.org/mailman/listinfo/serdev</A><BR></I></DIV></BODY></HTML>
<BR>

<P><FONT SIZE=2>--<BR>
No virus found in this outgoing message.<BR>
Checked by AVG Anti-Virus.<BR>
Version: 7.0.308 / Virus Database: 266.11.10 - Release Date: 13/05/2005<BR>
</FONT> </P>