Greger,
Since fix_nated_register does not exist with 0.8.14, will fix_nated_contact do instead?
Also if I am leaving out the has_totag() at the start of the script, will this greatly
effect its functionality?
Thank you,
Vivienne
"Greger V. Teigre" <greger(a)teigre.com> wrote:
Vivienne,
This is the first INVITE going from SER to your public phone. I have prefixed my comments
with *==>
U 84.203.148.146:5060 -> 157.190.74.151:5060
INVITE sip:2092@157.190.74.151 SIP/2.0..Via: SIP/2.0/UDP
84.203.148.146;branch=z9hG4bK77bc.b54ca216.0..
Via: SIP/2.0/UDP
172.16.3.31;rport=5060;received=84.203.148.14;branch=z9hG4bK1a48edc121f5bc1f..
From: "2093" <sip:2093@84.203.148.146>;tag=2dc376dcd4655094..
To: <sip:2092@84.203.148.146>..
Contact: <sip:2093@84.203.148.14:5060>..
*==> Correctly changed to the public address and port of 2093
Supported: replaces..Call-ID: 44e1ae63c476fbff@172.16.3.31..CSeq: 10327 INVITE..
User-Agent: Grandstream BT100 1.0.5.18..
Max-Forwards: 69..Allow: INVITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SUBSCRIBE..
Content-Type: application/sdp..
Content-Length: 443....v=0..
o=2093 8000 0 IN IP4 172.16.3.31..
s=SIP Call..
c=IN IP4 84.203.148.1484.203.148.146..
*==> Here it seems that first fix_nated_sdp("3") is called (replace private
IP with public IP), then force_rtp_proxy() (replace with proxy IP). You must only call
one of them (fix_nated_sdp("1") is ok)
t=0 0..
m=audio 35006 RTP/AVP 0 8 4 18 2 15 99 9..
a=sendrecv..
a=rtpmap:0 PCMU/8000/3..
a=rtpmap:8 PCMA/8000/3..
a=rtpmap:4 G723/8000/3..a=rtpmap:18 G729/8000/3..
a=rtpmap:2 G726-32/8000/3..
a=rtpmap:15 G728/8000/3..
a=rtpmap:99 iLBC/8000/3..
a=fmtp:99 mode=20..
a=rtpmap:9 G722/8000/3..
a=ptime:20..
a=direction:active..
*==> Added by fix_nated_sdp("1") (and "3")
a=oldmediaip:172.16.3.31..
*==> Added by fix_nated_sdp("3")
a=nortpproxy:yes..
*==> Added by force_rtp_proxy()
So, your call is proxied. Try using fix_nated_sdp("1"). It should make the
INVITE correct. You have not posted the OK, so I don't know what is happening there.
If you have followed the rtpproxy
example in your onreply_route, you should be
fine.
Good luck!
g-)
---- Original Message ----
From: Vivienne Curran
To: serusers(a)lists.iptel.org
Sent: Tuesday, April 05, 2005 01:23 PM
Subject: [Serusers] Contact Header and SDP not rewritten
Hello,
I have a problem whereby when a private client rings a public client
only the public user can hear voice and when the public user rings
the private user, no audio is transmitted. After looking at the
messages I have have determined that the contact header and sdp part
of the invite contains the private address of the natted client. This
would lead me to believe that the registration process is incorrect.
My problem is that I believe my script should handle the registration
process correctly and I suspect that the following code is being
skipped: I tried changing it to nat_uac_test("19") and
fix_nated_sdp("3") but that didnt help.
if (nat_uac_test("3")){
if (method == "REGISTER" || ! search("^Record-Route:")){
log("Log: Someone trying to register from private IP,rewriting\n");
fix_nated_contact(); #Rewrite contact with source IP
if (method == "INVITE"){
fix_nated_sdp("1"); #Add direction=active to SDP
force_rtp_proxy();
};
force_rport(); # Add rport parameter to topmost Via
setflag(6); # Mark as Nated
};
};
I have included the log message below and my ser.cfg as an
attachment. Please let me know where I could be going wrong.
Thank you,
Vivienne.
2093 (private) ringing 2092 (public)
U 84.203.148.14:5060 -> 84.203.148.146:5060
INVITE sip:2092@84.203.148.146 SIP/2.0..Via: SIP/2.0/UDP
172.16.3.31;branch
=z9hG4bK1a48edc121f5bc1f..From: "2093"
<sip:2093@84.203.148.146>;tag=2dc376
dcd4655094..To: <sip:2092@84.203.148.146>..Contact:
<sip:2093@172.16.3.31>.
.Supported: replaces..Call-ID: 44e1ae63c476fbff@172.16.3.31..CSeq:
10327 IN
VITE..User-Agent: Grandstream BT100 1.0.5.18..Max-Forwards:
70..Allow: INVI
TE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SUBSCRIBE..Content-Type:
applic
ation/sdp..Content-Length: 362....v=0..o=2093 8000 0 IN IP4
172.16.3.31..s=
SIP Call..c=IN IP4 172.16.3.31..t=0 0..m=audio 5004 RTP/AVP 0 8 4
18 2 15 9
9 9..a=sendrecv..a=rtpmap:0 PCMU/8000/3..a=rtpmap:8
PCMA/8000/3..a=rtpmap:4
G723/8000/3..a=rtpmap:18 G729/8000/3..a=rtpmap:2
G726-32/8000/3..a=rtpmap:
15 G728/8000/3..a=rtpmap:99 iLBC/8000/3..a=fmtp:99
mode=20..a=rtpmap:9 G722
/8000/3..a=ptime:20..
U 84.203.148.146:5060 -> 84.203.148.14:5060
SIP/2.0 100 trying -- your call is important to us..Via:
SIP/2.0/UDP 172.16
.3.31;branch=z9hG4bK1a48edc121f5bc1f;rport=5060;received=84.203.148.14..Fro
m: "2093" <sip:2093@84.203.148.146>;tag=2dc376dcd4655094..To:
<sip:2092@84.
203.148.146>..Call-ID: 44e1ae63c476fbff@172.16.3.31..CSeq: 10327
INVITE..Se
rver: Sip EXpress router (0.8.14 (i386/linux))..Content-Length:
0..Warning:
392 84.203.148.146:5060 "Noisy feedback tells: pid=4732
req_src_ip=84.203
.148.14 req_src_port=5060 in_uri=sip:2092@84.203.148.146
out_uri=sip:2092@1
57.190.74.151 via_cnt==1"....
U 84.203.148.146:5060 -> 157.190.74.151:5060
INVITE sip:2092@157.190.74.151 SIP/2.0..Via: SIP/2.0/UDP
84.203.148.146;bra
nch=z9hG4bK77bc.b54ca216.0..Via: SIP/2.0/UDP
172.16.3.31;rport=5060;receive
d=84.203.148.14;branch=z9hG4bK1a48edc121f5bc1f..From: "2093"
<sip:2093@84.2
03.148.146>;tag=2dc376dcd4655094..To:
<sip:2092@84.203.148.146>..Contact: <
sip:2093@84.203.148.14:5060>..Supported: replaces..Call-ID:
44e1ae63c476fbf
f@172.16.3.31..CSeq: 10327 INVITE..User-Agent: Grandstream BT100
1.0.5.18..
Max-Forwards: 69..Allow:
INVITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SU
BSCRIBE..Content-Type: application/sdp..Content-Length:
443....v=0..o=2093
8000 0 IN IP4 172.16.3.31..s=SIP Call..c=IN IP4
84.203.148.1484.203.148.146
..t=0 0..m=audio 35006 RTP/AVP 0 8 4 18 2 15 99
9..a=sendrecv..a=rtpmap:0 P
CMU/8000/3..a=rtpmap:8 PCMA/8000/3..a=rtpmap:4
G723/8000/3..a=rtpmap:18 G72
9/8000/3..a=rtpmap:2 G726-32/8000/3..a=rtpmap:15
G728/8000/3..a=rtpmap:99 i
LBC/8000/3..a=fmtp:99 mode=20..a=rtpmap:9
G722/8000/3..a=ptime:20..a=direct
ion:active..a=oldmediaip:172.16.3.31..a=nortpproxy:yes..
U 84.203.148.146:5060 -> 157.190.74.150:5060
INVITE sip:2092@157.190.74.150 SIP/2.0..Via: SIP/2.0/UDP
84.203.148.146;bra
nch=z9hG4bK77bc.b54ca216.1..Via: SIP/2.0/UDP
172.16.3.31;rport=5060;receive
d=84.203.148.14;branch=z9hG4bK1a48edc121f5bc1f..From: "2093"
<sip:2093@84.2
03.148.146>;tag=2dc376dcd4655094..To:
<sip:2092@84.203.148.146>..Contact: <
sip:2093@84.203.148.14:5060>..Supported: replaces..Call-ID:
44e1ae63c476fbf
f@172.16.3.31..CSeq: 10327 INVITE..User-Agent: Grandstream BT100
1.0.5.18..
Max-Forwards: 69..Allow:
INVITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SU
BSCRIBE..Content-Type: application/sdp..Content-Length:
443....v=0..o=2093
8000 0 IN IP4 172.16.3.31..s=SIP Call..c=IN IP4
84.203.148.1484.203.148.146
..t=0 0..m=audio 35006 RTP/AVP 0 8 4 18 2 15 99
9..a=sendrecv..a=rtpmap:0 P
CMU/8000/3..a=rtpmap:8 PCMA/8000/3..a=rtpmap:4
G723/8000/3..a=rtpmap:18 G72
9/8000/3..a=rtpmap:2 G726-32/8000/3..a=rtpmap:15
G728/8000/3..a=rtpmap:99 i
LBC/8000/3..a=fmtp:99 mode=20..a=rtpmap:9
G722/8000/3..a=ptime:20..a=direct
ion:active..a=oldmediaip:172.16.3.31..a=nortpproxy:yes..
U 157.190.74.151:5060 -> 84.203.148.146:5060
SIP/2.0 100 Trying..Via: SIP/2.0/UDP
84.203.148.146;branch=z9hG4bK77bc.b54c
a216.0..Via: SIP/2.0/UDP
172.16.3.31;rport=5060;received=84.203.148.14;bran
ch=z9hG4bK1a48edc121f5bc1f..From: "2093"
<sip:2093@84.203.148.146>;tag=2dc3
76dcd4655094..To: <sip:2092@84.203.148.146>..Call-ID:
44e1ae63c476fbff@172.
16.3.31..CSeq: 10327 INVITE..User-Agent: Grandstream BT100
1.0.5.18..Conten
t-Length: 0....
U 157.190.74.151:5060 -> 84.203.148.146:5060
SIP/2.0 180 Ringing..Via: SIP/2.0/UDP
84.203.148.146;branch=z9hG4bK77bc.b54
ca216.0..Via: SIP/2.0/UDP
172.16.3.31;rport=5060;received=84.203.148.14;bra
nch=z9hG4bK1a48edc121f5bc1f..From: "2093"
<sip:2093@84.203.148.146>;tag=2dc
376dcd4655094..To:
<sip:2092@84.203.148.146>;tag=10bdf2044401a257..Call-ID:
44e1ae63c476fbff@172.16.3.31..CSeq: 10327 INVITE..User-Agent:
Grandstream
BT100 1.0.5.18..Content-Length: 0....
Send instant messages to your online friends
http://uk.messenger.yahoo.com
#
# $Id: ser.cfg,v 1.21.4.1 2003/11/10 15:35:15 andrei Exp $
#
# simple quick-start config script
#
# ----------- global configuration parameters ------------------------
#debug=3 # debug level (cmd line: -dddddddddd)
#fork=yes
#log_stderror=no # (cmd line: -E)
/* Uncomment these lines to enter debugging mode
debug=7
fork=no
log_stderror=yes
*/
check_via=no # (cmd. line: -v)
dns=no # (cmd. line: -r)
rev_dns=no # (cmd. line: -R)
#port=5060
#children=4
fifo="/tmp/ser_fifo"
alias="157.190.74.152:5060"
# ------------------ module loading ----------------------------------
# Uncomment this if you want to use SQL database
loadmodule "/usr/lib/ser/modules/mysql.so"
loadmodule "/usr/lib/ser/modules/sl.so"
loadmodule "/usr/lib/ser/modules/tm.so"
loadmodule "/usr/lib/ser/modules/rr.so"
loadmodule "/usr/lib/ser/modules/maxfwd.so"
loadmodule "/usr/lib/ser/modules/usrloc.so"
loadmodule "/usr/lib/ser/modules/registrar.so"
loadmodule "/usr/lib/ser/modules/textops.so"
loadmodule "/usr/lib/ser/modules/nathelper.so"
#loadmodule "/usr/lib/ser/modules/pa.so"
loadmodule "/usr/lib/ser/modules/cpl-c.so"
# Uncomment this if you want digest authentication
# mysql.so must be loaded !
loadmodule "/usr/lib/ser/modules/auth.so"
loadmodule "/usr/lib/ser/modules/auth_db.so"
# ----------------- setting module-specific parameters ---------------
# -- usrloc params --
#modparam("usrloc", "db_mode", 0)
# Uncomment this if you want to use SQL database
# for persistent storage and comment the previous line
modparam("usrloc", "db_mode", 2)
# -- auth params --
# Uncomment if you are using auth module
#
modparam("auth_db", "calculate_ha1", yes)
#
# If you set "calculate_ha1" parameter to yes (which true in this
config),
# uncomment also the following parameter)
#
modparam("auth_db", "password_column", "password")
# -- rr params --
# add value to ;lr param to make some broken UAs happy
#NB Had to up this value from 1 to 11 because reinvites were
bombarding called phone
modparam("rr", "enable_full_lr", 11)
#!! Nathelper
modparam("registrar", "nat_flag", 60)
modparam("nathelper", "natping_interval", 30) #Ping interval 30 s
modparam("nathelper", "ping_nated_only", 1) #Ping only clients
behind NAT
modparam("nathelper", "rtpproxy_sock",
"/var/run/rtpproxy.sock")
modparam("tm", "fr_inv_timer", 20)
#modparam("pa", "default_expires", 3600)
modparam("usrloc", "db_url",
"sql://root:1alfa156@localhost/ser")
#modparam("cpl-c", "cpl_db",
"mysql://root:1alfa156@localhost/ser")
#modparam("cpl-c", "cpl_table", "cpl")
#modparam("cpl-c", "cpl_dtd_file",
"/work/sip_router/modules/cpl-ccpl-06.dtd")
# ------------------------- request routing logic -------------------
# main routing logic
route{
# initial sanity checks -- messages with
# max_forwards==0, or excessively long requests
if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483","Too Many Hops");
break;
};
if ( msg:len > max_len ) {
sl_send_reply("513", "Message too big");
break;
};
#######################################################################################
if (nat_uac_test("3")){
if (method == "REGISTER" || ! search("^Record-Route:")){
log("Log: Someone trying to register from private IP,rewriting\n");
fix_nated_contact(); #Rewrite contact with source IP
if (method == "INVITE"){
fix_nated_sdp("1"); #Add direction=active to SDP
force_rtp_proxy();
};
force_rport(); # Add rport parameter to topmost Via
setflag(6); # Mark as Nated
};
};
########################################################################################
# we record-route all messages -- to make sure that
# subsequent messages will go through our proxy; that's
# particularly good if upstream and downstream entities
# use different transport protocol
if (method =="REGISTER") record_route();
# loose-route processing
if (loose_route()) {
#commented 11/02/05
#t_relay();
route(1);
break;
};
# if the request is for other domain use UsrLoc
# (in case, it does not work, use the following command
# with proper names and addresses in it)
if (uri==myself) {
log(1,"into loop");
if (method=="REGISTER") {
# Uncomment this if you want to use digest authentication
# if (!www_authorize("157.190.74.152", "subscriber")) {
# www_challenge("157.190.74.152", "0");
# break;
# };
#cpl_process_register();
save("location");
break;
};
# if (method=="SUBSCRIBE")
# {
# log(1, "Subscribe\n");
# if(t_newtran())
# {
# log(1, "Registrar\n");
# handle_subscription("registrar");
# };
# break;
# };
lookup("aliases");
if (!uri==myself) {
append_hf("P-hint: outbound alias\r\n");
route(1);
break;
};
if (method=="INVITE"){
log(1,"in invite loop");
#break; #no 100 trying
#if (!cpl_run_script("incoming","is_stateless"))
#{
# #script execution failed
# t_reply("500", "CPL script execution failed");
#};
t_on_failure("1");
};
# native SIP destinations are handled using our USRLOC DB
if (!lookup("location")) {
#sl_send_reply("404", "Not Found");
route(2);
break;
};
};
# forward to current uri now; use stateful forwarding; that
# works reliably even if we forward from TCP to UDP
#commented 11/02/05#######################
if (!t_relay()) {
sl_reply_error();
};
#route(1);
}
######################################entered
11/02/05############################################################
route[1]
{
#!!Nathelper
if(uri=~"[@:](192\.168\.|10\.|172\.(1[6-9]|2[0-9]|3[0-1])\.)" &&
!search("^Route:")){
sl_send_reply("479", "We don't forward to private IP
addresses");
break;
};
if (isflagset(6)){
force_rtp_proxy();
}
t_on_reply("1");
if(!t_relay()){
sl_reply_error();
break;
};
}
######################################entered
11/02/05############################################################
#!! Nathelper
onreply_route[1] {
if(isflagset(6) && status =~ "(183)|2[0-9][0-9]"){
fix_nated_contact();
force_rtp_proxy();
}else if (nat_uac_test("1")){
fix_nated_contact();
};
}
#################################################################################################################
# ------------- handling of unavailable user ------------------
route[2] {
# non-Voip -- just send "off-line"
if (!(method == "INVITE" || method == "ACK" || method ==
"CANCEL")) {
sl_send_reply("404", "Not Found");
break;
};
# forward to voicemail now
rewritehostport("157.190.74.152:5062");
t_relay_to_udp("157.190.74.152", "5062");
}
# if forwarding downstream did not succeed, try voicemail running
# at 172.16.2.120:5062
failure_route[1] {
revert_uri();
rewritehostport("157.190.74.152:5062");
append_branch();
t_relay_to_udp("157.190.74.152", "5062");
}
_______________________________________________
Serusers mailing list
serusers(a)lists.iptel.org
http://lists.iptel.org/mailman/listinfo/serusers