Hi, Maksim!

There is nothing wrong with your configuration file, the problem is with your traffic. It seems like your clients are sending REGISTER messages with that have more than one TCP contact. OpenSIPS has only one TCP connection to that client, therefore can only use one contact, but since they are many, it does not know which one to use. That's why you see that warning. Is there any reason you clients are sending multiple contacts? Can you fix that?

Best regards,

Razvan Crainea
OpenSIPS Core Developer
http://www.opensips-solutions.com

On 05/10/2014 09:19 PM, Maksim Solovjov wrote:
Up.
Maybe anyone knows, what is the problem?
Best Regards,
Maksim.

On Thu, May 8, 2014 at 4:16 PM, Maksim Solovjov
<[email protected]> wrote:
Hello, I get a warning:

WARNING:registrar:update_contacts: multiple TCP contacts on single REGISTER

How can I fix it? What's wrong with my opensips.cfg:

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;
         ##}

}

Any help would be highly appreciated!
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

Reply via email to