<p>i used kamailio v4.1  </p>

<p>part of  kamailio.cfg <br>
for examples:</p>

<p>disable_tcp=no<br>
auto_aliases=no</p>

<p>port=5085<br>
enable_tls=yes<br>
listen=udp:10.2.45.111:5085<br>
listen=tcp:10.2.45.111:5085<br>
listen=tls:10.2.45.111:5086<br>
listen=tcp:10.2.45.111:5087<br>
listen=tls:10.2.45.111:5088</p>

<p>and i excute<br>
/etc/init.d/kamailio start<br>
it can run</p>

<p>but when on ka v4.4.0 <br>
the same contents in kamailio.cfg but can`t run </p>

<p>both 4.1.x and 4.4.x when i change <br>
disable_tcp=yes <br>
it can run<br>
but only listen on udp 5085 </p>

<p>v4.1 i change disable_tcp=no <br>
it can listen tls,tcp.udp</p>

<p>i use modules: dispatcher <br>
v4.4 i setup a new modules : evapi </p>

<p>why tcp can`t run properly?</p>

<p>`#!KAMAILIO</p>

<p>####### Global Parameters #########</p>

<p>debug=0<br>
log_stderror=no</p>

<p>memdbg=5<br>
memlog=5</p>

<p>log_facility=LOG_LOCAL1<br>
fork=yes<br>
children=5<br>
tcp_children=4</p>

<p>#disable_tcp=no</p>

<p>auto_aliases=no</p>

<p>port=5085</p>

<p><a href="https://github.com/kamailio/kamailio/pull/4" class="issue-link js-issue-link" data-url="https://github.com/kamailio/kamailio/issues/4" data-id="49856885" data-error-text="Failed to load issue title" data-permission-text="Issue title is private">#4</a>.1<br>
enable_tls=yes</p>

<p>listen=udp:10.2.45.111:5085<br>
listen=tcp:10.2.45.111:5085<br>
listen=tls:10.2.45.111:5086<br>
listen=tcp:10.2.45.111:5087<br>
listen=tls:10.2.45.111:5088</p>

<p>sip_warning=no</p>

<p><a href="https://github.com/kamailio/kamailio/pull/4" class="issue-link js-issue-link" data-url="https://github.com/kamailio/kamailio/issues/4" data-id="49856885" data-error-text="Failed to load issue title" data-permission-text="Issue title is private">#4</a>.1<br>
tcp_accept_no_cl=yes<br>
tcp_connection_lifetime=3604<br>
tcp_rd_buf_size=16384<br>
exit_timeout = 300<br>
<a href="https://github.com/kamailio/kamailio/pull/4" class="issue-link js-issue-link" data-url="https://github.com/kamailio/kamailio/issues/4" data-id="49856885" data-error-text="Failed to load issue title" data-permission-text="Issue title is private">#4</a>.1</p>

<p>mpath="/home/administrator/kamailio/modules_k/:/home/administrator/kamailio_proxy/lib64/kamailio/modules/"</p>

<p>loadmodule "db_mysql.so"<br>
loadmodule "mi_fifo.so"<br>
loadmodule "kex.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 "mi_rpc.so"<br>
loadmodule "acc.so"<br>
loadmodule "dispatcher.so"</p>

<p><a href="https://github.com/kamailio/kamailio/pull/4" class="issue-link js-issue-link" data-url="https://github.com/kamailio/kamailio/issues/4" data-id="49856885" data-error-text="Failed to load issue title" data-permission-text="Issue title is private">#4</a>.1<br>
loadmodule "tls.so"<br>
loadmodule "auth.so"<br>
loadmodule "auth_db.so"<br>
loadmodule "xhttp.so"<br>
loadmodule "websocket.so"<br>
loadmodule "usrloc.so"<br>
loadmodule "nathelper.so"<br>
loadmodule "registrar.so"<br>
<a href="https://github.com/kamailio/kamailio/pull/4" class="issue-link js-issue-link" data-url="https://github.com/kamailio/kamailio/issues/4" data-id="49856885" data-error-text="Failed to load issue title" data-permission-text="Issue title is private">#4</a>.1</p>

<p>#added by liqixin<br>
#loadmodule "evapi.so"<br>
#added by liqixin</p>

<h1>----------------- setting module-specific parameters ---------------</h1>

<h1>----- mi_fifo params -----</h1>

<p>modparam("mi_fifo", "fifo_name", "/tmp/kamailio_fifo")</p>

<h1>----- rr params -----</h1>

<h1>add value to ;lr param to cope with most of the UAs</h1>

<p>modparam("rr", "enable_full_lr", 1)</p>

<h1>do not append from tag to the RR (no need for this script)</h1>

<p>modparam("rr", "append_fromtag", 0)</p>

<h1>----- acc params -----</h1>

<p>modparam("acc", "log_flag", 1)<br>
modparam("acc", "failed_transaction_flag", 3)<br>
modparam("acc", "log_extra", <br>
    "src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd;src_ip=$si")</p>

<h1>----- tm params -----</h1>

<p>modparam("tm", "fr_timer", 2000)<br>
modparam("tm", "fr_inv_timer", 40000)</p>

<h1>----- dispatcher params -----</h1>

<p>modparam("dispatcher", "db_url", "mysql://kamailio:kamailiorw@localhost/kamailio")<br>
modparam("dispatcher", "table_name", "dispatcher")<br>
modparam("dispatcher", "flags", 2)<br>
modparam("dispatcher", "dst_avp", "$avp(AVP_DST)")<br>
modparam("dispatcher", "grp_avp", "$avp(AVP_GRP)")<br>
modparam("dispatcher", "cnt_avp", "$avp(AVP_CNT)")</p>

<p><a href="https://github.com/kamailio/kamailio/pull/4" class="issue-link js-issue-link" data-url="https://github.com/kamailio/kamailio/issues/4" data-id="49856885" data-error-text="Failed to load issue title" data-permission-text="Issue title is private">#4</a>.4<br>
modparam("dispatcher", "sock_avp", "$avp(AVP_SOCK)")<br>
<a href="https://github.com/kamailio/kamailio/pull/4" class="issue-link js-issue-link" data-url="https://github.com/kamailio/kamailio/issues/4" data-id="49856885" data-error-text="Failed to load issue title" data-permission-text="Issue title is private">#4</a>.4</p>

<p><a href="https://github.com/kamailio/kamailio/pull/4" class="issue-link js-issue-link" data-url="https://github.com/kamailio/kamailio/issues/4" data-id="49856885" data-error-text="Failed to load issue title" data-permission-text="Issue title is private">#4</a>.1<br>
modparam("dispatcher", "ds_ping_method", "OPTIONS")<br>
modparam("dispatcher", "ds_ping_from", "sip:kamailio@10.2.45.111")<br>
modparam("dispatcher", "ds_ping_interval", 10)<br>
modparam("dispatcher", "ds_probing_threshold", 3)<br>
modparam("dispatcher", "ds_ping_reply_codes", "class=2;code=400;class=3")<br>
modparam("dispatcher", "ds_probing_mode", 1)<br>
<a href="https://github.com/kamailio/kamailio/pull/4" class="issue-link js-issue-link" data-url="https://github.com/kamailio/kamailio/issues/4" data-id="49856885" data-error-text="Failed to load issue title" data-permission-text="Issue title is private">#4</a>.1</p>

<p><a href="https://github.com/kamailio/kamailio/pull/4" class="issue-link js-issue-link" data-url="https://github.com/kamailio/kamailio/issues/4" data-id="49856885" data-error-text="Failed to load issue title" data-permission-text="Issue title is private">#4</a>.1</p>

<h1>----- usrloc params -----</h1>

<p>/* enable DB persistency for location entries */<br>
modparam("usrloc", "db_url", "mysql://kamailio:kamailiorw@localhost/kamailio")<br>
modparam("usrloc", "db_mode", 0)</p>

<p>modparam("registrar", "method_filtering", 1)<br>
modparam("registrar", "max_expires", 3600)<br>
modparam("registrar", "gruu_enabled", 0)<br>
modparam("registrar", "use_path", 1) <br>
modparam("registrar", "path_mode", 1) <br>
modparam("registrar", "path_use_received", 0)<br>
modparam("nathelper|registrar", "received_avp", "$avp(RECEIVED)")<br>
modparam("usrloc", "nat_bflag", 6)<br>
<a href="https://github.com/kamailio/kamailio/pull/4" class="issue-link js-issue-link" data-url="https://github.com/kamailio/kamailio/issues/4" data-id="49856885" data-error-text="Failed to load issue title" data-permission-text="Issue title is private">#4</a>.1</p>

<p><a href="https://github.com/kamailio/kamailio/pull/4" class="issue-link js-issue-link" data-url="https://github.com/kamailio/kamailio/issues/4" data-id="49856885" data-error-text="Failed to load issue title" data-permission-text="Issue title is private">#4</a>.1</p>

<h1>----- tls params -----</h1>

<p>#modparam("websocket", "cors_mode", 0);<br>
modparam("websocket", "keepalive_mechanism", 0);</p>

<h1>----- tls params -----</h1>

<p>modparam("tls", "config", "/home/administrator/kamailio_proxy/etc/kamailio/tls.cfg")</p>

<p><a href="https://github.com/kamailio/kamailio/pull/4" class="issue-link js-issue-link" data-url="https://github.com/kamailio/kamailio/issues/4" data-id="49856885" data-error-text="Failed to load issue title" data-permission-text="Issue title is private">#4</a>.1</p>

<p>#-------evapi----------<br>
#modparam("evapi", "workers", 2)<br>
#modparam("evapi", "bind_addr", "10.2.45.111:5085")</p>

<p>####### Routing Logic ########</p>

<h1>main request routing logic</h1>

<p>route {</p>

<pre><code>route(REQINIT);

#4.1
if (nat_uac_test(64)) {
            # Do NAT traversal stuff for requests from a WebSocket
            # connection - even if it is not behind a NAT!
            # This won't be needed in the future if Kamailio and the
            # WebSocket client support Outbound and Path.
            force_rport();
                    fix_nated_register();
        add_contact_alias();
    }   


if (is_method("CANCEL"))
{
        if (t_check_trans())
                t_relay();
         exit;
    }
#4.1


route(WITHINDLG);
</code></pre>

<p><a href="https://github.com/kamailio/kamailio/pull/4" class="issue-link js-issue-link" data-url="https://github.com/kamailio/kamailio/issues/4" data-id="49856885" data-error-text="Failed to load issue title" data-permission-text="Issue title is private">#4</a>.4</p>

<h1>if (is_method("CANCEL"))</h1>

<h1>{</h1>

<h1>if (t_check_trans())</h1>

<h1>t_relay();</h1>

<h1>exit;</h1>

<h1>}</h1>

<p><a href="https://github.com/kamailio/kamailio/pull/4" class="issue-link js-issue-link" data-url="https://github.com/kamailio/kamailio/issues/4" data-id="49856885" data-error-text="Failed to load issue title" data-permission-text="Issue title is private">#4</a>.4</p>

<pre><code>t_check_trans();
</code></pre>

<p><a href="https://github.com/kamailio/kamailio/pull/4" class="issue-link js-issue-link" data-url="https://github.com/kamailio/kamailio/issues/4" data-id="49856885" data-error-text="Failed to load issue title" data-permission-text="Issue title is private">#4</a>.4</p>

<h1>remove_hf("Route");</h1>

<h1>if (is_method("INVITE|SUBSCRIBE"))</h1>

<h1>record_route();</h1>

<h1>if (is_method("INVITE"))</h1>

<h1>{</h1>

<h1>setflag(1); # do accounting</h1>

<h1>}</h1>

<h1>route(PRESENCE);</h1>

<h1>route(REGISTRAR);</h1>

<h1>if ($rU==$null)</h1>

<h1>{</h1>

<pre><code>    # request with no Username in RURI
</code></pre>

<h1>sl_send_reply("484","Address Incomplete");</h1>

<h1>exit;</h1>

<h1>}</h1>

<p><a href="https://github.com/kamailio/kamailio/pull/4" class="issue-link js-issue-link" data-url="https://github.com/kamailio/kamailio/issues/4" data-id="49856885" data-error-text="Failed to load issue title" data-permission-text="Issue title is private">#4</a>.4</p>

<pre><code>route(DISPATCH);
</code></pre>

<p><a href="https://github.com/kamailio/kamailio/pull/4" class="issue-link js-issue-link" data-url="https://github.com/kamailio/kamailio/issues/4" data-id="49856885" data-error-text="Failed to load issue title" data-permission-text="Issue title is private">#4</a>.1<br>
    route(RELAY);<br>
<a href="https://github.com/kamailio/kamailio/pull/4" class="issue-link js-issue-link" data-url="https://github.com/kamailio/kamailio/issues/4" data-id="49856885" data-error-text="Failed to load issue title" data-permission-text="Issue title is private">#4</a>.1</p>

<p>}</p>

<p><a href="https://github.com/kamailio/kamailio/pull/4" class="issue-link js-issue-link" data-url="https://github.com/kamailio/kamailio/issues/4" data-id="49856885" data-error-text="Failed to load issue title" data-permission-text="Issue title is private">#4</a>.1 xlog <br>
route[RELAY] {<br>
    if (!t_relay()) {<br>
        sl_reply_error();<br>
    }<br>
    exit;<br>
}<br>
#---4.1---</p>

<h1>Per SIP request initial checks</h1>

<p>route[REQINIT] {<br>
    <a href="https://github.com/kamailio/kamailio/pull/4" class="issue-link js-issue-link" data-url="https://github.com/kamailio/kamailio/issues/4" data-id="49856885" data-error-text="Failed to load issue title" data-permission-text="Issue title is private">#4</a>.4<br>
    if (!mf_process_maxfwd_header("10")) {<br>
        sl_send_reply("483","Too Many Hops");<br>
        exit;<br>
    }<br>
    <a href="https://github.com/kamailio/kamailio/pull/4" class="issue-link js-issue-link" data-url="https://github.com/kamailio/kamailio/issues/4" data-id="49856885" data-error-text="Failed to load issue title" data-permission-text="Issue title is private">#4</a>.4</p>

<pre><code>if(!sanity_check("1511", "7"))
{
    xlog("Malformed SIP message from $si:$sp\n");
    exit;
}
</code></pre>

<p>}</p>

<h1>Handle requests within SIP dialogs</h1>

<p>route[WITHINDLG] {<br>
    if (has_totag()) {</p>

<pre><code>    if (loose_route()) {

        if (is_method("BYE")) {
            setflag(1); # do accounting ...
            setflag(3); # ... even if the transaction fails
        }

        #4.1 
         #   if ($du == "") {
         #  handle_ruri_alias();
         #           }
        #4.1


        route(RELAY);
    } else {

    #4.4
        if (is_method("SUBSCRIBE") && uri == myself) {
            # in-dialog subscribe requests
            route(PRESENCE);
            exit;
        }
    #4.4


        if ( is_method("ACK") ) {
            if ( t_check_trans() ) {

                t_relay();
                exit;
            } else {

                exit;
            }
        }
        sl_send_reply("404","Not here");

#4.1    if ( is_method("ACK") ) {
    #       if ( t_check_trans() ) {

    #           t_relay();
    #           exit;
    #       } else {

    #           exit;
    #       }
    #   }
     #   sl_send_reply("404","Not here");

    }

    #4.1 route(RELAY);
    exit;
}
</code></pre>

<p>}</p>

<h1>Handle SIP registrations 4.4</h1>

<p>route[REGISTRAR] {<br>
    if(!is_method("REGISTER"))<br>
        return;<br>
    sl_send_reply("404", "No registrar");<br>
    exit;<br>
}</p>

<h1>Presence server route 4.4</h1>

<p>route[PRESENCE] {<br>
    if(!is_method("PUBLISH|SUBSCRIBE"))<br>
        return;</p>

<pre><code>sl_send_reply("404", "Not here");
exit;
</code></pre>

<p>}</p>

<h1>Dispatch requests-------4.4</h1>

<h1>route[DISPATCH] {</h1>

<pre><code># round robin dispatching on gateways group '1'
</code></pre>

<h1>if(!ds_select_dst("1", "4"))</h1>

<h1>{</h1>

<h1>send_reply("404", "No destination");</h1>

<h1>exit;</h1>

<h1>}</h1>

<h1>xlog("L_DBG", "--- SCRIPT: going to <$ru> via <$du>\n");</h1>

<h1>t_on_failure("RTF_DISPATCH");</h1>

<h1>route(RELAY);</h1>

<h1>exit;</h1>

<h1>}</h1>

<h1>Dispatch requests-------4.4</h1>

<p><a href="https://github.com/kamailio/kamailio/pull/4" class="issue-link js-issue-link" data-url="https://github.com/kamailio/kamailio/issues/4" data-id="49856885" data-error-text="Failed to load issue title" data-permission-text="Issue title is private">#4</a>.1----------------dispatch</p>

<h1>Dispatch requests</h1>

<p>route[DISPATCH] {<br>
    # round robin dispatching on gateways group '1'<br>
    if(is_method("REGISTER")){<br>
        if(ds_select_dst("1", "0"))<br>
        {<br>
            loose_route();<br>
        #   route(RELAY);<br>
        }<br>
        else<br>
        {<br>
            send_reply("404", "No destination");<br>
            exit;<br>
        }<br>
    }</p>

<pre><code>else if (is_method("INVITE")) {
                    if ($du == "") {
                            if (!handle_ruri_alias()) {
                                    xlog("L_ERR", "Bad alias <$ru>\n");
                                    sl_send_reply("400", "Bad Request");
                                    exit;
                            }
                    }



    $avp(route)=$(hdr(Route)[0]);
    $avp(LastRouteParam)=$(avp(route){param.count})-1;
    if($(avp(route){param.name,$avp(LastRouteParam)})=="fccs>"){    
        #xlog("the method invite from sipserver \n");
        loose_route();
        if( $(ru{param.value,transport}) == "TCP"||$(ru{param.value,transport}) == "tcp" ){
            record_route_preset("10.2.45.111:5085;transport=tcp","10.2.45.111:5085");
        }
        else if( $(ru{param.value,transport}) == "TLS"||$(ru{param.value,transport}) == "tls" ){    
                           record_route_preset("10.2.45.111:5086;transport=tls","10.2.45.111:5085");
                     }
        else if( $(ru{param.value,transport}) == "WS"||$(ru{param.value,transport}) == "ws" ){
                            record_route_preset("10.2.45.111:5087;transport=ws","10.2.45.111:5085");
                     }
        else if( $(ru{param.value,transport}) == "WSS"||$(ru{param.value,transport}) == "ws" ){
                            record_route_preset("10.2.45.111:5088;transport=wss","10.2.45.111:5085");                         

        }
        else{
            record_route_preset("10.2.45.111:5085","10.2.45.111:5085");
        }

        route(RELAY);   
    }

    else{
        if (ds_select_dst("1", "6")) {
            #xlog("the first invite load balance \n");
            if(proto==TCP){
                record_route_preset("10.2.45.111:5085","10.2.45.111:5085;transport=tcp");
            }
            else if(proto==TLS){
                                  record_route_preset("10.2.45.111:5085","10.2.45.111:5086;transport=tls");
                            }
            else if(proto==WS){
                                    record_route_preset("10.2.45.111:5085","10.2.45.111:5087;transport=ws");
                            }
            else if(proto==WSS){
                                    record_route_preset("10.2.45.111:5085","10.2.45.111:5088;transport=wss");
                            }


            else{
                record_route_preset("10.2.45.111:5085","10.2.45.111:5085");
                }
            loose_route();  
            route(RELAY);
            }

        else{
            send_reply("503","Invite Load_balance Service Unavailable");
                exit;

        }
    }
   }

    else if(is_method("MESSAGE")||is_method("REFER")||is_method("PUBLISH")||is_method("SUBSCRIBE")||is_method("NOTIFY")){
     $avp(route2)=$(hdr(Route)[0]);
            $avp(LastRouteParam2)=$(avp(route){param.count})-1;

    if($(avp(route2){param.name,$avp(LastRouteParam2)})=="fccs>"){
                    loose_route();
                    route(RELAY);

    }
    else{
                 if(ds_select_dst("1", "0"))
                 {
                           loose_route();
                         # route(RELAY);
                 }

                else
                 {
                         send_reply("404", "No destination");
                          exit;
                 }
    }
    }

else{
    send_reply("400","method not defined \n");
}

xlog("L_DBG", "--- SCRIPT: going to <$ru> via <$du>\n");
t_on_failure("RTF_DISPATCH");
return;         
</code></pre>

<p>}</p>

<p>#----------------4.1 dispatch</p>

<h1>Sample failure route ----4.4</h1>

<p>#failure_route[RTF_DISPATCH] {</p>

<h1>if (t_is_canceled()) {</h1>

<h1>exit;</h1>

<h1>}</h1>

<pre><code># next DST - only for 500 or local timeout
</code></pre>

<h1>if (t_check_status("500")</h1>

<h1>or (t_branch_timeout() and !t_branch_replied()))</h1>

<h1>{</h1>

<h1>if(ds_next_dst())</h1>

<h1>{</h1>

<h1>t_on_failure("RTF_DISPATCH");</h1>

<h1>route(RELAY);</h1>

<h1>exit;</h1>

<h1>}</h1>

<h1>}</h1>

<h1>}</h1>

<h1>Sample failure route ----4.4</h1>

<h1>Sample failure route</h1>

<p>failure_route[RTF_DISPATCH] {<br>
    if (t_is_canceled()) {<br>
        exit;<br>
    }<br>
    # next DST - only for 500 or local timeout<br>
    if (t_check_status("500")<br>
            or (t_branch_timeout() and !t_branch_replied()))<br>
    {<br>
        if(ds_next_dst())<br>
        {<br>
            t_on_failure("RTF_DISPATCH");<br>
            route(RELAY);<br>
            exit;<br>
        }<br>
        <a href="https://github.com/kamailio/kamailio/pull/4" class="issue-link js-issue-link" data-url="https://github.com/kamailio/kamailio/issues/4" data-id="49856885" data-error-text="Failed to load issue title" data-permission-text="Issue title is private">#4</a>.1<br>
        ds_mark_dst("ip"); # set to inactive and probing<br>
        <a href="https://github.com/kamailio/kamailio/pull/4" class="issue-link js-issue-link" data-url="https://github.com/kamailio/kamailio/issues/4" data-id="49856885" data-error-text="Failed to load issue title" data-permission-text="Issue title is private">#4</a>.1<br>
    }<br>
}</p>

<p><a href="https://github.com/kamailio/kamailio/pull/4" class="issue-link js-issue-link" data-url="https://github.com/kamailio/kamailio/issues/4" data-id="49856885" data-error-text="Failed to load issue title" data-permission-text="Issue title is private">#4</a>.1<br>
onreply_route {<br>
        if (nat_uac_test(64)) {<br>
                # Do NAT traversal stuff for replies to a WebSocket connection<br>
        # - even if it is not behind a NAT!<br>
                # This won't be needed in the future if Kamailio and the<br>
        # WebSocket client support Outbound and Path.<br>
                add_contact_alias();<br>
        }<br>
}<br>
<a href="https://github.com/kamailio/kamailio/pull/4" class="issue-link js-issue-link" data-url="https://github.com/kamailio/kamailio/issues/4" data-id="49856885" data-error-text="Failed to load issue title" data-permission-text="Issue title is private">#4</a>.1</p>

<p>event_route[xhttp:request] {<br>
    set_reply_close();<br>
    set_reply_no_connect();<br>
    #set_forward_close();<br>
    #set_forward_no_connect();<br>
    #t_relay();<br>
    if ($Rp != 5087 && $Rp != 5088) <br>
    {<br>
        xlog("L_WARN", "HTTP request received on $Rp\n");<br>
        xhttp_reply("403", "Forbidden", "", "");<br>
        exit;<br>
    }</p>

<pre><code>xlog("L_DBG", "HTTP Request Received\n");

if ($hdr(Upgrade)=~"websocket"
        && $hdr(Connection)=~"Upgrade"
        && $rm=~"GET") {
    #xlog("websocket upgrade ok\n"); 
    # Validate Host - make sure the client is using the correct
    # alias for WebSockets
    if ($hdr(Host) == $null || !is_myself("sip:" + $hdr(Host))) {
        xlog("L_WARN", "Bad host $hdr(Host)\n");
        xhttp_reply("403", "Forbidden", "", "");
        exit;
    }

    # Optional... validate Origin - make sure the client is from an
    # authorised website.  For example,
    #
    # if ($hdr(Origin) != "http://communicator.MY_DOMAIN"
    #     && $hdr(Origin) != "https://communicator.MY_DOMAIN") {
    #   xlog("L_WARN", "Unauthorised client $hdr(Origin)\n");
    #   xhttp_reply("403", "Forbidden", "", "");
    #   exit;
    # }

    # Optional... perform HTTP authentication

    # ws_handle_handshake() exits (no further configuration file
    # processing of the request) when complete.
    if (ws_handle_handshake())
    {
        # Optional... cache some information about the
        # successful connection

        exit;
    }

}
#route(RELAY);
xhttp_reply("404", "Http Not Found", "", "");
</code></pre>

<p>}</p>

<p>event_route[websocket:closed] {<br>
    xlog("L_INFO", "WebSocket connection from $si:$sp has closed\n");<br>
}</p>

<p>#added by liqixin<br>
#event_route[evapi:connection-new] {</p>

<h1>xlog("new connection from $evapi(srcaddr):$evapi(srcport)\n");</h1>

<p>#}</p>

<p>#event_route[evapi:connection-closed] {</p>

<h1>xlog("connection closed by $evapi(srcaddr):$evapi(srcport)\n");</h1>

<p>#}<br>
#added by liqixin`</p>

<p style="font-size:small;-webkit-text-size-adjust:none;color:#666;">—<br />You are receiving this because you are subscribed to this thread.<br />Reply to this email directly or <a href="https://github.com/kamailio/kamailio/issues/585">view it on GitHub</a><img alt="" height="1" src="https://github.com/notifications/beacon/AF36ZcIDZj_2FGxQr7E4ZTcRT-MHHpJjks5p7wcLgaJpZM4IQpjm.gif" width="1" /></p>
<div itemscope itemtype="http://schema.org/EmailMessage">
<div itemprop="action" itemscope itemtype="http://schema.org/ViewAction">
  <link itemprop="url" href="https://github.com/kamailio/kamailio/issues/585"></link>
  <meta itemprop="name" content="View Issue"></meta>
</div>
<meta itemprop="description" content="View this Issue on GitHub"></meta>
</div>