<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
FONT-SIZE: 10pt;
FONT-FAMILY:Tahoma
}
</style>
</head>
<body class='hmmessage'>Hi,<BR>
&nbsp;<BR>
I have a working OpenSER Proxy to asterisk and would like the proxy server to handle Presence.<BR>
&nbsp;<BR>
I have tried adding all of the usual presence code, however it seams that messages are not getting back to the clients. I can see time outs in the SIP messages.<BR>
&nbsp;<BR>
Can anyone see what has gone wrong with this code?<BR>
&nbsp;<BR>
The setup is:<BR>
&nbsp;<BR>
Calls &amp; Registrations:<BR>
&nbsp;<BR>
Client --&gt; OpenSER --&gt; Asterisk<BR>
&nbsp;<BR>
SIP Messages &amp; Presence:<BR>
&nbsp;<BR>
Client --&gt; OpenSER<BR>
&nbsp;<BR>
Thank you for your help in advance.<BR>
&nbsp;<BR>
Ross<BR>
&nbsp;<BR>
----------------------------- CONFIG ----------------------<BR><SPAN lang=EN>
# ----------- global configuration parameters ------------------------<BR>
debug=3 # debug level (cmd line: -dddddddddd)<BR>
fork=yes<BR>
log_stderror=yes # (cmd line: -E)<BR>
#/* Uncomment these lines to enter debugging mode <BR>
#fork=no<BR>
#log_stderror=yes<BR>
#*/<BR>
check_via=yes # (cmd. line: -v)<BR>
dns=no # (cmd. line: -r)<BR>
rev_dns=no # (cmd. line: -R)<BR>
listen=udp:&lt;IP&gt;:5065<BR>
#port=5065<BR>
children=4<BR>
# --- module loading<BR>
mpath="/usr/local/lib64/openser/modules/"<BR>
loadmodule "mysql.so"<BR>
loadmodule "sl.so"<BR>
loadmodule "tm.so"<BR>
loadmodule "rr.so"<BR>
loadmodule "maxfwd.so"<BR>
loadmodule "usrloc.so"<BR>
loadmodule "registrar.so"<BR>
loadmodule "textops.so"<BR>
loadmodule "nathelper.so"<BR>
loadmodule "auth.so"<BR>
loadmodule "auth_db.so"<BR>
loadmodule "mi_fifo.so"<BR>
loadmodule "presence.so"<BR>
loadmodule "presence_xml.so"<BR>
loadmodule "xcap_client.so"<BR>
loadmodule "avpops.so"<BR>
#loadmodule "siptrace.so"<BR>
# --- setting module parameters<BR>
# -- mi_fifo params --<BR>
modparam("mi_fifo", "fifo_name", "/tmp/openser_fifo")<BR>
modparam("usrloc|auth_db|presence|presence_xml|xcap_client","db_url","mysql://openser:openserrw@&lt;address&gt;/openser")<BR>
# -- usrloc params --<BR>
modparam("usrloc", "db_mode", 2)<BR>
modparam("usrloc", "nat_bflag", 6)<BR>
# -- registrar params --<BR>
modparam("registrar|nathelper", "received_avp", "$avp(i:42)")<BR>
# -- auth params --<BR>
modparam("auth_db", "calculate_ha1", yes)<BR>
modparam("auth_db", "password_column", "password")<BR>
# -- rr params --<BR>
modparam("rr", "enable_full_lr", 1)<BR>
# -- nathelper params ---<BR>
modparam("nathelper", "rtpproxy_sock", "udp:127.0.0.1:7890")<BR>
modparam("nathelper", "natping_interval", 30)<BR>
modparam("nathelper", "ping_nated_only", 1)<BR>
modparam("nathelper", "sipping_bflag", 7)<BR>
modparam("nathelper", "sipping_from", "sip:&lt;address&gt;")<BR>
# -- presence parameters ---<BR>
modparam("presence", "max_expires", 3600)<BR>
modparam("presence", "server_address", "sip:&lt;IP&gt;:5065" )<BR>
modparam("xcap_client", "periodical_query", 0)<BR>
modparam("xcap_client", "query_period", 50)<BR>
modparam("presence_xml", "integrated_xcap_server", 1)<BR>
#modparam("presence_xml", "xcap_server", "")<BR>
modparam("presence","fallback2db",1)<BR>
#modparam("siptrace", "trace_flag", 0) <BR>
#modparam("siptrace", "trace_on", 1) <BR>
#modparam("siptrace", "table", "sip_trace") <BR>
&nbsp;<BR>
&nbsp;<BR>
# --- main routing logic<BR>
route<BR>
{<BR>
######################################################<BR>
# CHECK FOR BAD SIP MESSAGES #<BR>
######################################################<BR>
if (!mf_process_maxfwd_header("10")) {<BR>
sl_send_reply("483","Too Many Hops");<BR>
exit;<BR>
};<BR>
if (msg:len &gt;= 2048 ) {<BR>
sl_send_reply("513", "Message too big");<BR>
exit;<BR>
};<BR>
&nbsp;<BR>
######################################################<BR>
# CHECK FOR CLIENT BEHIND A NAT ROUTER #<BR>
######################################################<BR>
route(2);<BR>
if (!method=="REGISTER")<BR>
record_route();<BR>
######################################################<BR>
# PROCESS SUBSCRIBE &amp; NOTIFY MESSAGES #<BR>
######################################################<BR>
if(method=="PUBLISH")<BR>
{<BR>
route(4);<BR>
}<BR>
if(method=="SUBSCRIBE")<BR>
{<BR>
route(4);<BR>
}<BR>
&nbsp;<BR>
if (loose_route()) {<BR>
append_hf("P-hint: rr-enforced\r\n"); <BR>
route(1);<BR>
};<BR>
#####################################################<BR>
# SAVE LOCATION OF CLIENT FOR MESSAGES #<BR>
#####################################################<BR>
if (method=="REGISTER")<BR>
{<BR>
save("location","0x02");<BR>
} <BR>
<BR>
####################################################<BR>
# CHECK IF REGISTERED LOCALY ELSE PASS TO ASTERISK #<BR>
####################################################<BR>
if (!lookup("location"))<BR>
{<BR>
append_hf("P-hint: outbound\r\n");<BR>
}<BR>
else<BR>
{<BR>
append_hf("P-hint: usrloc applied\r\n");<BR>
}<BR>
<BR>
route(1);<BR>
}<BR>
&nbsp;<BR>
route[1] {<BR>
if (subst_uri('/(sip:.*);nat=yes/\1/')){<BR>
setbflag(6);<BR>
};<BR>
if (isflagset(5)||isbflagset(6)) {<BR>
route(3);<BR>
}<BR>
if (!t_relay()) {<BR>
sl_reply_error();<BR>
};<BR>
exit;<BR>
}<BR>
route[2]{<BR>
force_rport();<BR>
if (nat_uac_test("19")) {<BR>
if (method=="REGISTER") {<BR>
fix_nated_register();<BR>
} else {<BR>
fix_nated_contact();<BR>
};<BR>
setflag(5);<BR>
};<BR>
}<BR>
&nbsp;<BR>
route[3] {<BR>
if (is_method("BYE")) <BR>
{<BR>
unforce_rtp_proxy();<BR>
} <BR>
else if (is_method("INVITE"))<BR>
{<BR>
force_rtp_proxy();<BR>
t_on_failure("2");<BR>
};<BR>
if (isflagset(5))<BR>
{<BR>
search_append('Contact:.*sip:[^&gt;[:cntrl:]]*', ';nat=yes');<BR>
}<BR>
t_on_reply("1");<BR>
}<BR>
route[4]<BR>
{<BR>
# absorb retransmissions<BR>
if (! t_newtran())<BR>
{<BR>
sl_reply_error();<BR>
exit;<BR>
};<BR>
<BR>
if(is_method("PUBLISH"))<BR>
{<BR>
if($hdr(Sender)!= NULL)<BR>
{<BR>
handle_publish("$hdr(Sender)");<BR>
}<BR>
else<BR>
{<BR>
handle_publish();<BR>
}<BR>
t_release();<BR>
} <BR>
if(is_method("SUBSCRIBE"))<BR>
{<BR>
handle_subscribe();<BR>
t_release();<BR>
};<BR>
<BR>
exit;<BR>
}<BR>
branch_route[4] <BR>
{<BR>
log("new branch at $ru\n");<BR>
}<BR>
&nbsp;<BR>
onreply_route[4] <BR>
{<BR>
log("incoming reply\n");<BR>
}<BR>
failure_route[2] {<BR>
if (isbflagset(6) || isflagset(5)) <BR>
{<BR>
unforce_rtp_proxy();<BR>
}<BR>
}<BR>
onreply_route[1] <BR>
{<BR>
if ((isflagset(5) || isbflagset(6)) &amp;&amp; status=~"(183)|(2[0-9][0-9])" &amp;&amp; is_method("INVITE")) <BR>
{<BR>
force_rtp_proxy();<BR>
}<BR>
search_append('Contact:.*sip:[^&gt;[:cntrl:]]*', ';nat=yes');<BR>
if (isbflagset(6)) {<BR>
fix_nated_contact();<BR>
}<BR>
exit;<BR>
}<BR>
&nbsp;<BR>
&nbsp;<BR>
&nbsp;<BR></SPAN><br /><hr /> <a href='http://clk.atdmt.com/UKM/go/msnnkmgl0010000010ukm/direct/01/' target='_new'>Get Started! </a></body>
</html>