<div dir="ltr"><div>Using - <a href="http://www.websocket.org/echo.html">http://www.websocket.org/echo.html</a> to test:<br></div><div><br></div><div>In wireshark I see:</div><div> 16<span class="gmail-Apple-tab-span" style="white-space:pre">      </span>0.690778<span class="gmail-Apple-tab-span" style="white-space:pre">      </span>127.0.0.1<span class="gmail-Apple-tab-span" style="white-space:pre">     </span>127.0.0.1<span class="gmail-Apple-tab-span" style="white-space:pre">     </span>HTTP<span class="gmail-Apple-tab-span" style="white-space:pre">  </span>1128<span class="gmail-Apple-tab-span" style="white-space:pre">  </span>GET /activation?encoding=text HTTP/1.1 </div><div> 18<span class="gmail-Apple-tab-span" style="white-space:pre">   </span>0.691789<span class="gmail-Apple-tab-span" style="white-space:pre">      </span>127.0.0.1<span class="gmail-Apple-tab-span" style="white-space:pre">     </span>127.0.0.1<span class="gmail-Apple-tab-span" style="white-space:pre">     </span>HTTP<span class="gmail-Apple-tab-span" style="white-space:pre">  </span>434<span class="gmail-Apple-tab-span" style="white-space:pre">   </span>HTTP/1.1 101 Switching Protocols <br></div><div>packets from client to server<br></div><div><no response from my protocol plugin></div><div>close from client</div><div>close response from server</div><div><br></div><div>In the log I see:</div><div><div><div>[2017/02/09 15:04:57:8757] NOTICE: Creating Vhost '127.0.0.1' port 7681, 3 protocols, IPv6 off</div><div>[2017/02/09 15:04:57:8767] NOTICE:    mounting callback://activation-protocol to /activation</div><div>...</div><div>[2017/02/09 15:04:57:8777] NOTICE:  Using non-SSL mode<br></div><div>[2017/02/09 15:04:57:8817] NOTICE:     vh 127.0.0.1 prot cmd-protocol opt status</div><div>[2017/02/09 15:04:57:8817] NOTICE:     vh 127.0.0.1 prot activation-protocol opt status<br></div><div>[2017/02/09 15:04:57:8827] NOTICE: activate: LWS_CALLBACK_PROTOCOL_INIT</div><div>[2017/02/09 15:05:15:6913] NOTICE: Accepted wsi 002C3FC8 to context 0020A890, tsi 0</div><div>[2017/02/09 15:06:02:7518] NOTICE: Accepted wsi 022C5100 to context 0020A890, tsi 0</div></div></div><div><br></div><div>But when I send data from the <a href="http://websocket.org">websocket.org</a> site, I never see the callback happen.  Not even LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED.</div><div><br></div><div>It would seem the server is consuming the WS data packet, and not making the callback.  What am I missing?</div><div><br></div><div>In addition - when I select an unknown WS "mount", such as "ws://localhost:7681/install", I get the identical behavior.</div><div><br></div><div>Switching the vhosts name to "127.0.0.1", has no impact.</div><div><br></div><div>When I use the test-client to test, I do see LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED as expected, but it ends with "CLIENT_CONNECTION_ERROR: dumb: (null)", after which I see the WebSocket Close packet on the wire.  I instrumented what you checked in yesterday.</div><div><br></div><div><div>[2017/02/09 16:03:26:0400] NOTICE: dumb: connecting<br></div><div>[2017/02/09 16:03:26:0410] ERR: getaddrinfo localhost -> 127.0.0.1</div><div>[2017/02/09 16:03:26:0544] ERR: getaddrinfo localhost -> 127.0.0.1</div><div>[2017/02/09 16:03:26:0544] NOTICE: dumb: LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED [permessage-deflate]</div><div>[2017/02/09 16:03:26:0544] NOTICE: dumb: LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED [deflate-frame]</div><div>[2017/02/09 16:03:26:0554] NOTICE: dumb: LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER</div><div>[2017/02/09 16:03:26:0554] NOTICE: dumb: LWS_CALLBACK_CLIENT_CONNECTION_ERROR</div><div>[2017/02/09 16:03:26:0564] ERR: CLIENT_CONNECTION_ERROR: dumb: (null)</div></div><div><br></div><div>My current config:</div><div>{<br></div><div><div> "vhosts": [{</div><div>     "name": "localhost",</div><div>     "port": "7681",</div><div>     "mounts": [{<br></div><div>       "mountpoint": "/activation",</div><div>       "origin": "callback://activation-protocol"</div><div><span class="gmail-Apple-tab-span" style="white-space:pre"> </span> },{</div><div>         "mountpoint": "/",</div><div>         "origin": "file://c:/etc/lwsws/www/",</div><div>         "default": "index.html",</div><div>         "cache-max-age": "60",</div><div>         "cache-reuse": "1",</div><div>         "cache-revalidate": "1",</div><div>         "cache-intermediaries": "0",</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">        </span>     "extra-mimetypes": {</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">  </span>         ".hbs": "text/x-handlebars-template",</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">         </span> ".json": "text/json",</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">     </span>     }<br></div><div><span class="gmail-Apple-tab-span" style="white-space:pre">     </span> },{</div><div>       "mountpoint": "/sys",</div><div>       "origin": "callback://cmd-protocol",</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>   "pmo":[{"api":"2"}]</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">  </span> },{</div><div>       "mountpoint": "/ui/fileCount",</div><div>       "origin": "callback://cmd-protocol",</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">     </span>   "pmo":[{"api":"3"}]</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">  </span> },{</div><div>       "mountpoint": "/prop",</div><div>       "origin": "callback://cmd-protocol",</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">     </span>   "pmo":[{"api":"1"}]</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">  </span> }],</div><div>     "ws-protocols": [{</div><div>         "activation-protocol": {</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                 </span>"status": "ok"</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">             </span>},</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">             </span>"cmd-protocol": {</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                    </span>"status": "ok"</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">             </span>}</div><div>     }]</div><div>    }</div><div>  ]</div><div>}<br></div></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Feb 5, 2017 at 1:14 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"><span class=""><br>
<br>
On February 6, 2017 2:56:03 AM GMT+08:00, Joel Winarske <<a href="mailto:joel.winarske@gmail.com">joel.winarske@gmail.com</a>> wrote:<br>
>It seems it only looks at the first defined vhost.  If I move the<br>
>primary<br>
>site vhost to the bottom of the config, it no longer loads the site,<br>
>and I<br>
>see LWS_CALLBACK_HTTP.<br>
<br>
</span>Determining which vhost to serve happens one of two ways...<br>
<br>
 - if ssl is in use, the SNI feature is used to match what it sends against the vhost name.  This allows use of the correct cert for the vhost before the ssl tunnel is established.<br>
<br>
 - if no ssl, the Host: header contents are matched against the vhost names.<br>
<br>
So turn up the logging and see what you're sending from your client for Host:.<br>
<br>
For backwards compatibility if lws only has one default vhost all protocols are enabled on it.  With multiple vhosts they must be enabled individually on the vhost you want to have access to them.<br>
<br>
-Andy<br>
<div><div class="h5"><br>
>On Sun, Feb 5, 2017 at 9:50 AM, Joel Winarske <<a href="mailto:joel.winarske@gmail.com">joel.winarske@gmail.com</a>><br>
>wrote:<br>
><br>
>> Here is my config.  I see protocol init happen for each, but I'm not<br>
>> seeing LWS_CALLBACK_HTTP.  If I revert to single vhost, many mounts -<br>
>init,<br>
>> and LWS_CALLBACK_HTTP happen.  Albeit I can't differentiate what is<br>
>what.<br>
>><br>
>> {<br>
>>  "vhosts": [{<br>
>>      "name": "localhost",<br>
>>      "port": "7681",<br>
>>      "mounts": [{<br>
>>          "mountpoint": "/ui",<br>
>>          "origin": "file://c:/etc/lwsws/www",<br>
>>          "default": "index.html",<br>
>>          "cache-max-age": "60",<br>
>>          "cache-reuse": "1",<br>
>>          "cache-revalidate": "1",<br>
>>          "cache-intermediaries": "0",<br>
>>      "extra-mimetypes": {<br>
>>          ".hbs": "text/x-handlebars-template",<br>
>>  ".json": "text/json"<br>
>>      }<br>
>>  }]<br>
>>  }, {<br>
>>      "name": "fileCount",<br>
>>      "port": "7681",<br>
>>      "mounts": [{<br>
>>        "mountpoint": "/ui/fileCount",<br>
>>        "origin": "callback://cmd-protocol"<br>
>>  }],<br>
>>        "ws-protocols": [{<br>
>>      "cmd-protocol": {<br>
>>       "api" : "3",<br>
>>        "status": "ok"<br>
>>      }<br>
>>        }]<br>
>>      }, {<br>
>>      "name": "prop",<br>
>>      "port": "7681",<br>
>>      "mounts": [{<br>
>>        "mountpoint": "/prop",<br>
>>        "origin": "callback://cmd-protocol"<br>
>>  }],<br>
>>        "ws-protocols": [{<br>
>>      "cmd-protocol": {<br>
>>       "api" : "1",<br>
>>        "status": "ok"<br>
>>      }<br>
>>        }]<br>
>>      }, {<br>
>>      "name": "sys",<br>
>>      "port": "7681",<br>
>>      "mounts": [{<br>
>>        "mountpoint": "/sys",<br>
>>        "origin": "callback://cmd-protocol"<br>
>>  }],<br>
>>        "ws-protocols": [{<br>
>>      "cmd-protocol": {<br>
>>       "api" : "2",<br>
>>        "status": "ok"<br>
>>      }<br>
>>        }]<br>
>>      }, {<br>
>>     "name": "rest",<br>
>>      "port": "7681",<br>
>>      "mounts": [{<br>
>>        "mountpoint": "/rest",<br>
>>        "origin": "callback://cmd-protocol"<br>
>>  }],<br>
>>        "ws-protocols": [{<br>
>>      "cmd-protocol": {<br>
>>       "api" : "4",<br>
>>        "status": "ok"<br>
>>      }<br>
>>        }]<br>
>>      }<br>
>>   ]<br>
>> }<br>
>><br>
>> Something else odd I am seeing, I have no valid WS protocols defined,<br>
>yet<br>
>> the server accepts all client WS requests and indicates it's switched<br>
>> protocols.  Am I missing something here?<br>
>><br>
>><br>
</div></div>>>    1. Request URL:<br>
>>    ws://localhost:7681/activation<br>
>>    2. Request Method:<br>
>>    GET<br>
>>    3. Status Code:<br>
<div class="HOEnZb"><div class="h5">>>    101 Switching Protocols<br>
>><br>
>><br>
>> On Wed, Feb 1, 2017 at 10:30 PM, Andy Green <<a href="mailto:andy@warmcat.com">andy@warmcat.com</a>> wrote:<br>
>><br>
>>><br>
>>><br>
>>> On 02/02/2017 02:17 PM, Joel Winarske wrote:<br>
>>><br>
>>>> Say I want to implement a single plugin for multiple mount points.<br>
>In<br>
>>>> the protocol callback, how do I get the mount point string value?<br>
>Do I<br>
>>>> have to examine the header, or is it already available somewhere?<br>
>>>><br>
>>><br>
>>> The right way to look at it is you created a plugin with a single<br>
>>> protocol.<br>
>>><br>
>>> It happened that multiple mountpoints, usually on a different vhost<br>
>each<br>
>>> time, wanted to mount an instance of that protocol somewhere in<br>
>their URL<br>
>>> space.<br>
>>><br>
>>> As far as that goes, in itself the protocol callback is not aware of<br>
>the<br>
>>> mountpoint, and the mounts are all treated the same, although you<br>
>can use<br>
>>> per-vhost structs in the callback to mean that mounted protocol<br>
>instances<br>
>>> on each vhost can do things separately.<br>
>>><br>
>>> To make things more useful, you can pass in "pvo", per-vhost options<br>
>when<br>
>>> you enable the protocol for each vhost individually.  For example<br>
>the<br>
>>> server-status URL I sent before has its protocol enabled like this<br>
>>><br>
>>>        "lws-server-status": {<br>
>>>          "status": "ok",<br>
>>>          "update-ms": "5000",<br>
>>>          "filepath": "/sys/class/thermal/thermal_<wbr>zone0/temp",<br>
>>>          "filepath": "/proc/version",<br>
>>>          "hide-vhosts": "1"<br>
>>>         },<br>
>>><br>
>>> So you could just as easily enable the protocol on another vhost,<br>
>but<br>
>>> with different settings.<br>
>>><br>
>>> There are also "pmo", per-mount options the plugin can access.  But<br>
>pvo<br>
>>> are probably want you want if each mount is on a different vhost.<br>
>>><br>
>>> You can see how the server status plugin gets ahold of the pvo at<br>
>init<br>
>>><br>
>>> <a href="https://github.com/warmcat/libwebsockets/blob/master/plugins" rel="noreferrer" target="_blank">https://github.com/warmcat/<wbr>libwebsockets/blob/master/<wbr>plugins</a><br>
>>> /protocol_lws_server_status.c<br>
>>><br>
>>> since he stashes them in his per-vhost struct, he can act completely<br>
>>> differently simultaneously depndning on the vhost you access him<br>
>from.<br>
>>><br>
>>> -Andy<br>
>>><br>
>>><br>
>>>> Thanks!<br>
>>>><br>
>>>><br>
>>>> ______________________________<wbr>_________________<br>
>>>> Libwebsockets mailing list<br>
>>>> <a href="mailto:Libwebsockets@ml.libwebsockets.org">Libwebsockets@ml.<wbr>libwebsockets.org</a><br>
>>>> <a href="https://libwebsockets.org/mailman/listinfo/libwebsockets" rel="noreferrer" target="_blank">https://libwebsockets.org/<wbr>mailman/listinfo/libwebsockets</a><br>
>>>><br>
>>><br>
>>><br>
>><br>
</div></div></blockquote></div><br></div>