<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        color:black;
        mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        color:black;
        mso-fareast-language:EN-US;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Vorformatiert Zchn";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";
        color:black;
        mso-fareast-language:DE;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0cm;
        margin-right:0cm;
        margin-bottom:0cm;
        margin-left:36.0pt;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        color:black;
        mso-fareast-language:EN-US;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;
        color:black;
        mso-fareast-language:DE;}
span.E-MailFormatvorlage20
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.HTMLVorformatiertZchn
        {mso-style-name:"HTML Vorformatiert Zchn";
        mso-style-priority:99;
        mso-style-link:"HTML Vorformatiert";
        font-family:Consolas;
        color:black;
        mso-fareast-language:EN-US;}
span.E-MailFormatvorlage23
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 2.0cm 70.85pt;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:931473280;
        mso-list-type:hybrid;
        mso-list-template-ids:355096646 67567631 67567641 67567643 67567631 67567641 67567643 67567631 67567641 67567643;}
@list l0:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l0:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l0:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body bgcolor="white" lang="DE" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal"><span style="color:windowtext">Hello Daniel,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:windowtext"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:windowtext">Thank you very much for your response. Here the portions for my websocket config. Of course all needed modules are loaded (one modparam for websocket ping) and I took the config all from
<a href="http://kamailio.org/docs/modules/4.3.x/modules/websocket.html">http://kamailio.org/docs/modules/4.3.x/modules/websocket.html</a>:<o:p></o:p></span></p>
<p class="MsoNormal"><i><span style="color:windowtext">onreply_route[WS_REPLY] {<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                if (nat_uac_test(64)) {<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                               add_contact_alias();<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                }<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                if (proto==WS) {<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                               xlog("L_INFO", "Hit Reply from Websocket");<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                               rtpengine_answer("trust-address ");<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                }<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">}<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">event_route[xhttp:request] {<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                set_reply_close();<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                set_reply_no_connect();<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                <o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                if ($Rp != MY_INTERN_WSPORT){<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                               xlog("L_WARN", "HTTP request received on $Rp\n");<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                               xhttp_reply("403", "Forbidden", "", "");<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                               exit;      
<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                }<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                if ($hdr(Upgrade)=~"websocket" && $hdr(Connection)=~"Upgrade" && $rm=~"GET") {<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                               if ($hdr(Host) == $null || !is_myself("sip:" + $hdr(Host))) {<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                                               xlog("L_WARN", "Bad host $hdr(Host)\n");<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                                               xhttp_reply("403", "Forbidden", "", "");<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                                               exit;<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                               }<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                               if (ws_handle_handshake()) {<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                                               exit;<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                               }<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                }<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                xhttp_reply("404", "Not Found", "", "");<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">}<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">event_route[websocket:closed] {<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                xlog("L_INFO", "WebSocket connection from $si:$sp has closed\n");<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">}<o:p></o:p></span></i></p>
<p class="MsoNormal"><span style="color:windowtext"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:windowtext">I have attached a debug log for the registration process over websocket, on line 49 you can see the error.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:windowtext"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:windowtext">As for the INVITE I use now this:<o:p></o:p></span></p>
<p class="MsoNormal"><i><span style="color:windowtext">if ($rU=~"^3$" && src_ip==$sel(cfg_get.pstn.gw_ip)) {<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                $ru = "sip:dnagorny@10.250.5.74";<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                uac_replace_to("sip:dnagorny@10.250.5.74");
<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                rtpengine_offer("external internal trust-address");<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                route(RELAY);<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">}<o:p></o:p></span></i></p>
<p class="MsoNormal"><span style="color:windowtext"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:windowtext">Unfortunately I can see now that Kamailio tries to send it out on 10.250.5.74:5060, which I am not even listening on. For the route(RELAY) I use this:<o:p></o:p></span></p>
<p class="MsoNormal"><i><span style="color:windowtext">route[RELAY] {<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                if (is_method("INVITE")) {<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                               t_on_branch("MANAGE_BRANCH");<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                               if (proto==WS) {<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                                               t_on_reply("WS_REPLY");<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                               } else {<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                                               t_on_reply("MANAGE_REPLY");<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                               }<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                               t_on_failure("MANAGE_FAILURE");<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                }<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                if (is_method("CANCEL|BYE")) {<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                               rtpengine_delete();<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                }<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                <o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                if (!t_relay()) {<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                               sl_reply_error();<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                }<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">                exit;<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="color:windowtext">}<o:p></o:p></span></i></p>
<p class="MsoNormal"><span style="color:windowtext"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:windowtext">Is t_relay for Websocket the right choice? I somehow have my doubts but couldn’t find any suggestion in the documentation. Additional Info: Outgoing calls from Websocket registered Users are working.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:windowtext">Thanks for your time helping me out.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:windowtext"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:windowtext"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal"><span style="color:windowtext;mso-fareast-language:DE">Best Regards<o:p></o:p></span></p>
<p class="MsoNormal"><b><span style="color:windowtext;mso-fareast-language:DE">Dimitry Nagorny<o:p></o:p></span></b></p>
<p class="MsoNormal"><span style="font-size:8.0pt;color:windowtext;mso-fareast-language:DE">Trainee</span><span lang="EN-US" style="font-size:8.0pt;color:#7F7F7F;mso-fareast-language:DE"><o:p></o:p></span></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span style="color:windowtext;mso-fareast-language:DE">Von:</span></b><span style="color:windowtext;mso-fareast-language:DE"> sr-users [mailto:sr-users-bounces@lists.sip-router.org]
<b>Im Auftrag von </b>Daniel-Constantin Mierla<br>
<b>Gesendet:</b> Freitag, 3. Juni 2016 08:36<br>
<b>An:</b> Kamailio (SER) - Users Mailing List <sr-users@lists.sip-router.org><br>
<b>Betreff:</b> Re: [SR-Users] Kamailio Websocket Questions<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p>Hello,<span style="font-size:12.0pt;mso-fareast-language:DE"><o:p></o:p></span></p>
<p>1. for websocket the connection has to be reused, the server cannot open a connection towards the browser. So you don't have to force any socket, if kamailio doesn't find the address matching the target ws address, then will throw an error, otherwise will
 use it.<o:p></o:p></p>
<p>2. have you enabled xhttp and websocket modules properly?<o:p></o:p></p>
<p>Cheers,<br>
Daniel<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">On 02/06/16 17:13, Nagorny, Dimitry wrote:<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal">Hi List,<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">two questions regarding Kamailio Websockets:<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoListParagraph" style="text-indent:-18.0pt;mso-list:l0 level1 lfo2"><![if !supportLists]><span style="mso-list:Ignore">1.<span style="font:7.0pt "Times New Roman"">      
</span></span><![endif]>How do I send INVITE request TO the listening Websocket?<br>
I usually used for UDP/TCP/TLS these format, but somehow this is not working for Websocket because it gets in an endless loop:<br>
<i>if ($rU=~"^(\+|00|0)?[1-9][0-9]{4,20}$") {</i><o:p></o:p></p>
<p class="MsoListParagraph"><i>               $ru = "sip:" + $rU + "@" + $sel(cfg_get.pstn.gw_ip) + ";user=phone;transport=udp";</i><o:p></o:p></p>
<p class="MsoListParagraph"><i>               force_send_socket(udp:MY_EXTERN_IP:MY_EXTERN_PORT);</i><o:p></o:p></p>
<p class="MsoListParagraph"><i>               rtpengine_offer("internal trust-address RTP AVP");</i><o:p></o:p></p>
<p class="MsoListParagraph"><i>               route(RELAY);</i><o:p></o:p></p>
<p class="MsoListParagraph"><i>               exit;</i><o:p></o:p></p>
<p class="MsoListParagraph"><i>}</i><br>
<br>
<br>
<o:p></o:p></p>
<p class="MsoListParagraph" style="text-indent:-18.0pt;mso-list:l0 level1 lfo2"><![if !supportLists]><span style="mso-list:Ignore">2.<span style="font:7.0pt "Times New Roman"">      
</span></span><![endif]>Why do I get these errors every time my Websocket Client is registering, but it still works and DB is inserted with registered location:<o:p></o:p></p>
<p class="MsoListParagraph">ERROR: <core> [parser/parse_fline.c:257]: parse_first_line(): parse_first_line: bad message (offset: 22)<o:p></o:p></p>
<p class="MsoListParagraph">ERROR: <core> [parser/msg_parser.c:690]: parse_msg(): ERROR: parse_msg: message=<HTTP/1.1 101 Switching Protocols#015#012Sia: SIP/2.0/TCP 10.250.5.17:51283#015#012Sec-WebSocket-Protocol: sip#015#012Upgrade: websocket#015#012Connection:
 upgrade#015#012Sec-WebSocket-Accept: 6uLXlD/aBrzu/j3PYP3DWO7rvLE=#015#012Server: kamailio (4.3.5 (x86_64/linux))#015#012Content-Length: 0#015#012#015#012><o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">I am using Kamailio 4.3.5 + CentOS 7.2. I appreciate every help I can get.<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal"><span style="mso-fareast-language:DE">Best Regards</span><o:p></o:p></p>
<p class="MsoNormal"><b><span style="mso-fareast-language:DE">Dimitry Nagorny</span></b><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:8.0pt;mso-fareast-language:DE">Trainee</span><o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;mso-fareast-language:DE"><br>
<br>
<br>
<o:p></o:p></span></p>
<pre>_______________________________________________<o:p></o:p></pre>
<pre>SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list<o:p></o:p></pre>
<pre><a href="mailto:sr-users@lists.sip-router.org">sr-users@lists.sip-router.org</a><o:p></o:p></pre>
<pre><a href="http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users">http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users</a><o:p></o:p></pre>
</blockquote>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;mso-fareast-language:DE"><br>
<br>
<o:p></o:p></span></p>
<pre>-- <o:p></o:p></pre>
<pre>Daniel-Constantin Mierla<o:p></o:p></pre>
<pre><a href="http://www.asipto.com">http://www.asipto.com</a> - <a href="http://www.kamailio.org">http://www.kamailio.org</a><o:p></o:p></pre>
<pre><a href="http://twitter.com/#!/miconda">http://twitter.com/#!/miconda</a> - <a href="http://www.linkedin.com/in/miconda">http://www.linkedin.com/in/miconda</a><o:p></o:p></pre>
</div>
</div>
</body>
</html>