<div dir="ltr">Andy,<div><br></div><div>Thanks for the suggestions. I did try putting one protocol structure, and I see the earlier behavior which is parsing error. I will keep looking into this. Meanwhile, I found a node.js and <a href="http://socket.io">socket.io</a> based server hosted online - <a href="http://appolo-chat-example.herokuapp.com/">appolo-chat-example.herokuapp.com/</a>.</div>
<div><br></div><div>I was able to capture the ws handshake messages using chrome.</div><div><br></div><ol class="" tabindex="0" style="list-style-type:none;margin:0px;outline:none;color:rgb(48,57,66);font-family:Ubuntu,Arial,sans-serif;font-size:12px">
<li title="" style="padding:0px 0px 0px 14px;margin-top:1px;word-wrap:break-word"><div class="" style="color:rgb(84,84,84);display:inline-block;margin-right:0.5em;font-weight:bold;vertical-align:top;white-space:pre-wrap">
Request URL:</div><div class="" style="font-family:'dejavu sans mono',monospace;white-space:pre-wrap;display:inline;margin-right:100px;word-break:break-all;margin-top:1px;font-size:11px!important">ws://<a href="http://appolo-chat-example.herokuapp.com/socket.io/?EIO=2&transport=websocket&sid=DSqTKgIc-CNbawicAAAB">appolo-chat-example.herokuapp.com/socket.io/?EIO=2&transport=websocket&sid=DSqTKgIc-CNbawicAAAB</a></div>
</li><li title="" style="padding:0px 0px 0px 14px;margin-top:1px;word-wrap:break-word"><div class="" style="color:rgb(84,84,84);display:inline-block;margin-right:0.5em;font-weight:bold;vertical-align:top;white-space:pre-wrap">
Request Method:</div><div class="" style="font-family:'dejavu sans mono',monospace;white-space:pre-wrap;display:inline;margin-right:100px;word-break:break-all;margin-top:1px;font-size:11px!important">GET</div></li>
<li title="" style="padding:0px 0px 0px 14px;margin-top:1px;word-wrap:break-word"><div class="" style="color:rgb(84,84,84);display:inline-block;margin-right:0.5em;font-weight:bold;vertical-align:top;white-space:pre-wrap">
Status Code:</div><div class="" title="101 Switching Protocols" style="margin-right:3px;vertical-align:middle;width:10px;height:10px;display:inline-block;background-image:url(chrome-devtools://devtools/bundled/Images/statusbarButtonGlyphs.png)">
</div><div class="" style="font-family:'dejavu sans mono',monospace;white-space:pre-wrap;display:inline;margin-right:100px;word-break:break-all;margin-top:1px;font-size:11px!important">101 Switching Protocols</div>
</li><li title="" class="" style="padding:0px 0px 0px 14px;margin-top:1px;word-wrap:break-word;font-weight:bold">Request Headers</li><ol class="" style="margin:0px;min-width:100%;list-style-type:none;padding:2px 6px!important">
<li title="" style="padding:0px 0px 0px 14px;margin-top:1px;word-wrap:break-word;white-space:nowrap"><div class="" style="width:10px;height:10px;display:inline-block;background-image:url(chrome-devtools://devtools/bundled/Images/statusbarButtonGlyphs.png)">
</div><div class="" style="margin-left:4px;display:inline-block;font-weight:bold">Provisional headers are shown</div></li><li title="" style="padding:0px 0px 0px 14px;margin-top:1px;word-wrap:break-word;white-space:nowrap">
<div class="" style="color:rgb(84,84,84);display:inline-block;margin-right:0.5em;font-weight:bold;vertical-align:top;white-space:pre-wrap">Cache-Control:</div><div class="" style="font-family:'dejavu sans mono',monospace;white-space:pre-wrap;display:inline;margin-right:100px;word-break:break-all;margin-top:1px;font-size:11px!important">
no-cache</div></li><li title="" style="padding:0px 0px 0px 14px;margin-top:1px;word-wrap:break-word;white-space:nowrap"><div class="" style="color:rgb(84,84,84);display:inline-block;margin-right:0.5em;font-weight:bold;vertical-align:top;white-space:pre-wrap">
Connection:</div><div class="" style="font-family:'dejavu sans mono',monospace;white-space:pre-wrap;display:inline;margin-right:100px;word-break:break-all;margin-top:1px;font-size:11px!important">Upgrade</div></li>
<li title="" style="padding:0px 0px 0px 14px;margin-top:1px;word-wrap:break-word;white-space:nowrap"><div class="" style="color:rgb(84,84,84);display:inline-block;margin-right:0.5em;font-weight:bold;vertical-align:top;white-space:pre-wrap">
Cookie:</div><div class="" style="font-family:'dejavu sans mono',monospace;white-space:pre-wrap;display:inline;margin-right:100px;word-break:break-all;margin-top:1px;font-size:11px!important">io=DSqTKgIc-CNbawicAAAB</div>
</li><li title="" style="padding:0px 0px 0px 14px;margin-top:1px;word-wrap:break-word;white-space:nowrap"><div class="" style="color:rgb(84,84,84);display:inline-block;margin-right:0.5em;font-weight:bold;vertical-align:top;white-space:pre-wrap">
Host:</div><div class="" style="font-family:'dejavu sans mono',monospace;white-space:pre-wrap;display:inline;margin-right:100px;word-break:break-all;margin-top:1px;font-size:11px!important"><a href="http://appolo-chat-example.herokuapp.com">appolo-chat-example.herokuapp.com</a></div>
</li><li title="" style="padding:0px 0px 0px 14px;margin-top:1px;word-wrap:break-word;white-space:nowrap"><div class="" style="color:rgb(84,84,84);display:inline-block;margin-right:0.5em;font-weight:bold;vertical-align:top;white-space:pre-wrap">
Origin:</div><div class="" style="font-family:'dejavu sans mono',monospace;white-space:pre-wrap;display:inline;margin-right:100px;word-break:break-all;margin-top:1px;font-size:11px!important"><a href="http://appolo-chat-example.herokuapp.com">http://appolo-chat-example.herokuapp.com</a></div>
</li><li title="" style="padding:0px 0px 0px 14px;margin-top:1px;word-wrap:break-word;white-space:nowrap"><div class="" style="color:rgb(84,84,84);display:inline-block;margin-right:0.5em;font-weight:bold;vertical-align:top;white-space:pre-wrap">
Pragma:</div><div class="" style="font-family:'dejavu sans mono',monospace;white-space:pre-wrap;display:inline;margin-right:100px;word-break:break-all;margin-top:1px;font-size:11px!important">no-cache</div></li><li title="" style="padding:0px 0px 0px 14px;margin-top:1px;word-wrap:break-word;white-space:nowrap">
<div class="" style="color:rgb(84,84,84);display:inline-block;margin-right:0.5em;font-weight:bold;vertical-align:top;white-space:pre-wrap">Sec-WebSocket-Extensions:</div><div class="" style="font-family:'dejavu sans mono',monospace;white-space:pre-wrap;display:inline;margin-right:100px;word-break:break-all;margin-top:1px;font-size:11px!important">
permessage-deflate; client_max_window_bits, x-webkit-deflate-frame</div></li><li title="" style="padding:0px 0px 0px 14px;margin-top:1px;word-wrap:break-word;white-space:nowrap"><div class="" style="color:rgb(84,84,84);display:inline-block;margin-right:0.5em;font-weight:bold;vertical-align:top;white-space:pre-wrap">
Sec-WebSocket-Key:</div><div class="" style="font-family:'dejavu sans mono',monospace;white-space:pre-wrap;display:inline;margin-right:100px;word-break:break-all;margin-top:1px;font-size:11px!important">SR0i9G/oRJdJSgAXjo5iOw==</div>
</li><li title="" style="padding:0px 0px 0px 14px;margin-top:1px;word-wrap:break-word;white-space:nowrap"><div class="" style="color:rgb(84,84,84);display:inline-block;margin-right:0.5em;font-weight:bold;vertical-align:top;white-space:pre-wrap">
Sec-WebSocket-Version:</div><div class="" style="font-family:'dejavu sans mono',monospace;white-space:pre-wrap;display:inline;margin-right:100px;word-break:break-all;margin-top:1px;font-size:11px!important">13</div>
</li><li title="" style="padding:0px 0px 0px 14px;margin-top:1px;word-wrap:break-word;white-space:nowrap"><div class="" style="color:rgb(84,84,84);display:inline-block;margin-right:0.5em;font-weight:bold;vertical-align:top;white-space:pre-wrap">
Upgrade:</div><div class="" style="font-family:'dejavu sans mono',monospace;white-space:pre-wrap;display:inline;margin-right:100px;word-break:break-all;margin-top:1px;font-size:11px!important">websocket</div></li>
<li title="" style="padding:0px 0px 0px 14px;margin-top:1px;word-wrap:break-word;white-space:nowrap"><div class="" style="color:rgb(84,84,84);display:inline-block;margin-right:0.5em;font-weight:bold;vertical-align:top;white-space:pre-wrap">
User-Agent:</div><div class="" style="font-family:'dejavu sans mono',monospace;white-space:pre-wrap;display:inline;margin-right:100px;word-break:break-all;margin-top:1px;font-size:11px!important">Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36</div>
</li></ol><li title="" class="" style="padding:0px 0px 0px 14px;margin-top:1px;word-wrap:break-word;font-weight:bold">Query String Parameters<span class="" style="display:inline;margin-left:30px;font-weight:normal;color:rgb(115,115,115)">view source</span><span class="" style="display:inline;margin-left:30px;font-weight:normal;color:rgb(115,115,115)">view URL encoded</span></li>
<ol class="" style="margin:0px;min-width:100%;list-style-type:none;padding:2px 6px!important"><li title="" style="padding:0px 0px 0px 14px;margin-top:1px;word-wrap:break-word;white-space:nowrap"><div class="" style="color:rgb(84,84,84);display:inline-block;margin-right:0.5em;font-weight:bold;vertical-align:top;white-space:pre-wrap">
EIO:</div><div class="" style="font-family:'dejavu sans mono',monospace;white-space:pre-wrap;display:inline;margin-right:100px;word-break:break-all;margin-top:1px;font-size:11px!important">2</div></li><li title="" style="padding:0px 0px 0px 14px;margin-top:1px;word-wrap:break-word;white-space:nowrap">
<div class="" style="color:rgb(84,84,84);display:inline-block;margin-right:0.5em;font-weight:bold;vertical-align:top;white-space:pre-wrap">transport:</div><div class="" style="font-family:'dejavu sans mono',monospace;white-space:pre-wrap;display:inline;margin-right:100px;word-break:break-all;margin-top:1px;font-size:11px!important">
websocket</div></li><li title="" style="padding:0px 0px 0px 14px;margin-top:1px;word-wrap:break-word;white-space:nowrap"><div class="" style="color:rgb(84,84,84);display:inline-block;margin-right:0.5em;font-weight:bold;vertical-align:top;white-space:pre-wrap">
sid:</div><div class="" style="font-family:'dejavu sans mono',monospace;white-space:pre-wrap;display:inline;margin-right:100px;word-break:break-all;margin-top:1px;font-size:11px!important">DSqTKgIc-CNbawicAAAB</div>
</li></ol><li title="" class="" style="padding:0px 0px 0px 14px;margin-top:1px;word-wrap:break-word;font-weight:bold">Response Headers</li><ol class="" style="margin:0px;min-width:100%;list-style-type:none;padding:2px 6px!important">
<li title="" style="padding:0px 0px 0px 14px;margin-top:1px;word-wrap:break-word;white-space:nowrap"><div class="" style="color:rgb(84,84,84);display:inline-block;margin-right:0.5em;font-weight:bold;vertical-align:top;white-space:pre-wrap">
Connection:</div><div class="" style="font-family:'dejavu sans mono',monospace;white-space:pre-wrap;display:inline;margin-right:100px;word-break:break-all;margin-top:1px;font-size:11px!important">Upgrade</div></li>
<li title="" style="padding:0px 0px 0px 14px;margin-top:1px;word-wrap:break-word;white-space:nowrap"><div class="" style="color:rgb(84,84,84);display:inline-block;margin-right:0.5em;font-weight:bold;vertical-align:top;white-space:pre-wrap">
Sec-Websocket-Accept:</div><div class="" style="font-family:'dejavu sans mono',monospace;white-space:pre-wrap;display:inline;margin-right:100px;word-break:break-all;margin-top:1px;font-size:11px!important">dWoZ+rfisaRB50AzubuYJhd9FBk=</div>
</li><li title="" style="padding:0px 0px 0px 14px;margin-top:1px;word-wrap:break-word;white-space:nowrap"><div class="" style="color:rgb(84,84,84);display:inline-block;margin-right:0.5em;font-weight:bold;vertical-align:top;white-space:pre-wrap">
Upgrade:</div><div class="" style="font-family:'dejavu sans mono',monospace;white-space:pre-wrap;display:inline;margin-right:100px;word-break:break-all;margin-top:1px;font-size:11px!important">websocket</div></li>
<li title="" style="padding:0px 0px 0px 14px;margin-top:1px;word-wrap:break-word;white-space:nowrap"><div class="" style="color:rgb(84,84,84);display:inline-block;margin-right:0.5em;font-weight:bold;vertical-align:top;white-space:pre-wrap">
Via:</div><div class="" style="font-family:'dejavu sans mono',monospace;white-space:pre-wrap;display:inline;margin-right:100px;word-break:break-all;margin-top:1px;font-size:11px!important">1.1 vegur</div></li></ol>
</ol><div> </div><div>-</div><div>sthustfo</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Aug 5, 2014 at 5:08 PM, Andy Green <span dir="ltr"><<a href="mailto:andy@warmcat.com" target="_blank">andy@warmcat.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class=""><br>
<br>
On 5 August 2014 19:25:11 GMT+08:00, sthustfo <<a href="mailto:sthustfo@gmail.com">sthustfo@gmail.com</a>> wrote:<br>
>Hi Andy,<br>
><br>
>Is there a way to supress the protocols altogether? I tried to set the<br>
</div>>"*info.protocols<br>
>= NULL"* and forced use_ssl=0 when creating the context using<br>
<div class="">>libwebsocket_create_context() but the program encounters a SIGSEGV<br>
>during<br>
> lws_context_init_client_ssl().<br>
><br>
>Is there a way to just not send any protocols (they are optional?) and<br>
>use<br>
>pure ws://?<br>
<br>
</div>No, although you can negotiate with no protocol in the upgrade, in lws the logical protocols contain the binding to the user callback, and the first protocol is targeted for HTTP callbacks.<br>
<br>
So logical callbacks themselves are not optional in lws and you have to give at least one when creating the context.<br>
<br>
However for client, you can give NULL as the protcol you're asking for in libwebsocket_create_client() and he will upgrade with no protocol header.<br>
<br>
Similarly in server, you may create a protocol struct whose name is NULL, he will match for no protocol header in the client upgrade.<br>
<br>
So you can do what you want later, but in all cases must give at least one protocol struct to the context so you can get any callbacks.<br>
<span class="HOEnZb"><font color="#888888"><br>
-Andy<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
><br>
>Thanks.<br>
>sthustfo<br>
><br>
><br>
><br>
>On Tue, Aug 5, 2014 at 4:11 PM, Andy Green <<a href="mailto:andy@warmcat.com">andy@warmcat.com</a>> wrote:<br>
><br>
>><br>
>><br>
>> On 5 August 2014 18:07:09 GMT+08:00, sthustfo <<a href="mailto:sthustfo@gmail.com">sthustfo@gmail.com</a>><br>
>wrote:<br>
>> >Hey Andy,<br>
>> ><br>
>> >Thanks for the quick response. I am not aware of the compliance<br>
>status<br>
>> >of<br>
>> ><a href="http://socket.io" target="_blank">socket.io</a> but am trying to find out the same. Meanwhile, here is the<br>
>> >client<br>
>> >log with debug level 1023.<br>
>><br>
>> It seems to send us junk (|)<br>
>><br>
>> [411975:0442] CLIENT: nonblocking connect retry<br>
>> [411975:0442] CLIENT: libwebsocket_client_connect_2<br>
>> [411975:0442] CLIENT: libwebsocket_client_connect_2: address<br>
>127.0.0.1<br>
>> [411975:0442] CLIENT: connected<br>
>> [411975:0473] PARSER: WSI_TOKEN_NAME_PART '|'<br>
>> [411975:0473] INFO: Unknown method - dropping<br>
>> [411975:0474] WARN: problems parsing header<br>
>> [411975:0474] INFO: closing connection at LWS_CONNMODE...SERVER_REPLY<br>
>><br>
>> If you didn't tell your server to support the protocols the test<br>
>clients<br>
>> uses, you wouldn't get any success anyway.  But it should just close<br>
>the<br>
>> connection not send junk.<br>
>><br>
>> If you want to look further into it send the packet traces but I<br>
>guess it<br>
>> only supports some older RFC version of websockets.  Which is<br>
>probably a<br>
>> sign it's long unmaintained.<br>
>><br>
>> -Andy<br>
>><br>
>> >-<br>
>> >sthustfo<br>
>> ><br>
>> >On Tue, Aug 5, 2014 at 3:29 PM, Andy Green <<a href="mailto:andy@warmcat.com">andy@warmcat.com</a>> wrote:<br>
>> ><br>
>> >><br>
>> >><br>
>> >> ><br>
>> >> >test@devpc:~/libwebsockets/build/bin$ ./libwebsockets-test-client<br>
>> >> >127.0.0.1<br>
>> >> >--port=8888<br>
>> >><br>
>> >> Turn up the logging with -d 1023 or so<br>
>> >><br>
>> >> >libwebsockets test client<br>
>> >> >(C) Copyright 2010-2013 Andy Green <<a href="mailto:andy@warmcat.com">andy@warmcat.com</a>> licensed<br>
>under<br>
>> >> >LGPL2.1<br>
>> >> >[1457:9886] NOTICE: Initial logging level 7<br>
>> >> >[1457:9886] NOTICE: Library version: 1.3 67f9459<br>
>> >> >[1457:9887] NOTICE: IPV6 compiled in and enabled<br>
>> >> >[1457:9887] NOTICE: libev support not compiled in<br>
>> >> >[1457:9889] NOTICE:  static allocation: 4472 + (12 x 1024 fds) =<br>
>> >16760<br>
>> >> >bytes<br>
>> >> >[1457:9890] NOTICE:  canonical_hostname = pk-laptop<br>
>> >> >[1457:9890] NOTICE:  per-conn mem: 128 + 1594 headers + protocol<br>
>rx<br>
>> >buf<br>
>> >> >Waiting for connect...<br>
>> >> >[1457:9932] WARN: problems parsing header<br>
>> >> >Exiting<br>
>> >> >[1457:9933] NOTICE: libwebsocket_context_destroy<br>
>> >> ><br>
>> >> >And on the node server, I see the following log<br>
>> >> ><br>
>> >> >test@devpc:~/node$ DEBUG=* node basic.js<br>
>> >> >   info  - <a href="http://socket.io" target="_blank">socket.io</a> started<br>
>> >> >   debug - destroying <a href="http://non-socket.io" target="_blank">non-socket.io</a> upgrade<br>
>> >> >   debug - destroying <a href="http://non-socket.io" target="_blank">non-socket.io</a> upgrade<br>
>> >><br>
>> >> Is <a href="http://socket.io" target="_blank">socket.io</a> compliant with the actual websockets standard or some<br>
>> >older<br>
>> >> RFC?<br>
>> >><br>
>> >> It seems it can't parse our upgrade request (which does pretty<br>
>good<br>
>> >at<br>
>> >> being compliant with everything else).<br>
>> >><br>
>> >> -Andy<br>
>> >><br>
>> >><br>
>><br>
>><br>
<br>
</div></div></blockquote></div><br></div>