Hello all,
I have:
UAC ---------- SER ------------ UAS
I have a problem with ACK. When I send an INVITE, UAS sends a 200 OK and then UAC sends ACK to finalize the INVITE. The problem is that SER doesn't reply this ACK from UAC to UAS.
This is my ser.cfg:
route{ # initial sanity checks -- messages with # max_forwards==0, or excessively long requests if (!mf_process_maxfwd_header("16")) { sl_send_reply("483","Too Many Hops"); }; if (msg:len > max_len) { sl_send_reply("513", "Message too big"); break; };
# 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();
# subsequent messages withing a dialog should take the # path determined by record-routing if (loose_route()) { # mark routing logic in request append_hf("P-hint: rr-enforced\r\n"); route(1); break; };
if (!uri==myself) { # mark routing logic in request append_hf("P-hint: outbound\r\n"); 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) { # if (uri=~"^sip:(.+@)?(10.22.1.[0-9]+|(.+@)?(10.22.2.[0-9]+|(.+.)?T.local)([:;?].*)?$"){ # if (uri=~"^sip:(.+@)?([0-9]+.[0-9]+.[0-9]+.[0-9]+|(.+.)?T.local)([:;?].*)?$"){ if (uri=~"^sip:(.+@)?(.+)([:;?].*)?$"){
if (method=="REGISTER") {
# Uncomment this if you want to use digest authentication # if ((!www_authorize("10.22.1.249", "subscriber"))) { # www_challenge("10.22.1.249", "0"); # break; # };
save("location"); break; };
if (method=="BYE") { t_relay(); sl_send_reply("200", "OK"); break; }; if (method=="ACK") { t_relay(); break; }; if (method=="CANCEL") { t_relay(); sl_send_reply("200", "OK"); break; }; if (method=="INVITE") { record_route(); }; if ((method=="INVITE")&&(!lookup("location"))) { record_route(); exec_msg("printenv SRCIP; /bin/bash /usr/local/ser/sbin/script"); sl_send_reply("100", "Trying"); exec_msg("sleep 10");
if (!lookup("location")){ sl_send_reply("100", "Trying"); exec_msg("sleep 10"); } else { t_relay(); break; }
if (!lookup("location")){ sl_send_reply("100", "Trying"); exec_msg("sleep 10"); } else { t_relay(); break; }
if (!lookup("location")){ sl_send_reply("100", "Trying"); exec_msg("sleep 10"); } else { t_relay(); break; }
if (!lookup("location")){ sl_send_reply("100", "Trying"); exec_msg("sleep 10"); } else { t_relay(); break; }
if (!lookup("location")){ sl_send_reply("100", "Trying"); exec_msg("sleep 10"); } else { t_relay(); break; }
if (!lookup("location")){ sl_send_reply("100", "Trying"); exec_msg("sleep 10"); } else { t_relay(); break; }
if (!lookup("location")){ sl_send_reply("404", "Not on-line"); break; } else { t_relay(); break; } };
if (method=="SUBSCRIBE") { if (!t_newtran()) { # log(1, "newtran error\n"); sl_reply_error(); }; handle_subscription("registrar"); break; };
if (method=="PUBLISH") { if (!t_newtran()) { # log(1, "newtran error\n"); sl_reply_error(); }; handle_publish("registrar"); break; };
lookup("aliases"); if (!uri==myself) { append_hf("P-hint: outbound alias\r\n"); route(1); break; };
# native SIP destinations are handled using our USRLOC DB if (!lookup("location")) { sl_send_reply("404", "Not Found"); break; };
}
append_hf("P-hint: usrloc applied\r\n"); route(1); }
route[1] { # send it out now; use stateful forwarding as it works reliably # even for UDP2TCP if (!t_relay()) { sl_reply_error(); }; }
Could someone help me? Thank you.