<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.7650.15">
<TITLE>Via RPORT for CANCEL message.</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/rtf format -->
<P><FONT FACE="Times New Roman">Hello.<BR>
My main configuration is based on the ser.cfg from the issue 5 plus some modifications included by me. Beside that i'm using </FONT></P>
<P><FONT FACE="Times New Roman">version: ser 0.9.3 (i386/linux)</FONT>
<BR><FONT FACE="Times New Roman">flags: STATS: Off, USE_IPV6, USE_TCP, DISABLE_NAGLE, USE_MCAST, DNS_IP_HACK, SHM_MEM, SHM_MMAP, PKG_MALLOC, FAST_LOCK-ADAPTIVE_WAIT</FONT></P>
<P><FONT FACE="Times New Roman">ADAPTIVE_WAIT_LOOPS=1024, MAX_RECV_BUFFER_SIZE 262144, MAX_LISTEN 16, MAX_URI_SIZE 1024, BUF_SIZE 65535</FONT>
<BR><FONT FACE="Times New Roman">@(#) $Id: main.c,v 1.197 2004/12/03 19:09:31 andrei Exp $</FONT>
<BR><FONT FACE="Times New Roman">main.c compiled on 11:03:37 Dec 22 2005 with gcc 3.2</FONT>
<BR>
<BR><FONT FACE="Times New Roman">I have a question regarding to sending a CANCEL message for an INVITE from a NAT'd endpoint. As far as i know the force_rport() command adds the received IP port to the top most via header in the SIP message, this enables subsequent SIP message to return to the proper port later on in a SIP transaction. My problem is that for a CANCEL message coming from a NAT'd endpoint this command seems not to be working. This is the scenario.<BR>
<BR>
NAT'd endpoint : 200.100.100.248<BR>
SER : 200.100.100.246<BR>
SER-2 : 200.100.100.36<BR>
GW : 200.100.100.69<BR>
<BR>
The NAT'd endpoint send an INVITE to the proxy, but then in the middle of the transaction decide to CANCEL the request.<BR>
<BR>
As you can see in the "cancel_debug.txt" file included on this mail, the CANCEL message does not contain the "rport" in the Via header, so it seems to be routed back to the default sip port (5060). Is there a way to force the rport in a CANCEL? for a enpoint unable to put the rport by itself?<BR>
I want to do this according to the onsip document, in a compatible way.. </FONT>
<BR><FONT FACE="Times New Roman">Anyway i made a little test including a force_rport(); in the CANCEL handler<BR>
</FONT>
<BR><FONT FACE="Times New Roman">..........</FONT>
<BR><FONT FACE="Times New Roman"> # -----------------------------------------------------------------</FONT>
<BR><FONT FACE="Times New Roman"> # Record Route Section</FONT>
<BR><FONT FACE="Times New Roman"> # -----------------------------------------------------------------</FONT>
<BR><FONT FACE="Times New Roman"> if (method=="INVITE" && client_nat_test("3")) {</FONT>
<BR><FONT FACE="Times New Roman"> # INSERT YOUR IP ADDRESS HERE</FONT>
<BR><FONT FACE="Times New Roman"> record_route_preset("200.100.100.246:5060;nat=yes");</FONT>
<BR><FONT FACE="Times New Roman"> } else if (method!="REGISTER") {</FONT>
<BR><FONT FACE="Times New Roman"> record_route();</FONT>
<BR><FONT FACE="Times New Roman"> };</FONT>
</P>
<P><FONT FACE="Times New Roman"> # -----------------------------------------------------------------</FONT>
<BR><FONT FACE="Times New Roman"> # Call Tear Down Section</FONT>
<BR><FONT FACE="Times New Roman"> # -----------------------------------------------------------------</FONT>
<BR><FONT FACE="Times New Roman"> if (method=="BYE" || method=="CANCEL") {</FONT>
<BR><FONT FACE="Times New Roman"> end_media_session();</FONT>
<BR><FONT FACE="Times New Roman"> setflag(1);</FONT>
<BR><FONT FACE="Times New Roman"> };</FONT>
</P>
<P><FONT FACE="Times New Roman"> # -----------------------------------------------------------------</FONT>
<BR><FONT FACE="Times New Roman"> # Loose Route Section</FONT>
<BR><FONT FACE="Times New Roman"> # -----------------------------------------------------------------</FONT>
<BR><FONT FACE="Times New Roman"> if (loose_route()) {</FONT>
</P>
<P><FONT FACE="Times New Roman"> if (has_totag() && (method=="INVITE" || method=="ACK")) {</FONT>
</P>
<P><FONT FACE="Times New Roman"> if (client_nat_test("3")||search("^Route:.*;nat=yes")){</FONT>
<BR><FONT FACE="Times New Roman"> setflag(6);</FONT>
<BR><FONT FACE="Times New Roman"> use_media_proxy();</FONT>
<BR><FONT FACE="Times New Roman"> };</FONT>
<BR><FONT FACE="Times New Roman"> };</FONT>
</P>
<P><FONT FACE="Times New Roman"> route(1);</FONT>
<BR><FONT FACE="Times New Roman"> break;</FONT>
<BR><FONT FACE="Times New Roman"> };</FONT>
</P>
<P><FONT FACE="Times New Roman"> # -----------------------------------------------------------------</FONT>
<BR><FONT FACE="Times New Roman"> # Call Type Processing Section</FONT>
<BR><FONT FACE="Times New Roman"> # -----------------------------------------------------------------</FONT>
<BR><FONT FACE="Times New Roman"> if (!is_uri_host_local()) {</FONT>
<BR><FONT FACE="Times New Roman"> if (is_from_local() || allow_trusted()) {</FONT>
<BR><FONT FACE="Times New Roman"> route(4);</FONT>
<BR><FONT FACE="Times New Roman"> route(1);</FONT>
<BR><FONT FACE="Times New Roman"> } else {</FONT>
<BR><FONT FACE="Times New Roman"> sl_send_reply("403", "Forbidden");</FONT>
<BR><FONT FACE="Times New Roman"> };</FONT>
<BR><FONT FACE="Times New Roman"> break;</FONT>
<BR><FONT FACE="Times New Roman"> };</FONT>
</P>
<P><B><FONT FACE="Times New Roman"> if (method=="CANCEL") {</FONT></B>
<BR><B><FONT FACE="Times New Roman"> force_rport();</FONT></B>
<BR><B><FONT FACE="Times New Roman"> route(1);</FONT></B>
<BR><B><FONT FACE="Times New Roman"> break;</FONT></B>
<BR><FONT FACE="Times New Roman"> } else if (method=="INVITE") {</FONT>
<BR><FONT FACE="Times New Roman"> route(3);</FONT>
<BR><FONT FACE="Times New Roman"> break;</FONT>
<BR><FONT FACE="Times New Roman"> } else if (method=="REGISTER") {</FONT>
<BR><FONT FACE="Times New Roman"> route(2);</FONT>
<BR><FONT FACE="Times New Roman"> break;</FONT>
<BR><FONT FACE="Times New Roman"> } else if (method=="ACK") {</FONT>
<BR><FONT FACE="Times New Roman"> route(1);</FONT>
<BR><FONT FACE="Times New Roman"> break;</FONT>
<BR><FONT FACE="Times New Roman"> };</FONT>
</P>
<P><FONT FACE="Times New Roman"> lookup("aliases");</FONT>
<BR><FONT FACE="Times New Roman"> if (uri!=myself) {</FONT>
<BR><FONT FACE="Times New Roman"> route(4);</FONT>
<BR><FONT FACE="Times New Roman"> route(1);</FONT>
<BR><FONT FACE="Times New Roman"> break;</FONT>
<BR><FONT FACE="Times New Roman"> };</FONT>
</P>
<P><FONT FACE="Times New Roman"> if (!lookup("location")) {</FONT>
<BR><FONT FACE="Times New Roman"> sl_send_reply("404", "User Not Found");</FONT>
<BR><FONT FACE="Times New Roman"> break;</FONT>
<BR><FONT FACE="Times New Roman"> };</FONT>
</P>
<P><FONT FACE="Times New Roman"> route(1);</FONT>
</P>
<P><FONT FACE="Times New Roman">this solve my problem but it seems not to be so accurate.</FONT>
<BR><FONT FACE="Times New Roman">I hope that someone can help me<BR>
Thanks!<BR>
Ricardo Martinez.-</FONT>
</P>
<BR>
<P><FONT FACE="Arial" SIZE=2 COLOR="#000000"> <<cancel_debug.txt>> </FONT>
</P>
</BODY>
</HTML>