Should I increase the registration timeout value?

On Thu, May 8, 2014 at 3:49 PM, Maksim Solovjov
<[email protected]> wrote:
> I've set the registration timeout value as 600 on the client side, and
> I am sending keep alive messages every 600 seconds. Maybe that might
> be the reason???
> I've also tried to play with tcp_connection_lifetime, but it didn't
> work out for me. Although, it seems that it works better, if I set
> tcp_connection_lifetime to the value of 3600.
>
> On Thu, May 8, 2014 at 3:17 PM, Maksim Solovjov
> <[email protected]> wrote:
>>
>> As far as I understand, you mesn that async reactor should be implemented in 
>> the sip server, and using this approach it will act much better under load.
>>
>> But at the moment I am testing with just 3 users. So server should perfom 
>> perfectly under this kind of load.
>>
>> Maybe it's vonfiguration problem?
>>
>>> On 08 May 2014, at 13:46, [email protected] wrote:
>>>
>>> The problem is that originally only UDP transport was considered which was 
>>> enough to run VoIP calls. Sending  UDP is not blocking while using TCP is. 
>>> TCP connections don’t work well without using an asynchronous reactor, 
>>> especially under load the problem becomes visible. Ideally, the core should 
>>> be based on such concept but we are not there yet.
>>>
>>> Adrian
>>>
>>>> On 08 May 2014, at 06:32, Maksim Solovjov <[email protected]> wrote:
>>>>
>>>> Thank you for your answer. Can you elaborate on "voice switch and voice 
>>>> calls only"?
>>>>
>>>> So there is nothing I can do about it? To make a connection working fast 
>>>> and reliable?
>>>>
>>>>> On 08 May 2014, at 04:07, [email protected] wrote:
>>>>>
>>>>> 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 <[email protected]> 
>>>>>> 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
>>>>>> [email protected]
>>>>>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Users mailing list
>>>>> [email protected]
>>>>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>>>>
>>>> _______________________________________________
>>>> Users mailing list
>>>> [email protected]
>>>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>>>
>>>
>>> _______________________________________________
>>> Users mailing list
>>> [email protected]
>>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users

_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users

Reply via email to