<div dir="ltr"><div class="gmail_default" style="font-size:x-small">Hi Andy,</div><div class="gmail_default" style="font-size:x-small"><br></div><div class="gmail_default" style="font-size:x-small">I have not made progress on finding where the problem is.</div><div class="gmail_default" style="font-size:x-small"><br></div><div class="gmail_default" style="font-size:x-small">One thing I was doing and seemed strange was in the SSL certs side:</div><div class="gmail_default" style="font-size:x-small"><br></div><div class="gmail_default" style=""><div class="gmail_default" style="font-size:x-small">if (http_ssl_)</div><div class="gmail_default" style="font-size:x-small">    {</div><div class="gmail_default" style="font-size:x-small">        if (!chain_file_.empty())</div><div class="gmail_default" style="font-size:x-small">        {</div><div class="gmail_default" style="font-size:x-small">            // cert file is not needed as it's included in the chain with all intermediate cert.</div><div class="gmail_default" style="font-size:x-small">            //info.ssl_cert_filepath = cert_file_.c_str();</div><div class="gmail_default" style="font-size:x-small">            info.ssl_private_key_filepath = key_file_.c_str();</div><div class="gmail_default" style="font-size:x-small">            info.ssl_cert_filepath = chain_file_.c_str();</div><div class="gmail_default" style="font-size:x-small">        }</div><div class="gmail_default" style="font-size:x-small">        else</div><div class="gmail_default" style="font-size:x-small">        {</div><div class="gmail_default" style="font-size:x-small">            // Simple key/cert WSS</div><div class="gmail_default" style="font-size:x-small">            info.ssl_cert_filepath = cert_file_.c_str();</div><div class="gmail_default" style="font-size:x-small">            info.ssl_private_key_filepath = key_file_.c_str();</div><div class="gmail_default" style="font-size:x-small">        }</div><div class="gmail_default" style="font-size:x-small">    }</div><div class="gmail_default" style="font-size:x-small">    else</div><div class="gmail_default" style="font-size:x-small">    {</div><div class="gmail_default" style="font-size:x-small">        info.ssl_cert_filepath = NULL;</div><div class="gmail_default" style="font-size:x-small">        info.ssl_private_key_filepath = NULL;</div><div class="gmail_default" style="font-size:x-small">    }</div><div class="gmail_default" style="font-size:x-small"><br></div><div class="gmail_default" style=""><div class="gmail_default" style=""><font size="1">    info.gid = -1;</font></div><div class="gmail_default" style=""><font size="1">    info.uid = -1;</font></div><div class="gmail_default" style=""><font size="1">    info.options = 0;</font></div><div class="gmail_default" style=""><font size="1">    info.ka_time = 10; // keep alive every 10</font></div><div class="gmail_default" style=""><font size="1">    info.ka_probes = 1; // how many times to try to get response before giving up</font></div><div class="gmail_default" style=""><font size="1">    info.ka_interval = 2; // how long to wait before each ka_probes</font></div><div class="gmail_default" style=""><font size="1">    info.user = this; // to get ourself inthe static callback via the context.</font></div><div class="gmail_default" style=""><font size="1"><br></font></div><div class="gmail_default" style=""><font size="1">    context_ = libwebsocket_create_context(&info);</font></div><div class="gmail_default" style=""><font size="1"><br></font></div><div class="gmail_default" style=""><font size="1"><br></font></div><div class="gmail_default" style=""><font size="1">and this was the only way I made the lib work with 3 ssl files (key, cert and chain).</font></div><div class="gmail_default" style=""><font size="1"><br></font></div><div class="gmail_default" style=""><font size="1">I tried the "correct" way with </font></div><div class="gmail_default" style=""><font size="1"><br></font></div><div class="gmail_default" style=""><font size="1"><div class="gmail_default">info.ssl_cert_filepath        = cert_file_.c_str();</div><div class="gmail_default">info.ssl_private_key_filepath = key_file_.c_str();</div><div class="gmail_default">info.ssl_ca_filepath          = chain_file_.c_str();</div><div class="gmail_default"><br></div><div class="gmail_default">With no luck.</div><div class="gmail_default"><br></div><div class="gmail_default">Any clues?</div><div class="gmail_default"><br></div><div class="gmail_default">I think if we find the problem in 1.7, 2.0 will work as well.</div><div class="gmail_default"><br></div><div class="gmail_default">Thank you in advance,</div><div class="gmail_default">Brice.</div></font></div></div><div class="gmail_default" style="font-size:x-small"><br></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jul 4, 2016 at 5:29 PM, Brice Hamon <span dir="ltr"><<a href="mailto:normandviking@gmail.com" target="_blank">normandviking@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_default" style="font-size:x-small">Ok 1.7.0 breaks the server. All version before are OK.</div><div class="gmail_default" style="font-size:x-small"><br></div><div class="gmail_default" style="font-size:x-small">The only change I can see impacting my code was the warning:</div><div class="gmail_default" style="font-size:x-small"><br></div><div class="gmail_default"><font size="1">bswebsocket.cpp:155:23: warning: `const lws_extension* lws_get_internal_extensions()' is deprecated (declared at /export/home/development/3rdparty/include/libwebsockets.h:1877) [-Wdeprecated-declarations]</font><br></div><div class="gmail_default"><font size="1"><br></font></div><div class="gmail_default"><font size="1">So I am investigating in that side.</font></div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jul 4, 2016 at 4:25 PM, Brice Hamon <span dir="ltr"><<a href="mailto:normandviking@gmail.com" target="_blank">normandviking@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_default" style="font-size:x-small">Hi Andy,</div><div class="gmail_default" style="font-size:x-small"><br></div><div class="gmail_default" style="font-size:x-small">I am working backwards in version. So far 2.0.2 to 1.7.2 does not work. 1.5.1 does work. I will eventually where it breaks.</div><div class="gmail_default" style="font-size:x-small"><br></div><div class="gmail_default" style="font-size:x-small">I'll keep you posted.</div></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jun 30, 2016 at 1:13 PM, Brice Hamon <span dir="ltr"><<a href="mailto:normandviking@gmail.com" target="_blank">normandviking@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_default" style="font-size:x-small">Thanks Andy,</div><div class="gmail_default" style="font-size:x-small"><br></div><div class="gmail_default" style="font-size:x-small">I do not think it is a networking or environment issue as the same code running on the same host with 1.4 works and not 2.0.</div><div class="gmail_default" style="font-size:x-small"><br></div><div class="gmail_default" style="font-size:x-small">I just wanted to make sure I did not forgot an new call to init SSL or something like that not present in 1.4.<br></div><div class="gmail_default" style="font-size:x-small"><br></div><div class="gmail_default" style="font-size:x-small">I'll dig into it and report back.</div><div class="gmail_default" style="font-size:x-small"><br></div><div class="gmail_default" style="font-size:x-small">Thanks again</div><span><font color="#888888"><div class="gmail_default" style="font-size:x-small">Brice.</div></font></span></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jun 29, 2016 at 1:56 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><br>
<br>
On June 29, 2016 11:52:31 PM GMT+08:00, Brice Hamon <<a href="mailto:normandviking@gmail.com" target="_blank">normandviking@gmail.com</a>> wrote:<br>
>Hi Andy,<br>
><br>
>I just upgraded my server from 1.4 to 2.0.<br>
><br>
>Not really a big task, just lws_ and a couple of adjustments,<br>
><br>
>But now my server does not work anymore.  I use an external polling<br>
>mechanism, and I see the first FD_ADD so the epoll is working.<br>
<br>
</span>That doesn't follow actually, it means only that lws' code to expose poll fds changes to the callback is working; it's caused by creating the listen socket during init, not by servicing (e)poll events.  The log doesn't show any evidence of servicing (e)poll events.<br>
<span><br>
>But when I try to connect with a browser or client program I get a CONN<br>
>REFUSED and I don't see anything happening on the server side. I just<br>
>see<br>
>it listening on the correct port.<br>
<br>
</span>Connection refused is really specific, it means for the peer there was nobody listening at the port.  That can mean the listen socket bound to a different interface than your client reached (check it with netstat -pltn at the server, 0.0.0.0 means all interfaces) or a firewall got in the way, or you reached the wrong ip (name resolution issue at client).<br>
<div><div><br>
>I compiled the lib plain vanilla with no options.<br>
><br>
>Here is what I get as startup from your lib:<br>
><br>
><br>
>16-06-29 11:38:24.694159 DEBUG: [WEBSOCKET ]: libwebsocket: Initial<br>
>logging<br>
>level 15<br>
>16-06-29 11:38:24.694176 DEBUG: [WEBSOCKET ]: libwebsocket:<br>
>Libwebsockets<br>
>version: 2.0.0 xxxx@xxxx-v2.0.0-95-ge943a02<br>
>16-06-29 11:38:24.694181 DEBUG: [WEBSOCKET ]: libwebsocket: IPV6 not<br>
>compiled in<br>
>16-06-29 11:38:24.694193 DEBUG: [WEBSOCKET ]: libwebsocket: libev<br>
>support<br>
>not compiled in<br>
>16-06-29 11:38:24.694198 DEBUG: [WEBSOCKET ]: libwebsocket: libuv<br>
>support<br>
>not compiled in<br>
>16-06-29 11:38:24.694356 DEBUG: [WEBSOCKET ]: libwebsocket:  Threads: 1<br>
>each 1024 fds<br>
>16-06-29 11:38:24.694453 DEBUG: [WEBSOCKET ]: libwebsocket:  mem:<br>
>platform<br>
>fd map:  8192 bytes<br>
>16-06-29 11:38:24.694526 DEBUG: [WEBSOCKET ]: libwebsocket:  Compiled<br>
>with<br>
>OpenSSL support<br>
>16-06-29 11:38:24.695057 DEBUG: [WEBSOCKET ]: libwebsocket: Creating<br>
>Vhost<br>
>'default' port 7682, 2 protocols, IPv6 off<br>
>16-06-29 11:38:24.695102 DEBUG: [WEBSOCKET ]: libwebsocket:  Using SSL<br>
>mode<br>
>16-06-29 11:38:24.698961 DEBUG: [WEBSOCKET ]: libwebsocket:  SSL ECDH<br>
>curve<br>
>'prime256v1'<br>
>16-06-29 11:38:24.699011 INFO : [WEBSOCKET ]: callback_http<br>
>LWS_CALLBACK_OPENSSL_LOAD_EXTRA_SERVER_VERIFY_CERTS fd=0<br>
>context=0x7efff0002800 user=[`uZ&] len=0<br>
>16-06-29 11:38:24.699021 ERROR: [WEBSOCKET ]: callback_http: case<br>
>LWS_CALLBACK_OPENSSL_LOAD_EXTRA_SERVER_VERIFY_CERTS not handled.<br>
>16-06-29 11:38:24.700680 INFO : [WEBSOCKET ]: callback_http<br>
>LWS_CALLBACK_LOCK_POLL fd=85 context=0x7efff0002800 user=[NULL] len=1<br>
>16-06-29 11:38:24.700719 INFO : [WEBSOCKET ]: callback_http<br>
>LWS_CALLBACK_ADD_POLL_FD fd=85 context=0x7efff0002800 user=[NULL] len=0<br>
>16-06-29 11:38:24.700758 INFO : [WEBSOCKET ]: callback_http<br>
>LWS_CALLBACK_UNLOCK_POLL fd=85 context=0x7efff0002800 user=[NULL] len=1<br>
>16-06-29 11:38:24.700811 DEBUG: [WEBSOCKET ]: libwebsocket:  Listening<br>
>on<br>
>port 7682<br>
>16-06-29 11:38:24.700834 DEBUG: [WEBSOCKET ]: libwebsocket:  mem:<br>
>per-conn:<br>
>         496 bytes + protocol rx buf<br>
>16-06-29 11:38:24.700919 DEBUG: [WEBSOCKET ]: libwebsocket:<br>
> canonical_hostname = xxxx<br>
><br>
>Then a<br>
><br>
>16-06-29 11:38:25.972014 DEBUG: [WEBSOCKET ]: libwebsocket:<br>
>lws_protocol_init<br>
>16-06-29 11:38:25.972043 INFO : [WEBSOCKET ]: callback_http<br>
>LWS_CALLBACK_PROTOCOL_INIT fd=0 context=0x7efff0002800 user=[NULL]<br>
>len=0<br>
>16-06-29 11:38:25.972049 INFO : [WEBSOCKET ]: callback_http:<br>
>LWS_CALLBACK_PROTOCOL_INIT<br>
><br>
>And nothing else after that.<br>
<br>
</div></div>Connection Refused is a tcp level thing, it means you did not succeed to touch the listen socket.  So there would be no sign of activity from lws about that.<br>
<span><br>
>I guess  my straight port from 1.4 to 2.0 was just been optimistic. I<br>
>am<br>
>forgetting something essential in order to have 2.0 working like in<br>
>1.4.<br>
<br>
</span>I think either lws bound to the wrong network interface for listen, or the issue is outside lws.<br>
<span><br>
>Also the only question I had during the port is that I used the<br>
>context->user pointer to store my own websocket object. I now need to<br>
>to a<br>
>// Getting the context from the wsi<br>
>struct lws_context *wsicont = lws_get_context(wsi);<br>
><br>
>// Getting the user cd from the context<br>
>BSWebSocket *websocket = (BSWebSocket *)lws_context_user(wsicont);<br>
><br>
>Is there a better way to do that? I already use the user pointer of the<br>
>callback to get my per_session_data structure.<br>
<br>
</span>No it looks good.  Both of those apis are really cheap, just resolve to a struct member dereference each.<br>
<span><font color="#888888"><br>
-Andy<br>
</font></span><div><div><br>
>Thank you,<br>
><br>
>Brice.<br>
><br>
><br>
>On Thu, Jun 2, 2016 at 8:48 PM, Brice Hamon <<a href="mailto:normandviking@gmail.com" target="_blank">normandviking@gmail.com</a>><br>
>wrote:<br>
><br>
>> Thank you Andy,<br>
>><br>
>> I will get going and report my findings.<br>
>><br>
>> Thanks again.<br>
>> Brice.<br>
>><br>
>><br>
>> On Thu, Jun 2, 2016 at 6:20 PM, Andy Green <<a href="mailto:andy@warmcat.com" target="_blank">andy@warmcat.com</a>> wrote:<br>
>><br>
>>><br>
>>><br>
>>> On June 3, 2016 1:08:32 AM GMT+08:00, Brice Hamon <<br>
>>> <a href="mailto:normandviking@gmail.com" target="_blank">normandviking@gmail.com</a>> wrote:<br>
>>> >Hi all,<br>
>>> ><br>
>>> >I have been using libwebsocket 1.4 with external epoll notification<br>
>>> >loop<br>
>>> >without a single problem for over a year now.<br>
>>><br>
>>> Great.<br>
>>><br>
>>> >All the libwebsocket functions are happening in one thread so I<br>
>have<br>
>>> >followed all guidelines in the README.coding<br>
>>> >from that version.<br>
>>> ><br>
>>> >I think it is now time for me to upgrade as, following this group,<br>
>many<br>
>>> >fix<br>
>>> >and enhancement took place.<br>
>>> ><br>
>>> >Is there specific areas of change I should be concerned with, or<br>
>>> >important<br>
>>> >changes in the notification area?<br>
>>><br>
>>> Yes at 1.6 many api names got simplified and rationalized.  Mainly<br>
>the<br>
>>> api prefix got standardized to 'lws_'.  There are 4 steps listed in<br>
>the<br>
>>> changelog<br>
>>><br>
>>><br>
><a href="https://github.com/warmcat/libwebsockets/blob/v2.0-stable/changelog#L643" rel="noreferrer" target="_blank">https://github.com/warmcat/libwebsockets/blob/v2.0-stable/changelog#L643</a><br>
>>><br>
>>> to search / replace everything in your code into shape.<br>
>>><br>
>>> There are many other changes and improvements, such as multiple<br>
>vhost<br>
>>> support, CGI support, protocol plugins, lwsws etc.  It's hard to<br>
>predict<br>
>>> which are interesting, if you have external epoll() just to get<br>
>epoll, the<br>
>>> new built-in libuv support might be interesting... if so then lwsws<br>
>and<br>
>>> plugins might also simplify your life.<br>
>>><br>
>>> If you need external event loop to interface to something else, then<br>
>that<br>
>>> should still work the same.<br>
>>><br>
>>> >Thanks all and especially Andy, your lib rocks :)<br>
>>><br>
>>> Thanks for the kind words ^^<br>
>>><br>
>>> -Andy<br>
>>><br>
>>> >Brice.<br>
>>> ><br>
>>> ><br>
>>><br>
>>------------------------------------------------------------------------<br>
>>> ><br>
>>> >_______________________________________________<br>
>>> >Libwebsockets mailing list<br>
>>> ><a href="mailto:Libwebsockets@ml.libwebsockets.org" target="_blank">Libwebsockets@ml.libwebsockets.org</a><br>
>>> ><a href="http://libwebsockets.org/mailman/listinfo/libwebsockets" rel="noreferrer" target="_blank">http://libwebsockets.org/mailman/listinfo/libwebsockets</a><br>
>>><br>
>>><br>
>><br>
<br>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>