<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=Content-Type content="text/html; charset=gb2312">
<meta name=Generator content="Microsoft Word 11 (filtered medium)">
<style>
<!--
/* Font Definitions */
@font-face
        {font-family:宋体;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:"\@宋体";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        text-align:justify;
        text-justify:inter-ideograph;
        font-size:10.5pt;
        font-family:"Times New Roman";}
a:link, span.MsoHyperlink
        {color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:Arial;
        color:windowtext;}
/* Page Definitions */
@page Section1
        {size:595.3pt 841.9pt;
        margin:72.0pt 90.0pt 72.0pt 90.0pt;
        layout-grid:15.6pt;}
div.Section1
        {page:Section1;}
-->
</style>
</head>
<body lang=ZH-CN link=blue vlink=purple style='text-justify-trim:punctuation'>
<div class=Section1 style='layout-grid:15.6pt'>
<p class=MsoNormal><font size=1 face=Arial><span lang=EN-US style='font-size:
9.0pt;font-family:Arial'>Hi,<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=1 face=Arial><span lang=EN-US style='font-size:
9.0pt;font-family:Arial'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=1 face=Arial><span lang=EN-US style='font-size:
9.0pt;font-family:Arial'>We have problem with 0.8.12 release in cvs –r rel_0_8_12
sip_router, we are unable to see contact online status. From debug
mode, we see “lookup() ‘xxxxx’ not found in usrloc” <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=1 face=Arial><span lang=EN-US style='font-size:
9.0pt;font-family:Arial'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=1 face=Arial><span lang=EN-US style='font-size:
9.0pt;font-family:Arial'>Here is our configuration:<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=1 face=Arial><span lang=EN-US style='font-size:
9.0pt;font-family:Arial'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>route {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
if (!mf_process_maxfwd_header("10")) {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
log("LOG: Too many hops\n");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
sl_send_reply("483", "Alas Too Many Hops");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
break;<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
};<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
if (msg:len >= max_len) {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
sl_send_reply("513", "Message too large");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
break;<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
}; <o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-indent:30.0pt;
text-autospace:none'><font size=2 face=宋体><span lang=EN-US style='font-size:
10.0pt;font-family:宋体'> if (nat_uac_test("3")) {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# Allow RR-ed requests, as these may indicate that<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# a NAT-enabled proxy takes care of it; unless it is<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# a REGISTER<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
if (method == "REGISTER" || ! search("^Record-Route:")) {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
log("LOG: Someone trying to register from private IP, rewriting\n");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# This will work only for user agents that support symmetric<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# communication. We
tested quite many of them and majority is<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# smart enough to be symmetric. In some phones it takes a configuration<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# option. With Cisco 7960, it is called NAT_Enable=Yes, with kphone it is<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# called "symmetric media" and "symmetric signalling".<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
fix_nated_contact(); # Rewrite contact with source IP of signalling<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
if (method == "INVITE") {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
fix_nated_sdp("1"); # Add direction=active to SDP<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
};<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
force_rport(); # Add rport parameter to topmost Via<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
setflag(6); # Mark as NATed<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
append_to_reply("P-NATed-Caller: Yes\r\n");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
};<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
};<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
if (loose_route()) {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
setflag(1);<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
t_relay();<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
break;<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
};<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
if (method == "REGISTER") {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
/*<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
if (!allow_register("register.allow", "register.deny")) {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
log(1, "LOG: alert: Forbidden IP in Contact\n");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
sl_send_reply("403", "Forbidden");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
break;<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
};<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
*/<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# prohibit attempts to grab someone else's To address<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# using valid credentials;<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
if (!www_authorize("xxxxx.com", "subscriber")) {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# challenge if none or invalid credentials<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
www_challenge("xxxxx.com",
"0");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
break;<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
};<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
if (!save("location")) {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
sl_reply_error();<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
};<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
m_dump();<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
break;<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
};<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
lookup("aliases");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# Remove leading + if it is a number begining with +<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
if (uri =~ "^[a-zA-Z]+:\+[0-9]+@") {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
strip(1);<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
prefix("00");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
};<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
if (!does_uri_exist()) {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# Try numeric destinations through the gateway<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
if (uri =~ "^[a-zA-Z]+:[0-9]+@") {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
route(4);<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
} else {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
sl_send_reply("604", "Does Not Exist Anywhere");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
};<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
break;<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
}; <o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
if (!lookup("location")) {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# handle user which was not found<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
route(3);<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
break;<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
};<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
append_hf("P-hint: usrloc applied\r\n");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
route(1);<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>}<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>route[1]
{<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
if (uri=~"[@:](192\.168\.|10\.|172\.(1[6-9]|2[0-9]|3[0-1])\.)"
&& !search("^Route:")) {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
sl_send_reply("479", "We don't forward to private IP
addresses");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
break;<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
};<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
if (isflagset(6)) {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
if (!is_present_hf("P-RTP-Proxy")) {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
force_rtp_proxy();<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
append_hf("P-RTP-Proxy: YES\r\n");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
};<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
append_hf("P-NATed-Callee: Yes\r\n");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
};<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# nat processing of replies; apply to all transactions (for example,<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# re-INVITEs from public to private UA are hard to identify as<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# natted at the moment of request processing); look at replies<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
t_on_reply("1");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
if (!t_relay()) {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
sl_reply_error();<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
break;<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
};<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>}<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>onreply_route[1]
{<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# natted transaction ?<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
if (isflagset(6) && status =~ "(183)|2[0-9][0-9]") {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
fix_nated_contact();<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
force_rtp_proxy();<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# otherwise, is it a transaction behind a NAT and we did not<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# know at time of request processing? (RFC1918 contacts)<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
} else if (nat_uac_test("1")) {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
fix_nated_contact();<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
};<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# keep Cisco gatweay sending keep-alives<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
if (isflagset(7) && status=~"2[0-9][0-9]") {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
remove_hf("Session-Expires");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
append_hf("Session-Expires: 60;refresher=UAC\r\n");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
fix_nated_sdp("1");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
};<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>}<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>route[3]
{<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# message store<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
if (method == "MESSAGE") {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
if (!t_newtran()) {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
sl_reply_error();<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
break;<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
};<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
if (m_store("0")) {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
t_reply("202", "Accepted for Later Delivery");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
break;<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
};<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
t_reply("503", "Service Unavailable");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
break;<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
};<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# non-Voip -- just send "off-line"<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
if (!(method=="INVITE" || method == "ACK" || method ==
"CANCEL")) {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
sl_send_reply("404", "Not Found");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
break;<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
};<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
if (t_newtran()) {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
if (method == "ACK") {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
log(1, "CAUTION: strange thing: ACK passed t_newtran\n");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
break;<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
};<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
t_reply("404", "Not Found");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
};<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# we account missed incoming calls; previous statteful processing<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# guarantees that retransmissions are not accounted<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
if (method == "INVITE") {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
acc_log_request("404 missed call\n");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
acc_db_request("404 missed call", "missed_calls");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
};<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>};<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>route[4]
{<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# discard non-PSTN methods<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
if (!(method == "INVITE" || method == "ACK" || method ==
"CANCEL" || method == "OPTIONS" || method ==
"BYE")) {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
sl_send_reply("500",
"only VoIP methods accepted for GW");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
break;<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
};<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# continue with requests to PSTN gateway ...<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# no authentication needed if the destination is on our free-pstn<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# list or if the caller is the digest-less gateway<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
#<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# apply ACLs only to INVITEs -- we don't need to protect other<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# requests, as they don't imply charges; also it could cause troubles<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# when a call comes in via PSTN and goes to a party that can't<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# authenticate (voicemail, other domain) -- BYEs would fail then<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
if (method == "INVITE" || method=="ACK" ||
method=="CANCEL" || method=="BYE") {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# does the authenticated user have a permission for local<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# calls (destinations beginning with a single zero)?<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# (i.e., is he in the "local" group?)<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
if (uri=~"sip:0[1-9][0-9]+@.*") {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
if (!is_user_in("from", "all") &&
!is_user_in("from","ld")) {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
rewriteuser("unregistereduser");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
forward(211.147.234.158,5090);<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
break;<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
};<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
record_route();<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
setflag(1);<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
route(5);<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# the same for long-distance (destinations begin with two zeros")<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
}
else if (uri=~"sip:00[1-9][0-9]+@.*") {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
if (!is_user_in("from", "all") && !is_user_in("from","int"))
{<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
rewriteuser("unregistereduser");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
forward(123.123.123.122,5090); #announcement server<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
break;<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
</span></font><font size=2 face=宋体><span style='font-size:10.0pt;font-family:
宋体'>};<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span style='font-size:10.0pt;font-family:宋体'>
record_route();<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span style='font-size:10.0pt;font-family:宋体'>
setflag(1);<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
route(10);<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
# everything else (e.g., interplanetary calls) is denied<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
</span></font><font size=2 face=宋体><span style='font-size:10.0pt;font-family:
宋体'>} else {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span style='font-size:10.0pt;font-family:宋体'>
rewriteuser("wrongnumber");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span style='font-size:10.0pt;font-family:宋体'>
forward(123.123.123.122,5090);<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span style='font-size:10.0pt;font-family:宋体'>
break;<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span style='font-size:10.0pt;font-family:宋体'>
};<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span style='font-size:10.0pt;font-family:宋体'>
}; # authorized PSTN<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span style='font-size:10.0pt;font-family:宋体'>
break;<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span style='font-size:10.0pt;font-family:宋体'>}<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>route[5]
{<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
rewritehostport("123.123.123.125:5060");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
append_branch(); # Command needed for reroute to work<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
consume_credentials();<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
append_hf("P-Hint: GATEWAY\r\n");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
t_on_failure("6");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
t_relay();<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>}<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>failure_route[6]
{<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
rewritehostport("123.123.123.124:5060");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
append_branch();<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
t_on_failure("7");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
t_relay();<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span style='font-size:10.0pt;font-family:宋体'>}<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span style='font-size:10.0pt;font-family:宋体'>failure_route[7] {<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span style='font-size:10.0pt;font-family:宋体'>
rewritehostport("123.123.123.123:5060");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
append_branch();<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
t_on_failure("8");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
t_relay();<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>}<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>failure_route[8]
{<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
rewriteuser("networkbusy");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
rewritehostport("123.123.123.122:5090");<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
append_branch();<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span lang=EN-US style='font-size:10.0pt;font-family:宋体'>
t_relay();<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span style='font-size:10.0pt;font-family:宋体'>}<o:p></o:p></span></font></p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'><font
size=2 face=宋体><span style='font-size:10.0pt;font-family:宋体'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=1 face=Arial><span lang=EN-US style='font-size:
9.0pt;font-family:Arial'><o:p> </o:p></span></font></p>
</div>
</body>
</html>