<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>Likely there is some misrouting configuration with contact
      addresses, like Sergiu suggested, but as an extra hint, when
      kamailio doesn't report any log message in syslog about processing
      sip messages or nothing printed by sipdump, run ngrep/sngrep on
      port 5060 to see if something is received over udp. If something
      shows up there, check your firewall or kernel/OS policies. s/ngrep
      get the traffic at the network layer and it can be discarded
      before getting to application layer. In some rare conditions I
      faced kernel module conntrack discarding (randomly) some packets,
      including the ACK after 200ok.</p>
    <p>Cheers,<br>
      Daniel<br>
    </p>
    <div class="moz-cite-prefix">On 20.07.20 15:44, Sergiu Pojoga wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CAJZsGCngPMnx15k1JyZfHiO=mYT6xcyyE-n6UawA4668zsM7Ug@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <div dir="ltr">Could be anything, but most likely you aren't
        receiving those in Kam because the PBX sends them somewhere
        else, check where the PBX sends those, check the Contact URI,
        that's the address where ACKs will be sent out.
        <div><br>
        </div>
        <div>The SBC for Teams article suggests a double header
          record_route_preset() for transport conversion, not sure why
          your config is different.<br>
        </div>
        <div><br>
        </div>
        <div>
          <div>Also, at the very least, the config seems to invoke <i>record_route[_preset]()</i>
            twice per INVITE, it shouldn't be like that. </div>
          <div><br>
          </div>
          <div>Good luck.</div>
        </div>
      </div>
      <br>
      <div class="gmail_quote">
        <div dir="ltr" class="gmail_attr">On Sun, Jul 19, 2020 at 3:55
          AM Daniel van der Tang <<a href="mailto:tangd122@gmail.com"
            moz-do-not-send="true">tangd122@gmail.com</a>> wrote:<br>
        </div>
        <blockquote class="gmail_quote" style="margin:0px 0px 0px
          0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
          <div dir="ltr">
            <div>
              <div dir="ltr">
                <div dir="ltr">
                  <div>Hello,</div>
                  <div><br>
                  </div>
                  <div>I'm setting up a Kamailio MSFT Teams SBC that is
                    connected to our SIP trunk provider. This server is
                    directly connected to the Internet and not behind a
                    NAT routing. </div>
                  <div><br>
                  </div>
                  <div>It is successfully processing invites from both
                    sides (MSFT Teams and SIP trunk). Unfortunately the
                    ACKs and CANCEL messages are not relaying to Teams.
                    In the sipdump i can't find these messages. </div>
                  <div><br>
                  </div>
                  <div>Does anyone see what I am doing wrong? Below you
                    can find my config</div>
                  <div><br>
                  </div>
                  <div>#!KAMAILIO<br>
                    <br>
                    ####### Defined Values #########<br>
                    <br>
                    #!define MULTIDOMAIN 0<br>
                    <br>
                    # - flags<br>
                    #   FLT_ - per transaction (message) flags<br>
                    # FLB_ - per branch flags<br>
                    #!define FLT_ACC 1<br>
                    #!define FLT_ACCMISSED 2<br>
                    #!define FLT_ACCFAILED 3<br>
                    #!define FLT_NATS 5<br>
                    <br>
                    #!define FLB_NATB 6<br>
                    #!define FLB_NATSIPPING 7<br>
                    <br>
                    #!define FROM_TEAMS 11<br>
                    #!define FROM_PBX 12<br>
                    <br>
                    ######## Define Modules ###########<br>
                    #!define WITH_RTPENGINE<br>
                    #!define WITH_TLS<br>
                    #!define WITH_SIPDUMP<br>
                    #!define WITH_DISPATCH<br>
                    <br>
                    ####### Global Parameters #########<br>
                    <br>
                    ### LOG Levels: 3=DBG, 2=INFO, 1=NOTICE, 0=WARN,
                    -1=ERR<br>
                    debug=2<br>
                    log_stderror=no<br>
                    <br>
                    memdbg=5<br>
                    memlog=5<br>
                    <br>
                    log_facility=LOG_LOCAL0<br>
                    log_prefix="{$mt $hdr(CSeq) $ci} "<br>
                    <br>
                    /* number of SIP routing processes */<br>
                    children=2<br>
                    <br>
                    /* uncomment the next line to disable TCP (default
                    on) */<br>
                    # disable_tcp=yes<br>
                    <br>
                    alias=SBC_FQDN<br>
                    <br>
                    /* listen addresses */<br>
                    listen=<a class="moz-txt-link-freetext" href="udp:PUBLIC_IP:5060">udp:PUBLIC_IP:5060</a> advertise SBC_FQDN:5060<br>
                    #!ifdef WITH_TLS<br>
                    listen=tls:PUBLIC_IP:5061 advertise SBC_FQDN:5061<br>
                    #!endif<br>
                    <br>
                    server_header= "Server: ABC SBC"<br>
                    user_agent_header= "User-Agent: ABC SBC"<br>
                    <br>
                    <br>
                    ###### TLS Enable ######<br>
                    #!ifdef WITH_TLS<br>
                    enable_tls=yes<br>
                    #tcp_connect_timeout=1000<br>
                    <br>
                    tcp_accept_no_cl=yes<br>
                    tcp_async = yes<br>
                    tcp_connection_lifetime=600<br>
                    <br>
                    /* upper limit for TLS connections */<br>
                    tls_max_connections=2048<br>
                    #!endif<br>
                    <br>
                    <br>
                    ####### Custom Parameters #########<br>
                    <br>
                    /* These parameters can be modified runtime via RPC
                    interface<br>
                     * - see the documentation of 'cfg_rpc' module.<br>
                     *<br>
                     * Format: <a href="http://group.id/"
                      target="_blank" moz-do-not-send="true">group.id</a> =
                    value 'desc' description<br>
                     * Access: $sel(<a href="http://cfg_get.group.id/"
                      target="_blank" moz-do-not-send="true">cfg_get.group.id</a>)
                    or @<a href="http://cfg_get.group.id/"
                      target="_blank" moz-do-not-send="true">cfg_get.group.id</a> */<br>
                    <br>
                    ####### Modules Section ########<br>
                    <br>
                    /* set paths to location of modules */<br>
                    loadmodule "jsonrpcs.so"<br>
                    loadmodule "kex.so"<br>
                    loadmodule "corex.so"<br>
                    loadmodule "tm.so"<br>
                    loadmodule "tmx.so"<br>
                    loadmodule "sl.so"<br>
                    loadmodule "rr.so"<br>
                    loadmodule "pv.so"<br>
                    loadmodule "maxfwd.so"<br>
                    loadmodule "textops.so"<br>
                    loadmodule "siputils.so"<br>
                    loadmodule "xlog.so"<br>
                    loadmodule "sanity.so"<br>
                    loadmodule "ctl.so"<br>
                    loadmodule "cfg_rpc.so"<br>
                    loadmodule "acc.so"<br>
                    loadmodule "counters.so"<br>
                    <br>
                    #!ifdef WITH_RTPENGINE<br>
                    loadmodule "rtpengine.so"<br>
                    #!endif<br>
                    <br>
                    #!ifdef WITH_TLS<br>
                    loadmodule "tls.so"<br>
                    #!endif<br>
                    <br>
                    #!ifdef WITH_SIPDUMP<br>
                    loadmodule "sipdump.so"<br>
                    #!endif<br>
                    <br>
                    #!ifdef WITH_DISPATCH<br>
                    loadmodule "dispatcher.so"<br>
                    #!endif<br>
                    <br>
                    # ----------------- setting module-specific
                    parameters ---------------<br>
                    <br>
                    #!ifdef WITH_RTPENGINE<br>
                    # ----- rtpengine params -----+<br>
                    modparam("rtpengine", "rtpengine_sock", "udp:<a
                      href="http://127.0.0.1:12222/" target="_blank"
                      moz-do-not-send="true">127.0.0.1:12222</a>")<br>
                    #!endif<br>
                    <br>
                    #!ifdef WITH_TLS<br>
                    # ----- tls params -----+<br>
                    modparam("tls", "xavp_cfg", "tls")<br>
                    modparam("tls", "config", "/etc/kamailio/tls.cfg")<br>
                    modparam("tls", "connection_timeout", 10)<br>
                    modparam("tls", "ssl_release_buffers", 1)<br>
                    modparam("tls", "send_close_notify", 1)<br>
                    modparam("tls", "session_cache", 0)<br>
                    <br>
                    #!endif<br>
                    <br>
                    #!ifdef WITH_SIPDUMP<br>
                    modparam("sipdump", "enable", 1)<br>
                    #!endif<br>
                    <br>
                    #!ifdef WITH_DISPATCH<br>
                    #---------- dispatch<br>
                    modparam("dispatcher", "ds_probing_mode", 1)<br>
                    modparam("dispatcher", "ds_ping_interval", 300)<br>
                    #!endif<br>
                    <br>
                    <br>
                    # ----- jsonrpcs params -----<br>
                    modparam("jsonrpcs", "pretty_format", 1)<br>
                    /* set the path to RPC fifo control file */<br>
                    # modparam("jsonrpcs", "fifo_name",
                    "/run/kamailio/kamailio_rpc.fifo")<br>
                    /* set the path to RPC unix socket control file */<br>
                    # modparam("jsonrpcs", "dgram_socket",
                    "/run/kamailio/kamailio_rpc.sock")<br>
                    <br>
                    # ----- ctl params -----<br>
                    /* set the path to RPC unix socket control file */<br>
                    # modparam("ctl", "binrpc",
                    "unix:/run/kamailio/kamailio_ctl")<br>
                    <br>
                    # ----- tm params -----<br>
                    # auto-discard branches from previous serial forking
                    leg<br>
                    modparam("tm", "failure_reply_mode", 3)<br>
                    # default retransmission timeout: 30sec<br>
                    modparam("tm", "fr_timer", 30000)<br>
                    # default invite retransmission timeout after 1xx:
                    120sec<br>
                    modparam("tm", "fr_inv_timer", 120000)<br>
                    <br>
                    # ----- rr params -----<br>
                    # set next param to 1 to add value to ;lr param
                    (helps with some UAs)<br>
                    modparam("rr", "enable_full_lr", 0)<br>
                    # do not append from tag to the RR (no need for this
                    script)<br>
                    modparam("rr", "append_fromtag", 0)<br>
                    <br>
                    # ----- acc params -----<br>
                    /* what special events should be accounted ? */<br>
                    modparam("acc", "early_media", 0)<br>
                    modparam("acc", "report_ack", 0)<br>
                    modparam("acc", "report_cancels", 0)<br>
                    /* by default ww do not adjust the direct of the
                    sequential requests.<br>
                     * if you enable this parameter, be sure the enable
                    "append_fromtag"<br>
                     * in "rr" module */<br>
                    modparam("acc", "detect_direction", 0)<br>
                    /* account triggers (flags) */<br>
                    modparam("acc", "log_flag", FLT_ACC)<br>
                    modparam("acc", "log_missed_flag", FLT_ACCMISSED)<br>
                    modparam("acc", "log_extra",<br>
                      "src_user=$fU;src_domain=$fd;src_ip=$si;"<br>
                      "dst_ouser=$tU;dst_user=$rU;dst_domain=$rd")<br>
                    modparam("acc", "failed_transaction_flag",
                    FLT_ACCFAILED)<br>
                    <br>
                    ####### Routing Logic ########<br>
                    <br>
                    <br>
                    /* Main SIP request routing logic<br>
                     * - processing of any incoming SIP request starts
                    with this route<br>
                     * - note: this is the same as route { ... } */<br>
                    request_route {<br>
                      # per request initial checks<br>
                      route(REQINIT);<br>
                    <br>
                      #check who is the sender<br>
                      route(INITCHECK);<br>
                    <br>
                      # CANCEL processing<br>
                      if (is_method("CANCEL")) {<br>
                        if (t_check_trans()) {<br>
                          route(RELAY);<br>
                        }<br>
                        exit;<br>
                      }<br>
                    <br>
                      # handle retransmissions<br>
                      if (!is_method("ACK")) {<br>
                        if(t_precheck_trans()) {<br>
                          t_check_trans();<br>
                          exit;<br>
                        }<br>
                        t_check_trans();<br>
                      }<br>
                    <br>
                      # handle requests within SIP dialogs<br>
                      route(WITHINDLG);<br>
                    <br>
                      ### only initial requests (no To tag)<br>
                    <br>
                      # record routing for dialog forming requests (in
                    case they are routed)<br>
                      # - remove preloaded route headers<br>
                      remove_hf("Route");<br>
                      if (is_method("INVITE|SUBSCRIBE")) {<br>
                        record_route();<br>
                      }<br>
                    <br>
                      # account only INVITEs<br>
                      if (is_method("INVITE")) {<br>
                        setflag(FLT_ACC); # do accounting<br>
                      }<br>
                    <br>
                      if ($rU==$null) {<br>
                        # request with no Username in RURI<br>
                        sl_send_reply("484","Address Incomplete");<br>
                        exit;<br>
                      }<br>
                    <br>
                      # update $du to set the destination address for
                    proxying<br>
                      #$du = "sip:" + $rd + ":9";<br>
                     <br>
                      route(RELAY);<br>
                      exit;<br>
                    }<br>
                    <br>
                    route[INITCHECK] {<br>
                      if(from_uri =~ ".*<a href="http://microsoft.com/"
                      target="_blank" moz-do-not-send="true">microsoft.com</a>")<br>
                      {  <br>
                        setflag(FROM_TEAMS);<br>
                        $du = "sip:" + "PBX_IP";<br>
                        route(HANDLE_RTP_FROM_TEAMS);<br>
                      } else if(from_uri =~ ".*" + "PBX_IP")<br>
                      {<br>
                        setflag(FROM_PBX);<br>
                        $du="sip:<a
                      href="http://sip.pstnhub.microsoft.com/"
                      target="_blank" moz-do-not-send="true">sip.pstnhub.microsoft.com</a>;transport=tls";<br>
                        route(HANDLE_RTP_FROM_PBX);<br>
                      } else {<br>
                        exit;<br>
                      }<br>
                    }<br>
                    <br>
                    #Manage RTP & transcoding comming from Teams to
                    PBX<br>
                    route[HANDLE_RTP_FROM_TEAMS] {<br>
                     <br>
                      if (has_body("application/sdp"))<br>
                      {<br>
                        t_on_reply("PBX_REPLY_TO_TEAMS");<br>
                        rtpengine_manage("RTP codec-mask=all
                    codec-transcode=PCMA replace-origin
                    replace-session-connection ICE=remove");<br>
                        record_route();<br>
                        t_relay_to_udp("PBX_IP","5060");<br>
                      }<br>
                     <br>
                    <br>
                    }<br>
                    <br>
                    #Manage RTP & transcoding comming from PBX to
                    Teams<br>
                    route[HANDLE_RTP_FROM_PBX] {<br>
                     <br>
                        if (has_body("application/sdp"))<br>
                        {<br>
                          t_on_reply("TEAMS_REPLY_TO_PBX");<br>
                         <br>
                          rtpengine_manage("SRTP codec-mask=all
                    ICE=force codec-transcode=PCMA replace-origin
                    replace-session-connection");<br>
                         
                    record_route_preset("SBC_FQDN:5061;transport=tls");<br>
                          add_rr_param(";r2=on");<br>
                    <br>
                          $rd = "<a
                      href="http://sip.pstnhub.microsoft.com/"
                      target="_blank" moz-do-not-send="true">sip.pstnhub.microsoft.com</a>";<br>
                          $td = "SBC_FQDN";<br>
                          $fd = "SBC_FQDN";<br>
                    <br>
                    <br>
                          #Set TLS SNI (server name & server id)<br>
                          $xavp(tls=>server_name) = "SBC_FQDN";<br>
                          $xavp(tls=>server_id) = "SBC_FQDN";<br>
                    <br>
                          t_relay();<br>
                        }<br>
                    }<br>
                    <br>
                    <br>
                    # Wrapper for relaying requests<br>
                    route[RELAY] {<br>
                    <br>
                      # enable additional event routes for forwarded
                    requests<br>
                      # - serial forking, RTP relaying handling, a.s.o.<br>
                      if (is_method("INVITE|BYE|SUBSCRIBE|UPDATE")) {<br>
                        if(!t_is_set("branch_route"))
                    t_on_branch("MANAGE_BRANCH");<br>
                      }<br>
                      if (is_method("INVITE|SUBSCRIBE|UPDATE")) {<br>
                        if(!t_is_set("onreply_route"))
                    t_on_reply("MANAGE_REPLY");<br>
                      }<br>
                      if (is_method("INVITE")) {<br>
                        if(!t_is_set("failure_route"))
                    t_on_failure("MANAGE_FAILURE");<br>
                      }<br>
                    <br>
                      if (!t_relay()) {<br>
                        sl_reply_error();<br>
                      }<br>
                      exit;<br>
                    }<br>
                    <br>
                    # Per SIP request initial checks<br>
                    route[REQINIT] {<br>
                      if($ua =~
                    "friendly-scanner|sipcli|VaxSIPUserAgent") {<br>
                        # silent drop for scanners - uncomment next line
                    if want to reply<br>
                        # sl_send_reply("200", "OK");<br>
                        exit;<br>
                      }<br>
                    <br>
                      if (!mf_process_maxfwd_header("10")) {<br>
                        sl_send_reply("483","Too Many Hops");<br>
                        exit;<br>
                      }<br>
                    <br>
                      if(is_method("OPTIONS")) {<br>
                        sl_send_reply("200","Keepalive");<br>
                        exit;<br>
                      }<br>
                    <br>
                      if(!sanity_check("1511", "7")) {<br>
                        xlog("Malformed SIP message from $si:$sp\n");<br>
                        exit;<br>
                      }<br>
                    }<br>
                    <br>
                    # Handle requests within SIP dialogs<br>
                    route[WITHINDLG] {<br>
                      if (!has_totag()) return;<br>
                    <br>
                      #Teams reINVITEs<br>
                      if(isflagset(FROM_TEAMS)) {<br>
                        t_relay_to_udp("PBX_IP","5060");<br>
                        exit;<br>
                      }<br>
                    <br>
                      # sequential request withing a dialog should<br>
                      # take the path determined by record-routing<br>
                      if (loose_route()) {<br>
                        if (is_method("BYE")) {<br>
                          setflag(FLT_ACC); # do accounting ...<br>
                          setflag(FLT_ACCFAILED); # ... even if the
                    transaction fails<br>
                    <br>
                          #set coresponding cert on transactions<br>
                          if($fd == "SBC_FQDN") {<br>
                            $xavp(tls=>server_name) = "SBC_FQDN";<br>
                            $xavp(tls=>server_id) = "SBC_FQDN";<br>
                          }<br>
                    <br>
                        } else if ( is_method("NOTIFY") ) {<br>
                          # Add Record-Route for in-dialog NOTIFY as per
                    RFC 6665.<br>
                          record_route();<br>
                        }<br>
                    <br>
                        route(RELAY);<br>
                        exit;<br>
                      }<br>
                    <br>
                      if ( is_method("ACK") ) {<br>
                        if ( t_check_trans() ) {<br>
                          # no loose-route, but stateful ACK;<br>
                          # must be an ACK after a 487<br>
                          # or e.g. 404 from upstream server<br>
                          route(RELAY);<br>
                          exit;<br>
                        } else {<br>
                          # ACK without matching transaction ... ignore
                    and discard<br>
                          exit;<br>
                        }<br>
                      }<br>
                      sl_send_reply("404","Not here");<br>
                      exit;<br>
                    }<br>
                    <br>
                    # Manage outgoing branches<br>
                    branch_route[MANAGE_BRANCH] {<br>
                      xdbg("new branch [$T_branch_idx] to $ru\n");<br>
                    }<br>
                    <br>
                    # Manage incoming replies<br>
                    onreply_route[MANAGE_REPLY] {<br>
                      xdbg("incoming reply\n");<br>
                    }<br>
                    <br>
                    #PBX On Reply<br>
                    onreply_route[PBX_REPLY_TO_TEAMS]<br>
                    {<br>
                        if (has_body("application/sdp"))<br>
                      {<br>
                            rtpengine_manage("SRTP codec-mask=all
                    codec-transcode=PCMA replace-origin
                    replace-session-connection
                    media-address=PUBLIC_IP");<br>
                      }<br>
                    }<br>
                    <br>
                    <br>
                    #From Teams On Reply<br>
                    onreply_route[TEAMS_REPLY_TO_PBX]<br>
                    {<br>
                        if (has_body("application/sdp"))<br>
                      {<br>
                            rtpengine_manage("RTP codec-mask=all
                    codec-transcode=PCMA replace-origin
                    replace-session-connection
                    media-address=PUBLIC_IP");<br>
                      }<br>
                    }<br>
                    <br>
                    # Manage failure routing cases<br>
                    failure_route[MANAGE_FAILURE] {<br>
                      if (t_is_canceled()) exit;<br>
                    }<br>
                    <br>
                    event_route[tm:local-request] {<br>
                            if(is_method("OPTIONS") && $ru =~ "<a
                      href="http://pstnhub.microsoft.com/"
                      target="_blank" moz-do-not-send="true">pstnhub.microsoft.com</a>")
                    {<br>
                                   append_hf("Contact:
                    <a class="moz-txt-link-rfc2396E" href="sip:SBC_FQDN:5061;transport=tls"><sip:SBC_FQDN:5061;transport=tls></a>\r\n");<br>
                            }<br>
                            xlog("L_INFO", "Sent out tm request:
                    $mb\n");<br>
                    }</div>
                </div>
              </div>
            </div>
          </div>
          _______________________________________________<br>
          Kamailio (SER) - Users Mailing List<br>
          <a href="mailto:sr-users@lists.kamailio.org" target="_blank"
            moz-do-not-send="true">sr-users@lists.kamailio.org</a><br>
          <a
            href="https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users"
            rel="noreferrer" target="_blank" moz-do-not-send="true">https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users</a><br>
        </blockquote>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <pre class="moz-quote-pre" wrap="">_______________________________________________
Kamailio (SER) - Users Mailing List
<a class="moz-txt-link-abbreviated" href="mailto:sr-users@lists.kamailio.org">sr-users@lists.kamailio.org</a>
<a class="moz-txt-link-freetext" href="https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users">https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users</a>
</pre>
    </blockquote>
    <pre class="moz-signature" cols="72">-- 
Daniel-Constantin Mierla -- <a class="moz-txt-link-abbreviated" href="http://www.asipto.com">www.asipto.com</a>
<a class="moz-txt-link-abbreviated" href="http://www.twitter.com/miconda">www.twitter.com/miconda</a> -- <a class="moz-txt-link-abbreviated" href="http://www.linkedin.com/in/miconda">www.linkedin.com/in/miconda</a>
Funding: <a class="moz-txt-link-freetext" href="https://www.paypal.me/dcmierla">https://www.paypal.me/dcmierla</a></pre>
  </body>
</html>