You are confronted with the classic problem “this voice switch was designed to handle UDP and voice calls only” problem.
This is a VoIP industry level problem, which is yet to be properly addressed by anyone in the field. Adrian On 07 May 2014, at 21:16, Maksim Solovjov <maxim.solov...@gmail.com> wrote: > Hello, > > From time to time I am encountering a problem while sending instant > messages ( using sip MESSAGE request ) or sending call invites. > Sometimes it works well and fast, sometimes it doesn't, sometimes > messages are delivered very slowly. With two last options ( doesn't > work at all and/or messages are delivered slowly ), I get the > following errors: > > ERROR:core:tcp_blocking_connect: timeout 10 s elapsed from 10 s > ERROR:core:tcpconn_connect: tcp_blocking_connect failed > ERROR:core:tcp_send: connect failed > ERROR:tm:msg_send: tcp_send failed > ERROR:tm:t_forward_nonack: sending request failed > > My devices are behind NAT ( mobile phones ) and I am using pjsip with > tcp connection. > Moreover I am trying to set up a persistent connection and hope, that > server will reuse it, when it needs to send something. I am sending > keep-alive packets every 600 seconds and I am not using any STUN or > TURN servers. > > My opensips and rtpproxy are running on EC2, so are behind NAT as well. > And I don't have any STUN or TURN servers intalled ( should I install > any of it? ) > > Any help, advice or suggestions would be highly appreciated! > Here is my opensips.cfg, please help: > > debug=3 > log_stderror=no > log_facility=LOG_LOCAL1 > > fork=yes > children=4 > > dns=no > rev_dns=no > > disable_tcp=no > > listen=udp:private-ip:5060 # CUSTOMIZE ME > listen=tcp:private-ip:5060 > > advertised_address="public-ip" > alias="public-ip:5060" > alias="domain.com:5060" #// NB!! domain address is not associated with > public-ip ( using A record ) > > db_default_url="mysql://opensips:opensipsrw@database-url/opensips" > > mpath="/usr/lib64/opensips/modules/" > > ### MYSQL module > loadmodule "db_mysql.so" > > ### Domain module > loadmodule "domain.so" > modparam("domain", "db_url", > "mysql://opensips:opensipsrw@database-url/opensips") > > > #### SIGNALING module > loadmodule "signaling.so" > > #### StateLess module > loadmodule "sl.so" > > #### Transaction Module > loadmodule "tm.so" > modparam("tm", "fr_timer", 5) > modparam("tm", "fr_inv_timer", 30) > modparam("tm", "restart_fr_on_each_reply", 0) > modparam("tm", "onreply_avp_mode", 1) > > #### Record Route Module > loadmodule "rr.so" > /* do not append from tag to the RR (no need for this script) */ > modparam("rr", "append_fromtag", 0) > > #### MAX ForWarD module > loadmodule "maxfwd.so" > > #### SIP MSG OPerationS module > loadmodule "sipmsgops.so" > > #### FIFO Management Interface > loadmodule "mi_fifo.so" > modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo") > modparam("mi_fifo", "fifo_mode", 0666) > > #### URI module > loadmodule "uri.so" > modparam("uri", "use_uri_table", 0) > > #### USeR LOCation module > loadmodule "usrloc.so" > modparam("usrloc", "nat_bflag", "NAT") > modparam("usrloc", "db_mode", 0) > > #### REGISTRAR module > loadmodule "registrar.so" > modparam("registrar", "tcp_persistent_flag", "TCP_PERSISTENT") > modparam("registrar", "received_avp", "$avp(rcv)") > > loadmodule "nathelper.so" > modparam("nathelper", "received_avp", "$avp(rcv)") > > loadmodule "rtpproxy.so" > modparam("rtpproxy", "rtpproxy_sock", "udp:127.0.0.1:12221") > > #### ACCounting module > loadmodule "acc.so" > modparam("acc", "early_media", 0) > modparam("acc", "report_cancels", 0) > modparam("acc", "detect_direction", 0) > modparam("acc", "failed_transaction_flag", "ACC_FAILED") > modparam("acc", "log_flag", "ACC_DO") > modparam("acc", "log_missed_flag", "ACC_MISSED") > > > route{ > > force_rport(); #nathelper > if (nat_uac_test("23")) { #nathelper > if (is_method("REGISTER")) { > fix_nated_register(); #nathelper > setbflag(NAT); > } else { > fix_nated_contact(); #nathelper > setflag(NAT); > } > } > > if (!mf_process_maxfwd_header("10")) { > sl_send_reply("483","Too Many Hops"); > exit; > } > if (has_totag()) { > # sequential requests within a dialog should > # take the path determined by record-routing > if (loose_route()) { > > if (is_method("BYE")) { > setflag(ACC_DO); # do accounting ... > setflag(ACC_FAILED); # ... even if the > transaction fails > } else if (is_method("INVITE")) { > # even if in most of the cases is > useless, do RR for > # re-INVITEs alos, as some buggy > clients do change route set > # during the dialog. > record_route(); > } > > if (check_route_param("nat=yes")) > setflag(NAT); > > # route it out to whatever destination was set > by loose_route() > # in $du (destination URI). > route(relay); > } else { > if ( is_method("ACK") ) { > if ( t_check_trans() ) { > # non loose-route, but > stateful ACK; must be an ACK after > # a 487 or e.g. 404 from upstream > server > t_relay(); > exit; > } else { > # ACK without matching transaction -> > # ignore and discard > exit; > } > } > sl_send_reply("404","Not here"); > } > exit; > } > # CANCEL processing > if (is_method("CANCEL")) > { > if (t_check_trans()) > t_relay(); > exit; > } > > t_check_trans(); > > if ( !(is_method("REGISTER") ) ) { > if (from_uri==myself) > { > } else { > # if caller is not local, then called number > must be local > if (!uri==myself) { > send_reply("403","Rely forbidden"); > exit; > } > } > } > # preloaded route checking > if (loose_route()) { > xlog("L_ERR", > "Attempt to route with preloaded Route's [$fu/$tu/$ru/$ci]"); > if (!is_method("ACK")) > sl_send_reply("403","Preload Route denied"); > exit; > } > > # record routing > if (!is_method("REGISTER|MESSAGE")) > record_route(); > > # account only INVITEs > if (is_method("INVITE")) { > > setflag(ACC_DO); # do accounting > } > > if (!uri==myself) { > append_hf("P-hint: outbound\r\n"); > route(relay); > } > # requests for my domain > if (is_method("PUBLISH|SUBSCRIBE")) > { > sl_send_reply("503", "Service Unavailable"); > exit; > } > > if (is_method("REGISTER")) > { > setflag(TCP_PERSISTENT); > if (!save("location")) > sl_reply_error(); > > exit; > } > > if ($rU==NULL) { > # request with no Username in RURI > sl_send_reply("484","Address Incomplete"); > exit; > } > # do lookup with method filtering > if (!lookup("location","m")) { > t_newtran(); > t_reply("404", "Not Found"); > exit; > } > > if (isbflagset(NAT)) setflag(NAT); > > # when routing via usrloc, log the missed calls also > setflag(ACC_MISSED); > route(relay); > } > > route[relay] { > # for INVITEs enable some additional helper routes > if (is_method("INVITE")) { > > if (isflagset(NAT)) { > rtpproxy_offer("ro"); > } > > t_on_branch("per_branch_ops"); > t_on_reply("handle_nat"); > t_on_failure("missed_call"); > > } > > if (isflagset(NAT)) { > add_rr_param(";nat=yes"); > } > > if (!t_relay()) { > send_reply("500","Internal Error"); > }; > exit; > } > > branch_route[per_branch_ops] { > xlog("new branch at $ru\n"); > } > > > onreply_route[handle_nat] { > if (nat_uac_test("1")) > fix_nated_contact(); > if ( isflagset(NAT) ) > rtpproxy_answer("ro"); > xlog("incoming reply\n"); > } > > failure_route[missed_call] { > if (t_was_cancelled()) { > exit; > } > > # uncomment the following lines if you want to block client > # redirect based on 3xx replies. > ##if (t_check_status("3[0-9][0-9]")) { > ##t_reply("404","Not found"); > ## exit; > ##} > > } > > > Thank you in advance! > > _______________________________________________ > Users mailing list > Users@lists.opensips.org > http://lists.opensips.org/cgi-bin/mailman/listinfo/users > _______________________________________________ Users mailing list Users@lists.opensips.org http://lists.opensips.org/cgi-bin/mailman/listinfo/users