1
0
Fork 0
mirror of https://github.com/warmcat/libwebsockets.git synced 2025-03-09 00:00:04 +01:00

ws ping pong on idle connections

This adds a new member to the context creation info struct "ws_ping_pong_interval".

If nonzero, it sets the number of seconds that established ws connections are
allowed to be idle before a PING is forced to be sent.  If zero (the default) then
tracking of idle connection is disabled for backwards compatibility.

Timeouts cover both the period between decision to send the ping and it being
sent (because it needs the socket to become writeable), and the period between
the ping being sent and the PONG coming back.

INFO debug logs are issues when the timeout stuff is operating.

You can test the server side by running the test server hacked to set ws_ping_pong_interval
and debug log mask of 15.  Both the mirror protocol and the server-status protocol are
idle if nothing is happening and will trigger the PING / PONG testing.  (You can also
test using lwsws and /etc/lwsws/conf with "ws-pingpong-secs": "20" in the global section)

For client, run the test client with -n -P 20 for 20s interval.  -n stops the test client
writing using the mirror protocol, so it will be idle and trigger the PING / PONGs.

The timeout interval may be up to +10s late, as lws checks for affected connections every
10s.
This commit is contained in:
Andy Green 2016-07-15 13:41:38 +08:00
parent 0fa6821214
commit f32d25051c
36 changed files with 391 additions and 197 deletions

View file

@ -42,6 +42,7 @@ There is a single file intended for global settings
"gid": "48", # apache user
"count-threads": "1",
"server-string": "myserver v1", # returned in http headers
"ws-pingpong-secs": "200", # confirm idle established ws connections this often
"init-ssl": "yes"
}
}

View file

@ -642,6 +642,9 @@ $(document).ready(function(){initNavTree('functions.html','');});
<li>write
: <a class="el" href="structlws__plat__file__ops.html#a1fae8330ee94649a3551e31a30809793">lws_plat_file_ops</a>
</li>
<li>ws_ping_pong_interval
: <a class="el" href="structlws__context__creation__info.html#a33a1a25a7df3793f59047e20dd580078">lws_context_creation_info</a>
</li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->

View file

@ -629,6 +629,9 @@ $(document).ready(function(){initNavTree('functions_vars.html','');});
<li>write
: <a class="el" href="structlws__plat__file__ops.html#a1fae8330ee94649a3551e31a30809793">lws_plat_file_ops</a>
</li>
<li>ws_ping_pong_interval
: <a class="el" href="structlws__context__creation__info.html#a33a1a25a7df3793f59047e20dd580078">lws_context_creation_info</a>
</li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->

View file

@ -112,7 +112,7 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p>enum lws_client_connect_ssl_connection_flags - flags that may be used with struct <a class="el" href="structlws__client__connect__info.html">lws_client_connect_info</a> ssl_connection member to control if and how SSL checks apply to the client connection being created </p>
<div class="fragment"><div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>&#160; {</div><div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>&#160; LCCSCF_USE_SSL = (1 &lt;&lt; 0),</div><div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>&#160; LCCSCF_ALLOW_SELFSIGNED = (1 &lt;&lt; 1),</div><div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>&#160; LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK = (1 &lt;&lt; 2)</div><div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>&#160;};</div></div><!-- fragment -->
<div class="fragment"><div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>&#160; {</div><div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>&#160; LCCSCF_USE_SSL = (1 &lt;&lt; 0),</div><div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>&#160; LCCSCF_ALLOW_SELFSIGNED = (1 &lt;&lt; 1),</div><div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>&#160; LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK = (1 &lt;&lt; 2)</div><div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>&#160;};</div></div><!-- fragment -->
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>

View file

@ -40,7 +40,8 @@ var group__context_and_vhost =
[ "token_limits", "structlws__context__creation__info.html#ac8a75b7b259a3c3a5fbb4219a3f06c29", null ],
[ "uid", "structlws__context__creation__info.html#ac105b4180008cb3e672d57beead8382e", null ],
[ "user", "structlws__context__creation__info.html#a0e9d94cdfb893d777b4a4db81e7b5ac0", null ],
[ "vhost_name", "structlws__context__creation__info.html#ad50db098a208f045f7811207d2bee4b9", null ]
[ "vhost_name", "structlws__context__creation__info.html#ad50db098a208f045f7811207d2bee4b9", null ],
[ "ws_ping_pong_interval", "structlws__context__creation__info.html#a33a1a25a7df3793f59047e20dd580078", null ]
] ],
[ "lws_protocol_vhost_options", "structlws__protocol__vhost__options.html", [
[ "name", "structlws__protocol__vhost__options.html#acf9db77f8eb64cd4e314be9b43d8a8b9", null ],

View file

@ -156,9 +156,9 @@ Functions</h2></td></tr>
<p>a new file is starting to arrive </p>
</td></tr>
</table>
<div class="fragment"><div class="line"><a name="l02639"></a><span class="lineno"> 2639</span>&#160; {</div><div class="line"><a name="l02640"></a><span class="lineno"> 2640</span>&#160; <a class="code" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aead3a958e7719ac273c3ba4f684f00c87f">LWS_UFS_CONTENT</a>,</div><div class="line"><a name="l02642"></a><span class="lineno"> 2642</span>&#160; <a class="code" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea6ce2a55a4c3695cdb640c893d95bd3a7">LWS_UFS_FINAL_CONTENT</a>,</div><div class="line"><a name="l02644"></a><span class="lineno"> 2644</span>&#160; <a class="code" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea2d25de44865bd44e5a3903a2bab9ca83">LWS_UFS_OPEN</a></div><div class="line"><a name="l02646"></a><span class="lineno"> 2646</span>&#160;};</div><div class="ttc" id="group__form-parsing_html_gga41a74a822771d3dce89751aa3bce28aea6ce2a55a4c3695cdb640c893d95bd3a7"><div class="ttname"><a href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea6ce2a55a4c3695cdb640c893d95bd3a7">LWS_UFS_FINAL_CONTENT</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:2642</div></div>
<div class="ttc" id="group__form-parsing_html_gga41a74a822771d3dce89751aa3bce28aea2d25de44865bd44e5a3903a2bab9ca83"><div class="ttname"><a href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea2d25de44865bd44e5a3903a2bab9ca83">LWS_UFS_OPEN</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:2644</div></div>
<div class="ttc" id="group__form-parsing_html_gga41a74a822771d3dce89751aa3bce28aead3a958e7719ac273c3ba4f684f00c87f"><div class="ttname"><a href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aead3a958e7719ac273c3ba4f684f00c87f">LWS_UFS_CONTENT</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:2640</div></div>
<div class="fragment"><div class="line"><a name="l02651"></a><span class="lineno"> 2651</span>&#160; {</div><div class="line"><a name="l02652"></a><span class="lineno"> 2652</span>&#160; <a class="code" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aead3a958e7719ac273c3ba4f684f00c87f">LWS_UFS_CONTENT</a>,</div><div class="line"><a name="l02654"></a><span class="lineno"> 2654</span>&#160; <a class="code" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea6ce2a55a4c3695cdb640c893d95bd3a7">LWS_UFS_FINAL_CONTENT</a>,</div><div class="line"><a name="l02656"></a><span class="lineno"> 2656</span>&#160; <a class="code" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea2d25de44865bd44e5a3903a2bab9ca83">LWS_UFS_OPEN</a></div><div class="line"><a name="l02658"></a><span class="lineno"> 2658</span>&#160;};</div><div class="ttc" id="group__form-parsing_html_gga41a74a822771d3dce89751aa3bce28aea6ce2a55a4c3695cdb640c893d95bd3a7"><div class="ttname"><a href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea6ce2a55a4c3695cdb640c893d95bd3a7">LWS_UFS_FINAL_CONTENT</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:2654</div></div>
<div class="ttc" id="group__form-parsing_html_gga41a74a822771d3dce89751aa3bce28aea2d25de44865bd44e5a3903a2bab9ca83"><div class="ttname"><a href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea2d25de44865bd44e5a3903a2bab9ca83">LWS_UFS_OPEN</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:2656</div></div>
<div class="ttc" id="group__form-parsing_html_gga41a74a822771d3dce89751aa3bce28aead3a958e7719ac273c3ba4f684f00c87f"><div class="ttname"><a href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aead3a958e7719ac273c3ba4f684f00c87f">LWS_UFS_CONTENT</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:2652</div></div>
</div><!-- fragment -->
</div>
</div>

View file

@ -130,13 +130,13 @@ Functions</h2></td></tr>
<p>client packet payload goes out on wire unmunged only useful for security tests since normal servers cannot decode the content if used </p>
</td></tr>
</table>
<div class="fragment"><div class="line"><a name="l02980"></a><span class="lineno"> 2980</span>&#160; {</div><div class="line"><a name="l02981"></a><span class="lineno"> 2981</span>&#160; <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da80e8f169fda236c56bfb795ed62903db">LWS_WRITE_TEXT</a> = 0,</div><div class="line"><a name="l02985"></a><span class="lineno"> 2985</span>&#160; <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193daf6486c0dba50c44198100717721d9ab2">LWS_WRITE_BINARY</a> = 1,</div><div class="line"><a name="l02988"></a><span class="lineno"> 2988</span>&#160; <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da10047eb05b5e1c298151dc47a5b44826">LWS_WRITE_CONTINUATION</a> = 2,</div><div class="line"><a name="l02991"></a><span class="lineno"> 2991</span>&#160; <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e">LWS_WRITE_HTTP</a> = 3,</div><div class="line"><a name="l02994"></a><span class="lineno"> 2994</span>&#160; <span class="comment">/* LWS_WRITE_CLOSE is handled by lws_close_reason() */</span></div><div class="line"><a name="l02995"></a><span class="lineno"> 2995</span>&#160; LWS_WRITE_PING = 5,</div><div class="line"><a name="l02996"></a><span class="lineno"> 2996</span>&#160; LWS_WRITE_PONG = 6,</div><div class="line"><a name="l02997"></a><span class="lineno"> 2997</span>&#160;</div><div class="line"><a name="l02998"></a><span class="lineno"> 2998</span>&#160; <span class="comment">/* Same as write_http but we know this write ends the transaction */</span></div><div class="line"><a name="l02999"></a><span class="lineno"> 2999</span>&#160; LWS_WRITE_HTTP_FINAL = 7,</div><div class="line"><a name="l03000"></a><span class="lineno"> 3000</span>&#160;</div><div class="line"><a name="l03001"></a><span class="lineno"> 3001</span>&#160; <span class="comment">/* HTTP2 */</span></div><div class="line"><a name="l03002"></a><span class="lineno"> 3002</span>&#160;</div><div class="line"><a name="l03003"></a><span class="lineno"> 3003</span>&#160; <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dafe5a38e940ce56708ac814627e9c0917">LWS_WRITE_HTTP_HEADERS</a> = 8,</div><div class="line"><a name="l03010"></a><span class="lineno"> 3010</span>&#160; <span class="comment">/****** add new things just above ---^ ******/</span></div><div class="line"><a name="l03011"></a><span class="lineno"> 3011</span>&#160;</div><div class="line"><a name="l03012"></a><span class="lineno"> 3012</span>&#160; <span class="comment">/* flags */</span></div><div class="line"><a name="l03013"></a><span class="lineno"> 3013</span>&#160;</div><div class="line"><a name="l03014"></a><span class="lineno"> 3014</span>&#160; <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da115440f272a5d55518adfc8099acfee3">LWS_WRITE_NO_FIN</a> = 0x40,</div><div class="line"><a name="l03017"></a><span class="lineno"> 3017</span>&#160; <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da220d8e8652d9b97fb66e476e2a60ffce">LWS_WRITE_CLIENT_IGNORE_XOR_MASK</a> = 0x80</div><div class="line"><a name="l03021"></a><span class="lineno"> 3021</span>&#160;};</div><div class="ttc" id="group__sending-data_html_gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e"><div class="ttname"><a href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e">LWS_WRITE_HTTP</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:2991</div></div>
<div class="ttc" id="group__sending-data_html_gga98b099cf8c1c7e38ad78501f270e193da115440f272a5d55518adfc8099acfee3"><div class="ttname"><a href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da115440f272a5d55518adfc8099acfee3">LWS_WRITE_NO_FIN</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3014</div></div>
<div class="ttc" id="group__sending-data_html_gga98b099cf8c1c7e38ad78501f270e193da80e8f169fda236c56bfb795ed62903db"><div class="ttname"><a href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da80e8f169fda236c56bfb795ed62903db">LWS_WRITE_TEXT</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:2981</div></div>
<div class="ttc" id="group__sending-data_html_gga98b099cf8c1c7e38ad78501f270e193daf6486c0dba50c44198100717721d9ab2"><div class="ttname"><a href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193daf6486c0dba50c44198100717721d9ab2">LWS_WRITE_BINARY</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:2985</div></div>
<div class="ttc" id="group__sending-data_html_gga98b099cf8c1c7e38ad78501f270e193da220d8e8652d9b97fb66e476e2a60ffce"><div class="ttname"><a href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da220d8e8652d9b97fb66e476e2a60ffce">LWS_WRITE_CLIENT_IGNORE_XOR_MASK</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3017</div></div>
<div class="ttc" id="group__sending-data_html_gga98b099cf8c1c7e38ad78501f270e193da10047eb05b5e1c298151dc47a5b44826"><div class="ttname"><a href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da10047eb05b5e1c298151dc47a5b44826">LWS_WRITE_CONTINUATION</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:2988</div></div>
<div class="ttc" id="group__sending-data_html_gga98b099cf8c1c7e38ad78501f270e193dafe5a38e940ce56708ac814627e9c0917"><div class="ttname"><a href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dafe5a38e940ce56708ac814627e9c0917">LWS_WRITE_HTTP_HEADERS</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3003</div></div>
<div class="fragment"><div class="line"><a name="l02994"></a><span class="lineno"> 2994</span>&#160; {</div><div class="line"><a name="l02995"></a><span class="lineno"> 2995</span>&#160; <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da80e8f169fda236c56bfb795ed62903db">LWS_WRITE_TEXT</a> = 0,</div><div class="line"><a name="l02999"></a><span class="lineno"> 2999</span>&#160; <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193daf6486c0dba50c44198100717721d9ab2">LWS_WRITE_BINARY</a> = 1,</div><div class="line"><a name="l03002"></a><span class="lineno"> 3002</span>&#160; <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da10047eb05b5e1c298151dc47a5b44826">LWS_WRITE_CONTINUATION</a> = 2,</div><div class="line"><a name="l03005"></a><span class="lineno"> 3005</span>&#160; <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e">LWS_WRITE_HTTP</a> = 3,</div><div class="line"><a name="l03008"></a><span class="lineno"> 3008</span>&#160; <span class="comment">/* LWS_WRITE_CLOSE is handled by lws_close_reason() */</span></div><div class="line"><a name="l03009"></a><span class="lineno"> 3009</span>&#160; LWS_WRITE_PING = 5,</div><div class="line"><a name="l03010"></a><span class="lineno"> 3010</span>&#160; LWS_WRITE_PONG = 6,</div><div class="line"><a name="l03011"></a><span class="lineno"> 3011</span>&#160;</div><div class="line"><a name="l03012"></a><span class="lineno"> 3012</span>&#160; <span class="comment">/* Same as write_http but we know this write ends the transaction */</span></div><div class="line"><a name="l03013"></a><span class="lineno"> 3013</span>&#160; LWS_WRITE_HTTP_FINAL = 7,</div><div class="line"><a name="l03014"></a><span class="lineno"> 3014</span>&#160;</div><div class="line"><a name="l03015"></a><span class="lineno"> 3015</span>&#160; <span class="comment">/* HTTP2 */</span></div><div class="line"><a name="l03016"></a><span class="lineno"> 3016</span>&#160;</div><div class="line"><a name="l03017"></a><span class="lineno"> 3017</span>&#160; <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dafe5a38e940ce56708ac814627e9c0917">LWS_WRITE_HTTP_HEADERS</a> = 8,</div><div class="line"><a name="l03024"></a><span class="lineno"> 3024</span>&#160; <span class="comment">/****** add new things just above ---^ ******/</span></div><div class="line"><a name="l03025"></a><span class="lineno"> 3025</span>&#160;</div><div class="line"><a name="l03026"></a><span class="lineno"> 3026</span>&#160; <span class="comment">/* flags */</span></div><div class="line"><a name="l03027"></a><span class="lineno"> 3027</span>&#160;</div><div class="line"><a name="l03028"></a><span class="lineno"> 3028</span>&#160; <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da115440f272a5d55518adfc8099acfee3">LWS_WRITE_NO_FIN</a> = 0x40,</div><div class="line"><a name="l03031"></a><span class="lineno"> 3031</span>&#160; <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da220d8e8652d9b97fb66e476e2a60ffce">LWS_WRITE_CLIENT_IGNORE_XOR_MASK</a> = 0x80</div><div class="line"><a name="l03035"></a><span class="lineno"> 3035</span>&#160;};</div><div class="ttc" id="group__sending-data_html_gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e"><div class="ttname"><a href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e">LWS_WRITE_HTTP</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3005</div></div>
<div class="ttc" id="group__sending-data_html_gga98b099cf8c1c7e38ad78501f270e193da115440f272a5d55518adfc8099acfee3"><div class="ttname"><a href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da115440f272a5d55518adfc8099acfee3">LWS_WRITE_NO_FIN</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3028</div></div>
<div class="ttc" id="group__sending-data_html_gga98b099cf8c1c7e38ad78501f270e193da80e8f169fda236c56bfb795ed62903db"><div class="ttname"><a href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da80e8f169fda236c56bfb795ed62903db">LWS_WRITE_TEXT</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:2995</div></div>
<div class="ttc" id="group__sending-data_html_gga98b099cf8c1c7e38ad78501f270e193daf6486c0dba50c44198100717721d9ab2"><div class="ttname"><a href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193daf6486c0dba50c44198100717721d9ab2">LWS_WRITE_BINARY</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:2999</div></div>
<div class="ttc" id="group__sending-data_html_gga98b099cf8c1c7e38ad78501f270e193da220d8e8652d9b97fb66e476e2a60ffce"><div class="ttname"><a href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da220d8e8652d9b97fb66e476e2a60ffce">LWS_WRITE_CLIENT_IGNORE_XOR_MASK</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3031</div></div>
<div class="ttc" id="group__sending-data_html_gga98b099cf8c1c7e38ad78501f270e193da10047eb05b5e1c298151dc47a5b44826"><div class="ttname"><a href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da10047eb05b5e1c298151dc47a5b44826">LWS_WRITE_CONTINUATION</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3002</div></div>
<div class="ttc" id="group__sending-data_html_gga98b099cf8c1c7e38ad78501f270e193dafe5a38e940ce56708ac814627e9c0917"><div class="ttname"><a href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dafe5a38e940ce56708ac814627e9c0917">LWS_WRITE_HTTP_HEADERS</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3017</div></div>
</div><!-- fragment -->
</div>
</div>

View file

@ -157,15 +157,15 @@ Functions</h2></td></tr>
<p>sent the session quit </p>
</td></tr>
</table>
<div class="fragment"><div class="line"><a name="l03902"></a><span class="lineno"> 3902</span>&#160; {</div><div class="line"><a name="l03903"></a><span class="lineno"> 3903</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c">LGSSMTP_IDLE</a>, </div><div class="line"><a name="l03904"></a><span class="lineno"> 3904</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933">LGSSMTP_CONNECTING</a>, </div><div class="line"><a name="l03905"></a><span class="lineno"> 3905</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d">LGSSMTP_CONNECTED</a>, </div><div class="line"><a name="l03906"></a><span class="lineno"> 3906</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad">LGSSMTP_SENT_HELO</a>, </div><div class="line"><a name="l03907"></a><span class="lineno"> 3907</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab">LGSSMTP_SENT_FROM</a>, </div><div class="line"><a name="l03908"></a><span class="lineno"> 3908</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83">LGSSMTP_SENT_TO</a>, </div><div class="line"><a name="l03909"></a><span class="lineno"> 3909</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14">LGSSMTP_SENT_DATA</a>, </div><div class="line"><a name="l03910"></a><span class="lineno"> 3910</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69">LGSSMTP_SENT_BODY</a>, </div><div class="line"><a name="l03911"></a><span class="lineno"> 3911</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5">LGSSMTP_SENT_QUIT</a>, </div><div class="line"><a name="l03912"></a><span class="lineno"> 3912</span>&#160;};</div><div class="ttc" id="group__smtp_html_gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d"><div class="ttname"><a href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d">LGSSMTP_CONNECTED</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3905</div></div>
<div class="ttc" id="group__smtp_html_gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69"><div class="ttname"><a href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69">LGSSMTP_SENT_BODY</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3910</div></div>
<div class="ttc" id="group__smtp_html_gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c"><div class="ttname"><a href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c">LGSSMTP_IDLE</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3903</div></div>
<div class="ttc" id="group__smtp_html_gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933"><div class="ttname"><a href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933">LGSSMTP_CONNECTING</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3904</div></div>
<div class="ttc" id="group__smtp_html_gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83"><div class="ttname"><a href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83">LGSSMTP_SENT_TO</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3908</div></div>
<div class="ttc" id="group__smtp_html_gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab"><div class="ttname"><a href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab">LGSSMTP_SENT_FROM</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3907</div></div>
<div class="ttc" id="group__smtp_html_gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5"><div class="ttname"><a href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5">LGSSMTP_SENT_QUIT</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3911</div></div>
<div class="ttc" id="group__smtp_html_gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad"><div class="ttname"><a href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad">LGSSMTP_SENT_HELO</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3906</div></div>
<div class="ttc" id="group__smtp_html_gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14"><div class="ttname"><a href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14">LGSSMTP_SENT_DATA</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3909</div></div>
<div class="fragment"><div class="line"><a name="l03916"></a><span class="lineno"> 3916</span>&#160; {</div><div class="line"><a name="l03917"></a><span class="lineno"> 3917</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c">LGSSMTP_IDLE</a>, </div><div class="line"><a name="l03918"></a><span class="lineno"> 3918</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933">LGSSMTP_CONNECTING</a>, </div><div class="line"><a name="l03919"></a><span class="lineno"> 3919</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d">LGSSMTP_CONNECTED</a>, </div><div class="line"><a name="l03920"></a><span class="lineno"> 3920</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad">LGSSMTP_SENT_HELO</a>, </div><div class="line"><a name="l03921"></a><span class="lineno"> 3921</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab">LGSSMTP_SENT_FROM</a>, </div><div class="line"><a name="l03922"></a><span class="lineno"> 3922</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83">LGSSMTP_SENT_TO</a>, </div><div class="line"><a name="l03923"></a><span class="lineno"> 3923</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14">LGSSMTP_SENT_DATA</a>, </div><div class="line"><a name="l03924"></a><span class="lineno"> 3924</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69">LGSSMTP_SENT_BODY</a>, </div><div class="line"><a name="l03925"></a><span class="lineno"> 3925</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5">LGSSMTP_SENT_QUIT</a>, </div><div class="line"><a name="l03926"></a><span class="lineno"> 3926</span>&#160;};</div><div class="ttc" id="group__smtp_html_gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d"><div class="ttname"><a href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d">LGSSMTP_CONNECTED</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3919</div></div>
<div class="ttc" id="group__smtp_html_gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69"><div class="ttname"><a href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69">LGSSMTP_SENT_BODY</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3924</div></div>
<div class="ttc" id="group__smtp_html_gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c"><div class="ttname"><a href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c">LGSSMTP_IDLE</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3917</div></div>
<div class="ttc" id="group__smtp_html_gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933"><div class="ttname"><a href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933">LGSSMTP_CONNECTING</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3918</div></div>
<div class="ttc" id="group__smtp_html_gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83"><div class="ttname"><a href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83">LGSSMTP_SENT_TO</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3922</div></div>
<div class="ttc" id="group__smtp_html_gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab"><div class="ttname"><a href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab">LGSSMTP_SENT_FROM</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3921</div></div>
<div class="ttc" id="group__smtp_html_gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5"><div class="ttname"><a href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5">LGSSMTP_SENT_QUIT</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3925</div></div>
<div class="ttc" id="group__smtp_html_gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad"><div class="ttname"><a href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad">LGSSMTP_SENT_HELO</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3920</div></div>
<div class="ttc" id="group__smtp_html_gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14"><div class="ttname"><a href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14">LGSSMTP_SENT_DATA</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3923</div></div>
</div><!-- fragment -->
</div>
</div>

View file

@ -90,7 +90,10 @@ Enumerations</h2></td></tr>
&#160;&#160;<b>PENDING_FLUSH_STORED_SEND_BEFORE_CLOSE</b> = 12,
<b>PENDING_TIMEOUT_SHUTDOWN_FLUSH</b> = 13,
<b>PENDING_TIMEOUT_CGI</b> = 14,
<b>PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE</b> = 15
<b>PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE</b> = 15,
<br />
&#160;&#160;<b>PENDING_TIMEOUT_WS_PONG_CHECK_SEND_PING</b> = 16,
<b>PENDING_TIMEOUT_WS_PONG_CHECK_GET_PONG</b> = 17
<br />
}</td></tr>
<tr class="separator:ga2c0aa4b9c3c55bae7b35cbfac3246c87"><td class="memSeparator" colspan="2">&#160;</td></tr>

View file

@ -129,13 +129,13 @@ Enumerations</h2></td></tr>
<p>hand by named protocol's callback </p>
</td></tr>
</table>
<div class="fragment"><div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>&#160; {</div><div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>&#160; <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0">LWSMPRO_HTTP</a> = 0, </div><div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>&#160; <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1">LWSMPRO_HTTPS</a> = 1, </div><div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>&#160; <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2">LWSMPRO_FILE</a> = 2, </div><div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>&#160; <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69">LWSMPRO_CGI</a> = 3, </div><div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>&#160; <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970">LWSMPRO_REDIR_HTTP</a> = 4, </div><div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>&#160; <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a8894d16316863077dfe530963ca59f67">LWSMPRO_REDIR_HTTPS</a> = 5, </div><div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>&#160; <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da">LWSMPRO_CALLBACK</a> = 6, </div><div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>&#160;};</div><div class="ttc" id="group__vhost-mounts_html_gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69"><div class="ttname"><a href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69">LWSMPRO_CGI</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1799</div></div>
<div class="ttc" id="group__vhost-mounts_html_gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1"><div class="ttname"><a href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1">LWSMPRO_HTTPS</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1797</div></div>
<div class="ttc" id="group__vhost-mounts_html_gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2"><div class="ttname"><a href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2">LWSMPRO_FILE</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1798</div></div>
<div class="ttc" id="group__vhost-mounts_html_gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970"><div class="ttname"><a href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970">LWSMPRO_REDIR_HTTP</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1800</div></div>
<div class="ttc" id="group__vhost-mounts_html_gga31eca18e50cb4357480f2fcad36ff437a8894d16316863077dfe530963ca59f67"><div class="ttname"><a href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a8894d16316863077dfe530963ca59f67">LWSMPRO_REDIR_HTTPS</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1801</div></div>
<div class="ttc" id="group__vhost-mounts_html_gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0"><div class="ttname"><a href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0">LWSMPRO_HTTP</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1796</div></div>
<div class="ttc" id="group__vhost-mounts_html_gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da"><div class="ttname"><a href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da">LWSMPRO_CALLBACK</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1802</div></div>
<div class="fragment"><div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>&#160; {</div><div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>&#160; <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0">LWSMPRO_HTTP</a> = 0, </div><div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>&#160; <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1">LWSMPRO_HTTPS</a> = 1, </div><div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>&#160; <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2">LWSMPRO_FILE</a> = 2, </div><div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>&#160; <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69">LWSMPRO_CGI</a> = 3, </div><div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>&#160; <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970">LWSMPRO_REDIR_HTTP</a> = 4, </div><div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>&#160; <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a8894d16316863077dfe530963ca59f67">LWSMPRO_REDIR_HTTPS</a> = 5, </div><div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>&#160; <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da">LWSMPRO_CALLBACK</a> = 6, </div><div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>&#160;};</div><div class="ttc" id="group__vhost-mounts_html_gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69"><div class="ttname"><a href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69">LWSMPRO_CGI</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1811</div></div>
<div class="ttc" id="group__vhost-mounts_html_gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1"><div class="ttname"><a href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1">LWSMPRO_HTTPS</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1809</div></div>
<div class="ttc" id="group__vhost-mounts_html_gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2"><div class="ttname"><a href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2">LWSMPRO_FILE</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1810</div></div>
<div class="ttc" id="group__vhost-mounts_html_gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970"><div class="ttname"><a href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970">LWSMPRO_REDIR_HTTP</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1812</div></div>
<div class="ttc" id="group__vhost-mounts_html_gga31eca18e50cb4357480f2fcad36ff437a8894d16316863077dfe530963ca59f67"><div class="ttname"><a href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a8894d16316863077dfe530963ca59f67">LWSMPRO_REDIR_HTTPS</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1813</div></div>
<div class="ttc" id="group__vhost-mounts_html_gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0"><div class="ttname"><a href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0">LWSMPRO_HTTP</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1808</div></div>
<div class="ttc" id="group__vhost-mounts_html_gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da"><div class="ttname"><a href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da">LWSMPRO_CALLBACK</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1814</div></div>
</div><!-- fragment -->
</div>
</div>

View file

@ -562,7 +562,10 @@ Enumerations</h2></td></tr>
&#160;&#160;<b>PENDING_FLUSH_STORED_SEND_BEFORE_CLOSE</b> = 12,
<b>PENDING_TIMEOUT_SHUTDOWN_FLUSH</b> = 13,
<b>PENDING_TIMEOUT_CGI</b> = 14,
<b>PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE</b> = 15
<b>PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE</b> = 15,
<br />
&#160;&#160;<b>PENDING_TIMEOUT_WS_PONG_CHECK_SEND_PING</b> = 16,
<b>PENDING_TIMEOUT_WS_PONG_CHECK_GET_PONG</b> = 17
<br />
}</td></tr>
<tr class="separator:ga2c0aa4b9c3c55bae7b35cbfac3246c87"><td class="memSeparator" colspan="2">&#160;</td></tr>

View file

@ -368,7 +368,9 @@ var libwebsockets_8h =
[ "PENDING_FLUSH_STORED_SEND_BEFORE_CLOSE", "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a0d6b956db11acb6d263af3ea054a914e", null ],
[ "PENDING_TIMEOUT_SHUTDOWN_FLUSH", "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a11292263c9eccd090294e7e316200d7f", null ],
[ "PENDING_TIMEOUT_CGI", "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a73f61afae387e16f7ab8a4f299aca8d2", null ],
[ "PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE", "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a5fe48ea6f3f5363cca55d39b78490b45", null ]
[ "PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE", "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a5fe48ea6f3f5363cca55d39b78490b45", null ],
[ "PENDING_TIMEOUT_WS_PONG_CHECK_SEND_PING", "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87aaac32d9ca2f7c31f5649ad4059d7b985", null ],
[ "PENDING_TIMEOUT_WS_PONG_CHECK_GET_PONG", "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a62ae208399be1f872e14843fd15f9e06", null ]
] ],
[ "_lws_log", "group__log.html#gaf5f07837692b2f231a79da8a058288aa", null ],
[ "_lws_logv", "group__log.html#ga74eb146969f0595e12ea835851b4588e", null ],

File diff suppressed because one or more lines are too long

View file

@ -81,7 +81,7 @@ Lwsws Configuration</h1>
<li>There's also a single substitution, if a string contains "_lws_ddir_", then that is replaced with the LWS install data directory path, eg, "/usr/share" or whatever was set when LWS was built + installed. That lets you refer to installed paths without having to change the config if your install path was different.</li>
</ul>
<p>There is a single file intended for global settings</p>
<p>/etc/lwsws/conf </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;# these are the server global settings</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;# stuff related to vhosts should go in one</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;# file per vhost in ../conf.d/</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;{</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160; &quot;global&quot;: {</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; &quot;uid&quot;: &quot;48&quot;, # apache user</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; &quot;gid&quot;: &quot;48&quot;, # apache user</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160; &quot;count-threads&quot;: &quot;1&quot;,</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160; &quot;server-string&quot;: &quot;myserver v1&quot;, # returned in http headers</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; &quot;init-ssl&quot;: &quot;yes&quot;</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160; }</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;}</div></div><!-- fragment --><p> and a config directory intended to take one file per vhost</p>
<p>/etc/lwsws/conf </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;# these are the server global settings</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;# stuff related to vhosts should go in one</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;# file per vhost in ../conf.d/</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;{</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160; &quot;global&quot;: {</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; &quot;uid&quot;: &quot;48&quot;, # apache user</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; &quot;gid&quot;: &quot;48&quot;, # apache user</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160; &quot;count-threads&quot;: &quot;1&quot;,</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160; &quot;server-string&quot;: &quot;myserver v1&quot;, # returned in http headers</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; &quot;ws-pingpong-secs&quot;: &quot;200&quot;, # confirm idle established ws connections this often</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160; &quot;init-ssl&quot;: &quot;yes&quot;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; }</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;}</div></div><!-- fragment --><p> and a config directory intended to take one file per vhost</p>
<p>/etc/lwsws/conf.d/warmcat.com </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;{</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160; &quot;vhosts&quot;: [{</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160; &quot;name&quot;: &quot;warmcat.com&quot;,</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160; &quot;port&quot;: &quot;443&quot;,</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; &quot;interface&quot;: &quot;eth0&quot;, # optional</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160; &quot;host-ssl-key&quot;: &quot;/etc/pki/tls/private/warmcat.com.key&quot;, # if given enable ssl</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; &quot;host-ssl-cert&quot;: &quot;/etc/pki/tls/certs/warmcat.com.crt&quot;,</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; &quot;host-ssl-ca&quot;: &quot;/etc/pki/tls/certs/warmcat.com.cer&quot;,</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160; &quot;mounts&quot;: [{ # autoserve</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160; &quot;mountpoint&quot;: &quot;/&quot;,</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; &quot;origin&quot;: &quot;file:///var/www/warmcat.com&quot;,</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160; &quot;default&quot;: &quot;index.html&quot;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; }]</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; }]</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;}</div></div><!-- fragment --><p> To get started quickly, an example config reproducing the old test server on port 7681, non-SSL is provided. To set it up </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;# mkdir -p /etc/lwsws/conf.d /var/log/lwsws</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;# cp ./lwsws/etc-lwsws-conf-EXAMPLE /etc/lwsws/conf</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;# cp ./lwsws/etc-lwsws-conf.d-localhost-EXAMPLE /etc/lwsws/conf.d/test-server</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;# sudo lwsws</div></div><!-- fragment --><h1><a class="anchor" id="lwswsv"></a>
Lwsws Vhosts</h1>
<p>One server can run many vhosts, where SSL is in use SNI is used to match the connection to a vhost and its vhost-specific SSL keys during SSL negotiation.</p>

View file

@ -134,8 +134,8 @@ var NAVTREEINDEX =
"annotated.html",
"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5ac962efd35abf6c402f9fb14aa14f5016",
"group__sha.html#ga7b09ab74646266f0b555103b3bb8dfe5",
"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedbac8f5f992c6615324108cdf931da903be",
"structlws__polarssl__context.html#a919c33af37aab170f828d954de1fa270"
"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedba60ac587febc583475c185e1409a0210c",
"structlws__plugin__capability.html#ae38f7cf1246b9ca3af3cbf9d46b7090f"
];
var SYNCONMSG = 'click to disable panel synchronisation';

View file

@ -204,8 +204,8 @@ var NAVTREEINDEX0 =
"group__context-and-vhost.html":[9,4],
"group__context-and-vhost.html#ga06e77ce2916f8bc9826ef8d9d68e3932":[9,4,8],
"group__context-and-vhost.html#ga06e77ce2916f8bc9826ef8d9d68e3932":[11,0,0,0,94],
"group__context-and-vhost.html#ga0c54c667ccd9b8b3dddcd123ca72f87c":[11,0,0,0,66],
"group__context-and-vhost.html#ga0c54c667ccd9b8b3dddcd123ca72f87c":[9,4,7],
"group__context-and-vhost.html#ga0c54c667ccd9b8b3dddcd123ca72f87c":[11,0,0,0,66],
"group__context-and-vhost.html#ga341064721add2618ae1b29717493a212":[11,0,0,0,158],
"group__context-and-vhost.html#ga341064721add2618ae1b29717493a212":[9,4,14],
"group__context-and-vhost.html#ga41c2d763f78cc248df3b9f8645dbd2a5":[11,0,0,0,23],
@ -214,16 +214,16 @@ var NAVTREEINDEX0 =
"group__context-and-vhost.html#ga7e9d5405547a457d86e0b4f0ae2bb1c4":[9,4,11],
"group__context-and-vhost.html#ga8db03e19a372e34ac25cf21af894a02c":[11,0,0,0,150],
"group__context-and-vhost.html#ga8db03e19a372e34ac25cf21af894a02c":[9,4,12],
"group__context-and-vhost.html#ga8ee0314028755f1ddfa9428e09b4fddb":[9,4,4],
"group__context-and-vhost.html#ga8ee0314028755f1ddfa9428e09b4fddb":[11,0,0,0,63],
"group__context-and-vhost.html#ga8ee0314028755f1ddfa9428e09b4fddb":[9,4,4],
"group__context-and-vhost.html#ga94e6cc2223c4eec316b13bcebc3628b6":[9,4,10],
"group__context-and-vhost.html#ga94e6cc2223c4eec316b13bcebc3628b6":[11,0,0,0,108],
"group__context-and-vhost.html#ga98d88c9080fd89c37114363a6474ea73":[11,0,0,0,157],
"group__context-and-vhost.html#ga98d88c9080fd89c37114363a6474ea73":[9,4,13],
"group__context-and-vhost.html#gae2134657cdd2ea7a59e13ad314e4c50d":[9,4,9],
"group__context-and-vhost.html#gae2134657cdd2ea7a59e13ad314e4c50d":[11,0,0,0,107],
"group__context-and-vhost.html#gaeb12f934bfd178bd2132a9e73fc641da":[11,0,0,0,64],
"group__context-and-vhost.html#gaeb12f934bfd178bd2132a9e73fc641da":[9,4,5],
"group__context-and-vhost.html#gaeb12f934bfd178bd2132a9e73fc641da":[11,0,0,0,64],
"group__context-and-vhost.html#gaf2fff58562caab7510c41eeac85a8648":[11,0,0,0,65],
"group__context-and-vhost.html#gaf2fff58562caab7510c41eeac85a8648":[9,4,6],
"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a1b2f8bde0f62adc7ebe81b2043f34c0c":[11,0,0,0,23,8],

View file

@ -189,8 +189,8 @@ var NAVTREEINDEX1 =
"group__misc.html#ga8930fe36a3f3eefe4a6a4fd499d8e899":[11,0,0,0,85],
"group__misc.html#gaa194584fff9698f3b280658f770ccd0f":[11,0,0,0,153],
"group__misc.html#gaa194584fff9698f3b280658f770ccd0f":[9,8,10],
"group__misc.html#gab321ed812f46f6dc7ef9e3ca6f00cf1b":[9,8,9],
"group__misc.html#gab321ed812f46f6dc7ef9e3ca6f00cf1b":[11,0,0,0,130],
"group__misc.html#gab321ed812f46f6dc7ef9e3ca6f00cf1b":[9,8,9],
"group__misc.html#gac6abfc0b2bd5b2f09281a4432bb2f5f0":[9,8,4],
"group__misc.html#gac6abfc0b2bd5b2f09281a4432bb2f5f0":[11,0,0,0,83],
"group__misc.html#gacae4d7b6a8d22e4c2d82ff8b12c1e234":[9,8,1],
@ -218,8 +218,8 @@ var NAVTREEINDEX1 =
"group__sending-data.html#gafd5fdd285a0e25ba7e3e1051deec1001":[9,13,1],
"group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da10047eb05b5e1c298151dc47a5b44826":[9,13,0,2],
"group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da10047eb05b5e1c298151dc47a5b44826":[11,0,0,0,32,2],
"group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da115440f272a5d55518adfc8099acfee3":[9,13,0,5],
"group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da115440f272a5d55518adfc8099acfee3":[11,0,0,0,32,8],
"group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da115440f272a5d55518adfc8099acfee3":[9,13,0,5],
"group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da220d8e8652d9b97fb66e476e2a60ffce":[9,13,0,6],
"group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da220d8e8652d9b97fb66e476e2a60ffce":[11,0,0,0,32,9],
"group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da6e556322ff8f205bf311608f7f6e6559":[11,0,0,0,32,4],
@ -234,18 +234,18 @@ var NAVTREEINDEX1 =
"group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dafe5a38e940ce56708ac814627e9c0917":[9,13,0,4],
"group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dafe5a38e940ce56708ac814627e9c0917":[11,0,0,0,32,7],
"group__service.html":[9,0],
"group__service.html#ga29c246707997ab7a466aa709aecd2d7b":[11,0,0,0,53],
"group__service.html#ga29c246707997ab7a466aa709aecd2d7b":[9,0,1],
"group__service.html#ga29c246707997ab7a466aa709aecd2d7b":[11,0,0,0,53],
"group__service.html#ga53e3d0801dfda7960a7249dd559e68a2":[9,0,0],
"group__service.html#ga53e3d0801dfda7960a7249dd559e68a2":[11,0,0,0,52],
"group__service.html#ga9b3cc4473fd8848e5bbee7f310712939":[9,0,5],
"group__service.html#ga9b3cc4473fd8848e5bbee7f310712939":[11,0,0,0,129],
"group__service.html#ga9b3cc4473fd8848e5bbee7f310712939":[9,0,5],
"group__service.html#gad82efa5466d14a9f05aa06416375b28d":[9,0,3],
"group__service.html#gad82efa5466d14a9f05aa06416375b28d":[11,0,0,0,127],
"group__service.html#gaebf426eda371ba23642fc11d8e0ace6b":[9,0,4],
"group__service.html#gaebf426eda371ba23642fc11d8e0ace6b":[11,0,0,0,128],
"group__service.html#gaf95bd0c663d6516a0c80047d9b1167a8":[9,0,2],
"group__service.html#gaebf426eda371ba23642fc11d8e0ace6b":[9,0,4],
"group__service.html#gaf95bd0c663d6516a0c80047d9b1167a8":[11,0,0,0,126],
"group__service.html#gaf95bd0c663d6516a0c80047d9b1167a8":[9,0,2],
"group__sha.html":[9,11],
"group__sha.html#ga66316e6a5a0644a09d5a10e919dfdd8d":[9,11,0],
"group__sha.html#ga66316e6a5a0644a09d5a10e919dfdd8d":[11,0,0,0,44],

View file

@ -1,11 +1,11 @@
var NAVTREEINDEX2 =
{
"group__sha.html#ga7b09ab74646266f0b555103b3bb8dfe5":[9,11,2],
"group__sha.html#gaf39765e4a3b413efb65e4698b2ec3575":[9,11,1],
"group__sha.html#gaf39765e4a3b413efb65e4698b2ec3575":[11,0,0,0,45],
"group__sha.html#gaf39765e4a3b413efb65e4698b2ec3575":[9,11,1],
"group__smtp.html":[9,14],
"group__smtp.html#ga116be79bf44f9dc2a97f46e051fe4dc0":[9,14,1],
"group__smtp.html#ga116be79bf44f9dc2a97f46e051fe4dc0":[11,0,0,0,34],
"group__smtp.html#ga116be79bf44f9dc2a97f46e051fe4dc0":[9,14,1],
"group__smtp.html#ga25298a5afc1074e13b2d5711a86432b2":[9,14,3],
"group__smtp.html#ga25298a5afc1074e13b2d5711a86432b2":[11,0,0,0,69],
"group__smtp.html#ga5e535e346d92a9daf00be33abf79d4eb":[9,14,2],
@ -14,27 +14,27 @@ var NAVTREEINDEX2 =
"group__smtp.html#ga77fc9b56a1bb39484844981ec375fc29":[9,14,4],
"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad":[9,14,1,3],
"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad":[11,0,0,0,34,3],
"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c":[11,0,0,0,34,0],
"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c":[9,14,1,0],
"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5":[11,0,0,0,34,8],
"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c":[11,0,0,0,34,0],
"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5":[9,14,1,8],
"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5":[11,0,0,0,34,8],
"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69":[11,0,0,0,34,7],
"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69":[9,14,1,7],
"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14":[9,14,1,6],
"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14":[11,0,0,0,34,6],
"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14":[9,14,1,6],
"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab":[9,14,1,4],
"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab":[11,0,0,0,34,4],
"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83":[9,14,1,5],
"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83":[11,0,0,0,34,5],
"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d":[11,0,0,0,34,2],
"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83":[9,14,1,5],
"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d":[9,14,1,2],
"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d":[11,0,0,0,34,2],
"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933":[9,14,1,1],
"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933":[11,0,0,0,34,1],
"group__sock-adopt.html":[9,15],
"group__sock-adopt.html#gab2d045df0f81afe00891aaed312d552b":[11,0,0,0,43],
"group__sock-adopt.html#gab2d045df0f81afe00891aaed312d552b":[9,15,1],
"group__sock-adopt.html#gabe71b7462afb21c767bdc67334f305af":[9,15,0],
"group__sock-adopt.html#gab2d045df0f81afe00891aaed312d552b":[11,0,0,0,43],
"group__sock-adopt.html#gabe71b7462afb21c767bdc67334f305af":[11,0,0,0,42],
"group__sock-adopt.html#gabe71b7462afb21c767bdc67334f305af":[9,15,0],
"group__timeout.html":[9,3],
"group__timeout.html#ga2c0aa4b9c3c55bae7b35cbfac3246c87":[11,0,0,0,35],
"group__timeout.html#gaced9f9237f6172fed9f730a2af51345a":[11,0,0,0,134],
@ -48,9 +48,11 @@ var NAVTREEINDEX2 =
"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a44feda6cc9507a8613b9263b1acc8ce1":[11,0,0,0,35,8],
"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a52236b42ec5ffe65d4cdbadeb6c4fcb0":[11,0,0,0,35,2],
"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a5fe48ea6f3f5363cca55d39b78490b45":[11,0,0,0,35,15],
"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a62ae208399be1f872e14843fd15f9e06":[11,0,0,0,35,17],
"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a65785467c0b560bead865231fdd405d7":[11,0,0,0,35,0],
"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a73f61afae387e16f7ab8a4f299aca8d2":[11,0,0,0,35,14],
"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a7d5b3bcc88ccbddfa57674e174a78c2d":[11,0,0,0,35,9],
"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87aaac32d9ca2f7c31f5649ad4059d7b985":[11,0,0,0,35,16],
"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87aaf69f440c2e000787efae5ad6f39e74c":[11,0,0,0,35,11],
"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87ab20463ee983bcd68cd8a501319da56d3":[11,0,0,0,35,6],
"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87ad7ebebb506afd30c48e1e5e3a578cd30":[11,0,0,0,35,1],
@ -61,10 +63,10 @@ var NAVTREEINDEX2 =
"group__urlendec.html#gabc2888476e50e001c875c1a8abf455b7":[11,0,0,0,145],
"group__urlendec.html#gabc2888476e50e001c875c1a8abf455b7":[9,6,5,1],
"group__usercb.html":[9,16],
"group__usercb.html#gad4fcb82e68d60ffacca61a3f783a0a2f":[11,0,0,0,7],
"group__usercb.html#gad4fcb82e68d60ffacca61a3f783a0a2f":[9,16,0],
"group__usercb.html#gad62860e19975ba4c4af401c3cdb6abf7":[11,0,0,0,19],
"group__usercb.html#gad4fcb82e68d60ffacca61a3f783a0a2f":[11,0,0,0,7],
"group__usercb.html#gad62860e19975ba4c4af401c3cdb6abf7":[9,16,1],
"group__usercb.html#gad62860e19975ba4c4af401c3cdb6abf7":[11,0,0,0,19],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a026502768778b8d79d62dd0fe4375fc6":[11,0,0,0,19,17],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a026502768778b8d79d62dd0fe4375fc6":[9,16,1,17],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a0418587d5083bb4850faa438648496ba":[11,0,0,0,19,49],
@ -103,8 +105,8 @@ var NAVTREEINDEX2 =
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7e12418eec9bce85735e6460176ab604":[9,16,1,3],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7ec8e2e9557ee02a4fc9f7dec7e2babc":[11,0,0,0,19,11],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7ec8e2e9557ee02a4fc9f7dec7e2babc":[9,16,1,11],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a838b18d255c1b94a533287ba302a2eba":[9,16,1,5],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a838b18d255c1b94a533287ba302a2eba":[11,0,0,0,19,5],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a838b18d255c1b94a533287ba302a2eba":[9,16,1,5],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8909732521d379179003d97ab7a05428":[11,0,0,0,19,35],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8909732521d379179003d97ab7a05428":[9,16,1,35],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a89862929a72bff65257ca1d51a0fce4d":[11,0,0,0,19,52],
@ -132,11 +134,11 @@ var NAVTREEINDEX2 =
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7abbbe7a0a67c5866ca9109d46823fc5b1":[9,16,1,8],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7abcf9c720cd3d361a83d1ac65bf052a25":[11,0,0,0,19,39],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac11c336f7052abf3618962902a71ebc8":[11,0,0,0,19,54],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac3fc5bbb55e69f90396526287ee84a51":[11,0,0,0,19,38],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac3fc5bbb55e69f90396526287ee84a51":[9,16,1,38],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac3fc5bbb55e69f90396526287ee84a51":[11,0,0,0,19,38],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac432e9f891c733ba8f968c1bf57c0ddc":[11,0,0,0,19,45],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac4c68e00efcf1ff7bda7ada462aff8ae":[9,16,1,13],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac4c68e00efcf1ff7bda7ada462aff8ae":[11,0,0,0,19,13],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac4c68e00efcf1ff7bda7ada462aff8ae":[9,16,1,13],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac8c0ae966ef1877e0020c0077ff2e4a4":[11,0,0,0,19,41],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aca834dc035b7f7486f9ce40fde54fe9e":[11,0,0,0,19,30],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aca834dc035b7f7486f9ce40fde54fe9e":[9,16,1,30],
@ -154,16 +156,16 @@ var NAVTREEINDEX2 =
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae4986291b7a810fe290851d73bebeb1c":[9,16,1,21],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae5ad65d779b7eab32ab67ceff91a3bac":[11,0,0,0,19,23],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae5ad65d779b7eab32ab67ceff91a3bac":[9,16,1,23],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae8d1de0bb56e03aa58cb4d44b18edd2e":[9,16,1,12],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae8d1de0bb56e03aa58cb4d44b18edd2e":[11,0,0,0,19,12],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae8d1de0bb56e03aa58cb4d44b18edd2e":[9,16,1,12],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae9734e1d7af2abf291665ce9e4a728d3":[11,0,0,0,19,19],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae9734e1d7af2abf291665ce9e4a728d3":[9,16,1,19],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7af6cf80e57aae8ba0a57a5c456b1fe026":[11,0,0,0,19,55],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afc4b2f72cc9e424a750b506ce0cc4310":[11,0,0,0,19,51],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afd8fd77a1cc9405fcb4f26915d7f2d01":[11,0,0,0,19,29],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afd8fd77a1cc9405fcb4f26915d7f2d01":[9,16,1,29],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afedadfb3cde37a8ea4c84ed535f26d09":[9,16,1,16],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afedadfb3cde37a8ea4c84ed535f26d09":[11,0,0,0,19,16],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afedadfb3cde37a8ea4c84ed535f26d09":[9,16,1,16],
"group__uv.html":[9,22],
"group__uv.html#ga097c89497824d4de225a85a00661fc89":[11,0,0,0,110],
"group__uv.html#ga3c75cd6ec3f80fc0a0c8ead4c4e71a15":[11,0,0,0,111],
@ -174,8 +176,8 @@ var NAVTREEINDEX2 =
"group__vhost-mounts.html":[9,4,0],
"group__vhost-mounts.html#ga31eca18e50cb4357480f2fcad36ff437":[9,4,0,2],
"group__vhost-mounts.html#ga31eca18e50cb4357480f2fcad36ff437":[11,0,0,0,29],
"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69":[9,4,0,2,3],
"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69":[11,0,0,0,29,3],
"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69":[9,4,0,2,3],
"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0":[11,0,0,0,29,0],
"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0":[9,4,0,2,0],
"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2":[9,4,0,2,2],
@ -184,8 +186,8 @@ var NAVTREEINDEX2 =
"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a8894d16316863077dfe530963ca59f67":[11,0,0,0,29,5],
"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da":[9,4,0,2,6],
"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da":[11,0,0,0,29,6],
"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970":[11,0,0,0,29,4],
"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970":[9,4,0,2,4],
"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970":[11,0,0,0,29,4],
"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1":[11,0,0,0,29,1],
"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1":[9,4,0,2,1],
"group__wsclose.html":[9,17],
@ -195,8 +197,8 @@ var NAVTREEINDEX2 =
"group__wsclose.html#gae399c571df32ba532c0ca67da9284985":[9,17,0],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a1bb501d212fa4d57053db681b1dfab98":[11,0,0,0,22,3],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a1bb501d212fa4d57053db681b1dfab98":[9,17,0,2],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8":[9,17,0,9],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8":[11,0,0,0,22,10],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8":[9,17,0,9],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a32c38edab10d1379febac0c479ab2e9c":[11,0,0,0,22,14],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a3ffa38d5081b85fb739e02a747ccf2c4":[11,0,0,0,22,1],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a3ffa38d5081b85fb739e02a747ccf2c4":[9,17,0,0],
@ -210,24 +212,24 @@ var NAVTREEINDEX2 =
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050":[9,17,0,7],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218":[11,0,0,0,22,2],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218":[9,17,0,1],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e":[9,17,0,10],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e":[11,0,0,0,22,11],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e":[9,17,0,10],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985acc9a317c70363dd88e823e066b2c73b7":[11,0,0,0,22,0],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad0869604d79e13700ae5d196a431b350":[11,0,0,0,22,12],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad0869604d79e13700ae5d196a431b350":[9,17,0,11],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad0869604d79e13700ae5d196a431b350":[11,0,0,0,22,12],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad09e68295eabdddcba4e332fbea70ae5":[9,17,0,8],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad09e68295eabdddcba4e332fbea70ae5":[11,0,0,0,22,9],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad2b477a91c8445bf34ecd43977f9b390":[9,17,0,12],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad2b477a91c8445bf34ecd43977f9b390":[11,0,0,0,22,13],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2":[9,17,0,4],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2":[11,0,0,0,22,5],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2":[9,17,0,4],
"group__wsstatus.html":[9,18],
"group__wsstatus.html#ga08e9ee165fca503fd9427d55cfecac37":[9,18,3],
"group__wsstatus.html#ga08e9ee165fca503fd9427d55cfecac37":[11,0,0,0,105],
"group__wsstatus.html#ga26a140623d202dd2bf2004deb6994baa":[9,18,4],
"group__wsstatus.html#ga26a140623d202dd2bf2004deb6994baa":[11,0,0,0,106],
"group__wsstatus.html#ga2bb3655329b4651cd06f79ee3a764421":[9,18,6],
"group__wsstatus.html#ga2bb3655329b4651cd06f79ee3a764421":[11,0,0,0,123],
"group__wsstatus.html#ga2bb3655329b4651cd06f79ee3a764421":[9,18,6],
"group__wsstatus.html#ga3df5045656dfb6b0e63a38de2dca79d2":[9,18,1],
"group__wsstatus.html#ga3df5045656dfb6b0e63a38de2dca79d2":[11,0,0,0,91],
"group__wsstatus.html#ga4ad226d5e01024b4046f4a5a37199aa1":[9,18,2],
@ -237,8 +239,8 @@ var NAVTREEINDEX2 =
"group__wsstatus.html#gaeca4afc94b1f026034f99cbba37e2f85":[9,18,5],
"group__wsstatus.html#gaeca4afc94b1f026034f99cbba37e2f85":[11,0,0,0,114],
"hierarchy.html":[10,2],
"index.html":[0],
"index.html":[],
"index.html":[0],
"libwebsockets_8h.html":[11,0,0,0],
"libwebsockets_8h.html#a0b056fdcf949a838ff82209b4a627dd9":[11,0,0,0,159],
"libwebsockets_8h.html#a2271141d8be8d72b47ba327130b4905f":[11,0,0,0,24],
@ -247,7 +249,5 @@ var NAVTREEINDEX2 =
"libwebsockets_8h.html#a2271141d8be8d72b47ba327130b4905fafdb6cf2797a3ea957c690ad6edff25d6":[11,0,0,0,24,0],
"libwebsockets_8h.html#a27bb0b3cdcd0af839c928c253b521ff4":[11,0,0,0,56],
"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedb":[11,0,0,0,20],
"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedba35cf2bed9944faa062d9310197489b2f":[11,0,0,0,20,4],
"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedba60ac587febc583475c185e1409a0210c":[11,0,0,0,20,1],
"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedbaa424646e067c6266bcb4f0190b026d66":[11,0,0,0,20,0]
"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedba35cf2bed9944faa062d9310197489b2f":[11,0,0,0,20,4]
};

View file

@ -1,5 +1,7 @@
var NAVTREEINDEX3 =
{
"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedba60ac587febc583475c185e1409a0210c":[11,0,0,0,20,1],
"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedbaa424646e067c6266bcb4f0190b026d66":[11,0,0,0,20,0],
"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedbac8f5f992c6615324108cdf931da903be":[11,0,0,0,20,2],
"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedbad655f0eecc9e94be37b8ed07348716ef":[11,0,0,0,20,6],
"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedbad9cdc12a796e6c7d912278834d9c7dde":[11,0,0,0,20,3],
@ -147,6 +149,7 @@ var NAVTREEINDEX3 =
"structlws__context__creation__info.html#a137a9b9de4f6a7993fed8746d551e616":[9,4,1,26],
"structlws__context__creation__info.html#a13ffbb0d010309669611f8c4eda7d7f8":[9,4,1,17],
"structlws__context__creation__info.html#a1654d41bea6fb2f619b57e6a264b26a4":[9,4,1,22],
"structlws__context__creation__info.html#a33a1a25a7df3793f59047e20dd580078":[9,4,1,39],
"structlws__context__creation__info.html#a381342a398883d6204955ff3c1849ddd":[9,4,1,9],
"structlws__context__creation__info.html#a3baab4285c679fbe027c2504621d7410":[9,4,1,10],
"structlws__context__creation__info.html#a3e1516fd7fed26bfa77c0246ed26c2eb":[9,4,1,29],
@ -246,8 +249,5 @@ var NAVTREEINDEX3 =
"structlws__plugin__capability.html#a523c7cde6f15bba345f56493dcf6b32a":[9,10,2,0],
"structlws__plugin__capability.html#a6a4d9d01e770f378ddadc77b37522033":[9,10,2,4],
"structlws__plugin__capability.html#a7936f0eb93d79dea76b903d0f8a5f623":[9,10,2,3],
"structlws__plugin__capability.html#abcf51db969522fdda9aaf902e65739d3":[9,10,2,1],
"structlws__plugin__capability.html#ae38f7cf1246b9ca3af3cbf9d46b7090f":[9,10,2,2],
"structlws__polarssl__context.html":[10,0,14],
"structlws__polarssl__context.html#a1872f2ea24878d807ae20ca8513674af":[10,0,14,0]
"structlws__plugin__capability.html#abcf51db969522fdda9aaf902e65739d3":[9,10,2,1]
};

View file

@ -1,5 +1,8 @@
var NAVTREEINDEX4 =
{
"structlws__plugin__capability.html#ae38f7cf1246b9ca3af3cbf9d46b7090f":[9,10,2,2],
"structlws__polarssl__context.html":[10,0,14],
"structlws__polarssl__context.html#a1872f2ea24878d807ae20ca8513674af":[10,0,14,0],
"structlws__polarssl__context.html#a919c33af37aab170f828d954de1fa270":[10,0,14,2],
"structlws__polarssl__context.html#ae7e11c9129ff71c7ee71b3b2e320ff27":[10,0,14,1],
"structlws__pollargs.html":[10,0,15],
@ -23,12 +26,12 @@ var NAVTREEINDEX4 =
"structlws__process__html__state.html#adcafd17704775b4bbeea9561fb340968":[9,6,1,1,0],
"structlws__process__html__state.html#af0732884ef891e24fe5fa237ebaa21a3":[9,6,1,1,4],
"structlws__process__html__state.html#af21119890fdfebe28fb5c4dabfc1bdf5":[9,6,1,1,1],
"structlws__protocol__vhost__options.html":[9,4,0,0],
"structlws__protocol__vhost__options.html":[9,4,2],
"structlws__protocol__vhost__options.html":[9,4,0,0],
"structlws__protocol__vhost__options.html#a0640a92513c70ee6b9b295a9ad1658e7":[9,4,0,0,3],
"structlws__protocol__vhost__options.html#a0640a92513c70ee6b9b295a9ad1658e7":[9,4,2,3],
"structlws__protocol__vhost__options.html#abc714ddb4171756fc8196e9823a1e21c":[9,4,2,1],
"structlws__protocol__vhost__options.html#abc714ddb4171756fc8196e9823a1e21c":[9,4,0,0,1],
"structlws__protocol__vhost__options.html#abc714ddb4171756fc8196e9823a1e21c":[9,4,2,1],
"structlws__protocol__vhost__options.html#acf9db77f8eb64cd4e314be9b43d8a8b9":[9,4,2,0],
"structlws__protocol__vhost__options.html#acf9db77f8eb64cd4e314be9b43d8a8b9":[9,4,0,0,0],
"structlws__protocol__vhost__options.html#afd99fbc90be51ea2465b550c2ec47822":[9,4,2,2],
@ -48,12 +51,12 @@ var NAVTREEINDEX4 =
"structlws__session__info.html#afb924864b70f40372920688a5c1c895e":[9,10,0,2,2],
"structlws__token__limits.html":[9,6,4,1],
"structlws__token__limits.html#a6ec712306cbf8585bce7a56758a3ceff":[9,6,4,1,0],
"structlws__tokens.html":[9,6,6],
"structlws__tokens.html":[9,6,4,0],
"structlws__tokens.html":[9,6,6],
"structlws__tokens.html#a855b7375d1d58516c0ecd4b60e9a7766":[9,6,6,1],
"structlws__tokens.html#a855b7375d1d58516c0ecd4b60e9a7766":[9,6,4,0,1],
"structlws__tokens.html#a9f3635412bc71a5cb78e9862b55f10cd":[9,6,6,0],
"structlws__tokens.html#a9f3635412bc71a5cb78e9862b55f10cd":[9,6,4,0,0],
"structlws__tokens.html#a9f3635412bc71a5cb78e9862b55f10cd":[9,6,6,0],
"structlwsgw__hash.html":[9,10,0,1],
"structlwsgw__hash.html#a29435f5cf78747d4257695b0f141d164":[9,10,0,1,0],
"structlwsgw__hash__bin.html":[9,10,0,0],

View file

@ -156,6 +156,8 @@ Data Fields</h2></td></tr>
<tr class="separator:a704940261951ced6b5d8191bd8b9bb2d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adb0bc0b28cd7d90ab306723d8ffa96fa"><td class="memItemLeft" align="right" valign="top">long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__context__creation__info.html#adb0bc0b28cd7d90ab306723d8ffa96fa">ssl_options_clear</a></td></tr>
<tr class="separator:adb0bc0b28cd7d90ab306723d8ffa96fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a33a1a25a7df3793f59047e20dd580078"><td class="memItemLeft" align="right" valign="top">unsigned short&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__context__creation__info.html#a33a1a25a7df3793f59047e20dd580078">ws_ping_pong_interval</a></td></tr>
<tr class="separator:a33a1a25a7df3793f59047e20dd580078"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afce3b59950eca3203faa07381bbed5d7"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__context__creation__info.html#afce3b59950eca3203faa07381bbed5d7">_unused</a> [8]</td></tr>
<tr class="separator:afce3b59950eca3203faa07381bbed5d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
@ -669,6 +671,19 @@ Data Fields</h2></td></tr>
</div><div class="memdoc">
<p>VHOST: name of vhost, must match external DNS name used to access the site, like "warmcat.com" as it's used to match Host: header and / or SNI name for SSL. </p>
</div>
</div>
<a class="anchor" id="a33a1a25a7df3793f59047e20dd580078"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">unsigned short lws_context_creation_info::ws_ping_pong_interval</td>
</tr>
</table>
</div><div class="memdoc">
<p>CONTEXT: 0 for none, else interval in seconds between sending PINGs on idle websocket connections. When the PING is sent, the PONG must come within the normal timeout_secs timeout period or the connection will be dropped. Any RX or TX traffic on the connection restarts the interval timer, so a connection which always sends or receives something at intervals less than the interval given here will never send PINGs / expect PONGs. Conversely as soon as the ws connection is established, an idle connection will do the PING / PONG roundtrip as soon as ws_ping_pong_interval seconds has passed without traffic </p>
</div>
</div>
<hr/>The documentation for this struct was generated from the following file:<ul>

View file

@ -38,5 +38,6 @@ var structlws__context__creation__info =
[ "token_limits", "structlws__context__creation__info.html#ac8a75b7b259a3c3a5fbb4219a3f06c29", null ],
[ "uid", "structlws__context__creation__info.html#ac105b4180008cb3e672d57beead8382e", null ],
[ "user", "structlws__context__creation__info.html#a0e9d94cdfb893d777b4a4db81e7b5ac0", null ],
[ "vhost_name", "structlws__context__creation__info.html#ad50db098a208f045f7811207d2bee4b9", null ]
[ "vhost_name", "structlws__context__creation__info.html#ad50db098a208f045f7811207d2bee4b9", null ],
[ "ws_ping_pong_interval", "structlws__context__creation__info.html#a33a1a25a7df3793f59047e20dd580078", null ]
];

View file

@ -435,6 +435,11 @@ ping_drop:
lwsl_hexdump(&wsi->u.ws.rx_ubuf[LWS_PRE],
wsi->u.ws.rx_ubuf_head);
if (wsi->pending_timeout == PENDING_TIMEOUT_WS_PONG_CHECK_GET_PONG) {
lwsl_info("received expected PONG on wsi %p\n", wsi);
lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0);
}
/* issue it */
callback_action = LWS_CALLBACK_CLIENT_RECEIVE_PONG;
break;

View file

@ -627,6 +627,29 @@ lws_client_interpret_server_handshake(struct lws *wsi)
}
/*
* stitch protocol choice into the vh protocol linked list
* We always insert ourselves at the start of the list
*
* X <-> B
* X <-> pAn <-> pB
*/
//lwsl_err("%s: pre insert vhost start wsi %p, that wsi prev == %p\n",
// __func__,
// wsi->vhost->same_vh_protocol_list[n],
// wsi->same_vh_protocol_prev);
wsi->same_vh_protocol_prev = /* guy who points to us */
&wsi->vhost->same_vh_protocol_list[n];
wsi->same_vh_protocol_next = /* old first guy is our next */
wsi->vhost->same_vh_protocol_list[n];
/* we become the new first guy */
wsi->vhost->same_vh_protocol_list[n] = wsi;
if (wsi->same_vh_protocol_next)
/* old first guy points back to us now */
wsi->same_vh_protocol_next->same_vh_protocol_prev =
&wsi->same_vh_protocol_next;
check_extensions:
#ifndef LWS_NO_EXTENSIONS
/* instantiate the accepted extensions */
@ -809,6 +832,7 @@ check_accept:
lws_union_transition(wsi, LWSCM_WS_CLIENT);
wsi->state = LWSS_ESTABLISHED;
lws_restart_ws_ping_pong_timer(wsi);
wsi->rxflow_change_to = LWS_RXFLOW_ALLOW;

View file

@ -617,6 +617,8 @@ lws_create_context(struct lws_context_creation_info *info)
else
context->timeout_secs = AWAITING_TIMEOUT;
context->ws_ping_pong_interval = info->ws_ping_pong_interval;
lwsl_info(" default timeout (secs): %u\n", context->timeout_secs);
if (info->max_http_header_data)

View file

@ -35,7 +35,8 @@ static const char * const paths_global[] = {
"global.count-threads",
"global.init-ssl",
"global.server-string",
"global.plugin-dir"
"global.plugin-dir",
"global.ws-pingpong-secs",
};
enum lejp_global_paths {
@ -44,7 +45,8 @@ enum lejp_global_paths {
LEJPGP_COUNT_THREADS,
LWJPGP_INIT_SSL,
LEJPGP_SERVER_STRING,
LEJPGP_PLUGIN_DIR
LEJPGP_PLUGIN_DIR,
LWJPGP_PINGPONG_SECS,
};
static const char * const paths_vhosts[] = {
@ -233,6 +235,10 @@ lejp_globals_cb(struct lejp_ctx *ctx, char reason)
a->plugin_dirs[a->count_plugin_dirs++] = a->p;
break;
case LWJPGP_PINGPONG_SECS:
a->info->ws_ping_pong_interval = atoi(ctx->buf);
return 0;
default:
return 0;
}

View file

@ -1507,6 +1507,18 @@ lws_socket_bind(struct lws_vhost *vhost, int sockfd, int port,
return port;
}
LWS_EXTERN void
lws_restart_ws_ping_pong_timer(struct lws *wsi)
{
if (!wsi->context->ws_ping_pong_interval)
return;
if (wsi->state != LWSS_ESTABLISHED)
return;
wsi->u.ws.time_next_ping_check = (time_t)lws_now_secs() +
wsi->context->ws_ping_pong_interval;
}
static const char *hex = "0123456789ABCDEF";
LWS_VISIBLE LWS_EXTERN const char *

View file

@ -1591,6 +1591,18 @@ struct lws_context_creation_info {
/**< VHOST: Any bits set here will be set as SSL options */
long ssl_options_clear;
/**< VHOST: Any bits set here will be cleared as SSL options */
unsigned short ws_ping_pong_interval;
/**< CONTEXT: 0 for none, else interval in seconds between sending
* PINGs on idle websocket connections. When the PING is sent,
* the PONG must come within the normal timeout_secs timeout period
* or the connection will be dropped.
* Any RX or TX traffic on the connection restarts the interval timer,
* so a connection which always sends or receives something at intervals
* less than the interval given here will never send PINGs / expect
* PONGs. Conversely as soon as the ws connection is established, an
* idle connection will do the PING / PONG roundtrip as soon as
* ws_ping_pong_interval seconds has passed without traffic
*/
/* Add new things just above here ---^
* This is part of the ABI, don't needlessly break compatibility
@ -2932,6 +2944,8 @@ enum pending_timeout {
PENDING_TIMEOUT_SHUTDOWN_FLUSH = 13,
PENDING_TIMEOUT_CGI = 14,
PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE = 15,
PENDING_TIMEOUT_WS_PONG_CHECK_SEND_PING = 16,
PENDING_TIMEOUT_WS_PONG_CHECK_GET_PONG = 17,
/****** add new things just above ---^ ******/
};

View file

@ -249,6 +249,8 @@ LWS_VISIBLE int lws_write(struct lws *wsi, unsigned char *buf, size_t len,
lwsl_ext("FORCED draining wp to 0x%02X\n", wp);
}
lws_restart_ws_ping_pong_timer(wsi);
if (wp == LWS_WRITE_HTTP ||
wp == LWS_WRITE_HTTP_FINAL ||
wp == LWS_WRITE_HTTP_HEADERS)
@ -643,6 +645,7 @@ lws_ssl_capable_read_no_ssl(struct lws *wsi, unsigned char *buf, int len)
if (n >= 0) {
if (wsi->vhost)
wsi->vhost->rx += n;
lws_restart_ws_ping_pong_timer(wsi);
return n;
}
#if LWS_POSIX

View file

@ -1331,6 +1331,11 @@ ping_drop:
lwsl_hexdump(&wsi->u.ws.rx_ubuf[LWS_PRE],
wsi->u.ws.rx_ubuf_head);
if (wsi->pending_timeout == PENDING_TIMEOUT_WS_PONG_CHECK_GET_PONG) {
lwsl_info("received expected PONG on wsi %p\n", wsi);
lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0);
}
/* issue it */
callback_action = LWS_CALLBACK_RECEIVE_PONG;
break;

View file

@ -674,6 +674,7 @@ struct lws_vhost {
int allow_non_ssl_on_ssl_port;
unsigned int user_supplied_ssl_ctx:1;
#endif
unsigned char default_protocol_index;
};
@ -686,6 +687,7 @@ struct lws_vhost {
struct lws_context {
time_t last_timeout_check_s;
time_t last_ws_ping_pong_check_s;
time_t time_up;
struct lws_plat_file_ops fops;
struct lws_context_per_thread pt[LWS_MAX_SMP];
@ -754,6 +756,7 @@ struct lws_context {
short plugin_protocol_count;
short plugin_extension_count;
short server_string_len;
unsigned short ws_ping_pong_interval;
unsigned int being_destroyed:1;
unsigned int requested_kill:1;
@ -774,6 +777,9 @@ lws_plat_plugins_init(struct lws_context * context, const char * const *d);
LWS_VISIBLE LWS_EXTERN int
lws_plat_plugins_destroy(struct lws_context * context);
LWS_EXTERN void
lws_restart_ws_ping_pong_timer(struct lws *wsi);
enum {
LWS_EV_READ = (1 << 0),
LWS_EV_WRITE = (1 << 1),
@ -1087,6 +1093,7 @@ struct _lws_websocket_related {
unsigned int rx_ubuf_alloc;
struct lws *rx_draining_ext_list;
struct lws *tx_draining_ext_list;
time_t time_next_ping_check;
size_t rx_packet_length;
unsigned int rx_ubuf_head;
unsigned char mask[4];
@ -1120,6 +1127,7 @@ struct _lws_websocket_related {
unsigned int stashed_write_pending:1;
unsigned int rx_draining_ext:1;
unsigned int tx_draining_ext:1;
unsigned int send_check_ping:1;
};
#ifdef LWS_WITH_CGI

View file

@ -1286,6 +1286,8 @@ upgrade_ws:
wsi->u.hdr = hdr;
lws_pt_unlock(pt);
lws_restart_ws_ping_pong_timer(wsi);
/*
* create the frame buffer for this connection according to the
* size mentioned in the protocol definition. If 0 there, use

View file

@ -127,6 +127,29 @@ lws_handle_POLLOUT_event(struct lws *wsi, struct lws_pollfd *pollfd)
return 0;
}
if (wsi->state == LWSS_ESTABLISHED &&
!wsi->socket_is_permanently_unusable &&
wsi->u.ws.send_check_ping) {
lwsl_info("issuing ping on wsi %p\n", wsi);
wsi->u.ws.send_check_ping = 0;
n = lws_write(wsi, &wsi->u.ws.ping_payload_buf[LWS_PRE],
0, LWS_WRITE_PING);
if (n < 0)
return -1;
/*
* we apparently were able to send the PING in a reasonable time
* now reset the clock on our peer to be able to send the
* PONG in a reasonable time.
*/
lws_set_timeout(wsi, PENDING_TIMEOUT_WS_PONG_CHECK_GET_PONG,
wsi->context->timeout_secs);
return 0;
}
/* Priority 4: if we are closing, not allowed to send more data frags
* which means user callback or tx ext flush banned now
*/
@ -704,6 +727,41 @@ lws_service_fd_tsi(struct lws_context *context, struct lws_pollfd *pollfd, int t
#endif
}
/*
* at intervals, check for ws connections needing ping-pong checks
*/
if (context->ws_ping_pong_interval &&
context->last_ws_ping_pong_check_s < now + 10) {
context->last_ws_ping_pong_check_s = now;
struct lws_vhost *vh = context->vhost_list;
while (vh) {
for (n = 0; n < vh->count_protocols; n++) {
wsi = vh->same_vh_protocol_list[n];
while (wsi) {
if (wsi->state == LWSS_ESTABLISHED &&
!wsi->socket_is_permanently_unusable &&
!wsi->u.ws.send_check_ping &&
wsi->u.ws.time_next_ping_check &&
wsi->u.ws.time_next_ping_check < now) {
lwsl_info("requesting ping-pong on wsi %p\n", wsi);
wsi->u.ws.send_check_ping = 1;
lws_set_timeout(wsi, PENDING_TIMEOUT_WS_PONG_CHECK_SEND_PING,
context->timeout_secs);
lws_callback_on_writable(wsi);
wsi->u.ws.time_next_ping_check = now +
wsi->context->ws_ping_pong_interval;
}
wsi = wsi->same_vh_protocol_next;
}
}
vh = vh->vhost_next;
}
}
/* the socket we came to service timed out, nothing to do */
if (timed_out)
return 0;

View file

@ -290,6 +290,8 @@ lws_ssl_capable_read(struct lws *wsi, unsigned char *buf, int len)
if (wsi->vhost)
wsi->vhost->rx += n;
lws_restart_ws_ping_pong_timer(wsi);
/*
* if it was our buffer that limited what we read,
* check if SSL has additional data pending inside SSL buffers.

View file

@ -9,6 +9,7 @@
"interface": "eth0",
"count-threads": "1",
"server-string": "lwsws",
"ws-pingpong-secs": "200",
"init-ssl": "yes"
}
}

View file

@ -37,10 +37,11 @@
#include "../lib/libwebsockets.h"
static int deny_deflate, deny_mux, longlived, mirror_lifetime;
static int deny_deflate, longlived, mirror_lifetime;
static struct lws *wsi_dumb, *wsi_mirror;
static volatile int force_exit;
static unsigned int opts;
static int flag_no_mirror_traffic;
#if defined(LWS_USE_POLARSSL)
#else
#if defined(LWS_USE_MBEDTLS)
@ -106,10 +107,14 @@ callback_dumb_increment(struct lws *wsi, enum lws_callback_reasons reason,
/* because we are protocols[0] ... */
case LWS_CALLBACK_CLIENT_CONNECTION_ERROR:
if (wsi == wsi_dumb)
if (wsi == wsi_dumb) {
which = "dumb";
if (wsi == wsi_mirror)
wsi_dumb = NULL;
}
if (wsi == wsi_mirror) {
which = "mirror";
wsi_mirror = NULL;
}
lwsl_err("CLIENT_CONNECTION_ERROR: %s: %s %p\n", which, in);
break;
@ -222,7 +227,8 @@ callback_lws_mirror(struct lws *wsi, enum lws_callback_reasons reason,
* start the ball rolling,
* LWS_CALLBACK_CLIENT_WRITEABLE will come next service
*/
lws_callback_on_writable(wsi);
if (!flag_no_mirror_traffic)
lws_callback_on_writable(wsi);
break;
case LWS_CALLBACK_CLOSED:
@ -231,6 +237,8 @@ callback_lws_mirror(struct lws *wsi, enum lws_callback_reasons reason,
break;
case LWS_CALLBACK_CLIENT_WRITEABLE:
if (flag_no_mirror_traffic)
return 0;
for (n = 0; n < 1; n++) {
lws_get_random(lws_get_context(wsi), rands, sizeof(rands));
l += sprintf((char *)&buf[LWS_PRE + l],
@ -314,8 +322,9 @@ static struct option options[] = {
{ "strict-ssl", no_argument, NULL, 'S' },
{ "version", required_argument, NULL, 'v' },
{ "undeflated", no_argument, NULL, 'u' },
{ "nomux", no_argument, NULL, 'n' },
{ "nomirror", no_argument, NULL, 'n' },
{ "longlived", no_argument, NULL, 'l' },
{ "pingpong-secs", required_argument, NULL, 'P' },
{ "ssl-cert", required_argument, NULL, 'C' },
{ "ssl-key", required_argument, NULL, 'K' },
{ "ssl-ca", required_argument, NULL, 'A' },
@ -330,6 +339,7 @@ static int ratelimit_connects(unsigned int *last, unsigned int secs)
struct timeval tv;
gettimeofday(&tv, NULL);
if (tv.tv_sec - (*last) < secs)
return 0;
@ -341,7 +351,7 @@ static int ratelimit_connects(unsigned int *last, unsigned int secs)
int main(int argc, char **argv)
{
int n = 0, ret = 0, port = 7681, use_ssl = 0, ietf_version = -1;
unsigned int rl_dumb = 0, rl_mirror = 0, do_ws = 1;
unsigned int rl_dumb = 0, rl_mirror = 0, do_ws = 1, pp_secs = 0;
struct lws_context_creation_info info;
struct lws_client_connect_info i;
struct lws_context *context;
@ -360,7 +370,7 @@ int main(int argc, char **argv)
goto usage;
while (n >= 0) {
n = getopt_long(argc, argv, "Snuv:hsp:d:lC:K:A:", options, NULL);
n = getopt_long(argc, argv, "Snuv:hsp:d:lC:K:A:P:", options, NULL);
if (n < 0)
continue;
switch (n) {
@ -378,6 +388,10 @@ int main(int argc, char **argv)
case 'p':
port = atoi(optarg);
break;
case 'P':
pp_secs = atoi(optarg);
lwsl_notice("Setting pingpong interval to %d\n", pp_secs);
break;
case 'l':
longlived = 1;
break;
@ -388,7 +402,8 @@ int main(int argc, char **argv)
deny_deflate = 1;
break;
case 'n':
deny_mux = 1;
flag_no_mirror_traffic = 1;
lwsl_notice("Disabled sending mirror data (for pingpong testing)\n");
break;
case 'C':
strncpy(cert_path, optarg, sizeof(cert_path) - 1);
@ -454,6 +469,7 @@ int main(int argc, char **argv)
info.protocols = protocols;
info.gid = -1;
info.uid = -1;
info.ws_ping_pong_interval = pp_secs;
if (use_ssl) {
info.options |= LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT;