<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.2900.2523" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT face=Arial size=2>Hi guys, </FONT></DIV>
<DIV><FONT face=Arial size=2>I have a strange problem when tying to forward call
to Quintum gw. </FONT></DIV>
<DIV><FONT face=Arial size=2>Callee is hearing what I speak but I don't hear
anything. </FONT></DIV>
<DIV><FONT face=Arial size=2>Forwarding to another SER is ok. Both - users with
real ips and natted.</FONT></DIV>
<DIV><FONT face=Arial size=2>Somebody can help me?</FONT></DIV>
<DIV> </DIV>
<DIV><FONT face=Arial size=2>Here is my config file:</FONT></DIV>
<DIV><FONT face=Arial
size=2>debug=10 # debug level
(cmd line: -dddddddddd)<BR>#fork=yes<BR>log_stderror=yes # (cmd line:
-E)</FONT></DIV>
<DIV> </DIV>
<DIV><FONT face=Arial size=2>/* Uncomment these lines to enter debugging mode
<BR>debug=7<BR>fork=no<BR>log_stderror=yes<BR>*/</FONT></DIV>
<DIV> </DIV>
<DIV><FONT face=Arial size=2>check_via=no # (cmd. line:
-v)<BR>dns=no #
(cmd. line: -r)<BR>rev_dns=no # (cmd. line:
-R)<BR>port=5060<BR>children=4<BR>fifo="/tmp/ser_fifo"<BR>#fork=no<BR>#
------------------ module loading
----------------------------------</FONT></DIV>
<DIV> </DIV>
<DIV><FONT face=Arial size=2># Uncomment this if you want to use SQL
database<BR>loadmodule "/usr/local/lib/ser/modules/mysql.so"</FONT></DIV>
<DIV> </DIV>
<DIV><FONT face=Arial size=2>loadmodule
"/usr/local/lib/ser/modules/sl.so"<BR>loadmodule
"/usr/local/lib/ser/modules/tm.so"<BR>loadmodule
"/usr/local/lib/ser/modules/rr.so"<BR>loadmodule
"/usr/local/lib/ser/modules/maxfwd.so"<BR>loadmodule
"/usr/local/lib/ser/modules/usrloc.so"<BR>loadmodule
"/usr/local/lib/ser/modules/registrar.so"<BR>loadmodule
"/usr/local/lib/ser/modules/auth.so"<BR>loadmodule
"/usr/local/lib/ser/modules/auth_db.so"<BR>loadmodule
"/usr/local/lib/ser/modules/textops.so"<BR>loadmodule
"/usr/local/lib/ser/modules/domain.so"<BR>loadmodule
"/usr/local/lib/ser/modules/mediaproxy.so"<BR>loadmodule
"/usr/local/lib/ser/modules/acc.so"<BR>loadmodule
"/usr/local/lib/ser/modules/group.so"<BR>loadmodule
"/usr/local/lib/ser/modules/nathelper.so"<BR># ----------------- setting
module-specific parameters ---------------</FONT></DIV>
<DIV> </DIV>
<DIV><FONT face=Arial size=2># -- usrloc params --<BR>modparam("usrloc",
"db_mode", 2)<BR>modparam("usrloc", "db_url",
"mysql://ser:heslo@192.168.2.15/ser")<BR>modparam("usrloc","user_column","username")</FONT></DIV>
<DIV> </DIV>
<DIV><FONT face=Arial size=2>modparam("auth_db", "calculate_ha1",
yes)<BR>modparam("auth_db", "password_column", "password")<BR>modparam("rr",
"enable_full_lr", 1)<BR>#modparam("acc", "db_url",
"mysql://ser:heslo@192.168.2.15/ser")<BR>#modparam("acc", "log_level", 2)
<BR>#modparam("acc", "log_flag", 3)<BR>#modparam("acc", "log_level", 1)<BR>#
number of flag, which will be used for accounting; if a message is<BR># labeled
with this flag, its completion status will be reported<BR>modparam("acc",
"log_flag", 1)<BR>modparam("acc", "log_fmt", "cdfimorstup")<BR>modparam("acc",
"db_url", "mysql://ser:heslo@192.168.2.15/ser")<BR>modparam("acc", "db_flag",
1)<BR>modparam("acc", "db_missed_flag", 1)<BR>modparam("acc", "log_missed_flag",
1)<BR>#modparam("acc", "report_cancels", 1)<BR>modparam("acc", "report_ack",
1)<BR>#modparam("mediaproxy", "mediaproxy_socket",
"/var/run/proxydispatcher.sock")<BR>#modparam("mediaproxy", "natping_interval",
20)<BR>modparam("nathelper","rtpproxy_sock",
"/var/run/rtpproxy.sock")<BR>modparam("registrar", "nat_flag",
6)<BR>modparam("nathelper", "natping_interval", 30) # Ping interval 30
s<BR>modparam("nathelper", "ping_nated_only", 1)</FONT></DIV>
<DIV> </DIV>
<DIV><FONT face=Arial size=2>listen=193.2.6.17<BR>#
------------------------- request routing logic -------------------<BR>#
main routing logic<BR>route{<BR> if
(!mf_process_maxfwd_header("70"))
{<BR>
sl_send_reply("483","Too Many
Hops");<BR>
break;<BR>
};<BR> if ( msg:len > max_len )
{<BR>
sl_send_reply("513", "Message too
big");<BR>
break;<BR> };<BR> if
(nat_uac_test("3")) {<BR> if (method == "REGISTER" || !
search("^Record-Route:")) {<BR> log("LOG: Someone
trying to register from private IP, rewriting\n");</FONT></DIV>
<DIV> </DIV>
<DIV><FONT face=Arial size=2> # This will work
only for user agents that support symmetric<BR> #
communication. We tested quite many of them and majority
is<BR> # smart enough to be symmetric. In some
phones it takes a configuration<BR> # option. With
Cisco 7960, it is called NAT_Enable=Yes, with kphone it
is<BR> # called "symmetric media" and "symmetric
signalling".</FONT></DIV>
<DIV> </DIV>
<DIV><FONT face=Arial size=2> fix_nated_contact();
# Rewrite contact with source IP of signalling<BR>
if (method == "INVITE")
{<BR> fix_nated_sdp("1");
# Add direction=active to SDP<BR>
};<BR> force_rport(); # Add rport parameter to
topmost Via<BR> setflag(6); #
Mark as NATed<BR> };<BR> };</FONT></DIV>
<DIV> </DIV><FONT face=Arial size=2>
<DIV><BR> if (!method=="REGISTER") record_route(); </DIV>
<DIV> </DIV>
<DIV> if (loose_route()) {<BR> # mark routing logic in
request<BR> append_hf("P-hint: rr-enforced\r\n");
<BR> route(1);<BR> break;<BR> };</DIV>
<DIV> </DIV>
<DIV> if (!uri==myself) {<BR> # mark routing logic in
request<BR> append_hf("P-hint: outbound\r\n"); </DIV>
<DIV> </DIV>
<DIV> route(1);<BR> break;<BR> };</DIV>
<DIV> </DIV>
<DIV> if (uri==myself) {</DIV>
<DIV> </DIV>
<DIV> if (method=="REGISTER") {</DIV>
<DIV> </DIV>
<DIV># Uncomment this if you want to use digest
authentication<BR> if (!www_authorize("193.2.6.17",
"subscriber")) {<BR> www_challenge("193.2.6.17",
"0");<BR> break;<BR> };</DIV>
<DIV> </DIV>
<DIV> save("location");<BR> break;<BR> };</DIV>
<DIV> </DIV>
<DIV> lookup("aliases");<BR> if (!uri==myself)
{<BR> append_hf("P-hint: outbound alias\r\n");
<BR> route(1);<BR> break;<BR> };</DIV>
<DIV> </DIV>
<DIV>if (uri=~"^sip:[1-9]*@193.2.6.17") { # QUINTUM
GW<BR>
rewritehost("194.24.1.6");<BR>
append_branch("194.24.1.6");<BR>#
t_relay_to_udp("194.24.1.6",
"5060");<BR>
t_relay();<BR>
rewritehostport("194.24.1.6:5060");<BR>
append_hf("P-hint: VoipSwitch
GATEWAY");<BR>
break;<BR>}<BR>
} else {<BR>if (uri=~"^sip:[0]*@193.2.6.17")
{ ### Other
SER<BR>
setflag(1);<BR>
rewritehostport("bla.mydomain.com:5060");<BR>
append_branch("bla.mydomain.com");<BR>
t_relay();<BR>
break;<BR>};<BR>};</DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV><BR> # native SIP destinations are handled using our USRLOC
DB<BR> if (!lookup("location"))
{<BR> sl_send_reply("404", "Not
Found");<BR> break;<BR> };</DIV>
<DIV> </DIV>
<DIV># };<BR> append_hf("P-hint: usrloc applied\r\n");
<BR> route(1);<BR>}</DIV>
<DIV> </DIV>
<DIV>route[1] <BR>{<BR> <BR> <BR> # if client or server know to
be behind a NAT, enable relay<BR> if (isflagset(6))
{<BR> force_rtp_proxy();<BR> };</DIV>
<DIV> </DIV>
<DIV> # NAT processing of replies; apply to all transactions (for
example,<BR> # re-INVITEs from public to private UA are hard to identify
as<BR> # NATed at the moment of request processing); look at
replies<BR> t_on_reply("1");</DIV>
<DIV> </DIV>
<DIV> # send it out now; use stateful forwarding as it works
reliably<BR> # even for UDP2TCP<BR> if (!t_relay())
{<BR> sl_reply_error();<BR> };<BR>}</DIV>
<DIV> </DIV>
<DIV># !! Nathelper<BR>onreply_route[1] {<BR> # NATed
transaction ?<BR> if (isflagset(6) && status =~
"(183)|2[0-9][0-9]") {<BR>
fix_nated_contact();<BR> force_rtp_proxy();<BR> #
otherwise, is it a transaction behind a NAT and we did not<BR>
# know at time of request processing ? (RFC1918 contacts)<BR>
} else if (nat_uac_test("1")) {<BR>
fix_nated_contact();<BR> };<BR>}<BR></FONT></DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV><FONT face=Arial size=2>Thanks In Advance!</FONT></DIV>
<DIV><FONT face=Arial size=2>Pavel Siderov</FONT> </DIV></BODY></HTML>