Hi all.
I have a problem for the following scenario. When I make a call for PSTN and on hook by PSTN side, Cisco As can't send BYE for SER.
01. [UA via Asterisk] dialing "08022223333" -> [SER] 02. [SER] prefix("0333") and rewritehostport("my.cisco.ip.address:5060") -> [Cisco] 03. [Cisco] dial-peer voice 6000 pots, translate-outgoing called from "033308022223333" to "008022223333" 04. [Cisco] process an outbound call to "008022223333" -> [e.g. Mobile] 05. [e.g. Mobile] Catch call 06. [SER] log CDR start 07. [Cisco] talking 08. [e.g. Mobile] On hook and call disconnect 09. [Cisco] can't send BYE for SER *****why??***** 10. [UA via Asterisk] On hook 11. [UA via Asterisk] Send BYE for SER 12. [SER] log CDR End [Cisco] Call finished
But another scenario, if make a call from PSTN to Asterisk and on hook by PSTN side, Cisco As send BYE to SER.
01. [e.g. Mobile] dialing "0377771111(Asterisk user number)" 02. [Cisco] receive "77771111" call number 03. [Cisco] dial-peer voice 5000 voip, session target ipv4: my.ser.ip.address -> [SER] 04. [SER] process an incoming call to "0377771111" -> [UA via Asterisk] 05. [UA via Asterisk] Catch call 06. [SER] log CDR start 07. [UA via Asterisk] talking 08. [e.g. Mobile] On hook and call disconnect 09. [Cisco] Send BYE to SER 10. [SER] log CDR End [Cisco] Call finished 11. [UA via Asterisk] receive BYE from SER
And sorry for my diffucult example.
Why Cisco AS 5300 can't send BYE to SER When PSTN call is disconnected by PSTN side?
My ser.cfg as follows:
# -------------------------------------------------------------------------- # global configuration parameters # -------------------------------------------------------------------------- fork=no log_stderror=yes check_via=no dns=no rev_dns=no listen=my.ser.ip.address port=5060 fifo="/tmp/ser_fifo" fifo_db_url="mysql://ser:heslo@localhost/ser"
# -------------------------------------------------------------------------- # module loading # -------------------------------------------------------------------------- loadmodule "/usr/local/lib/ser/modules/mysql.so" loadmodule "/usr/local/lib/ser/modules/sl.so" loadmodule "/usr/local/lib/ser/modules/tm.so" loadmodule "/usr/local/lib/ser/modules/rr.so" loadmodule "/usr/local/lib/ser/modules/maxfwd.so" loadmodule "/usr/local/lib/ser/modules/usrloc.so" loadmodule "/usr/local/lib/ser/modules/registrar.so" loadmodule "/usr/local/lib/ser/modules/textops.so" loadmodule "/usr/local/lib/ser/modules/auth.so" loadmodule "/usr/local/lib/ser/modules/auth_db.so" loadmodule "/usr/local/lib/ser/modules/avpops.so" loadmodule "/usr/local/lib/ser/modules/permissions.so" loadmodule "/usr/local/lib/ser/modules/acc.so" loadmodule "/usr/local/lib/ser/modules/exec.so"
# -------------------------------------------------------------------------- # setting module-specific parameters # -------------------------------------------------------------------------- modparam("usrloc", "db_mode", 2) modparam("auth_db", "calculate_ha1", yes) modparam("auth_db", "password_column", "password") modparam("rr", "enable_full_lr", 1) modparam("usrloc", "db_url", " mysql://ser:heslo@localhost/ser") modparam("auth_db", "db_url", "mysql://ser:heslo@localhost/ser") modparam("permissions", "db_url", " mysql://ser:heslo@localhost /ser") modparam("tm", "fr_inv_timer", 27) modparam("tm", "fr_inv_timer_avp", "inv_timeout") modparam("permissions", "db_mode", 1) modparam("permissions", "trusted_table", "trusted") modparam("acc", "db_url", "mysql://ser:heslo@localhost/ser") modparam("acc", "db_flag", 2) modparam("acc", "db_missed_flag", 3)
# -------------------------------------------------------------------------- # route pattern # -------------------------------------------------------------------------- route {
if (!mf_process_maxfwd_header("10")) { sl_send_reply("483","Too Many Hops"); break; };
if ( msg:len > max_len ) { sl_send_reply("513", "Message too big"); break; };
record_route();
if (loose_route()) { if (method=="ACK") { acc_db_request("01:CallStart\n", "acc"); }; if (method=="BYE" || method=="CANCEL") { acc_db_request("02:CallEnd\n", "acc"); }; t_relay(); break; };
if (uri==myself) { if (method=="REGISTER") { if (!www_authorize("", "subscriber")) { www_challenge("", "0"); break; }; save("location"); break; };
if (search("^(f|From): .*@(my.cisco.ip.address<.*@(my%5C.cisco%5C.ip%5C.address>)")) { #PSTN Incoming call from Cisco AS 5300 e.g. 0377771111 rewritehost("my.asterisk.ip.address "); };
lookup("aliases");
if (!lookup("location")) { if (method=="INVITE" && !search("^(f|From): .*@(my.cisco.ip.address<.*@(my%5C.cisco%5C.ip%5C.address>)")) { if (!proxy_authorize("", "subscriber")) { proxy_challenge("", "0"); break; }; if (uri=~"^sip:0[0-9]{10}@") { # PSTN Outgoing call to Cisco AS 5300 e.g. 08022223333 prefix("0333"); rewritehostport("my.cisco.ip.address:5060"); avp_write("i:45", "inv_timeout"); } else { sl_send_reply("404", "Not Found"); break; }; consume_credentials(); }; };
};
if (!t_relay()) { sl_reply_error(); };
}
And my Cisco AS 5300 config as follows:
voice call send-alert voice rtp send-recv
voice service pots fax protocol t38 ls-redundancy 0 hs-redundancy 0 fallback cisco
voice service voip fax protocol t38 ls-redundancy 0 hs-redundancy 0 fallback cisco sip min-se 60
translation-rule 50 Rule 0 0333 0 Rule 1 ^7777 037777
voice class codec 2 codec preference 1 g711ulaw codec preference 2 g711alaw
dial-peer voice 5000 voip tone ringback alert-no-PI description ser-asterisk-cisco-test huntstop destination-pattern 77771111$ translate-outgoing called 50 voice-class codec 2 session protocol sipv2 session target ipv4:my.ser.ip.address dtmf-relay rtp-nte max-conn 1
dial-peer voice 6000 pots application session max-conn 2 destination-pattern 0333T progress_ind alert enable 8 translate-outgoing called 50 port 0:D
Thanks, Sahria