<div>Blair, </div>
<div> </div>
<div>Thanks for an idea, but it seems like i have some syntax errors, ser fails to start. I appreciate your help.</div>
<div> </div>
<div>[root@ll-4355cceb root]# /etc/init.d/ser restart<br>Stopping ser: [FAILED]<br>Starting ser: ERROR: bad config file (2 errors) [FAILED]<br>
</div>
<div> </div>
<div>Following is my config after adding your codes.</div>
<div> </div>
<div>#############################################</div>
<div><font size="1">
<p># $Id: features-callfwd.cfg 9 2005-08-19 15:30:55Z /CN=Greger V. Teigre/emailAddress=<a href="mailto:greger@onsip.org">greger@onsip.org</a> $</p>
<p>debug=3</p>
<p>fork=yes</p>
<p>log_stderror=no</p>
<p>listen=<a href="http://sip.mydomain.com">sip.mydomain.com</a> # INSERT YOUR IP ADDRESS HERE</p>
<p>port=5060</p>
<p>children=4</p>
<p>dns=no</p>
<p>rev_dns=no</p>
<p>fifo="/tmp/ser_fifo"</p>
<p>fifo_db_url="mysql://ser:heslo@localhost/ser"</p>
<p>loadmodule "/usr/local/lib/ser/modules/mysql.so"</p>
<p>loadmodule "/usr/local/lib/ser/modules/sl.so"</p>
<p>loadmodule "/usr/local/lib/ser/modules/tm.so"</p>
<p>loadmodule "/usr/local/lib/ser/modules/rr.so"</p>
<p>loadmodule "/usr/local/lib/ser/modules/maxfwd.so"</p>
<p>loadmodule "/usr/local/lib/ser/modules/usrloc.so"</p>
<p>loadmodule "/usr/local/lib/ser/modules/registrar.so"</p>
<p>loadmodule "/usr/local/lib/ser/modules/auth.so"</p>
<p>loadmodule "/usr/local/lib/ser/modules/auth_db.so"</p>
<p>loadmodule "/usr/local/lib/ser/modules/uri.so"</p>
<p>loadmodule "/usr/local/lib/ser/modules/uri_db.so"</p>
<p>loadmodule "/usr/local/lib/ser/modules/mediaproxy.so"</p>
<p>loadmodule "/usr/local/lib/ser/modules/nathelper.so"</p>
<p>loadmodule "/usr/local/lib/ser/modules/textops.so"</p>
<p>loadmodule "/usr/local/lib/ser/modules/avpops.so"</p>
<p>loadmodule "/usr/local/lib/ser/modules/domain.so"</p>
<p>loadmodule "/usr/local/lib/ser/modules/permissions.so"</p>
<p>modparam("auth_db|permissions|uri_db|usrloc", </p>
<p>"db_url", "mysql://ser:heslo@localhost/ser")</p>
<p>modparam("auth_db", "calculate_ha1", 1)</p>
<p>modparam("auth_db", "password_column", "password")</p>
<p>modparam("nathelper", "rtpproxy_disable", 1)</p>
<p>modparam("nathelper", "natping_interval", 0)</p>
<p>modparam("mediaproxy","natping_interval", 30)</p>
<p>modparam("mediaproxy","mediaproxy_socket", "/var/run/mediaproxy.sock")</p>
<p>modparam("mediaproxy","sip_asymmetrics","/usr/local/etc/ser/sip-clients")</p>
<p>modparam("mediaproxy","rtp_asymmetrics","/usr/local/etc/ser/rtp-clients")</p>
<p>modparam("usrloc", "db_mode", 2)</p>
<p>modparam("registrar", "nat_flag", 6)</p>
<p>modparam("rr", "enable_full_lr", 1)</p>
<p>modparam("tm", "fr_inv_timer", 27)</p>
<p>modparam("tm", "fr_inv_timer_avp", "inv_timeout")</p>
<p>modparam("permissions", "db_mode", 1)</p>
<p>modparam("permissions", "trusted_table", "trusted")</p>
<p>modparam("avpops", "avp_url", "mysql://ser:heslo@localhost/ser")</p>
<p>modparam("avpops", "avp_table", "usr_preferences")</p>
<p>route {</p>
<p># -----------------------------------------------------------------</p>
<p># Sanity Check Section</p>
<p># -----------------------------------------------------------------</p>
<p>if (!mf_process_maxfwd_header("10")) {</p>
<p>sl_send_reply("483", "Too Many Hops");</p>
<p>break;</p>
<p>};</p>
<p>if (msg:len > max_len) {</p>
<p>sl_send_reply("513", "Message Overflow");</p>
<p>break;</p>
<p>};</p>
<p># -----------------------------------------------------------------</p>
<p># Record Route Section</p>
<p># -----------------------------------------------------------------</p>
<p>if (method=="INVITE" && client_nat_test("3")) {</p>
<p># INSERT YOUR IP ADDRESS HERE</p>
<p>record_route_preset("<a href="http://sip.mydomain.com:5060">sip.mydomain.com:5060</a>;nat=yes");</p>
<p>} else if (method!="REGISTER") { </p>
<p>record_route(); </p>
<p>};</p>
<p># -----------------------------------------------------------------</p>
<p># Call Tear Down Section</p>
<p># -----------------------------------------------------------------</p>
<p>if (method=="BYE" || method=="CANCEL") {</p>
<p>end_media_session();</p>
<p>};</p>
<p># -----------------------------------------------------------------</p>
<p># Loose Route Section</p>
<p># -----------------------------------------------------------------</p>
<p>if (loose_route()) {</p>
<p>if (has_totag() && (method=="INVITE" || method=="ACK")) {</p>
<p>if (client_nat_test("3")||search("^Route:.*;nat=yes")){</p>
<p>setflag(6);</p>
<p>use_media_proxy();</p>
<p>};</p>
<p>};</p>
<p>route(1);</p>
<p>break;</p>
<p>};</p>
<p># -----------------------------------------------------------------</p>
<p># Call Type Processing Section</p>
<p># -----------------------------------------------------------------</p>
<p>if (!is_uri_host_local()) {</p>
<p>if (is_from_local() || allow_trusted()) {</p>
<p>route(4);</p>
<p>route(1);</p>
<p>} else {</p>
<p>sl_send_reply("403", "Forbidden");</p>
<p>};</p>
<p>break;</p>
<p>};</p>
<p>if (method=="CANCEL") {</p>
<p>route(1);</p>
<p>break;</p>
<p>} else if (method=="INVITE") {</p>
<p>route(3);</p>
<p>break;</p>
<p>} else if (method=="REGISTER") {</p>
<p>route(2);</p>
<p>break;</p>
<p>};</p>
<p>lookup("aliases");</p>
<p>if (uri!=myself) {</p>
<p>route(4);</p>
<p>route(1);</p>
<p>break;</p>
<p>};</p>
<p>if (!lookup("location")) {</p>
<p>sl_send_reply("404", "User Not Found");</p>
<p>break;</p>
<p>};</p>
<p>route(1);</p>
<p>}</p>
<p>route[1] {</p>
<p># -----------------------------------------------------------------</p>
<p># Default Message Handler</p>
<p># -----------------------------------------------------------------</p>
<p>t_on_reply("1");</p>
<p>if (!t_relay()) {</p>
<p>if (method=="INVITE" || method=="ACK") {</p>
<p>end_media_session();</p>
<p>};</p>
<p>sl_reply_error();</p>
<p>};</p>
<p>}</p>
<p>route[2] {</p>
<p># -----------------------------------------------------------------</p>
<p># REGISTER Message Handler</p>
<p># -----------------------------------------------------------------</p>
<p>sl_send_reply("100", "Trying");</p>
<p>if (!search("^Contact:[ ]*\*") && client_nat_test("7")) {</p>
<p>setflag(6);</p>
<p>fix_nated_register();</p>
<p>force_rport();</p>
<p>};</p>
<p>if (!www_authorize("","subscriber")) {</p>
<p>www_challenge("","0");</p>
<p>break;</p>
<p>};</p>
<p>if (!check_to()) {</p>
<p>sl_send_reply("401", "Unauthorized");</p>
<p>break;</p>
<p>};</p>
<p>consume_credentials();</p>
<p>if (!save("location")) {</p>
<p>sl_reply_error();</p>
<p>};</p>
<p>}</p>
<p>route[3] {</p>
<p># -----------------------------------------------------------------</p>
<p># INVITE Message Handler</p>
<p># -----------------------------------------------------------------</p>
<p>if (!allow_trusted()) {</p>
<p>if (!proxy_authorize("","subscriber")) {</p>
<p>proxy_challenge("","0");</p>
<p>break;</p>
<p>} else if (!check_from()) {</p>
<p>sl_send_reply("403", "Use From=ID");</p>
<p>break;</p>
<p>};</p>
<p>consume_credentials();</p>
<p>};</p>
<p>if (client_nat_test("3")) {</p>
<p>setflag(7);</p>
<p>force_rport();</p>
<p>fix_nated_contact();</p>
<p>};</p>
<p> </p>
<p> </p>
<p>if (uri=~"^sip:1[0-9]{10}@") {</p>
<p>strip(1);</p>
<p>};</p>
<p></p>
<p></p>
<p>lookup("aliases");</p>
<p>if (uri!=myself) {</p>
<p>route(4);</p>
<p>route(1);</p>
<p>break;</p>
<p>};</p>
<p> </p>
<p>if (uri=~"^sip:011[0-9]*@") {</p>
<p>route(4);</p>
<p>route(5);</p>
<p>break;</p>
<p>};</p>
<p>if (avp_db_load("$ruri/username", "s:callfwd")) {</p>
<p>setflag(22);</p>
<p>avp_pushto("$ruri", "s:callfwd");</p>
<p>route(6);</p>
<p>break;</p>
<p>};</p>
<p>if (!lookup("location")) {</p>
<p>if (uri=~"^sip:[0-9]{10}@") {</p>
<p>prefix("9");</p>
<p>route(4);</p>
<p>route(5);</p>
<p>break;</p>
<p>};</p>
<p>sl_send_reply("404", "User Not Found"); #Here we can send to VM if user NOT Online.</p>
<p>break;</p>
<p>};</p>
<p>if (avp_db_load("$ruri/username", "s:fwdbusy")) {</p>
<p>if (!avp_check("s:fwdbusy", "eq/$ruri/i")) {</p>
<p>setflag(26);</p>
<p>};</p>
<p>};</p>
<p>if (avp_db_load("$ruri/username", "s:fwdnoanswer")) {</p>
<p>if (!avp_check("s:fwdnoanswer", "eq/$ruri/i")) {</p>
<p>setflag(27);</p>
<p>};</p>
<p>};</p>
<p>t_on_failure("1");</p>
<p>route(4);</p>
<p>route(1);</p>
<p>}</p>
<p>route[4] {</p>
<p># -----------------------------------------------------------------</p>
<p># NAT Traversal Section</p>
<p># -----------------------------------------------------------------</p>
<p>if (isflagset(6) || isflagset(7)) {</p>
<p>if (!isflagset(8)) {</p>
<p>setflag(8);</p>
<p>use_media_proxy();</p>
<p>};</p>
<p>};</p>
<p>}</p>
<p>route[5] {</p>
<p># -----------------------------------------------------------------</p>
<p># PSTN Handler</p>
<p># -----------------------------------------------------------------</p>
<p>rewritehost("<a href="http://asterisk.mydomain.com">asterisk.mydomain.com</a>"); # INSERT YOUR PSTN GATEWAY IP ADDRESS</p>
<p>avp_write("i:45", "inv_timeout");</p>
<p># t_on_failure("1");</p>
<p>#------------------------------------Your Code Start</p>
<p>t_on_failure("3");</p>
<p>t_relay();</p>
<p>#------------------------------------Your Code End</p>
<p> </p>
<p>route(4);</p>
<p>route(1);</p>
<p>}</p>
<p>route[6] {</p>
<p># ------------------------------------------------------------------------</p>
<p># Call Forwarding Reply Route Handler</p>
<p>#</p>
<p># This must be done as a route block because sl_send_reply() cannot be</p>
<p># called from the failure_route block</p>
<p># ------------------------------------------------------------------------</p>
<p>if (uri=~"^sip:1[0-9]{10}@") {</p>
<p>strip(1);</p>
<p>};</p>
<p>lookup("aliases");</p>
<p>if (uri!=myself) {</p>
<p>if (!isflagset(22)) {</p>
<p>append_branch();</p>
<p>};</p>
<p>route(4);</p>
<p>route(1);</p>
<p>break;</p>
<p>};</p>
<p>if (uri=~"^sip:011[0-9]*@") {</p>
<p>route(4);</p>
<p>route(1);</p>
<p>break;</p>
<p>};</p>
<p>if (!lookup("location")) {</p>
<p>if (uri=~"^sip:[0-9]{10}@") {</p>
<p>route(4);</p>
<p>route(1);</p>
<p>break;</p>
<p>};</p>
<p>sl_send_reply("404", "User Not Found");</p>
<p>};</p>
<p>route(4);</p>
<p>route(1);</p>
<p>}</p>
<p>onreply_route[1] {</p>
<p>if ((isflagset(6) || isflagset(7)) && </p>
<p>(status=~"(180)|(183)|2[0-9][0-9]")) {</p>
<p>if (!search("^Content-Length:[ ]*0")) {</p>
<p>use_media_proxy();</p>
<p>};</p>
<p>};</p>
<p>if (client_nat_test("1")) {</p>
<p>fix_nated_contact();</p>
<p>};</p>
<p>}</p>
<p>#failure_route[1] {</p>
<p>#</p>
<p># if (t_check_status("487")) {</p>
<p># break;</p>
<p># };</p>
<p>#</p>
<p># if (isflagset(26) && t_check_status("486")) {</p>
<p># if (avp_pushto("$ruri", "s:fwdbusy")) {</p>
<p># avp_delete("s:fwdbusy");</p>
<p># resetflag(26);</p>
<p># route(6);</p>
<p># break;</p>
<p># };</p>
<p># };</p>
<p>#</p>
<p># if (isflagset(27) && t_check_status("408")) {</p>
<p># if (avp_pushto("$ruri", "s:fwdnoanswer")) {</p>
<p># avp_delete("s:fwdnoanswer");</p>
<p># resetflag(27);</p>
<p># route(6);</p>
<p># break;</p>
<p># };</p>
<p># };</p>
<p>#</p>
<p># end_media_session();</p>
<p>#}</p>
<p> </p>
<p> #------------------------------------Your Code Start</p>
<p>failure_route[3] {</p>
<p>if (t_check_status("404")) {</p>
<p>prefix("u");</p>
<p>rewritehostport("<a href="http://asterisk.mydomain.com:5060">asterisk.mydomain.com:5060</a>");</p>
<p>append_branch();</p>
<p>t_relay_to_udp("<a href="http://asterisk.mydomain.com">asterisk.mydomain.com</a>", "5060");</p>
<p>break;</p>
<p>} else if (t_check_status("408")) {</p>
<p>prefix("b");</p>
<p>rewritehostport("<a href="http://asterisk.mydomain.com:5060">asterisk.mydomain.com:5060</a>");</p>
<p>append_branch();</p>
<p>t_relay_to_udp("<a href="http://asterisk.mydomain.com">asterisk.mydomain.com</a>", "5060");</p>
<p>break;</p>
<p>}</p>
<p>#------------------------------------Your Code End</p></font></div>
<div>#############################################</div>
<div><br><br> </div>
<div><span class="gmail_quote">On 2/16/06, <b class="gmail_sendername">Steve Blair</b> <<a href="mailto:blairs@isc.upenn.edu">blairs@isc.upenn.edu</a>> wrote:</span>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid"><br>Something like this will do the trick:<br><br>...<br> t_on_failure("3");<br> t_relay();
<br>...<br><br>failure_route[3] {<br><br> if (t_check_status("487")) {<br> prefix("u");<br> rewritehostport("<asterisk hostname>:<sip port>");<br> append_branch();
<br> t_relay_to_udp("<asterisk hostname>", "<sip port>");<br> break;<br> } else if (t_check_status("486")) {<br> prefix("b");<br> rewritehostport("<asterisk hostname>:<sip port>");
<br> append_branch();<br> t_relay_to_udp("<asterisk hostname>", "<sip port>");<br> break;<br>}<br><br>The prefix "u" and prefix "b" commands allow you to indicate to Asterisk
<br>whether to play the unavailable or busy greeting by prefixing the r-uri<br>username with the appropriate letter. You'll need to check the actual<br>status codes however because these are just examples.<br><br>-Steve<br>
<br>Ali Zaidi wrote:<br><br>> Z,<br>><br>> I will take a look on those config. I was just looking for a quick<br>> fix, i know lot of ppl using this pre-config from onsip and also want<br>> similar that i'm trying to achieve.
<br>><br>> I will try that in this weekend.<br>><br>> Ali...<br>><br>><br>><br>> On 2/16/06, *zhangshuai* <<a href="mailto:zhangshuai@goldentek.biz">zhangshuai@goldentek.biz</a><br>> <mailto:
<a href="mailto:zhangshuai@goldentek.biz">zhangshuai@goldentek.biz</a>>> wrote:<br>><br>> Dear Ali Zaidi,<br>><br>><br>> I'm testing the forwarding now, too. I think you could be more<br>> aware after read SER-GettingStarted doc at
ONsip.org. And you may<br>> want to try the onr.cfg, or redirect.cfg, which are much more<br>> concise than features-callfwd.5.0.cfg, in the directory of<br>> examples of SER src package, first.<br>>
<br>><br>> >Hi,<br>> ><br>> >I'm having some problem forwarding to Asterisk VM. What i want is<br>> when ever<br>> >486, 404, 408 or 480 error triger then ser should forward INVITE to
<br>> >Asterisk.<br>> >Some one please tell me where and what i write in my<br>> >features-callfwd.5.0.cfg so it will forward to my asterisk box.<br>> ><br>> >Thanks,<br>> >
<br>> >Ali... :lol:<br>> >_______________________________________________<br>> >Serusers mailing list<br>> ><a href="mailto:serusers@lists.iptel.org">serusers@lists.iptel.org</a> <mailto:<a href="mailto:serusers@lists.iptel.org">
serusers@lists.iptel.org</a>><br>> > <a href="http://lists.iptel.org/mailman/listinfo/serusers">http://lists.iptel.org/mailman/listinfo/serusers</a><br>> ><br>><br>><br>><br>><br>><br>><br>
><br>> _______________________________________________<br>> Serusers mailing list<br>> <a href="mailto:serusers@lists.iptel.org">Serusers@iptel.org</a> <mailto:<a href="mailto:serusers@lists.iptel.org">serusers@lists.iptel.org
</a>><br>> <a href="http://lists.iptel.org/mailman/listinfo/serusers">http://lists.iptel.org/mailman/listinfo/serusers</a><br>><br>><br>>------------------------------------------------------------------------
<br>><br>>_______________________________________________<br>>Serusers mailing list<br>><a href="mailto:serusers@lists.iptel.org">Serusers@iptel.org</a><br>><a href="http://lists.iptel.org/mailman/listinfo/serusers">
http://lists.iptel.org/mailman/listinfo/serusers</a><br>><br>><br></blockquote></div><br>