[OpenSIPS-Users] Multiple TCP contacts on single register.

Răzvan Crainea razvan at opensips.org
Mon May 12 10:14:27 CEST 2014


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
> <maxim.solovjov at gmail.com> 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
> Users at lists.opensips.org
> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>



More information about the Users mailing list