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