From a496700b3a67ccb494385bfb22ebab0027af6e60 Mon Sep 17 00:00:00 2001
From: Andy Green <andy@warmcat.com>
Date: Thu, 15 Sep 2016 02:22:57 +0800
Subject: [PATCH] lws_snprintf

Thanks to Fabrice Gilot for reporting the problem that led to uncovering this.

Due to a misunderstanding of the return value of snprintf (it is not truncated according
to the max size passed in) in several places relying on snprintf to truncate the length
overflows are possible.

This patch wraps snprintf with a new lws_snprintf() which does truncate its length to allow
the buffer limiting scheme to work properly.

All users should update with these fixes.
---
 doc/html/globals_func.html                    |  3 +
 doc/html/globals_l.html                       |  3 +
 doc/html/group__misc.html                     | 53 +++++++++++
 doc/html/group__misc.js                       |  1 +
 doc/html/group__smtp.html                     | 18 ++--
 doc/html/libwebsockets_8h.html                |  2 +
 doc/html/libwebsockets_8h.js                  |  1 +
 doc/html/libwebsockets_8h_source.html         | 69 +++++++-------
 doc/html/navtreedata.js                       |  6 +-
 doc/html/navtreeindex0.js                     | 12 +--
 doc/html/navtreeindex1.js                     | 36 ++++----
 doc/html/navtreeindex2.js                     | 50 +++++-----
 doc/html/navtreeindex3.js                     | 16 ++--
 doc/html/navtreeindex4.js                     | 14 +--
 lib/client-handshake.c                        | 26 +++---
 lib/lejp-conf.c                               | 18 ++--
 lib/libuv.c                                   | 10 +-
 lib/libwebsockets.c                           | 92 +++++++++++--------
 lib/libwebsockets.h                           | 16 +++-
 lib/lws-plat-esp8266.c                        |  2 +-
 lib/lws-plat-unix.c                           |  6 +-
 lib/private-libwebsockets.h                   |  2 +-
 lib/server.c                                  | 12 +--
 plugins/generic-sessions/handlers.c           | 42 ++++-----
 .../protocol_generic_sessions.c               | 20 ++--
 .../protocol_lws_messageboard.c               | 12 +--
 plugins/generic-sessions/utils.c              | 24 ++---
 .../generic-table/protocol_table_dirlisting.c | 42 ++++-----
 plugins/protocol_dumb_increment.c             |  2 +-
 plugins/protocol_lws_status.c                 |  4 +-
 plugins/protocol_post_demo.c                  |  6 +-
 test-server/test-fraggle.c                    |  2 +-
 test-server/test-ping.c                       |  2 +-
 test-server/test-server-http.c                |  6 +-
 test-server/test-server-status.c              |  4 +-
 35 files changed, 367 insertions(+), 267 deletions(-)

diff --git a/doc/html/globals_func.html b/doc/html/globals_func.html
index 0dec7474..d3ca228d 100644
--- a/doc/html/globals_func.html
+++ b/doc/html/globals_func.html
@@ -354,6 +354,9 @@ $(document).ready(function(){initNavTree('globals_func.html','');});
 <li>lws_SHA1()
 : <a class="el" href="group__sha.html#ga7b09ab74646266f0b555103b3bb8dfe5">libwebsockets.h</a>
 </li>
+<li>lws_snprintf()
+: <a class="el" href="group__misc.html#ga9f37d0e357de2ab4170723fcdb665d21">libwebsockets.h</a>
+</li>
 <li>lws_spa_create()
 : <a class="el" href="group__form-parsing.html#ga162f86762173a2bc8c28497941d74815">libwebsockets.h</a>
 </li>
diff --git a/doc/html/globals_l.html b/doc/html/globals_l.html
index 8a8324ba..69efae18 100644
--- a/doc/html/globals_l.html
+++ b/doc/html/globals_l.html
@@ -628,6 +628,9 @@ $(document).ready(function(){initNavTree('globals_l.html','');});
 <li>lws_SHA1()
 : <a class="el" href="group__sha.html#ga7b09ab74646266f0b555103b3bb8dfe5">libwebsockets.h</a>
 </li>
+<li>lws_snprintf()
+: <a class="el" href="group__misc.html#ga9f37d0e357de2ab4170723fcdb665d21">libwebsockets.h</a>
+</li>
 <li>lws_spa_create()
 : <a class="el" href="group__form-parsing.html#ga162f86762173a2bc8c28497941d74815">libwebsockets.h</a>
 </li>
diff --git a/doc/html/group__misc.html b/doc/html/group__misc.html
index 205bb2e4..b772a654 100644
--- a/doc/html/group__misc.html
+++ b/doc/html/group__misc.html
@@ -70,6 +70,8 @@ $(document).ready(function(){initNavTree('group__misc.html','');});
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
 Functions</h2></td></tr>
+<tr class="memitem:ga9f37d0e357de2ab4170723fcdb665d21"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga9f37d0e357de2ab4170723fcdb665d21">lws_snprintf</a> (char *str, size_t size, const char *format,...)</td></tr>
+<tr class="separator:ga9f37d0e357de2ab4170723fcdb665d21"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:ga58f906c6be0ca80efd813f694569dd4a"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga58f906c6be0ca80efd813f694569dd4a">lws_get_random</a> (struct lws_context *context, void *buf, int len)</td></tr>
 <tr class="separator:ga58f906c6be0ca80efd813f694569dd4a"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:gace5171b1dbbc03ec89a98f8afdb5c9af"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#gace5171b1dbbc03ec89a98f8afdb5c9af">lws_daemonize</a> (const char *_lock_path)</td></tr>
@@ -391,6 +393,57 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
   </dd>
 </dl>
 
+</div>
+</div>
+<a class="anchor" id="ga9f37d0e357de2ab4170723fcdb665d21"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">LWS_VISIBLE LWS_EXTERN int lws_snprintf </td>
+          <td>(</td>
+          <td class="paramtype">char *&#160;</td>
+          <td class="paramname"><em>str</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>format</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname"><em>...</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
+<p><a class="el" href="group__misc.html#ga9f37d0e357de2ab4170723fcdb665d21">lws_snprintf()</a>: snprintf that truncates the returned length too</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">str</td><td>destination buffer </td></tr>
+    <tr><td class="paramname">size</td><td>bytes left in destination buffer </td></tr>
+    <tr><td class="paramname">format</td><td>format string </td></tr>
+    <tr><td class="paramname">...</td><td>args for format</td></tr>
+  </table>
+  </dd>
+</dl>
+<p>This lets you correctly truncate buffers by concatenating lengths, if you reach the limit the reported length doesn't exceed the limit. </p>
+
 </div>
 </div>
 <a class="anchor" id="gaa194584fff9698f3b280658f770ccd0f"></a>
diff --git a/doc/html/group__misc.js b/doc/html/group__misc.js
index de8f7d03..c9fd40e1 100644
--- a/doc/html/group__misc.js
+++ b/doc/html/group__misc.js
@@ -10,5 +10,6 @@ var group__misc =
     [ "lws_now_secs", "group__misc.html#ga33bf2635033710b25f931b57ed663e1e", null ],
     [ "lws_parse_uri", "group__misc.html#ga1ec0d9faac5d3a5824d765c287c043aa", null ],
     [ "lws_set_allocator", "group__misc.html#gab321ed812f46f6dc7ef9e3ca6f00cf1b", null ],
+    [ "lws_snprintf", "group__misc.html#ga9f37d0e357de2ab4170723fcdb665d21", null ],
     [ "lws_wsi_user", "group__misc.html#gaa194584fff9698f3b280658f770ccd0f", null ]
 ];
\ No newline at end of file
diff --git a/doc/html/group__smtp.html b/doc/html/group__smtp.html
index 311eecee..ef58f054 100644
--- a/doc/html/group__smtp.html
+++ b/doc/html/group__smtp.html
@@ -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="l04047"></a><span class="lineno"> 4047</span>&#160;                       {</div><div class="line"><a name="l04048"></a><span class="lineno"> 4048</span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c">LGSSMTP_IDLE</a>, </div><div class="line"><a name="l04049"></a><span class="lineno"> 4049</span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933">LGSSMTP_CONNECTING</a>, </div><div class="line"><a name="l04050"></a><span class="lineno"> 4050</span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d">LGSSMTP_CONNECTED</a>, </div><div class="line"><a name="l04051"></a><span class="lineno"> 4051</span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad">LGSSMTP_SENT_HELO</a>, </div><div class="line"><a name="l04052"></a><span class="lineno"> 4052</span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab">LGSSMTP_SENT_FROM</a>, </div><div class="line"><a name="l04053"></a><span class="lineno"> 4053</span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83">LGSSMTP_SENT_TO</a>, </div><div class="line"><a name="l04054"></a><span class="lineno"> 4054</span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14">LGSSMTP_SENT_DATA</a>, </div><div class="line"><a name="l04055"></a><span class="lineno"> 4055</span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69">LGSSMTP_SENT_BODY</a>, </div><div class="line"><a name="l04056"></a><span class="lineno"> 4056</span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5">LGSSMTP_SENT_QUIT</a>, </div><div class="line"><a name="l04057"></a><span class="lineno"> 4057</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:4050</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:4055</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:4048</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:4049</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:4053</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:4052</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:4056</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:4051</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:4054</div></div>
+<div class="fragment"><div class="line"><a name="l04061"></a><span class="lineno"> 4061</span>&#160;                       {</div><div class="line"><a name="l04062"></a><span class="lineno"> 4062</span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c">LGSSMTP_IDLE</a>, </div><div class="line"><a name="l04063"></a><span class="lineno"> 4063</span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933">LGSSMTP_CONNECTING</a>, </div><div class="line"><a name="l04064"></a><span class="lineno"> 4064</span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d">LGSSMTP_CONNECTED</a>, </div><div class="line"><a name="l04065"></a><span class="lineno"> 4065</span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad">LGSSMTP_SENT_HELO</a>, </div><div class="line"><a name="l04066"></a><span class="lineno"> 4066</span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab">LGSSMTP_SENT_FROM</a>, </div><div class="line"><a name="l04067"></a><span class="lineno"> 4067</span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83">LGSSMTP_SENT_TO</a>, </div><div class="line"><a name="l04068"></a><span class="lineno"> 4068</span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14">LGSSMTP_SENT_DATA</a>, </div><div class="line"><a name="l04069"></a><span class="lineno"> 4069</span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69">LGSSMTP_SENT_BODY</a>, </div><div class="line"><a name="l04070"></a><span class="lineno"> 4070</span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5">LGSSMTP_SENT_QUIT</a>, </div><div class="line"><a name="l04071"></a><span class="lineno"> 4071</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:4064</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:4069</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:4062</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:4063</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:4067</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:4066</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:4070</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:4065</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:4068</div></div>
 </div><!-- fragment -->
 </div>
 </div>
diff --git a/doc/html/libwebsockets_8h.html b/doc/html/libwebsockets_8h.html
index a65c4d5e..15899ed0 100644
--- a/doc/html/libwebsockets_8h.html
+++ b/doc/html/libwebsockets_8h.html
@@ -868,6 +868,8 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
 <tr class="separator:gad01014fed09759741b6d23afccfdaacc"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:ga869d8bdffb0f2a7ce08e3ce10d6be3d8"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__net.html#ga869d8bdffb0f2a7ce08e3ce10d6be3d8">lws_interface_to_sa</a> (int ipv6, const char *ifname, struct sockaddr_in *addr, size_t addrlen)</td></tr>
 <tr class="separator:ga869d8bdffb0f2a7ce08e3ce10d6be3d8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9f37d0e357de2ab4170723fcdb665d21"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga9f37d0e357de2ab4170723fcdb665d21">lws_snprintf</a> (char *str, size_t size, const char *format,...)</td></tr>
+<tr class="separator:ga9f37d0e357de2ab4170723fcdb665d21"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:ga58f906c6be0ca80efd813f694569dd4a"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga58f906c6be0ca80efd813f694569dd4a">lws_get_random</a> (struct lws_context *context, void *buf, int len)</td></tr>
 <tr class="separator:ga58f906c6be0ca80efd813f694569dd4a"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:gace5171b1dbbc03ec89a98f8afdb5c9af"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#gace5171b1dbbc03ec89a98f8afdb5c9af">lws_daemonize</a> (const char *_lock_path)</td></tr>
diff --git a/doc/html/libwebsockets_8h.js b/doc/html/libwebsockets_8h.js
index e3dd549e..a94b0641 100644
--- a/doc/html/libwebsockets_8h.js
+++ b/doc/html/libwebsockets_8h.js
@@ -484,6 +484,7 @@ var libwebsockets_8h =
     [ "lws_set_proxy", "group__context-and-vhost.html#ga7e9d5405547a457d86e0b4f0ae2bb1c4", null ],
     [ "lws_set_timeout", "group__timeout.html#gaced9f9237f6172fed9f730a2af51345a", null ],
     [ "lws_SHA1", "group__sha.html#ga7b09ab74646266f0b555103b3bb8dfe5", null ],
+    [ "lws_snprintf", "group__misc.html#ga9f37d0e357de2ab4170723fcdb665d21", null ],
     [ "lws_spa_create", "group__form-parsing.html#ga162f86762173a2bc8c28497941d74815", null ],
     [ "lws_spa_destroy", "group__form-parsing.html#gaaa482f07dad3f04b391cccf0a814e13b", null ],
     [ "lws_spa_finalize", "group__form-parsing.html#ga83835bf250ee3d4a60f36a182f2b8d24", null ],
diff --git a/doc/html/libwebsockets_8h_source.html b/doc/html/libwebsockets_8h_source.html
index 0377a07c..a536f350 100644
--- a/doc/html/libwebsockets_8h_source.html
+++ b/doc/html/libwebsockets_8h_source.html
@@ -71,9 +71,9 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
 <div class="title">libwebsockets.h</div>  </div>
 </div><!--header-->
 <div class="contents">
-<a href="libwebsockets_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * libwebsockets - small server side websockets and web server implementation</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Copyright (C) 2010-2016 Andy Green &lt;andy@warmcat.com&gt;</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> *  This library is free software; you can redistribute it and/or</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> *  modify it under the terms of the GNU Lesser General Public</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *  License as published by the Free Software Foundation:</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *  version 2.1 of the License.</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> *  This library is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> *  but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> *  Lesser General Public License for more details.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> *  You should have received a copy of the GNU Lesser General Public</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> *  License along with this library; if not, write to the Free Software</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="comment"> *  MA  02110-1301  USA</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#ifndef LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#define LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="preprocessor">#include &lt;cstddef&gt;</span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="preprocessor">#include &lt;cstdarg&gt;</span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="preprocessor">#ifdef MBED_OPERATORS</span></div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="preprocessor">#include &quot;mbed-drivers/mbed.h&quot;</span></div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="preprocessor">#include &quot;sal-iface-eth/EthernetInterface.h&quot;</span></div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="preprocessor">#include &quot;sockets/TCPListener.h&quot;</span></div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="preprocessor">#include &quot;sal-stack-lwip/lwipv4_init.h&quot;</span></div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="keyword">namespace </span>{</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;}</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacembed_1_1Sockets_1_1v0.html">mbed::Sockets::v0</a>;</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="keyword">struct </span>sockaddr_in;</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="keyword">struct </span>lws;</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="classlws__conn.html">   44</a></span>&#160;<span class="keyword">class </span><a class="code" href="classlws__conn.html">lws_conn</a> {</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;        <span class="keyword">public</span>:</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;        <a class="code" href="classlws__conn.html">lws_conn</a>():</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;                ts(NULL),</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;                wsi(NULL),</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;                writeable(1),</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;                awaiting_on_writeable(0)</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;        {</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;        }</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;        <span class="keywordtype">void</span> set_wsi(<span class="keyword">struct</span> lws *_wsi) { wsi = _wsi; }</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;        <span class="keywordtype">int</span> actual_onRX(Socket *s);</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;        <span class="keywordtype">void</span> onRX(Socket *s);</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;        <span class="keywordtype">void</span> onError(Socket *s, socket_error_t err);</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;        <span class="keywordtype">void</span> onDisconnect(TCPStream *s);</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;        <span class="keywordtype">void</span> onSent(Socket *s, uint16_t len);</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;        <span class="keywordtype">void</span> serialized_writeable(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;        TCPStream *ts;</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;        <span class="keyword">struct </span>lws *wsi;</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;        <span class="keywordtype">char</span> writeable;</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;        <span class="keywordtype">char</span> awaiting_on_writeable;</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;};</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="classlws__conn__listener.html">   72</a></span>&#160;<span class="keyword">class </span><a class="code" href="classlws__conn__listener.html">lws_conn_listener</a> : <a class="code" href="classlws__conn.html">lws_conn</a> {</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;        <a class="code" href="classlws__conn__listener.html">lws_conn_listener</a>():</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;                srv(SOCKET_STACK_LWIP_IPV4)</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;        {</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;                srv.setOnError(TCPStream::ErrorHandler_t(<span class="keyword">this</span>,</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;                                &amp;<a class="code" href="classlws__conn__listener.html#a271ac4f8ad5770b3bc96cce5b265b72c">lws_conn_listener::onError</a>));</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;        }</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;        <span class="keywordtype">void</span> start(<span class="keyword">const</span> uint16_t port); </div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;        <span class="keywordtype">void</span> onRX(Socket *s); </div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;        <span class="keywordtype">void</span> onError(Socket *s, socket_error_t err); </div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;        <span class="keywordtype">void</span> onIncoming(TCPListener *s, <span class="keywordtype">void</span> *impl); </div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;        <span class="keywordtype">void</span> onDisconnect(TCPStream *s); </div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;        TCPListener srv;</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;};</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;<span class="preprocessor">#include &lt;stdarg.h&gt;</span></div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;<span class="preprocessor">#if defined(MBED_OPERATORS) || defined(LWS_WITH_ESP8266)</span></div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;<span class="keyword">struct </span>sockaddr_in;</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;<span class="preprocessor">#define LWS_POSIX 0</span></div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;<span class="preprocessor">#define LWS_POSIX 1</span></div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;<span class="preprocessor">#include &quot;lws_config.h&quot;</span></div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;<span class="preprocessor">#if defined(WIN32) || defined(_WIN32)</span></div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;<span class="preprocessor">#ifndef WIN32_LEAN_AND_MEAN</span></div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;<span class="preprocessor">#define WIN32_LEAN_AND_MEAN</span></div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;<span class="preprocessor">#include &lt;winsock2.h&gt;</span></div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;<span class="preprocessor">#include &lt;ws2tcpip.h&gt;</span></div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;<span class="preprocessor">#include &lt;stddef.h&gt;</span></div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;<span class="preprocessor">#include &lt;basetsd.h&gt;</span></div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;<span class="preprocessor">#ifndef _WIN32_WCE</span></div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;<span class="preprocessor">#include &lt;fcntl.h&gt;</span></div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;<span class="preprocessor">#define _O_RDONLY       0x0000</span></div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;<span class="preprocessor">#define O_RDONLY        _O_RDONLY</span></div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;<span class="comment">// Visual studio older than 2015 and WIN_CE has only _stricmp</span></div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;<span class="preprocessor">#if (defined(_MSC_VER) &amp;&amp; _MSC_VER &lt; 1900) || defined(_WIN32_WCE)</span></div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;<span class="preprocessor">#define strcasecmp _stricmp</span></div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;<span class="preprocessor">#define strcasecmp stricmp</span></div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;<span class="preprocessor">#define getdtablesize() 30000</span></div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;<span class="preprocessor">#define LWS_INLINE __inline</span></div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;<span class="preprocessor">#define LWS_VISIBLE</span></div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;<span class="preprocessor">#define LWS_WARN_UNUSED_RESULT</span></div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;<span class="preprocessor">#define LWS_WARN_DEPRECATED</span></div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;<span class="preprocessor">#ifdef LWS_DLL</span></div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;<span class="preprocessor">#ifdef LWS_INTERNAL</span></div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;<span class="preprocessor">#define LWS_EXTERN extern __declspec(dllexport)</span></div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;<span class="preprocessor">#define LWS_EXTERN extern __declspec(dllimport)</span></div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;<span class="preprocessor">#define LWS_EXTERN</span></div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;<span class="preprocessor">#define LWS_INVALID_FILE INVALID_HANDLE_VALUE</span></div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;<span class="preprocessor">#define LWS_O_RDONLY _O_RDONLY</span></div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;<span class="preprocessor">#if !defined(_MSC_VER) || _MSC_VER &lt; 1900 </span><span class="comment">/* Visual Studio 2015 already defines this in &lt;stdio.h&gt; */</span><span class="preprocessor"></span></div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;<span class="preprocessor">#define snprintf _snprintf</span></div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;<span class="preprocessor">#ifndef __func__</span></div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;<span class="preprocessor">#define __func__ __FUNCTION__</span></div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;<span class="preprocessor">#else </span><span class="comment">/* NOT WIN32 */</span><span class="preprocessor"></span></div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;<span class="preprocessor">#include &lt;unistd.h&gt;</span></div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;<span class="preprocessor">#if defined(__NetBSD__) || defined(__FreeBSD__)</span></div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;<span class="preprocessor">#include &lt;netinet/in.h&gt;</span></div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;<span class="preprocessor">#define LWS_INLINE inline</span></div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;<span class="preprocessor">#define LWS_O_RDONLY O_RDONLY</span></div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;<span class="preprocessor">#if !defined(MBED_OPERATORS) &amp;&amp; !defined(LWS_WITH_ESP8266)</span></div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;<span class="preprocessor">#include &lt;poll.h&gt;</span></div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;<span class="preprocessor">#include &lt;netdb.h&gt;</span></div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;<span class="preprocessor">#define LWS_INVALID_FILE -1</span></div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;<span class="preprocessor">#define getdtablesize() (20)</span></div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;<span class="preprocessor">#define LWS_INVALID_FILE NULL</span></div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;<span class="preprocessor">#if defined(__GNUC__)</span></div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;<span class="comment">/* warn_unused_result attribute only supported by GCC 3.4 or later */</span></div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;<span class="preprocessor">#if __GNUC__ &gt;= 4 || (__GNUC__ == 3 &amp;&amp; __GNUC_MINOR__ &gt;= 4)</span></div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;<span class="preprocessor">#define LWS_WARN_UNUSED_RESULT __attribute__((warn_unused_result))</span></div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;<span class="preprocessor">#define LWS_WARN_UNUSED_RESULT</span></div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;<span class="preprocessor">#define LWS_VISIBLE __attribute__((visibility(&quot;default&quot;)))</span></div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;<span class="preprocessor">#define LWS_WARN_DEPRECATED __attribute__ ((deprecated))</span></div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;<span class="preprocessor">#define LWS_VISIBLE</span></div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;<span class="preprocessor">#define LWS_WARN_UNUSED_RESULT</span></div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;<span class="preprocessor">#define LWS_WARN_DEPRECATED</span></div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;<span class="preprocessor">#if defined(__ANDROID__)</span></div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;<span class="preprocessor">#include &lt;unistd.h&gt;</span></div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;<span class="preprocessor">#define getdtablesize() sysconf(_SC_OPEN_MAX)</span></div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;<span class="preprocessor">#ifdef LWS_USE_LIBEV</span></div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;<span class="preprocessor">#include &lt;ev.h&gt;</span></div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* LWS_USE_LIBEV */</span><span class="preprocessor"></span></div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;<span class="preprocessor">#ifdef LWS_USE_LIBUV</span></div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;<span class="preprocessor">#include &lt;uv.h&gt;</span></div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* LWS_USE_LIBUV */</span><span class="preprocessor"></span></div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;<span class="preprocessor">#ifndef LWS_EXTERN</span></div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;<span class="preprocessor">#define LWS_EXTERN extern</span></div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;<span class="preprocessor">#ifdef _WIN32</span></div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;<span class="preprocessor">#define random rand</span></div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;<span class="preprocessor">#include &lt;sys/time.h&gt;</span></div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;<span class="preprocessor">#include &lt;unistd.h&gt;</span></div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;<span class="preprocessor">#ifdef LWS_OPENSSL_SUPPORT</span></div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;<span class="preprocessor">#ifdef USE_WOLFSSL</span></div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;<span class="preprocessor">#ifdef USE_OLD_CYASSL</span></div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;<span class="preprocessor">#include &lt;cyassl/openssl/ssl.h&gt;</span></div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;<span class="preprocessor">#include &lt;cyassl/error-ssl.h&gt;</span></div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;<span class="preprocessor">#include &lt;wolfssl/openssl/ssl.h&gt;</span></div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;<span class="preprocessor">#include &lt;wolfssl/error-ssl.h&gt;</span></div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* not USE_OLD_CYASSL */</span><span class="preprocessor"></span></div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;<span class="preprocessor">#if defined(LWS_USE_POLARSSL)</span></div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;<span class="preprocessor">#include &lt;polarssl/ssl.h&gt;</span></div><div class="line"><a name="l00233"></a><span class="lineno"><a class="line" href="structlws__polarssl__context.html">  233</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__polarssl__context.html">lws_polarssl_context</a> {</div><div class="line"><a name="l00234"></a><span class="lineno"><a class="line" href="structlws__polarssl__context.html#a1872f2ea24878d807ae20ca8513674af">  234</a></span>&#160;        x509_crt <a class="code" href="structlws__polarssl__context.html#a1872f2ea24878d807ae20ca8513674af">ca</a>; </div><div class="line"><a name="l00235"></a><span class="lineno"><a class="line" href="structlws__polarssl__context.html#ae7e11c9129ff71c7ee71b3b2e320ff27">  235</a></span>&#160;        x509_crt <a class="code" href="structlws__polarssl__context.html#ae7e11c9129ff71c7ee71b3b2e320ff27">certificate</a>; </div><div class="line"><a name="l00236"></a><span class="lineno"><a class="line" href="structlws__polarssl__context.html#a919c33af37aab170f828d954de1fa270">  236</a></span>&#160;        rsa_context <a class="code" href="structlws__polarssl__context.html#a919c33af37aab170f828d954de1fa270">key</a>; </div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;};</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structlws__polarssl__context.html">lws_polarssl_context</a> <a class="code" href="structlws__polarssl__context.html">SSL_CTX</a>;</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;<span class="keyword">typedef</span> ssl_context SSL;</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;<span class="preprocessor">#if defined(LWS_USE_MBEDTLS)</span></div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;<span class="preprocessor">#include &lt;mbedtls/ssl.h&gt;</span></div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;<span class="preprocessor">#include &lt;openssl/ssl.h&gt;</span></div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;<span class="preprocessor">#include &lt;openssl/err.h&gt;</span></div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* not USE_MBEDTLS */</span><span class="preprocessor"></span></div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* not USE_POLARSSL */</span><span class="preprocessor"></span></div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* not USE_WOLFSSL */</span><span class="preprocessor"></span></div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;<span class="preprocessor">#define CONTEXT_PORT_NO_LISTEN -1</span></div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;</div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;<span class="keyword">enum</span> lws_log_levels {</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;        LLL_ERR = 1 &lt;&lt; 0,</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;        LLL_WARN = 1 &lt;&lt; 1,</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;        LLL_NOTICE = 1 &lt;&lt; 2,</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;        LLL_INFO = 1 &lt;&lt; 3,</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;        LLL_DEBUG = 1 &lt;&lt; 4,</div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;        LLL_PARSER = 1 &lt;&lt; 5,</div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;        LLL_HEADER = 1 &lt;&lt; 6,</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;        LLL_EXT = 1 &lt;&lt; 7,</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;        LLL_CLIENT = 1 &lt;&lt; 8,</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;        LLL_LATENCY = 1 &lt;&lt; 9,</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;        LLL_COUNT = 10 <span class="comment">/* set to count of valid flags */</span></div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;};</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span> _lws_log(<span class="keywordtype">int</span> filter, <span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...);</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span> _lws_logv(<span class="keywordtype">int</span> filter, <span class="keyword">const</span> <span class="keywordtype">char</span> *format, va_list vl);</div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;<a class="code" href="group__log.html#ga42e39775c6b69b7251bdbf5a2cdd5dcd">lwsl_timestamp</a>(<span class="keywordtype">int</span> level, <span class="keywordtype">char</span> *p, <span class="keywordtype">int</span> len);</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;<span class="preprocessor">#define lwsl_err(...) _lws_log(LLL_ERR, __VA_ARGS__)</span></div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;<span class="preprocessor">#if !defined(LWS_WITH_NO_LOGS)</span></div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;<span class="comment">/* notice, warn and log are always compiled in */</span></div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;<span class="preprocessor">#define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__)</span></div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;<span class="preprocessor">#define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__)</span></div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;<span class="comment"> *  weaker logging can be deselected at configure time using --disable-debug</span></div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;<span class="comment"> *  that gets rid of the overhead of checking while keeping _warn and _err</span></div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;<span class="comment"> *  active</span></div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;</div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;<span class="preprocessor">#if defined(LWS_WITH_ESP8266)</span></div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;<span class="preprocessor">#undef _DEBUG</span></div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;<span class="preprocessor">#ifdef _DEBUG</span></div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;<span class="preprocessor">#if defined(LWS_WITH_NO_LOGS)</span></div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;<span class="comment">/* notice, warn and log are always compiled in */</span></div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;<span class="comment">//#define lwsl_err(...) _lws_log(LLL_ERR, __VA_ARGS__)</span></div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;<span class="preprocessor">#define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__)</span></div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;<span class="preprocessor">#define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__)</span></div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;<span class="preprocessor">#define lwsl_info(...) _lws_log(LLL_INFO, __VA_ARGS__)</span></div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;<span class="preprocessor">#define lwsl_debug(...) _lws_log(LLL_DEBUG, __VA_ARGS__)</span></div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;<span class="preprocessor">#define lwsl_parser(...) _lws_log(LLL_PARSER, __VA_ARGS__)</span></div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;<span class="preprocessor">#define lwsl_header(...)  _lws_log(LLL_HEADER, __VA_ARGS__)</span></div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;<span class="preprocessor">#define lwsl_ext(...)  _lws_log(LLL_EXT, __VA_ARGS__)</span></div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;<span class="preprocessor">#define lwsl_client(...) _lws_log(LLL_CLIENT, __VA_ARGS__)</span></div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;<span class="preprocessor">#define lwsl_latency(...) _lws_log(LLL_LATENCY, __VA_ARGS__)</span></div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;</div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span> <a class="code" href="group__log.html#ga898b1f03872ad019f507d4e35bbefa90">lwsl_hexdump</a>(<span class="keywordtype">void</span> *buf, <span class="keywordtype">size_t</span> len);</div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;</div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;<span class="preprocessor">#else </span><span class="comment">/* no debug */</span><span class="preprocessor"></span></div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;<span class="preprocessor">#if defined(LWS_WITH_NO_LOGS)</span></div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;<span class="comment">//#define lwsl_err(...) do {} while(0)</span></div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;<span class="preprocessor">#define lwsl_warn(...) do {} while(0)</span></div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;<span class="preprocessor">#define lwsl_notice(...) do {} while(0)</span></div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;<span class="preprocessor">#define lwsl_info(...) do {} while(0)</span></div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;<span class="preprocessor">#define lwsl_debug(...) do {} while(0)</span></div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;<span class="preprocessor">#define lwsl_parser(...) do {} while(0)</span></div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;<span class="preprocessor">#define lwsl_header(...) do {} while(0)</span></div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;<span class="preprocessor">#define lwsl_ext(...) do {} while(0)</span></div><div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;<span class="preprocessor">#define lwsl_client(...) do {} while(0)</span></div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;<span class="preprocessor">#define lwsl_latency(...) do {} while(0)</span></div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;<span class="preprocessor">#define lwsl_hexdump(a, b)</span></div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;</div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;</div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span></div><div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;<a class="code" href="group__log.html#ga244647f9e1bf0097ccdde66d74f41e26">lws_set_log_level</a>(<span class="keywordtype">int</span> level,</div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;                  <span class="keywordtype">void</span> (*log_emit_function)(<span class="keywordtype">int</span> level, <span class="keyword">const</span> <span class="keywordtype">char</span> *line));</div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;</div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span></div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;<a class="code" href="group__log.html#gab7c0fc936cc9f1eb58e2bb234c15147c">lwsl_emit_syslog</a>(<span class="keywordtype">int</span> level, <span class="keyword">const</span> <span class="keywordtype">char</span> *line);</div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;</div><div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;</div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;</div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;<span class="preprocessor">#include &lt;stddef.h&gt;</span></div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;</div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;<span class="preprocessor">#ifndef lws_container_of</span></div><div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;<span class="preprocessor">#define lws_container_of(P,T,M) ((T *)((char *)(P) - offsetof(T, M)))</span></div><div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;</div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;</div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;<span class="keyword">struct </span>lws;</div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;<span class="preprocessor">#ifndef ARRAY_SIZE</span></div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;<span class="preprocessor">#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))</span></div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;</div><div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;<span class="comment">/* api change list for user code to test against */</span></div><div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;</div><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;<span class="preprocessor">#define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_ARG</span></div><div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;</div><div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;<span class="comment">/* the struct lws_protocols has the id field present */</span></div><div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;<span class="preprocessor">#define LWS_FEATURE_PROTOCOLS_HAS_ID_FIELD</span></div><div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;</div><div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;<span class="comment">/* you can call lws_get_peer_write_allowance */</span></div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;<span class="preprocessor">#define LWS_FEATURE_PROTOCOLS_HAS_PEER_WRITE_ALLOWANCE</span></div><div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;</div><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;<span class="comment">/* extra parameter introduced in 917f43ab821 */</span></div><div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;<span class="preprocessor">#define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_LEN</span></div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;</div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;<span class="comment">/* File operations stuff exists */</span></div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;<span class="preprocessor">#define LWS_FEATURE_FOPS</span></div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;</div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;</div><div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;<span class="preprocessor">#if defined(_WIN32)</span></div><div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;<span class="keyword">typedef</span> SOCKET lws_sockfd_type;</div><div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;<span class="keyword">typedef</span> HANDLE lws_filefd_type;</div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;<span class="preprocessor">#define lws_sockfd_valid(sfd) (!!sfd)</span></div><div class="line"><a name="l00413"></a><span class="lineno"><a class="line" href="structlws__pollfd.html">  413</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__pollfd.html">lws_pollfd</a> {</div><div class="line"><a name="l00414"></a><span class="lineno"><a class="line" href="structlws__pollfd.html#a714cf5ca90b41926117fdde9fa6542be">  414</a></span>&#160;        lws_sockfd_type <a class="code" href="structlws__pollfd.html#a714cf5ca90b41926117fdde9fa6542be">fd</a>; </div><div class="line"><a name="l00415"></a><span class="lineno"><a class="line" href="structlws__pollfd.html#ac393db6fc7fb6ed8fe7ca20936908ee9">  415</a></span>&#160;        SHORT <a class="code" href="structlws__pollfd.html#ac393db6fc7fb6ed8fe7ca20936908ee9">events</a>; </div><div class="line"><a name="l00416"></a><span class="lineno"><a class="line" href="structlws__pollfd.html#ae7cecfe7511c59d4a3a44f876d030932">  416</a></span>&#160;        SHORT <a class="code" href="structlws__pollfd.html#ae7cecfe7511c59d4a3a44f876d030932">revents</a>; </div><div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;};</div><div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;<span class="preprocessor">#define LWS_POLLHUP (FD_CLOSE)</span></div><div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;<span class="preprocessor">#define LWS_POLLIN (FD_READ | FD_ACCEPT)</span></div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;<span class="preprocessor">#define LWS_POLLOUT (FD_WRITE)</span></div><div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;</div><div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;<span class="preprocessor">#if defined(MBED_OPERATORS)</span></div><div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;<span class="comment">/* it&#39;s a class lws_conn * */</span></div><div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;<span class="keyword">typedef</span> <span class="keywordtype">void</span> * lws_sockfd_type;</div><div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;<span class="keyword">typedef</span> <span class="keywordtype">void</span> * lws_filefd_type;</div><div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;<span class="preprocessor">#define lws_sockfd_valid(sfd) (!!sfd)</span></div><div class="line"><a name="l00428"></a><span class="lineno"><a class="line" href="structpollfd.html">  428</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structpollfd.html">pollfd</a> {</div><div class="line"><a name="l00429"></a><span class="lineno"><a class="line" href="structpollfd.html#af084f089bdece61d177f85782d6673d0">  429</a></span>&#160;        lws_sockfd_type <a class="code" href="structpollfd.html#af084f089bdece61d177f85782d6673d0">fd</a>; </div><div class="line"><a name="l00430"></a><span class="lineno"><a class="line" href="structpollfd.html#ac9b2f2c5b1f9a7487eb57e67cd4960ef">  430</a></span>&#160;        <span class="keywordtype">short</span> <a class="code" href="structpollfd.html#ac9b2f2c5b1f9a7487eb57e67cd4960ef">events</a>; </div><div class="line"><a name="l00431"></a><span class="lineno"><a class="line" href="structpollfd.html#aafb457d11cac415faf0e1e2b825118c2">  431</a></span>&#160;        <span class="keywordtype">short</span> <a class="code" href="structpollfd.html#aafb457d11cac415faf0e1e2b825118c2">revents</a>; </div><div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;};</div><div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;<span class="preprocessor">#define POLLIN          0x0001</span></div><div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;<span class="preprocessor">#define POLLPRI         0x0002</span></div><div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;<span class="preprocessor">#define POLLOUT         0x0004</span></div><div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;<span class="preprocessor">#define POLLERR         0x0008</span></div><div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;<span class="preprocessor">#define POLLHUP         0x0010</span></div><div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;<span class="preprocessor">#define POLLNVAL        0x0020</span></div><div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;</div><div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;<span class="keyword">struct </span>lws;</div><div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;</div><div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;<span class="keywordtype">void</span> * mbed3_create_tcp_stream_socket(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;<span class="keywordtype">void</span> mbed3_delete_tcp_stream_socket(<span class="keywordtype">void</span> *sockfd);</div><div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;<span class="keywordtype">void</span> mbed3_tcp_stream_bind(<span class="keywordtype">void</span> *sock, <span class="keywordtype">int</span> port, <span class="keyword">struct</span> lws *);</div><div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;<span class="keywordtype">void</span> mbed3_tcp_stream_accept(<span class="keywordtype">void</span> *sock, <span class="keyword">struct</span> lws *);</div><div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;<span class="preprocessor">#if defined(LWS_WITH_ESP8266)</span></div><div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;</div><div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;<span class="preprocessor">#include &lt;user_interface.h&gt;</span></div><div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;<span class="preprocessor">#include &lt;espconn.h&gt;</span></div><div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;</div><div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>espconn * lws_sockfd_type;</div><div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;<span class="keyword">typedef</span> <span class="keywordtype">void</span> * lws_filefd_type;</div><div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;<span class="preprocessor">#define lws_sockfd_valid(sfd) (!!sfd)</span></div><div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;<span class="keyword">struct </span><a class="code" href="structpollfd.html">pollfd</a> {</div><div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;        lws_sockfd_type fd; </div><div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;        <span class="keywordtype">short</span> events; </div><div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;        <span class="keywordtype">short</span> revents; </div><div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;};</div><div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;<span class="preprocessor">#define POLLIN          0x0001</span></div><div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;<span class="preprocessor">#define POLLPRI         0x0002</span></div><div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;<span class="preprocessor">#define POLLOUT         0x0004</span></div><div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;<span class="preprocessor">#define POLLERR         0x0008</span></div><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;<span class="preprocessor">#define POLLHUP         0x0010</span></div><div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;<span class="preprocessor">#define POLLNVAL        0x0020</span></div><div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;</div><div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;<span class="keyword">struct </span>lws_vhost;</div><div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;</div><div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;lws_sockfd_type esp8266_create_tcp_listen_socket(<span class="keyword">struct</span> lws_vhost *vh);</div><div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;<span class="keywordtype">void</span> esp8266_tcp_stream_accept(lws_sockfd_type fd, <span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;</div><div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;<span class="preprocessor">#include &lt;os_type.h&gt;</span></div><div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;<span class="preprocessor">#include &lt;osapi.h&gt;</span></div><div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;<span class="preprocessor">#include &quot;ets_sys.h&quot;</span></div><div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;</div><div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;<span class="keywordtype">int</span> ets_snprintf(<span class="keywordtype">char</span> *str, <span class="keywordtype">size_t</span> size, <span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...);</div><div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;<span class="preprocessor">#define snprintf  ets_snprintf</span></div><div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;</div><div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;<span class="keyword">typedef</span> os_timer_t uv_timer_t;</div><div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;<span class="keyword">typedef</span> <span class="keywordtype">void</span> uv_cb_t(uv_timer_t *);</div><div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;</div><div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;<span class="keywordtype">void</span> os_timer_disarm(<span class="keywordtype">void</span> *);</div><div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;<span class="keywordtype">void</span> os_timer_setfn(os_timer_t *, os_timer_func_t *, <span class="keywordtype">void</span> *);</div><div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;</div><div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;<span class="keywordtype">void</span> ets_timer_arm_new(os_timer_t *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>);</div><div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;</div><div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;<span class="comment">//void os_timer_arm(os_timer_t *, int, int);</span></div><div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;</div><div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;<span class="preprocessor">#define UV_VERSION_MAJOR 1</span></div><div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;</div><div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;<span class="preprocessor">#define lws_uv_getloop(a, b) (NULL)</span></div><div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;</div><div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;<span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> uv_timer_init(<span class="keywordtype">void</span> *l, uv_timer_t *t)</div><div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;{</div><div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;        (void)l;</div><div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;        memset(t, 0, <span class="keyword">sizeof</span>(*t));</div><div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;        os_timer_disarm(t);</div><div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;}</div><div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;</div><div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;<span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> uv_timer_start(uv_timer_t *t, uv_cb_t *cb, <span class="keywordtype">int</span> first, <span class="keywordtype">int</span> rep)</div><div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;{</div><div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;        os_timer_setfn(t, (os_timer_func_t *)cb, t);</div><div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;        <span class="comment">/* ms, repeat */</span></div><div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;        os_timer_arm(t, first, !!rep);</div><div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;}</div><div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;</div><div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;<span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> uv_timer_stop(uv_timer_t *t)</div><div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;{</div><div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;        os_timer_disarm(t);</div><div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;}</div><div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;</div><div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;<span class="keyword">typedef</span> <span class="keywordtype">int</span> lws_sockfd_type;</div><div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;<span class="keyword">typedef</span> <span class="keywordtype">int</span> lws_filefd_type;</div><div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;<span class="preprocessor">#define lws_sockfd_valid(sfd) (sfd &gt;= 0)</span></div><div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;</div><div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;<span class="preprocessor">#define lws_pollfd pollfd</span></div><div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;<span class="preprocessor">#define LWS_POLLHUP (POLLHUP|POLLERR)</span></div><div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;<span class="preprocessor">#define LWS_POLLIN (POLLIN)</span></div><div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;<span class="preprocessor">#define LWS_POLLOUT (POLLOUT)</span></div><div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;</div><div class="line"><a name="l00527"></a><span class="lineno"><a class="line" href="structlws__pollargs.html">  527</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__pollargs.html">lws_pollargs</a> {</div><div class="line"><a name="l00528"></a><span class="lineno"><a class="line" href="structlws__pollargs.html#af14a48ef4e78128aef9a76902b104a81">  528</a></span>&#160;        lws_sockfd_type <a class="code" href="structlws__pollargs.html#af14a48ef4e78128aef9a76902b104a81">fd</a>;     </div><div class="line"><a name="l00529"></a><span class="lineno"><a class="line" href="structlws__pollargs.html#a00bbffea9f55de342783e32d71ce1de6">  529</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__pollargs.html#a00bbffea9f55de342783e32d71ce1de6">events</a>;             </div><div class="line"><a name="l00530"></a><span class="lineno"><a class="line" href="structlws__pollargs.html#a437fec0de5cf264371e1ab5a401e86d8">  530</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__pollargs.html#a437fec0de5cf264371e1ab5a401e86d8">prev_events</a>;        </div><div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;};</div><div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;</div><div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__tokens.html">lws_tokens</a>;</div><div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__token__limits.html">lws_token_limits</a>;</div><div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;</div><div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;</div><div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;<span class="comment"> * NOTE: These public enums are part of the abi.  If you want to add one,</span></div><div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;<span class="comment"> * add it at where specified so existing users are unaffected.</span></div><div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00550"></a><span class="lineno"><a class="line" href="group__wsclose.html#gae399c571df32ba532c0ca67da9284985">  550</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="group__wsclose.html#gae399c571df32ba532c0ca67da9284985">lws_close_status</a> {</div><div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;        LWS_CLOSE_STATUS_NOSTATUS                               =    0,</div><div class="line"><a name="l00552"></a><span class="lineno"><a class="line" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a3ffa38d5081b85fb739e02a747ccf2c4">  552</a></span>&#160;        <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a3ffa38d5081b85fb739e02a747ccf2c4">LWS_CLOSE_STATUS_NORMAL</a>                                 = 1000,</div><div class="line"><a name="l00555"></a><span class="lineno"><a class="line" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218">  555</a></span>&#160;        <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218">LWS_CLOSE_STATUS_GOINGAWAY</a>                              = 1001,</div><div class="line"><a name="l00558"></a><span class="lineno"><a class="line" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a1bb501d212fa4d57053db681b1dfab98">  558</a></span>&#160;        <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a1bb501d212fa4d57053db681b1dfab98">LWS_CLOSE_STATUS_PROTOCOL_ERR</a>                           = 1002,</div><div class="line"><a name="l00561"></a><span class="lineno"><a class="line" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a462c99b05459df700919cfd3f53c8276">  561</a></span>&#160;        <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a462c99b05459df700919cfd3f53c8276">LWS_CLOSE_STATUS_UNACCEPTABLE_OPCODE</a>                    = 1003,</div><div class="line"><a name="l00566"></a><span class="lineno"><a class="line" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2">  566</a></span>&#160;        <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2">LWS_CLOSE_STATUS_RESERVED</a>                               = 1004,</div><div class="line"><a name="l00568"></a><span class="lineno"><a class="line" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a4b8a3b7ce6f731e5248e4b0fb64a5044">  568</a></span>&#160;        <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a4b8a3b7ce6f731e5248e4b0fb64a5044">LWS_CLOSE_STATUS_NO_STATUS</a>                              = 1005,</div><div class="line"><a name="l00573"></a><span class="lineno"><a class="line" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a68b3d34bebd88547dcfa5cadba0acd6c">  573</a></span>&#160;        <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a68b3d34bebd88547dcfa5cadba0acd6c">LWS_CLOSE_STATUS_ABNORMAL_CLOSE</a>                         = 1006,</div><div class="line"><a name="l00579"></a><span class="lineno"><a class="line" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050">  579</a></span>&#160;        <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050">LWS_CLOSE_STATUS_INVALID_PAYLOAD</a>                        = 1007,</div><div class="line"><a name="l00584"></a><span class="lineno"><a class="line" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad09e68295eabdddcba4e332fbea70ae5">  584</a></span>&#160;        <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad09e68295eabdddcba4e332fbea70ae5">LWS_CLOSE_STATUS_POLICY_VIOLATION</a>                       = 1008,</div><div class="line"><a name="l00590"></a><span class="lineno"><a class="line" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8">  590</a></span>&#160;        <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8">LWS_CLOSE_STATUS_MESSAGE_TOO_LARGE</a>                      = 1009,</div><div class="line"><a name="l00594"></a><span class="lineno"><a class="line" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e">  594</a></span>&#160;        <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e">LWS_CLOSE_STATUS_EXTENSION_REQUIRED</a>                     = 1010,</div><div class="line"><a name="l00602"></a><span class="lineno"><a class="line" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad0869604d79e13700ae5d196a431b350">  602</a></span>&#160;        <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad0869604d79e13700ae5d196a431b350">LWS_CLOSE_STATUS_UNEXPECTED_CONDITION</a>                   = 1011,</div><div class="line"><a name="l00606"></a><span class="lineno"><a class="line" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad2b477a91c8445bf34ecd43977f9b390">  606</a></span>&#160;        <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad2b477a91c8445bf34ecd43977f9b390">LWS_CLOSE_STATUS_TLS_FAILURE</a>                            = 1015,</div><div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;        <span class="comment">/****** add new things just above ---^ ******/</span></div><div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;</div><div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;        LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY               = 9999,</div><div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;};</div><div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;</div><div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span></div><div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;<a class="code" href="group__wsclose.html#gaa1c863415d1783cd8de7938aa6efa262">lws_close_reason</a>(<span class="keyword">struct</span> lws *wsi, <span class="keyword">enum</span> <a class="code" href="group__wsclose.html#gae399c571df32ba532c0ca67da9284985">lws_close_status</a> status,</div><div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;                 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *buf, <span class="keywordtype">size_t</span> len);</div><div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;</div><div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;</div><div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;<span class="keyword">struct </span>lws;</div><div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;<span class="keyword">struct </span>lws_context;</div><div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;<span class="comment">/* needed even with extensions disabled for create context */</span></div><div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__extension.html">lws_extension</a>;</div><div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;</div><div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;</div><div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;</div><div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;<span class="comment"> * NOTE: These public enums are part of the abi.  If you want to add one,</span></div><div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;<span class="comment"> * add it at where specified so existing users are unaffected.</span></div><div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00660"></a><span class="lineno"><a class="line" href="group__usercb.html#gad62860e19975ba4c4af401c3cdb6abf7">  660</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="group__usercb.html#gad62860e19975ba4c4af401c3cdb6abf7">lws_callback_reasons</a> {</div><div class="line"><a name="l00661"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a24d39bf1cfc0bad9d92da9ac1717e439">  661</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a24d39bf1cfc0bad9d92da9ac1717e439">LWS_CALLBACK_ESTABLISHED</a>                                =  0,</div><div class="line"><a name="l00665"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ad8c6207b0c4e732f3d507f0fb79370e8">  665</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ad8c6207b0c4e732f3d507f0fb79370e8">LWS_CALLBACK_CLIENT_CONNECTION_ERROR</a>                    =  1,</div><div class="line"><a name="l00709"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa536e574a642ff3ab9e12bff7ba2c6a2">  709</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa536e574a642ff3ab9e12bff7ba2c6a2">LWS_CALLBACK_CLIENT_FILTER_PRE_ESTABLISH</a>                =  2,</div><div class="line"><a name="l00716"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7e12418eec9bce85735e6460176ab604">  716</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7e12418eec9bce85735e6460176ab604">LWS_CALLBACK_CLIENT_ESTABLISHED</a>                         =  3,</div><div class="line"><a name="l00719"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a48a9590e5e18c7920282e094a0bfd9d8">  719</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a48a9590e5e18c7920282e094a0bfd9d8">LWS_CALLBACK_CLOSED</a>                                     =  4,</div><div class="line"><a name="l00721"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a838b18d255c1b94a533287ba302a2eba">  721</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a838b18d255c1b94a533287ba302a2eba">LWS_CALLBACK_CLOSED_HTTP</a>                                =  5,</div><div class="line"><a name="l00723"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a492c1b1c0ac0ed980042ee732fe2990c">  723</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a492c1b1c0ac0ed980042ee732fe2990c">LWS_CALLBACK_RECEIVE</a>                                    =  6,</div><div class="line"><a name="l00727"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2db02fc6e1c17ab62b52109d1aa9d738">  727</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2db02fc6e1c17ab62b52109d1aa9d738">LWS_CALLBACK_RECEIVE_PONG</a>                               =  7,</div><div class="line"><a name="l00729"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7abbbe7a0a67c5866ca9109d46823fc5b1">  729</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7abbbe7a0a67c5866ca9109d46823fc5b1">LWS_CALLBACK_CLIENT_RECEIVE</a>                             =  8,</div><div class="line"><a name="l00732"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a136a7cec11c3afd13245623bd84e76c9">  732</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a136a7cec11c3afd13245623bd84e76c9">LWS_CALLBACK_CLIENT_RECEIVE_PONG</a>                        =  9,</div><div class="line"><a name="l00734"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8e8b2e6dbeac76d8d126947d2166a514">  734</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8e8b2e6dbeac76d8d126947d2166a514">LWS_CALLBACK_CLIENT_WRITEABLE</a>                           = 10,</div><div class="line"><a name="l00742"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7ec8e2e9557ee02a4fc9f7dec7e2babc">  742</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7ec8e2e9557ee02a4fc9f7dec7e2babc">LWS_CALLBACK_SERVER_WRITEABLE</a>                           = 11,</div><div class="line"><a name="l00744"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae8d1de0bb56e03aa58cb4d44b18edd2e">  744</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae8d1de0bb56e03aa58cb4d44b18edd2e">LWS_CALLBACK_HTTP</a>                                       = 12,</div><div class="line"><a name="l00758"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac4c68e00efcf1ff7bda7ada462aff8ae">  758</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac4c68e00efcf1ff7bda7ada462aff8ae">LWS_CALLBACK_HTTP_BODY</a>                                  = 13,</div><div class="line"><a name="l00761"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2fce9a8608220f32abbf1422a5498804">  761</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2fce9a8608220f32abbf1422a5498804">LWS_CALLBACK_HTTP_BODY_COMPLETION</a>                       = 14,</div><div class="line"><a name="l00763"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa627548e1296e654fcfab463ec3c9587">  763</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa627548e1296e654fcfab463ec3c9587">LWS_CALLBACK_HTTP_FILE_COMPLETION</a>                       = 15,</div><div class="line"><a name="l00765"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afedadfb3cde37a8ea4c84ed535f26d09">  765</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afedadfb3cde37a8ea4c84ed535f26d09">LWS_CALLBACK_HTTP_WRITEABLE</a>                             = 16,</div><div class="line"><a name="l00767"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a026502768778b8d79d62dd0fe4375fc6">  767</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a026502768778b8d79d62dd0fe4375fc6">LWS_CALLBACK_FILTER_NETWORK_CONNECTION</a>                  = 17,</div><div class="line"><a name="l00778"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a75199176c82c1a56e4a6bbf1cc30c12c">  778</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a75199176c82c1a56e4a6bbf1cc30c12c">LWS_CALLBACK_FILTER_HTTP_CONNECTION</a>                     = 18,</div><div class="line"><a name="l00790"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae9734e1d7af2abf291665ce9e4a728d3">  790</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae9734e1d7af2abf291665ce9e4a728d3">LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED</a>             = 19,</div><div class="line"><a name="l00798"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7accd8753672d319a30b4b4c2fb775e84d">  798</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7accd8753672d319a30b4b4c2fb775e84d">LWS_CALLBACK_FILTER_PROTOCOL_CONNECTION</a>                 = 20,</div><div class="line"><a name="l00810"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae4986291b7a810fe290851d73bebeb1c">  810</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae4986291b7a810fe290851d73bebeb1c">LWS_CALLBACK_OPENSSL_LOAD_EXTRA_CLIENT_VERIFY_CERTS</a>     = 21,</div><div class="line"><a name="l00817"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a06006e98d27e1e884364d88317f83493">  817</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a06006e98d27e1e884364d88317f83493">LWS_CALLBACK_OPENSSL_LOAD_EXTRA_SERVER_VERIFY_CERTS</a>     = 22,</div><div class="line"><a name="l00823"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae5ad65d779b7eab32ab67ceff91a3bac">  823</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae5ad65d779b7eab32ab67ceff91a3bac">LWS_CALLBACK_OPENSSL_PERFORM_CLIENT_CERT_VERIFICATION</a>   = 23,</div><div class="line"><a name="l00841"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a909cc2a7018864b0b71abacc4058fd8f">  841</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a909cc2a7018864b0b71abacc4058fd8f">LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER</a>             = 24,</div><div class="line"><a name="l00865"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a390da3639296660a78cc1a5dcb19037e">  865</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a390da3639296660a78cc1a5dcb19037e">LWS_CALLBACK_CONFIRM_EXTENSION_OKAY</a>                     = 25,</div><div class="line"><a name="l00876"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a1ce5b22039ca37ee224d00047596ea46">  876</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a1ce5b22039ca37ee224d00047596ea46">LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED</a>         = 26,</div><div class="line"><a name="l00885"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ad5d34583e3556e153eda91620b48cc49">  885</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ad5d34583e3556e153eda91620b48cc49">LWS_CALLBACK_PROTOCOL_INIT</a>                              = 27,</div><div class="line"><a name="l00888"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a54269ca88508e6efd3afdb9d360a9caa">  888</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a54269ca88508e6efd3afdb9d360a9caa">LWS_CALLBACK_PROTOCOL_DESTROY</a>                           = 28,</div><div class="line"><a name="l00893"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afd8fd77a1cc9405fcb4f26915d7f2d01">  893</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afd8fd77a1cc9405fcb4f26915d7f2d01">LWS_CALLBACK_WSI_CREATE</a>                                 = 29,</div><div class="line"><a name="l00895"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aca834dc035b7f7486f9ce40fde54fe9e">  895</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aca834dc035b7f7486f9ce40fde54fe9e">LWS_CALLBACK_WSI_DESTROY</a>                                = 30,</div><div class="line"><a name="l00897"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7adfb41c92e2522712207ef7f2462b5e34">  897</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7adfb41c92e2522712207ef7f2462b5e34">LWS_CALLBACK_GET_THREAD_ID</a>                              = 31,</div><div class="line"><a name="l00902"></a><span class="lineno">  902</span>&#160;        <span class="comment">/* external poll() management support */</span></div><div class="line"><a name="l00903"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ab69783a9fbf2ca71ad70706bda77b412">  903</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ab69783a9fbf2ca71ad70706bda77b412">LWS_CALLBACK_ADD_POLL_FD</a>                                = 32,</div><div class="line"><a name="l00919"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a1df60f314710236f9b53efbf468da768">  919</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a1df60f314710236f9b53efbf468da768">LWS_CALLBACK_DEL_POLL_FD</a>                                = 33,</div><div class="line"><a name="l00925"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa87d2e82fffa42c3680c7403ef94216e">  925</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa87d2e82fffa42c3680c7403ef94216e">LWS_CALLBACK_CHANGE_MODE_POLL_FD</a>                        = 34,</div><div class="line"><a name="l00933"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8909732521d379179003d97ab7a05428">  933</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8909732521d379179003d97ab7a05428">LWS_CALLBACK_LOCK_POLL</a>                                  = 35,</div><div class="line"><a name="l00945"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a0e9e3dd667c0c42cdbe1a3d921f4fd79">  945</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a0e9e3dd667c0c42cdbe1a3d921f4fd79">LWS_CALLBACK_UNLOCK_POLL</a>                                = 36,</div><div class="line"><a name="l00948"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa46f705dcf97502e95627ffde614f98b">  948</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa46f705dcf97502e95627ffde614f98b">LWS_CALLBACK_OPENSSL_CONTEXT_REQUIRES_PRIVATE_KEY</a>       = 37,</div><div class="line"><a name="l00956"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac3fc5bbb55e69f90396526287ee84a51">  956</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac3fc5bbb55e69f90396526287ee84a51">LWS_CALLBACK_WS_PEER_INITIATED_CLOSE</a>                    = 38,</div><div class="line"><a name="l00965"></a><span class="lineno">  965</span>&#160;        LWS_CALLBACK_WS_EXT_DEFAULTS                            = 39,</div><div class="line"><a name="l00968"></a><span class="lineno">  968</span>&#160;        LWS_CALLBACK_CGI                                        = 40,</div><div class="line"><a name="l00970"></a><span class="lineno">  970</span>&#160;        LWS_CALLBACK_CGI_TERMINATED                             = 41,</div><div class="line"><a name="l00972"></a><span class="lineno">  972</span>&#160;        LWS_CALLBACK_CGI_STDIN_DATA                             = 42,</div><div class="line"><a name="l00974"></a><span class="lineno">  974</span>&#160;        LWS_CALLBACK_CGI_STDIN_COMPLETED                        = 43,</div><div class="line"><a name="l00976"></a><span class="lineno">  976</span>&#160;        LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP                    = 44,</div><div class="line"><a name="l00978"></a><span class="lineno">  978</span>&#160;        LWS_CALLBACK_CLOSED_CLIENT_HTTP                         = 45,</div><div class="line"><a name="l00980"></a><span class="lineno">  980</span>&#160;        LWS_CALLBACK_RECEIVE_CLIENT_HTTP                        = 46,</div><div class="line"><a name="l00982"></a><span class="lineno">  982</span>&#160;        LWS_CALLBACK_COMPLETED_CLIENT_HTTP                      = 47,</div><div class="line"><a name="l00984"></a><span class="lineno">  984</span>&#160;        LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ                   = 48,</div><div class="line"><a name="l00986"></a><span class="lineno">  986</span>&#160;        LWS_CALLBACK_HTTP_BIND_PROTOCOL                         = 49,</div><div class="line"><a name="l00988"></a><span class="lineno">  988</span>&#160;        LWS_CALLBACK_HTTP_DROP_PROTOCOL                         = 50,</div><div class="line"><a name="l00990"></a><span class="lineno">  990</span>&#160;        LWS_CALLBACK_CHECK_ACCESS_RIGHTS                        = 51,</div><div class="line"><a name="l00992"></a><span class="lineno">  992</span>&#160;        LWS_CALLBACK_PROCESS_HTML                               = 52,</div><div class="line"><a name="l00994"></a><span class="lineno">  994</span>&#160;        LWS_CALLBACK_ADD_HEADERS                                = 53,</div><div class="line"><a name="l00996"></a><span class="lineno">  996</span>&#160;        LWS_CALLBACK_SESSION_INFO                               = 54,</div><div class="line"><a name="l00999"></a><span class="lineno">  999</span>&#160;        LWS_CALLBACK_GS_EVENT                                   = 55,</div><div class="line"><a name="l01001"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa5cc921b7697743017a533822a3d556a"> 1001</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa5cc921b7697743017a533822a3d556a">LWS_CALLBACK_HTTP_PMO</a>                                   = 56,</div><div class="line"><a name="l01006"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aeb0cec65ec82a713cd01e9ca9aeeb5e6"> 1006</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aeb0cec65ec82a713cd01e9ca9aeeb5e6">LWS_CALLBACK_CLIENT_HTTP_WRITEABLE</a>                      = 57,</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160;        <span class="comment">/****** add new things just above ---^ ******/</span></div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160;</div><div class="line"><a name="l01018"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a982579753e70e59a9ea13ce628ac891a"> 1018</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a982579753e70e59a9ea13ce628ac891a">LWS_CALLBACK_USER</a> = 1000,</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160;};</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160;<span class="keyword">typedef</span> <span class="keywordtype">int</span></div><div class="line"><a name="l01040"></a><span class="lineno"><a class="line" href="group__usercb.html#gad4fcb82e68d60ffacca61a3f783a0a2f"> 1040</a></span>&#160;<a class="code" href="group__usercb.html#gad4fcb82e68d60ffacca61a3f783a0a2f">lws_callback_function</a>(<span class="keyword">struct</span> lws *wsi, <span class="keyword">enum</span> <a class="code" href="group__usercb.html#gad62860e19975ba4c4af401c3cdb6abf7">lws_callback_reasons</a> reason,</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;                    <span class="keywordtype">void</span> *user, <span class="keywordtype">void</span> *in, <span class="keywordtype">size_t</span> len);</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160;</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160;</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160;<span class="comment"> * NOTE: These public enums are part of the abi.  If you want to add one,</span></div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160;<span class="comment"> * add it at where specified so existing users are unaffected.</span></div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160;<span class="keyword">enum</span> lws_extension_callback_reasons {</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;        LWS_EXT_CB_SERVER_CONTEXT_CONSTRUCT             =  0,</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;        LWS_EXT_CB_CLIENT_CONTEXT_CONSTRUCT             =  1,</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160;        LWS_EXT_CB_SERVER_CONTEXT_DESTRUCT              =  2,</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160;        LWS_EXT_CB_CLIENT_CONTEXT_DESTRUCT              =  3,</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;        LWS_EXT_CB_CONSTRUCT                            =  4,</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160;        LWS_EXT_CB_CLIENT_CONSTRUCT                     =  5,</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160;        LWS_EXT_CB_CHECK_OK_TO_REALLY_CLOSE             =  6,</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;        LWS_EXT_CB_CHECK_OK_TO_PROPOSE_EXTENSION        =  7,</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;        LWS_EXT_CB_DESTROY                              =  8,</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;        LWS_EXT_CB_DESTROY_ANY_WSI_CLOSING              =  9,</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;        LWS_EXT_CB_ANY_WSI_ESTABLISHED                  = 10,</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160;        LWS_EXT_CB_PACKET_RX_PREPARSE                   = 11,</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;        LWS_EXT_CB_PACKET_TX_PRESEND                    = 12,</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;        LWS_EXT_CB_PACKET_TX_DO_SEND                    = 13,</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;        LWS_EXT_CB_HANDSHAKE_REPLY_TX                   = 14,</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;        LWS_EXT_CB_FLUSH_PENDING_TX                     = 15,</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160;        LWS_EXT_CB_EXTENDED_PAYLOAD_RX                  = 16,</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160;        LWS_EXT_CB_CAN_PROXY_CLIENT_CONNECTION          = 17,</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160;        LWS_EXT_CB_1HZ                                  = 18,</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160;        LWS_EXT_CB_REQUEST_ON_WRITEABLE                 = 19,</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160;        LWS_EXT_CB_IS_WRITEABLE                         = 20,</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160;        LWS_EXT_CB_PAYLOAD_TX                           = 21,</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;        LWS_EXT_CB_PAYLOAD_RX                           = 22,</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;        LWS_EXT_CB_OPTION_DEFAULT                       = 23,</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160;        LWS_EXT_CB_OPTION_SET                           = 24,</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160;        LWS_EXT_CB_OPTION_CONFIRM                       = 25,</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160;        LWS_EXT_CB_NAMED_OPTION_SET                     = 26,</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160;</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160;        <span class="comment">/****** add new things just above ---^ ******/</span></div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;};</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160;</div><div class="line"><a name="l01092"></a><span class="lineno"><a class="line" href="group__extensions.html#gacc9f55936dc165257a2e1f7d47bce89e"> 1092</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="group__extensions.html#gacc9f55936dc165257a2e1f7d47bce89e">lws_ext_options_types</a> {</div><div class="line"><a name="l01093"></a><span class="lineno"><a class="line" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89eaabcf56c456c1ff6e81dc82586a16f14c"> 1093</a></span>&#160;        <a class="code" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89eaabcf56c456c1ff6e81dc82586a16f14c">EXTARG_NONE</a>, </div><div class="line"><a name="l01094"></a><span class="lineno"><a class="line" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea1c86adf924c8786a12bee9687094673e"> 1094</a></span>&#160;        <a class="code" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea1c86adf924c8786a12bee9687094673e">EXTARG_DEC</a>,  </div><div class="line"><a name="l01095"></a><span class="lineno"><a class="line" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea5265abe3e1c3f64412f2affe7bffd880"> 1095</a></span>&#160;        <a class="code" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea5265abe3e1c3f64412f2affe7bffd880">EXTARG_OPT_DEC</a> </div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160;        <span class="comment">/* Add new things just above here ---^</span></div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;<span class="comment">         * This is part of the ABI, don&#39;t needlessly break compatibility */</span></div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160;};</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160;</div><div class="line"><a name="l01105"></a><span class="lineno"><a class="line" href="structlws__ext__options.html"> 1105</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__ext__options.html">lws_ext_options</a> {</div><div class="line"><a name="l01106"></a><span class="lineno"><a class="line" href="structlws__ext__options.html#a1769e4a9805bbdda227821e9578ddc7e"> 1106</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__ext__options.html#a1769e4a9805bbdda227821e9578ddc7e">name</a>; </div><div class="line"><a name="l01107"></a><span class="lineno"><a class="line" href="structlws__ext__options.html#a7c4dbd62dbeba63a9d50d2306bd1cc61"> 1107</a></span>&#160;        <span class="keyword">enum</span> <a class="code" href="group__extensions.html#gacc9f55936dc165257a2e1f7d47bce89e">lws_ext_options_types</a> type; </div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160;        <span class="comment">/* Add new things just above here ---^</span></div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160;<span class="comment">         * This is part of the ABI, don&#39;t needlessly break compatibility */</span></div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160;};</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160;</div><div class="line"><a name="l01114"></a><span class="lineno"><a class="line" href="structlws__ext__option__arg.html"> 1114</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__ext__option__arg.html">lws_ext_option_arg</a> {</div><div class="line"><a name="l01115"></a><span class="lineno"><a class="line" href="structlws__ext__option__arg.html#a0a320c56b79271b8f059eeaad9423ac9"> 1115</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__ext__option__arg.html#a0a320c56b79271b8f059eeaad9423ac9">option_name</a>; </div><div class="line"><a name="l01116"></a><span class="lineno"><a class="line" href="structlws__ext__option__arg.html#af57fffcfa253dfa8d98681ac1fb1785f"> 1116</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__ext__option__arg.html#af57fffcfa253dfa8d98681ac1fb1785f">option_index</a>; </div><div class="line"><a name="l01117"></a><span class="lineno"><a class="line" href="structlws__ext__option__arg.html#a0b1f7b30c3ceaf5f1bf9d105c24568d1"> 1117</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__ext__option__arg.html#a0b1f7b30c3ceaf5f1bf9d105c24568d1">start</a>; </div><div class="line"><a name="l01118"></a><span class="lineno"><a class="line" href="structlws__ext__option__arg.html#af37f0b6caa7735af51a1ac12b68d5bc5"> 1118</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__ext__option__arg.html#af37f0b6caa7735af51a1ac12b68d5bc5">len</a>; </div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160;};</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160;</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160;<span class="keyword">typedef</span> <span class="keywordtype">int</span></div><div class="line"><a name="l01182"></a><span class="lineno"><a class="line" href="group__extensions.html#gaae7169b2cd346b34fa33d0250db2afd0"> 1182</a></span>&#160;<a class="code" href="group__extensions.html#gaae7169b2cd346b34fa33d0250db2afd0">lws_extension_callback_function</a>(<span class="keyword">struct</span> lws_context *context,</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160;                              <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlws__extension.html">lws_extension</a> *ext, <span class="keyword">struct</span> lws *wsi,</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160;                              <span class="keyword">enum</span> lws_extension_callback_reasons reason,</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160;                              <span class="keywordtype">void</span> *user, <span class="keywordtype">void</span> *in, <span class="keywordtype">size_t</span> len);</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160;</div><div class="line"><a name="l01188"></a><span class="lineno"><a class="line" href="structlws__extension.html"> 1188</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__extension.html">lws_extension</a> {</div><div class="line"><a name="l01189"></a><span class="lineno"><a class="line" href="structlws__extension.html#a1e5018c883d85176f5c2152176843f9e"> 1189</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__extension.html#a1e5018c883d85176f5c2152176843f9e">name</a>; </div><div class="line"><a name="l01190"></a><span class="lineno"><a class="line" href="structlws__extension.html#afa21f3b3c8c2c9212a276c52b680c3af"> 1190</a></span>&#160;        <a class="code" href="group__extensions.html#gaae7169b2cd346b34fa33d0250db2afd0">lws_extension_callback_function</a> *<a class="code" href="structlws__extension.html#afa21f3b3c8c2c9212a276c52b680c3af">callback</a>; </div><div class="line"><a name="l01191"></a><span class="lineno"><a class="line" href="structlws__extension.html#a36b06c213aedb02bf9a402651751855b"> 1191</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__extension.html#a36b06c213aedb02bf9a402651751855b">client_offer</a>; </div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160;        <span class="comment">/* Add new things just above here ---^</span></div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160;<span class="comment">         * This is part of the ABI, don&#39;t needlessly break compatibility */</span></div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160;};</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160;</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;<a class="code" href="group__extensions.html#gae0e24e1768f83a7fb07896ce975704b9">lws_set_extension_option</a>(<span class="keyword">struct</span> lws *wsi, <span class="keyword">const</span> <span class="keywordtype">char</span> *ext_name,</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160;                         <span class="keyword">const</span> <span class="keywordtype">char</span> *opt_name, <span class="keyword">const</span> <span class="keywordtype">char</span> *opt_val);</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160;</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160;<span class="preprocessor">#ifndef LWS_NO_EXTENSIONS</span></div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160;<span class="comment">/* lws_get_internal_extensions() - DEPRECATED</span></div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160;<span class="comment"> * \Deprecated There is no longer a set internal extensions table.  The table is provided</span></div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160;<span class="comment"> * by user code along with application-specific settings.  See the test</span></div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160;<span class="comment"> * client and server for how to do.</span></div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160;<span class="keyword">static</span> LWS_INLINE LWS_WARN_DEPRECATED <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__extension.html">lws_extension</a> *</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160;lws_get_internal_extensions() { <span class="keywordflow">return</span> NULL; }</div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160;</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160;<a class="code" href="group__extensions.html#ga6fb3e2c3dfb9d64dc87026a4e99c128b">lws_ext_parse_options</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlws__extension.html">lws_extension</a> *ext, <span class="keyword">struct</span> lws *wsi,</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160;                       <span class="keywordtype">void</span> *ext_user, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlws__ext__options.html">lws_ext_options</a> *opts,</div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160;                       <span class="keyword">const</span> <span class="keywordtype">char</span> *o, <span class="keywordtype">int</span> len);</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160;</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160;LWS_EXTERN</div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160;<span class="keywordtype">int</span> <a class="code" href="group__extensions.html#ga4cdbe42d872e21a448a947714d6c607e">lws_extension_callback_pm_deflate</a>(</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160;        <span class="keyword">struct</span> lws_context *context, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlws__extension.html">lws_extension</a> *ext,</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160;        <span class="keyword">struct</span> lws *wsi, <span class="keyword">enum</span> lws_extension_callback_reasons reason,</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160;        <span class="keywordtype">void</span> *user, <span class="keywordtype">void</span> *in, <span class="keywordtype">size_t</span> len);</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160;</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160;<span class="comment"> * The internal exts are part of the public abi</span></div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160;<span class="comment"> * If we add more extensions, publish the callback here  ------v</span></div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160;</div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160;</div><div class="line"><a name="l01278"></a><span class="lineno"><a class="line" href="structlws__protocols.html"> 1278</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__protocols.html">lws_protocols</a> {</div><div class="line"><a name="l01279"></a><span class="lineno"><a class="line" href="structlws__protocols.html#a0e63edb457a613c3fa4271e0a8f19624"> 1279</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__protocols.html#a0e63edb457a613c3fa4271e0a8f19624">name</a>;</div><div class="line"><a name="l01282"></a><span class="lineno"><a class="line" href="structlws__protocols.html#acabf94c1a9bfe7be0387fbb0e0c56b2d"> 1282</a></span>&#160;        <a class="code" href="group__usercb.html#gad4fcb82e68d60ffacca61a3f783a0a2f">lws_callback_function</a> *<a class="code" href="structlws__protocols.html#acabf94c1a9bfe7be0387fbb0e0c56b2d">callback</a>;</div><div class="line"><a name="l01286"></a><span class="lineno"><a class="line" href="structlws__protocols.html#a9bbd85f591ffb4259711cb5acbb05bea"> 1286</a></span>&#160;        <span class="keywordtype">size_t</span> <a class="code" href="structlws__protocols.html#a9bbd85f591ffb4259711cb5acbb05bea">per_session_data_size</a>;</div><div class="line"><a name="l01291"></a><span class="lineno"><a class="line" href="structlws__protocols.html#a0d1d4996d81b2f5e125bcec981e461c5"> 1291</a></span>&#160;        <span class="keywordtype">size_t</span> <a class="code" href="structlws__protocols.html#a0d1d4996d81b2f5e125bcec981e461c5">rx_buffer_size</a>;</div><div class="line"><a name="l01300"></a><span class="lineno"><a class="line" href="structlws__protocols.html#a6b632018590c2b1bbe43fbab6d5e6fac"> 1300</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structlws__protocols.html#a6b632018590c2b1bbe43fbab6d5e6fac">id</a>;</div><div class="line"><a name="l01307"></a><span class="lineno"><a class="line" href="structlws__protocols.html#a3cbd903ad076736ae934a54cae36580e"> 1307</a></span>&#160;        <span class="keywordtype">void</span> *<a class="code" href="structlws__protocols.html#a3cbd903ad076736ae934a54cae36580e">user</a>; </div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160;        <span class="comment">/* Add new things just above here ---^</span></div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160;<span class="comment">         * This is part of the ABI, don&#39;t needlessly break compatibility */</span></div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160;};</div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160;</div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160;<span class="keyword">struct </span>lws_vhost;</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160;</div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__protocols.html">lws_protocols</a> *</div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160;<a class="code" href="group__Protocols-and-Plugins.html#ga25754726d97c5f519d313e691a9fe29d">lws_vhost_name_to_protocol</a>(<span class="keyword">struct</span> lws_vhost *vh, <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__protocols.html#a0e63edb457a613c3fa4271e0a8f19624">name</a>);</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160;</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__protocols.html">lws_protocols</a> *</div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160;<a class="code" href="group__Protocols-and-Plugins.html#ga72ad550786ca7976463589d347e62112">lws_get_protocol</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160;</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__protocols.html">lws_protocols</a> *</div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160;<a class="code" href="group__Protocols-and-Plugins.html#ga8bbe5e65faca068845704bab911a5030">lws_protocol_get</a>(<span class="keyword">struct</span> lws *wsi) LWS_WARN_DEPRECATED;</div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160;</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span> *</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160;<a class="code" href="group__Protocols-and-Plugins.html#gaec0c0477288ff3f83aff38d357b883d1">lws_protocol_vh_priv_zalloc</a>(<span class="keyword">struct</span> lws_vhost *vhost, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlws__protocols.html">lws_protocols</a> *prot,</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160;                            <span class="keywordtype">int</span> size);</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160;</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span> *</div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160;<a class="code" href="group__Protocols-and-Plugins.html#gaf3be4243443baac0f8be1fcfb4d25129">lws_protocol_vh_priv_get</a>(<span class="keyword">struct</span> lws_vhost *vhost, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlws__protocols.html">lws_protocols</a> *prot);</div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160;</div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160;<a class="code" href="group__Protocols-and-Plugins.html#ga106b37ae9c247e84d191ab09441adc43">lws_finalize_startup</a>(<span class="keyword">struct</span> lws_context *context);</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160;</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160;<span class="preprocessor">#ifdef LWS_WITH_PLUGINS</span></div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160;</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160;<span class="comment">/* PLUGINS implies LIBUV */</span></div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160;</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160;<span class="preprocessor">#define LWS_PLUGIN_API_MAGIC 180</span></div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160;</div><div class="line"><a name="l01387"></a><span class="lineno"><a class="line" href="structlws__plugin__capability.html"> 1387</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__plugin__capability.html">lws_plugin_capability</a> {</div><div class="line"><a name="l01388"></a><span class="lineno"><a class="line" href="structlws__plugin__capability.html#a523c7cde6f15bba345f56493dcf6b32a"> 1388</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structlws__plugin__capability.html#a523c7cde6f15bba345f56493dcf6b32a">api_magic</a>; </div><div class="line"><a name="l01389"></a><span class="lineno"><a class="line" href="structlws__plugin__capability.html#a6a4d9d01e770f378ddadc77b37522033"> 1389</a></span>&#160;        <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__protocols.html">lws_protocols</a> *<a class="code" href="structlws__plugin__capability.html#a6a4d9d01e770f378ddadc77b37522033">protocols</a>; </div><div class="line"><a name="l01390"></a><span class="lineno"><a class="line" href="structlws__plugin__capability.html#ae38f7cf1246b9ca3af3cbf9d46b7090f"> 1390</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__plugin__capability.html#ae38f7cf1246b9ca3af3cbf9d46b7090f">count_protocols</a>; </div><div class="line"><a name="l01391"></a><span class="lineno"><a class="line" href="structlws__plugin__capability.html#a7936f0eb93d79dea76b903d0f8a5f623"> 1391</a></span>&#160;        <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__extension.html">lws_extension</a> *<a class="code" href="structlws__plugin__capability.html#a7936f0eb93d79dea76b903d0f8a5f623">extensions</a>; </div><div class="line"><a name="l01392"></a><span class="lineno"><a class="line" href="structlws__plugin__capability.html#abcf51db969522fdda9aaf902e65739d3"> 1392</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__plugin__capability.html#abcf51db969522fdda9aaf902e65739d3">count_extensions</a>; </div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160;};</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160;</div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160;<span class="keyword">typedef</span> int (*lws_plugin_init_func)(<span class="keyword">struct </span>lws_context *,</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160;                                    <span class="keyword">struct </span><a class="code" href="structlws__plugin__capability.html">lws_plugin_capability</a> *);</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160;<span class="keyword">typedef</span> int (*lws_plugin_destroy_func)(<span class="keyword">struct </span>lws_context *);</div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160;</div><div class="line"><a name="l01400"></a><span class="lineno"><a class="line" href="structlws__plugin.html"> 1400</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__plugin.html">lws_plugin</a> {</div><div class="line"><a name="l01401"></a><span class="lineno"><a class="line" href="structlws__plugin.html#a65dffd68fd267ce17b988790d1d35f22"> 1401</a></span>&#160;        <span class="keyword">struct </span><a class="code" href="structlws__plugin.html">lws_plugin</a> *<a class="code" href="structlws__plugin.html#a65dffd68fd267ce17b988790d1d35f22">list</a>; </div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160;<span class="preprocessor">#if (UV_VERSION_MAJOR &gt; 0)</span></div><div class="line"><a name="l01403"></a><span class="lineno"><a class="line" href="structlws__plugin.html#af9e1042dc1de5b9d202c2f5fd1834330"> 1403</a></span>&#160;        uv_lib_t <a class="code" href="structlws__plugin.html#af9e1042dc1de5b9d202c2f5fd1834330">lib</a>; </div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01405"></a><span class="lineno"><a class="line" href="structlws__plugin.html#a4ef37a43653715b6c69cbf8a7be747f4"> 1405</a></span>&#160;        <span class="keywordtype">void</span> *<a class="code" href="structlws__plugin.html#a4ef37a43653715b6c69cbf8a7be747f4">l</a>; </div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01407"></a><span class="lineno"><a class="line" href="structlws__plugin.html#af4ac8fcb79e10e0c2d960e1804d98105"> 1407</a></span>&#160;        <span class="keywordtype">char</span> <a class="code" href="structlws__plugin.html#af4ac8fcb79e10e0c2d960e1804d98105">name</a>[64]; </div><div class="line"><a name="l01408"></a><span class="lineno"><a class="line" href="structlws__plugin.html#ac7f1fdfe8cf8a21f8ee9720c21934a3f"> 1408</a></span>&#160;        <span class="keyword">struct </span><a class="code" href="structlws__plugin__capability.html">lws_plugin_capability</a> caps; </div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160;};</div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160;</div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160;</div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160;</div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160;</div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160;</div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160;<span class="preprocessor">#define LWSGS_EMAIL_CONTENT_SIZE 16384</span></div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160;</div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160;<span class="comment">/* SHA-1 binary and hexified versions */</span></div><div class="line"><a name="l01431"></a><span class="lineno"><a class="line" href="structlwsgw__hash__bin.html#ac92f50d9471058525d110597a4e0de6b"> 1431</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>{ <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> bin[20]; } <a class="code" href="structlwsgw__hash__bin.html">lwsgw_hash_bin</a>;</div><div class="line"><a name="l01433"></a><span class="lineno"><a class="line" href="structlwsgw__hash.html#a29435f5cf78747d4257695b0f141d164"> 1433</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>{ <span class="keywordtype">char</span> <span class="keywordtype">id</span>[41];  } <a class="code" href="structlwsgw__hash.html">lwsgw_hash</a>;</div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160;</div><div class="line"><a name="l01436"></a><span class="lineno"><a class="line" href="group__generic-sessions.html#ga7c2dc7bfb4ccb91c5d771f9e9ea237e1"> 1436</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="group__generic-sessions.html#ga7c2dc7bfb4ccb91c5d771f9e9ea237e1">lwsgs_auth_bits</a> {</div><div class="line"><a name="l01437"></a><span class="lineno"><a class="line" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a81e63075115dedd150265d81b8f7fa57"> 1437</a></span>&#160;        <a class="code" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a81e63075115dedd150265d81b8f7fa57">LWSGS_AUTH_LOGGED_IN</a> = 1, </div><div class="line"><a name="l01438"></a><span class="lineno"><a class="line" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a0657a9e846814781b128c397fe4b10bf"> 1438</a></span>&#160;        <a class="code" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a0657a9e846814781b128c397fe4b10bf">LWSGS_AUTH_ADMIN</a> = 2,   </div><div class="line"><a name="l01439"></a><span class="lineno"><a class="line" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a5a607e4668d20cadada62c4b8007f887"> 1439</a></span>&#160;        <a class="code" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a5a607e4668d20cadada62c4b8007f887">LWSGS_AUTH_VERIFIED</a> = 4,  </div><div class="line"><a name="l01440"></a><span class="lineno"><a class="line" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a2cd8fb86e3b85c106e7711c03f0ddd0a"> 1440</a></span>&#160;        <a class="code" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a2cd8fb86e3b85c106e7711c03f0ddd0a">LWSGS_AUTH_FORGOT_FLOW</a> = 8,     </div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160;};</div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160;</div><div class="line"><a name="l01444"></a><span class="lineno"><a class="line" href="structlws__session__info.html"> 1444</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__session__info.html">lws_session_info</a> {</div><div class="line"><a name="l01445"></a><span class="lineno"><a class="line" href="structlws__session__info.html#a3d57a70b6e7181d95a8bec429b1a7697"> 1445</a></span>&#160;        <span class="keywordtype">char</span> username[32]; </div><div class="line"><a name="l01446"></a><span class="lineno"><a class="line" href="structlws__session__info.html#a94b813cfc6b0da4b182659de30038ad3"> 1446</a></span>&#160;        <span class="keywordtype">char</span> email[100]; </div><div class="line"><a name="l01447"></a><span class="lineno"><a class="line" href="structlws__session__info.html#a53eed02325e8717a53297391e3e98fac"> 1447</a></span>&#160;        <span class="keywordtype">char</span> ip[72]; </div><div class="line"><a name="l01448"></a><span class="lineno"><a class="line" href="structlws__session__info.html#afb924864b70f40372920688a5c1c895e"> 1448</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structlws__session__info.html#afb924864b70f40372920688a5c1c895e">mask</a>; </div><div class="line"><a name="l01450"></a><span class="lineno"><a class="line" href="structlws__session__info.html#a4353b5dd19400b2b15edfd7cee1e4cd5"> 1450</a></span>&#160;        <span class="keywordtype">char</span> session[42]; </div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160;};</div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160;</div><div class="line"><a name="l01454"></a><span class="lineno"><a class="line" href="group__generic-sessions.html#gaa93946b3d921072209d5cd8cdfa5332e"> 1454</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="group__generic-sessions.html#gaa93946b3d921072209d5cd8cdfa5332e">lws_gs_event</a> {</div><div class="line"><a name="l01455"></a><span class="lineno"><a class="line" href="group__generic-sessions.html#ggaa93946b3d921072209d5cd8cdfa5332ea596010a165bf13473c5eea3a34cd4308"> 1455</a></span>&#160;        <a class="code" href="group__generic-sessions.html#ggaa93946b3d921072209d5cd8cdfa5332ea596010a165bf13473c5eea3a34cd4308">LWSGSE_CREATED</a>, </div><div class="line"><a name="l01456"></a><span class="lineno"><a class="line" href="group__generic-sessions.html#ggaa93946b3d921072209d5cd8cdfa5332ead908cdc5689c5d22c9d3c8934e94dcde"> 1456</a></span>&#160;        <a class="code" href="group__generic-sessions.html#ggaa93946b3d921072209d5cd8cdfa5332ead908cdc5689c5d22c9d3c8934e94dcde">LWSGSE_DELETED</a>  </div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160;};</div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160;</div><div class="line"><a name="l01460"></a><span class="lineno"><a class="line" href="structlws__gs__event__args.html"> 1460</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__gs__event__args.html">lws_gs_event_args</a> {</div><div class="line"><a name="l01461"></a><span class="lineno"><a class="line" href="structlws__gs__event__args.html#a477274f8ca22ba7411b9285b9dc8dd06"> 1461</a></span>&#160;        <span class="keyword">enum</span> <a class="code" href="group__generic-sessions.html#gaa93946b3d921072209d5cd8cdfa5332e">lws_gs_event</a> event; </div><div class="line"><a name="l01462"></a><span class="lineno"><a class="line" href="structlws__gs__event__args.html#a2bec693d8a43730d487004a44326178b"> 1462</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__gs__event__args.html#a2bec693d8a43730d487004a44326178b">username</a>; </div><div class="line"><a name="l01463"></a><span class="lineno"><a class="line" href="structlws__gs__event__args.html#acd17e4f9f91f7f9a8f0fbf0744a3a463"> 1463</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__gs__event__args.html#acd17e4f9f91f7f9a8f0fbf0744a3a463">email</a>; </div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160;};</div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160;</div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160;</div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160;</div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160;</div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160;<span class="comment"> * NOTE: These public enums are part of the abi.  If you want to add one,</span></div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160;<span class="comment"> * add it at where specified so existing users are unaffected.</span></div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160;</div><div class="line"><a name="l01490"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#ga41c2d763f78cc248df3b9f8645dbd2a5"> 1490</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="group__context-and-vhost.html#ga41c2d763f78cc248df3b9f8645dbd2a5">lws_context_options</a> {</div><div class="line"><a name="l01491"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a274ed462a1a9239eb6ddf9007f5b7092"> 1491</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a274ed462a1a9239eb6ddf9007f5b7092">LWS_SERVER_OPTION_REQUIRE_VALID_OPENSSL_CLIENT_CERT</a>     = (1 &lt;&lt; 1) |</div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160;                                                                  (1 &lt;&lt; 12),</div><div class="line"><a name="l01496"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a6582c985ee0ceaadc1d277030eae2d7c"> 1496</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a6582c985ee0ceaadc1d277030eae2d7c">LWS_SERVER_OPTION_SKIP_SERVER_CANONICAL_NAME</a>            = (1 &lt;&lt; 2),</div><div class="line"><a name="l01498"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a1cc4562d05cba52a6dfa0697a65ade0d"> 1498</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a1cc4562d05cba52a6dfa0697a65ade0d">LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT</a>             = (1 &lt;&lt; 3) |</div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160;                                                                  (1 &lt;&lt; 12),</div><div class="line"><a name="l01503"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a273d9975675130de0c6dc937dde7c8a6"> 1503</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a273d9975675130de0c6dc937dde7c8a6">LWS_SERVER_OPTION_LIBEV</a>                                 = (1 &lt;&lt; 4),</div><div class="line"><a name="l01505"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a34ab36e68c0d593b6f19b8d5ef1240a9"> 1505</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a34ab36e68c0d593b6f19b8d5ef1240a9">LWS_SERVER_OPTION_DISABLE_IPV6</a>                          = (1 &lt;&lt; 5),</div><div class="line"><a name="l01507"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a4933347a821e73c3f1e13fb6bfc7ad93"> 1507</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a4933347a821e73c3f1e13fb6bfc7ad93">LWS_SERVER_OPTION_DISABLE_OS_CA_CERTS</a>                   = (1 &lt;&lt; 6),</div><div class="line"><a name="l01510"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5ac56a8a6590e74a8016d0fae09fb404fc"> 1510</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5ac56a8a6590e74a8016d0fae09fb404fc">LWS_SERVER_OPTION_PEER_CERT_NOT_REQUIRED</a>                = (1 &lt;&lt; 7),</div><div class="line"><a name="l01512"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aa0158b4e85420811e6b0f1378c6ded0f"> 1512</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aa0158b4e85420811e6b0f1378c6ded0f">LWS_SERVER_OPTION_VALIDATE_UTF8</a>                         = (1 &lt;&lt; 8),</div><div class="line"><a name="l01514"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a1b2f8bde0f62adc7ebe81b2043f34c0c"> 1514</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a1b2f8bde0f62adc7ebe81b2043f34c0c">LWS_SERVER_OPTION_SSL_ECDH</a>                              = (1 &lt;&lt; 9) |</div><div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160;                                                                  (1 &lt;&lt; 12),</div><div class="line"><a name="l01517"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aff121db04a10cf8b2c5df9d4f2b89f1e"> 1517</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aff121db04a10cf8b2c5df9d4f2b89f1e">LWS_SERVER_OPTION_LIBUV</a>                                 = (1 &lt;&lt; 10),</div><div class="line"><a name="l01519"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a4832187186c4d130c68051214cd42ada"> 1519</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a4832187186c4d130c68051214cd42ada">LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS</a>                = (1 &lt;&lt; 11) |</div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160;                                                                  (1 &lt;&lt; 12),</div><div class="line"><a name="l01523"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a7fed6a527c8d5e0acac1b4179644583a"> 1523</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a7fed6a527c8d5e0acac1b4179644583a">LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT</a>                    = (1 &lt;&lt; 12),</div><div class="line"><a name="l01525"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5accc9d0d11d1124a21659586164b0962e"> 1525</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5accc9d0d11d1124a21659586164b0962e">LWS_SERVER_OPTION_EXPLICIT_VHOSTS</a>                       = (1 &lt;&lt; 13),</div><div class="line"><a name="l01528"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a9637e9001d8c8b2521086bcafbd8a941"> 1528</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a9637e9001d8c8b2521086bcafbd8a941">LWS_SERVER_OPTION_UNIX_SOCK</a>                             = (1 &lt;&lt; 14),</div><div class="line"><a name="l01530"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5ac962efd35abf6c402f9fb14aa14f5016"> 1530</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5ac962efd35abf6c402f9fb14aa14f5016">LWS_SERVER_OPTION_STS</a>                                   = (1 &lt;&lt; 15),</div><div class="line"><a name="l01533"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5af62887536e25e053e68741006dba46d8"> 1533</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5af62887536e25e053e68741006dba46d8">LWS_SERVER_OPTION_IPV6_V6ONLY_MODIFY</a>                    = (1 &lt;&lt; 16),</div><div class="line"><a name="l01535"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aca5d42820b65eac5618ec3f0bd8a1160"> 1535</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aca5d42820b65eac5618ec3f0bd8a1160">LWS_SERVER_OPTION_IPV6_V6ONLY_VALUE</a>                     = (1 &lt;&lt; 17),</div><div class="line"><a name="l01537"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a87a824b2e812f4c3e7f2c4a1ea4f8abd"> 1537</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a87a824b2e812f4c3e7f2c4a1ea4f8abd">LWS_SERVER_OPTION_UV_NO_SIGSEGV_SIGFPE_SPIN</a>             = (1 &lt;&lt; 18),</div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160;        <span class="comment">/****** add new things just above ---^ ******/</span></div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160;};</div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160;</div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160;<span class="preprocessor">#define lws_check_opt(c, f) (((c) &amp; (f)) == (f))</span></div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160;</div><div class="line"><a name="l01558"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html"> 1558</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__context__creation__info.html">lws_context_creation_info</a> {</div><div class="line"><a name="l01559"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a424a5ce268d6903e42243be94487ab85"> 1559</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__context__creation__info.html#a424a5ce268d6903e42243be94487ab85">port</a>;</div><div class="line"><a name="l01564"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a75434932bb5df54665ea678eb8ac104a"> 1564</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__context__creation__info.html#a75434932bb5df54665ea678eb8ac104a">iface</a>;</div><div class="line"><a name="l01571"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#abb90ffb3e6d6db2db20f529d61bd9122"> 1571</a></span>&#160;        <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__protocols.html">lws_protocols</a> *<a class="code" href="structlws__context__creation__info.html#abb90ffb3e6d6db2db20f529d61bd9122">protocols</a>;</div><div class="line"><a name="l01575"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a4a3d1155fc52f5048b481884f6fb947c"> 1575</a></span>&#160;        <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__extension.html">lws_extension</a> *<a class="code" href="structlws__context__creation__info.html#a4a3d1155fc52f5048b481884f6fb947c">extensions</a>;</div><div class="line"><a name="l01578"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#ac8a75b7b259a3c3a5fbb4219a3f06c29"> 1578</a></span>&#160;        <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__token__limits.html">lws_token_limits</a> *<a class="code" href="structlws__context__creation__info.html#ac8a75b7b259a3c3a5fbb4219a3f06c29">token_limits</a>;</div><div class="line"><a name="l01581"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#af3fb447be15c4fcb01d3285a6678ab54"> 1581</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__context__creation__info.html#af3fb447be15c4fcb01d3285a6678ab54">ssl_private_key_password</a>;</div><div class="line"><a name="l01583"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#ac62b0f0e8e402412ba5011d15c244103"> 1583</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__context__creation__info.html#ac62b0f0e8e402412ba5011d15c244103">ssl_cert_filepath</a>;</div><div class="line"><a name="l01587"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#ab9ec8893e0f7843cf5d783d2f350ef14"> 1587</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__context__creation__info.html#ab9ec8893e0f7843cf5d783d2f350ef14">ssl_private_key_filepath</a>;</div><div class="line"><a name="l01593"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a4f8e65c3a059d3b586fafa9ef3282c29"> 1593</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__context__creation__info.html#a4f8e65c3a059d3b586fafa9ef3282c29">ssl_ca_filepath</a>;</div><div class="line"><a name="l01595"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a3e1516fd7fed26bfa77c0246ed26c2eb"> 1595</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__context__creation__info.html#a3e1516fd7fed26bfa77c0246ed26c2eb">ssl_cipher_list</a>;</div><div class="line"><a name="l01599"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#aef917c0b23976a264d2474901b4f5aa3"> 1599</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__context__creation__info.html#aef917c0b23976a264d2474901b4f5aa3">http_proxy_address</a>;</div><div class="line"><a name="l01602"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a7b59f2bdc869871e7bde232db94f5ca6"> 1602</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structlws__context__creation__info.html#a7b59f2bdc869871e7bde232db94f5ca6">http_proxy_port</a>;</div><div class="line"><a name="l01604"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a9c9d22437de92c197f3cee52912b2c03"> 1604</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__context__creation__info.html#a9c9d22437de92c197f3cee52912b2c03">gid</a>;</div><div class="line"><a name="l01606"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#ac105b4180008cb3e672d57beead8382e"> 1606</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__context__creation__info.html#ac105b4180008cb3e672d57beead8382e">uid</a>;</div><div class="line"><a name="l01608"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a9d3b17a25e1fbc772f21eb4959a82724"> 1608</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structlws__context__creation__info.html#a9d3b17a25e1fbc772f21eb4959a82724">options</a>;</div><div class="line"><a name="l01610"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a0e9d94cdfb893d777b4a4db81e7b5ac0"> 1610</a></span>&#160;        <span class="keywordtype">void</span> *<a class="code" href="structlws__context__creation__info.html#a0e9d94cdfb893d777b4a4db81e7b5ac0">user</a>;</div><div class="line"><a name="l01613"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#ac583ce92b8e1c949cb6fef6bfe713d56"> 1613</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__context__creation__info.html#ac583ce92b8e1c949cb6fef6bfe713d56">ka_time</a>;</div><div class="line"><a name="l01616"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a3baab4285c679fbe027c2504621d7410"> 1616</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__context__creation__info.html#a3baab4285c679fbe027c2504621d7410">ka_probes</a>;</div><div class="line"><a name="l01620"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a381342a398883d6204955ff3c1849ddd"> 1620</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__context__creation__info.html#a381342a398883d6204955ff3c1849ddd">ka_interval</a>;</div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160;<span class="preprocessor">#ifdef LWS_OPENSSL_SUPPORT</span></div><div class="line"><a name="l01624"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a1654d41bea6fb2f619b57e6a264b26a4"> 1624</a></span>&#160;        <a class="code" href="structlws__polarssl__context.html">SSL_CTX</a> *<a class="code" href="structlws__context__creation__info.html#a1654d41bea6fb2f619b57e6a264b26a4">provided_client_ssl_ctx</a>;</div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160;<span class="preprocessor">#else </span><span class="comment">/* maintain structure layout either way */</span><span class="preprocessor"></span></div><div class="line"><a name="l01630"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a0e790dda6202604f73a03b6149bc12bb"> 1630</a></span>&#160;        <span class="keywordtype">void</span> *<a class="code" href="structlws__context__creation__info.html#a0e790dda6202604f73a03b6149bc12bb">provided_client_ssl_ctx</a>; </div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160;</div><div class="line"><a name="l01633"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a0cdfd3c484689ba6f0f2cc91b38ce948"> 1633</a></span>&#160;        <span class="keywordtype">short</span> <a class="code" href="structlws__context__creation__info.html#a0cdfd3c484689ba6f0f2cc91b38ce948">max_http_header_data</a>;</div><div class="line"><a name="l01636"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a0b154e79abc1167ba4ac3539f4af6720"> 1636</a></span>&#160;        <span class="keywordtype">short</span> <a class="code" href="structlws__context__creation__info.html#a0b154e79abc1167ba4ac3539f4af6720">max_http_header_pool</a>;</div><div class="line"><a name="l01643"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#ae52f3237e144e9ddcab5e2cf91d1e419"> 1643</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structlws__context__creation__info.html#ae52f3237e144e9ddcab5e2cf91d1e419">count_threads</a>;</div><div class="line"><a name="l01645"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a45e63e24c88289e0c8352377ef4d3646"> 1645</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structlws__context__creation__info.html#a45e63e24c88289e0c8352377ef4d3646">fd_limit_per_thread</a>;</div><div class="line"><a name="l01649"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a6cfa3d51df2def3349a5cbf0d712822d"> 1649</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structlws__context__creation__info.html#a6cfa3d51df2def3349a5cbf0d712822d">timeout_secs</a>;</div><div class="line"><a name="l01654"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#afa5d4e7d9f86b58a1c6fac14f0a5f5f9"> 1654</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__context__creation__info.html#afa5d4e7d9f86b58a1c6fac14f0a5f5f9">ecdh_curve</a>;</div><div class="line"><a name="l01656"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#ad50db098a208f045f7811207d2bee4b9"> 1656</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__context__creation__info.html#ad50db098a208f045f7811207d2bee4b9">vhost_name</a>;</div><div class="line"><a name="l01660"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a8122cfc0810bafe51edb3ba6bf9a1251"> 1660</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> * <span class="keyword">const</span> *<a class="code" href="structlws__context__creation__info.html#a8122cfc0810bafe51edb3ba6bf9a1251">plugin_dirs</a>;</div><div class="line"><a name="l01663"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a999866fcd15dbd621773436f97190458"> 1663</a></span>&#160;        <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__protocol__vhost__options.html">lws_protocol_vhost_options</a> *<a class="code" href="structlws__context__creation__info.html#a999866fcd15dbd621773436f97190458">pvo</a>;</div><div class="line"><a name="l01666"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a81697c6b763b5ef3ee52862bc70b07d6"> 1666</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__context__creation__info.html#a81697c6b763b5ef3ee52862bc70b07d6">keepalive_timeout</a>;</div><div class="line"><a name="l01669"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#ad0e95ba721f7bd2b676719f8093c23a2"> 1669</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__context__creation__info.html#ad0e95ba721f7bd2b676719f8093c23a2">log_filepath</a>;</div><div class="line"><a name="l01672"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a13ffbb0d010309669611f8c4eda7d7f8"> 1672</a></span>&#160;        <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__http__mount.html">lws_http_mount</a> *<a class="code" href="structlws__context__creation__info.html#a13ffbb0d010309669611f8c4eda7d7f8">mounts</a>;</div><div class="line"><a name="l01674"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a137a9b9de4f6a7993fed8746d551e616"> 1674</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__context__creation__info.html#a137a9b9de4f6a7993fed8746d551e616">server_string</a>;</div><div class="line"><a name="l01677"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a57f88c0745adbd1d6b9b619b8de30209"> 1677</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structlws__context__creation__info.html#a57f88c0745adbd1d6b9b619b8de30209">pt_serv_buf_size</a>;</div><div class="line"><a name="l01683"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#aa8d9e85e137f35fb006f2e4a53f0887a"> 1683</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structlws__context__creation__info.html#aa8d9e85e137f35fb006f2e4a53f0887a">max_http_header_data2</a>;</div><div class="line"><a name="l01688"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a704940261951ced6b5d8191bd8b9bb2d"> 1688</a></span>&#160;        <span class="keywordtype">long</span> <a class="code" href="structlws__context__creation__info.html#a704940261951ced6b5d8191bd8b9bb2d">ssl_options_set</a>;</div><div class="line"><a name="l01690"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#adb0bc0b28cd7d90ab306723d8ffa96fa"> 1690</a></span>&#160;        <span class="keywordtype">long</span> <a class="code" href="structlws__context__creation__info.html#adb0bc0b28cd7d90ab306723d8ffa96fa">ssl_options_clear</a>;</div><div class="line"><a name="l01692"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a33a1a25a7df3793f59047e20dd580078"> 1692</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code" href="structlws__context__creation__info.html#a33a1a25a7df3793f59047e20dd580078">ws_ping_pong_interval</a>;</div><div class="line"><a name="l01704"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a8ca0ec6b8675c13849bbdcdc0d50c9a3"> 1704</a></span>&#160;        <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__protocol__vhost__options.html">lws_protocol_vhost_options</a> *<a class="code" href="structlws__context__creation__info.html#a8ca0ec6b8675c13849bbdcdc0d50c9a3">headers</a>;</div><div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>&#160;        <span class="comment">/* Add new things just above here ---^</span></div><div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>&#160;<span class="comment">         * This is part of the ABI, don&#39;t needlessly break compatibility</span></div><div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160;<span class="comment">         *</span></div><div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>&#160;<span class="comment">         * The below is to ensure later library versions with new</span></div><div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>&#160;<span class="comment">         * members added above will see 0 (default) even if the app</span></div><div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160;<span class="comment">         * was not built against the newer headers.</span></div><div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>&#160;<span class="comment">         */</span></div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160;</div><div class="line"><a name="l01716"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#afce3b59950eca3203faa07381bbed5d7"> 1716</a></span>&#160;        <span class="keywordtype">void</span> *_unused[8]; </div><div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>&#160;};</div><div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>&#160;</div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">struct </span>lws_context *</div><div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>&#160;<a class="code" href="group__context-and-vhost.html#gaf2fff58562caab7510c41eeac85a8648">lws_create_context</a>(<span class="keyword">struct</span> <a class="code" href="structlws__context__creation__info.html">lws_context_creation_info</a> *info);</div><div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>&#160;</div><div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span></div><div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>&#160;<a class="code" href="group__context-and-vhost.html#ga8ee0314028755f1ddfa9428e09b4fddb">lws_context_destroy</a>(<span class="keyword">struct</span> lws_context *context);</div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>&#160;</div><div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>&#160;<a class="code" href="group__context-and-vhost.html#ga7e9d5405547a457d86e0b4f0ae2bb1c4">lws_set_proxy</a>(<span class="keyword">struct</span> lws_vhost *vhost, <span class="keyword">const</span> <span class="keywordtype">char</span> *proxy);</div><div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>&#160;</div><div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>&#160;</div><div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>&#160;<span class="keyword">struct </span>lws_vhost;</div><div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>&#160;</div><div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>&#160;LWS_EXTERN LWS_VISIBLE <span class="keyword">struct </span>lws_vhost *</div><div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>&#160;<a class="code" href="group__context-and-vhost.html#ga0c54c667ccd9b8b3dddcd123ca72f87c">lws_create_vhost</a>(<span class="keyword">struct</span> lws_context *context,</div><div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>&#160;                 <span class="keyword">struct</span> <a class="code" href="structlws__context__creation__info.html">lws_context_creation_info</a> *info);</div><div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>&#160;</div><div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>&#160;<a class="code" href="group__context-and-vhost.html#ga98d88c9080fd89c37114363a6474ea73">lwsws_get_config_globals</a>(<span class="keyword">struct</span> <a class="code" href="structlws__context__creation__info.html">lws_context_creation_info</a> *info, <span class="keyword">const</span> <span class="keywordtype">char</span> *d,</div><div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>&#160;                         <span class="keywordtype">char</span> **config_strings, <span class="keywordtype">int</span> *len);</div><div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>&#160;</div><div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>&#160;<a class="code" href="group__context-and-vhost.html#ga341064721add2618ae1b29717493a212">lwsws_get_config_vhosts</a>(<span class="keyword">struct</span> lws_context *context,</div><div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>&#160;                        <span class="keyword">struct</span> <a class="code" href="structlws__context__creation__info.html">lws_context_creation_info</a> *info, <span class="keyword">const</span> <span class="keywordtype">char</span> *d,</div><div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>&#160;                        <span class="keywordtype">char</span> **config_strings, <span class="keywordtype">int</span> *len);</div><div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>&#160;</div><div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">struct </span>lws_vhost *</div><div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>&#160;<a class="code" href="group__context-and-vhost.html#ga8db03e19a372e34ac25cf21af894a02c">lws_vhost_get</a>(<span class="keyword">struct</span> lws *wsi) LWS_WARN_DEPRECATED;</div><div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>&#160;</div><div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">struct </span>lws_vhost *</div><div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>&#160;<a class="code" href="group__context-and-vhost.html#ga06e77ce2916f8bc9826ef8d9d68e3932">lws_get_vhost</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>&#160;</div><div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>&#160;<a class="code" href="group__context-and-vhost.html#ga94e6cc2223c4eec316b13bcebc3628b6">lws_json_dump_vhost</a>(<span class="keyword">const</span> <span class="keyword">struct</span> lws_vhost *vh, <span class="keywordtype">char</span> *buf, <span class="keywordtype">int</span> len);</div><div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>&#160;</div><div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>&#160;<a class="code" href="group__context-and-vhost.html#gae2134657cdd2ea7a59e13ad314e4c50d">lws_json_dump_context</a>(<span class="keyword">const</span> <span class="keyword">struct</span> lws_context *context, <span class="keywordtype">char</span> *buf, <span class="keywordtype">int</span> len);</div><div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>&#160;</div><div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span> *</div><div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>&#160;<a class="code" href="group__context-and-vhost.html#gaeb12f934bfd178bd2132a9e73fc641da">lws_context_user</a>(<span class="keyword">struct</span> lws_context *context);</div><div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>&#160;</div><div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>&#160;</div><div class="line"><a name="l01897"></a><span class="lineno"><a class="line" href="structlws__protocol__vhost__options.html"> 1897</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__protocol__vhost__options.html">lws_protocol_vhost_options</a> {</div><div class="line"><a name="l01898"></a><span class="lineno"><a class="line" href="structlws__protocol__vhost__options.html#abc714ddb4171756fc8196e9823a1e21c"> 1898</a></span>&#160;        <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__protocol__vhost__options.html">lws_protocol_vhost_options</a> *<a class="code" href="structlws__protocol__vhost__options.html#abc714ddb4171756fc8196e9823a1e21c">next</a>; </div><div class="line"><a name="l01899"></a><span class="lineno"><a class="line" href="structlws__protocol__vhost__options.html#afd99fbc90be51ea2465b550c2ec47822"> 1899</a></span>&#160;        <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__protocol__vhost__options.html">lws_protocol_vhost_options</a> *<a class="code" href="structlws__protocol__vhost__options.html#afd99fbc90be51ea2465b550c2ec47822">options</a>; </div><div class="line"><a name="l01900"></a><span class="lineno"><a class="line" href="structlws__protocol__vhost__options.html#acf9db77f8eb64cd4e314be9b43d8a8b9"> 1900</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__protocol__vhost__options.html#acf9db77f8eb64cd4e314be9b43d8a8b9">name</a>; </div><div class="line"><a name="l01901"></a><span class="lineno"><a class="line" href="structlws__protocol__vhost__options.html#a0640a92513c70ee6b9b295a9ad1658e7"> 1901</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__protocol__vhost__options.html#a0640a92513c70ee6b9b295a9ad1658e7">value</a>; </div><div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>&#160;};</div><div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>&#160;</div><div class="line"><a name="l01908"></a><span class="lineno"><a class="line" href="group__vhost-mounts.html#ga31eca18e50cb4357480f2fcad36ff437"> 1908</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="group__vhost-mounts.html#ga31eca18e50cb4357480f2fcad36ff437">lws_mount_protocols</a> {</div><div class="line"><a name="l01909"></a><span class="lineno"><a class="line" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0"> 1909</a></span>&#160;        <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0">LWSMPRO_HTTP</a>            = 0, </div><div class="line"><a name="l01910"></a><span class="lineno"><a class="line" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1"> 1910</a></span>&#160;        <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1">LWSMPRO_HTTPS</a>           = 1, </div><div class="line"><a name="l01911"></a><span class="lineno"><a class="line" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2"> 1911</a></span>&#160;        <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2">LWSMPRO_FILE</a>            = 2, </div><div class="line"><a name="l01912"></a><span class="lineno"><a class="line" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69"> 1912</a></span>&#160;        <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69">LWSMPRO_CGI</a>             = 3, </div><div class="line"><a name="l01913"></a><span class="lineno"><a class="line" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970"> 1913</a></span>&#160;        <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970">LWSMPRO_REDIR_HTTP</a>      = 4, </div><div class="line"><a name="l01914"></a><span class="lineno"><a class="line" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a8894d16316863077dfe530963ca59f67"> 1914</a></span>&#160;        <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a8894d16316863077dfe530963ca59f67">LWSMPRO_REDIR_HTTPS</a>     = 5, </div><div class="line"><a name="l01915"></a><span class="lineno"><a class="line" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da"> 1915</a></span>&#160;        <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da">LWSMPRO_CALLBACK</a>        = 6, </div><div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>&#160;};</div><div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>&#160;</div><div class="line"><a name="l01922"></a><span class="lineno"><a class="line" href="structlws__http__mount.html"> 1922</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__http__mount.html">lws_http_mount</a> {</div><div class="line"><a name="l01923"></a><span class="lineno"><a class="line" href="structlws__http__mount.html#a0109baf93f23c07c824c997c3533ee44"> 1923</a></span>&#160;        <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__http__mount.html">lws_http_mount</a> *<a class="code" href="structlws__http__mount.html#a0109baf93f23c07c824c997c3533ee44">mount_next</a>;</div><div class="line"><a name="l01925"></a><span class="lineno"><a class="line" href="structlws__http__mount.html#aa2391bfcada0b7a290b3c6651f64586c"> 1925</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__http__mount.html#aa2391bfcada0b7a290b3c6651f64586c">mountpoint</a>;</div><div class="line"><a name="l01927"></a><span class="lineno"><a class="line" href="structlws__http__mount.html#a21d86fd6043ec00e121ababbc29af39a"> 1927</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__http__mount.html#a21d86fd6043ec00e121ababbc29af39a">origin</a>;</div><div class="line"><a name="l01929"></a><span class="lineno"><a class="line" href="structlws__http__mount.html#ae90d1efe7178199fad39de2926902ee4"> 1929</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__http__mount.html#ae90d1efe7178199fad39de2926902ee4">def</a>;</div><div class="line"><a name="l01931"></a><span class="lineno"><a class="line" href="structlws__http__mount.html#a05347d92c3d379809564bd4f3eab259b"> 1931</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__http__mount.html#a05347d92c3d379809564bd4f3eab259b">protocol</a>;</div><div class="line"><a name="l01934"></a><span class="lineno"><a class="line" href="structlws__http__mount.html#ae7b5c0f4c5408061e6ea3a8d281f45af"> 1934</a></span>&#160;        <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__protocol__vhost__options.html">lws_protocol_vhost_options</a> *<a class="code" href="structlws__http__mount.html#ae7b5c0f4c5408061e6ea3a8d281f45af">cgienv</a>;</div><div class="line"><a name="l01938"></a><span class="lineno"><a class="line" href="structlws__http__mount.html#a4437423df85ee3dbcae0e15974c89ec7"> 1938</a></span>&#160;        <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__protocol__vhost__options.html">lws_protocol_vhost_options</a> *<a class="code" href="structlws__http__mount.html#a4437423df85ee3dbcae0e15974c89ec7">extra_mimetypes</a>;</div><div class="line"><a name="l01940"></a><span class="lineno"><a class="line" href="structlws__http__mount.html#a11ea62b952710d59733dbcf9794a5773"> 1940</a></span>&#160;        <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__protocol__vhost__options.html">lws_protocol_vhost_options</a> *<a class="code" href="structlws__http__mount.html#a11ea62b952710d59733dbcf9794a5773">interpret</a>;</div><div class="line"><a name="l01943"></a><span class="lineno"><a class="line" href="structlws__http__mount.html#a4a7239d6d4c03986e6e1a72abb6c83aa"> 1943</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__http__mount.html#a4a7239d6d4c03986e6e1a72abb6c83aa">cgi_timeout</a>;</div><div class="line"><a name="l01945"></a><span class="lineno"><a class="line" href="structlws__http__mount.html#a4283e30ea89d27ae7d061ad760d1d146"> 1945</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__http__mount.html#a4283e30ea89d27ae7d061ad760d1d146">cache_max_age</a>;</div><div class="line"><a name="l01947"></a><span class="lineno"><a class="line" href="structlws__http__mount.html#a614364c770b0bd4db464ad65cddab477"> 1947</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structlws__http__mount.html#a614364c770b0bd4db464ad65cddab477">auth_mask</a>;</div><div class="line"><a name="l01950"></a><span class="lineno"><a class="line" href="structlws__http__mount.html#a8316dd183ffbef50419a5a4968d35d84"> 1950</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cache_reusable:1; </div><div class="line"><a name="l01951"></a><span class="lineno"><a class="line" href="structlws__http__mount.html#ae137203040c6153694bd88a708da5395"> 1951</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cache_revalidate:1; </div><div class="line"><a name="l01952"></a><span class="lineno"><a class="line" href="structlws__http__mount.html#aabec1a326780aafe11b977000983be0c"> 1952</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cache_intermediaries:1; </div><div class="line"><a name="l01954"></a><span class="lineno"><a class="line" href="structlws__http__mount.html#a6a9b1492a0b9749e39bd19932717a0b7"> 1954</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="structlws__http__mount.html#a6a9b1492a0b9749e39bd19932717a0b7">origin_protocol</a>; </div><div class="line"><a name="l01955"></a><span class="lineno"><a class="line" href="structlws__http__mount.html#ac8489b60b8f969eb19c9abbdeac90743"> 1955</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="structlws__http__mount.html#ac8489b60b8f969eb19c9abbdeac90743">mountpoint_len</a>; </div><div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>&#160;};</div><div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>&#160;</div><div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>&#160;</div><div class="line"><a name="l01972"></a><span class="lineno"><a class="line" href="group__client.html#ga96f3dbad54b2853969cfa933d66871ce"> 1972</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="group__client.html#ga96f3dbad54b2853969cfa933d66871ce">lws_client_connect_ssl_connection_flags</a> {</div><div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>&#160;        LCCSCF_USE_SSL                          = (1 &lt;&lt; 0),</div><div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>&#160;        LCCSCF_ALLOW_SELFSIGNED                 = (1 &lt;&lt; 1),</div><div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>&#160;        LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK  = (1 &lt;&lt; 2)</div><div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>&#160;};</div><div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>&#160;</div><div class="line"><a name="l01981"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html"> 1981</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__client__connect__info.html">lws_client_connect_info</a> {</div><div class="line"><a name="l01982"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#afe999d133cc240a0bfd02aade0514cfd"> 1982</a></span>&#160;        <span class="keyword">struct </span>lws_context *<a class="code" href="structlws__client__connect__info.html#afe999d133cc240a0bfd02aade0514cfd">context</a>;</div><div class="line"><a name="l01984"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#aa364094f94ef1bcaaabbd9161971d502"> 1984</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__client__connect__info.html#aa364094f94ef1bcaaabbd9161971d502">address</a>;</div><div class="line"><a name="l01986"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#a1af124d81c3c22a46d39387c5bc3d6b9"> 1986</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__client__connect__info.html#a1af124d81c3c22a46d39387c5bc3d6b9">port</a>;</div><div class="line"><a name="l01988"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#a9862297827639238a7a0b4054c3ddf3d"> 1988</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__client__connect__info.html#a9862297827639238a7a0b4054c3ddf3d">ssl_connection</a>;</div><div class="line"><a name="l01990"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#a76a8388733f114fb8fd3643874781185"> 1990</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__client__connect__info.html#a76a8388733f114fb8fd3643874781185">path</a>;</div><div class="line"><a name="l01992"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#a9b36d47c3422329df32c21040a35ebc7"> 1992</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__client__connect__info.html#a9b36d47c3422329df32c21040a35ebc7">host</a>;</div><div class="line"><a name="l01994"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#a8595f83e64147cb687b6418cf500dd4c"> 1994</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__client__connect__info.html#a8595f83e64147cb687b6418cf500dd4c">origin</a>;</div><div class="line"><a name="l01996"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#aba35adfb74845a5fd0c3dc141cbdddd2"> 1996</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__client__connect__info.html#aba35adfb74845a5fd0c3dc141cbdddd2">protocol</a>;</div><div class="line"><a name="l01998"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#a69abb5aeed755750b9755e5c91db6895"> 1998</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__client__connect__info.html#a69abb5aeed755750b9755e5c91db6895">ietf_version_or_minus_one</a>;</div><div class="line"><a name="l02000"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#a9831b9f9ab54a1aec4bb15324f1c3836"> 2000</a></span>&#160;        <span class="keywordtype">void</span> *<a class="code" href="structlws__client__connect__info.html#a9831b9f9ab54a1aec4bb15324f1c3836">userdata</a>;</div><div class="line"><a name="l02002"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#a7732b996e977393c3e1076be2a8ded6c"> 2002</a></span>&#160;        <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__extension.html">lws_extension</a> *<a class="code" href="structlws__client__connect__info.html#a7732b996e977393c3e1076be2a8ded6c">client_exts</a>;</div><div class="line"><a name="l02004"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#aa9e8e3da4e783a0651b0dea62c2dd1db"> 2004</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__client__connect__info.html#aa9e8e3da4e783a0651b0dea62c2dd1db">method</a>;</div><div class="line"><a name="l02007"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#a6843a60e1050b10db9d98d7eeb45f587"> 2007</a></span>&#160;        <span class="keyword">struct </span>lws *<a class="code" href="structlws__client__connect__info.html#a6843a60e1050b10db9d98d7eeb45f587">parent_wsi</a>;</div><div class="line"><a name="l02011"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#a03c305fdca809667b6a9a83b3edfd83a"> 2011</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__client__connect__info.html#a03c305fdca809667b6a9a83b3edfd83a">uri_replace_from</a>;</div><div class="line"><a name="l02014"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#a9959ba103d3d2484e559a9f7879eebe3"> 2014</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__client__connect__info.html#a9959ba103d3d2484e559a9f7879eebe3">uri_replace_to</a>;</div><div class="line"><a name="l02016"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#a3893181d728f326f9f5b47c1459cb8be"> 2016</a></span>&#160;        <span class="keyword">struct </span>lws_vhost *<a class="code" href="structlws__client__connect__info.html#a3893181d728f326f9f5b47c1459cb8be">vhost</a>;</div><div class="line"><a name="l02018"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#a065063b5117ecd0a59567c97f04bda2e"> 2018</a></span>&#160;        <span class="keyword">struct </span>lws **<a class="code" href="structlws__client__connect__info.html#a065063b5117ecd0a59567c97f04bda2e">pwsi</a>;</div><div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>&#160;        <span class="comment">/* Add new things just above here ---^</span></div><div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>&#160;<span class="comment">         * This is part of the ABI, don&#39;t needlessly break compatibility</span></div><div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>&#160;<span class="comment">         *</span></div><div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>&#160;<span class="comment">         * The below is to ensure later library versions with new</span></div><div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>&#160;<span class="comment">         * members added above will see 0 (default) even if the app</span></div><div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>&#160;<span class="comment">         * was not built against the newer headers.</span></div><div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>&#160;<span class="comment">         */</span></div><div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>&#160;</div><div class="line"><a name="l02038"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#ad47f50d1633dc5df74548606c9a66d73"> 2038</a></span>&#160;        <span class="keywordtype">void</span> *_unused[4]; </div><div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>&#160;};</div><div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>&#160;</div><div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">struct </span>lws *</div><div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160;<a class="code" href="group__client.html#ga0c966136905f467816307cfba6deb5fd">lws_client_connect_via_info</a>(<span class="keyword">struct</span> <a class="code" href="structlws__client__connect__info.html">lws_client_connect_info</a> * ccinfo);</div><div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>&#160;</div><div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>&#160;<span class="comment">/* deprecated, use lws_client_connect_via_info() */</span></div><div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">struct </span>lws * LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>&#160;<a class="code" href="group__client.html#ga4af0a20108a95e8b6d94dd4d80055ff3">lws_client_connect</a>(<span class="keyword">struct</span> lws_context *clients, <span class="keyword">const</span> <span class="keywordtype">char</span> *address,</div><div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>&#160;                   <span class="keywordtype">int</span> port, <span class="keywordtype">int</span> ssl_connection, <span class="keyword">const</span> <span class="keywordtype">char</span> *path,</div><div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>&#160;                   <span class="keyword">const</span> <span class="keywordtype">char</span> *host, <span class="keyword">const</span> <span class="keywordtype">char</span> *origin, <span class="keyword">const</span> <span class="keywordtype">char</span> *protocol,</div><div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>&#160;                   <span class="keywordtype">int</span> ietf_version_or_minus_one) LWS_WARN_DEPRECATED;</div><div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>&#160;<span class="comment">/* deprecated, use lws_client_connect_via_info() */</span></div><div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">struct </span>lws * LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>&#160;<a class="code" href="group__client.html#gac6a8558b4410961a880241c2ac1271e2">lws_client_connect_extended</a>(<span class="keyword">struct</span> lws_context *clients, <span class="keyword">const</span> <span class="keywordtype">char</span> *address,</div><div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>&#160;                            <span class="keywordtype">int</span> port, <span class="keywordtype">int</span> ssl_connection, <span class="keyword">const</span> <span class="keywordtype">char</span> *path,</div><div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>&#160;                            <span class="keyword">const</span> <span class="keywordtype">char</span> *host, <span class="keyword">const</span> <span class="keywordtype">char</span> *origin,</div><div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>&#160;                            <span class="keyword">const</span> <span class="keywordtype">char</span> *protocol, <span class="keywordtype">int</span> ietf_version_or_minus_one,</div><div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160;                            <span class="keywordtype">void</span> *userdata) LWS_WARN_DEPRECATED;</div><div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>&#160;</div><div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>&#160;<a class="code" href="group__client.html#ga4f44b8230e6732816ca5cd8d1aaaf340">lws_init_vhost_client_ssl</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlws__context__creation__info.html">lws_context_creation_info</a> *info,</div><div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>&#160;                          <span class="keyword">struct</span> lws_vhost *vhost);</div><div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>&#160;</div><div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>&#160;lws_http_client_read(<span class="keyword">struct</span> lws *wsi, <span class="keywordtype">char</span> **buf, <span class="keywordtype">int</span> *len);</div><div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>&#160;</div><div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span></div><div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>&#160;lws_client_http_body_pending(<span class="keyword">struct</span> lws *wsi, <span class="keywordtype">int</span> something_left_to_send);</div><div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>&#160;</div><div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>&#160;</div><div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>&#160;</div><div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>&#160;<a class="code" href="group__service.html#gaf95bd0c663d6516a0c80047d9b1167a8">lws_service</a>(<span class="keyword">struct</span> lws_context *context, <span class="keywordtype">int</span> timeout_ms);</div><div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>&#160;</div><div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>&#160;<a class="code" href="group__service.html#ga9b3cc4473fd8848e5bbee7f310712939">lws_service_tsi</a>(<span class="keyword">struct</span> lws_context *context, <span class="keywordtype">int</span> timeout_ms, <span class="keywordtype">int</span> tsi);</div><div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>&#160;</div><div class="line"><a name="l02234"></a><span class="lineno"> 2234</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span></div><div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>&#160;<a class="code" href="group__service.html#ga29c246707997ab7a466aa709aecd2d7b">lws_cancel_service_pt</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l02236"></a><span class="lineno"> 2236</span>&#160;</div><div class="line"><a name="l02248"></a><span class="lineno"> 2248</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span></div><div class="line"><a name="l02249"></a><span class="lineno"> 2249</span>&#160;<a class="code" href="group__service.html#ga53e3d0801dfda7960a7249dd559e68a2">lws_cancel_service</a>(<span class="keyword">struct</span> lws_context *context);</div><div class="line"><a name="l02250"></a><span class="lineno"> 2250</span>&#160;</div><div class="line"><a name="l02273"></a><span class="lineno"> 2273</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>&#160;<a class="code" href="group__service.html#gad82efa5466d14a9f05aa06416375b28d">lws_service_fd</a>(<span class="keyword">struct</span> lws_context *context, <span class="keyword">struct</span> <a class="code" href="structlws__pollfd.html">lws_pollfd</a> *<a class="code" href="structpollfd.html">pollfd</a>);</div><div class="line"><a name="l02275"></a><span class="lineno"> 2275</span>&#160;</div><div class="line"><a name="l02285"></a><span class="lineno"> 2285</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l02286"></a><span class="lineno"> 2286</span>&#160;<a class="code" href="group__service.html#gaebf426eda371ba23642fc11d8e0ace6b">lws_service_fd_tsi</a>(<span class="keyword">struct</span> lws_context *context, <span class="keyword">struct</span> <a class="code" href="structlws__pollfd.html">lws_pollfd</a> *<a class="code" href="structpollfd.html">pollfd</a>,</div><div class="line"><a name="l02287"></a><span class="lineno"> 2287</span>&#160;                   <span class="keywordtype">int</span> tsi);</div><div class="line"><a name="l02288"></a><span class="lineno"> 2288</span>&#160;</div><div class="line"><a name="l02290"></a><span class="lineno"> 2290</span>&#160;</div><div class="line"><a name="l02296"></a><span class="lineno"> 2296</span>&#160;</div><div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>&#160;</div><div class="line"><a name="l02315"></a><span class="lineno"> 2315</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">const</span> <span class="keywordtype">char</span> *</div><div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>&#160;<a class="code" href="group__httpft.html#gab4da87a4800413f15e7aba649fb1d77c">lws_get_mimetype</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *file, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlws__http__mount.html">lws_http_mount</a> *m);</div><div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>&#160;</div><div class="line"><a name="l02336"></a><span class="lineno"> 2336</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l02337"></a><span class="lineno"> 2337</span>&#160;<a class="code" href="group__httpft.html#gab393a06d3d2722af4c3f8b06842c80d7">lws_serve_http_file</a>(<span class="keyword">struct</span> lws *wsi, <span class="keyword">const</span> <span class="keywordtype">char</span> *file, <span class="keyword">const</span> <span class="keywordtype">char</span> *content_type,</div><div class="line"><a name="l02338"></a><span class="lineno"> 2338</span>&#160;                    <span class="keyword">const</span> <span class="keywordtype">char</span> *other_headers, <span class="keywordtype">int</span> other_headers_len);</div><div class="line"><a name="l02339"></a><span class="lineno"> 2339</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l02340"></a><span class="lineno"> 2340</span>&#160;lws_serve_http_file_fragment(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l02342"></a><span class="lineno"> 2342</span>&#160;</div><div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>&#160;</div><div class="line"><a name="l02354"></a><span class="lineno"> 2354</span>&#160;<span class="keyword">enum</span> http_status {</div><div class="line"><a name="l02355"></a><span class="lineno"> 2355</span>&#160;        HTTP_STATUS_OK                                          = 200,</div><div class="line"><a name="l02356"></a><span class="lineno"> 2356</span>&#160;        HTTP_STATUS_NO_CONTENT                                  = 204,</div><div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>&#160;</div><div class="line"><a name="l02358"></a><span class="lineno"> 2358</span>&#160;        HTTP_STATUS_MOVED_PERMANENTLY                           = 301,</div><div class="line"><a name="l02359"></a><span class="lineno"> 2359</span>&#160;        HTTP_STATUS_FOUND                                       = 302,</div><div class="line"><a name="l02360"></a><span class="lineno"> 2360</span>&#160;        HTTP_STATUS_SEE_OTHER                                   = 303,</div><div class="line"><a name="l02361"></a><span class="lineno"> 2361</span>&#160;</div><div class="line"><a name="l02362"></a><span class="lineno"> 2362</span>&#160;        HTTP_STATUS_BAD_REQUEST                                 = 400,</div><div class="line"><a name="l02363"></a><span class="lineno"> 2363</span>&#160;        HTTP_STATUS_UNAUTHORIZED,</div><div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>&#160;        HTTP_STATUS_PAYMENT_REQUIRED,</div><div class="line"><a name="l02365"></a><span class="lineno"> 2365</span>&#160;        HTTP_STATUS_FORBIDDEN,</div><div class="line"><a name="l02366"></a><span class="lineno"> 2366</span>&#160;        HTTP_STATUS_NOT_FOUND,</div><div class="line"><a name="l02367"></a><span class="lineno"> 2367</span>&#160;        HTTP_STATUS_METHOD_NOT_ALLOWED,</div><div class="line"><a name="l02368"></a><span class="lineno"> 2368</span>&#160;        HTTP_STATUS_NOT_ACCEPTABLE,</div><div class="line"><a name="l02369"></a><span class="lineno"> 2369</span>&#160;        HTTP_STATUS_PROXY_AUTH_REQUIRED,</div><div class="line"><a name="l02370"></a><span class="lineno"> 2370</span>&#160;        HTTP_STATUS_REQUEST_TIMEOUT,</div><div class="line"><a name="l02371"></a><span class="lineno"> 2371</span>&#160;        HTTP_STATUS_CONFLICT,</div><div class="line"><a name="l02372"></a><span class="lineno"> 2372</span>&#160;        HTTP_STATUS_GONE,</div><div class="line"><a name="l02373"></a><span class="lineno"> 2373</span>&#160;        HTTP_STATUS_LENGTH_REQUIRED,</div><div class="line"><a name="l02374"></a><span class="lineno"> 2374</span>&#160;        HTTP_STATUS_PRECONDITION_FAILED,</div><div class="line"><a name="l02375"></a><span class="lineno"> 2375</span>&#160;        HTTP_STATUS_REQ_ENTITY_TOO_LARGE,</div><div class="line"><a name="l02376"></a><span class="lineno"> 2376</span>&#160;        HTTP_STATUS_REQ_URI_TOO_LONG,</div><div class="line"><a name="l02377"></a><span class="lineno"> 2377</span>&#160;        HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE,</div><div class="line"><a name="l02378"></a><span class="lineno"> 2378</span>&#160;        HTTP_STATUS_REQ_RANGE_NOT_SATISFIABLE,</div><div class="line"><a name="l02379"></a><span class="lineno"> 2379</span>&#160;        HTTP_STATUS_EXPECTATION_FAILED,</div><div class="line"><a name="l02380"></a><span class="lineno"> 2380</span>&#160;</div><div class="line"><a name="l02381"></a><span class="lineno"> 2381</span>&#160;        HTTP_STATUS_INTERNAL_SERVER_ERROR                       = 500,</div><div class="line"><a name="l02382"></a><span class="lineno"> 2382</span>&#160;        HTTP_STATUS_NOT_IMPLEMENTED,</div><div class="line"><a name="l02383"></a><span class="lineno"> 2383</span>&#160;        HTTP_STATUS_BAD_GATEWAY,</div><div class="line"><a name="l02384"></a><span class="lineno"> 2384</span>&#160;        HTTP_STATUS_SERVICE_UNAVAILABLE,</div><div class="line"><a name="l02385"></a><span class="lineno"> 2385</span>&#160;        HTTP_STATUS_GATEWAY_TIMEOUT,</div><div class="line"><a name="l02386"></a><span class="lineno"> 2386</span>&#160;        HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED,</div><div class="line"><a name="l02387"></a><span class="lineno"> 2387</span>&#160;};</div><div class="line"><a name="l02388"></a><span class="lineno"> 2388</span>&#160;</div><div class="line"><a name="l02389"></a><span class="lineno"><a class="line" href="structlws__process__html__args.html"> 2389</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__process__html__args.html">lws_process_html_args</a> {</div><div class="line"><a name="l02390"></a><span class="lineno"><a class="line" href="structlws__process__html__args.html#a11859d8bedd379fbf64543b25c65fe14"> 2390</a></span>&#160;        <span class="keywordtype">char</span> *<a class="code" href="structlws__process__html__args.html#a11859d8bedd379fbf64543b25c65fe14">p</a>; </div><div class="line"><a name="l02391"></a><span class="lineno"><a class="line" href="structlws__process__html__args.html#a754513f2311241cabb0cd1c90d7307ef"> 2391</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__process__html__args.html#a754513f2311241cabb0cd1c90d7307ef">len</a>; </div><div class="line"><a name="l02392"></a><span class="lineno"><a class="line" href="structlws__process__html__args.html#a8be7fd396a1942ea2449a2fda990ff99"> 2392</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__process__html__args.html#a8be7fd396a1942ea2449a2fda990ff99">max_len</a>; </div><div class="line"><a name="l02393"></a><span class="lineno"><a class="line" href="structlws__process__html__args.html#a362547891ee0d693f3900a1f807ea475"> 2393</a></span>&#160;        <span class="keywordtype">int</span> <span class="keyword">final</span>; </div><div class="line"><a name="l02394"></a><span class="lineno"> 2394</span>&#160;};</div><div class="line"><a name="l02395"></a><span class="lineno"> 2395</span>&#160;</div><div class="line"><a name="l02396"></a><span class="lineno"> 2396</span>&#160;<span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *(*lws_process_html_state_cb)(<span class="keywordtype">void</span> *data, <span class="keywordtype">int</span> index);</div><div class="line"><a name="l02397"></a><span class="lineno"> 2397</span>&#160;</div><div class="line"><a name="l02398"></a><span class="lineno"><a class="line" href="structlws__process__html__state.html"> 2398</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__process__html__state.html">lws_process_html_state</a> {</div><div class="line"><a name="l02399"></a><span class="lineno"><a class="line" href="structlws__process__html__state.html#af0732884ef891e24fe5fa237ebaa21a3"> 2399</a></span>&#160;        <span class="keywordtype">char</span> *<a class="code" href="structlws__process__html__state.html#af0732884ef891e24fe5fa237ebaa21a3">start</a>; </div><div class="line"><a name="l02400"></a><span class="lineno"><a class="line" href="structlws__process__html__state.html#a71982bc1cbd8cf876ca0f545144404eb"> 2400</a></span>&#160;        <span class="keywordtype">char</span> swallow[16]; </div><div class="line"><a name="l02401"></a><span class="lineno"><a class="line" href="structlws__process__html__state.html#a53234f2948812c7208a256f9f5b23c20"> 2401</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__process__html__state.html#a53234f2948812c7208a256f9f5b23c20">pos</a>; </div><div class="line"><a name="l02402"></a><span class="lineno"><a class="line" href="structlws__process__html__state.html#af21119890fdfebe28fb5c4dabfc1bdf5"> 2402</a></span>&#160;        <span class="keywordtype">void</span> *<a class="code" href="structlws__process__html__state.html#af21119890fdfebe28fb5c4dabfc1bdf5">data</a>; </div><div class="line"><a name="l02403"></a><span class="lineno"><a class="line" href="structlws__process__html__state.html#a3b113e00c03a2fded51b1c85ff5bf077"> 2403</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> * <span class="keyword">const</span> *<a class="code" href="structlws__process__html__state.html#a3b113e00c03a2fded51b1c85ff5bf077">vars</a>; </div><div class="line"><a name="l02404"></a><span class="lineno"><a class="line" href="structlws__process__html__state.html#adcafd17704775b4bbeea9561fb340968"> 2404</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__process__html__state.html#adcafd17704775b4bbeea9561fb340968">count_vars</a>; </div><div class="line"><a name="l02406"></a><span class="lineno"><a class="line" href="structlws__process__html__state.html#a693d2fb45378afee5da29b539c1ea644"> 2406</a></span>&#160;        lws_process_html_state_cb <a class="code" href="structlws__process__html__state.html#a693d2fb45378afee5da29b539c1ea644">replace</a>; </div><div class="line"><a name="l02407"></a><span class="lineno"> 2407</span>&#160;};</div><div class="line"><a name="l02408"></a><span class="lineno"> 2408</span>&#160;</div><div class="line"><a name="l02413"></a><span class="lineno"> 2413</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l02414"></a><span class="lineno"> 2414</span>&#160;<a class="code" href="group__html-chunked-substitution.html#ga643073f918c0a7016b690aae9793fd60">lws_chunked_html_process</a>(<span class="keyword">struct</span> <a class="code" href="structlws__process__html__args.html">lws_process_html_args</a> *args,</div><div class="line"><a name="l02415"></a><span class="lineno"> 2415</span>&#160;                         <span class="keyword">struct</span> <a class="code" href="structlws__process__html__state.html">lws_process_html_state</a> *s);</div><div class="line"><a name="l02417"></a><span class="lineno"> 2417</span>&#160;</div><div class="line"><a name="l02450"></a><span class="lineno"> 2450</span>&#160;</div><div class="line"><a name="l02458"></a><span class="lineno"><a class="line" href="structlws__tokens.html"> 2458</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__tokens.html">lws_tokens</a> {</div><div class="line"><a name="l02459"></a><span class="lineno"><a class="line" href="structlws__tokens.html#a9f3635412bc71a5cb78e9862b55f10cd"> 2459</a></span>&#160;        <span class="keywordtype">char</span> *<a class="code" href="structlws__tokens.html#a9f3635412bc71a5cb78e9862b55f10cd">token</a>; </div><div class="line"><a name="l02460"></a><span class="lineno"><a class="line" href="structlws__tokens.html#a855b7375d1d58516c0ecd4b60e9a7766"> 2460</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__tokens.html#a855b7375d1d58516c0ecd4b60e9a7766">token_len</a>; </div><div class="line"><a name="l02461"></a><span class="lineno"> 2461</span>&#160;};</div><div class="line"><a name="l02462"></a><span class="lineno"> 2462</span>&#160;</div><div class="line"><a name="l02463"></a><span class="lineno"> 2463</span>&#160;<span class="comment">/* enum lws_token_indexes</span></div><div class="line"><a name="l02464"></a><span class="lineno"> 2464</span>&#160;<span class="comment"> * these have to be kept in sync with lextable.h / minilex.c</span></div><div class="line"><a name="l02465"></a><span class="lineno"> 2465</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l02466"></a><span class="lineno"> 2466</span>&#160;<span class="comment"> * NOTE: These public enums are part of the abi.  If you want to add one,</span></div><div class="line"><a name="l02467"></a><span class="lineno"> 2467</span>&#160;<span class="comment"> * add it at where specified so existing users are unaffected.</span></div><div class="line"><a name="l02468"></a><span class="lineno"> 2468</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02469"></a><span class="lineno"> 2469</span>&#160;<span class="keyword">enum</span> lws_token_indexes {</div><div class="line"><a name="l02470"></a><span class="lineno"> 2470</span>&#160;        WSI_TOKEN_GET_URI                                       =  0,</div><div class="line"><a name="l02471"></a><span class="lineno"> 2471</span>&#160;        WSI_TOKEN_POST_URI                                      =  1,</div><div class="line"><a name="l02472"></a><span class="lineno"> 2472</span>&#160;        WSI_TOKEN_OPTIONS_URI                                   =  2,</div><div class="line"><a name="l02473"></a><span class="lineno"> 2473</span>&#160;        WSI_TOKEN_HOST                                          =  3,</div><div class="line"><a name="l02474"></a><span class="lineno"> 2474</span>&#160;        WSI_TOKEN_CONNECTION                                    =  4,</div><div class="line"><a name="l02475"></a><span class="lineno"> 2475</span>&#160;        WSI_TOKEN_UPGRADE                                       =  5,</div><div class="line"><a name="l02476"></a><span class="lineno"> 2476</span>&#160;        WSI_TOKEN_ORIGIN                                        =  6,</div><div class="line"><a name="l02477"></a><span class="lineno"> 2477</span>&#160;        WSI_TOKEN_DRAFT                                         =  7,</div><div class="line"><a name="l02478"></a><span class="lineno"> 2478</span>&#160;        WSI_TOKEN_CHALLENGE                                     =  8,</div><div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>&#160;        WSI_TOKEN_EXTENSIONS                                    =  9,</div><div class="line"><a name="l02480"></a><span class="lineno"> 2480</span>&#160;        WSI_TOKEN_KEY1                                          = 10,</div><div class="line"><a name="l02481"></a><span class="lineno"> 2481</span>&#160;        WSI_TOKEN_KEY2                                          = 11,</div><div class="line"><a name="l02482"></a><span class="lineno"> 2482</span>&#160;        WSI_TOKEN_PROTOCOL                                      = 12,</div><div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>&#160;        WSI_TOKEN_ACCEPT                                        = 13,</div><div class="line"><a name="l02484"></a><span class="lineno"> 2484</span>&#160;        WSI_TOKEN_NONCE                                         = 14,</div><div class="line"><a name="l02485"></a><span class="lineno"> 2485</span>&#160;        WSI_TOKEN_HTTP                                          = 15,</div><div class="line"><a name="l02486"></a><span class="lineno"> 2486</span>&#160;        WSI_TOKEN_HTTP2_SETTINGS                                = 16,</div><div class="line"><a name="l02487"></a><span class="lineno"> 2487</span>&#160;        WSI_TOKEN_HTTP_ACCEPT                                   = 17,</div><div class="line"><a name="l02488"></a><span class="lineno"> 2488</span>&#160;        WSI_TOKEN_HTTP_AC_REQUEST_HEADERS                       = 18,</div><div class="line"><a name="l02489"></a><span class="lineno"> 2489</span>&#160;        WSI_TOKEN_HTTP_IF_MODIFIED_SINCE                        = 19,</div><div class="line"><a name="l02490"></a><span class="lineno"> 2490</span>&#160;        WSI_TOKEN_HTTP_IF_NONE_MATCH                            = 20,</div><div class="line"><a name="l02491"></a><span class="lineno"> 2491</span>&#160;        WSI_TOKEN_HTTP_ACCEPT_ENCODING                          = 21,</div><div class="line"><a name="l02492"></a><span class="lineno"> 2492</span>&#160;        WSI_TOKEN_HTTP_ACCEPT_LANGUAGE                          = 22,</div><div class="line"><a name="l02493"></a><span class="lineno"> 2493</span>&#160;        WSI_TOKEN_HTTP_PRAGMA                                   = 23,</div><div class="line"><a name="l02494"></a><span class="lineno"> 2494</span>&#160;        WSI_TOKEN_HTTP_CACHE_CONTROL                            = 24,</div><div class="line"><a name="l02495"></a><span class="lineno"> 2495</span>&#160;        WSI_TOKEN_HTTP_AUTHORIZATION                            = 25,</div><div class="line"><a name="l02496"></a><span class="lineno"> 2496</span>&#160;        WSI_TOKEN_HTTP_COOKIE                                   = 26,</div><div class="line"><a name="l02497"></a><span class="lineno"> 2497</span>&#160;        WSI_TOKEN_HTTP_CONTENT_LENGTH                           = 27,</div><div class="line"><a name="l02498"></a><span class="lineno"> 2498</span>&#160;        WSI_TOKEN_HTTP_CONTENT_TYPE                             = 28,</div><div class="line"><a name="l02499"></a><span class="lineno"> 2499</span>&#160;        WSI_TOKEN_HTTP_DATE                                     = 29,</div><div class="line"><a name="l02500"></a><span class="lineno"> 2500</span>&#160;        WSI_TOKEN_HTTP_RANGE                                    = 30,</div><div class="line"><a name="l02501"></a><span class="lineno"> 2501</span>&#160;        WSI_TOKEN_HTTP_REFERER                                  = 31,</div><div class="line"><a name="l02502"></a><span class="lineno"> 2502</span>&#160;        WSI_TOKEN_KEY                                           = 32,</div><div class="line"><a name="l02503"></a><span class="lineno"> 2503</span>&#160;        WSI_TOKEN_VERSION                                       = 33,</div><div class="line"><a name="l02504"></a><span class="lineno"> 2504</span>&#160;        WSI_TOKEN_SWORIGIN                                      = 34,</div><div class="line"><a name="l02505"></a><span class="lineno"> 2505</span>&#160;</div><div class="line"><a name="l02506"></a><span class="lineno"> 2506</span>&#160;        WSI_TOKEN_HTTP_COLON_AUTHORITY                          = 35,</div><div class="line"><a name="l02507"></a><span class="lineno"> 2507</span>&#160;        WSI_TOKEN_HTTP_COLON_METHOD                             = 36,</div><div class="line"><a name="l02508"></a><span class="lineno"> 2508</span>&#160;        WSI_TOKEN_HTTP_COLON_PATH                               = 37,</div><div class="line"><a name="l02509"></a><span class="lineno"> 2509</span>&#160;        WSI_TOKEN_HTTP_COLON_SCHEME                             = 38,</div><div class="line"><a name="l02510"></a><span class="lineno"> 2510</span>&#160;        WSI_TOKEN_HTTP_COLON_STATUS                             = 39,</div><div class="line"><a name="l02511"></a><span class="lineno"> 2511</span>&#160;</div><div class="line"><a name="l02512"></a><span class="lineno"> 2512</span>&#160;        WSI_TOKEN_HTTP_ACCEPT_CHARSET                           = 40,</div><div class="line"><a name="l02513"></a><span class="lineno"> 2513</span>&#160;        WSI_TOKEN_HTTP_ACCEPT_RANGES                            = 41,</div><div class="line"><a name="l02514"></a><span class="lineno"> 2514</span>&#160;        WSI_TOKEN_HTTP_ACCESS_CONTROL_ALLOW_ORIGIN              = 42,</div><div class="line"><a name="l02515"></a><span class="lineno"> 2515</span>&#160;        WSI_TOKEN_HTTP_AGE                                      = 43,</div><div class="line"><a name="l02516"></a><span class="lineno"> 2516</span>&#160;        WSI_TOKEN_HTTP_ALLOW                                    = 44,</div><div class="line"><a name="l02517"></a><span class="lineno"> 2517</span>&#160;        WSI_TOKEN_HTTP_CONTENT_DISPOSITION                      = 45,</div><div class="line"><a name="l02518"></a><span class="lineno"> 2518</span>&#160;        WSI_TOKEN_HTTP_CONTENT_ENCODING                         = 46,</div><div class="line"><a name="l02519"></a><span class="lineno"> 2519</span>&#160;        WSI_TOKEN_HTTP_CONTENT_LANGUAGE                         = 47,</div><div class="line"><a name="l02520"></a><span class="lineno"> 2520</span>&#160;        WSI_TOKEN_HTTP_CONTENT_LOCATION                         = 48,</div><div class="line"><a name="l02521"></a><span class="lineno"> 2521</span>&#160;        WSI_TOKEN_HTTP_CONTENT_RANGE                            = 49,</div><div class="line"><a name="l02522"></a><span class="lineno"> 2522</span>&#160;        WSI_TOKEN_HTTP_ETAG                                     = 50,</div><div class="line"><a name="l02523"></a><span class="lineno"> 2523</span>&#160;        WSI_TOKEN_HTTP_EXPECT                                   = 51,</div><div class="line"><a name="l02524"></a><span class="lineno"> 2524</span>&#160;        WSI_TOKEN_HTTP_EXPIRES                                  = 52,</div><div class="line"><a name="l02525"></a><span class="lineno"> 2525</span>&#160;        WSI_TOKEN_HTTP_FROM                                     = 53,</div><div class="line"><a name="l02526"></a><span class="lineno"> 2526</span>&#160;        WSI_TOKEN_HTTP_IF_MATCH                                 = 54,</div><div class="line"><a name="l02527"></a><span class="lineno"> 2527</span>&#160;        WSI_TOKEN_HTTP_IF_RANGE                                 = 55,</div><div class="line"><a name="l02528"></a><span class="lineno"> 2528</span>&#160;        WSI_TOKEN_HTTP_IF_UNMODIFIED_SINCE                      = 56,</div><div class="line"><a name="l02529"></a><span class="lineno"> 2529</span>&#160;        WSI_TOKEN_HTTP_LAST_MODIFIED                            = 57,</div><div class="line"><a name="l02530"></a><span class="lineno"> 2530</span>&#160;        WSI_TOKEN_HTTP_LINK                                     = 58,</div><div class="line"><a name="l02531"></a><span class="lineno"> 2531</span>&#160;        WSI_TOKEN_HTTP_LOCATION                                 = 59,</div><div class="line"><a name="l02532"></a><span class="lineno"> 2532</span>&#160;        WSI_TOKEN_HTTP_MAX_FORWARDS                             = 60,</div><div class="line"><a name="l02533"></a><span class="lineno"> 2533</span>&#160;        WSI_TOKEN_HTTP_PROXY_AUTHENTICATE                       = 61,</div><div class="line"><a name="l02534"></a><span class="lineno"> 2534</span>&#160;        WSI_TOKEN_HTTP_PROXY_AUTHORIZATION                      = 62,</div><div class="line"><a name="l02535"></a><span class="lineno"> 2535</span>&#160;        WSI_TOKEN_HTTP_REFRESH                                  = 63,</div><div class="line"><a name="l02536"></a><span class="lineno"> 2536</span>&#160;        WSI_TOKEN_HTTP_RETRY_AFTER                              = 64,</div><div class="line"><a name="l02537"></a><span class="lineno"> 2537</span>&#160;        WSI_TOKEN_HTTP_SERVER                                   = 65,</div><div class="line"><a name="l02538"></a><span class="lineno"> 2538</span>&#160;        WSI_TOKEN_HTTP_SET_COOKIE                               = 66,</div><div class="line"><a name="l02539"></a><span class="lineno"> 2539</span>&#160;        WSI_TOKEN_HTTP_STRICT_TRANSPORT_SECURITY                = 67,</div><div class="line"><a name="l02540"></a><span class="lineno"> 2540</span>&#160;        WSI_TOKEN_HTTP_TRANSFER_ENCODING                        = 68,</div><div class="line"><a name="l02541"></a><span class="lineno"> 2541</span>&#160;        WSI_TOKEN_HTTP_USER_AGENT                               = 69,</div><div class="line"><a name="l02542"></a><span class="lineno"> 2542</span>&#160;        WSI_TOKEN_HTTP_VARY                                     = 70,</div><div class="line"><a name="l02543"></a><span class="lineno"> 2543</span>&#160;        WSI_TOKEN_HTTP_VIA                                      = 71,</div><div class="line"><a name="l02544"></a><span class="lineno"> 2544</span>&#160;        WSI_TOKEN_HTTP_WWW_AUTHENTICATE                         = 72,</div><div class="line"><a name="l02545"></a><span class="lineno"> 2545</span>&#160;</div><div class="line"><a name="l02546"></a><span class="lineno"> 2546</span>&#160;        WSI_TOKEN_PATCH_URI                                     = 73,</div><div class="line"><a name="l02547"></a><span class="lineno"> 2547</span>&#160;        WSI_TOKEN_PUT_URI                                       = 74,</div><div class="line"><a name="l02548"></a><span class="lineno"> 2548</span>&#160;        WSI_TOKEN_DELETE_URI                                    = 75,</div><div class="line"><a name="l02549"></a><span class="lineno"> 2549</span>&#160;</div><div class="line"><a name="l02550"></a><span class="lineno"> 2550</span>&#160;        WSI_TOKEN_HTTP_URI_ARGS                                 = 76,</div><div class="line"><a name="l02551"></a><span class="lineno"> 2551</span>&#160;        WSI_TOKEN_PROXY                                         = 77,</div><div class="line"><a name="l02552"></a><span class="lineno"> 2552</span>&#160;        WSI_TOKEN_HTTP_X_REAL_IP                                = 78,</div><div class="line"><a name="l02553"></a><span class="lineno"> 2553</span>&#160;        WSI_TOKEN_HTTP1_0                                       = 79,</div><div class="line"><a name="l02554"></a><span class="lineno"> 2554</span>&#160;</div><div class="line"><a name="l02555"></a><span class="lineno"> 2555</span>&#160;        <span class="comment">/****** add new things just above ---^ ******/</span></div><div class="line"><a name="l02556"></a><span class="lineno"> 2556</span>&#160;</div><div class="line"><a name="l02557"></a><span class="lineno"> 2557</span>&#160;        <span class="comment">/* use token storage to stash these internally, not for</span></div><div class="line"><a name="l02558"></a><span class="lineno"> 2558</span>&#160;<span class="comment">         * user use */</span></div><div class="line"><a name="l02559"></a><span class="lineno"> 2559</span>&#160;</div><div class="line"><a name="l02560"></a><span class="lineno"> 2560</span>&#160;        _WSI_TOKEN_CLIENT_SENT_PROTOCOLS,</div><div class="line"><a name="l02561"></a><span class="lineno"> 2561</span>&#160;        _WSI_TOKEN_CLIENT_PEER_ADDRESS,</div><div class="line"><a name="l02562"></a><span class="lineno"> 2562</span>&#160;        _WSI_TOKEN_CLIENT_URI,</div><div class="line"><a name="l02563"></a><span class="lineno"> 2563</span>&#160;        _WSI_TOKEN_CLIENT_HOST,</div><div class="line"><a name="l02564"></a><span class="lineno"> 2564</span>&#160;        _WSI_TOKEN_CLIENT_ORIGIN,</div><div class="line"><a name="l02565"></a><span class="lineno"> 2565</span>&#160;        _WSI_TOKEN_CLIENT_METHOD,</div><div class="line"><a name="l02566"></a><span class="lineno"> 2566</span>&#160;</div><div class="line"><a name="l02567"></a><span class="lineno"> 2567</span>&#160;        <span class="comment">/* always last real token index*/</span></div><div class="line"><a name="l02568"></a><span class="lineno"> 2568</span>&#160;        WSI_TOKEN_COUNT,</div><div class="line"><a name="l02569"></a><span class="lineno"> 2569</span>&#160;</div><div class="line"><a name="l02570"></a><span class="lineno"> 2570</span>&#160;        <span class="comment">/* parser state additions, no storage associated */</span></div><div class="line"><a name="l02571"></a><span class="lineno"> 2571</span>&#160;        WSI_TOKEN_NAME_PART,</div><div class="line"><a name="l02572"></a><span class="lineno"> 2572</span>&#160;        WSI_TOKEN_SKIPPING,</div><div class="line"><a name="l02573"></a><span class="lineno"> 2573</span>&#160;        WSI_TOKEN_SKIPPING_SAW_CR,</div><div class="line"><a name="l02574"></a><span class="lineno"> 2574</span>&#160;        WSI_PARSING_COMPLETE,</div><div class="line"><a name="l02575"></a><span class="lineno"> 2575</span>&#160;        WSI_INIT_TOKEN_MUXURL,</div><div class="line"><a name="l02576"></a><span class="lineno"> 2576</span>&#160;};</div><div class="line"><a name="l02577"></a><span class="lineno"> 2577</span>&#160;</div><div class="line"><a name="l02578"></a><span class="lineno"><a class="line" href="structlws__token__limits.html"> 2578</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__token__limits.html">lws_token_limits</a> {</div><div class="line"><a name="l02579"></a><span class="lineno"><a class="line" href="structlws__token__limits.html#a6ec712306cbf8585bce7a56758a3ceff"> 2579</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> token_limit[WSI_TOKEN_COUNT]; </div><div class="line"><a name="l02580"></a><span class="lineno"> 2580</span>&#160;};</div><div class="line"><a name="l02581"></a><span class="lineno"> 2581</span>&#160;</div><div class="line"><a name="l02587"></a><span class="lineno"> 2587</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *</div><div class="line"><a name="l02588"></a><span class="lineno"> 2588</span>&#160;<a class="code" href="group__HTTP-headers-read.html#ga2c0597b2ef1d2cee35736c338bcbd17b">lws_token_to_string</a>(<span class="keyword">enum</span> lws_token_indexes token);</div><div class="line"><a name="l02589"></a><span class="lineno"> 2589</span>&#160;</div><div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>&#160;</div><div class="line"><a name="l02599"></a><span class="lineno"> 2599</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l02600"></a><span class="lineno"> 2600</span>&#160;<a class="code" href="group__HTTP-headers-read.html#ga8ade0e1ffb0da7e62b989d8d867bf6c8">lws_hdr_total_length</a>(<span class="keyword">struct</span> lws *wsi, <span class="keyword">enum</span> lws_token_indexes h);</div><div class="line"><a name="l02601"></a><span class="lineno"> 2601</span>&#160;</div><div class="line"><a name="l02611"></a><span class="lineno"> 2611</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l02612"></a><span class="lineno"> 2612</span>&#160;<a class="code" href="group__HTTP-headers-read.html#ga594f3d0ece5b09c2ccf9f98ea533bb4e">lws_hdr_fragment_length</a>(<span class="keyword">struct</span> lws *wsi, <span class="keyword">enum</span> lws_token_indexes h, <span class="keywordtype">int</span> frag_idx);</div><div class="line"><a name="l02613"></a><span class="lineno"> 2613</span>&#160;</div><div class="line"><a name="l02627"></a><span class="lineno"> 2627</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l02628"></a><span class="lineno"> 2628</span>&#160;<a class="code" href="group__HTTP-headers-read.html#ga6ce6aa1c0155ea42b7708bed271d1c77">lws_hdr_copy</a>(<span class="keyword">struct</span> lws *wsi, <span class="keywordtype">char</span> *dest, <span class="keywordtype">int</span> len, <span class="keyword">enum</span> lws_token_indexes h);</div><div class="line"><a name="l02629"></a><span class="lineno"> 2629</span>&#160;</div><div class="line"><a name="l02647"></a><span class="lineno"> 2647</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l02648"></a><span class="lineno"> 2648</span>&#160;<a class="code" href="group__HTTP-headers-read.html#gaa427cad61a9a5e3004afd65c4527b5e9">lws_hdr_copy_fragment</a>(<span class="keyword">struct</span> lws *wsi, <span class="keywordtype">char</span> *dest, <span class="keywordtype">int</span> len,</div><div class="line"><a name="l02649"></a><span class="lineno"> 2649</span>&#160;                      <span class="keyword">enum</span> lws_token_indexes h, <span class="keywordtype">int</span> frag_idx);</div><div class="line"><a name="l02650"></a><span class="lineno"> 2650</span>&#160;</div><div class="line"><a name="l02661"></a><span class="lineno"> 2661</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">const</span> <span class="keywordtype">char</span> *</div><div class="line"><a name="l02662"></a><span class="lineno"> 2662</span>&#160;<a class="code" href="group__HTTP-headers-read.html#ga84e9ce5e71a77501a0998ac403a984c2">lws_get_urlarg_by_name</a>(<span class="keyword">struct</span> lws *wsi, <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keywordtype">char</span> *buf, <span class="keywordtype">int</span> len);</div><div class="line"><a name="l02664"></a><span class="lineno"> 2664</span>&#160;</div><div class="line"><a name="l02679"></a><span class="lineno"> 2679</span>&#160;</div><div class="line"><a name="l02690"></a><span class="lineno"> 2690</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l02691"></a><span class="lineno"> 2691</span>&#160;<a class="code" href="group__HTTP-headers-create.html#ga29b7d6d2ddfdbaff3d8b607e7e3151b6">lws_add_http_header_status</a>(<span class="keyword">struct</span> lws *wsi,</div><div class="line"><a name="l02692"></a><span class="lineno"> 2692</span>&#160;                           <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> code, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> **p,</div><div class="line"><a name="l02693"></a><span class="lineno"> 2693</span>&#160;                           <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *end);</div><div class="line"><a name="l02706"></a><span class="lineno"> 2706</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l02707"></a><span class="lineno"> 2707</span>&#160;<a class="code" href="group__HTTP-headers-create.html#ga2b36bf44405755ff51c1939303b995a8">lws_add_http_header_by_name</a>(<span class="keyword">struct</span> lws *wsi, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *name,</div><div class="line"><a name="l02708"></a><span class="lineno"> 2708</span>&#160;                            <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *value, <span class="keywordtype">int</span> length,</div><div class="line"><a name="l02709"></a><span class="lineno"> 2709</span>&#160;                            <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> **p, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *end);</div><div class="line"><a name="l02723"></a><span class="lineno"> 2723</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l02724"></a><span class="lineno"> 2724</span>&#160;<a class="code" href="group__HTTP-headers-create.html#gaf74adb761b22566ad70004882712dce1">lws_add_http_header_by_token</a>(<span class="keyword">struct</span> lws *wsi, <span class="keyword">enum</span> lws_token_indexes token,</div><div class="line"><a name="l02725"></a><span class="lineno"> 2725</span>&#160;                             <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *value, <span class="keywordtype">int</span> length,</div><div class="line"><a name="l02726"></a><span class="lineno"> 2726</span>&#160;                             <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> **p, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *end);</div><div class="line"><a name="l02737"></a><span class="lineno"> 2737</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l02738"></a><span class="lineno"> 2738</span>&#160;<a class="code" href="group__HTTP-headers-create.html#gacc76a5babcb4dce1b01b1955aa7a2faf">lws_add_http_header_content_length</a>(<span class="keyword">struct</span> lws *wsi,</div><div class="line"><a name="l02739"></a><span class="lineno"> 2739</span>&#160;                                   <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> content_length,</div><div class="line"><a name="l02740"></a><span class="lineno"> 2740</span>&#160;                                   <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> **p, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *end);</div><div class="line"><a name="l02750"></a><span class="lineno"> 2750</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l02751"></a><span class="lineno"> 2751</span>&#160;<a class="code" href="group__HTTP-headers-create.html#ga4887605ff2242a54db3a7fa01f6f864b">lws_finalize_http_header</a>(<span class="keyword">struct</span> lws *wsi, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> **p,</div><div class="line"><a name="l02752"></a><span class="lineno"> 2752</span>&#160;                         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *end);</div><div class="line"><a name="l02754"></a><span class="lineno"> 2754</span>&#160;</div><div class="line"><a name="l02773"></a><span class="lineno"> 2773</span>&#160;</div><div class="line"><a name="l02776"></a><span class="lineno"><a class="line" href="group__form-parsing.html#ga41a74a822771d3dce89751aa3bce28ae"> 2776</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="group__form-parsing.html#ga41a74a822771d3dce89751aa3bce28ae">lws_spa_fileupload_states</a> {</div><div class="line"><a name="l02777"></a><span class="lineno"><a class="line" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aead3a958e7719ac273c3ba4f684f00c87f"> 2777</a></span>&#160;        <a class="code" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aead3a958e7719ac273c3ba4f684f00c87f">LWS_UFS_CONTENT</a>,</div><div class="line"><a name="l02779"></a><span class="lineno"><a class="line" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea6ce2a55a4c3695cdb640c893d95bd3a7"> 2779</a></span>&#160;        <a class="code" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea6ce2a55a4c3695cdb640c893d95bd3a7">LWS_UFS_FINAL_CONTENT</a>,</div><div class="line"><a name="l02781"></a><span class="lineno"><a class="line" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea2d25de44865bd44e5a3903a2bab9ca83"> 2781</a></span>&#160;        <a class="code" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea2d25de44865bd44e5a3903a2bab9ca83">LWS_UFS_OPEN</a></div><div class="line"><a name="l02783"></a><span class="lineno"> 2783</span>&#160;};</div><div class="line"><a name="l02784"></a><span class="lineno"> 2784</span>&#160;</div><div class="line"><a name="l02798"></a><span class="lineno"><a class="line" href="group__form-parsing.html#ga5a70527c0861c2ffa3d29333a6aa7f8e"> 2798</a></span>&#160;<span class="keyword">typedef</span> int (*<a class="code" href="group__form-parsing.html#ga5a70527c0861c2ffa3d29333a6aa7f8e">lws_spa_fileupload_cb</a>)(<span class="keywordtype">void</span> *data, <span class="keyword">const</span> <span class="keywordtype">char</span> *name,</div><div class="line"><a name="l02799"></a><span class="lineno"> 2799</span>&#160;                        <span class="keyword">const</span> <span class="keywordtype">char</span> *filename, <span class="keywordtype">char</span> *buf, <span class="keywordtype">int</span> len,</div><div class="line"><a name="l02800"></a><span class="lineno"> 2800</span>&#160;                        <span class="keyword">enum</span> <a class="code" href="group__form-parsing.html#ga41a74a822771d3dce89751aa3bce28ae">lws_spa_fileupload_states</a> state);</div><div class="line"><a name="l02801"></a><span class="lineno"> 2801</span>&#160;</div><div class="line"><a name="l02804"></a><span class="lineno"> 2804</span>&#160;<span class="keyword">struct </span>lws_spa;</div><div class="line"><a name="l02805"></a><span class="lineno"> 2805</span>&#160;</div><div class="line"><a name="l02824"></a><span class="lineno"> 2824</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">struct </span>lws_spa *</div><div class="line"><a name="l02825"></a><span class="lineno"> 2825</span>&#160;<a class="code" href="group__form-parsing.html#ga162f86762173a2bc8c28497941d74815">lws_spa_create</a>(<span class="keyword">struct</span> lws *wsi, <span class="keyword">const</span> <span class="keywordtype">char</span> * <span class="keyword">const</span> *param_names,</div><div class="line"><a name="l02826"></a><span class="lineno"> 2826</span>&#160;               <span class="keywordtype">int</span> count_params, <span class="keywordtype">int</span> max_storage, <a class="code" href="group__form-parsing.html#ga5a70527c0861c2ffa3d29333a6aa7f8e">lws_spa_fileupload_cb</a> opt_cb,</div><div class="line"><a name="l02827"></a><span class="lineno"> 2827</span>&#160;               <span class="keywordtype">void</span> *opt_data);</div><div class="line"><a name="l02828"></a><span class="lineno"> 2828</span>&#160;</div><div class="line"><a name="l02836"></a><span class="lineno"> 2836</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l02837"></a><span class="lineno"> 2837</span>&#160;<a class="code" href="group__form-parsing.html#ga9ad9ebf5ea1a7108415ed7e04cb231d2">lws_spa_process</a>(<span class="keyword">struct</span> lws_spa *spa, <span class="keyword">const</span> <span class="keywordtype">char</span> *in, <span class="keywordtype">int</span> len);</div><div class="line"><a name="l02838"></a><span class="lineno"> 2838</span>&#160;</div><div class="line"><a name="l02844"></a><span class="lineno"> 2844</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l02845"></a><span class="lineno"> 2845</span>&#160;<a class="code" href="group__form-parsing.html#ga83835bf250ee3d4a60f36a182f2b8d24">lws_spa_finalize</a>(<span class="keyword">struct</span> lws_spa *spa);</div><div class="line"><a name="l02846"></a><span class="lineno"> 2846</span>&#160;</div><div class="line"><a name="l02853"></a><span class="lineno"> 2853</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l02854"></a><span class="lineno"> 2854</span>&#160;<a class="code" href="group__form-parsing.html#ga3fbe378632f85ec9a14cc2c1687bf05f">lws_spa_get_length</a>(<span class="keyword">struct</span> lws_spa *spa, <span class="keywordtype">int</span> n);</div><div class="line"><a name="l02855"></a><span class="lineno"> 2855</span>&#160;</div><div class="line"><a name="l02861"></a><span class="lineno"> 2861</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">const</span> <span class="keywordtype">char</span> *</div><div class="line"><a name="l02862"></a><span class="lineno"> 2862</span>&#160;<a class="code" href="group__form-parsing.html#ga2da476217166da02704b90d3a8d4f3cd">lws_spa_get_string</a>(<span class="keyword">struct</span> lws_spa *spa, <span class="keywordtype">int</span> n);</div><div class="line"><a name="l02863"></a><span class="lineno"> 2863</span>&#160;</div><div class="line"><a name="l02869"></a><span class="lineno"> 2869</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l02870"></a><span class="lineno"> 2870</span>&#160;<a class="code" href="group__form-parsing.html#gaaa482f07dad3f04b391cccf0a814e13b">lws_spa_destroy</a>(<span class="keyword">struct</span> lws_spa *spa);</div><div class="line"><a name="l02872"></a><span class="lineno"> 2872</span>&#160;</div><div class="line"><a name="l02883"></a><span class="lineno"> 2883</span>&#160;</div><div class="line"><a name="l02894"></a><span class="lineno"> 2894</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">const</span> <span class="keywordtype">char</span> *</div><div class="line"><a name="l02895"></a><span class="lineno"> 2895</span>&#160;<a class="code" href="group__urlendec.html#gabc2888476e50e001c875c1a8abf455b7">lws_urlencode</a>(<span class="keywordtype">char</span> *escaped, <span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keywordtype">string</span>, <span class="keywordtype">int</span> len);</div><div class="line"><a name="l02896"></a><span class="lineno"> 2896</span>&#160;</div><div class="line"><a name="l02897"></a><span class="lineno"> 2897</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l02898"></a><span class="lineno"> 2898</span>&#160;<span class="comment"> * URLDECODE 1 / 2</span></div><div class="line"><a name="l02899"></a><span class="lineno"> 2899</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l02900"></a><span class="lineno"> 2900</span>&#160;<span class="comment"> * This simple urldecode only operates until the first &#39;\0&#39; and requires the</span></div><div class="line"><a name="l02901"></a><span class="lineno"> 2901</span>&#160;<span class="comment"> * data to exist all at once</span></div><div class="line"><a name="l02902"></a><span class="lineno"> 2902</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02915"></a><span class="lineno"> 2915</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l02916"></a><span class="lineno"> 2916</span>&#160;<a class="code" href="group__urlendec.html#gaa373a9c16acdd96c395af61ab915ece3">lws_urldecode</a>(<span class="keywordtype">char</span> *<span class="keywordtype">string</span>, <span class="keyword">const</span> <span class="keywordtype">char</span> *escaped, <span class="keywordtype">int</span> len);</div><div class="line"><a name="l02918"></a><span class="lineno"> 2918</span>&#160;</div><div class="line"><a name="l02927"></a><span class="lineno"> 2927</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l02928"></a><span class="lineno"> 2928</span>&#160;<a class="code" href="group__http.html#gac8a4a71240857dc6b2ed70456b6923f4">lws_return_http_status</a>(<span class="keyword">struct</span> lws *wsi, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> code,</div><div class="line"><a name="l02929"></a><span class="lineno"> 2929</span>&#160;                       <span class="keyword">const</span> <span class="keywordtype">char</span> *html_body);</div><div class="line"><a name="l02930"></a><span class="lineno"> 2930</span>&#160;</div><div class="line"><a name="l02941"></a><span class="lineno"> 2941</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l02942"></a><span class="lineno"> 2942</span>&#160;<a class="code" href="group__http.html#ga8fbf01e473ac421fc33ad9f8da8b8a25">lws_http_redirect</a>(<span class="keyword">struct</span> lws *wsi, <span class="keywordtype">int</span> code, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *loc, <span class="keywordtype">int</span> len,</div><div class="line"><a name="l02943"></a><span class="lineno"> 2943</span>&#160;                  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> **p, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *end);</div><div class="line"><a name="l02944"></a><span class="lineno"> 2944</span>&#160;</div><div class="line"><a name="l02953"></a><span class="lineno"> 2953</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l02954"></a><span class="lineno"> 2954</span>&#160;<a class="code" href="group__http.html#gad27aed6c66a41b2b89ffe4da2a309e8a">lws_http_transaction_completed</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l02956"></a><span class="lineno"> 2956</span>&#160;</div><div class="line"><a name="l02964"></a><span class="lineno"> 2964</span>&#160;</div><div class="line"><a name="l02975"></a><span class="lineno"> 2975</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">const</span> <span class="keywordtype">char</span> *</div><div class="line"><a name="l02976"></a><span class="lineno"> 2976</span>&#160;<a class="code" href="group__pur.html#ga9cc82f06e5ae7e71458626d7a39a5865">lws_sql_purify</a>(<span class="keywordtype">char</span> *escaped, <span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keywordtype">string</span>, <span class="keywordtype">int</span> len);</div><div class="line"><a name="l02977"></a><span class="lineno"> 2977</span>&#160;</div><div class="line"><a name="l02988"></a><span class="lineno"> 2988</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">const</span> <span class="keywordtype">char</span> *</div><div class="line"><a name="l02989"></a><span class="lineno"> 2989</span>&#160;<a class="code" href="group__pur.html#gab15187efcfa256b7c928562c182b92a3">lws_json_purify</a>(<span class="keywordtype">char</span> *escaped, <span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keywordtype">string</span>, <span class="keywordtype">int</span> len);</div><div class="line"><a name="l02991"></a><span class="lineno"> 2991</span>&#160;</div><div class="line"><a name="l02998"></a><span class="lineno"> 2998</span>&#160;</div><div class="line"><a name="l03000"></a><span class="lineno"> 3000</span>&#160;<span class="preprocessor">#ifdef LWS_USE_LIBEV</span></div><div class="line"><a name="l03001"></a><span class="lineno"> 3001</span>&#160;<span class="keyword">typedef</span> void (lws_ev_signal_cb_t)(EV_P_ <span class="keyword">struct </span>ev_signal *w, <span class="keywordtype">int</span> revents);</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;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03004"></a><span class="lineno"> 3004</span>&#160;lws_ev_sigint_cfg(<span class="keyword">struct</span> lws_context *context, <span class="keywordtype">int</span> use_ev_sigint,</div><div class="line"><a name="l03005"></a><span class="lineno"> 3005</span>&#160;                  lws_ev_signal_cb_t *cb);</div><div class="line"><a name="l03006"></a><span class="lineno"> 3006</span>&#160;</div><div class="line"><a name="l03007"></a><span class="lineno"> 3007</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03008"></a><span class="lineno"> 3008</span>&#160;lws_ev_initloop(<span class="keyword">struct</span> lws_context *context, <span class="keyword">struct</span> ev_loop *loop, <span class="keywordtype">int</span> tsi);</div><div class="line"><a name="l03009"></a><span class="lineno"> 3009</span>&#160;</div><div class="line"><a name="l03010"></a><span class="lineno"> 3010</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span></div><div class="line"><a name="l03011"></a><span class="lineno"> 3011</span>&#160;lws_ev_sigint_cb(<span class="keyword">struct</span> ev_loop *loop, <span class="keyword">struct</span> ev_signal *watcher, <span class="keywordtype">int</span> revents);</div><div class="line"><a name="l03012"></a><span class="lineno"> 3012</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* LWS_USE_LIBEV */</span><span class="preprocessor"></span></div><div class="line"><a name="l03013"></a><span class="lineno"> 3013</span>&#160;</div><div class="line"><a name="l03015"></a><span class="lineno"> 3015</span>&#160;</div><div class="line"><a name="l03022"></a><span class="lineno"> 3022</span>&#160;<span class="preprocessor">#ifdef LWS_USE_LIBUV</span></div><div class="line"><a name="l03024"></a><span class="lineno"> 3024</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03025"></a><span class="lineno"> 3025</span>&#160;lws_uv_sigint_cfg(<span class="keyword">struct</span> lws_context *context, <span class="keywordtype">int</span> use_uv_sigint,</div><div class="line"><a name="l03026"></a><span class="lineno"> 3026</span>&#160;                  uv_signal_cb cb);</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;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span></div><div class="line"><a name="l03029"></a><span class="lineno"> 3029</span>&#160;lws_libuv_run(<span class="keyword">const</span> <span class="keyword">struct</span> lws_context *context, <span class="keywordtype">int</span> tsi);</div><div class="line"><a name="l03030"></a><span class="lineno"> 3030</span>&#160;</div><div class="line"><a name="l03031"></a><span class="lineno"> 3031</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span></div><div class="line"><a name="l03032"></a><span class="lineno"> 3032</span>&#160;lws_libuv_stop(<span class="keyword">struct</span> lws_context *context);</div><div class="line"><a name="l03033"></a><span class="lineno"> 3033</span>&#160;</div><div class="line"><a name="l03034"></a><span class="lineno"> 3034</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03035"></a><span class="lineno"> 3035</span>&#160;lws_uv_initloop(<span class="keyword">struct</span> lws_context *context, uv_loop_t *loop, <span class="keywordtype">int</span> tsi);</div><div class="line"><a name="l03036"></a><span class="lineno"> 3036</span>&#160;</div><div class="line"><a name="l03037"></a><span class="lineno"> 3037</span>&#160;LWS_VISIBLE LWS_EXTERN uv_loop_t *</div><div class="line"><a name="l03038"></a><span class="lineno"> 3038</span>&#160;lws_uv_getloop(<span class="keyword">struct</span> lws_context *context, <span class="keywordtype">int</span> tsi);</div><div class="line"><a name="l03039"></a><span class="lineno"> 3039</span>&#160;</div><div class="line"><a name="l03040"></a><span class="lineno"> 3040</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span></div><div class="line"><a name="l03041"></a><span class="lineno"> 3041</span>&#160;lws_uv_sigint_cb(uv_signal_t *watcher, <span class="keywordtype">int</span> signum);</div><div class="line"><a name="l03042"></a><span class="lineno"> 3042</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* LWS_USE_LIBUV */</span><span class="preprocessor"></span></div><div class="line"><a name="l03043"></a><span class="lineno"> 3043</span>&#160;</div><div class="line"><a name="l03050"></a><span class="lineno"> 3050</span>&#160;</div><div class="line"><a name="l03051"></a><span class="lineno"> 3051</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l03052"></a><span class="lineno"> 3052</span>&#160;<span class="comment"> * NOTE: These public enums are part of the abi.  If you want to add one,</span></div><div class="line"><a name="l03053"></a><span class="lineno"> 3053</span>&#160;<span class="comment"> * add it at where specified so existing users are unaffected.</span></div><div class="line"><a name="l03054"></a><span class="lineno"> 3054</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l03055"></a><span class="lineno"> 3055</span>&#160;<span class="keyword">enum</span> pending_timeout {</div><div class="line"><a name="l03056"></a><span class="lineno"> 3056</span>&#160;        NO_PENDING_TIMEOUT                                      =  0,</div><div class="line"><a name="l03057"></a><span class="lineno"> 3057</span>&#160;        PENDING_TIMEOUT_AWAITING_PROXY_RESPONSE                 =  1,</div><div class="line"><a name="l03058"></a><span class="lineno"> 3058</span>&#160;        PENDING_TIMEOUT_AWAITING_CONNECT_RESPONSE               =  2,</div><div class="line"><a name="l03059"></a><span class="lineno"> 3059</span>&#160;        PENDING_TIMEOUT_ESTABLISH_WITH_SERVER                   =  3,</div><div class="line"><a name="l03060"></a><span class="lineno"> 3060</span>&#160;        PENDING_TIMEOUT_AWAITING_SERVER_RESPONSE                =  4,</div><div class="line"><a name="l03061"></a><span class="lineno"> 3061</span>&#160;        PENDING_TIMEOUT_AWAITING_PING                           =  5,</div><div class="line"><a name="l03062"></a><span class="lineno"> 3062</span>&#160;        PENDING_TIMEOUT_CLOSE_ACK                               =  6,</div><div class="line"><a name="l03063"></a><span class="lineno"> 3063</span>&#160;        PENDING_TIMEOUT_AWAITING_EXTENSION_CONNECT_RESPONSE     =  7,</div><div class="line"><a name="l03064"></a><span class="lineno"> 3064</span>&#160;        PENDING_TIMEOUT_SENT_CLIENT_HANDSHAKE                   =  8,</div><div class="line"><a name="l03065"></a><span class="lineno"> 3065</span>&#160;        PENDING_TIMEOUT_SSL_ACCEPT                              =  9,</div><div class="line"><a name="l03066"></a><span class="lineno"> 3066</span>&#160;        PENDING_TIMEOUT_HTTP_CONTENT                            = 10,</div><div class="line"><a name="l03067"></a><span class="lineno"> 3067</span>&#160;        PENDING_TIMEOUT_AWAITING_CLIENT_HS_SEND                 = 11,</div><div class="line"><a name="l03068"></a><span class="lineno"> 3068</span>&#160;        PENDING_FLUSH_STORED_SEND_BEFORE_CLOSE                  = 12,</div><div class="line"><a name="l03069"></a><span class="lineno"> 3069</span>&#160;        PENDING_TIMEOUT_SHUTDOWN_FLUSH                          = 13,</div><div class="line"><a name="l03070"></a><span class="lineno"> 3070</span>&#160;        PENDING_TIMEOUT_CGI                                     = 14,</div><div class="line"><a name="l03071"></a><span class="lineno"> 3071</span>&#160;        PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE                     = 15,</div><div class="line"><a name="l03072"></a><span class="lineno"> 3072</span>&#160;        PENDING_TIMEOUT_WS_PONG_CHECK_SEND_PING                 = 16,</div><div class="line"><a name="l03073"></a><span class="lineno"> 3073</span>&#160;        PENDING_TIMEOUT_WS_PONG_CHECK_GET_PONG                  = 17,</div><div class="line"><a name="l03074"></a><span class="lineno"> 3074</span>&#160;        PENDING_TIMEOUT_CLIENT_ISSUE_PAYLOAD                    = 18,</div><div class="line"><a name="l03075"></a><span class="lineno"> 3075</span>&#160;</div><div class="line"><a name="l03076"></a><span class="lineno"> 3076</span>&#160;        <span class="comment">/****** add new things just above ---^ ******/</span></div><div class="line"><a name="l03077"></a><span class="lineno"> 3077</span>&#160;};</div><div class="line"><a name="l03078"></a><span class="lineno"> 3078</span>&#160;</div><div class="line"><a name="l03088"></a><span class="lineno"> 3088</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span></div><div class="line"><a name="l03089"></a><span class="lineno"> 3089</span>&#160;<a class="code" href="group__timeout.html#gaced9f9237f6172fed9f730a2af51345a">lws_set_timeout</a>(<span class="keyword">struct</span> lws *wsi, <span class="keyword">enum</span> pending_timeout reason, <span class="keywordtype">int</span> secs);</div><div class="line"><a name="l03091"></a><span class="lineno"> 3091</span>&#160;</div><div class="line"><a name="l03097"></a><span class="lineno"> 3097</span>&#160;<span class="preprocessor">#if !defined(LWS_SIZEOFPTR)</span></div><div class="line"><a name="l03098"></a><span class="lineno"> 3098</span>&#160;<span class="preprocessor">#define LWS_SIZEOFPTR (sizeof (void *))</span></div><div class="line"><a name="l03099"></a><span class="lineno"> 3099</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l03100"></a><span class="lineno"> 3100</span>&#160;<span class="preprocessor">#if !defined(u_int64_t)</span></div><div class="line"><a name="l03101"></a><span class="lineno"> 3101</span>&#160;<span class="preprocessor">#define u_int64_t unsigned long long</span></div><div class="line"><a name="l03102"></a><span class="lineno"> 3102</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l03103"></a><span class="lineno"> 3103</span>&#160;</div><div class="line"><a name="l03104"></a><span class="lineno"> 3104</span>&#160;<span class="preprocessor">#if defined(__x86_64__)</span></div><div class="line"><a name="l03105"></a><span class="lineno"> 3105</span>&#160;<span class="preprocessor">#define _LWS_PAD_SIZE 16        </span><span class="comment">/* Intel recommended for best performance */</span><span class="preprocessor"></span></div><div class="line"><a name="l03106"></a><span class="lineno"> 3106</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l03107"></a><span class="lineno"> 3107</span>&#160;<span class="preprocessor">#define _LWS_PAD_SIZE LWS_SIZEOFPTR   </span><span class="comment">/* Size of a pointer on the target arch */</span><span class="preprocessor"></span></div><div class="line"><a name="l03108"></a><span class="lineno"> 3108</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l03109"></a><span class="lineno"> 3109</span>&#160;<span class="preprocessor">#define _LWS_PAD(n) (((n) % _LWS_PAD_SIZE) ? \</span></div><div class="line"><a name="l03110"></a><span class="lineno"> 3110</span>&#160;<span class="preprocessor">                ((n) + (_LWS_PAD_SIZE - ((n) % _LWS_PAD_SIZE))) : (n))</span></div><div class="line"><a name="l03111"></a><span class="lineno"> 3111</span>&#160;<span class="preprocessor">#define LWS_PRE _LWS_PAD(4 + 10)</span></div><div class="line"><a name="l03112"></a><span class="lineno"> 3112</span>&#160;<span class="comment">/* used prior to 1.7 and retained for backward compatibility */</span></div><div class="line"><a name="l03113"></a><span class="lineno"> 3113</span>&#160;<span class="preprocessor">#define LWS_SEND_BUFFER_PRE_PADDING LWS_PRE</span></div><div class="line"><a name="l03114"></a><span class="lineno"> 3114</span>&#160;<span class="preprocessor">#define LWS_SEND_BUFFER_POST_PADDING 0</span></div><div class="line"><a name="l03115"></a><span class="lineno"> 3115</span>&#160;</div><div class="line"><a name="l03116"></a><span class="lineno"> 3116</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l03117"></a><span class="lineno"> 3117</span>&#160;<span class="comment"> * NOTE: These public enums are part of the abi.  If you want to add one,</span></div><div class="line"><a name="l03118"></a><span class="lineno"> 3118</span>&#160;<span class="comment"> * add it at where specified so existing users are unaffected.</span></div><div class="line"><a name="l03119"></a><span class="lineno"> 3119</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l03120"></a><span class="lineno"><a class="line" href="group__sending-data.html#ga98b099cf8c1c7e38ad78501f270e193d"> 3120</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="group__sending-data.html#ga98b099cf8c1c7e38ad78501f270e193d">lws_write_protocol</a> {</div><div class="line"><a name="l03121"></a><span class="lineno"><a class="line" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da80e8f169fda236c56bfb795ed62903db"> 3121</a></span>&#160;        <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da80e8f169fda236c56bfb795ed62903db">LWS_WRITE_TEXT</a>                                          = 0,</div><div class="line"><a name="l03125"></a><span class="lineno"><a class="line" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193daf6486c0dba50c44198100717721d9ab2"> 3125</a></span>&#160;        <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193daf6486c0dba50c44198100717721d9ab2">LWS_WRITE_BINARY</a>                                        = 1,</div><div class="line"><a name="l03128"></a><span class="lineno"><a class="line" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da10047eb05b5e1c298151dc47a5b44826"> 3128</a></span>&#160;        <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da10047eb05b5e1c298151dc47a5b44826">LWS_WRITE_CONTINUATION</a>                                  = 2,</div><div class="line"><a name="l03131"></a><span class="lineno"><a class="line" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e"> 3131</a></span>&#160;        <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e">LWS_WRITE_HTTP</a>                                          = 3,</div><div class="line"><a name="l03134"></a><span class="lineno"> 3134</span>&#160;        <span class="comment">/* LWS_WRITE_CLOSE is handled by lws_close_reason() */</span></div><div class="line"><a name="l03135"></a><span class="lineno"> 3135</span>&#160;        LWS_WRITE_PING                                          = 5,</div><div class="line"><a name="l03136"></a><span class="lineno"> 3136</span>&#160;        LWS_WRITE_PONG                                          = 6,</div><div class="line"><a name="l03137"></a><span class="lineno"> 3137</span>&#160;</div><div class="line"><a name="l03138"></a><span class="lineno"> 3138</span>&#160;        <span class="comment">/* Same as write_http but we know this write ends the transaction */</span></div><div class="line"><a name="l03139"></a><span class="lineno"> 3139</span>&#160;        LWS_WRITE_HTTP_FINAL                                    = 7,</div><div class="line"><a name="l03140"></a><span class="lineno"> 3140</span>&#160;</div><div class="line"><a name="l03141"></a><span class="lineno"> 3141</span>&#160;        <span class="comment">/* HTTP2 */</span></div><div class="line"><a name="l03142"></a><span class="lineno"> 3142</span>&#160;</div><div class="line"><a name="l03143"></a><span class="lineno"><a class="line" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dafe5a38e940ce56708ac814627e9c0917"> 3143</a></span>&#160;        <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dafe5a38e940ce56708ac814627e9c0917">LWS_WRITE_HTTP_HEADERS</a>                                  = 8,</div><div class="line"><a name="l03150"></a><span class="lineno"> 3150</span>&#160;        <span class="comment">/****** add new things just above ---^ ******/</span></div><div class="line"><a name="l03151"></a><span class="lineno"> 3151</span>&#160;</div><div class="line"><a name="l03152"></a><span class="lineno"> 3152</span>&#160;        <span class="comment">/* flags */</span></div><div class="line"><a name="l03153"></a><span class="lineno"> 3153</span>&#160;</div><div class="line"><a name="l03154"></a><span class="lineno"><a class="line" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da115440f272a5d55518adfc8099acfee3"> 3154</a></span>&#160;        <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da115440f272a5d55518adfc8099acfee3">LWS_WRITE_NO_FIN</a> = 0x40,</div><div class="line"><a name="l03157"></a><span class="lineno"><a class="line" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da220d8e8652d9b97fb66e476e2a60ffce"> 3157</a></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="l03161"></a><span class="lineno"> 3161</span>&#160;};</div><div class="line"><a name="l03162"></a><span class="lineno"> 3162</span>&#160;</div><div class="line"><a name="l03163"></a><span class="lineno"> 3163</span>&#160;</div><div class="line"><a name="l03235"></a><span class="lineno"> 3235</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03236"></a><span class="lineno"> 3236</span>&#160;<a class="code" href="group__sending-data.html#gafd5fdd285a0e25ba7e3e1051deec1001">lws_write</a>(<span class="keyword">struct</span> lws *wsi, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *buf, <span class="keywordtype">size_t</span> len,</div><div class="line"><a name="l03237"></a><span class="lineno"> 3237</span>&#160;          <span class="keyword">enum</span> <a class="code" href="group__sending-data.html#ga98b099cf8c1c7e38ad78501f270e193d">lws_write_protocol</a> protocol);</div><div class="line"><a name="l03238"></a><span class="lineno"> 3238</span>&#160;</div><div class="line"><a name="l03239"></a><span class="lineno"> 3239</span>&#160;<span class="comment">/* helper for case where buffer may be const */</span></div><div class="line"><a name="l03240"></a><span class="lineno"> 3240</span>&#160;<span class="preprocessor">#define lws_write_http(wsi, buf, len) \</span></div><div class="line"><a name="l03241"></a><span class="lineno"> 3241</span>&#160;<span class="preprocessor">        lws_write(wsi, (unsigned char *)(buf), len, LWS_WRITE_HTTP)</span></div><div class="line"><a name="l03242"></a><span class="lineno"> 3242</span>&#160;</div><div class="line"><a name="l03244"></a><span class="lineno"> 3244</span>&#160;</div><div class="line"><a name="l03263"></a><span class="lineno"> 3263</span>&#160;</div><div class="line"><a name="l03276"></a><span class="lineno"> 3276</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03277"></a><span class="lineno"> 3277</span>&#160;<a class="code" href="group__callback-when-writeable.html#ga941caaa468bc507b1cae52275f58800d">lws_callback_on_writable</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l03278"></a><span class="lineno"> 3278</span>&#160;</div><div class="line"><a name="l03292"></a><span class="lineno"> 3292</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03293"></a><span class="lineno"> 3293</span>&#160;<a class="code" href="group__callback-when-writeable.html#gabbe4655c7eeb3eb1671b2323ec6b3107">lws_callback_on_writable_all_protocol</a>(<span class="keyword">const</span> <span class="keyword">struct</span> lws_context *context,</div><div class="line"><a name="l03294"></a><span class="lineno"> 3294</span>&#160;                                      <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlws__protocols.html">lws_protocols</a> *protocol);</div><div class="line"><a name="l03295"></a><span class="lineno"> 3295</span>&#160;</div><div class="line"><a name="l03309"></a><span class="lineno"> 3309</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03310"></a><span class="lineno"> 3310</span>&#160;<a class="code" href="group__callback-when-writeable.html#ga8570860e191b62db264f2bac67354ea8">lws_callback_on_writable_all_protocol_vhost</a>(<span class="keyword">const</span> <span class="keyword">struct</span> lws_vhost *vhost,</div><div class="line"><a name="l03311"></a><span class="lineno"> 3311</span>&#160;                                      <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlws__protocols.html">lws_protocols</a> *protocol);</div><div class="line"><a name="l03312"></a><span class="lineno"> 3312</span>&#160;</div><div class="line"><a name="l03325"></a><span class="lineno"> 3325</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03326"></a><span class="lineno"> 3326</span>&#160;<a class="code" href="group__callback-when-writeable.html#gacf04bbe089f47c971c6408c5efe2ac70">lws_callback_all_protocol</a>(<span class="keyword">struct</span> lws_context *context,</div><div class="line"><a name="l03327"></a><span class="lineno"> 3327</span>&#160;                          <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlws__protocols.html">lws_protocols</a> *protocol, <span class="keywordtype">int</span> reason);</div><div class="line"><a name="l03328"></a><span class="lineno"> 3328</span>&#160;</div><div class="line"><a name="l03341"></a><span class="lineno"> 3341</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03342"></a><span class="lineno"> 3342</span>&#160;<a class="code" href="group__callback-when-writeable.html#ga13c984d8c5a44a745fd02bc2fba36053">lws_callback_all_protocol_vhost</a>(<span class="keyword">struct</span> lws_vhost *vh,</div><div class="line"><a name="l03343"></a><span class="lineno"> 3343</span>&#160;                          <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlws__protocols.html">lws_protocols</a> *protocol, <span class="keywordtype">int</span> reason);</div><div class="line"><a name="l03344"></a><span class="lineno"> 3344</span>&#160;</div><div class="line"><a name="l03358"></a><span class="lineno"> 3358</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03359"></a><span class="lineno"> 3359</span>&#160;<a class="code" href="group__callback-when-writeable.html#ga60939cf0c073d933fde3d17f3591caf5">lws_callback_vhost_protocols</a>(<span class="keyword">struct</span> lws *wsi, <span class="keywordtype">int</span> reason, <span class="keywordtype">void</span> *in, <span class="keywordtype">int</span> len);</div><div class="line"><a name="l03360"></a><span class="lineno"> 3360</span>&#160;</div><div class="line"><a name="l03361"></a><span class="lineno"> 3361</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03362"></a><span class="lineno"> 3362</span>&#160;lws_callback_http_dummy(<span class="keyword">struct</span> lws *wsi, <span class="keyword">enum</span> <a class="code" href="group__usercb.html#gad62860e19975ba4c4af401c3cdb6abf7">lws_callback_reasons</a> reason,</div><div class="line"><a name="l03363"></a><span class="lineno"> 3363</span>&#160;                    <span class="keywordtype">void</span> *user, <span class="keywordtype">void</span> *in, <span class="keywordtype">size_t</span> len);</div><div class="line"><a name="l03364"></a><span class="lineno"> 3364</span>&#160;</div><div class="line"><a name="l03372"></a><span class="lineno"> 3372</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03373"></a><span class="lineno"> 3373</span>&#160;<a class="code" href="group__callback-when-writeable.html#gaa709e02a10558753c851e58f1e2c16ba">lws_get_socket_fd</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l03374"></a><span class="lineno"> 3374</span>&#160;</div><div class="line"><a name="l03396"></a><span class="lineno"> 3396</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">size_t</span></div><div class="line"><a name="l03397"></a><span class="lineno"> 3397</span>&#160;<a class="code" href="group__callback-when-writeable.html#gac4643fe16b0940ae5b68b4ee6195cbde">lws_get_peer_write_allowance</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l03399"></a><span class="lineno"> 3399</span>&#160;</div><div class="line"><a name="l03410"></a><span class="lineno"> 3410</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03411"></a><span class="lineno"> 3411</span>&#160;<a class="code" href="libwebsockets_8h.html#adf4abd01e8c43f07c6e498ce13590c3e">lws_rx_flow_control</a>(<span class="keyword">struct</span> lws *wsi, <span class="keywordtype">int</span> enable);</div><div class="line"><a name="l03412"></a><span class="lineno"> 3412</span>&#160;</div><div class="line"><a name="l03422"></a><span class="lineno"> 3422</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span></div><div class="line"><a name="l03423"></a><span class="lineno"> 3423</span>&#160;<a class="code" href="libwebsockets_8h.html#a5e627dbf1db48170ef486edbaf268672">lws_rx_flow_allow_all_protocol</a>(<span class="keyword">const</span> <span class="keyword">struct</span> lws_context *context,</div><div class="line"><a name="l03424"></a><span class="lineno"> 3424</span>&#160;                               <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlws__protocols.html">lws_protocols</a> *protocol);</div><div class="line"><a name="l03425"></a><span class="lineno"> 3425</span>&#160;</div><div class="line"><a name="l03442"></a><span class="lineno"> 3442</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">size_t</span></div><div class="line"><a name="l03443"></a><span class="lineno"> 3443</span>&#160;<a class="code" href="libwebsockets_8h.html#a72fe65e83b8bb03f904a1a256c673536">lws_remaining_packet_payload</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l03444"></a><span class="lineno"> 3444</span>&#160;</div><div class="line"><a name="l03445"></a><span class="lineno"> 3445</span>&#160;</div><div class="line"><a name="l03454"></a><span class="lineno"> 3454</span>&#160;</div><div class="line"><a name="l03467"></a><span class="lineno"> 3467</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">struct </span>lws *</div><div class="line"><a name="l03468"></a><span class="lineno"> 3468</span>&#160;<a class="code" href="group__sock-adopt.html#gabe71b7462afb21c767bdc67334f305af">lws_adopt_socket</a>(<span class="keyword">struct</span> lws_context *context, lws_sockfd_type accept_fd);</div><div class="line"><a name="l03491"></a><span class="lineno"> 3491</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">struct </span>lws *</div><div class="line"><a name="l03492"></a><span class="lineno"> 3492</span>&#160;<a class="code" href="group__sock-adopt.html#gab2d045df0f81afe00891aaed312d552b">lws_adopt_socket_readbuf</a>(<span class="keyword">struct</span> lws_context *context, lws_sockfd_type accept_fd,</div><div class="line"><a name="l03493"></a><span class="lineno"> 3493</span>&#160;                <span class="keyword">const</span> <span class="keywordtype">char</span> *readbuf, <span class="keywordtype">size_t</span> len);</div><div class="line"><a name="l03495"></a><span class="lineno"> 3495</span>&#160;</div><div class="line"><a name="l03501"></a><span class="lineno"> 3501</span>&#160;</div><div class="line"><a name="l03512"></a><span class="lineno"> 3512</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">const</span> <span class="keywordtype">char</span> * LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l03513"></a><span class="lineno"> 3513</span>&#160;<a class="code" href="group__net.html#gad0df22db2be9fc65a667a1e83f9a92a4">lws_canonical_hostname</a>(<span class="keyword">struct</span> lws_context *context);</div><div class="line"><a name="l03514"></a><span class="lineno"> 3514</span>&#160;</div><div class="line"><a name="l03529"></a><span class="lineno"> 3529</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span></div><div class="line"><a name="l03530"></a><span class="lineno"> 3530</span>&#160;<a class="code" href="group__net.html#ga092e5f473b3347f03ffeef8a950080f3">lws_get_peer_addresses</a>(<span class="keyword">struct</span> lws *wsi, lws_sockfd_type fd, <span class="keywordtype">char</span> *name,</div><div class="line"><a name="l03531"></a><span class="lineno"> 3531</span>&#160;                       <span class="keywordtype">int</span> name_len, <span class="keywordtype">char</span> *rip, <span class="keywordtype">int</span> rip_len);</div><div class="line"><a name="l03532"></a><span class="lineno"> 3532</span>&#160;</div><div class="line"><a name="l03543"></a><span class="lineno"> 3543</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">const</span> <span class="keywordtype">char</span> *</div><div class="line"><a name="l03544"></a><span class="lineno"> 3544</span>&#160;<a class="code" href="group__net.html#gad01014fed09759741b6d23afccfdaacc">lws_get_peer_simple</a>(<span class="keyword">struct</span> lws *wsi, <span class="keywordtype">char</span> *name, <span class="keywordtype">int</span> namelen);</div><div class="line"><a name="l03545"></a><span class="lineno"> 3545</span>&#160;<span class="preprocessor">#ifndef LWS_WITH_ESP8266</span></div><div class="line"><a name="l03546"></a><span class="lineno"> 3546</span>&#160;</div><div class="line"><a name="l03557"></a><span class="lineno"> 3557</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03558"></a><span class="lineno"> 3558</span>&#160;<a class="code" href="group__net.html#ga869d8bdffb0f2a7ce08e3ce10d6be3d8">lws_interface_to_sa</a>(<span class="keywordtype">int</span> ipv6, <span class="keyword">const</span> <span class="keywordtype">char</span> *ifname, <span class="keyword">struct</span> sockaddr_in *addr,</div><div class="line"><a name="l03559"></a><span class="lineno"> 3559</span>&#160;                    <span class="keywordtype">size_t</span> addrlen);</div><div class="line"><a name="l03561"></a><span class="lineno"> 3561</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l03562"></a><span class="lineno"> 3562</span>&#160;</div><div class="line"><a name="l03568"></a><span class="lineno"> 3568</span>&#160;</div><div class="line"><a name="l03581"></a><span class="lineno"> 3581</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03582"></a><span class="lineno"> 3582</span>&#160;<a class="code" href="group__misc.html#ga58f906c6be0ca80efd813f694569dd4a">lws_get_random</a>(<span class="keyword">struct</span> lws_context *context, <span class="keywordtype">void</span> *buf, <span class="keywordtype">int</span> len);</div><div class="line"><a name="l03590"></a><span class="lineno"> 3590</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l03591"></a><span class="lineno"> 3591</span>&#160;<a class="code" href="group__misc.html#gace5171b1dbbc03ec89a98f8afdb5c9af">lws_daemonize</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *_lock_path);</div><div class="line"><a name="l03597"></a><span class="lineno"> 3597</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">const</span> <span class="keywordtype">char</span> * LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l03598"></a><span class="lineno"> 3598</span>&#160;<a class="code" href="group__misc.html#gac6abfc0b2bd5b2f09281a4432bb2f5f0">lws_get_library_version</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l03599"></a><span class="lineno"> 3599</span>&#160;</div><div class="line"><a name="l03606"></a><span class="lineno"> 3606</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span> *</div><div class="line"><a name="l03607"></a><span class="lineno"> 3607</span>&#160;<a class="code" href="group__misc.html#gaa194584fff9698f3b280658f770ccd0f">lws_wsi_user</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l03608"></a><span class="lineno"> 3608</span>&#160;</div><div class="line"><a name="l03620"></a><span class="lineno"> 3620</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l03621"></a><span class="lineno"> 3621</span>&#160;<a class="code" href="group__misc.html#ga1ec0d9faac5d3a5824d765c287c043aa">lws_parse_uri</a>(<span class="keywordtype">char</span> *p, <span class="keyword">const</span> <span class="keywordtype">char</span> **prot, <span class="keyword">const</span> <span class="keywordtype">char</span> **ads, <span class="keywordtype">int</span> *port,</div><div class="line"><a name="l03622"></a><span class="lineno"> 3622</span>&#160;              <span class="keyword">const</span> <span class="keywordtype">char</span> **path);</div><div class="line"><a name="l03623"></a><span class="lineno"> 3623</span>&#160;</div><div class="line"><a name="l03627"></a><span class="lineno"> 3627</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span></div><div class="line"><a name="l03628"></a><span class="lineno"> 3628</span>&#160;<a class="code" href="group__misc.html#ga33bf2635033710b25f931b57ed663e1e">lws_now_secs</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l03629"></a><span class="lineno"> 3629</span>&#160;</div><div class="line"><a name="l03639"></a><span class="lineno"> 3639</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">struct </span>lws_context * LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l03640"></a><span class="lineno"> 3640</span>&#160;<a class="code" href="group__misc.html#ga0af4f7d2dd375aeedcfa7eb0e1101c4b">lws_get_context</a>(<span class="keyword">const</span> <span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l03641"></a><span class="lineno"> 3641</span>&#160;</div><div class="line"><a name="l03651"></a><span class="lineno"> 3651</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l03652"></a><span class="lineno"> 3652</span>&#160;<a class="code" href="group__misc.html#ga629f48268fd1856b54b11172991b97d9">lws_get_count_threads</a>(<span class="keyword">struct</span> lws_context *context);</div><div class="line"><a name="l03653"></a><span class="lineno"> 3653</span>&#160;</div><div class="line"><a name="l03661"></a><span class="lineno"> 3661</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">struct </span>lws * LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l03662"></a><span class="lineno"> 3662</span>&#160;<a class="code" href="group__misc.html#ga8930fe36a3f3eefe4a6a4fd499d8e899">lws_get_parent</a>(<span class="keyword">const</span> <span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l03663"></a><span class="lineno"> 3663</span>&#160;</div><div class="line"><a name="l03670"></a><span class="lineno"> 3670</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">struct </span>lws * LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l03671"></a><span class="lineno"> 3671</span>&#160;<a class="code" href="group__misc.html#gacae4d7b6a8d22e4c2d82ff8b12c1e234">lws_get_child</a>(<span class="keyword">const</span> <span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l03672"></a><span class="lineno"> 3672</span>&#160;</div><div class="line"><a name="l03673"></a><span class="lineno"> 3673</span>&#160;</div><div class="line"><a name="l03674"></a><span class="lineno"> 3674</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l03675"></a><span class="lineno"> 3675</span>&#160;<span class="comment"> * \deprecated DEPRECATED Note: this is not normally needed as a user api.</span></div><div class="line"><a name="l03676"></a><span class="lineno"> 3676</span>&#160;<span class="comment"> * It&#39;s provided in case it is</span></div><div class="line"><a name="l03677"></a><span class="lineno"> 3677</span>&#160;<span class="comment"> * useful when integrating with other app poll loop service code.</span></div><div class="line"><a name="l03678"></a><span class="lineno"> 3678</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l03679"></a><span class="lineno"> 3679</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03680"></a><span class="lineno"> 3680</span>&#160;lws_read(<span class="keyword">struct</span> lws *wsi, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *buf, <span class="keywordtype">size_t</span> len);</div><div class="line"><a name="l03681"></a><span class="lineno"> 3681</span>&#160;</div><div class="line"><a name="l03689"></a><span class="lineno"> 3689</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span></div><div class="line"><a name="l03690"></a><span class="lineno"> 3690</span>&#160;<a class="code" href="group__misc.html#gab321ed812f46f6dc7ef9e3ca6f00cf1b">lws_set_allocator</a>(<span class="keywordtype">void</span> *(*realloc)(<span class="keywordtype">void</span> *ptr, <span class="keywordtype">size_t</span> size));</div><div class="line"><a name="l03692"></a><span class="lineno"> 3692</span>&#160;</div><div class="line"><a name="l03698"></a><span class="lineno"> 3698</span>&#160;</div><div class="line"><a name="l03705"></a><span class="lineno"> 3705</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l03706"></a><span class="lineno"> 3706</span>&#160;<a class="code" href="group__wsstatus.html#ga2bb3655329b4651cd06f79ee3a764421">lws_send_pipe_choked</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l03707"></a><span class="lineno"> 3707</span>&#160;</div><div class="line"><a name="l03712"></a><span class="lineno"> 3712</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03713"></a><span class="lineno"> 3713</span>&#160;<a class="code" href="group__wsstatus.html#ga08e9ee165fca503fd9427d55cfecac37">lws_is_final_fragment</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l03714"></a><span class="lineno"> 3714</span>&#160;</div><div class="line"><a name="l03719"></a><span class="lineno"> 3719</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span></div><div class="line"><a name="l03720"></a><span class="lineno"> 3720</span>&#160;<a class="code" href="group__wsstatus.html#ga3df5045656dfb6b0e63a38de2dca79d2">lws_get_reserved_bits</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l03721"></a><span class="lineno"> 3721</span>&#160;</div><div class="line"><a name="l03738"></a><span class="lineno"> 3738</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l03739"></a><span class="lineno"> 3739</span>&#160;<a class="code" href="group__wsstatus.html#gaeca4afc94b1f026034f99cbba37e2f85">lws_partial_buffered</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l03740"></a><span class="lineno"> 3740</span>&#160;</div><div class="line"><a name="l03750"></a><span class="lineno"> 3750</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l03751"></a><span class="lineno"> 3751</span>&#160;<a class="code" href="group__wsstatus.html#gaccd9c59336efad8af0554f79cc5966fd">lws_frame_is_binary</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l03752"></a><span class="lineno"> 3752</span>&#160;</div><div class="line"><a name="l03761"></a><span class="lineno"> 3761</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03762"></a><span class="lineno"> 3762</span>&#160;<a class="code" href="group__wsstatus.html#ga26a140623d202dd2bf2004deb6994baa">lws_is_ssl</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l03767"></a><span class="lineno"> 3767</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03768"></a><span class="lineno"> 3768</span>&#160;<a class="code" href="group__wsstatus.html#ga4ad226d5e01024b4046f4a5a37199aa1">lws_is_cgi</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l03770"></a><span class="lineno"> 3770</span>&#160;</div><div class="line"><a name="l03771"></a><span class="lineno"> 3771</span>&#160;</div><div class="line"><a name="l03777"></a><span class="lineno"> 3777</span>&#160;<span class="preprocessor">#ifdef LWS_SHA1_USE_OPENSSL_NAME</span></div><div class="line"><a name="l03779"></a><span class="lineno"> 3779</span>&#160;<span class="preprocessor">#define lws_SHA1 SHA1</span></div><div class="line"><a name="l03780"></a><span class="lineno"> 3780</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l03781"></a><span class="lineno"> 3781</span>&#160;</div><div class="line"><a name="l03790"></a><span class="lineno"> 3790</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *</div><div class="line"><a name="l03791"></a><span class="lineno"> 3791</span>&#160;<a class="code" href="group__sha.html#ga7b09ab74646266f0b555103b3bb8dfe5">lws_SHA1</a>(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *d, <span class="keywordtype">size_t</span> n, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *md);</div><div class="line"><a name="l03792"></a><span class="lineno"> 3792</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l03793"></a><span class="lineno"> 3793</span>&#160;</div><div class="line"><a name="l03803"></a><span class="lineno"> 3803</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03804"></a><span class="lineno"> 3804</span>&#160;<a class="code" href="group__sha.html#gaf39765e4a3b413efb65e4698b2ec3575">lws_b64_encode_string</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *in, <span class="keywordtype">int</span> in_len, <span class="keywordtype">char</span> *out, <span class="keywordtype">int</span> out_size);</div><div class="line"><a name="l03814"></a><span class="lineno"> 3814</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03815"></a><span class="lineno"> 3815</span>&#160;<a class="code" href="group__sha.html#ga66316e6a5a0644a09d5a10e919dfdd8d">lws_b64_decode_string</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *in, <span class="keywordtype">char</span> *out, <span class="keywordtype">int</span> out_size);</div><div class="line"><a name="l03817"></a><span class="lineno"> 3817</span>&#160;</div><div class="line"><a name="l03818"></a><span class="lineno"> 3818</span>&#160;</div><div class="line"><a name="l03828"></a><span class="lineno"> 3828</span>&#160;<span class="preprocessor">#ifdef LWS_WITH_CGI</span></div><div class="line"><a name="l03829"></a><span class="lineno"> 3829</span>&#160;<span class="keyword">enum</span> lws_enum_stdinouterr {</div><div class="line"><a name="l03830"></a><span class="lineno"> 3830</span>&#160;        LWS_STDIN = 0,</div><div class="line"><a name="l03831"></a><span class="lineno"> 3831</span>&#160;        LWS_STDOUT = 1,</div><div class="line"><a name="l03832"></a><span class="lineno"> 3832</span>&#160;        LWS_STDERR = 2,</div><div class="line"><a name="l03833"></a><span class="lineno"> 3833</span>&#160;};</div><div class="line"><a name="l03834"></a><span class="lineno"> 3834</span>&#160;</div><div class="line"><a name="l03835"></a><span class="lineno"> 3835</span>&#160;<span class="keyword">enum</span> lws_cgi_hdr_state {</div><div class="line"><a name="l03836"></a><span class="lineno"> 3836</span>&#160;        LCHS_HEADER,</div><div class="line"><a name="l03837"></a><span class="lineno"> 3837</span>&#160;        LCHS_CR1,</div><div class="line"><a name="l03838"></a><span class="lineno"> 3838</span>&#160;        LCHS_LF1,</div><div class="line"><a name="l03839"></a><span class="lineno"> 3839</span>&#160;        LCHS_CR2,</div><div class="line"><a name="l03840"></a><span class="lineno"> 3840</span>&#160;        LCHS_LF2,</div><div class="line"><a name="l03841"></a><span class="lineno"> 3841</span>&#160;        LHCS_PAYLOAD,</div><div class="line"><a name="l03842"></a><span class="lineno"> 3842</span>&#160;        LCHS_SINGLE_0A,</div><div class="line"><a name="l03843"></a><span class="lineno"> 3843</span>&#160;};</div><div class="line"><a name="l03844"></a><span class="lineno"> 3844</span>&#160;</div><div class="line"><a name="l03845"></a><span class="lineno"><a class="line" href="structlws__cgi__args.html"> 3845</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__cgi__args.html">lws_cgi_args</a> {</div><div class="line"><a name="l03846"></a><span class="lineno"><a class="line" href="structlws__cgi__args.html#a4ccc1058e7e914a26eef31ab2ad46aa1"> 3846</a></span>&#160;        <span class="keyword">struct </span>lws **<a class="code" href="structlws__cgi__args.html#a4ccc1058e7e914a26eef31ab2ad46aa1">stdwsi</a>; </div><div class="line"><a name="l03847"></a><span class="lineno"><a class="line" href="structlws__cgi__args.html#adeee220b29aeacc34632c38e50f0f5a5"> 3847</a></span>&#160;        <span class="keyword">enum</span> lws_enum_stdinouterr ch; </div><div class="line"><a name="l03848"></a><span class="lineno"><a class="line" href="structlws__cgi__args.html#a8ac842084688c02f3f94694ef700d8f7"> 3848</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__cgi__args.html#a8ac842084688c02f3f94694ef700d8f7">data</a>; </div><div class="line"><a name="l03849"></a><span class="lineno"><a class="line" href="structlws__cgi__args.html#a741c11b9aa05997ec45a3400d7fb7739"> 3849</a></span>&#160;        <span class="keyword">enum</span> lws_cgi_hdr_state hdr_state; </div><div class="line"><a name="l03850"></a><span class="lineno"><a class="line" href="structlws__cgi__args.html#a36e5c256433c187bd0eaa9c1ca667f1d"> 3850</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__cgi__args.html#a36e5c256433c187bd0eaa9c1ca667f1d">len</a>; </div><div class="line"><a name="l03851"></a><span class="lineno"> 3851</span>&#160;};</div><div class="line"><a name="l03852"></a><span class="lineno"> 3852</span>&#160;</div><div class="line"><a name="l03853"></a><span class="lineno"> 3853</span>&#160;</div><div class="line"><a name="l03863"></a><span class="lineno"> 3863</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03864"></a><span class="lineno"> 3864</span>&#160;<a class="code" href="libwebsockets_8h.html#af52923473c59e643a974d65e12290831">lws_cgi</a>(<span class="keyword">struct</span> lws *wsi, <span class="keyword">const</span> <span class="keywordtype">char</span> * <span class="keyword">const</span> *exec_array,</div><div class="line"><a name="l03865"></a><span class="lineno"> 3865</span>&#160;        <span class="keywordtype">int</span> script_uri_path_len, <span class="keywordtype">int</span> timeout_secs,</div><div class="line"><a name="l03866"></a><span class="lineno"> 3866</span>&#160;        <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlws__protocol__vhost__options.html">lws_protocol_vhost_options</a> *mp_cgienv);</div><div class="line"><a name="l03867"></a><span class="lineno"> 3867</span>&#160;</div><div class="line"><a name="l03873"></a><span class="lineno"> 3873</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03874"></a><span class="lineno"> 3874</span>&#160;<a class="code" href="libwebsockets_8h.html#a5326d3402af8429a166dd991dc65c4a2">lws_cgi_write_split_stdout_headers</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l03875"></a><span class="lineno"> 3875</span>&#160;</div><div class="line"><a name="l03881"></a><span class="lineno"> 3881</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03882"></a><span class="lineno"> 3882</span>&#160;<a class="code" href="libwebsockets_8h.html#a27bb0b3cdcd0af839c928c253b521ff4">lws_cgi_kill</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l03883"></a><span class="lineno"> 3883</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l03884"></a><span class="lineno"> 3884</span>&#160;</div><div class="line"><a name="l03886"></a><span class="lineno"> 3886</span>&#160;</div><div class="line"><a name="l03903"></a><span class="lineno"> 3903</span>&#160;</div><div class="line"><a name="l03909"></a><span class="lineno"><a class="line" href="structlws__plat__file__ops.html"> 3909</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__plat__file__ops.html">lws_plat_file_ops</a> {</div><div class="line"><a name="l03910"></a><span class="lineno"><a class="line" href="structlws__plat__file__ops.html#ad37a97abc68d0af967cef874f4d8df32"> 3910</a></span>&#160;        lws_filefd_type (*open)(<span class="keyword">struct </span>lws *wsi, <span class="keyword">const</span> <span class="keywordtype">char</span> *filename,</div><div class="line"><a name="l03911"></a><span class="lineno"> 3911</span>&#160;                                <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *filelen, <span class="keywordtype">int</span> flags);</div><div class="line"><a name="l03915"></a><span class="lineno"><a class="line" href="structlws__plat__file__ops.html#a034ec96f2fbaf52b4aa3e82d20795f7b"> 3915</a></span>&#160;        int (*close)(<span class="keyword">struct </span>lws *wsi, lws_filefd_type fd);</div><div class="line"><a name="l03917"></a><span class="lineno"><a class="line" href="structlws__plat__file__ops.html#abfcda19b003dcc13c61ff9e2bb4ff869"> 3917</a></span>&#160;        <span class="keywordtype">unsigned</span> long (*seek_cur)(<span class="keyword">struct </span>lws *wsi, lws_filefd_type fd,</div><div class="line"><a name="l03918"></a><span class="lineno"> 3918</span>&#160;                                  <span class="keywordtype">long</span> offset_from_cur_pos);</div><div class="line"><a name="l03920"></a><span class="lineno"><a class="line" href="structlws__plat__file__ops.html#a01f483807a9862736b17ba9ed5110c40"> 3920</a></span>&#160;        int (*read)(<span class="keyword">struct </span>lws *wsi, lws_filefd_type fd, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *amount,</div><div class="line"><a name="l03921"></a><span class="lineno"> 3921</span>&#160;                    <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *buf, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> len);</div><div class="line"><a name="l03923"></a><span class="lineno"><a class="line" href="structlws__plat__file__ops.html#a1fae8330ee94649a3551e31a30809793"> 3923</a></span>&#160;        int (*write)(<span class="keyword">struct </span>lws *wsi, lws_filefd_type fd, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *amount,</div><div class="line"><a name="l03924"></a><span class="lineno"> 3924</span>&#160;                     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *buf, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> len);</div><div class="line"><a name="l03927"></a><span class="lineno"> 3927</span>&#160;        <span class="comment">/* Add new things just above here ---^</span></div><div class="line"><a name="l03928"></a><span class="lineno"> 3928</span>&#160;<span class="comment">         * This is part of the ABI, don&#39;t needlessly break compatibility */</span></div><div class="line"><a name="l03929"></a><span class="lineno"> 3929</span>&#160;};</div><div class="line"><a name="l03930"></a><span class="lineno"> 3930</span>&#160;</div><div class="line"><a name="l03936"></a><span class="lineno"> 3936</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">struct </span><a class="code" href="structlws__plat__file__ops.html">lws_plat_file_ops</a> * LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l03937"></a><span class="lineno"> 3937</span>&#160;<a class="code" href="group__fops.html#gac08aef64c4c34647ed699b24759b6b0e">lws_get_fops</a>(<span class="keyword">struct</span> lws_context *context);</div><div class="line"><a name="l03938"></a><span class="lineno"> 3938</span>&#160;</div><div class="line"><a name="l03947"></a><span class="lineno"> 3947</span>&#160;<span class="keyword">static</span> LWS_INLINE lws_filefd_type LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l03948"></a><span class="lineno"> 3948</span>&#160;lws_plat_file_open(<span class="keyword">struct</span> lws *wsi, <span class="keyword">const</span> <span class="keywordtype">char</span> *filename,</div><div class="line"><a name="l03949"></a><span class="lineno"> 3949</span>&#160;                   <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *filelen, <span class="keywordtype">int</span> flags)</div><div class="line"><a name="l03950"></a><span class="lineno"> 3950</span>&#160;{</div><div class="line"><a name="l03951"></a><span class="lineno"> 3951</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="group__fops.html#gac08aef64c4c34647ed699b24759b6b0e">lws_get_fops</a>(<a class="code" href="group__misc.html#ga0af4f7d2dd375aeedcfa7eb0e1101c4b">lws_get_context</a>(wsi))-&gt;<a class="code" href="structlws__plat__file__ops.html#ad37a97abc68d0af967cef874f4d8df32">open</a>(wsi, filename,</div><div class="line"><a name="l03952"></a><span class="lineno"> 3952</span>&#160;                                                    filelen, flags);</div><div class="line"><a name="l03953"></a><span class="lineno"> 3953</span>&#160;}</div><div class="line"><a name="l03954"></a><span class="lineno"> 3954</span>&#160;</div><div class="line"><a name="l03961"></a><span class="lineno"> 3961</span>&#160;<span class="keyword">static</span> LWS_INLINE <span class="keywordtype">int</span></div><div class="line"><a name="l03962"></a><span class="lineno"> 3962</span>&#160;lws_plat_file_close(<span class="keyword">struct</span> lws *wsi, lws_filefd_type fd)</div><div class="line"><a name="l03963"></a><span class="lineno"> 3963</span>&#160;{</div><div class="line"><a name="l03964"></a><span class="lineno"> 3964</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="group__fops.html#gac08aef64c4c34647ed699b24759b6b0e">lws_get_fops</a>(<a class="code" href="group__misc.html#ga0af4f7d2dd375aeedcfa7eb0e1101c4b">lws_get_context</a>(wsi))-&gt;<a class="code" href="structlws__plat__file__ops.html#a034ec96f2fbaf52b4aa3e82d20795f7b">close</a>(wsi, fd);</div><div class="line"><a name="l03965"></a><span class="lineno"> 3965</span>&#160;}</div><div class="line"><a name="l03966"></a><span class="lineno"> 3966</span>&#160;</div><div class="line"><a name="l03974"></a><span class="lineno"> 3974</span>&#160;<span class="keyword">static</span> LWS_INLINE <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span></div><div class="line"><a name="l03975"></a><span class="lineno"> 3975</span>&#160;lws_plat_file_seek_cur(<span class="keyword">struct</span> lws *wsi, lws_filefd_type fd, <span class="keywordtype">long</span> offset)</div><div class="line"><a name="l03976"></a><span class="lineno"> 3976</span>&#160;{</div><div class="line"><a name="l03977"></a><span class="lineno"> 3977</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="group__fops.html#gac08aef64c4c34647ed699b24759b6b0e">lws_get_fops</a>(<a class="code" href="group__misc.html#ga0af4f7d2dd375aeedcfa7eb0e1101c4b">lws_get_context</a>(wsi))-&gt;<a class="code" href="structlws__plat__file__ops.html#abfcda19b003dcc13c61ff9e2bb4ff869">seek_cur</a>(wsi, fd, offset);</div><div class="line"><a name="l03978"></a><span class="lineno"> 3978</span>&#160;}</div><div class="line"><a name="l03988"></a><span class="lineno"> 3988</span>&#160;<span class="keyword">static</span> LWS_INLINE <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l03989"></a><span class="lineno"> 3989</span>&#160;lws_plat_file_read(<span class="keyword">struct</span> lws *wsi, lws_filefd_type fd, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *amount,</div><div class="line"><a name="l03990"></a><span class="lineno"> 3990</span>&#160;                   <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *buf, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> len)</div><div class="line"><a name="l03991"></a><span class="lineno"> 3991</span>&#160;{</div><div class="line"><a name="l03992"></a><span class="lineno"> 3992</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="group__fops.html#gac08aef64c4c34647ed699b24759b6b0e">lws_get_fops</a>(<a class="code" href="group__misc.html#ga0af4f7d2dd375aeedcfa7eb0e1101c4b">lws_get_context</a>(wsi))-&gt;<a class="code" href="structlws__plat__file__ops.html#a01f483807a9862736b17ba9ed5110c40">read</a>(wsi, fd, amount, buf,</div><div class="line"><a name="l03993"></a><span class="lineno"> 3993</span>&#160;                                                        len);</div><div class="line"><a name="l03994"></a><span class="lineno"> 3994</span>&#160;}</div><div class="line"><a name="l04004"></a><span class="lineno"> 4004</span>&#160;<span class="keyword">static</span> LWS_INLINE <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l04005"></a><span class="lineno"> 4005</span>&#160;lws_plat_file_write(<span class="keyword">struct</span> lws *wsi, lws_filefd_type fd, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *amount,</div><div class="line"><a name="l04006"></a><span class="lineno"> 4006</span>&#160;                    <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *buf, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> len)</div><div class="line"><a name="l04007"></a><span class="lineno"> 4007</span>&#160;{</div><div class="line"><a name="l04008"></a><span class="lineno"> 4008</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="group__fops.html#gac08aef64c4c34647ed699b24759b6b0e">lws_get_fops</a>(<a class="code" href="group__misc.html#ga0af4f7d2dd375aeedcfa7eb0e1101c4b">lws_get_context</a>(wsi))-&gt;<a class="code" href="structlws__plat__file__ops.html#a1fae8330ee94649a3551e31a30809793">write</a>(wsi, fd, amount, buf,</div><div class="line"><a name="l04009"></a><span class="lineno"> 4009</span>&#160;                                                         len);</div><div class="line"><a name="l04010"></a><span class="lineno"> 4010</span>&#160;}</div><div class="line"><a name="l04012"></a><span class="lineno"> 4012</span>&#160;</div><div class="line"><a name="l04044"></a><span class="lineno"> 4044</span>&#160;<span class="preprocessor">#ifdef LWS_WITH_SMTP</span></div><div class="line"><a name="l04045"></a><span class="lineno"> 4045</span>&#160;</div><div class="line"><a name="l04047"></a><span class="lineno"><a class="line" href="group__smtp.html#ga116be79bf44f9dc2a97f46e051fe4dc0"> 4047</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="group__smtp.html#ga116be79bf44f9dc2a97f46e051fe4dc0">lwsgs_smtp_states</a> {</div><div class="line"><a name="l04048"></a><span class="lineno"><a class="line" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c"> 4048</a></span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c">LGSSMTP_IDLE</a>, </div><div class="line"><a name="l04049"></a><span class="lineno"><a class="line" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933"> 4049</a></span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933">LGSSMTP_CONNECTING</a>, </div><div class="line"><a name="l04050"></a><span class="lineno"><a class="line" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d"> 4050</a></span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d">LGSSMTP_CONNECTED</a>, </div><div class="line"><a name="l04051"></a><span class="lineno"><a class="line" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad"> 4051</a></span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad">LGSSMTP_SENT_HELO</a>, </div><div class="line"><a name="l04052"></a><span class="lineno"><a class="line" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab"> 4052</a></span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab">LGSSMTP_SENT_FROM</a>, </div><div class="line"><a name="l04053"></a><span class="lineno"><a class="line" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83"> 4053</a></span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83">LGSSMTP_SENT_TO</a>, </div><div class="line"><a name="l04054"></a><span class="lineno"><a class="line" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14"> 4054</a></span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14">LGSSMTP_SENT_DATA</a>, </div><div class="line"><a name="l04055"></a><span class="lineno"><a class="line" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69"> 4055</a></span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69">LGSSMTP_SENT_BODY</a>, </div><div class="line"><a name="l04056"></a><span class="lineno"><a class="line" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5"> 4056</a></span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5">LGSSMTP_SENT_QUIT</a>, </div><div class="line"><a name="l04057"></a><span class="lineno"> 4057</span>&#160;};</div><div class="line"><a name="l04058"></a><span class="lineno"> 4058</span>&#160;</div><div class="line"><a name="l04060"></a><span class="lineno"><a class="line" href="structlws__email.html"> 4060</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__email.html">lws_email</a> {</div><div class="line"><a name="l04061"></a><span class="lineno"><a class="line" href="structlws__email.html#add1341456045382c183f4c763bdea6bc"> 4061</a></span>&#160;        <span class="keywordtype">void</span> *<a class="code" href="structlws__email.html#add1341456045382c183f4c763bdea6bc">data</a>;</div><div class="line"><a name="l04063"></a><span class="lineno"><a class="line" href="structlws__email.html#ab5fbf121195a8e67509c78a42cfbe168"> 4063</a></span>&#160;        uv_loop_t *<a class="code" href="structlws__email.html#ab5fbf121195a8e67509c78a42cfbe168">loop</a>;</div><div class="line"><a name="l04066"></a><span class="lineno"><a class="line" href="structlws__email.html#a472ae23fc9fca6599e5c512bc21458d2"> 4066</a></span>&#160;        <span class="keywordtype">char</span> email_smtp_ip[32]; </div><div class="line"><a name="l04067"></a><span class="lineno"><a class="line" href="structlws__email.html#a939e5d7ee0339a16de73bde71ab4d4d9"> 4067</a></span>&#160;        <span class="keywordtype">char</span> email_helo[32];    </div><div class="line"><a name="l04068"></a><span class="lineno"><a class="line" href="structlws__email.html#af7f0ae934347d81071f63a963301f9e2"> 4068</a></span>&#160;        <span class="keywordtype">char</span> email_from[100];   </div><div class="line"><a name="l04069"></a><span class="lineno"><a class="line" href="structlws__email.html#a6453a8b92b3de6d2c2101af3edce685e"> 4069</a></span>&#160;        <span class="keywordtype">char</span> email_to[100];     </div><div class="line"><a name="l04071"></a><span class="lineno"><a class="line" href="structlws__email.html#a7bbc1964889c984b3da723c86a210e05"> 4071</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structlws__email.html#a7bbc1964889c984b3da723c86a210e05">max_content_size</a>;</div><div class="line"><a name="l04074"></a><span class="lineno"> 4074</span>&#160;        <span class="comment">/* Fill all the callbacks before init */</span></div><div class="line"><a name="l04075"></a><span class="lineno"> 4075</span>&#160;</div><div class="line"><a name="l04076"></a><span class="lineno"><a class="line" href="structlws__email.html#ad8dc60353ee246d84dd59ec0591e9719"> 4076</a></span>&#160;        int (*on_next)(<span class="keyword">struct </span><a class="code" href="structlws__email.html">lws_email</a> *email);</div><div class="line"><a name="l04081"></a><span class="lineno"><a class="line" href="structlws__email.html#a39ef6263d58eb40cca417c8697b227d8"> 4081</a></span>&#160;        int (*<a class="code" href="structlws__email.html#a39ef6263d58eb40cca417c8697b227d8">on_sent</a>)(<span class="keyword">struct </span><a class="code" href="structlws__email.html">lws_email</a> *email);</div><div class="line"><a name="l04086"></a><span class="lineno"><a class="line" href="structlws__email.html#a2aff78c8e04db243052aa91b4d87e987"> 4086</a></span>&#160;        int (*<a class="code" href="structlws__email.html#a2aff78c8e04db243052aa91b4d87e987">on_get_body</a>)(<span class="keyword">struct </span><a class="code" href="structlws__email.html">lws_email</a> *email, <span class="keywordtype">char</span> *buf, <span class="keywordtype">int</span> len);</div><div class="line"><a name="l04092"></a><span class="lineno"> 4092</span>&#160;        <span class="comment">/* private things */</span></div><div class="line"><a name="l04093"></a><span class="lineno"><a class="line" href="structlws__email.html#a77723e2f2b940b1c879ef5e1cd88c2be"> 4093</a></span>&#160;        uv_timer_t <a class="code" href="structlws__email.html#a77723e2f2b940b1c879ef5e1cd88c2be">timeout_email</a>; </div><div class="line"><a name="l04094"></a><span class="lineno"><a class="line" href="structlws__email.html#ac6115d3cbef2e8bac62cc00895bf5fd3"> 4094</a></span>&#160;        <span class="keyword">enum</span> <a class="code" href="group__smtp.html#ga116be79bf44f9dc2a97f46e051fe4dc0">lwsgs_smtp_states</a> <a class="code" href="structlws__email.html#ac6115d3cbef2e8bac62cc00895bf5fd3">estate</a>; </div><div class="line"><a name="l04095"></a><span class="lineno"><a class="line" href="structlws__email.html#a5f53d4c5a1e34b0dcaa8787e2eabb1b3"> 4095</a></span>&#160;        uv_connect_t <a class="code" href="structlws__email.html#a5f53d4c5a1e34b0dcaa8787e2eabb1b3">email_connect_req</a>; </div><div class="line"><a name="l04096"></a><span class="lineno"><a class="line" href="structlws__email.html#a01f31934166dc6d01e8a375012f8ad1e"> 4096</a></span>&#160;        uv_tcp_t <a class="code" href="structlws__email.html#a01f31934166dc6d01e8a375012f8ad1e">email_client</a>; </div><div class="line"><a name="l04097"></a><span class="lineno"><a class="line" href="structlws__email.html#a9747ca85597788c2d118d287df47b7c1"> 4097</a></span>&#160;        time_t <a class="code" href="structlws__email.html#a9747ca85597788c2d118d287df47b7c1">email_connect_started</a>; </div><div class="line"><a name="l04098"></a><span class="lineno"><a class="line" href="structlws__email.html#a8f34ec0643a817be67ef4276aeb7fb82"> 4098</a></span>&#160;        <span class="keywordtype">char</span> <a class="code" href="structlws__email.html#a8f34ec0643a817be67ef4276aeb7fb82">email_buf</a>[256]; </div><div class="line"><a name="l04099"></a><span class="lineno"><a class="line" href="structlws__email.html#a6fff03c5a5d369a2aa3cab0c897b1bed"> 4099</a></span>&#160;        <span class="keywordtype">char</span> *<a class="code" href="structlws__email.html#a6fff03c5a5d369a2aa3cab0c897b1bed">content</a>; </div><div class="line"><a name="l04100"></a><span class="lineno"> 4100</span>&#160;};</div><div class="line"><a name="l04101"></a><span class="lineno"> 4101</span>&#160;</div><div class="line"><a name="l04111"></a><span class="lineno"> 4111</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l04112"></a><span class="lineno"> 4112</span>&#160;<a class="code" href="group__smtp.html#ga77fc9b56a1bb39484844981ec375fc29">lws_email_init</a>(<span class="keyword">struct</span> <a class="code" href="structlws__email.html">lws_email</a> *email, uv_loop_t *<a class="code" href="structlws__email.html#ab5fbf121195a8e67509c78a42cfbe168">loop</a>, <span class="keywordtype">int</span> max_content);</div><div class="line"><a name="l04113"></a><span class="lineno"> 4113</span>&#160;</div><div class="line"><a name="l04122"></a><span class="lineno"> 4122</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span></div><div class="line"><a name="l04123"></a><span class="lineno"> 4123</span>&#160;<a class="code" href="group__smtp.html#ga5e535e346d92a9daf00be33abf79d4eb">lws_email_check</a>(<span class="keyword">struct</span> <a class="code" href="structlws__email.html">lws_email</a> *email);</div><div class="line"><a name="l04131"></a><span class="lineno"> 4131</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span></div><div class="line"><a name="l04132"></a><span class="lineno"> 4132</span>&#160;<a class="code" href="group__smtp.html#ga25298a5afc1074e13b2d5711a86432b2">lws_email_destroy</a>(<span class="keyword">struct</span> <a class="code" href="structlws__email.html">lws_email</a> *email);</div><div class="line"><a name="l04133"></a><span class="lineno"> 4133</span>&#160;</div><div class="line"><a name="l04134"></a><span class="lineno"> 4134</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l04135"></a><span class="lineno"> 4135</span>&#160;</div><div class="line"><a name="l04136"></a><span class="lineno"> 4136</span>&#160;</div><div class="line"><a name="l04137"></a><span class="lineno"> 4137</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l04138"></a><span class="lineno"> 4138</span>&#160;}</div><div class="line"><a name="l04139"></a><span class="lineno"> 4139</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l04140"></a><span class="lineno"> 4140</span>&#160;</div><div class="line"><a name="l04141"></a><span class="lineno"> 4141</span>&#160;<span class="preprocessor">#endif</span></div><div class="ttc" id="group__form-parsing_html_gaaa482f07dad3f04b391cccf0a814e13b"><div class="ttname"><a href="group__form-parsing.html#gaaa482f07dad3f04b391cccf0a814e13b">lws_spa_destroy</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN int lws_spa_destroy(struct lws_spa *spa)</div></div>
+<a href="libwebsockets_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * libwebsockets - small server side websockets and web server implementation</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Copyright (C) 2010-2016 Andy Green &lt;andy@warmcat.com&gt;</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> *  This library is free software; you can redistribute it and/or</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> *  modify it under the terms of the GNU Lesser General Public</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *  License as published by the Free Software Foundation:</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *  version 2.1 of the License.</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> *  This library is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> *  but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> *  Lesser General Public License for more details.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> *  You should have received a copy of the GNU Lesser General Public</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> *  License along with this library; if not, write to the Free Software</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="comment"> *  MA  02110-1301  USA</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#ifndef LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#define LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="preprocessor">#include &lt;cstddef&gt;</span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="preprocessor">#include &lt;cstdarg&gt;</span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="preprocessor">#ifdef MBED_OPERATORS</span></div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="preprocessor">#include &quot;mbed-drivers/mbed.h&quot;</span></div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="preprocessor">#include &quot;sal-iface-eth/EthernetInterface.h&quot;</span></div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="preprocessor">#include &quot;sockets/TCPListener.h&quot;</span></div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="preprocessor">#include &quot;sal-stack-lwip/lwipv4_init.h&quot;</span></div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="keyword">namespace </span>{</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;}</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacembed_1_1Sockets_1_1v0.html">mbed::Sockets::v0</a>;</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="keyword">struct </span>sockaddr_in;</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="keyword">struct </span>lws;</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="classlws__conn.html">   44</a></span>&#160;<span class="keyword">class </span><a class="code" href="classlws__conn.html">lws_conn</a> {</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;        <span class="keyword">public</span>:</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;        <a class="code" href="classlws__conn.html">lws_conn</a>():</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;                ts(NULL),</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;                wsi(NULL),</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;                writeable(1),</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;                awaiting_on_writeable(0)</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;        {</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;        }</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;        <span class="keywordtype">void</span> set_wsi(<span class="keyword">struct</span> lws *_wsi) { wsi = _wsi; }</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;        <span class="keywordtype">int</span> actual_onRX(Socket *s);</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;        <span class="keywordtype">void</span> onRX(Socket *s);</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;        <span class="keywordtype">void</span> onError(Socket *s, socket_error_t err);</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;        <span class="keywordtype">void</span> onDisconnect(TCPStream *s);</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;        <span class="keywordtype">void</span> onSent(Socket *s, uint16_t len);</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;        <span class="keywordtype">void</span> serialized_writeable(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;        TCPStream *ts;</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;        <span class="keyword">struct </span>lws *wsi;</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;        <span class="keywordtype">char</span> writeable;</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;        <span class="keywordtype">char</span> awaiting_on_writeable;</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;};</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="classlws__conn__listener.html">   72</a></span>&#160;<span class="keyword">class </span><a class="code" href="classlws__conn__listener.html">lws_conn_listener</a> : <a class="code" href="classlws__conn.html">lws_conn</a> {</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;        <a class="code" href="classlws__conn__listener.html">lws_conn_listener</a>():</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;                srv(SOCKET_STACK_LWIP_IPV4)</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;        {</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;                srv.setOnError(TCPStream::ErrorHandler_t(<span class="keyword">this</span>,</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;                                &amp;<a class="code" href="classlws__conn__listener.html#a271ac4f8ad5770b3bc96cce5b265b72c">lws_conn_listener::onError</a>));</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;        }</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;        <span class="keywordtype">void</span> start(<span class="keyword">const</span> uint16_t port); </div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;        <span class="keywordtype">void</span> onRX(Socket *s); </div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;        <span class="keywordtype">void</span> onError(Socket *s, socket_error_t err); </div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;        <span class="keywordtype">void</span> onIncoming(TCPListener *s, <span class="keywordtype">void</span> *impl); </div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;        <span class="keywordtype">void</span> onDisconnect(TCPStream *s); </div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;        TCPListener srv;</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;};</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;<span class="preprocessor">#include &lt;stdarg.h&gt;</span></div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;<span class="preprocessor">#if defined(MBED_OPERATORS) || defined(LWS_WITH_ESP8266)</span></div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;<span class="keyword">struct </span>sockaddr_in;</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;<span class="preprocessor">#define LWS_POSIX 0</span></div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;<span class="preprocessor">#define LWS_POSIX 1</span></div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;<span class="preprocessor">#include &quot;lws_config.h&quot;</span></div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;<span class="preprocessor">#if defined(WIN32) || defined(_WIN32)</span></div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;<span class="preprocessor">#ifndef WIN32_LEAN_AND_MEAN</span></div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;<span class="preprocessor">#define WIN32_LEAN_AND_MEAN</span></div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;<span class="preprocessor">#include &lt;winsock2.h&gt;</span></div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;<span class="preprocessor">#include &lt;ws2tcpip.h&gt;</span></div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;<span class="preprocessor">#include &lt;stddef.h&gt;</span></div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;<span class="preprocessor">#include &lt;basetsd.h&gt;</span></div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;<span class="preprocessor">#ifndef _WIN32_WCE</span></div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;<span class="preprocessor">#include &lt;fcntl.h&gt;</span></div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;<span class="preprocessor">#define _O_RDONLY       0x0000</span></div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;<span class="preprocessor">#define O_RDONLY        _O_RDONLY</span></div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;<span class="comment">// Visual studio older than 2015 and WIN_CE has only _stricmp</span></div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;<span class="preprocessor">#if (defined(_MSC_VER) &amp;&amp; _MSC_VER &lt; 1900) || defined(_WIN32_WCE)</span></div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;<span class="preprocessor">#define strcasecmp _stricmp</span></div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;<span class="preprocessor">#define strcasecmp stricmp</span></div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;<span class="preprocessor">#define getdtablesize() 30000</span></div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;<span class="preprocessor">#define LWS_INLINE __inline</span></div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;<span class="preprocessor">#define LWS_VISIBLE</span></div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;<span class="preprocessor">#define LWS_WARN_UNUSED_RESULT</span></div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;<span class="preprocessor">#define LWS_WARN_DEPRECATED</span></div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;<span class="preprocessor">#ifdef LWS_DLL</span></div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;<span class="preprocessor">#ifdef LWS_INTERNAL</span></div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;<span class="preprocessor">#define LWS_EXTERN extern __declspec(dllexport)</span></div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;<span class="preprocessor">#define LWS_EXTERN extern __declspec(dllimport)</span></div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;<span class="preprocessor">#define LWS_EXTERN</span></div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;<span class="preprocessor">#define LWS_INVALID_FILE INVALID_HANDLE_VALUE</span></div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;<span class="preprocessor">#define LWS_O_RDONLY _O_RDONLY</span></div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;<span class="preprocessor">#if !defined(_MSC_VER) || _MSC_VER &lt; 1900 </span><span class="comment">/* Visual Studio 2015 already defines this in &lt;stdio.h&gt; */</span><span class="preprocessor"></span></div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;<span class="preprocessor">#define lws_snprintf _snprintf</span></div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;<span class="preprocessor">#ifndef __func__</span></div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;<span class="preprocessor">#define __func__ __FUNCTION__</span></div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;<span class="preprocessor">#else </span><span class="comment">/* NOT WIN32 */</span><span class="preprocessor"></span></div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;<span class="preprocessor">#include &lt;unistd.h&gt;</span></div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;<span class="preprocessor">#if defined(__NetBSD__) || defined(__FreeBSD__)</span></div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;<span class="preprocessor">#include &lt;netinet/in.h&gt;</span></div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;<span class="preprocessor">#define LWS_INLINE inline</span></div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;<span class="preprocessor">#define LWS_O_RDONLY O_RDONLY</span></div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;<span class="preprocessor">#if !defined(MBED_OPERATORS) &amp;&amp; !defined(LWS_WITH_ESP8266)</span></div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;<span class="preprocessor">#include &lt;poll.h&gt;</span></div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;<span class="preprocessor">#include &lt;netdb.h&gt;</span></div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;<span class="preprocessor">#define LWS_INVALID_FILE -1</span></div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;<span class="preprocessor">#define getdtablesize() (20)</span></div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;<span class="preprocessor">#define LWS_INVALID_FILE NULL</span></div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;<span class="preprocessor">#if defined(__GNUC__)</span></div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;<span class="comment">/* warn_unused_result attribute only supported by GCC 3.4 or later */</span></div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;<span class="preprocessor">#if __GNUC__ &gt;= 4 || (__GNUC__ == 3 &amp;&amp; __GNUC_MINOR__ &gt;= 4)</span></div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;<span class="preprocessor">#define LWS_WARN_UNUSED_RESULT __attribute__((warn_unused_result))</span></div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;<span class="preprocessor">#define LWS_WARN_UNUSED_RESULT</span></div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;<span class="preprocessor">#define LWS_VISIBLE __attribute__((visibility(&quot;default&quot;)))</span></div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;<span class="preprocessor">#define LWS_WARN_DEPRECATED __attribute__ ((deprecated))</span></div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;<span class="preprocessor">#define LWS_VISIBLE</span></div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;<span class="preprocessor">#define LWS_WARN_UNUSED_RESULT</span></div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;<span class="preprocessor">#define LWS_WARN_DEPRECATED</span></div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;<span class="preprocessor">#if defined(__ANDROID__)</span></div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;<span class="preprocessor">#include &lt;unistd.h&gt;</span></div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;<span class="preprocessor">#define getdtablesize() sysconf(_SC_OPEN_MAX)</span></div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;<span class="preprocessor">#ifdef LWS_USE_LIBEV</span></div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;<span class="preprocessor">#include &lt;ev.h&gt;</span></div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* LWS_USE_LIBEV */</span><span class="preprocessor"></span></div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;<span class="preprocessor">#ifdef LWS_USE_LIBUV</span></div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;<span class="preprocessor">#include &lt;uv.h&gt;</span></div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* LWS_USE_LIBUV */</span><span class="preprocessor"></span></div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;<span class="preprocessor">#ifndef LWS_EXTERN</span></div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;<span class="preprocessor">#define LWS_EXTERN extern</span></div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;<span class="preprocessor">#ifdef _WIN32</span></div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;<span class="preprocessor">#define random rand</span></div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;<span class="preprocessor">#include &lt;sys/time.h&gt;</span></div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;<span class="preprocessor">#include &lt;unistd.h&gt;</span></div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;<span class="preprocessor">#ifdef LWS_OPENSSL_SUPPORT</span></div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;<span class="preprocessor">#ifdef USE_WOLFSSL</span></div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;<span class="preprocessor">#ifdef USE_OLD_CYASSL</span></div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;<span class="preprocessor">#include &lt;cyassl/openssl/ssl.h&gt;</span></div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;<span class="preprocessor">#include &lt;cyassl/error-ssl.h&gt;</span></div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;<span class="preprocessor">#include &lt;wolfssl/openssl/ssl.h&gt;</span></div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;<span class="preprocessor">#include &lt;wolfssl/error-ssl.h&gt;</span></div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* not USE_OLD_CYASSL */</span><span class="preprocessor"></span></div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;<span class="preprocessor">#if defined(LWS_USE_POLARSSL)</span></div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;<span class="preprocessor">#include &lt;polarssl/ssl.h&gt;</span></div><div class="line"><a name="l00233"></a><span class="lineno"><a class="line" href="structlws__polarssl__context.html">  233</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__polarssl__context.html">lws_polarssl_context</a> {</div><div class="line"><a name="l00234"></a><span class="lineno"><a class="line" href="structlws__polarssl__context.html#a1872f2ea24878d807ae20ca8513674af">  234</a></span>&#160;        x509_crt <a class="code" href="structlws__polarssl__context.html#a1872f2ea24878d807ae20ca8513674af">ca</a>; </div><div class="line"><a name="l00235"></a><span class="lineno"><a class="line" href="structlws__polarssl__context.html#ae7e11c9129ff71c7ee71b3b2e320ff27">  235</a></span>&#160;        x509_crt <a class="code" href="structlws__polarssl__context.html#ae7e11c9129ff71c7ee71b3b2e320ff27">certificate</a>; </div><div class="line"><a name="l00236"></a><span class="lineno"><a class="line" href="structlws__polarssl__context.html#a919c33af37aab170f828d954de1fa270">  236</a></span>&#160;        rsa_context <a class="code" href="structlws__polarssl__context.html#a919c33af37aab170f828d954de1fa270">key</a>; </div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;};</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structlws__polarssl__context.html">lws_polarssl_context</a> <a class="code" href="structlws__polarssl__context.html">SSL_CTX</a>;</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;<span class="keyword">typedef</span> ssl_context SSL;</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;<span class="preprocessor">#if defined(LWS_USE_MBEDTLS)</span></div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;<span class="preprocessor">#include &lt;mbedtls/ssl.h&gt;</span></div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;<span class="preprocessor">#include &lt;openssl/ssl.h&gt;</span></div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;<span class="preprocessor">#include &lt;openssl/err.h&gt;</span></div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* not USE_MBEDTLS */</span><span class="preprocessor"></span></div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* not USE_POLARSSL */</span><span class="preprocessor"></span></div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* not USE_WOLFSSL */</span><span class="preprocessor"></span></div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;<span class="preprocessor">#define CONTEXT_PORT_NO_LISTEN -1</span></div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;</div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;<span class="keyword">enum</span> lws_log_levels {</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;        LLL_ERR = 1 &lt;&lt; 0,</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;        LLL_WARN = 1 &lt;&lt; 1,</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;        LLL_NOTICE = 1 &lt;&lt; 2,</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;        LLL_INFO = 1 &lt;&lt; 3,</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;        LLL_DEBUG = 1 &lt;&lt; 4,</div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;        LLL_PARSER = 1 &lt;&lt; 5,</div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;        LLL_HEADER = 1 &lt;&lt; 6,</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;        LLL_EXT = 1 &lt;&lt; 7,</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;        LLL_CLIENT = 1 &lt;&lt; 8,</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;        LLL_LATENCY = 1 &lt;&lt; 9,</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;        LLL_COUNT = 10 <span class="comment">/* set to count of valid flags */</span></div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;};</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span> _lws_log(<span class="keywordtype">int</span> filter, <span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...);</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span> _lws_logv(<span class="keywordtype">int</span> filter, <span class="keyword">const</span> <span class="keywordtype">char</span> *format, va_list vl);</div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;<a class="code" href="group__log.html#ga42e39775c6b69b7251bdbf5a2cdd5dcd">lwsl_timestamp</a>(<span class="keywordtype">int</span> level, <span class="keywordtype">char</span> *p, <span class="keywordtype">int</span> len);</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;<span class="preprocessor">#define lwsl_err(...) _lws_log(LLL_ERR, __VA_ARGS__)</span></div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;<span class="preprocessor">#if !defined(LWS_WITH_NO_LOGS)</span></div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;<span class="comment">/* notice, warn and log are always compiled in */</span></div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;<span class="preprocessor">#define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__)</span></div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;<span class="preprocessor">#define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__)</span></div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;<span class="comment"> *  weaker logging can be deselected at configure time using --disable-debug</span></div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;<span class="comment"> *  that gets rid of the overhead of checking while keeping _warn and _err</span></div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;<span class="comment"> *  active</span></div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;</div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;<span class="preprocessor">#if defined(LWS_WITH_ESP8266)</span></div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;<span class="preprocessor">#undef _DEBUG</span></div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;<span class="preprocessor">#ifdef _DEBUG</span></div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;<span class="preprocessor">#if defined(LWS_WITH_NO_LOGS)</span></div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;<span class="comment">/* notice, warn and log are always compiled in */</span></div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;<span class="comment">//#define lwsl_err(...) _lws_log(LLL_ERR, __VA_ARGS__)</span></div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;<span class="preprocessor">#define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__)</span></div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;<span class="preprocessor">#define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__)</span></div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;<span class="preprocessor">#define lwsl_info(...) _lws_log(LLL_INFO, __VA_ARGS__)</span></div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;<span class="preprocessor">#define lwsl_debug(...) _lws_log(LLL_DEBUG, __VA_ARGS__)</span></div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;<span class="preprocessor">#define lwsl_parser(...) _lws_log(LLL_PARSER, __VA_ARGS__)</span></div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;<span class="preprocessor">#define lwsl_header(...)  _lws_log(LLL_HEADER, __VA_ARGS__)</span></div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;<span class="preprocessor">#define lwsl_ext(...)  _lws_log(LLL_EXT, __VA_ARGS__)</span></div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;<span class="preprocessor">#define lwsl_client(...) _lws_log(LLL_CLIENT, __VA_ARGS__)</span></div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;<span class="preprocessor">#define lwsl_latency(...) _lws_log(LLL_LATENCY, __VA_ARGS__)</span></div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;</div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span> <a class="code" href="group__log.html#ga898b1f03872ad019f507d4e35bbefa90">lwsl_hexdump</a>(<span class="keywordtype">void</span> *buf, <span class="keywordtype">size_t</span> len);</div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;</div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;<span class="preprocessor">#else </span><span class="comment">/* no debug */</span><span class="preprocessor"></span></div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;<span class="preprocessor">#if defined(LWS_WITH_NO_LOGS)</span></div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;<span class="comment">//#define lwsl_err(...) do {} while(0)</span></div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;<span class="preprocessor">#define lwsl_warn(...) do {} while(0)</span></div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;<span class="preprocessor">#define lwsl_notice(...) do {} while(0)</span></div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;<span class="preprocessor">#define lwsl_info(...) do {} while(0)</span></div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;<span class="preprocessor">#define lwsl_debug(...) do {} while(0)</span></div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;<span class="preprocessor">#define lwsl_parser(...) do {} while(0)</span></div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;<span class="preprocessor">#define lwsl_header(...) do {} while(0)</span></div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;<span class="preprocessor">#define lwsl_ext(...) do {} while(0)</span></div><div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;<span class="preprocessor">#define lwsl_client(...) do {} while(0)</span></div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;<span class="preprocessor">#define lwsl_latency(...) do {} while(0)</span></div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;<span class="preprocessor">#define lwsl_hexdump(a, b)</span></div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;</div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;</div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span></div><div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;<a class="code" href="group__log.html#ga244647f9e1bf0097ccdde66d74f41e26">lws_set_log_level</a>(<span class="keywordtype">int</span> level,</div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;                  <span class="keywordtype">void</span> (*log_emit_function)(<span class="keywordtype">int</span> level, <span class="keyword">const</span> <span class="keywordtype">char</span> *line));</div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;</div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span></div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;<a class="code" href="group__log.html#gab7c0fc936cc9f1eb58e2bb234c15147c">lwsl_emit_syslog</a>(<span class="keywordtype">int</span> level, <span class="keyword">const</span> <span class="keywordtype">char</span> *line);</div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;</div><div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;</div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;</div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;<span class="preprocessor">#include &lt;stddef.h&gt;</span></div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;</div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;<span class="preprocessor">#ifndef lws_container_of</span></div><div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;<span class="preprocessor">#define lws_container_of(P,T,M) ((T *)((char *)(P) - offsetof(T, M)))</span></div><div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;</div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;</div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;<span class="keyword">struct </span>lws;</div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;<span class="preprocessor">#ifndef ARRAY_SIZE</span></div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;<span class="preprocessor">#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))</span></div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;</div><div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;<span class="comment">/* api change list for user code to test against */</span></div><div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;</div><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;<span class="preprocessor">#define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_ARG</span></div><div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;</div><div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;<span class="comment">/* the struct lws_protocols has the id field present */</span></div><div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;<span class="preprocessor">#define LWS_FEATURE_PROTOCOLS_HAS_ID_FIELD</span></div><div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;</div><div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;<span class="comment">/* you can call lws_get_peer_write_allowance */</span></div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;<span class="preprocessor">#define LWS_FEATURE_PROTOCOLS_HAS_PEER_WRITE_ALLOWANCE</span></div><div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;</div><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;<span class="comment">/* extra parameter introduced in 917f43ab821 */</span></div><div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;<span class="preprocessor">#define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_LEN</span></div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;</div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;<span class="comment">/* File operations stuff exists */</span></div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;<span class="preprocessor">#define LWS_FEATURE_FOPS</span></div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;</div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;</div><div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;<span class="preprocessor">#if defined(_WIN32)</span></div><div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;<span class="keyword">typedef</span> SOCKET lws_sockfd_type;</div><div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;<span class="keyword">typedef</span> HANDLE lws_filefd_type;</div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;<span class="preprocessor">#define lws_sockfd_valid(sfd) (!!sfd)</span></div><div class="line"><a name="l00413"></a><span class="lineno"><a class="line" href="structlws__pollfd.html">  413</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__pollfd.html">lws_pollfd</a> {</div><div class="line"><a name="l00414"></a><span class="lineno"><a class="line" href="structlws__pollfd.html#a714cf5ca90b41926117fdde9fa6542be">  414</a></span>&#160;        lws_sockfd_type <a class="code" href="structlws__pollfd.html#a714cf5ca90b41926117fdde9fa6542be">fd</a>; </div><div class="line"><a name="l00415"></a><span class="lineno"><a class="line" href="structlws__pollfd.html#ac393db6fc7fb6ed8fe7ca20936908ee9">  415</a></span>&#160;        SHORT <a class="code" href="structlws__pollfd.html#ac393db6fc7fb6ed8fe7ca20936908ee9">events</a>; </div><div class="line"><a name="l00416"></a><span class="lineno"><a class="line" href="structlws__pollfd.html#ae7cecfe7511c59d4a3a44f876d030932">  416</a></span>&#160;        SHORT <a class="code" href="structlws__pollfd.html#ae7cecfe7511c59d4a3a44f876d030932">revents</a>; </div><div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;};</div><div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;<span class="preprocessor">#define LWS_POLLHUP (FD_CLOSE)</span></div><div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;<span class="preprocessor">#define LWS_POLLIN (FD_READ | FD_ACCEPT)</span></div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;<span class="preprocessor">#define LWS_POLLOUT (FD_WRITE)</span></div><div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;</div><div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;<span class="preprocessor">#if defined(MBED_OPERATORS)</span></div><div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;<span class="comment">/* it&#39;s a class lws_conn * */</span></div><div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;<span class="keyword">typedef</span> <span class="keywordtype">void</span> * lws_sockfd_type;</div><div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;<span class="keyword">typedef</span> <span class="keywordtype">void</span> * lws_filefd_type;</div><div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;<span class="preprocessor">#define lws_sockfd_valid(sfd) (!!sfd)</span></div><div class="line"><a name="l00428"></a><span class="lineno"><a class="line" href="structpollfd.html">  428</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structpollfd.html">pollfd</a> {</div><div class="line"><a name="l00429"></a><span class="lineno"><a class="line" href="structpollfd.html#af084f089bdece61d177f85782d6673d0">  429</a></span>&#160;        lws_sockfd_type <a class="code" href="structpollfd.html#af084f089bdece61d177f85782d6673d0">fd</a>; </div><div class="line"><a name="l00430"></a><span class="lineno"><a class="line" href="structpollfd.html#ac9b2f2c5b1f9a7487eb57e67cd4960ef">  430</a></span>&#160;        <span class="keywordtype">short</span> <a class="code" href="structpollfd.html#ac9b2f2c5b1f9a7487eb57e67cd4960ef">events</a>; </div><div class="line"><a name="l00431"></a><span class="lineno"><a class="line" href="structpollfd.html#aafb457d11cac415faf0e1e2b825118c2">  431</a></span>&#160;        <span class="keywordtype">short</span> <a class="code" href="structpollfd.html#aafb457d11cac415faf0e1e2b825118c2">revents</a>; </div><div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;};</div><div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;<span class="preprocessor">#define POLLIN          0x0001</span></div><div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;<span class="preprocessor">#define POLLPRI         0x0002</span></div><div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;<span class="preprocessor">#define POLLOUT         0x0004</span></div><div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;<span class="preprocessor">#define POLLERR         0x0008</span></div><div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;<span class="preprocessor">#define POLLHUP         0x0010</span></div><div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;<span class="preprocessor">#define POLLNVAL        0x0020</span></div><div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;</div><div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;<span class="keyword">struct </span>lws;</div><div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;</div><div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;<span class="keywordtype">void</span> * mbed3_create_tcp_stream_socket(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;<span class="keywordtype">void</span> mbed3_delete_tcp_stream_socket(<span class="keywordtype">void</span> *sockfd);</div><div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;<span class="keywordtype">void</span> mbed3_tcp_stream_bind(<span class="keywordtype">void</span> *sock, <span class="keywordtype">int</span> port, <span class="keyword">struct</span> lws *);</div><div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;<span class="keywordtype">void</span> mbed3_tcp_stream_accept(<span class="keywordtype">void</span> *sock, <span class="keyword">struct</span> lws *);</div><div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;<span class="preprocessor">#if defined(LWS_WITH_ESP8266)</span></div><div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;</div><div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;<span class="preprocessor">#include &lt;user_interface.h&gt;</span></div><div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;<span class="preprocessor">#include &lt;espconn.h&gt;</span></div><div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;</div><div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>espconn * lws_sockfd_type;</div><div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;<span class="keyword">typedef</span> <span class="keywordtype">void</span> * lws_filefd_type;</div><div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;<span class="preprocessor">#define lws_sockfd_valid(sfd) (!!sfd)</span></div><div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;<span class="keyword">struct </span><a class="code" href="structpollfd.html">pollfd</a> {</div><div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;        lws_sockfd_type fd; </div><div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;        <span class="keywordtype">short</span> events; </div><div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;        <span class="keywordtype">short</span> revents; </div><div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;};</div><div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;<span class="preprocessor">#define POLLIN          0x0001</span></div><div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;<span class="preprocessor">#define POLLPRI         0x0002</span></div><div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;<span class="preprocessor">#define POLLOUT         0x0004</span></div><div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;<span class="preprocessor">#define POLLERR         0x0008</span></div><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;<span class="preprocessor">#define POLLHUP         0x0010</span></div><div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;<span class="preprocessor">#define POLLNVAL        0x0020</span></div><div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;</div><div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;<span class="keyword">struct </span>lws_vhost;</div><div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;</div><div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;lws_sockfd_type esp8266_create_tcp_listen_socket(<span class="keyword">struct</span> lws_vhost *vh);</div><div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;<span class="keywordtype">void</span> esp8266_tcp_stream_accept(lws_sockfd_type fd, <span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;</div><div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;<span class="preprocessor">#include &lt;os_type.h&gt;</span></div><div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;<span class="preprocessor">#include &lt;osapi.h&gt;</span></div><div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;<span class="preprocessor">#include &quot;ets_sys.h&quot;</span></div><div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;</div><div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;<span class="keywordtype">int</span> ets_snprintf(<span class="keywordtype">char</span> *str, <span class="keywordtype">size_t</span> size, <span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...);</div><div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;<span class="preprocessor">#define snprintf  ets_snprintf</span></div><div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;</div><div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;<span class="keyword">typedef</span> os_timer_t uv_timer_t;</div><div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;<span class="keyword">typedef</span> <span class="keywordtype">void</span> uv_cb_t(uv_timer_t *);</div><div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;</div><div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;<span class="keywordtype">void</span> os_timer_disarm(<span class="keywordtype">void</span> *);</div><div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;<span class="keywordtype">void</span> os_timer_setfn(os_timer_t *, os_timer_func_t *, <span class="keywordtype">void</span> *);</div><div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;</div><div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;<span class="keywordtype">void</span> ets_timer_arm_new(os_timer_t *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>);</div><div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;</div><div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;<span class="comment">//void os_timer_arm(os_timer_t *, int, int);</span></div><div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;</div><div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;<span class="preprocessor">#define UV_VERSION_MAJOR 1</span></div><div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;</div><div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;<span class="preprocessor">#define lws_uv_getloop(a, b) (NULL)</span></div><div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;</div><div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;<span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> uv_timer_init(<span class="keywordtype">void</span> *l, uv_timer_t *t)</div><div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;{</div><div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;        (void)l;</div><div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;        memset(t, 0, <span class="keyword">sizeof</span>(*t));</div><div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;        os_timer_disarm(t);</div><div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;}</div><div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;</div><div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;<span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> uv_timer_start(uv_timer_t *t, uv_cb_t *cb, <span class="keywordtype">int</span> first, <span class="keywordtype">int</span> rep)</div><div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;{</div><div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;        os_timer_setfn(t, (os_timer_func_t *)cb, t);</div><div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;        <span class="comment">/* ms, repeat */</span></div><div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;        os_timer_arm(t, first, !!rep);</div><div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;}</div><div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;</div><div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;<span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> uv_timer_stop(uv_timer_t *t)</div><div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;{</div><div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;        os_timer_disarm(t);</div><div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;}</div><div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;</div><div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;<span class="keyword">typedef</span> <span class="keywordtype">int</span> lws_sockfd_type;</div><div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;<span class="keyword">typedef</span> <span class="keywordtype">int</span> lws_filefd_type;</div><div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;<span class="preprocessor">#define lws_sockfd_valid(sfd) (sfd &gt;= 0)</span></div><div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;</div><div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;<span class="preprocessor">#define lws_pollfd pollfd</span></div><div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;<span class="preprocessor">#define LWS_POLLHUP (POLLHUP|POLLERR)</span></div><div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;<span class="preprocessor">#define LWS_POLLIN (POLLIN)</span></div><div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;<span class="preprocessor">#define LWS_POLLOUT (POLLOUT)</span></div><div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;</div><div class="line"><a name="l00527"></a><span class="lineno"><a class="line" href="structlws__pollargs.html">  527</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__pollargs.html">lws_pollargs</a> {</div><div class="line"><a name="l00528"></a><span class="lineno"><a class="line" href="structlws__pollargs.html#af14a48ef4e78128aef9a76902b104a81">  528</a></span>&#160;        lws_sockfd_type <a class="code" href="structlws__pollargs.html#af14a48ef4e78128aef9a76902b104a81">fd</a>;     </div><div class="line"><a name="l00529"></a><span class="lineno"><a class="line" href="structlws__pollargs.html#a00bbffea9f55de342783e32d71ce1de6">  529</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__pollargs.html#a00bbffea9f55de342783e32d71ce1de6">events</a>;             </div><div class="line"><a name="l00530"></a><span class="lineno"><a class="line" href="structlws__pollargs.html#a437fec0de5cf264371e1ab5a401e86d8">  530</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__pollargs.html#a437fec0de5cf264371e1ab5a401e86d8">prev_events</a>;        </div><div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;};</div><div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;</div><div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__tokens.html">lws_tokens</a>;</div><div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__token__limits.html">lws_token_limits</a>;</div><div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;</div><div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;</div><div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;<span class="comment"> * NOTE: These public enums are part of the abi.  If you want to add one,</span></div><div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;<span class="comment"> * add it at where specified so existing users are unaffected.</span></div><div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00550"></a><span class="lineno"><a class="line" href="group__wsclose.html#gae399c571df32ba532c0ca67da9284985">  550</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="group__wsclose.html#gae399c571df32ba532c0ca67da9284985">lws_close_status</a> {</div><div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;        LWS_CLOSE_STATUS_NOSTATUS                               =    0,</div><div class="line"><a name="l00552"></a><span class="lineno"><a class="line" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a3ffa38d5081b85fb739e02a747ccf2c4">  552</a></span>&#160;        <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a3ffa38d5081b85fb739e02a747ccf2c4">LWS_CLOSE_STATUS_NORMAL</a>                                 = 1000,</div><div class="line"><a name="l00555"></a><span class="lineno"><a class="line" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218">  555</a></span>&#160;        <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218">LWS_CLOSE_STATUS_GOINGAWAY</a>                              = 1001,</div><div class="line"><a name="l00558"></a><span class="lineno"><a class="line" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a1bb501d212fa4d57053db681b1dfab98">  558</a></span>&#160;        <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a1bb501d212fa4d57053db681b1dfab98">LWS_CLOSE_STATUS_PROTOCOL_ERR</a>                           = 1002,</div><div class="line"><a name="l00561"></a><span class="lineno"><a class="line" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a462c99b05459df700919cfd3f53c8276">  561</a></span>&#160;        <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a462c99b05459df700919cfd3f53c8276">LWS_CLOSE_STATUS_UNACCEPTABLE_OPCODE</a>                    = 1003,</div><div class="line"><a name="l00566"></a><span class="lineno"><a class="line" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2">  566</a></span>&#160;        <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2">LWS_CLOSE_STATUS_RESERVED</a>                               = 1004,</div><div class="line"><a name="l00568"></a><span class="lineno"><a class="line" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a4b8a3b7ce6f731e5248e4b0fb64a5044">  568</a></span>&#160;        <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a4b8a3b7ce6f731e5248e4b0fb64a5044">LWS_CLOSE_STATUS_NO_STATUS</a>                              = 1005,</div><div class="line"><a name="l00573"></a><span class="lineno"><a class="line" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a68b3d34bebd88547dcfa5cadba0acd6c">  573</a></span>&#160;        <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a68b3d34bebd88547dcfa5cadba0acd6c">LWS_CLOSE_STATUS_ABNORMAL_CLOSE</a>                         = 1006,</div><div class="line"><a name="l00579"></a><span class="lineno"><a class="line" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050">  579</a></span>&#160;        <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050">LWS_CLOSE_STATUS_INVALID_PAYLOAD</a>                        = 1007,</div><div class="line"><a name="l00584"></a><span class="lineno"><a class="line" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad09e68295eabdddcba4e332fbea70ae5">  584</a></span>&#160;        <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad09e68295eabdddcba4e332fbea70ae5">LWS_CLOSE_STATUS_POLICY_VIOLATION</a>                       = 1008,</div><div class="line"><a name="l00590"></a><span class="lineno"><a class="line" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8">  590</a></span>&#160;        <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8">LWS_CLOSE_STATUS_MESSAGE_TOO_LARGE</a>                      = 1009,</div><div class="line"><a name="l00594"></a><span class="lineno"><a class="line" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e">  594</a></span>&#160;        <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e">LWS_CLOSE_STATUS_EXTENSION_REQUIRED</a>                     = 1010,</div><div class="line"><a name="l00602"></a><span class="lineno"><a class="line" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad0869604d79e13700ae5d196a431b350">  602</a></span>&#160;        <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad0869604d79e13700ae5d196a431b350">LWS_CLOSE_STATUS_UNEXPECTED_CONDITION</a>                   = 1011,</div><div class="line"><a name="l00606"></a><span class="lineno"><a class="line" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad2b477a91c8445bf34ecd43977f9b390">  606</a></span>&#160;        <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad2b477a91c8445bf34ecd43977f9b390">LWS_CLOSE_STATUS_TLS_FAILURE</a>                            = 1015,</div><div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;        <span class="comment">/****** add new things just above ---^ ******/</span></div><div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;</div><div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;        LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY               = 9999,</div><div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;};</div><div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;</div><div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span></div><div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;<a class="code" href="group__wsclose.html#gaa1c863415d1783cd8de7938aa6efa262">lws_close_reason</a>(<span class="keyword">struct</span> lws *wsi, <span class="keyword">enum</span> <a class="code" href="group__wsclose.html#gae399c571df32ba532c0ca67da9284985">lws_close_status</a> status,</div><div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;                 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *buf, <span class="keywordtype">size_t</span> len);</div><div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;</div><div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;</div><div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;<span class="keyword">struct </span>lws;</div><div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;<span class="keyword">struct </span>lws_context;</div><div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;<span class="comment">/* needed even with extensions disabled for create context */</span></div><div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__extension.html">lws_extension</a>;</div><div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;</div><div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;</div><div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;</div><div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;<span class="comment"> * NOTE: These public enums are part of the abi.  If you want to add one,</span></div><div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;<span class="comment"> * add it at where specified so existing users are unaffected.</span></div><div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00660"></a><span class="lineno"><a class="line" href="group__usercb.html#gad62860e19975ba4c4af401c3cdb6abf7">  660</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="group__usercb.html#gad62860e19975ba4c4af401c3cdb6abf7">lws_callback_reasons</a> {</div><div class="line"><a name="l00661"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a24d39bf1cfc0bad9d92da9ac1717e439">  661</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a24d39bf1cfc0bad9d92da9ac1717e439">LWS_CALLBACK_ESTABLISHED</a>                                =  0,</div><div class="line"><a name="l00665"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ad8c6207b0c4e732f3d507f0fb79370e8">  665</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ad8c6207b0c4e732f3d507f0fb79370e8">LWS_CALLBACK_CLIENT_CONNECTION_ERROR</a>                    =  1,</div><div class="line"><a name="l00709"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa536e574a642ff3ab9e12bff7ba2c6a2">  709</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa536e574a642ff3ab9e12bff7ba2c6a2">LWS_CALLBACK_CLIENT_FILTER_PRE_ESTABLISH</a>                =  2,</div><div class="line"><a name="l00716"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7e12418eec9bce85735e6460176ab604">  716</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7e12418eec9bce85735e6460176ab604">LWS_CALLBACK_CLIENT_ESTABLISHED</a>                         =  3,</div><div class="line"><a name="l00719"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a48a9590e5e18c7920282e094a0bfd9d8">  719</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a48a9590e5e18c7920282e094a0bfd9d8">LWS_CALLBACK_CLOSED</a>                                     =  4,</div><div class="line"><a name="l00721"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a838b18d255c1b94a533287ba302a2eba">  721</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a838b18d255c1b94a533287ba302a2eba">LWS_CALLBACK_CLOSED_HTTP</a>                                =  5,</div><div class="line"><a name="l00723"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a492c1b1c0ac0ed980042ee732fe2990c">  723</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a492c1b1c0ac0ed980042ee732fe2990c">LWS_CALLBACK_RECEIVE</a>                                    =  6,</div><div class="line"><a name="l00727"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2db02fc6e1c17ab62b52109d1aa9d738">  727</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2db02fc6e1c17ab62b52109d1aa9d738">LWS_CALLBACK_RECEIVE_PONG</a>                               =  7,</div><div class="line"><a name="l00729"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7abbbe7a0a67c5866ca9109d46823fc5b1">  729</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7abbbe7a0a67c5866ca9109d46823fc5b1">LWS_CALLBACK_CLIENT_RECEIVE</a>                             =  8,</div><div class="line"><a name="l00732"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a136a7cec11c3afd13245623bd84e76c9">  732</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a136a7cec11c3afd13245623bd84e76c9">LWS_CALLBACK_CLIENT_RECEIVE_PONG</a>                        =  9,</div><div class="line"><a name="l00734"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8e8b2e6dbeac76d8d126947d2166a514">  734</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8e8b2e6dbeac76d8d126947d2166a514">LWS_CALLBACK_CLIENT_WRITEABLE</a>                           = 10,</div><div class="line"><a name="l00742"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7ec8e2e9557ee02a4fc9f7dec7e2babc">  742</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7ec8e2e9557ee02a4fc9f7dec7e2babc">LWS_CALLBACK_SERVER_WRITEABLE</a>                           = 11,</div><div class="line"><a name="l00744"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae8d1de0bb56e03aa58cb4d44b18edd2e">  744</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae8d1de0bb56e03aa58cb4d44b18edd2e">LWS_CALLBACK_HTTP</a>                                       = 12,</div><div class="line"><a name="l00758"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac4c68e00efcf1ff7bda7ada462aff8ae">  758</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac4c68e00efcf1ff7bda7ada462aff8ae">LWS_CALLBACK_HTTP_BODY</a>                                  = 13,</div><div class="line"><a name="l00761"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2fce9a8608220f32abbf1422a5498804">  761</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2fce9a8608220f32abbf1422a5498804">LWS_CALLBACK_HTTP_BODY_COMPLETION</a>                       = 14,</div><div class="line"><a name="l00763"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa627548e1296e654fcfab463ec3c9587">  763</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa627548e1296e654fcfab463ec3c9587">LWS_CALLBACK_HTTP_FILE_COMPLETION</a>                       = 15,</div><div class="line"><a name="l00765"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afedadfb3cde37a8ea4c84ed535f26d09">  765</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afedadfb3cde37a8ea4c84ed535f26d09">LWS_CALLBACK_HTTP_WRITEABLE</a>                             = 16,</div><div class="line"><a name="l00767"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a026502768778b8d79d62dd0fe4375fc6">  767</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a026502768778b8d79d62dd0fe4375fc6">LWS_CALLBACK_FILTER_NETWORK_CONNECTION</a>                  = 17,</div><div class="line"><a name="l00778"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a75199176c82c1a56e4a6bbf1cc30c12c">  778</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a75199176c82c1a56e4a6bbf1cc30c12c">LWS_CALLBACK_FILTER_HTTP_CONNECTION</a>                     = 18,</div><div class="line"><a name="l00790"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae9734e1d7af2abf291665ce9e4a728d3">  790</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae9734e1d7af2abf291665ce9e4a728d3">LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED</a>             = 19,</div><div class="line"><a name="l00798"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7accd8753672d319a30b4b4c2fb775e84d">  798</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7accd8753672d319a30b4b4c2fb775e84d">LWS_CALLBACK_FILTER_PROTOCOL_CONNECTION</a>                 = 20,</div><div class="line"><a name="l00810"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae4986291b7a810fe290851d73bebeb1c">  810</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae4986291b7a810fe290851d73bebeb1c">LWS_CALLBACK_OPENSSL_LOAD_EXTRA_CLIENT_VERIFY_CERTS</a>     = 21,</div><div class="line"><a name="l00817"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a06006e98d27e1e884364d88317f83493">  817</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a06006e98d27e1e884364d88317f83493">LWS_CALLBACK_OPENSSL_LOAD_EXTRA_SERVER_VERIFY_CERTS</a>     = 22,</div><div class="line"><a name="l00823"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae5ad65d779b7eab32ab67ceff91a3bac">  823</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae5ad65d779b7eab32ab67ceff91a3bac">LWS_CALLBACK_OPENSSL_PERFORM_CLIENT_CERT_VERIFICATION</a>   = 23,</div><div class="line"><a name="l00841"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a909cc2a7018864b0b71abacc4058fd8f">  841</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a909cc2a7018864b0b71abacc4058fd8f">LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER</a>             = 24,</div><div class="line"><a name="l00865"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a390da3639296660a78cc1a5dcb19037e">  865</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a390da3639296660a78cc1a5dcb19037e">LWS_CALLBACK_CONFIRM_EXTENSION_OKAY</a>                     = 25,</div><div class="line"><a name="l00876"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a1ce5b22039ca37ee224d00047596ea46">  876</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a1ce5b22039ca37ee224d00047596ea46">LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED</a>         = 26,</div><div class="line"><a name="l00885"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ad5d34583e3556e153eda91620b48cc49">  885</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ad5d34583e3556e153eda91620b48cc49">LWS_CALLBACK_PROTOCOL_INIT</a>                              = 27,</div><div class="line"><a name="l00888"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a54269ca88508e6efd3afdb9d360a9caa">  888</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a54269ca88508e6efd3afdb9d360a9caa">LWS_CALLBACK_PROTOCOL_DESTROY</a>                           = 28,</div><div class="line"><a name="l00893"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afd8fd77a1cc9405fcb4f26915d7f2d01">  893</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afd8fd77a1cc9405fcb4f26915d7f2d01">LWS_CALLBACK_WSI_CREATE</a>                                 = 29,</div><div class="line"><a name="l00895"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aca834dc035b7f7486f9ce40fde54fe9e">  895</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aca834dc035b7f7486f9ce40fde54fe9e">LWS_CALLBACK_WSI_DESTROY</a>                                = 30,</div><div class="line"><a name="l00897"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7adfb41c92e2522712207ef7f2462b5e34">  897</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7adfb41c92e2522712207ef7f2462b5e34">LWS_CALLBACK_GET_THREAD_ID</a>                              = 31,</div><div class="line"><a name="l00902"></a><span class="lineno">  902</span>&#160;        <span class="comment">/* external poll() management support */</span></div><div class="line"><a name="l00903"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ab69783a9fbf2ca71ad70706bda77b412">  903</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ab69783a9fbf2ca71ad70706bda77b412">LWS_CALLBACK_ADD_POLL_FD</a>                                = 32,</div><div class="line"><a name="l00919"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a1df60f314710236f9b53efbf468da768">  919</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a1df60f314710236f9b53efbf468da768">LWS_CALLBACK_DEL_POLL_FD</a>                                = 33,</div><div class="line"><a name="l00925"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa87d2e82fffa42c3680c7403ef94216e">  925</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa87d2e82fffa42c3680c7403ef94216e">LWS_CALLBACK_CHANGE_MODE_POLL_FD</a>                        = 34,</div><div class="line"><a name="l00933"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8909732521d379179003d97ab7a05428">  933</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8909732521d379179003d97ab7a05428">LWS_CALLBACK_LOCK_POLL</a>                                  = 35,</div><div class="line"><a name="l00945"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a0e9e3dd667c0c42cdbe1a3d921f4fd79">  945</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a0e9e3dd667c0c42cdbe1a3d921f4fd79">LWS_CALLBACK_UNLOCK_POLL</a>                                = 36,</div><div class="line"><a name="l00948"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa46f705dcf97502e95627ffde614f98b">  948</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa46f705dcf97502e95627ffde614f98b">LWS_CALLBACK_OPENSSL_CONTEXT_REQUIRES_PRIVATE_KEY</a>       = 37,</div><div class="line"><a name="l00956"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac3fc5bbb55e69f90396526287ee84a51">  956</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac3fc5bbb55e69f90396526287ee84a51">LWS_CALLBACK_WS_PEER_INITIATED_CLOSE</a>                    = 38,</div><div class="line"><a name="l00965"></a><span class="lineno">  965</span>&#160;        LWS_CALLBACK_WS_EXT_DEFAULTS                            = 39,</div><div class="line"><a name="l00968"></a><span class="lineno">  968</span>&#160;        LWS_CALLBACK_CGI                                        = 40,</div><div class="line"><a name="l00970"></a><span class="lineno">  970</span>&#160;        LWS_CALLBACK_CGI_TERMINATED                             = 41,</div><div class="line"><a name="l00972"></a><span class="lineno">  972</span>&#160;        LWS_CALLBACK_CGI_STDIN_DATA                             = 42,</div><div class="line"><a name="l00974"></a><span class="lineno">  974</span>&#160;        LWS_CALLBACK_CGI_STDIN_COMPLETED                        = 43,</div><div class="line"><a name="l00976"></a><span class="lineno">  976</span>&#160;        LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP                    = 44,</div><div class="line"><a name="l00978"></a><span class="lineno">  978</span>&#160;        LWS_CALLBACK_CLOSED_CLIENT_HTTP                         = 45,</div><div class="line"><a name="l00980"></a><span class="lineno">  980</span>&#160;        LWS_CALLBACK_RECEIVE_CLIENT_HTTP                        = 46,</div><div class="line"><a name="l00982"></a><span class="lineno">  982</span>&#160;        LWS_CALLBACK_COMPLETED_CLIENT_HTTP                      = 47,</div><div class="line"><a name="l00984"></a><span class="lineno">  984</span>&#160;        LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ                   = 48,</div><div class="line"><a name="l00986"></a><span class="lineno">  986</span>&#160;        LWS_CALLBACK_HTTP_BIND_PROTOCOL                         = 49,</div><div class="line"><a name="l00988"></a><span class="lineno">  988</span>&#160;        LWS_CALLBACK_HTTP_DROP_PROTOCOL                         = 50,</div><div class="line"><a name="l00990"></a><span class="lineno">  990</span>&#160;        LWS_CALLBACK_CHECK_ACCESS_RIGHTS                        = 51,</div><div class="line"><a name="l00992"></a><span class="lineno">  992</span>&#160;        LWS_CALLBACK_PROCESS_HTML                               = 52,</div><div class="line"><a name="l00994"></a><span class="lineno">  994</span>&#160;        LWS_CALLBACK_ADD_HEADERS                                = 53,</div><div class="line"><a name="l00996"></a><span class="lineno">  996</span>&#160;        LWS_CALLBACK_SESSION_INFO                               = 54,</div><div class="line"><a name="l00999"></a><span class="lineno">  999</span>&#160;        LWS_CALLBACK_GS_EVENT                                   = 55,</div><div class="line"><a name="l01001"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa5cc921b7697743017a533822a3d556a"> 1001</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa5cc921b7697743017a533822a3d556a">LWS_CALLBACK_HTTP_PMO</a>                                   = 56,</div><div class="line"><a name="l01006"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aeb0cec65ec82a713cd01e9ca9aeeb5e6"> 1006</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aeb0cec65ec82a713cd01e9ca9aeeb5e6">LWS_CALLBACK_CLIENT_HTTP_WRITEABLE</a>                      = 57,</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160;        <span class="comment">/****** add new things just above ---^ ******/</span></div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160;</div><div class="line"><a name="l01018"></a><span class="lineno"><a class="line" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a982579753e70e59a9ea13ce628ac891a"> 1018</a></span>&#160;        <a class="code" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a982579753e70e59a9ea13ce628ac891a">LWS_CALLBACK_USER</a> = 1000,</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160;};</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160;<span class="keyword">typedef</span> <span class="keywordtype">int</span></div><div class="line"><a name="l01040"></a><span class="lineno"><a class="line" href="group__usercb.html#gad4fcb82e68d60ffacca61a3f783a0a2f"> 1040</a></span>&#160;<a class="code" href="group__usercb.html#gad4fcb82e68d60ffacca61a3f783a0a2f">lws_callback_function</a>(<span class="keyword">struct</span> lws *wsi, <span class="keyword">enum</span> <a class="code" href="group__usercb.html#gad62860e19975ba4c4af401c3cdb6abf7">lws_callback_reasons</a> reason,</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;                    <span class="keywordtype">void</span> *user, <span class="keywordtype">void</span> *in, <span class="keywordtype">size_t</span> len);</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160;</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160;</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160;<span class="comment"> * NOTE: These public enums are part of the abi.  If you want to add one,</span></div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160;<span class="comment"> * add it at where specified so existing users are unaffected.</span></div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160;<span class="keyword">enum</span> lws_extension_callback_reasons {</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;        LWS_EXT_CB_SERVER_CONTEXT_CONSTRUCT             =  0,</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;        LWS_EXT_CB_CLIENT_CONTEXT_CONSTRUCT             =  1,</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160;        LWS_EXT_CB_SERVER_CONTEXT_DESTRUCT              =  2,</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160;        LWS_EXT_CB_CLIENT_CONTEXT_DESTRUCT              =  3,</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;        LWS_EXT_CB_CONSTRUCT                            =  4,</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160;        LWS_EXT_CB_CLIENT_CONSTRUCT                     =  5,</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160;        LWS_EXT_CB_CHECK_OK_TO_REALLY_CLOSE             =  6,</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;        LWS_EXT_CB_CHECK_OK_TO_PROPOSE_EXTENSION        =  7,</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;        LWS_EXT_CB_DESTROY                              =  8,</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;        LWS_EXT_CB_DESTROY_ANY_WSI_CLOSING              =  9,</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;        LWS_EXT_CB_ANY_WSI_ESTABLISHED                  = 10,</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160;        LWS_EXT_CB_PACKET_RX_PREPARSE                   = 11,</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;        LWS_EXT_CB_PACKET_TX_PRESEND                    = 12,</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;        LWS_EXT_CB_PACKET_TX_DO_SEND                    = 13,</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;        LWS_EXT_CB_HANDSHAKE_REPLY_TX                   = 14,</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;        LWS_EXT_CB_FLUSH_PENDING_TX                     = 15,</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160;        LWS_EXT_CB_EXTENDED_PAYLOAD_RX                  = 16,</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160;        LWS_EXT_CB_CAN_PROXY_CLIENT_CONNECTION          = 17,</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160;        LWS_EXT_CB_1HZ                                  = 18,</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160;        LWS_EXT_CB_REQUEST_ON_WRITEABLE                 = 19,</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160;        LWS_EXT_CB_IS_WRITEABLE                         = 20,</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160;        LWS_EXT_CB_PAYLOAD_TX                           = 21,</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;        LWS_EXT_CB_PAYLOAD_RX                           = 22,</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;        LWS_EXT_CB_OPTION_DEFAULT                       = 23,</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160;        LWS_EXT_CB_OPTION_SET                           = 24,</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160;        LWS_EXT_CB_OPTION_CONFIRM                       = 25,</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160;        LWS_EXT_CB_NAMED_OPTION_SET                     = 26,</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160;</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160;        <span class="comment">/****** add new things just above ---^ ******/</span></div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;};</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160;</div><div class="line"><a name="l01092"></a><span class="lineno"><a class="line" href="group__extensions.html#gacc9f55936dc165257a2e1f7d47bce89e"> 1092</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="group__extensions.html#gacc9f55936dc165257a2e1f7d47bce89e">lws_ext_options_types</a> {</div><div class="line"><a name="l01093"></a><span class="lineno"><a class="line" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89eaabcf56c456c1ff6e81dc82586a16f14c"> 1093</a></span>&#160;        <a class="code" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89eaabcf56c456c1ff6e81dc82586a16f14c">EXTARG_NONE</a>, </div><div class="line"><a name="l01094"></a><span class="lineno"><a class="line" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea1c86adf924c8786a12bee9687094673e"> 1094</a></span>&#160;        <a class="code" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea1c86adf924c8786a12bee9687094673e">EXTARG_DEC</a>,  </div><div class="line"><a name="l01095"></a><span class="lineno"><a class="line" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea5265abe3e1c3f64412f2affe7bffd880"> 1095</a></span>&#160;        <a class="code" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea5265abe3e1c3f64412f2affe7bffd880">EXTARG_OPT_DEC</a> </div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160;        <span class="comment">/* Add new things just above here ---^</span></div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;<span class="comment">         * This is part of the ABI, don&#39;t needlessly break compatibility */</span></div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160;};</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160;</div><div class="line"><a name="l01105"></a><span class="lineno"><a class="line" href="structlws__ext__options.html"> 1105</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__ext__options.html">lws_ext_options</a> {</div><div class="line"><a name="l01106"></a><span class="lineno"><a class="line" href="structlws__ext__options.html#a1769e4a9805bbdda227821e9578ddc7e"> 1106</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__ext__options.html#a1769e4a9805bbdda227821e9578ddc7e">name</a>; </div><div class="line"><a name="l01107"></a><span class="lineno"><a class="line" href="structlws__ext__options.html#a7c4dbd62dbeba63a9d50d2306bd1cc61"> 1107</a></span>&#160;        <span class="keyword">enum</span> <a class="code" href="group__extensions.html#gacc9f55936dc165257a2e1f7d47bce89e">lws_ext_options_types</a> type; </div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160;        <span class="comment">/* Add new things just above here ---^</span></div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160;<span class="comment">         * This is part of the ABI, don&#39;t needlessly break compatibility */</span></div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160;};</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160;</div><div class="line"><a name="l01114"></a><span class="lineno"><a class="line" href="structlws__ext__option__arg.html"> 1114</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__ext__option__arg.html">lws_ext_option_arg</a> {</div><div class="line"><a name="l01115"></a><span class="lineno"><a class="line" href="structlws__ext__option__arg.html#a0a320c56b79271b8f059eeaad9423ac9"> 1115</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__ext__option__arg.html#a0a320c56b79271b8f059eeaad9423ac9">option_name</a>; </div><div class="line"><a name="l01116"></a><span class="lineno"><a class="line" href="structlws__ext__option__arg.html#af57fffcfa253dfa8d98681ac1fb1785f"> 1116</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__ext__option__arg.html#af57fffcfa253dfa8d98681ac1fb1785f">option_index</a>; </div><div class="line"><a name="l01117"></a><span class="lineno"><a class="line" href="structlws__ext__option__arg.html#a0b1f7b30c3ceaf5f1bf9d105c24568d1"> 1117</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__ext__option__arg.html#a0b1f7b30c3ceaf5f1bf9d105c24568d1">start</a>; </div><div class="line"><a name="l01118"></a><span class="lineno"><a class="line" href="structlws__ext__option__arg.html#af37f0b6caa7735af51a1ac12b68d5bc5"> 1118</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__ext__option__arg.html#af37f0b6caa7735af51a1ac12b68d5bc5">len</a>; </div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160;};</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160;</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160;<span class="keyword">typedef</span> <span class="keywordtype">int</span></div><div class="line"><a name="l01182"></a><span class="lineno"><a class="line" href="group__extensions.html#gaae7169b2cd346b34fa33d0250db2afd0"> 1182</a></span>&#160;<a class="code" href="group__extensions.html#gaae7169b2cd346b34fa33d0250db2afd0">lws_extension_callback_function</a>(<span class="keyword">struct</span> lws_context *context,</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160;                              <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlws__extension.html">lws_extension</a> *ext, <span class="keyword">struct</span> lws *wsi,</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160;                              <span class="keyword">enum</span> lws_extension_callback_reasons reason,</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160;                              <span class="keywordtype">void</span> *user, <span class="keywordtype">void</span> *in, <span class="keywordtype">size_t</span> len);</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160;</div><div class="line"><a name="l01188"></a><span class="lineno"><a class="line" href="structlws__extension.html"> 1188</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__extension.html">lws_extension</a> {</div><div class="line"><a name="l01189"></a><span class="lineno"><a class="line" href="structlws__extension.html#a1e5018c883d85176f5c2152176843f9e"> 1189</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__extension.html#a1e5018c883d85176f5c2152176843f9e">name</a>; </div><div class="line"><a name="l01190"></a><span class="lineno"><a class="line" href="structlws__extension.html#afa21f3b3c8c2c9212a276c52b680c3af"> 1190</a></span>&#160;        <a class="code" href="group__extensions.html#gaae7169b2cd346b34fa33d0250db2afd0">lws_extension_callback_function</a> *<a class="code" href="structlws__extension.html#afa21f3b3c8c2c9212a276c52b680c3af">callback</a>; </div><div class="line"><a name="l01191"></a><span class="lineno"><a class="line" href="structlws__extension.html#a36b06c213aedb02bf9a402651751855b"> 1191</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__extension.html#a36b06c213aedb02bf9a402651751855b">client_offer</a>; </div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160;        <span class="comment">/* Add new things just above here ---^</span></div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160;<span class="comment">         * This is part of the ABI, don&#39;t needlessly break compatibility */</span></div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160;};</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160;</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;<a class="code" href="group__extensions.html#gae0e24e1768f83a7fb07896ce975704b9">lws_set_extension_option</a>(<span class="keyword">struct</span> lws *wsi, <span class="keyword">const</span> <span class="keywordtype">char</span> *ext_name,</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160;                         <span class="keyword">const</span> <span class="keywordtype">char</span> *opt_name, <span class="keyword">const</span> <span class="keywordtype">char</span> *opt_val);</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160;</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160;<span class="preprocessor">#ifndef LWS_NO_EXTENSIONS</span></div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160;<span class="comment">/* lws_get_internal_extensions() - DEPRECATED</span></div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160;<span class="comment"> * \Deprecated There is no longer a set internal extensions table.  The table is provided</span></div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160;<span class="comment"> * by user code along with application-specific settings.  See the test</span></div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160;<span class="comment"> * client and server for how to do.</span></div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160;<span class="keyword">static</span> LWS_INLINE LWS_WARN_DEPRECATED <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__extension.html">lws_extension</a> *</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160;lws_get_internal_extensions() { <span class="keywordflow">return</span> NULL; }</div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160;</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160;<a class="code" href="group__extensions.html#ga6fb3e2c3dfb9d64dc87026a4e99c128b">lws_ext_parse_options</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlws__extension.html">lws_extension</a> *ext, <span class="keyword">struct</span> lws *wsi,</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160;                       <span class="keywordtype">void</span> *ext_user, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlws__ext__options.html">lws_ext_options</a> *opts,</div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160;                       <span class="keyword">const</span> <span class="keywordtype">char</span> *o, <span class="keywordtype">int</span> len);</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160;</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160;LWS_EXTERN</div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160;<span class="keywordtype">int</span> <a class="code" href="group__extensions.html#ga4cdbe42d872e21a448a947714d6c607e">lws_extension_callback_pm_deflate</a>(</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160;        <span class="keyword">struct</span> lws_context *context, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlws__extension.html">lws_extension</a> *ext,</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160;        <span class="keyword">struct</span> lws *wsi, <span class="keyword">enum</span> lws_extension_callback_reasons reason,</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160;        <span class="keywordtype">void</span> *user, <span class="keywordtype">void</span> *in, <span class="keywordtype">size_t</span> len);</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160;</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160;<span class="comment"> * The internal exts are part of the public abi</span></div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160;<span class="comment"> * If we add more extensions, publish the callback here  ------v</span></div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160;</div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160;</div><div class="line"><a name="l01278"></a><span class="lineno"><a class="line" href="structlws__protocols.html"> 1278</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__protocols.html">lws_protocols</a> {</div><div class="line"><a name="l01279"></a><span class="lineno"><a class="line" href="structlws__protocols.html#a0e63edb457a613c3fa4271e0a8f19624"> 1279</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__protocols.html#a0e63edb457a613c3fa4271e0a8f19624">name</a>;</div><div class="line"><a name="l01282"></a><span class="lineno"><a class="line" href="structlws__protocols.html#acabf94c1a9bfe7be0387fbb0e0c56b2d"> 1282</a></span>&#160;        <a class="code" href="group__usercb.html#gad4fcb82e68d60ffacca61a3f783a0a2f">lws_callback_function</a> *<a class="code" href="structlws__protocols.html#acabf94c1a9bfe7be0387fbb0e0c56b2d">callback</a>;</div><div class="line"><a name="l01286"></a><span class="lineno"><a class="line" href="structlws__protocols.html#a9bbd85f591ffb4259711cb5acbb05bea"> 1286</a></span>&#160;        <span class="keywordtype">size_t</span> <a class="code" href="structlws__protocols.html#a9bbd85f591ffb4259711cb5acbb05bea">per_session_data_size</a>;</div><div class="line"><a name="l01291"></a><span class="lineno"><a class="line" href="structlws__protocols.html#a0d1d4996d81b2f5e125bcec981e461c5"> 1291</a></span>&#160;        <span class="keywordtype">size_t</span> <a class="code" href="structlws__protocols.html#a0d1d4996d81b2f5e125bcec981e461c5">rx_buffer_size</a>;</div><div class="line"><a name="l01300"></a><span class="lineno"><a class="line" href="structlws__protocols.html#a6b632018590c2b1bbe43fbab6d5e6fac"> 1300</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structlws__protocols.html#a6b632018590c2b1bbe43fbab6d5e6fac">id</a>;</div><div class="line"><a name="l01307"></a><span class="lineno"><a class="line" href="structlws__protocols.html#a3cbd903ad076736ae934a54cae36580e"> 1307</a></span>&#160;        <span class="keywordtype">void</span> *<a class="code" href="structlws__protocols.html#a3cbd903ad076736ae934a54cae36580e">user</a>; </div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160;        <span class="comment">/* Add new things just above here ---^</span></div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160;<span class="comment">         * This is part of the ABI, don&#39;t needlessly break compatibility */</span></div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160;};</div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160;</div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160;<span class="keyword">struct </span>lws_vhost;</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160;</div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__protocols.html">lws_protocols</a> *</div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160;<a class="code" href="group__Protocols-and-Plugins.html#ga25754726d97c5f519d313e691a9fe29d">lws_vhost_name_to_protocol</a>(<span class="keyword">struct</span> lws_vhost *vh, <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__protocols.html#a0e63edb457a613c3fa4271e0a8f19624">name</a>);</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160;</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__protocols.html">lws_protocols</a> *</div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160;<a class="code" href="group__Protocols-and-Plugins.html#ga72ad550786ca7976463589d347e62112">lws_get_protocol</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160;</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__protocols.html">lws_protocols</a> *</div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160;<a class="code" href="group__Protocols-and-Plugins.html#ga8bbe5e65faca068845704bab911a5030">lws_protocol_get</a>(<span class="keyword">struct</span> lws *wsi) LWS_WARN_DEPRECATED;</div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160;</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span> *</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160;<a class="code" href="group__Protocols-and-Plugins.html#gaec0c0477288ff3f83aff38d357b883d1">lws_protocol_vh_priv_zalloc</a>(<span class="keyword">struct</span> lws_vhost *vhost, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlws__protocols.html">lws_protocols</a> *prot,</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160;                            <span class="keywordtype">int</span> size);</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160;</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span> *</div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160;<a class="code" href="group__Protocols-and-Plugins.html#gaf3be4243443baac0f8be1fcfb4d25129">lws_protocol_vh_priv_get</a>(<span class="keyword">struct</span> lws_vhost *vhost, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlws__protocols.html">lws_protocols</a> *prot);</div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160;</div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160;<a class="code" href="group__Protocols-and-Plugins.html#ga106b37ae9c247e84d191ab09441adc43">lws_finalize_startup</a>(<span class="keyword">struct</span> lws_context *context);</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160;</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160;<span class="preprocessor">#ifdef LWS_WITH_PLUGINS</span></div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160;</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160;<span class="comment">/* PLUGINS implies LIBUV */</span></div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160;</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160;<span class="preprocessor">#define LWS_PLUGIN_API_MAGIC 180</span></div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160;</div><div class="line"><a name="l01387"></a><span class="lineno"><a class="line" href="structlws__plugin__capability.html"> 1387</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__plugin__capability.html">lws_plugin_capability</a> {</div><div class="line"><a name="l01388"></a><span class="lineno"><a class="line" href="structlws__plugin__capability.html#a523c7cde6f15bba345f56493dcf6b32a"> 1388</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structlws__plugin__capability.html#a523c7cde6f15bba345f56493dcf6b32a">api_magic</a>; </div><div class="line"><a name="l01389"></a><span class="lineno"><a class="line" href="structlws__plugin__capability.html#a6a4d9d01e770f378ddadc77b37522033"> 1389</a></span>&#160;        <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__protocols.html">lws_protocols</a> *<a class="code" href="structlws__plugin__capability.html#a6a4d9d01e770f378ddadc77b37522033">protocols</a>; </div><div class="line"><a name="l01390"></a><span class="lineno"><a class="line" href="structlws__plugin__capability.html#ae38f7cf1246b9ca3af3cbf9d46b7090f"> 1390</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__plugin__capability.html#ae38f7cf1246b9ca3af3cbf9d46b7090f">count_protocols</a>; </div><div class="line"><a name="l01391"></a><span class="lineno"><a class="line" href="structlws__plugin__capability.html#a7936f0eb93d79dea76b903d0f8a5f623"> 1391</a></span>&#160;        <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__extension.html">lws_extension</a> *<a class="code" href="structlws__plugin__capability.html#a7936f0eb93d79dea76b903d0f8a5f623">extensions</a>; </div><div class="line"><a name="l01392"></a><span class="lineno"><a class="line" href="structlws__plugin__capability.html#abcf51db969522fdda9aaf902e65739d3"> 1392</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__plugin__capability.html#abcf51db969522fdda9aaf902e65739d3">count_extensions</a>; </div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160;};</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160;</div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160;<span class="keyword">typedef</span> int (*lws_plugin_init_func)(<span class="keyword">struct </span>lws_context *,</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160;                                    <span class="keyword">struct </span><a class="code" href="structlws__plugin__capability.html">lws_plugin_capability</a> *);</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160;<span class="keyword">typedef</span> int (*lws_plugin_destroy_func)(<span class="keyword">struct </span>lws_context *);</div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160;</div><div class="line"><a name="l01400"></a><span class="lineno"><a class="line" href="structlws__plugin.html"> 1400</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__plugin.html">lws_plugin</a> {</div><div class="line"><a name="l01401"></a><span class="lineno"><a class="line" href="structlws__plugin.html#a65dffd68fd267ce17b988790d1d35f22"> 1401</a></span>&#160;        <span class="keyword">struct </span><a class="code" href="structlws__plugin.html">lws_plugin</a> *<a class="code" href="structlws__plugin.html#a65dffd68fd267ce17b988790d1d35f22">list</a>; </div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160;<span class="preprocessor">#if (UV_VERSION_MAJOR &gt; 0)</span></div><div class="line"><a name="l01403"></a><span class="lineno"><a class="line" href="structlws__plugin.html#af9e1042dc1de5b9d202c2f5fd1834330"> 1403</a></span>&#160;        uv_lib_t <a class="code" href="structlws__plugin.html#af9e1042dc1de5b9d202c2f5fd1834330">lib</a>; </div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01405"></a><span class="lineno"><a class="line" href="structlws__plugin.html#a4ef37a43653715b6c69cbf8a7be747f4"> 1405</a></span>&#160;        <span class="keywordtype">void</span> *<a class="code" href="structlws__plugin.html#a4ef37a43653715b6c69cbf8a7be747f4">l</a>; </div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01407"></a><span class="lineno"><a class="line" href="structlws__plugin.html#af4ac8fcb79e10e0c2d960e1804d98105"> 1407</a></span>&#160;        <span class="keywordtype">char</span> <a class="code" href="structlws__plugin.html#af4ac8fcb79e10e0c2d960e1804d98105">name</a>[64]; </div><div class="line"><a name="l01408"></a><span class="lineno"><a class="line" href="structlws__plugin.html#ac7f1fdfe8cf8a21f8ee9720c21934a3f"> 1408</a></span>&#160;        <span class="keyword">struct </span><a class="code" href="structlws__plugin__capability.html">lws_plugin_capability</a> caps; </div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160;};</div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160;</div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160;</div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160;</div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160;</div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160;</div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160;<span class="preprocessor">#define LWSGS_EMAIL_CONTENT_SIZE 16384</span></div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160;</div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160;<span class="comment">/* SHA-1 binary and hexified versions */</span></div><div class="line"><a name="l01431"></a><span class="lineno"><a class="line" href="structlwsgw__hash__bin.html#ac92f50d9471058525d110597a4e0de6b"> 1431</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>{ <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> bin[20]; } <a class="code" href="structlwsgw__hash__bin.html">lwsgw_hash_bin</a>;</div><div class="line"><a name="l01433"></a><span class="lineno"><a class="line" href="structlwsgw__hash.html#a29435f5cf78747d4257695b0f141d164"> 1433</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>{ <span class="keywordtype">char</span> <span class="keywordtype">id</span>[41];  } <a class="code" href="structlwsgw__hash.html">lwsgw_hash</a>;</div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160;</div><div class="line"><a name="l01436"></a><span class="lineno"><a class="line" href="group__generic-sessions.html#ga7c2dc7bfb4ccb91c5d771f9e9ea237e1"> 1436</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="group__generic-sessions.html#ga7c2dc7bfb4ccb91c5d771f9e9ea237e1">lwsgs_auth_bits</a> {</div><div class="line"><a name="l01437"></a><span class="lineno"><a class="line" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a81e63075115dedd150265d81b8f7fa57"> 1437</a></span>&#160;        <a class="code" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a81e63075115dedd150265d81b8f7fa57">LWSGS_AUTH_LOGGED_IN</a> = 1, </div><div class="line"><a name="l01438"></a><span class="lineno"><a class="line" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a0657a9e846814781b128c397fe4b10bf"> 1438</a></span>&#160;        <a class="code" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a0657a9e846814781b128c397fe4b10bf">LWSGS_AUTH_ADMIN</a> = 2,   </div><div class="line"><a name="l01439"></a><span class="lineno"><a class="line" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a5a607e4668d20cadada62c4b8007f887"> 1439</a></span>&#160;        <a class="code" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a5a607e4668d20cadada62c4b8007f887">LWSGS_AUTH_VERIFIED</a> = 4,  </div><div class="line"><a name="l01440"></a><span class="lineno"><a class="line" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a2cd8fb86e3b85c106e7711c03f0ddd0a"> 1440</a></span>&#160;        <a class="code" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a2cd8fb86e3b85c106e7711c03f0ddd0a">LWSGS_AUTH_FORGOT_FLOW</a> = 8,     </div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160;};</div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160;</div><div class="line"><a name="l01444"></a><span class="lineno"><a class="line" href="structlws__session__info.html"> 1444</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__session__info.html">lws_session_info</a> {</div><div class="line"><a name="l01445"></a><span class="lineno"><a class="line" href="structlws__session__info.html#a3d57a70b6e7181d95a8bec429b1a7697"> 1445</a></span>&#160;        <span class="keywordtype">char</span> username[32]; </div><div class="line"><a name="l01446"></a><span class="lineno"><a class="line" href="structlws__session__info.html#a94b813cfc6b0da4b182659de30038ad3"> 1446</a></span>&#160;        <span class="keywordtype">char</span> email[100]; </div><div class="line"><a name="l01447"></a><span class="lineno"><a class="line" href="structlws__session__info.html#a53eed02325e8717a53297391e3e98fac"> 1447</a></span>&#160;        <span class="keywordtype">char</span> ip[72]; </div><div class="line"><a name="l01448"></a><span class="lineno"><a class="line" href="structlws__session__info.html#afb924864b70f40372920688a5c1c895e"> 1448</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structlws__session__info.html#afb924864b70f40372920688a5c1c895e">mask</a>; </div><div class="line"><a name="l01450"></a><span class="lineno"><a class="line" href="structlws__session__info.html#a4353b5dd19400b2b15edfd7cee1e4cd5"> 1450</a></span>&#160;        <span class="keywordtype">char</span> session[42]; </div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160;};</div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160;</div><div class="line"><a name="l01454"></a><span class="lineno"><a class="line" href="group__generic-sessions.html#gaa93946b3d921072209d5cd8cdfa5332e"> 1454</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="group__generic-sessions.html#gaa93946b3d921072209d5cd8cdfa5332e">lws_gs_event</a> {</div><div class="line"><a name="l01455"></a><span class="lineno"><a class="line" href="group__generic-sessions.html#ggaa93946b3d921072209d5cd8cdfa5332ea596010a165bf13473c5eea3a34cd4308"> 1455</a></span>&#160;        <a class="code" href="group__generic-sessions.html#ggaa93946b3d921072209d5cd8cdfa5332ea596010a165bf13473c5eea3a34cd4308">LWSGSE_CREATED</a>, </div><div class="line"><a name="l01456"></a><span class="lineno"><a class="line" href="group__generic-sessions.html#ggaa93946b3d921072209d5cd8cdfa5332ead908cdc5689c5d22c9d3c8934e94dcde"> 1456</a></span>&#160;        <a class="code" href="group__generic-sessions.html#ggaa93946b3d921072209d5cd8cdfa5332ead908cdc5689c5d22c9d3c8934e94dcde">LWSGSE_DELETED</a>  </div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160;};</div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160;</div><div class="line"><a name="l01460"></a><span class="lineno"><a class="line" href="structlws__gs__event__args.html"> 1460</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__gs__event__args.html">lws_gs_event_args</a> {</div><div class="line"><a name="l01461"></a><span class="lineno"><a class="line" href="structlws__gs__event__args.html#a477274f8ca22ba7411b9285b9dc8dd06"> 1461</a></span>&#160;        <span class="keyword">enum</span> <a class="code" href="group__generic-sessions.html#gaa93946b3d921072209d5cd8cdfa5332e">lws_gs_event</a> event; </div><div class="line"><a name="l01462"></a><span class="lineno"><a class="line" href="structlws__gs__event__args.html#a2bec693d8a43730d487004a44326178b"> 1462</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__gs__event__args.html#a2bec693d8a43730d487004a44326178b">username</a>; </div><div class="line"><a name="l01463"></a><span class="lineno"><a class="line" href="structlws__gs__event__args.html#acd17e4f9f91f7f9a8f0fbf0744a3a463"> 1463</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__gs__event__args.html#acd17e4f9f91f7f9a8f0fbf0744a3a463">email</a>; </div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160;};</div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160;</div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160;</div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160;</div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160;</div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160;<span class="comment"> * NOTE: These public enums are part of the abi.  If you want to add one,</span></div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160;<span class="comment"> * add it at where specified so existing users are unaffected.</span></div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160;</div><div class="line"><a name="l01490"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#ga41c2d763f78cc248df3b9f8645dbd2a5"> 1490</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="group__context-and-vhost.html#ga41c2d763f78cc248df3b9f8645dbd2a5">lws_context_options</a> {</div><div class="line"><a name="l01491"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a274ed462a1a9239eb6ddf9007f5b7092"> 1491</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a274ed462a1a9239eb6ddf9007f5b7092">LWS_SERVER_OPTION_REQUIRE_VALID_OPENSSL_CLIENT_CERT</a>     = (1 &lt;&lt; 1) |</div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160;                                                                  (1 &lt;&lt; 12),</div><div class="line"><a name="l01496"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a6582c985ee0ceaadc1d277030eae2d7c"> 1496</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a6582c985ee0ceaadc1d277030eae2d7c">LWS_SERVER_OPTION_SKIP_SERVER_CANONICAL_NAME</a>            = (1 &lt;&lt; 2),</div><div class="line"><a name="l01498"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a1cc4562d05cba52a6dfa0697a65ade0d"> 1498</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a1cc4562d05cba52a6dfa0697a65ade0d">LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT</a>             = (1 &lt;&lt; 3) |</div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160;                                                                  (1 &lt;&lt; 12),</div><div class="line"><a name="l01503"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a273d9975675130de0c6dc937dde7c8a6"> 1503</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a273d9975675130de0c6dc937dde7c8a6">LWS_SERVER_OPTION_LIBEV</a>                                 = (1 &lt;&lt; 4),</div><div class="line"><a name="l01505"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a34ab36e68c0d593b6f19b8d5ef1240a9"> 1505</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a34ab36e68c0d593b6f19b8d5ef1240a9">LWS_SERVER_OPTION_DISABLE_IPV6</a>                          = (1 &lt;&lt; 5),</div><div class="line"><a name="l01507"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a4933347a821e73c3f1e13fb6bfc7ad93"> 1507</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a4933347a821e73c3f1e13fb6bfc7ad93">LWS_SERVER_OPTION_DISABLE_OS_CA_CERTS</a>                   = (1 &lt;&lt; 6),</div><div class="line"><a name="l01510"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5ac56a8a6590e74a8016d0fae09fb404fc"> 1510</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5ac56a8a6590e74a8016d0fae09fb404fc">LWS_SERVER_OPTION_PEER_CERT_NOT_REQUIRED</a>                = (1 &lt;&lt; 7),</div><div class="line"><a name="l01512"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aa0158b4e85420811e6b0f1378c6ded0f"> 1512</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aa0158b4e85420811e6b0f1378c6ded0f">LWS_SERVER_OPTION_VALIDATE_UTF8</a>                         = (1 &lt;&lt; 8),</div><div class="line"><a name="l01514"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a1b2f8bde0f62adc7ebe81b2043f34c0c"> 1514</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a1b2f8bde0f62adc7ebe81b2043f34c0c">LWS_SERVER_OPTION_SSL_ECDH</a>                              = (1 &lt;&lt; 9) |</div><div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160;                                                                  (1 &lt;&lt; 12),</div><div class="line"><a name="l01517"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aff121db04a10cf8b2c5df9d4f2b89f1e"> 1517</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aff121db04a10cf8b2c5df9d4f2b89f1e">LWS_SERVER_OPTION_LIBUV</a>                                 = (1 &lt;&lt; 10),</div><div class="line"><a name="l01519"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a4832187186c4d130c68051214cd42ada"> 1519</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a4832187186c4d130c68051214cd42ada">LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS</a>                = (1 &lt;&lt; 11) |</div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160;                                                                  (1 &lt;&lt; 12),</div><div class="line"><a name="l01523"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a7fed6a527c8d5e0acac1b4179644583a"> 1523</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a7fed6a527c8d5e0acac1b4179644583a">LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT</a>                    = (1 &lt;&lt; 12),</div><div class="line"><a name="l01525"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5accc9d0d11d1124a21659586164b0962e"> 1525</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5accc9d0d11d1124a21659586164b0962e">LWS_SERVER_OPTION_EXPLICIT_VHOSTS</a>                       = (1 &lt;&lt; 13),</div><div class="line"><a name="l01528"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a9637e9001d8c8b2521086bcafbd8a941"> 1528</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a9637e9001d8c8b2521086bcafbd8a941">LWS_SERVER_OPTION_UNIX_SOCK</a>                             = (1 &lt;&lt; 14),</div><div class="line"><a name="l01530"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5ac962efd35abf6c402f9fb14aa14f5016"> 1530</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5ac962efd35abf6c402f9fb14aa14f5016">LWS_SERVER_OPTION_STS</a>                                   = (1 &lt;&lt; 15),</div><div class="line"><a name="l01533"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5af62887536e25e053e68741006dba46d8"> 1533</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5af62887536e25e053e68741006dba46d8">LWS_SERVER_OPTION_IPV6_V6ONLY_MODIFY</a>                    = (1 &lt;&lt; 16),</div><div class="line"><a name="l01535"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aca5d42820b65eac5618ec3f0bd8a1160"> 1535</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aca5d42820b65eac5618ec3f0bd8a1160">LWS_SERVER_OPTION_IPV6_V6ONLY_VALUE</a>                     = (1 &lt;&lt; 17),</div><div class="line"><a name="l01537"></a><span class="lineno"><a class="line" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a87a824b2e812f4c3e7f2c4a1ea4f8abd"> 1537</a></span>&#160;        <a class="code" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a87a824b2e812f4c3e7f2c4a1ea4f8abd">LWS_SERVER_OPTION_UV_NO_SIGSEGV_SIGFPE_SPIN</a>             = (1 &lt;&lt; 18),</div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160;        <span class="comment">/****** add new things just above ---^ ******/</span></div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160;};</div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160;</div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160;<span class="preprocessor">#define lws_check_opt(c, f) (((c) &amp; (f)) == (f))</span></div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160;</div><div class="line"><a name="l01558"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html"> 1558</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__context__creation__info.html">lws_context_creation_info</a> {</div><div class="line"><a name="l01559"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a424a5ce268d6903e42243be94487ab85"> 1559</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__context__creation__info.html#a424a5ce268d6903e42243be94487ab85">port</a>;</div><div class="line"><a name="l01564"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a75434932bb5df54665ea678eb8ac104a"> 1564</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__context__creation__info.html#a75434932bb5df54665ea678eb8ac104a">iface</a>;</div><div class="line"><a name="l01571"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#abb90ffb3e6d6db2db20f529d61bd9122"> 1571</a></span>&#160;        <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__protocols.html">lws_protocols</a> *<a class="code" href="structlws__context__creation__info.html#abb90ffb3e6d6db2db20f529d61bd9122">protocols</a>;</div><div class="line"><a name="l01575"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a4a3d1155fc52f5048b481884f6fb947c"> 1575</a></span>&#160;        <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__extension.html">lws_extension</a> *<a class="code" href="structlws__context__creation__info.html#a4a3d1155fc52f5048b481884f6fb947c">extensions</a>;</div><div class="line"><a name="l01578"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#ac8a75b7b259a3c3a5fbb4219a3f06c29"> 1578</a></span>&#160;        <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__token__limits.html">lws_token_limits</a> *<a class="code" href="structlws__context__creation__info.html#ac8a75b7b259a3c3a5fbb4219a3f06c29">token_limits</a>;</div><div class="line"><a name="l01581"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#af3fb447be15c4fcb01d3285a6678ab54"> 1581</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__context__creation__info.html#af3fb447be15c4fcb01d3285a6678ab54">ssl_private_key_password</a>;</div><div class="line"><a name="l01583"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#ac62b0f0e8e402412ba5011d15c244103"> 1583</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__context__creation__info.html#ac62b0f0e8e402412ba5011d15c244103">ssl_cert_filepath</a>;</div><div class="line"><a name="l01587"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#ab9ec8893e0f7843cf5d783d2f350ef14"> 1587</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__context__creation__info.html#ab9ec8893e0f7843cf5d783d2f350ef14">ssl_private_key_filepath</a>;</div><div class="line"><a name="l01593"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a4f8e65c3a059d3b586fafa9ef3282c29"> 1593</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__context__creation__info.html#a4f8e65c3a059d3b586fafa9ef3282c29">ssl_ca_filepath</a>;</div><div class="line"><a name="l01595"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a3e1516fd7fed26bfa77c0246ed26c2eb"> 1595</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__context__creation__info.html#a3e1516fd7fed26bfa77c0246ed26c2eb">ssl_cipher_list</a>;</div><div class="line"><a name="l01599"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#aef917c0b23976a264d2474901b4f5aa3"> 1599</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__context__creation__info.html#aef917c0b23976a264d2474901b4f5aa3">http_proxy_address</a>;</div><div class="line"><a name="l01602"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a7b59f2bdc869871e7bde232db94f5ca6"> 1602</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structlws__context__creation__info.html#a7b59f2bdc869871e7bde232db94f5ca6">http_proxy_port</a>;</div><div class="line"><a name="l01604"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a9c9d22437de92c197f3cee52912b2c03"> 1604</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__context__creation__info.html#a9c9d22437de92c197f3cee52912b2c03">gid</a>;</div><div class="line"><a name="l01606"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#ac105b4180008cb3e672d57beead8382e"> 1606</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__context__creation__info.html#ac105b4180008cb3e672d57beead8382e">uid</a>;</div><div class="line"><a name="l01608"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a9d3b17a25e1fbc772f21eb4959a82724"> 1608</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structlws__context__creation__info.html#a9d3b17a25e1fbc772f21eb4959a82724">options</a>;</div><div class="line"><a name="l01610"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a0e9d94cdfb893d777b4a4db81e7b5ac0"> 1610</a></span>&#160;        <span class="keywordtype">void</span> *<a class="code" href="structlws__context__creation__info.html#a0e9d94cdfb893d777b4a4db81e7b5ac0">user</a>;</div><div class="line"><a name="l01613"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#ac583ce92b8e1c949cb6fef6bfe713d56"> 1613</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__context__creation__info.html#ac583ce92b8e1c949cb6fef6bfe713d56">ka_time</a>;</div><div class="line"><a name="l01616"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a3baab4285c679fbe027c2504621d7410"> 1616</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__context__creation__info.html#a3baab4285c679fbe027c2504621d7410">ka_probes</a>;</div><div class="line"><a name="l01620"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a381342a398883d6204955ff3c1849ddd"> 1620</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__context__creation__info.html#a381342a398883d6204955ff3c1849ddd">ka_interval</a>;</div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160;<span class="preprocessor">#ifdef LWS_OPENSSL_SUPPORT</span></div><div class="line"><a name="l01624"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a1654d41bea6fb2f619b57e6a264b26a4"> 1624</a></span>&#160;        <a class="code" href="structlws__polarssl__context.html">SSL_CTX</a> *<a class="code" href="structlws__context__creation__info.html#a1654d41bea6fb2f619b57e6a264b26a4">provided_client_ssl_ctx</a>;</div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160;<span class="preprocessor">#else </span><span class="comment">/* maintain structure layout either way */</span><span class="preprocessor"></span></div><div class="line"><a name="l01630"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a0e790dda6202604f73a03b6149bc12bb"> 1630</a></span>&#160;        <span class="keywordtype">void</span> *<a class="code" href="structlws__context__creation__info.html#a0e790dda6202604f73a03b6149bc12bb">provided_client_ssl_ctx</a>; </div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160;</div><div class="line"><a name="l01633"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a0cdfd3c484689ba6f0f2cc91b38ce948"> 1633</a></span>&#160;        <span class="keywordtype">short</span> <a class="code" href="structlws__context__creation__info.html#a0cdfd3c484689ba6f0f2cc91b38ce948">max_http_header_data</a>;</div><div class="line"><a name="l01636"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a0b154e79abc1167ba4ac3539f4af6720"> 1636</a></span>&#160;        <span class="keywordtype">short</span> <a class="code" href="structlws__context__creation__info.html#a0b154e79abc1167ba4ac3539f4af6720">max_http_header_pool</a>;</div><div class="line"><a name="l01643"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#ae52f3237e144e9ddcab5e2cf91d1e419"> 1643</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structlws__context__creation__info.html#ae52f3237e144e9ddcab5e2cf91d1e419">count_threads</a>;</div><div class="line"><a name="l01645"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a45e63e24c88289e0c8352377ef4d3646"> 1645</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structlws__context__creation__info.html#a45e63e24c88289e0c8352377ef4d3646">fd_limit_per_thread</a>;</div><div class="line"><a name="l01649"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a6cfa3d51df2def3349a5cbf0d712822d"> 1649</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structlws__context__creation__info.html#a6cfa3d51df2def3349a5cbf0d712822d">timeout_secs</a>;</div><div class="line"><a name="l01654"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#afa5d4e7d9f86b58a1c6fac14f0a5f5f9"> 1654</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__context__creation__info.html#afa5d4e7d9f86b58a1c6fac14f0a5f5f9">ecdh_curve</a>;</div><div class="line"><a name="l01656"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#ad50db098a208f045f7811207d2bee4b9"> 1656</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__context__creation__info.html#ad50db098a208f045f7811207d2bee4b9">vhost_name</a>;</div><div class="line"><a name="l01660"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a8122cfc0810bafe51edb3ba6bf9a1251"> 1660</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> * <span class="keyword">const</span> *<a class="code" href="structlws__context__creation__info.html#a8122cfc0810bafe51edb3ba6bf9a1251">plugin_dirs</a>;</div><div class="line"><a name="l01663"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a999866fcd15dbd621773436f97190458"> 1663</a></span>&#160;        <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__protocol__vhost__options.html">lws_protocol_vhost_options</a> *<a class="code" href="structlws__context__creation__info.html#a999866fcd15dbd621773436f97190458">pvo</a>;</div><div class="line"><a name="l01666"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a81697c6b763b5ef3ee52862bc70b07d6"> 1666</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__context__creation__info.html#a81697c6b763b5ef3ee52862bc70b07d6">keepalive_timeout</a>;</div><div class="line"><a name="l01669"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#ad0e95ba721f7bd2b676719f8093c23a2"> 1669</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__context__creation__info.html#ad0e95ba721f7bd2b676719f8093c23a2">log_filepath</a>;</div><div class="line"><a name="l01672"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a13ffbb0d010309669611f8c4eda7d7f8"> 1672</a></span>&#160;        <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__http__mount.html">lws_http_mount</a> *<a class="code" href="structlws__context__creation__info.html#a13ffbb0d010309669611f8c4eda7d7f8">mounts</a>;</div><div class="line"><a name="l01674"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a137a9b9de4f6a7993fed8746d551e616"> 1674</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__context__creation__info.html#a137a9b9de4f6a7993fed8746d551e616">server_string</a>;</div><div class="line"><a name="l01677"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a57f88c0745adbd1d6b9b619b8de30209"> 1677</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structlws__context__creation__info.html#a57f88c0745adbd1d6b9b619b8de30209">pt_serv_buf_size</a>;</div><div class="line"><a name="l01683"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#aa8d9e85e137f35fb006f2e4a53f0887a"> 1683</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structlws__context__creation__info.html#aa8d9e85e137f35fb006f2e4a53f0887a">max_http_header_data2</a>;</div><div class="line"><a name="l01688"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a704940261951ced6b5d8191bd8b9bb2d"> 1688</a></span>&#160;        <span class="keywordtype">long</span> <a class="code" href="structlws__context__creation__info.html#a704940261951ced6b5d8191bd8b9bb2d">ssl_options_set</a>;</div><div class="line"><a name="l01690"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#adb0bc0b28cd7d90ab306723d8ffa96fa"> 1690</a></span>&#160;        <span class="keywordtype">long</span> <a class="code" href="structlws__context__creation__info.html#adb0bc0b28cd7d90ab306723d8ffa96fa">ssl_options_clear</a>;</div><div class="line"><a name="l01692"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a33a1a25a7df3793f59047e20dd580078"> 1692</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code" href="structlws__context__creation__info.html#a33a1a25a7df3793f59047e20dd580078">ws_ping_pong_interval</a>;</div><div class="line"><a name="l01704"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#a8ca0ec6b8675c13849bbdcdc0d50c9a3"> 1704</a></span>&#160;        <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__protocol__vhost__options.html">lws_protocol_vhost_options</a> *<a class="code" href="structlws__context__creation__info.html#a8ca0ec6b8675c13849bbdcdc0d50c9a3">headers</a>;</div><div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>&#160;        <span class="comment">/* Add new things just above here ---^</span></div><div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>&#160;<span class="comment">         * This is part of the ABI, don&#39;t needlessly break compatibility</span></div><div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160;<span class="comment">         *</span></div><div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>&#160;<span class="comment">         * The below is to ensure later library versions with new</span></div><div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>&#160;<span class="comment">         * members added above will see 0 (default) even if the app</span></div><div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160;<span class="comment">         * was not built against the newer headers.</span></div><div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>&#160;<span class="comment">         */</span></div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160;</div><div class="line"><a name="l01716"></a><span class="lineno"><a class="line" href="structlws__context__creation__info.html#afce3b59950eca3203faa07381bbed5d7"> 1716</a></span>&#160;        <span class="keywordtype">void</span> *_unused[8]; </div><div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>&#160;};</div><div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>&#160;</div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">struct </span>lws_context *</div><div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>&#160;<a class="code" href="group__context-and-vhost.html#gaf2fff58562caab7510c41eeac85a8648">lws_create_context</a>(<span class="keyword">struct</span> <a class="code" href="structlws__context__creation__info.html">lws_context_creation_info</a> *info);</div><div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>&#160;</div><div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span></div><div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>&#160;<a class="code" href="group__context-and-vhost.html#ga8ee0314028755f1ddfa9428e09b4fddb">lws_context_destroy</a>(<span class="keyword">struct</span> lws_context *context);</div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>&#160;</div><div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>&#160;<a class="code" href="group__context-and-vhost.html#ga7e9d5405547a457d86e0b4f0ae2bb1c4">lws_set_proxy</a>(<span class="keyword">struct</span> lws_vhost *vhost, <span class="keyword">const</span> <span class="keywordtype">char</span> *proxy);</div><div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>&#160;</div><div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>&#160;</div><div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>&#160;<span class="keyword">struct </span>lws_vhost;</div><div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>&#160;</div><div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>&#160;LWS_EXTERN LWS_VISIBLE <span class="keyword">struct </span>lws_vhost *</div><div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>&#160;<a class="code" href="group__context-and-vhost.html#ga0c54c667ccd9b8b3dddcd123ca72f87c">lws_create_vhost</a>(<span class="keyword">struct</span> lws_context *context,</div><div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>&#160;                 <span class="keyword">struct</span> <a class="code" href="structlws__context__creation__info.html">lws_context_creation_info</a> *info);</div><div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>&#160;</div><div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>&#160;<a class="code" href="group__context-and-vhost.html#ga98d88c9080fd89c37114363a6474ea73">lwsws_get_config_globals</a>(<span class="keyword">struct</span> <a class="code" href="structlws__context__creation__info.html">lws_context_creation_info</a> *info, <span class="keyword">const</span> <span class="keywordtype">char</span> *d,</div><div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>&#160;                         <span class="keywordtype">char</span> **config_strings, <span class="keywordtype">int</span> *len);</div><div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>&#160;</div><div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>&#160;<a class="code" href="group__context-and-vhost.html#ga341064721add2618ae1b29717493a212">lwsws_get_config_vhosts</a>(<span class="keyword">struct</span> lws_context *context,</div><div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>&#160;                        <span class="keyword">struct</span> <a class="code" href="structlws__context__creation__info.html">lws_context_creation_info</a> *info, <span class="keyword">const</span> <span class="keywordtype">char</span> *d,</div><div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>&#160;                        <span class="keywordtype">char</span> **config_strings, <span class="keywordtype">int</span> *len);</div><div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>&#160;</div><div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">struct </span>lws_vhost *</div><div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>&#160;<a class="code" href="group__context-and-vhost.html#ga8db03e19a372e34ac25cf21af894a02c">lws_vhost_get</a>(<span class="keyword">struct</span> lws *wsi) LWS_WARN_DEPRECATED;</div><div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>&#160;</div><div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">struct </span>lws_vhost *</div><div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>&#160;<a class="code" href="group__context-and-vhost.html#ga06e77ce2916f8bc9826ef8d9d68e3932">lws_get_vhost</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>&#160;</div><div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>&#160;<a class="code" href="group__context-and-vhost.html#ga94e6cc2223c4eec316b13bcebc3628b6">lws_json_dump_vhost</a>(<span class="keyword">const</span> <span class="keyword">struct</span> lws_vhost *vh, <span class="keywordtype">char</span> *buf, <span class="keywordtype">int</span> len);</div><div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>&#160;</div><div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>&#160;<a class="code" href="group__context-and-vhost.html#gae2134657cdd2ea7a59e13ad314e4c50d">lws_json_dump_context</a>(<span class="keyword">const</span> <span class="keyword">struct</span> lws_context *context, <span class="keywordtype">char</span> *buf, <span class="keywordtype">int</span> len);</div><div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>&#160;</div><div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span> *</div><div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>&#160;<a class="code" href="group__context-and-vhost.html#gaeb12f934bfd178bd2132a9e73fc641da">lws_context_user</a>(<span class="keyword">struct</span> lws_context *context);</div><div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>&#160;</div><div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>&#160;</div><div class="line"><a name="l01897"></a><span class="lineno"><a class="line" href="structlws__protocol__vhost__options.html"> 1897</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__protocol__vhost__options.html">lws_protocol_vhost_options</a> {</div><div class="line"><a name="l01898"></a><span class="lineno"><a class="line" href="structlws__protocol__vhost__options.html#abc714ddb4171756fc8196e9823a1e21c"> 1898</a></span>&#160;        <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__protocol__vhost__options.html">lws_protocol_vhost_options</a> *<a class="code" href="structlws__protocol__vhost__options.html#abc714ddb4171756fc8196e9823a1e21c">next</a>; </div><div class="line"><a name="l01899"></a><span class="lineno"><a class="line" href="structlws__protocol__vhost__options.html#afd99fbc90be51ea2465b550c2ec47822"> 1899</a></span>&#160;        <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__protocol__vhost__options.html">lws_protocol_vhost_options</a> *<a class="code" href="structlws__protocol__vhost__options.html#afd99fbc90be51ea2465b550c2ec47822">options</a>; </div><div class="line"><a name="l01900"></a><span class="lineno"><a class="line" href="structlws__protocol__vhost__options.html#acf9db77f8eb64cd4e314be9b43d8a8b9"> 1900</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__protocol__vhost__options.html#acf9db77f8eb64cd4e314be9b43d8a8b9">name</a>; </div><div class="line"><a name="l01901"></a><span class="lineno"><a class="line" href="structlws__protocol__vhost__options.html#a0640a92513c70ee6b9b295a9ad1658e7"> 1901</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__protocol__vhost__options.html#a0640a92513c70ee6b9b295a9ad1658e7">value</a>; </div><div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>&#160;};</div><div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>&#160;</div><div class="line"><a name="l01908"></a><span class="lineno"><a class="line" href="group__vhost-mounts.html#ga31eca18e50cb4357480f2fcad36ff437"> 1908</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="group__vhost-mounts.html#ga31eca18e50cb4357480f2fcad36ff437">lws_mount_protocols</a> {</div><div class="line"><a name="l01909"></a><span class="lineno"><a class="line" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0"> 1909</a></span>&#160;        <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0">LWSMPRO_HTTP</a>            = 0, </div><div class="line"><a name="l01910"></a><span class="lineno"><a class="line" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1"> 1910</a></span>&#160;        <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1">LWSMPRO_HTTPS</a>           = 1, </div><div class="line"><a name="l01911"></a><span class="lineno"><a class="line" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2"> 1911</a></span>&#160;        <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2">LWSMPRO_FILE</a>            = 2, </div><div class="line"><a name="l01912"></a><span class="lineno"><a class="line" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69"> 1912</a></span>&#160;        <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69">LWSMPRO_CGI</a>             = 3, </div><div class="line"><a name="l01913"></a><span class="lineno"><a class="line" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970"> 1913</a></span>&#160;        <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970">LWSMPRO_REDIR_HTTP</a>      = 4, </div><div class="line"><a name="l01914"></a><span class="lineno"><a class="line" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a8894d16316863077dfe530963ca59f67"> 1914</a></span>&#160;        <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a8894d16316863077dfe530963ca59f67">LWSMPRO_REDIR_HTTPS</a>     = 5, </div><div class="line"><a name="l01915"></a><span class="lineno"><a class="line" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da"> 1915</a></span>&#160;        <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da">LWSMPRO_CALLBACK</a>        = 6, </div><div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>&#160;};</div><div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>&#160;</div><div class="line"><a name="l01922"></a><span class="lineno"><a class="line" href="structlws__http__mount.html"> 1922</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__http__mount.html">lws_http_mount</a> {</div><div class="line"><a name="l01923"></a><span class="lineno"><a class="line" href="structlws__http__mount.html#a0109baf93f23c07c824c997c3533ee44"> 1923</a></span>&#160;        <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__http__mount.html">lws_http_mount</a> *<a class="code" href="structlws__http__mount.html#a0109baf93f23c07c824c997c3533ee44">mount_next</a>;</div><div class="line"><a name="l01925"></a><span class="lineno"><a class="line" href="structlws__http__mount.html#aa2391bfcada0b7a290b3c6651f64586c"> 1925</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__http__mount.html#aa2391bfcada0b7a290b3c6651f64586c">mountpoint</a>;</div><div class="line"><a name="l01927"></a><span class="lineno"><a class="line" href="structlws__http__mount.html#a21d86fd6043ec00e121ababbc29af39a"> 1927</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__http__mount.html#a21d86fd6043ec00e121ababbc29af39a">origin</a>;</div><div class="line"><a name="l01929"></a><span class="lineno"><a class="line" href="structlws__http__mount.html#ae90d1efe7178199fad39de2926902ee4"> 1929</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__http__mount.html#ae90d1efe7178199fad39de2926902ee4">def</a>;</div><div class="line"><a name="l01931"></a><span class="lineno"><a class="line" href="structlws__http__mount.html#a05347d92c3d379809564bd4f3eab259b"> 1931</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__http__mount.html#a05347d92c3d379809564bd4f3eab259b">protocol</a>;</div><div class="line"><a name="l01934"></a><span class="lineno"><a class="line" href="structlws__http__mount.html#ae7b5c0f4c5408061e6ea3a8d281f45af"> 1934</a></span>&#160;        <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__protocol__vhost__options.html">lws_protocol_vhost_options</a> *<a class="code" href="structlws__http__mount.html#ae7b5c0f4c5408061e6ea3a8d281f45af">cgienv</a>;</div><div class="line"><a name="l01938"></a><span class="lineno"><a class="line" href="structlws__http__mount.html#a4437423df85ee3dbcae0e15974c89ec7"> 1938</a></span>&#160;        <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__protocol__vhost__options.html">lws_protocol_vhost_options</a> *<a class="code" href="structlws__http__mount.html#a4437423df85ee3dbcae0e15974c89ec7">extra_mimetypes</a>;</div><div class="line"><a name="l01940"></a><span class="lineno"><a class="line" href="structlws__http__mount.html#a11ea62b952710d59733dbcf9794a5773"> 1940</a></span>&#160;        <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__protocol__vhost__options.html">lws_protocol_vhost_options</a> *<a class="code" href="structlws__http__mount.html#a11ea62b952710d59733dbcf9794a5773">interpret</a>;</div><div class="line"><a name="l01943"></a><span class="lineno"><a class="line" href="structlws__http__mount.html#a4a7239d6d4c03986e6e1a72abb6c83aa"> 1943</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__http__mount.html#a4a7239d6d4c03986e6e1a72abb6c83aa">cgi_timeout</a>;</div><div class="line"><a name="l01945"></a><span class="lineno"><a class="line" href="structlws__http__mount.html#a4283e30ea89d27ae7d061ad760d1d146"> 1945</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__http__mount.html#a4283e30ea89d27ae7d061ad760d1d146">cache_max_age</a>;</div><div class="line"><a name="l01947"></a><span class="lineno"><a class="line" href="structlws__http__mount.html#a614364c770b0bd4db464ad65cddab477"> 1947</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structlws__http__mount.html#a614364c770b0bd4db464ad65cddab477">auth_mask</a>;</div><div class="line"><a name="l01950"></a><span class="lineno"><a class="line" href="structlws__http__mount.html#a8316dd183ffbef50419a5a4968d35d84"> 1950</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cache_reusable:1; </div><div class="line"><a name="l01951"></a><span class="lineno"><a class="line" href="structlws__http__mount.html#ae137203040c6153694bd88a708da5395"> 1951</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cache_revalidate:1; </div><div class="line"><a name="l01952"></a><span class="lineno"><a class="line" href="structlws__http__mount.html#aabec1a326780aafe11b977000983be0c"> 1952</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cache_intermediaries:1; </div><div class="line"><a name="l01954"></a><span class="lineno"><a class="line" href="structlws__http__mount.html#a6a9b1492a0b9749e39bd19932717a0b7"> 1954</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="structlws__http__mount.html#a6a9b1492a0b9749e39bd19932717a0b7">origin_protocol</a>; </div><div class="line"><a name="l01955"></a><span class="lineno"><a class="line" href="structlws__http__mount.html#ac8489b60b8f969eb19c9abbdeac90743"> 1955</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="structlws__http__mount.html#ac8489b60b8f969eb19c9abbdeac90743">mountpoint_len</a>; </div><div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>&#160;};</div><div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>&#160;</div><div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>&#160;</div><div class="line"><a name="l01972"></a><span class="lineno"><a class="line" href="group__client.html#ga96f3dbad54b2853969cfa933d66871ce"> 1972</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="group__client.html#ga96f3dbad54b2853969cfa933d66871ce">lws_client_connect_ssl_connection_flags</a> {</div><div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>&#160;        LCCSCF_USE_SSL                          = (1 &lt;&lt; 0),</div><div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>&#160;        LCCSCF_ALLOW_SELFSIGNED                 = (1 &lt;&lt; 1),</div><div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>&#160;        LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK  = (1 &lt;&lt; 2)</div><div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>&#160;};</div><div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>&#160;</div><div class="line"><a name="l01981"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html"> 1981</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__client__connect__info.html">lws_client_connect_info</a> {</div><div class="line"><a name="l01982"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#afe999d133cc240a0bfd02aade0514cfd"> 1982</a></span>&#160;        <span class="keyword">struct </span>lws_context *<a class="code" href="structlws__client__connect__info.html#afe999d133cc240a0bfd02aade0514cfd">context</a>;</div><div class="line"><a name="l01984"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#aa364094f94ef1bcaaabbd9161971d502"> 1984</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__client__connect__info.html#aa364094f94ef1bcaaabbd9161971d502">address</a>;</div><div class="line"><a name="l01986"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#a1af124d81c3c22a46d39387c5bc3d6b9"> 1986</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__client__connect__info.html#a1af124d81c3c22a46d39387c5bc3d6b9">port</a>;</div><div class="line"><a name="l01988"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#a9862297827639238a7a0b4054c3ddf3d"> 1988</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__client__connect__info.html#a9862297827639238a7a0b4054c3ddf3d">ssl_connection</a>;</div><div class="line"><a name="l01990"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#a76a8388733f114fb8fd3643874781185"> 1990</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__client__connect__info.html#a76a8388733f114fb8fd3643874781185">path</a>;</div><div class="line"><a name="l01992"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#a9b36d47c3422329df32c21040a35ebc7"> 1992</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__client__connect__info.html#a9b36d47c3422329df32c21040a35ebc7">host</a>;</div><div class="line"><a name="l01994"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#a8595f83e64147cb687b6418cf500dd4c"> 1994</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__client__connect__info.html#a8595f83e64147cb687b6418cf500dd4c">origin</a>;</div><div class="line"><a name="l01996"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#aba35adfb74845a5fd0c3dc141cbdddd2"> 1996</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__client__connect__info.html#aba35adfb74845a5fd0c3dc141cbdddd2">protocol</a>;</div><div class="line"><a name="l01998"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#a69abb5aeed755750b9755e5c91db6895"> 1998</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__client__connect__info.html#a69abb5aeed755750b9755e5c91db6895">ietf_version_or_minus_one</a>;</div><div class="line"><a name="l02000"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#a9831b9f9ab54a1aec4bb15324f1c3836"> 2000</a></span>&#160;        <span class="keywordtype">void</span> *<a class="code" href="structlws__client__connect__info.html#a9831b9f9ab54a1aec4bb15324f1c3836">userdata</a>;</div><div class="line"><a name="l02002"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#a7732b996e977393c3e1076be2a8ded6c"> 2002</a></span>&#160;        <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlws__extension.html">lws_extension</a> *<a class="code" href="structlws__client__connect__info.html#a7732b996e977393c3e1076be2a8ded6c">client_exts</a>;</div><div class="line"><a name="l02004"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#aa9e8e3da4e783a0651b0dea62c2dd1db"> 2004</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__client__connect__info.html#aa9e8e3da4e783a0651b0dea62c2dd1db">method</a>;</div><div class="line"><a name="l02007"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#a6843a60e1050b10db9d98d7eeb45f587"> 2007</a></span>&#160;        <span class="keyword">struct </span>lws *<a class="code" href="structlws__client__connect__info.html#a6843a60e1050b10db9d98d7eeb45f587">parent_wsi</a>;</div><div class="line"><a name="l02011"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#a03c305fdca809667b6a9a83b3edfd83a"> 2011</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__client__connect__info.html#a03c305fdca809667b6a9a83b3edfd83a">uri_replace_from</a>;</div><div class="line"><a name="l02014"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#a9959ba103d3d2484e559a9f7879eebe3"> 2014</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__client__connect__info.html#a9959ba103d3d2484e559a9f7879eebe3">uri_replace_to</a>;</div><div class="line"><a name="l02016"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#a3893181d728f326f9f5b47c1459cb8be"> 2016</a></span>&#160;        <span class="keyword">struct </span>lws_vhost *<a class="code" href="structlws__client__connect__info.html#a3893181d728f326f9f5b47c1459cb8be">vhost</a>;</div><div class="line"><a name="l02018"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#a065063b5117ecd0a59567c97f04bda2e"> 2018</a></span>&#160;        <span class="keyword">struct </span>lws **<a class="code" href="structlws__client__connect__info.html#a065063b5117ecd0a59567c97f04bda2e">pwsi</a>;</div><div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>&#160;        <span class="comment">/* Add new things just above here ---^</span></div><div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>&#160;<span class="comment">         * This is part of the ABI, don&#39;t needlessly break compatibility</span></div><div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>&#160;<span class="comment">         *</span></div><div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>&#160;<span class="comment">         * The below is to ensure later library versions with new</span></div><div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>&#160;<span class="comment">         * members added above will see 0 (default) even if the app</span></div><div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>&#160;<span class="comment">         * was not built against the newer headers.</span></div><div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>&#160;<span class="comment">         */</span></div><div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>&#160;</div><div class="line"><a name="l02038"></a><span class="lineno"><a class="line" href="structlws__client__connect__info.html#ad47f50d1633dc5df74548606c9a66d73"> 2038</a></span>&#160;        <span class="keywordtype">void</span> *_unused[4]; </div><div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>&#160;};</div><div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>&#160;</div><div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">struct </span>lws *</div><div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160;<a class="code" href="group__client.html#ga0c966136905f467816307cfba6deb5fd">lws_client_connect_via_info</a>(<span class="keyword">struct</span> <a class="code" href="structlws__client__connect__info.html">lws_client_connect_info</a> * ccinfo);</div><div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>&#160;</div><div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>&#160;<span class="comment">/* deprecated, use lws_client_connect_via_info() */</span></div><div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">struct </span>lws * LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>&#160;<a class="code" href="group__client.html#ga4af0a20108a95e8b6d94dd4d80055ff3">lws_client_connect</a>(<span class="keyword">struct</span> lws_context *clients, <span class="keyword">const</span> <span class="keywordtype">char</span> *address,</div><div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>&#160;                   <span class="keywordtype">int</span> port, <span class="keywordtype">int</span> ssl_connection, <span class="keyword">const</span> <span class="keywordtype">char</span> *path,</div><div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>&#160;                   <span class="keyword">const</span> <span class="keywordtype">char</span> *host, <span class="keyword">const</span> <span class="keywordtype">char</span> *origin, <span class="keyword">const</span> <span class="keywordtype">char</span> *protocol,</div><div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>&#160;                   <span class="keywordtype">int</span> ietf_version_or_minus_one) LWS_WARN_DEPRECATED;</div><div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>&#160;<span class="comment">/* deprecated, use lws_client_connect_via_info() */</span></div><div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">struct </span>lws * LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>&#160;<a class="code" href="group__client.html#gac6a8558b4410961a880241c2ac1271e2">lws_client_connect_extended</a>(<span class="keyword">struct</span> lws_context *clients, <span class="keyword">const</span> <span class="keywordtype">char</span> *address,</div><div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>&#160;                            <span class="keywordtype">int</span> port, <span class="keywordtype">int</span> ssl_connection, <span class="keyword">const</span> <span class="keywordtype">char</span> *path,</div><div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>&#160;                            <span class="keyword">const</span> <span class="keywordtype">char</span> *host, <span class="keyword">const</span> <span class="keywordtype">char</span> *origin,</div><div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>&#160;                            <span class="keyword">const</span> <span class="keywordtype">char</span> *protocol, <span class="keywordtype">int</span> ietf_version_or_minus_one,</div><div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160;                            <span class="keywordtype">void</span> *userdata) LWS_WARN_DEPRECATED;</div><div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>&#160;</div><div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>&#160;<a class="code" href="group__client.html#ga4f44b8230e6732816ca5cd8d1aaaf340">lws_init_vhost_client_ssl</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlws__context__creation__info.html">lws_context_creation_info</a> *info,</div><div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>&#160;                          <span class="keyword">struct</span> lws_vhost *vhost);</div><div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>&#160;</div><div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>&#160;lws_http_client_read(<span class="keyword">struct</span> lws *wsi, <span class="keywordtype">char</span> **buf, <span class="keywordtype">int</span> *len);</div><div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>&#160;</div><div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span></div><div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>&#160;lws_client_http_body_pending(<span class="keyword">struct</span> lws *wsi, <span class="keywordtype">int</span> something_left_to_send);</div><div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>&#160;</div><div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>&#160;</div><div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>&#160;</div><div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>&#160;<a class="code" href="group__service.html#gaf95bd0c663d6516a0c80047d9b1167a8">lws_service</a>(<span class="keyword">struct</span> lws_context *context, <span class="keywordtype">int</span> timeout_ms);</div><div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>&#160;</div><div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>&#160;<a class="code" href="group__service.html#ga9b3cc4473fd8848e5bbee7f310712939">lws_service_tsi</a>(<span class="keyword">struct</span> lws_context *context, <span class="keywordtype">int</span> timeout_ms, <span class="keywordtype">int</span> tsi);</div><div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>&#160;</div><div class="line"><a name="l02234"></a><span class="lineno"> 2234</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span></div><div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>&#160;<a class="code" href="group__service.html#ga29c246707997ab7a466aa709aecd2d7b">lws_cancel_service_pt</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l02236"></a><span class="lineno"> 2236</span>&#160;</div><div class="line"><a name="l02248"></a><span class="lineno"> 2248</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span></div><div class="line"><a name="l02249"></a><span class="lineno"> 2249</span>&#160;<a class="code" href="group__service.html#ga53e3d0801dfda7960a7249dd559e68a2">lws_cancel_service</a>(<span class="keyword">struct</span> lws_context *context);</div><div class="line"><a name="l02250"></a><span class="lineno"> 2250</span>&#160;</div><div class="line"><a name="l02273"></a><span class="lineno"> 2273</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>&#160;<a class="code" href="group__service.html#gad82efa5466d14a9f05aa06416375b28d">lws_service_fd</a>(<span class="keyword">struct</span> lws_context *context, <span class="keyword">struct</span> <a class="code" href="structlws__pollfd.html">lws_pollfd</a> *<a class="code" href="structpollfd.html">pollfd</a>);</div><div class="line"><a name="l02275"></a><span class="lineno"> 2275</span>&#160;</div><div class="line"><a name="l02285"></a><span class="lineno"> 2285</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l02286"></a><span class="lineno"> 2286</span>&#160;<a class="code" href="group__service.html#gaebf426eda371ba23642fc11d8e0ace6b">lws_service_fd_tsi</a>(<span class="keyword">struct</span> lws_context *context, <span class="keyword">struct</span> <a class="code" href="structlws__pollfd.html">lws_pollfd</a> *<a class="code" href="structpollfd.html">pollfd</a>,</div><div class="line"><a name="l02287"></a><span class="lineno"> 2287</span>&#160;                   <span class="keywordtype">int</span> tsi);</div><div class="line"><a name="l02288"></a><span class="lineno"> 2288</span>&#160;</div><div class="line"><a name="l02290"></a><span class="lineno"> 2290</span>&#160;</div><div class="line"><a name="l02296"></a><span class="lineno"> 2296</span>&#160;</div><div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>&#160;</div><div class="line"><a name="l02315"></a><span class="lineno"> 2315</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">const</span> <span class="keywordtype">char</span> *</div><div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>&#160;<a class="code" href="group__httpft.html#gab4da87a4800413f15e7aba649fb1d77c">lws_get_mimetype</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *file, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlws__http__mount.html">lws_http_mount</a> *m);</div><div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>&#160;</div><div class="line"><a name="l02336"></a><span class="lineno"> 2336</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l02337"></a><span class="lineno"> 2337</span>&#160;<a class="code" href="group__httpft.html#gab393a06d3d2722af4c3f8b06842c80d7">lws_serve_http_file</a>(<span class="keyword">struct</span> lws *wsi, <span class="keyword">const</span> <span class="keywordtype">char</span> *file, <span class="keyword">const</span> <span class="keywordtype">char</span> *content_type,</div><div class="line"><a name="l02338"></a><span class="lineno"> 2338</span>&#160;                    <span class="keyword">const</span> <span class="keywordtype">char</span> *other_headers, <span class="keywordtype">int</span> other_headers_len);</div><div class="line"><a name="l02339"></a><span class="lineno"> 2339</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l02340"></a><span class="lineno"> 2340</span>&#160;lws_serve_http_file_fragment(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l02342"></a><span class="lineno"> 2342</span>&#160;</div><div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>&#160;</div><div class="line"><a name="l02354"></a><span class="lineno"> 2354</span>&#160;<span class="keyword">enum</span> http_status {</div><div class="line"><a name="l02355"></a><span class="lineno"> 2355</span>&#160;        HTTP_STATUS_OK                                          = 200,</div><div class="line"><a name="l02356"></a><span class="lineno"> 2356</span>&#160;        HTTP_STATUS_NO_CONTENT                                  = 204,</div><div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>&#160;</div><div class="line"><a name="l02358"></a><span class="lineno"> 2358</span>&#160;        HTTP_STATUS_MOVED_PERMANENTLY                           = 301,</div><div class="line"><a name="l02359"></a><span class="lineno"> 2359</span>&#160;        HTTP_STATUS_FOUND                                       = 302,</div><div class="line"><a name="l02360"></a><span class="lineno"> 2360</span>&#160;        HTTP_STATUS_SEE_OTHER                                   = 303,</div><div class="line"><a name="l02361"></a><span class="lineno"> 2361</span>&#160;</div><div class="line"><a name="l02362"></a><span class="lineno"> 2362</span>&#160;        HTTP_STATUS_BAD_REQUEST                                 = 400,</div><div class="line"><a name="l02363"></a><span class="lineno"> 2363</span>&#160;        HTTP_STATUS_UNAUTHORIZED,</div><div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>&#160;        HTTP_STATUS_PAYMENT_REQUIRED,</div><div class="line"><a name="l02365"></a><span class="lineno"> 2365</span>&#160;        HTTP_STATUS_FORBIDDEN,</div><div class="line"><a name="l02366"></a><span class="lineno"> 2366</span>&#160;        HTTP_STATUS_NOT_FOUND,</div><div class="line"><a name="l02367"></a><span class="lineno"> 2367</span>&#160;        HTTP_STATUS_METHOD_NOT_ALLOWED,</div><div class="line"><a name="l02368"></a><span class="lineno"> 2368</span>&#160;        HTTP_STATUS_NOT_ACCEPTABLE,</div><div class="line"><a name="l02369"></a><span class="lineno"> 2369</span>&#160;        HTTP_STATUS_PROXY_AUTH_REQUIRED,</div><div class="line"><a name="l02370"></a><span class="lineno"> 2370</span>&#160;        HTTP_STATUS_REQUEST_TIMEOUT,</div><div class="line"><a name="l02371"></a><span class="lineno"> 2371</span>&#160;        HTTP_STATUS_CONFLICT,</div><div class="line"><a name="l02372"></a><span class="lineno"> 2372</span>&#160;        HTTP_STATUS_GONE,</div><div class="line"><a name="l02373"></a><span class="lineno"> 2373</span>&#160;        HTTP_STATUS_LENGTH_REQUIRED,</div><div class="line"><a name="l02374"></a><span class="lineno"> 2374</span>&#160;        HTTP_STATUS_PRECONDITION_FAILED,</div><div class="line"><a name="l02375"></a><span class="lineno"> 2375</span>&#160;        HTTP_STATUS_REQ_ENTITY_TOO_LARGE,</div><div class="line"><a name="l02376"></a><span class="lineno"> 2376</span>&#160;        HTTP_STATUS_REQ_URI_TOO_LONG,</div><div class="line"><a name="l02377"></a><span class="lineno"> 2377</span>&#160;        HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE,</div><div class="line"><a name="l02378"></a><span class="lineno"> 2378</span>&#160;        HTTP_STATUS_REQ_RANGE_NOT_SATISFIABLE,</div><div class="line"><a name="l02379"></a><span class="lineno"> 2379</span>&#160;        HTTP_STATUS_EXPECTATION_FAILED,</div><div class="line"><a name="l02380"></a><span class="lineno"> 2380</span>&#160;</div><div class="line"><a name="l02381"></a><span class="lineno"> 2381</span>&#160;        HTTP_STATUS_INTERNAL_SERVER_ERROR                       = 500,</div><div class="line"><a name="l02382"></a><span class="lineno"> 2382</span>&#160;        HTTP_STATUS_NOT_IMPLEMENTED,</div><div class="line"><a name="l02383"></a><span class="lineno"> 2383</span>&#160;        HTTP_STATUS_BAD_GATEWAY,</div><div class="line"><a name="l02384"></a><span class="lineno"> 2384</span>&#160;        HTTP_STATUS_SERVICE_UNAVAILABLE,</div><div class="line"><a name="l02385"></a><span class="lineno"> 2385</span>&#160;        HTTP_STATUS_GATEWAY_TIMEOUT,</div><div class="line"><a name="l02386"></a><span class="lineno"> 2386</span>&#160;        HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED,</div><div class="line"><a name="l02387"></a><span class="lineno"> 2387</span>&#160;};</div><div class="line"><a name="l02388"></a><span class="lineno"> 2388</span>&#160;</div><div class="line"><a name="l02389"></a><span class="lineno"><a class="line" href="structlws__process__html__args.html"> 2389</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__process__html__args.html">lws_process_html_args</a> {</div><div class="line"><a name="l02390"></a><span class="lineno"><a class="line" href="structlws__process__html__args.html#a11859d8bedd379fbf64543b25c65fe14"> 2390</a></span>&#160;        <span class="keywordtype">char</span> *<a class="code" href="structlws__process__html__args.html#a11859d8bedd379fbf64543b25c65fe14">p</a>; </div><div class="line"><a name="l02391"></a><span class="lineno"><a class="line" href="structlws__process__html__args.html#a754513f2311241cabb0cd1c90d7307ef"> 2391</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__process__html__args.html#a754513f2311241cabb0cd1c90d7307ef">len</a>; </div><div class="line"><a name="l02392"></a><span class="lineno"><a class="line" href="structlws__process__html__args.html#a8be7fd396a1942ea2449a2fda990ff99"> 2392</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__process__html__args.html#a8be7fd396a1942ea2449a2fda990ff99">max_len</a>; </div><div class="line"><a name="l02393"></a><span class="lineno"><a class="line" href="structlws__process__html__args.html#a362547891ee0d693f3900a1f807ea475"> 2393</a></span>&#160;        <span class="keywordtype">int</span> <span class="keyword">final</span>; </div><div class="line"><a name="l02394"></a><span class="lineno"> 2394</span>&#160;};</div><div class="line"><a name="l02395"></a><span class="lineno"> 2395</span>&#160;</div><div class="line"><a name="l02396"></a><span class="lineno"> 2396</span>&#160;<span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *(*lws_process_html_state_cb)(<span class="keywordtype">void</span> *data, <span class="keywordtype">int</span> index);</div><div class="line"><a name="l02397"></a><span class="lineno"> 2397</span>&#160;</div><div class="line"><a name="l02398"></a><span class="lineno"><a class="line" href="structlws__process__html__state.html"> 2398</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__process__html__state.html">lws_process_html_state</a> {</div><div class="line"><a name="l02399"></a><span class="lineno"><a class="line" href="structlws__process__html__state.html#af0732884ef891e24fe5fa237ebaa21a3"> 2399</a></span>&#160;        <span class="keywordtype">char</span> *<a class="code" href="structlws__process__html__state.html#af0732884ef891e24fe5fa237ebaa21a3">start</a>; </div><div class="line"><a name="l02400"></a><span class="lineno"><a class="line" href="structlws__process__html__state.html#a71982bc1cbd8cf876ca0f545144404eb"> 2400</a></span>&#160;        <span class="keywordtype">char</span> swallow[16]; </div><div class="line"><a name="l02401"></a><span class="lineno"><a class="line" href="structlws__process__html__state.html#a53234f2948812c7208a256f9f5b23c20"> 2401</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__process__html__state.html#a53234f2948812c7208a256f9f5b23c20">pos</a>; </div><div class="line"><a name="l02402"></a><span class="lineno"><a class="line" href="structlws__process__html__state.html#af21119890fdfebe28fb5c4dabfc1bdf5"> 2402</a></span>&#160;        <span class="keywordtype">void</span> *<a class="code" href="structlws__process__html__state.html#af21119890fdfebe28fb5c4dabfc1bdf5">data</a>; </div><div class="line"><a name="l02403"></a><span class="lineno"><a class="line" href="structlws__process__html__state.html#a3b113e00c03a2fded51b1c85ff5bf077"> 2403</a></span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span> * <span class="keyword">const</span> *<a class="code" href="structlws__process__html__state.html#a3b113e00c03a2fded51b1c85ff5bf077">vars</a>; </div><div class="line"><a name="l02404"></a><span class="lineno"><a class="line" href="structlws__process__html__state.html#adcafd17704775b4bbeea9561fb340968"> 2404</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__process__html__state.html#adcafd17704775b4bbeea9561fb340968">count_vars</a>; </div><div class="line"><a name="l02406"></a><span class="lineno"><a class="line" href="structlws__process__html__state.html#a693d2fb45378afee5da29b539c1ea644"> 2406</a></span>&#160;        lws_process_html_state_cb <a class="code" href="structlws__process__html__state.html#a693d2fb45378afee5da29b539c1ea644">replace</a>; </div><div class="line"><a name="l02407"></a><span class="lineno"> 2407</span>&#160;};</div><div class="line"><a name="l02408"></a><span class="lineno"> 2408</span>&#160;</div><div class="line"><a name="l02413"></a><span class="lineno"> 2413</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l02414"></a><span class="lineno"> 2414</span>&#160;<a class="code" href="group__html-chunked-substitution.html#ga643073f918c0a7016b690aae9793fd60">lws_chunked_html_process</a>(<span class="keyword">struct</span> <a class="code" href="structlws__process__html__args.html">lws_process_html_args</a> *args,</div><div class="line"><a name="l02415"></a><span class="lineno"> 2415</span>&#160;                         <span class="keyword">struct</span> <a class="code" href="structlws__process__html__state.html">lws_process_html_state</a> *s);</div><div class="line"><a name="l02417"></a><span class="lineno"> 2417</span>&#160;</div><div class="line"><a name="l02450"></a><span class="lineno"> 2450</span>&#160;</div><div class="line"><a name="l02458"></a><span class="lineno"><a class="line" href="structlws__tokens.html"> 2458</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__tokens.html">lws_tokens</a> {</div><div class="line"><a name="l02459"></a><span class="lineno"><a class="line" href="structlws__tokens.html#a9f3635412bc71a5cb78e9862b55f10cd"> 2459</a></span>&#160;        <span class="keywordtype">char</span> *<a class="code" href="structlws__tokens.html#a9f3635412bc71a5cb78e9862b55f10cd">token</a>; </div><div class="line"><a name="l02460"></a><span class="lineno"><a class="line" href="structlws__tokens.html#a855b7375d1d58516c0ecd4b60e9a7766"> 2460</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__tokens.html#a855b7375d1d58516c0ecd4b60e9a7766">token_len</a>; </div><div class="line"><a name="l02461"></a><span class="lineno"> 2461</span>&#160;};</div><div class="line"><a name="l02462"></a><span class="lineno"> 2462</span>&#160;</div><div class="line"><a name="l02463"></a><span class="lineno"> 2463</span>&#160;<span class="comment">/* enum lws_token_indexes</span></div><div class="line"><a name="l02464"></a><span class="lineno"> 2464</span>&#160;<span class="comment"> * these have to be kept in sync with lextable.h / minilex.c</span></div><div class="line"><a name="l02465"></a><span class="lineno"> 2465</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l02466"></a><span class="lineno"> 2466</span>&#160;<span class="comment"> * NOTE: These public enums are part of the abi.  If you want to add one,</span></div><div class="line"><a name="l02467"></a><span class="lineno"> 2467</span>&#160;<span class="comment"> * add it at where specified so existing users are unaffected.</span></div><div class="line"><a name="l02468"></a><span class="lineno"> 2468</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02469"></a><span class="lineno"> 2469</span>&#160;<span class="keyword">enum</span> lws_token_indexes {</div><div class="line"><a name="l02470"></a><span class="lineno"> 2470</span>&#160;        WSI_TOKEN_GET_URI                                       =  0,</div><div class="line"><a name="l02471"></a><span class="lineno"> 2471</span>&#160;        WSI_TOKEN_POST_URI                                      =  1,</div><div class="line"><a name="l02472"></a><span class="lineno"> 2472</span>&#160;        WSI_TOKEN_OPTIONS_URI                                   =  2,</div><div class="line"><a name="l02473"></a><span class="lineno"> 2473</span>&#160;        WSI_TOKEN_HOST                                          =  3,</div><div class="line"><a name="l02474"></a><span class="lineno"> 2474</span>&#160;        WSI_TOKEN_CONNECTION                                    =  4,</div><div class="line"><a name="l02475"></a><span class="lineno"> 2475</span>&#160;        WSI_TOKEN_UPGRADE                                       =  5,</div><div class="line"><a name="l02476"></a><span class="lineno"> 2476</span>&#160;        WSI_TOKEN_ORIGIN                                        =  6,</div><div class="line"><a name="l02477"></a><span class="lineno"> 2477</span>&#160;        WSI_TOKEN_DRAFT                                         =  7,</div><div class="line"><a name="l02478"></a><span class="lineno"> 2478</span>&#160;        WSI_TOKEN_CHALLENGE                                     =  8,</div><div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>&#160;        WSI_TOKEN_EXTENSIONS                                    =  9,</div><div class="line"><a name="l02480"></a><span class="lineno"> 2480</span>&#160;        WSI_TOKEN_KEY1                                          = 10,</div><div class="line"><a name="l02481"></a><span class="lineno"> 2481</span>&#160;        WSI_TOKEN_KEY2                                          = 11,</div><div class="line"><a name="l02482"></a><span class="lineno"> 2482</span>&#160;        WSI_TOKEN_PROTOCOL                                      = 12,</div><div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>&#160;        WSI_TOKEN_ACCEPT                                        = 13,</div><div class="line"><a name="l02484"></a><span class="lineno"> 2484</span>&#160;        WSI_TOKEN_NONCE                                         = 14,</div><div class="line"><a name="l02485"></a><span class="lineno"> 2485</span>&#160;        WSI_TOKEN_HTTP                                          = 15,</div><div class="line"><a name="l02486"></a><span class="lineno"> 2486</span>&#160;        WSI_TOKEN_HTTP2_SETTINGS                                = 16,</div><div class="line"><a name="l02487"></a><span class="lineno"> 2487</span>&#160;        WSI_TOKEN_HTTP_ACCEPT                                   = 17,</div><div class="line"><a name="l02488"></a><span class="lineno"> 2488</span>&#160;        WSI_TOKEN_HTTP_AC_REQUEST_HEADERS                       = 18,</div><div class="line"><a name="l02489"></a><span class="lineno"> 2489</span>&#160;        WSI_TOKEN_HTTP_IF_MODIFIED_SINCE                        = 19,</div><div class="line"><a name="l02490"></a><span class="lineno"> 2490</span>&#160;        WSI_TOKEN_HTTP_IF_NONE_MATCH                            = 20,</div><div class="line"><a name="l02491"></a><span class="lineno"> 2491</span>&#160;        WSI_TOKEN_HTTP_ACCEPT_ENCODING                          = 21,</div><div class="line"><a name="l02492"></a><span class="lineno"> 2492</span>&#160;        WSI_TOKEN_HTTP_ACCEPT_LANGUAGE                          = 22,</div><div class="line"><a name="l02493"></a><span class="lineno"> 2493</span>&#160;        WSI_TOKEN_HTTP_PRAGMA                                   = 23,</div><div class="line"><a name="l02494"></a><span class="lineno"> 2494</span>&#160;        WSI_TOKEN_HTTP_CACHE_CONTROL                            = 24,</div><div class="line"><a name="l02495"></a><span class="lineno"> 2495</span>&#160;        WSI_TOKEN_HTTP_AUTHORIZATION                            = 25,</div><div class="line"><a name="l02496"></a><span class="lineno"> 2496</span>&#160;        WSI_TOKEN_HTTP_COOKIE                                   = 26,</div><div class="line"><a name="l02497"></a><span class="lineno"> 2497</span>&#160;        WSI_TOKEN_HTTP_CONTENT_LENGTH                           = 27,</div><div class="line"><a name="l02498"></a><span class="lineno"> 2498</span>&#160;        WSI_TOKEN_HTTP_CONTENT_TYPE                             = 28,</div><div class="line"><a name="l02499"></a><span class="lineno"> 2499</span>&#160;        WSI_TOKEN_HTTP_DATE                                     = 29,</div><div class="line"><a name="l02500"></a><span class="lineno"> 2500</span>&#160;        WSI_TOKEN_HTTP_RANGE                                    = 30,</div><div class="line"><a name="l02501"></a><span class="lineno"> 2501</span>&#160;        WSI_TOKEN_HTTP_REFERER                                  = 31,</div><div class="line"><a name="l02502"></a><span class="lineno"> 2502</span>&#160;        WSI_TOKEN_KEY                                           = 32,</div><div class="line"><a name="l02503"></a><span class="lineno"> 2503</span>&#160;        WSI_TOKEN_VERSION                                       = 33,</div><div class="line"><a name="l02504"></a><span class="lineno"> 2504</span>&#160;        WSI_TOKEN_SWORIGIN                                      = 34,</div><div class="line"><a name="l02505"></a><span class="lineno"> 2505</span>&#160;</div><div class="line"><a name="l02506"></a><span class="lineno"> 2506</span>&#160;        WSI_TOKEN_HTTP_COLON_AUTHORITY                          = 35,</div><div class="line"><a name="l02507"></a><span class="lineno"> 2507</span>&#160;        WSI_TOKEN_HTTP_COLON_METHOD                             = 36,</div><div class="line"><a name="l02508"></a><span class="lineno"> 2508</span>&#160;        WSI_TOKEN_HTTP_COLON_PATH                               = 37,</div><div class="line"><a name="l02509"></a><span class="lineno"> 2509</span>&#160;        WSI_TOKEN_HTTP_COLON_SCHEME                             = 38,</div><div class="line"><a name="l02510"></a><span class="lineno"> 2510</span>&#160;        WSI_TOKEN_HTTP_COLON_STATUS                             = 39,</div><div class="line"><a name="l02511"></a><span class="lineno"> 2511</span>&#160;</div><div class="line"><a name="l02512"></a><span class="lineno"> 2512</span>&#160;        WSI_TOKEN_HTTP_ACCEPT_CHARSET                           = 40,</div><div class="line"><a name="l02513"></a><span class="lineno"> 2513</span>&#160;        WSI_TOKEN_HTTP_ACCEPT_RANGES                            = 41,</div><div class="line"><a name="l02514"></a><span class="lineno"> 2514</span>&#160;        WSI_TOKEN_HTTP_ACCESS_CONTROL_ALLOW_ORIGIN              = 42,</div><div class="line"><a name="l02515"></a><span class="lineno"> 2515</span>&#160;        WSI_TOKEN_HTTP_AGE                                      = 43,</div><div class="line"><a name="l02516"></a><span class="lineno"> 2516</span>&#160;        WSI_TOKEN_HTTP_ALLOW                                    = 44,</div><div class="line"><a name="l02517"></a><span class="lineno"> 2517</span>&#160;        WSI_TOKEN_HTTP_CONTENT_DISPOSITION                      = 45,</div><div class="line"><a name="l02518"></a><span class="lineno"> 2518</span>&#160;        WSI_TOKEN_HTTP_CONTENT_ENCODING                         = 46,</div><div class="line"><a name="l02519"></a><span class="lineno"> 2519</span>&#160;        WSI_TOKEN_HTTP_CONTENT_LANGUAGE                         = 47,</div><div class="line"><a name="l02520"></a><span class="lineno"> 2520</span>&#160;        WSI_TOKEN_HTTP_CONTENT_LOCATION                         = 48,</div><div class="line"><a name="l02521"></a><span class="lineno"> 2521</span>&#160;        WSI_TOKEN_HTTP_CONTENT_RANGE                            = 49,</div><div class="line"><a name="l02522"></a><span class="lineno"> 2522</span>&#160;        WSI_TOKEN_HTTP_ETAG                                     = 50,</div><div class="line"><a name="l02523"></a><span class="lineno"> 2523</span>&#160;        WSI_TOKEN_HTTP_EXPECT                                   = 51,</div><div class="line"><a name="l02524"></a><span class="lineno"> 2524</span>&#160;        WSI_TOKEN_HTTP_EXPIRES                                  = 52,</div><div class="line"><a name="l02525"></a><span class="lineno"> 2525</span>&#160;        WSI_TOKEN_HTTP_FROM                                     = 53,</div><div class="line"><a name="l02526"></a><span class="lineno"> 2526</span>&#160;        WSI_TOKEN_HTTP_IF_MATCH                                 = 54,</div><div class="line"><a name="l02527"></a><span class="lineno"> 2527</span>&#160;        WSI_TOKEN_HTTP_IF_RANGE                                 = 55,</div><div class="line"><a name="l02528"></a><span class="lineno"> 2528</span>&#160;        WSI_TOKEN_HTTP_IF_UNMODIFIED_SINCE                      = 56,</div><div class="line"><a name="l02529"></a><span class="lineno"> 2529</span>&#160;        WSI_TOKEN_HTTP_LAST_MODIFIED                            = 57,</div><div class="line"><a name="l02530"></a><span class="lineno"> 2530</span>&#160;        WSI_TOKEN_HTTP_LINK                                     = 58,</div><div class="line"><a name="l02531"></a><span class="lineno"> 2531</span>&#160;        WSI_TOKEN_HTTP_LOCATION                                 = 59,</div><div class="line"><a name="l02532"></a><span class="lineno"> 2532</span>&#160;        WSI_TOKEN_HTTP_MAX_FORWARDS                             = 60,</div><div class="line"><a name="l02533"></a><span class="lineno"> 2533</span>&#160;        WSI_TOKEN_HTTP_PROXY_AUTHENTICATE                       = 61,</div><div class="line"><a name="l02534"></a><span class="lineno"> 2534</span>&#160;        WSI_TOKEN_HTTP_PROXY_AUTHORIZATION                      = 62,</div><div class="line"><a name="l02535"></a><span class="lineno"> 2535</span>&#160;        WSI_TOKEN_HTTP_REFRESH                                  = 63,</div><div class="line"><a name="l02536"></a><span class="lineno"> 2536</span>&#160;        WSI_TOKEN_HTTP_RETRY_AFTER                              = 64,</div><div class="line"><a name="l02537"></a><span class="lineno"> 2537</span>&#160;        WSI_TOKEN_HTTP_SERVER                                   = 65,</div><div class="line"><a name="l02538"></a><span class="lineno"> 2538</span>&#160;        WSI_TOKEN_HTTP_SET_COOKIE                               = 66,</div><div class="line"><a name="l02539"></a><span class="lineno"> 2539</span>&#160;        WSI_TOKEN_HTTP_STRICT_TRANSPORT_SECURITY                = 67,</div><div class="line"><a name="l02540"></a><span class="lineno"> 2540</span>&#160;        WSI_TOKEN_HTTP_TRANSFER_ENCODING                        = 68,</div><div class="line"><a name="l02541"></a><span class="lineno"> 2541</span>&#160;        WSI_TOKEN_HTTP_USER_AGENT                               = 69,</div><div class="line"><a name="l02542"></a><span class="lineno"> 2542</span>&#160;        WSI_TOKEN_HTTP_VARY                                     = 70,</div><div class="line"><a name="l02543"></a><span class="lineno"> 2543</span>&#160;        WSI_TOKEN_HTTP_VIA                                      = 71,</div><div class="line"><a name="l02544"></a><span class="lineno"> 2544</span>&#160;        WSI_TOKEN_HTTP_WWW_AUTHENTICATE                         = 72,</div><div class="line"><a name="l02545"></a><span class="lineno"> 2545</span>&#160;</div><div class="line"><a name="l02546"></a><span class="lineno"> 2546</span>&#160;        WSI_TOKEN_PATCH_URI                                     = 73,</div><div class="line"><a name="l02547"></a><span class="lineno"> 2547</span>&#160;        WSI_TOKEN_PUT_URI                                       = 74,</div><div class="line"><a name="l02548"></a><span class="lineno"> 2548</span>&#160;        WSI_TOKEN_DELETE_URI                                    = 75,</div><div class="line"><a name="l02549"></a><span class="lineno"> 2549</span>&#160;</div><div class="line"><a name="l02550"></a><span class="lineno"> 2550</span>&#160;        WSI_TOKEN_HTTP_URI_ARGS                                 = 76,</div><div class="line"><a name="l02551"></a><span class="lineno"> 2551</span>&#160;        WSI_TOKEN_PROXY                                         = 77,</div><div class="line"><a name="l02552"></a><span class="lineno"> 2552</span>&#160;        WSI_TOKEN_HTTP_X_REAL_IP                                = 78,</div><div class="line"><a name="l02553"></a><span class="lineno"> 2553</span>&#160;        WSI_TOKEN_HTTP1_0                                       = 79,</div><div class="line"><a name="l02554"></a><span class="lineno"> 2554</span>&#160;</div><div class="line"><a name="l02555"></a><span class="lineno"> 2555</span>&#160;        <span class="comment">/****** add new things just above ---^ ******/</span></div><div class="line"><a name="l02556"></a><span class="lineno"> 2556</span>&#160;</div><div class="line"><a name="l02557"></a><span class="lineno"> 2557</span>&#160;        <span class="comment">/* use token storage to stash these internally, not for</span></div><div class="line"><a name="l02558"></a><span class="lineno"> 2558</span>&#160;<span class="comment">         * user use */</span></div><div class="line"><a name="l02559"></a><span class="lineno"> 2559</span>&#160;</div><div class="line"><a name="l02560"></a><span class="lineno"> 2560</span>&#160;        _WSI_TOKEN_CLIENT_SENT_PROTOCOLS,</div><div class="line"><a name="l02561"></a><span class="lineno"> 2561</span>&#160;        _WSI_TOKEN_CLIENT_PEER_ADDRESS,</div><div class="line"><a name="l02562"></a><span class="lineno"> 2562</span>&#160;        _WSI_TOKEN_CLIENT_URI,</div><div class="line"><a name="l02563"></a><span class="lineno"> 2563</span>&#160;        _WSI_TOKEN_CLIENT_HOST,</div><div class="line"><a name="l02564"></a><span class="lineno"> 2564</span>&#160;        _WSI_TOKEN_CLIENT_ORIGIN,</div><div class="line"><a name="l02565"></a><span class="lineno"> 2565</span>&#160;        _WSI_TOKEN_CLIENT_METHOD,</div><div class="line"><a name="l02566"></a><span class="lineno"> 2566</span>&#160;</div><div class="line"><a name="l02567"></a><span class="lineno"> 2567</span>&#160;        <span class="comment">/* always last real token index*/</span></div><div class="line"><a name="l02568"></a><span class="lineno"> 2568</span>&#160;        WSI_TOKEN_COUNT,</div><div class="line"><a name="l02569"></a><span class="lineno"> 2569</span>&#160;</div><div class="line"><a name="l02570"></a><span class="lineno"> 2570</span>&#160;        <span class="comment">/* parser state additions, no storage associated */</span></div><div class="line"><a name="l02571"></a><span class="lineno"> 2571</span>&#160;        WSI_TOKEN_NAME_PART,</div><div class="line"><a name="l02572"></a><span class="lineno"> 2572</span>&#160;        WSI_TOKEN_SKIPPING,</div><div class="line"><a name="l02573"></a><span class="lineno"> 2573</span>&#160;        WSI_TOKEN_SKIPPING_SAW_CR,</div><div class="line"><a name="l02574"></a><span class="lineno"> 2574</span>&#160;        WSI_PARSING_COMPLETE,</div><div class="line"><a name="l02575"></a><span class="lineno"> 2575</span>&#160;        WSI_INIT_TOKEN_MUXURL,</div><div class="line"><a name="l02576"></a><span class="lineno"> 2576</span>&#160;};</div><div class="line"><a name="l02577"></a><span class="lineno"> 2577</span>&#160;</div><div class="line"><a name="l02578"></a><span class="lineno"><a class="line" href="structlws__token__limits.html"> 2578</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__token__limits.html">lws_token_limits</a> {</div><div class="line"><a name="l02579"></a><span class="lineno"><a class="line" href="structlws__token__limits.html#a6ec712306cbf8585bce7a56758a3ceff"> 2579</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> token_limit[WSI_TOKEN_COUNT]; </div><div class="line"><a name="l02580"></a><span class="lineno"> 2580</span>&#160;};</div><div class="line"><a name="l02581"></a><span class="lineno"> 2581</span>&#160;</div><div class="line"><a name="l02587"></a><span class="lineno"> 2587</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *</div><div class="line"><a name="l02588"></a><span class="lineno"> 2588</span>&#160;<a class="code" href="group__HTTP-headers-read.html#ga2c0597b2ef1d2cee35736c338bcbd17b">lws_token_to_string</a>(<span class="keyword">enum</span> lws_token_indexes token);</div><div class="line"><a name="l02589"></a><span class="lineno"> 2589</span>&#160;</div><div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>&#160;</div><div class="line"><a name="l02599"></a><span class="lineno"> 2599</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l02600"></a><span class="lineno"> 2600</span>&#160;<a class="code" href="group__HTTP-headers-read.html#ga8ade0e1ffb0da7e62b989d8d867bf6c8">lws_hdr_total_length</a>(<span class="keyword">struct</span> lws *wsi, <span class="keyword">enum</span> lws_token_indexes h);</div><div class="line"><a name="l02601"></a><span class="lineno"> 2601</span>&#160;</div><div class="line"><a name="l02611"></a><span class="lineno"> 2611</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l02612"></a><span class="lineno"> 2612</span>&#160;<a class="code" href="group__HTTP-headers-read.html#ga594f3d0ece5b09c2ccf9f98ea533bb4e">lws_hdr_fragment_length</a>(<span class="keyword">struct</span> lws *wsi, <span class="keyword">enum</span> lws_token_indexes h, <span class="keywordtype">int</span> frag_idx);</div><div class="line"><a name="l02613"></a><span class="lineno"> 2613</span>&#160;</div><div class="line"><a name="l02627"></a><span class="lineno"> 2627</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l02628"></a><span class="lineno"> 2628</span>&#160;<a class="code" href="group__HTTP-headers-read.html#ga6ce6aa1c0155ea42b7708bed271d1c77">lws_hdr_copy</a>(<span class="keyword">struct</span> lws *wsi, <span class="keywordtype">char</span> *dest, <span class="keywordtype">int</span> len, <span class="keyword">enum</span> lws_token_indexes h);</div><div class="line"><a name="l02629"></a><span class="lineno"> 2629</span>&#160;</div><div class="line"><a name="l02647"></a><span class="lineno"> 2647</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l02648"></a><span class="lineno"> 2648</span>&#160;<a class="code" href="group__HTTP-headers-read.html#gaa427cad61a9a5e3004afd65c4527b5e9">lws_hdr_copy_fragment</a>(<span class="keyword">struct</span> lws *wsi, <span class="keywordtype">char</span> *dest, <span class="keywordtype">int</span> len,</div><div class="line"><a name="l02649"></a><span class="lineno"> 2649</span>&#160;                      <span class="keyword">enum</span> lws_token_indexes h, <span class="keywordtype">int</span> frag_idx);</div><div class="line"><a name="l02650"></a><span class="lineno"> 2650</span>&#160;</div><div class="line"><a name="l02661"></a><span class="lineno"> 2661</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">const</span> <span class="keywordtype">char</span> *</div><div class="line"><a name="l02662"></a><span class="lineno"> 2662</span>&#160;<a class="code" href="group__HTTP-headers-read.html#ga84e9ce5e71a77501a0998ac403a984c2">lws_get_urlarg_by_name</a>(<span class="keyword">struct</span> lws *wsi, <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keywordtype">char</span> *buf, <span class="keywordtype">int</span> len);</div><div class="line"><a name="l02664"></a><span class="lineno"> 2664</span>&#160;</div><div class="line"><a name="l02679"></a><span class="lineno"> 2679</span>&#160;</div><div class="line"><a name="l02690"></a><span class="lineno"> 2690</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l02691"></a><span class="lineno"> 2691</span>&#160;<a class="code" href="group__HTTP-headers-create.html#ga29b7d6d2ddfdbaff3d8b607e7e3151b6">lws_add_http_header_status</a>(<span class="keyword">struct</span> lws *wsi,</div><div class="line"><a name="l02692"></a><span class="lineno"> 2692</span>&#160;                           <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> code, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> **p,</div><div class="line"><a name="l02693"></a><span class="lineno"> 2693</span>&#160;                           <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *end);</div><div class="line"><a name="l02706"></a><span class="lineno"> 2706</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l02707"></a><span class="lineno"> 2707</span>&#160;<a class="code" href="group__HTTP-headers-create.html#ga2b36bf44405755ff51c1939303b995a8">lws_add_http_header_by_name</a>(<span class="keyword">struct</span> lws *wsi, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *name,</div><div class="line"><a name="l02708"></a><span class="lineno"> 2708</span>&#160;                            <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *value, <span class="keywordtype">int</span> length,</div><div class="line"><a name="l02709"></a><span class="lineno"> 2709</span>&#160;                            <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> **p, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *end);</div><div class="line"><a name="l02723"></a><span class="lineno"> 2723</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l02724"></a><span class="lineno"> 2724</span>&#160;<a class="code" href="group__HTTP-headers-create.html#gaf74adb761b22566ad70004882712dce1">lws_add_http_header_by_token</a>(<span class="keyword">struct</span> lws *wsi, <span class="keyword">enum</span> lws_token_indexes token,</div><div class="line"><a name="l02725"></a><span class="lineno"> 2725</span>&#160;                             <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *value, <span class="keywordtype">int</span> length,</div><div class="line"><a name="l02726"></a><span class="lineno"> 2726</span>&#160;                             <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> **p, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *end);</div><div class="line"><a name="l02737"></a><span class="lineno"> 2737</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l02738"></a><span class="lineno"> 2738</span>&#160;<a class="code" href="group__HTTP-headers-create.html#gacc76a5babcb4dce1b01b1955aa7a2faf">lws_add_http_header_content_length</a>(<span class="keyword">struct</span> lws *wsi,</div><div class="line"><a name="l02739"></a><span class="lineno"> 2739</span>&#160;                                   <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> content_length,</div><div class="line"><a name="l02740"></a><span class="lineno"> 2740</span>&#160;                                   <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> **p, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *end);</div><div class="line"><a name="l02750"></a><span class="lineno"> 2750</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l02751"></a><span class="lineno"> 2751</span>&#160;<a class="code" href="group__HTTP-headers-create.html#ga4887605ff2242a54db3a7fa01f6f864b">lws_finalize_http_header</a>(<span class="keyword">struct</span> lws *wsi, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> **p,</div><div class="line"><a name="l02752"></a><span class="lineno"> 2752</span>&#160;                         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *end);</div><div class="line"><a name="l02754"></a><span class="lineno"> 2754</span>&#160;</div><div class="line"><a name="l02773"></a><span class="lineno"> 2773</span>&#160;</div><div class="line"><a name="l02776"></a><span class="lineno"><a class="line" href="group__form-parsing.html#ga41a74a822771d3dce89751aa3bce28ae"> 2776</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="group__form-parsing.html#ga41a74a822771d3dce89751aa3bce28ae">lws_spa_fileupload_states</a> {</div><div class="line"><a name="l02777"></a><span class="lineno"><a class="line" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aead3a958e7719ac273c3ba4f684f00c87f"> 2777</a></span>&#160;        <a class="code" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aead3a958e7719ac273c3ba4f684f00c87f">LWS_UFS_CONTENT</a>,</div><div class="line"><a name="l02779"></a><span class="lineno"><a class="line" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea6ce2a55a4c3695cdb640c893d95bd3a7"> 2779</a></span>&#160;        <a class="code" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea6ce2a55a4c3695cdb640c893d95bd3a7">LWS_UFS_FINAL_CONTENT</a>,</div><div class="line"><a name="l02781"></a><span class="lineno"><a class="line" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea2d25de44865bd44e5a3903a2bab9ca83"> 2781</a></span>&#160;        <a class="code" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea2d25de44865bd44e5a3903a2bab9ca83">LWS_UFS_OPEN</a></div><div class="line"><a name="l02783"></a><span class="lineno"> 2783</span>&#160;};</div><div class="line"><a name="l02784"></a><span class="lineno"> 2784</span>&#160;</div><div class="line"><a name="l02798"></a><span class="lineno"><a class="line" href="group__form-parsing.html#ga5a70527c0861c2ffa3d29333a6aa7f8e"> 2798</a></span>&#160;<span class="keyword">typedef</span> int (*<a class="code" href="group__form-parsing.html#ga5a70527c0861c2ffa3d29333a6aa7f8e">lws_spa_fileupload_cb</a>)(<span class="keywordtype">void</span> *data, <span class="keyword">const</span> <span class="keywordtype">char</span> *name,</div><div class="line"><a name="l02799"></a><span class="lineno"> 2799</span>&#160;                        <span class="keyword">const</span> <span class="keywordtype">char</span> *filename, <span class="keywordtype">char</span> *buf, <span class="keywordtype">int</span> len,</div><div class="line"><a name="l02800"></a><span class="lineno"> 2800</span>&#160;                        <span class="keyword">enum</span> <a class="code" href="group__form-parsing.html#ga41a74a822771d3dce89751aa3bce28ae">lws_spa_fileupload_states</a> state);</div><div class="line"><a name="l02801"></a><span class="lineno"> 2801</span>&#160;</div><div class="line"><a name="l02804"></a><span class="lineno"> 2804</span>&#160;<span class="keyword">struct </span>lws_spa;</div><div class="line"><a name="l02805"></a><span class="lineno"> 2805</span>&#160;</div><div class="line"><a name="l02824"></a><span class="lineno"> 2824</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">struct </span>lws_spa *</div><div class="line"><a name="l02825"></a><span class="lineno"> 2825</span>&#160;<a class="code" href="group__form-parsing.html#ga162f86762173a2bc8c28497941d74815">lws_spa_create</a>(<span class="keyword">struct</span> lws *wsi, <span class="keyword">const</span> <span class="keywordtype">char</span> * <span class="keyword">const</span> *param_names,</div><div class="line"><a name="l02826"></a><span class="lineno"> 2826</span>&#160;               <span class="keywordtype">int</span> count_params, <span class="keywordtype">int</span> max_storage, <a class="code" href="group__form-parsing.html#ga5a70527c0861c2ffa3d29333a6aa7f8e">lws_spa_fileupload_cb</a> opt_cb,</div><div class="line"><a name="l02827"></a><span class="lineno"> 2827</span>&#160;               <span class="keywordtype">void</span> *opt_data);</div><div class="line"><a name="l02828"></a><span class="lineno"> 2828</span>&#160;</div><div class="line"><a name="l02836"></a><span class="lineno"> 2836</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l02837"></a><span class="lineno"> 2837</span>&#160;<a class="code" href="group__form-parsing.html#ga9ad9ebf5ea1a7108415ed7e04cb231d2">lws_spa_process</a>(<span class="keyword">struct</span> lws_spa *spa, <span class="keyword">const</span> <span class="keywordtype">char</span> *in, <span class="keywordtype">int</span> len);</div><div class="line"><a name="l02838"></a><span class="lineno"> 2838</span>&#160;</div><div class="line"><a name="l02844"></a><span class="lineno"> 2844</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l02845"></a><span class="lineno"> 2845</span>&#160;<a class="code" href="group__form-parsing.html#ga83835bf250ee3d4a60f36a182f2b8d24">lws_spa_finalize</a>(<span class="keyword">struct</span> lws_spa *spa);</div><div class="line"><a name="l02846"></a><span class="lineno"> 2846</span>&#160;</div><div class="line"><a name="l02853"></a><span class="lineno"> 2853</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l02854"></a><span class="lineno"> 2854</span>&#160;<a class="code" href="group__form-parsing.html#ga3fbe378632f85ec9a14cc2c1687bf05f">lws_spa_get_length</a>(<span class="keyword">struct</span> lws_spa *spa, <span class="keywordtype">int</span> n);</div><div class="line"><a name="l02855"></a><span class="lineno"> 2855</span>&#160;</div><div class="line"><a name="l02861"></a><span class="lineno"> 2861</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">const</span> <span class="keywordtype">char</span> *</div><div class="line"><a name="l02862"></a><span class="lineno"> 2862</span>&#160;<a class="code" href="group__form-parsing.html#ga2da476217166da02704b90d3a8d4f3cd">lws_spa_get_string</a>(<span class="keyword">struct</span> lws_spa *spa, <span class="keywordtype">int</span> n);</div><div class="line"><a name="l02863"></a><span class="lineno"> 2863</span>&#160;</div><div class="line"><a name="l02869"></a><span class="lineno"> 2869</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l02870"></a><span class="lineno"> 2870</span>&#160;<a class="code" href="group__form-parsing.html#gaaa482f07dad3f04b391cccf0a814e13b">lws_spa_destroy</a>(<span class="keyword">struct</span> lws_spa *spa);</div><div class="line"><a name="l02872"></a><span class="lineno"> 2872</span>&#160;</div><div class="line"><a name="l02883"></a><span class="lineno"> 2883</span>&#160;</div><div class="line"><a name="l02894"></a><span class="lineno"> 2894</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">const</span> <span class="keywordtype">char</span> *</div><div class="line"><a name="l02895"></a><span class="lineno"> 2895</span>&#160;<a class="code" href="group__urlendec.html#gabc2888476e50e001c875c1a8abf455b7">lws_urlencode</a>(<span class="keywordtype">char</span> *escaped, <span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keywordtype">string</span>, <span class="keywordtype">int</span> len);</div><div class="line"><a name="l02896"></a><span class="lineno"> 2896</span>&#160;</div><div class="line"><a name="l02897"></a><span class="lineno"> 2897</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l02898"></a><span class="lineno"> 2898</span>&#160;<span class="comment"> * URLDECODE 1 / 2</span></div><div class="line"><a name="l02899"></a><span class="lineno"> 2899</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l02900"></a><span class="lineno"> 2900</span>&#160;<span class="comment"> * This simple urldecode only operates until the first &#39;\0&#39; and requires the</span></div><div class="line"><a name="l02901"></a><span class="lineno"> 2901</span>&#160;<span class="comment"> * data to exist all at once</span></div><div class="line"><a name="l02902"></a><span class="lineno"> 2902</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02915"></a><span class="lineno"> 2915</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l02916"></a><span class="lineno"> 2916</span>&#160;<a class="code" href="group__urlendec.html#gaa373a9c16acdd96c395af61ab915ece3">lws_urldecode</a>(<span class="keywordtype">char</span> *<span class="keywordtype">string</span>, <span class="keyword">const</span> <span class="keywordtype">char</span> *escaped, <span class="keywordtype">int</span> len);</div><div class="line"><a name="l02918"></a><span class="lineno"> 2918</span>&#160;</div><div class="line"><a name="l02927"></a><span class="lineno"> 2927</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l02928"></a><span class="lineno"> 2928</span>&#160;<a class="code" href="group__http.html#gac8a4a71240857dc6b2ed70456b6923f4">lws_return_http_status</a>(<span class="keyword">struct</span> lws *wsi, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> code,</div><div class="line"><a name="l02929"></a><span class="lineno"> 2929</span>&#160;                       <span class="keyword">const</span> <span class="keywordtype">char</span> *html_body);</div><div class="line"><a name="l02930"></a><span class="lineno"> 2930</span>&#160;</div><div class="line"><a name="l02941"></a><span class="lineno"> 2941</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l02942"></a><span class="lineno"> 2942</span>&#160;<a class="code" href="group__http.html#ga8fbf01e473ac421fc33ad9f8da8b8a25">lws_http_redirect</a>(<span class="keyword">struct</span> lws *wsi, <span class="keywordtype">int</span> code, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *loc, <span class="keywordtype">int</span> len,</div><div class="line"><a name="l02943"></a><span class="lineno"> 2943</span>&#160;                  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> **p, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *end);</div><div class="line"><a name="l02944"></a><span class="lineno"> 2944</span>&#160;</div><div class="line"><a name="l02953"></a><span class="lineno"> 2953</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l02954"></a><span class="lineno"> 2954</span>&#160;<a class="code" href="group__http.html#gad27aed6c66a41b2b89ffe4da2a309e8a">lws_http_transaction_completed</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l02956"></a><span class="lineno"> 2956</span>&#160;</div><div class="line"><a name="l02964"></a><span class="lineno"> 2964</span>&#160;</div><div class="line"><a name="l02975"></a><span class="lineno"> 2975</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">const</span> <span class="keywordtype">char</span> *</div><div class="line"><a name="l02976"></a><span class="lineno"> 2976</span>&#160;<a class="code" href="group__pur.html#ga9cc82f06e5ae7e71458626d7a39a5865">lws_sql_purify</a>(<span class="keywordtype">char</span> *escaped, <span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keywordtype">string</span>, <span class="keywordtype">int</span> len);</div><div class="line"><a name="l02977"></a><span class="lineno"> 2977</span>&#160;</div><div class="line"><a name="l02988"></a><span class="lineno"> 2988</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">const</span> <span class="keywordtype">char</span> *</div><div class="line"><a name="l02989"></a><span class="lineno"> 2989</span>&#160;<a class="code" href="group__pur.html#gab15187efcfa256b7c928562c182b92a3">lws_json_purify</a>(<span class="keywordtype">char</span> *escaped, <span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keywordtype">string</span>, <span class="keywordtype">int</span> len);</div><div class="line"><a name="l02991"></a><span class="lineno"> 2991</span>&#160;</div><div class="line"><a name="l02998"></a><span class="lineno"> 2998</span>&#160;</div><div class="line"><a name="l03000"></a><span class="lineno"> 3000</span>&#160;<span class="preprocessor">#ifdef LWS_USE_LIBEV</span></div><div class="line"><a name="l03001"></a><span class="lineno"> 3001</span>&#160;<span class="keyword">typedef</span> void (lws_ev_signal_cb_t)(EV_P_ <span class="keyword">struct </span>ev_signal *w, <span class="keywordtype">int</span> revents);</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;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03004"></a><span class="lineno"> 3004</span>&#160;lws_ev_sigint_cfg(<span class="keyword">struct</span> lws_context *context, <span class="keywordtype">int</span> use_ev_sigint,</div><div class="line"><a name="l03005"></a><span class="lineno"> 3005</span>&#160;                  lws_ev_signal_cb_t *cb);</div><div class="line"><a name="l03006"></a><span class="lineno"> 3006</span>&#160;</div><div class="line"><a name="l03007"></a><span class="lineno"> 3007</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03008"></a><span class="lineno"> 3008</span>&#160;lws_ev_initloop(<span class="keyword">struct</span> lws_context *context, <span class="keyword">struct</span> ev_loop *loop, <span class="keywordtype">int</span> tsi);</div><div class="line"><a name="l03009"></a><span class="lineno"> 3009</span>&#160;</div><div class="line"><a name="l03010"></a><span class="lineno"> 3010</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span></div><div class="line"><a name="l03011"></a><span class="lineno"> 3011</span>&#160;lws_ev_sigint_cb(<span class="keyword">struct</span> ev_loop *loop, <span class="keyword">struct</span> ev_signal *watcher, <span class="keywordtype">int</span> revents);</div><div class="line"><a name="l03012"></a><span class="lineno"> 3012</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* LWS_USE_LIBEV */</span><span class="preprocessor"></span></div><div class="line"><a name="l03013"></a><span class="lineno"> 3013</span>&#160;</div><div class="line"><a name="l03015"></a><span class="lineno"> 3015</span>&#160;</div><div class="line"><a name="l03022"></a><span class="lineno"> 3022</span>&#160;<span class="preprocessor">#ifdef LWS_USE_LIBUV</span></div><div class="line"><a name="l03024"></a><span class="lineno"> 3024</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03025"></a><span class="lineno"> 3025</span>&#160;lws_uv_sigint_cfg(<span class="keyword">struct</span> lws_context *context, <span class="keywordtype">int</span> use_uv_sigint,</div><div class="line"><a name="l03026"></a><span class="lineno"> 3026</span>&#160;                  uv_signal_cb cb);</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;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span></div><div class="line"><a name="l03029"></a><span class="lineno"> 3029</span>&#160;lws_libuv_run(<span class="keyword">const</span> <span class="keyword">struct</span> lws_context *context, <span class="keywordtype">int</span> tsi);</div><div class="line"><a name="l03030"></a><span class="lineno"> 3030</span>&#160;</div><div class="line"><a name="l03031"></a><span class="lineno"> 3031</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span></div><div class="line"><a name="l03032"></a><span class="lineno"> 3032</span>&#160;lws_libuv_stop(<span class="keyword">struct</span> lws_context *context);</div><div class="line"><a name="l03033"></a><span class="lineno"> 3033</span>&#160;</div><div class="line"><a name="l03034"></a><span class="lineno"> 3034</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03035"></a><span class="lineno"> 3035</span>&#160;lws_uv_initloop(<span class="keyword">struct</span> lws_context *context, uv_loop_t *loop, <span class="keywordtype">int</span> tsi);</div><div class="line"><a name="l03036"></a><span class="lineno"> 3036</span>&#160;</div><div class="line"><a name="l03037"></a><span class="lineno"> 3037</span>&#160;LWS_VISIBLE LWS_EXTERN uv_loop_t *</div><div class="line"><a name="l03038"></a><span class="lineno"> 3038</span>&#160;lws_uv_getloop(<span class="keyword">struct</span> lws_context *context, <span class="keywordtype">int</span> tsi);</div><div class="line"><a name="l03039"></a><span class="lineno"> 3039</span>&#160;</div><div class="line"><a name="l03040"></a><span class="lineno"> 3040</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span></div><div class="line"><a name="l03041"></a><span class="lineno"> 3041</span>&#160;lws_uv_sigint_cb(uv_signal_t *watcher, <span class="keywordtype">int</span> signum);</div><div class="line"><a name="l03042"></a><span class="lineno"> 3042</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* LWS_USE_LIBUV */</span><span class="preprocessor"></span></div><div class="line"><a name="l03043"></a><span class="lineno"> 3043</span>&#160;</div><div class="line"><a name="l03050"></a><span class="lineno"> 3050</span>&#160;</div><div class="line"><a name="l03051"></a><span class="lineno"> 3051</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l03052"></a><span class="lineno"> 3052</span>&#160;<span class="comment"> * NOTE: These public enums are part of the abi.  If you want to add one,</span></div><div class="line"><a name="l03053"></a><span class="lineno"> 3053</span>&#160;<span class="comment"> * add it at where specified so existing users are unaffected.</span></div><div class="line"><a name="l03054"></a><span class="lineno"> 3054</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l03055"></a><span class="lineno"> 3055</span>&#160;<span class="keyword">enum</span> pending_timeout {</div><div class="line"><a name="l03056"></a><span class="lineno"> 3056</span>&#160;        NO_PENDING_TIMEOUT                                      =  0,</div><div class="line"><a name="l03057"></a><span class="lineno"> 3057</span>&#160;        PENDING_TIMEOUT_AWAITING_PROXY_RESPONSE                 =  1,</div><div class="line"><a name="l03058"></a><span class="lineno"> 3058</span>&#160;        PENDING_TIMEOUT_AWAITING_CONNECT_RESPONSE               =  2,</div><div class="line"><a name="l03059"></a><span class="lineno"> 3059</span>&#160;        PENDING_TIMEOUT_ESTABLISH_WITH_SERVER                   =  3,</div><div class="line"><a name="l03060"></a><span class="lineno"> 3060</span>&#160;        PENDING_TIMEOUT_AWAITING_SERVER_RESPONSE                =  4,</div><div class="line"><a name="l03061"></a><span class="lineno"> 3061</span>&#160;        PENDING_TIMEOUT_AWAITING_PING                           =  5,</div><div class="line"><a name="l03062"></a><span class="lineno"> 3062</span>&#160;        PENDING_TIMEOUT_CLOSE_ACK                               =  6,</div><div class="line"><a name="l03063"></a><span class="lineno"> 3063</span>&#160;        PENDING_TIMEOUT_AWAITING_EXTENSION_CONNECT_RESPONSE     =  7,</div><div class="line"><a name="l03064"></a><span class="lineno"> 3064</span>&#160;        PENDING_TIMEOUT_SENT_CLIENT_HANDSHAKE                   =  8,</div><div class="line"><a name="l03065"></a><span class="lineno"> 3065</span>&#160;        PENDING_TIMEOUT_SSL_ACCEPT                              =  9,</div><div class="line"><a name="l03066"></a><span class="lineno"> 3066</span>&#160;        PENDING_TIMEOUT_HTTP_CONTENT                            = 10,</div><div class="line"><a name="l03067"></a><span class="lineno"> 3067</span>&#160;        PENDING_TIMEOUT_AWAITING_CLIENT_HS_SEND                 = 11,</div><div class="line"><a name="l03068"></a><span class="lineno"> 3068</span>&#160;        PENDING_FLUSH_STORED_SEND_BEFORE_CLOSE                  = 12,</div><div class="line"><a name="l03069"></a><span class="lineno"> 3069</span>&#160;        PENDING_TIMEOUT_SHUTDOWN_FLUSH                          = 13,</div><div class="line"><a name="l03070"></a><span class="lineno"> 3070</span>&#160;        PENDING_TIMEOUT_CGI                                     = 14,</div><div class="line"><a name="l03071"></a><span class="lineno"> 3071</span>&#160;        PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE                     = 15,</div><div class="line"><a name="l03072"></a><span class="lineno"> 3072</span>&#160;        PENDING_TIMEOUT_WS_PONG_CHECK_SEND_PING                 = 16,</div><div class="line"><a name="l03073"></a><span class="lineno"> 3073</span>&#160;        PENDING_TIMEOUT_WS_PONG_CHECK_GET_PONG                  = 17,</div><div class="line"><a name="l03074"></a><span class="lineno"> 3074</span>&#160;        PENDING_TIMEOUT_CLIENT_ISSUE_PAYLOAD                    = 18,</div><div class="line"><a name="l03075"></a><span class="lineno"> 3075</span>&#160;</div><div class="line"><a name="l03076"></a><span class="lineno"> 3076</span>&#160;        <span class="comment">/****** add new things just above ---^ ******/</span></div><div class="line"><a name="l03077"></a><span class="lineno"> 3077</span>&#160;};</div><div class="line"><a name="l03078"></a><span class="lineno"> 3078</span>&#160;</div><div class="line"><a name="l03088"></a><span class="lineno"> 3088</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span></div><div class="line"><a name="l03089"></a><span class="lineno"> 3089</span>&#160;<a class="code" href="group__timeout.html#gaced9f9237f6172fed9f730a2af51345a">lws_set_timeout</a>(<span class="keyword">struct</span> lws *wsi, <span class="keyword">enum</span> pending_timeout reason, <span class="keywordtype">int</span> secs);</div><div class="line"><a name="l03091"></a><span class="lineno"> 3091</span>&#160;</div><div class="line"><a name="l03097"></a><span class="lineno"> 3097</span>&#160;<span class="preprocessor">#if !defined(LWS_SIZEOFPTR)</span></div><div class="line"><a name="l03098"></a><span class="lineno"> 3098</span>&#160;<span class="preprocessor">#define LWS_SIZEOFPTR (sizeof (void *))</span></div><div class="line"><a name="l03099"></a><span class="lineno"> 3099</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l03100"></a><span class="lineno"> 3100</span>&#160;<span class="preprocessor">#if !defined(u_int64_t)</span></div><div class="line"><a name="l03101"></a><span class="lineno"> 3101</span>&#160;<span class="preprocessor">#define u_int64_t unsigned long long</span></div><div class="line"><a name="l03102"></a><span class="lineno"> 3102</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l03103"></a><span class="lineno"> 3103</span>&#160;</div><div class="line"><a name="l03104"></a><span class="lineno"> 3104</span>&#160;<span class="preprocessor">#if defined(__x86_64__)</span></div><div class="line"><a name="l03105"></a><span class="lineno"> 3105</span>&#160;<span class="preprocessor">#define _LWS_PAD_SIZE 16        </span><span class="comment">/* Intel recommended for best performance */</span><span class="preprocessor"></span></div><div class="line"><a name="l03106"></a><span class="lineno"> 3106</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l03107"></a><span class="lineno"> 3107</span>&#160;<span class="preprocessor">#define _LWS_PAD_SIZE LWS_SIZEOFPTR   </span><span class="comment">/* Size of a pointer on the target arch */</span><span class="preprocessor"></span></div><div class="line"><a name="l03108"></a><span class="lineno"> 3108</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l03109"></a><span class="lineno"> 3109</span>&#160;<span class="preprocessor">#define _LWS_PAD(n) (((n) % _LWS_PAD_SIZE) ? \</span></div><div class="line"><a name="l03110"></a><span class="lineno"> 3110</span>&#160;<span class="preprocessor">                ((n) + (_LWS_PAD_SIZE - ((n) % _LWS_PAD_SIZE))) : (n))</span></div><div class="line"><a name="l03111"></a><span class="lineno"> 3111</span>&#160;<span class="preprocessor">#define LWS_PRE _LWS_PAD(4 + 10)</span></div><div class="line"><a name="l03112"></a><span class="lineno"> 3112</span>&#160;<span class="comment">/* used prior to 1.7 and retained for backward compatibility */</span></div><div class="line"><a name="l03113"></a><span class="lineno"> 3113</span>&#160;<span class="preprocessor">#define LWS_SEND_BUFFER_PRE_PADDING LWS_PRE</span></div><div class="line"><a name="l03114"></a><span class="lineno"> 3114</span>&#160;<span class="preprocessor">#define LWS_SEND_BUFFER_POST_PADDING 0</span></div><div class="line"><a name="l03115"></a><span class="lineno"> 3115</span>&#160;</div><div class="line"><a name="l03116"></a><span class="lineno"> 3116</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l03117"></a><span class="lineno"> 3117</span>&#160;<span class="comment"> * NOTE: These public enums are part of the abi.  If you want to add one,</span></div><div class="line"><a name="l03118"></a><span class="lineno"> 3118</span>&#160;<span class="comment"> * add it at where specified so existing users are unaffected.</span></div><div class="line"><a name="l03119"></a><span class="lineno"> 3119</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l03120"></a><span class="lineno"><a class="line" href="group__sending-data.html#ga98b099cf8c1c7e38ad78501f270e193d"> 3120</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="group__sending-data.html#ga98b099cf8c1c7e38ad78501f270e193d">lws_write_protocol</a> {</div><div class="line"><a name="l03121"></a><span class="lineno"><a class="line" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da80e8f169fda236c56bfb795ed62903db"> 3121</a></span>&#160;        <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da80e8f169fda236c56bfb795ed62903db">LWS_WRITE_TEXT</a>                                          = 0,</div><div class="line"><a name="l03125"></a><span class="lineno"><a class="line" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193daf6486c0dba50c44198100717721d9ab2"> 3125</a></span>&#160;        <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193daf6486c0dba50c44198100717721d9ab2">LWS_WRITE_BINARY</a>                                        = 1,</div><div class="line"><a name="l03128"></a><span class="lineno"><a class="line" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da10047eb05b5e1c298151dc47a5b44826"> 3128</a></span>&#160;        <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da10047eb05b5e1c298151dc47a5b44826">LWS_WRITE_CONTINUATION</a>                                  = 2,</div><div class="line"><a name="l03131"></a><span class="lineno"><a class="line" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e"> 3131</a></span>&#160;        <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e">LWS_WRITE_HTTP</a>                                          = 3,</div><div class="line"><a name="l03134"></a><span class="lineno"> 3134</span>&#160;        <span class="comment">/* LWS_WRITE_CLOSE is handled by lws_close_reason() */</span></div><div class="line"><a name="l03135"></a><span class="lineno"> 3135</span>&#160;        LWS_WRITE_PING                                          = 5,</div><div class="line"><a name="l03136"></a><span class="lineno"> 3136</span>&#160;        LWS_WRITE_PONG                                          = 6,</div><div class="line"><a name="l03137"></a><span class="lineno"> 3137</span>&#160;</div><div class="line"><a name="l03138"></a><span class="lineno"> 3138</span>&#160;        <span class="comment">/* Same as write_http but we know this write ends the transaction */</span></div><div class="line"><a name="l03139"></a><span class="lineno"> 3139</span>&#160;        LWS_WRITE_HTTP_FINAL                                    = 7,</div><div class="line"><a name="l03140"></a><span class="lineno"> 3140</span>&#160;</div><div class="line"><a name="l03141"></a><span class="lineno"> 3141</span>&#160;        <span class="comment">/* HTTP2 */</span></div><div class="line"><a name="l03142"></a><span class="lineno"> 3142</span>&#160;</div><div class="line"><a name="l03143"></a><span class="lineno"><a class="line" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dafe5a38e940ce56708ac814627e9c0917"> 3143</a></span>&#160;        <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dafe5a38e940ce56708ac814627e9c0917">LWS_WRITE_HTTP_HEADERS</a>                                  = 8,</div><div class="line"><a name="l03150"></a><span class="lineno"> 3150</span>&#160;        <span class="comment">/****** add new things just above ---^ ******/</span></div><div class="line"><a name="l03151"></a><span class="lineno"> 3151</span>&#160;</div><div class="line"><a name="l03152"></a><span class="lineno"> 3152</span>&#160;        <span class="comment">/* flags */</span></div><div class="line"><a name="l03153"></a><span class="lineno"> 3153</span>&#160;</div><div class="line"><a name="l03154"></a><span class="lineno"><a class="line" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da115440f272a5d55518adfc8099acfee3"> 3154</a></span>&#160;        <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da115440f272a5d55518adfc8099acfee3">LWS_WRITE_NO_FIN</a> = 0x40,</div><div class="line"><a name="l03157"></a><span class="lineno"><a class="line" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da220d8e8652d9b97fb66e476e2a60ffce"> 3157</a></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="l03161"></a><span class="lineno"> 3161</span>&#160;};</div><div class="line"><a name="l03162"></a><span class="lineno"> 3162</span>&#160;</div><div class="line"><a name="l03163"></a><span class="lineno"> 3163</span>&#160;</div><div class="line"><a name="l03235"></a><span class="lineno"> 3235</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03236"></a><span class="lineno"> 3236</span>&#160;<a class="code" href="group__sending-data.html#gafd5fdd285a0e25ba7e3e1051deec1001">lws_write</a>(<span class="keyword">struct</span> lws *wsi, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *buf, <span class="keywordtype">size_t</span> len,</div><div class="line"><a name="l03237"></a><span class="lineno"> 3237</span>&#160;          <span class="keyword">enum</span> <a class="code" href="group__sending-data.html#ga98b099cf8c1c7e38ad78501f270e193d">lws_write_protocol</a> protocol);</div><div class="line"><a name="l03238"></a><span class="lineno"> 3238</span>&#160;</div><div class="line"><a name="l03239"></a><span class="lineno"> 3239</span>&#160;<span class="comment">/* helper for case where buffer may be const */</span></div><div class="line"><a name="l03240"></a><span class="lineno"> 3240</span>&#160;<span class="preprocessor">#define lws_write_http(wsi, buf, len) \</span></div><div class="line"><a name="l03241"></a><span class="lineno"> 3241</span>&#160;<span class="preprocessor">        lws_write(wsi, (unsigned char *)(buf), len, LWS_WRITE_HTTP)</span></div><div class="line"><a name="l03242"></a><span class="lineno"> 3242</span>&#160;</div><div class="line"><a name="l03244"></a><span class="lineno"> 3244</span>&#160;</div><div class="line"><a name="l03263"></a><span class="lineno"> 3263</span>&#160;</div><div class="line"><a name="l03276"></a><span class="lineno"> 3276</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03277"></a><span class="lineno"> 3277</span>&#160;<a class="code" href="group__callback-when-writeable.html#ga941caaa468bc507b1cae52275f58800d">lws_callback_on_writable</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l03278"></a><span class="lineno"> 3278</span>&#160;</div><div class="line"><a name="l03292"></a><span class="lineno"> 3292</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03293"></a><span class="lineno"> 3293</span>&#160;<a class="code" href="group__callback-when-writeable.html#gabbe4655c7eeb3eb1671b2323ec6b3107">lws_callback_on_writable_all_protocol</a>(<span class="keyword">const</span> <span class="keyword">struct</span> lws_context *context,</div><div class="line"><a name="l03294"></a><span class="lineno"> 3294</span>&#160;                                      <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlws__protocols.html">lws_protocols</a> *protocol);</div><div class="line"><a name="l03295"></a><span class="lineno"> 3295</span>&#160;</div><div class="line"><a name="l03309"></a><span class="lineno"> 3309</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03310"></a><span class="lineno"> 3310</span>&#160;<a class="code" href="group__callback-when-writeable.html#ga8570860e191b62db264f2bac67354ea8">lws_callback_on_writable_all_protocol_vhost</a>(<span class="keyword">const</span> <span class="keyword">struct</span> lws_vhost *vhost,</div><div class="line"><a name="l03311"></a><span class="lineno"> 3311</span>&#160;                                      <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlws__protocols.html">lws_protocols</a> *protocol);</div><div class="line"><a name="l03312"></a><span class="lineno"> 3312</span>&#160;</div><div class="line"><a name="l03325"></a><span class="lineno"> 3325</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03326"></a><span class="lineno"> 3326</span>&#160;<a class="code" href="group__callback-when-writeable.html#gacf04bbe089f47c971c6408c5efe2ac70">lws_callback_all_protocol</a>(<span class="keyword">struct</span> lws_context *context,</div><div class="line"><a name="l03327"></a><span class="lineno"> 3327</span>&#160;                          <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlws__protocols.html">lws_protocols</a> *protocol, <span class="keywordtype">int</span> reason);</div><div class="line"><a name="l03328"></a><span class="lineno"> 3328</span>&#160;</div><div class="line"><a name="l03341"></a><span class="lineno"> 3341</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03342"></a><span class="lineno"> 3342</span>&#160;<a class="code" href="group__callback-when-writeable.html#ga13c984d8c5a44a745fd02bc2fba36053">lws_callback_all_protocol_vhost</a>(<span class="keyword">struct</span> lws_vhost *vh,</div><div class="line"><a name="l03343"></a><span class="lineno"> 3343</span>&#160;                          <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlws__protocols.html">lws_protocols</a> *protocol, <span class="keywordtype">int</span> reason);</div><div class="line"><a name="l03344"></a><span class="lineno"> 3344</span>&#160;</div><div class="line"><a name="l03358"></a><span class="lineno"> 3358</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03359"></a><span class="lineno"> 3359</span>&#160;<a class="code" href="group__callback-when-writeable.html#ga60939cf0c073d933fde3d17f3591caf5">lws_callback_vhost_protocols</a>(<span class="keyword">struct</span> lws *wsi, <span class="keywordtype">int</span> reason, <span class="keywordtype">void</span> *in, <span class="keywordtype">int</span> len);</div><div class="line"><a name="l03360"></a><span class="lineno"> 3360</span>&#160;</div><div class="line"><a name="l03361"></a><span class="lineno"> 3361</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03362"></a><span class="lineno"> 3362</span>&#160;lws_callback_http_dummy(<span class="keyword">struct</span> lws *wsi, <span class="keyword">enum</span> <a class="code" href="group__usercb.html#gad62860e19975ba4c4af401c3cdb6abf7">lws_callback_reasons</a> reason,</div><div class="line"><a name="l03363"></a><span class="lineno"> 3363</span>&#160;                    <span class="keywordtype">void</span> *user, <span class="keywordtype">void</span> *in, <span class="keywordtype">size_t</span> len);</div><div class="line"><a name="l03364"></a><span class="lineno"> 3364</span>&#160;</div><div class="line"><a name="l03372"></a><span class="lineno"> 3372</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03373"></a><span class="lineno"> 3373</span>&#160;<a class="code" href="group__callback-when-writeable.html#gaa709e02a10558753c851e58f1e2c16ba">lws_get_socket_fd</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l03374"></a><span class="lineno"> 3374</span>&#160;</div><div class="line"><a name="l03396"></a><span class="lineno"> 3396</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">size_t</span></div><div class="line"><a name="l03397"></a><span class="lineno"> 3397</span>&#160;<a class="code" href="group__callback-when-writeable.html#gac4643fe16b0940ae5b68b4ee6195cbde">lws_get_peer_write_allowance</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l03399"></a><span class="lineno"> 3399</span>&#160;</div><div class="line"><a name="l03410"></a><span class="lineno"> 3410</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03411"></a><span class="lineno"> 3411</span>&#160;<a class="code" href="libwebsockets_8h.html#adf4abd01e8c43f07c6e498ce13590c3e">lws_rx_flow_control</a>(<span class="keyword">struct</span> lws *wsi, <span class="keywordtype">int</span> enable);</div><div class="line"><a name="l03412"></a><span class="lineno"> 3412</span>&#160;</div><div class="line"><a name="l03422"></a><span class="lineno"> 3422</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span></div><div class="line"><a name="l03423"></a><span class="lineno"> 3423</span>&#160;<a class="code" href="libwebsockets_8h.html#a5e627dbf1db48170ef486edbaf268672">lws_rx_flow_allow_all_protocol</a>(<span class="keyword">const</span> <span class="keyword">struct</span> lws_context *context,</div><div class="line"><a name="l03424"></a><span class="lineno"> 3424</span>&#160;                               <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlws__protocols.html">lws_protocols</a> *protocol);</div><div class="line"><a name="l03425"></a><span class="lineno"> 3425</span>&#160;</div><div class="line"><a name="l03442"></a><span class="lineno"> 3442</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">size_t</span></div><div class="line"><a name="l03443"></a><span class="lineno"> 3443</span>&#160;<a class="code" href="libwebsockets_8h.html#a72fe65e83b8bb03f904a1a256c673536">lws_remaining_packet_payload</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l03444"></a><span class="lineno"> 3444</span>&#160;</div><div class="line"><a name="l03445"></a><span class="lineno"> 3445</span>&#160;</div><div class="line"><a name="l03454"></a><span class="lineno"> 3454</span>&#160;</div><div class="line"><a name="l03467"></a><span class="lineno"> 3467</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">struct </span>lws *</div><div class="line"><a name="l03468"></a><span class="lineno"> 3468</span>&#160;<a class="code" href="group__sock-adopt.html#gabe71b7462afb21c767bdc67334f305af">lws_adopt_socket</a>(<span class="keyword">struct</span> lws_context *context, lws_sockfd_type accept_fd);</div><div class="line"><a name="l03491"></a><span class="lineno"> 3491</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">struct </span>lws *</div><div class="line"><a name="l03492"></a><span class="lineno"> 3492</span>&#160;<a class="code" href="group__sock-adopt.html#gab2d045df0f81afe00891aaed312d552b">lws_adopt_socket_readbuf</a>(<span class="keyword">struct</span> lws_context *context, lws_sockfd_type accept_fd,</div><div class="line"><a name="l03493"></a><span class="lineno"> 3493</span>&#160;                <span class="keyword">const</span> <span class="keywordtype">char</span> *readbuf, <span class="keywordtype">size_t</span> len);</div><div class="line"><a name="l03495"></a><span class="lineno"> 3495</span>&#160;</div><div class="line"><a name="l03501"></a><span class="lineno"> 3501</span>&#160;</div><div class="line"><a name="l03512"></a><span class="lineno"> 3512</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">const</span> <span class="keywordtype">char</span> * LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l03513"></a><span class="lineno"> 3513</span>&#160;<a class="code" href="group__net.html#gad0df22db2be9fc65a667a1e83f9a92a4">lws_canonical_hostname</a>(<span class="keyword">struct</span> lws_context *context);</div><div class="line"><a name="l03514"></a><span class="lineno"> 3514</span>&#160;</div><div class="line"><a name="l03529"></a><span class="lineno"> 3529</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span></div><div class="line"><a name="l03530"></a><span class="lineno"> 3530</span>&#160;<a class="code" href="group__net.html#ga092e5f473b3347f03ffeef8a950080f3">lws_get_peer_addresses</a>(<span class="keyword">struct</span> lws *wsi, lws_sockfd_type fd, <span class="keywordtype">char</span> *name,</div><div class="line"><a name="l03531"></a><span class="lineno"> 3531</span>&#160;                       <span class="keywordtype">int</span> name_len, <span class="keywordtype">char</span> *rip, <span class="keywordtype">int</span> rip_len);</div><div class="line"><a name="l03532"></a><span class="lineno"> 3532</span>&#160;</div><div class="line"><a name="l03543"></a><span class="lineno"> 3543</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">const</span> <span class="keywordtype">char</span> *</div><div class="line"><a name="l03544"></a><span class="lineno"> 3544</span>&#160;<a class="code" href="group__net.html#gad01014fed09759741b6d23afccfdaacc">lws_get_peer_simple</a>(<span class="keyword">struct</span> lws *wsi, <span class="keywordtype">char</span> *name, <span class="keywordtype">int</span> namelen);</div><div class="line"><a name="l03545"></a><span class="lineno"> 3545</span>&#160;<span class="preprocessor">#ifndef LWS_WITH_ESP8266</span></div><div class="line"><a name="l03546"></a><span class="lineno"> 3546</span>&#160;</div><div class="line"><a name="l03557"></a><span class="lineno"> 3557</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03558"></a><span class="lineno"> 3558</span>&#160;<a class="code" href="group__net.html#ga869d8bdffb0f2a7ce08e3ce10d6be3d8">lws_interface_to_sa</a>(<span class="keywordtype">int</span> ipv6, <span class="keyword">const</span> <span class="keywordtype">char</span> *ifname, <span class="keyword">struct</span> sockaddr_in *addr,</div><div class="line"><a name="l03559"></a><span class="lineno"> 3559</span>&#160;                    <span class="keywordtype">size_t</span> addrlen);</div><div class="line"><a name="l03561"></a><span class="lineno"> 3561</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l03562"></a><span class="lineno"> 3562</span>&#160;</div><div class="line"><a name="l03568"></a><span class="lineno"> 3568</span>&#160;</div><div class="line"><a name="l03581"></a><span class="lineno"> 3581</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03582"></a><span class="lineno"> 3582</span>&#160;<a class="code" href="group__misc.html#ga9f37d0e357de2ab4170723fcdb665d21">lws_snprintf</a>(<span class="keywordtype">char</span> *str, <span class="keywordtype">size_t</span> size, <span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...);</div><div class="line"><a name="l03583"></a><span class="lineno"> 3583</span>&#160;</div><div class="line"><a name="l03595"></a><span class="lineno"> 3595</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03596"></a><span class="lineno"> 3596</span>&#160;<a class="code" href="group__misc.html#ga58f906c6be0ca80efd813f694569dd4a">lws_get_random</a>(<span class="keyword">struct</span> lws_context *context, <span class="keywordtype">void</span> *buf, <span class="keywordtype">int</span> len);</div><div class="line"><a name="l03604"></a><span class="lineno"> 3604</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l03605"></a><span class="lineno"> 3605</span>&#160;<a class="code" href="group__misc.html#gace5171b1dbbc03ec89a98f8afdb5c9af">lws_daemonize</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *_lock_path);</div><div class="line"><a name="l03611"></a><span class="lineno"> 3611</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">const</span> <span class="keywordtype">char</span> * LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l03612"></a><span class="lineno"> 3612</span>&#160;<a class="code" href="group__misc.html#gac6abfc0b2bd5b2f09281a4432bb2f5f0">lws_get_library_version</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l03613"></a><span class="lineno"> 3613</span>&#160;</div><div class="line"><a name="l03620"></a><span class="lineno"> 3620</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span> *</div><div class="line"><a name="l03621"></a><span class="lineno"> 3621</span>&#160;<a class="code" href="group__misc.html#gaa194584fff9698f3b280658f770ccd0f">lws_wsi_user</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l03622"></a><span class="lineno"> 3622</span>&#160;</div><div class="line"><a name="l03634"></a><span class="lineno"> 3634</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l03635"></a><span class="lineno"> 3635</span>&#160;<a class="code" href="group__misc.html#ga1ec0d9faac5d3a5824d765c287c043aa">lws_parse_uri</a>(<span class="keywordtype">char</span> *p, <span class="keyword">const</span> <span class="keywordtype">char</span> **prot, <span class="keyword">const</span> <span class="keywordtype">char</span> **ads, <span class="keywordtype">int</span> *port,</div><div class="line"><a name="l03636"></a><span class="lineno"> 3636</span>&#160;              <span class="keyword">const</span> <span class="keywordtype">char</span> **path);</div><div class="line"><a name="l03637"></a><span class="lineno"> 3637</span>&#160;</div><div class="line"><a name="l03641"></a><span class="lineno"> 3641</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span></div><div class="line"><a name="l03642"></a><span class="lineno"> 3642</span>&#160;<a class="code" href="group__misc.html#ga33bf2635033710b25f931b57ed663e1e">lws_now_secs</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l03643"></a><span class="lineno"> 3643</span>&#160;</div><div class="line"><a name="l03653"></a><span class="lineno"> 3653</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">struct </span>lws_context * LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l03654"></a><span class="lineno"> 3654</span>&#160;<a class="code" href="group__misc.html#ga0af4f7d2dd375aeedcfa7eb0e1101c4b">lws_get_context</a>(<span class="keyword">const</span> <span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l03655"></a><span class="lineno"> 3655</span>&#160;</div><div class="line"><a name="l03665"></a><span class="lineno"> 3665</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l03666"></a><span class="lineno"> 3666</span>&#160;<a class="code" href="group__misc.html#ga629f48268fd1856b54b11172991b97d9">lws_get_count_threads</a>(<span class="keyword">struct</span> lws_context *context);</div><div class="line"><a name="l03667"></a><span class="lineno"> 3667</span>&#160;</div><div class="line"><a name="l03675"></a><span class="lineno"> 3675</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">struct </span>lws * LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l03676"></a><span class="lineno"> 3676</span>&#160;<a class="code" href="group__misc.html#ga8930fe36a3f3eefe4a6a4fd499d8e899">lws_get_parent</a>(<span class="keyword">const</span> <span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l03677"></a><span class="lineno"> 3677</span>&#160;</div><div class="line"><a name="l03684"></a><span class="lineno"> 3684</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">struct </span>lws * LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l03685"></a><span class="lineno"> 3685</span>&#160;<a class="code" href="group__misc.html#gacae4d7b6a8d22e4c2d82ff8b12c1e234">lws_get_child</a>(<span class="keyword">const</span> <span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l03686"></a><span class="lineno"> 3686</span>&#160;</div><div class="line"><a name="l03687"></a><span class="lineno"> 3687</span>&#160;</div><div class="line"><a name="l03688"></a><span class="lineno"> 3688</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l03689"></a><span class="lineno"> 3689</span>&#160;<span class="comment"> * \deprecated DEPRECATED Note: this is not normally needed as a user api.</span></div><div class="line"><a name="l03690"></a><span class="lineno"> 3690</span>&#160;<span class="comment"> * It&#39;s provided in case it is</span></div><div class="line"><a name="l03691"></a><span class="lineno"> 3691</span>&#160;<span class="comment"> * useful when integrating with other app poll loop service code.</span></div><div class="line"><a name="l03692"></a><span class="lineno"> 3692</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l03693"></a><span class="lineno"> 3693</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03694"></a><span class="lineno"> 3694</span>&#160;lws_read(<span class="keyword">struct</span> lws *wsi, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *buf, <span class="keywordtype">size_t</span> len);</div><div class="line"><a name="l03695"></a><span class="lineno"> 3695</span>&#160;</div><div class="line"><a name="l03703"></a><span class="lineno"> 3703</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span></div><div class="line"><a name="l03704"></a><span class="lineno"> 3704</span>&#160;<a class="code" href="group__misc.html#gab321ed812f46f6dc7ef9e3ca6f00cf1b">lws_set_allocator</a>(<span class="keywordtype">void</span> *(*realloc)(<span class="keywordtype">void</span> *ptr, <span class="keywordtype">size_t</span> size));</div><div class="line"><a name="l03706"></a><span class="lineno"> 3706</span>&#160;</div><div class="line"><a name="l03712"></a><span class="lineno"> 3712</span>&#160;</div><div class="line"><a name="l03719"></a><span class="lineno"> 3719</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l03720"></a><span class="lineno"> 3720</span>&#160;<a class="code" href="group__wsstatus.html#ga2bb3655329b4651cd06f79ee3a764421">lws_send_pipe_choked</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l03721"></a><span class="lineno"> 3721</span>&#160;</div><div class="line"><a name="l03726"></a><span class="lineno"> 3726</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03727"></a><span class="lineno"> 3727</span>&#160;<a class="code" href="group__wsstatus.html#ga08e9ee165fca503fd9427d55cfecac37">lws_is_final_fragment</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l03728"></a><span class="lineno"> 3728</span>&#160;</div><div class="line"><a name="l03733"></a><span class="lineno"> 3733</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span></div><div class="line"><a name="l03734"></a><span class="lineno"> 3734</span>&#160;<a class="code" href="group__wsstatus.html#ga3df5045656dfb6b0e63a38de2dca79d2">lws_get_reserved_bits</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l03735"></a><span class="lineno"> 3735</span>&#160;</div><div class="line"><a name="l03752"></a><span class="lineno"> 3752</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l03753"></a><span class="lineno"> 3753</span>&#160;<a class="code" href="group__wsstatus.html#gaeca4afc94b1f026034f99cbba37e2f85">lws_partial_buffered</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l03754"></a><span class="lineno"> 3754</span>&#160;</div><div class="line"><a name="l03764"></a><span class="lineno"> 3764</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l03765"></a><span class="lineno"> 3765</span>&#160;<a class="code" href="group__wsstatus.html#gaccd9c59336efad8af0554f79cc5966fd">lws_frame_is_binary</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l03766"></a><span class="lineno"> 3766</span>&#160;</div><div class="line"><a name="l03775"></a><span class="lineno"> 3775</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03776"></a><span class="lineno"> 3776</span>&#160;<a class="code" href="group__wsstatus.html#ga26a140623d202dd2bf2004deb6994baa">lws_is_ssl</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l03781"></a><span class="lineno"> 3781</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03782"></a><span class="lineno"> 3782</span>&#160;<a class="code" href="group__wsstatus.html#ga4ad226d5e01024b4046f4a5a37199aa1">lws_is_cgi</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l03784"></a><span class="lineno"> 3784</span>&#160;</div><div class="line"><a name="l03785"></a><span class="lineno"> 3785</span>&#160;</div><div class="line"><a name="l03791"></a><span class="lineno"> 3791</span>&#160;<span class="preprocessor">#ifdef LWS_SHA1_USE_OPENSSL_NAME</span></div><div class="line"><a name="l03793"></a><span class="lineno"> 3793</span>&#160;<span class="preprocessor">#define lws_SHA1 SHA1</span></div><div class="line"><a name="l03794"></a><span class="lineno"> 3794</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l03795"></a><span class="lineno"> 3795</span>&#160;</div><div class="line"><a name="l03804"></a><span class="lineno"> 3804</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *</div><div class="line"><a name="l03805"></a><span class="lineno"> 3805</span>&#160;<a class="code" href="group__sha.html#ga7b09ab74646266f0b555103b3bb8dfe5">lws_SHA1</a>(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *d, <span class="keywordtype">size_t</span> n, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *md);</div><div class="line"><a name="l03806"></a><span class="lineno"> 3806</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l03807"></a><span class="lineno"> 3807</span>&#160;</div><div class="line"><a name="l03817"></a><span class="lineno"> 3817</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03818"></a><span class="lineno"> 3818</span>&#160;<a class="code" href="group__sha.html#gaf39765e4a3b413efb65e4698b2ec3575">lws_b64_encode_string</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *in, <span class="keywordtype">int</span> in_len, <span class="keywordtype">char</span> *out, <span class="keywordtype">int</span> out_size);</div><div class="line"><a name="l03828"></a><span class="lineno"> 3828</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03829"></a><span class="lineno"> 3829</span>&#160;<a class="code" href="group__sha.html#ga66316e6a5a0644a09d5a10e919dfdd8d">lws_b64_decode_string</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *in, <span class="keywordtype">char</span> *out, <span class="keywordtype">int</span> out_size);</div><div class="line"><a name="l03831"></a><span class="lineno"> 3831</span>&#160;</div><div class="line"><a name="l03832"></a><span class="lineno"> 3832</span>&#160;</div><div class="line"><a name="l03842"></a><span class="lineno"> 3842</span>&#160;<span class="preprocessor">#ifdef LWS_WITH_CGI</span></div><div class="line"><a name="l03843"></a><span class="lineno"> 3843</span>&#160;<span class="keyword">enum</span> lws_enum_stdinouterr {</div><div class="line"><a name="l03844"></a><span class="lineno"> 3844</span>&#160;        LWS_STDIN = 0,</div><div class="line"><a name="l03845"></a><span class="lineno"> 3845</span>&#160;        LWS_STDOUT = 1,</div><div class="line"><a name="l03846"></a><span class="lineno"> 3846</span>&#160;        LWS_STDERR = 2,</div><div class="line"><a name="l03847"></a><span class="lineno"> 3847</span>&#160;};</div><div class="line"><a name="l03848"></a><span class="lineno"> 3848</span>&#160;</div><div class="line"><a name="l03849"></a><span class="lineno"> 3849</span>&#160;<span class="keyword">enum</span> lws_cgi_hdr_state {</div><div class="line"><a name="l03850"></a><span class="lineno"> 3850</span>&#160;        LCHS_HEADER,</div><div class="line"><a name="l03851"></a><span class="lineno"> 3851</span>&#160;        LCHS_CR1,</div><div class="line"><a name="l03852"></a><span class="lineno"> 3852</span>&#160;        LCHS_LF1,</div><div class="line"><a name="l03853"></a><span class="lineno"> 3853</span>&#160;        LCHS_CR2,</div><div class="line"><a name="l03854"></a><span class="lineno"> 3854</span>&#160;        LCHS_LF2,</div><div class="line"><a name="l03855"></a><span class="lineno"> 3855</span>&#160;        LHCS_PAYLOAD,</div><div class="line"><a name="l03856"></a><span class="lineno"> 3856</span>&#160;        LCHS_SINGLE_0A,</div><div class="line"><a name="l03857"></a><span class="lineno"> 3857</span>&#160;};</div><div class="line"><a name="l03858"></a><span class="lineno"> 3858</span>&#160;</div><div class="line"><a name="l03859"></a><span class="lineno"><a class="line" href="structlws__cgi__args.html"> 3859</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__cgi__args.html">lws_cgi_args</a> {</div><div class="line"><a name="l03860"></a><span class="lineno"><a class="line" href="structlws__cgi__args.html#a4ccc1058e7e914a26eef31ab2ad46aa1"> 3860</a></span>&#160;        <span class="keyword">struct </span>lws **<a class="code" href="structlws__cgi__args.html#a4ccc1058e7e914a26eef31ab2ad46aa1">stdwsi</a>; </div><div class="line"><a name="l03861"></a><span class="lineno"><a class="line" href="structlws__cgi__args.html#adeee220b29aeacc34632c38e50f0f5a5"> 3861</a></span>&#160;        <span class="keyword">enum</span> lws_enum_stdinouterr ch; </div><div class="line"><a name="l03862"></a><span class="lineno"><a class="line" href="structlws__cgi__args.html#a8ac842084688c02f3f94694ef700d8f7"> 3862</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *<a class="code" href="structlws__cgi__args.html#a8ac842084688c02f3f94694ef700d8f7">data</a>; </div><div class="line"><a name="l03863"></a><span class="lineno"><a class="line" href="structlws__cgi__args.html#a741c11b9aa05997ec45a3400d7fb7739"> 3863</a></span>&#160;        <span class="keyword">enum</span> lws_cgi_hdr_state hdr_state; </div><div class="line"><a name="l03864"></a><span class="lineno"><a class="line" href="structlws__cgi__args.html#a36e5c256433c187bd0eaa9c1ca667f1d"> 3864</a></span>&#160;        <span class="keywordtype">int</span> <a class="code" href="structlws__cgi__args.html#a36e5c256433c187bd0eaa9c1ca667f1d">len</a>; </div><div class="line"><a name="l03865"></a><span class="lineno"> 3865</span>&#160;};</div><div class="line"><a name="l03866"></a><span class="lineno"> 3866</span>&#160;</div><div class="line"><a name="l03867"></a><span class="lineno"> 3867</span>&#160;</div><div class="line"><a name="l03877"></a><span class="lineno"> 3877</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03878"></a><span class="lineno"> 3878</span>&#160;<a class="code" href="libwebsockets_8h.html#af52923473c59e643a974d65e12290831">lws_cgi</a>(<span class="keyword">struct</span> lws *wsi, <span class="keyword">const</span> <span class="keywordtype">char</span> * <span class="keyword">const</span> *exec_array,</div><div class="line"><a name="l03879"></a><span class="lineno"> 3879</span>&#160;        <span class="keywordtype">int</span> script_uri_path_len, <span class="keywordtype">int</span> timeout_secs,</div><div class="line"><a name="l03880"></a><span class="lineno"> 3880</span>&#160;        <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlws__protocol__vhost__options.html">lws_protocol_vhost_options</a> *mp_cgienv);</div><div class="line"><a name="l03881"></a><span class="lineno"> 3881</span>&#160;</div><div class="line"><a name="l03887"></a><span class="lineno"> 3887</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03888"></a><span class="lineno"> 3888</span>&#160;<a class="code" href="libwebsockets_8h.html#a5326d3402af8429a166dd991dc65c4a2">lws_cgi_write_split_stdout_headers</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l03889"></a><span class="lineno"> 3889</span>&#160;</div><div class="line"><a name="l03895"></a><span class="lineno"> 3895</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l03896"></a><span class="lineno"> 3896</span>&#160;<a class="code" href="libwebsockets_8h.html#a27bb0b3cdcd0af839c928c253b521ff4">lws_cgi_kill</a>(<span class="keyword">struct</span> lws *wsi);</div><div class="line"><a name="l03897"></a><span class="lineno"> 3897</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l03898"></a><span class="lineno"> 3898</span>&#160;</div><div class="line"><a name="l03900"></a><span class="lineno"> 3900</span>&#160;</div><div class="line"><a name="l03917"></a><span class="lineno"> 3917</span>&#160;</div><div class="line"><a name="l03923"></a><span class="lineno"><a class="line" href="structlws__plat__file__ops.html"> 3923</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__plat__file__ops.html">lws_plat_file_ops</a> {</div><div class="line"><a name="l03924"></a><span class="lineno"><a class="line" href="structlws__plat__file__ops.html#ad37a97abc68d0af967cef874f4d8df32"> 3924</a></span>&#160;        lws_filefd_type (*open)(<span class="keyword">struct </span>lws *wsi, <span class="keyword">const</span> <span class="keywordtype">char</span> *filename,</div><div class="line"><a name="l03925"></a><span class="lineno"> 3925</span>&#160;                                <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *filelen, <span class="keywordtype">int</span> flags);</div><div class="line"><a name="l03929"></a><span class="lineno"><a class="line" href="structlws__plat__file__ops.html#a034ec96f2fbaf52b4aa3e82d20795f7b"> 3929</a></span>&#160;        int (*close)(<span class="keyword">struct </span>lws *wsi, lws_filefd_type fd);</div><div class="line"><a name="l03931"></a><span class="lineno"><a class="line" href="structlws__plat__file__ops.html#abfcda19b003dcc13c61ff9e2bb4ff869"> 3931</a></span>&#160;        <span class="keywordtype">unsigned</span> long (*seek_cur)(<span class="keyword">struct </span>lws *wsi, lws_filefd_type fd,</div><div class="line"><a name="l03932"></a><span class="lineno"> 3932</span>&#160;                                  <span class="keywordtype">long</span> offset_from_cur_pos);</div><div class="line"><a name="l03934"></a><span class="lineno"><a class="line" href="structlws__plat__file__ops.html#a01f483807a9862736b17ba9ed5110c40"> 3934</a></span>&#160;        int (*read)(<span class="keyword">struct </span>lws *wsi, lws_filefd_type fd, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *amount,</div><div class="line"><a name="l03935"></a><span class="lineno"> 3935</span>&#160;                    <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *buf, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> len);</div><div class="line"><a name="l03937"></a><span class="lineno"><a class="line" href="structlws__plat__file__ops.html#a1fae8330ee94649a3551e31a30809793"> 3937</a></span>&#160;        int (*write)(<span class="keyword">struct </span>lws *wsi, lws_filefd_type fd, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *amount,</div><div class="line"><a name="l03938"></a><span class="lineno"> 3938</span>&#160;                     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *buf, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> len);</div><div class="line"><a name="l03941"></a><span class="lineno"> 3941</span>&#160;        <span class="comment">/* Add new things just above here ---^</span></div><div class="line"><a name="l03942"></a><span class="lineno"> 3942</span>&#160;<span class="comment">         * This is part of the ABI, don&#39;t needlessly break compatibility */</span></div><div class="line"><a name="l03943"></a><span class="lineno"> 3943</span>&#160;};</div><div class="line"><a name="l03944"></a><span class="lineno"> 3944</span>&#160;</div><div class="line"><a name="l03950"></a><span class="lineno"> 3950</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keyword">struct </span><a class="code" href="structlws__plat__file__ops.html">lws_plat_file_ops</a> * LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l03951"></a><span class="lineno"> 3951</span>&#160;<a class="code" href="group__fops.html#gac08aef64c4c34647ed699b24759b6b0e">lws_get_fops</a>(<span class="keyword">struct</span> lws_context *context);</div><div class="line"><a name="l03952"></a><span class="lineno"> 3952</span>&#160;</div><div class="line"><a name="l03961"></a><span class="lineno"> 3961</span>&#160;<span class="keyword">static</span> LWS_INLINE lws_filefd_type LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l03962"></a><span class="lineno"> 3962</span>&#160;lws_plat_file_open(<span class="keyword">struct</span> lws *wsi, <span class="keyword">const</span> <span class="keywordtype">char</span> *filename,</div><div class="line"><a name="l03963"></a><span class="lineno"> 3963</span>&#160;                   <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *filelen, <span class="keywordtype">int</span> flags)</div><div class="line"><a name="l03964"></a><span class="lineno"> 3964</span>&#160;{</div><div class="line"><a name="l03965"></a><span class="lineno"> 3965</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="group__fops.html#gac08aef64c4c34647ed699b24759b6b0e">lws_get_fops</a>(<a class="code" href="group__misc.html#ga0af4f7d2dd375aeedcfa7eb0e1101c4b">lws_get_context</a>(wsi))-&gt;<a class="code" href="structlws__plat__file__ops.html#ad37a97abc68d0af967cef874f4d8df32">open</a>(wsi, filename,</div><div class="line"><a name="l03966"></a><span class="lineno"> 3966</span>&#160;                                                    filelen, flags);</div><div class="line"><a name="l03967"></a><span class="lineno"> 3967</span>&#160;}</div><div class="line"><a name="l03968"></a><span class="lineno"> 3968</span>&#160;</div><div class="line"><a name="l03975"></a><span class="lineno"> 3975</span>&#160;<span class="keyword">static</span> LWS_INLINE <span class="keywordtype">int</span></div><div class="line"><a name="l03976"></a><span class="lineno"> 3976</span>&#160;lws_plat_file_close(<span class="keyword">struct</span> lws *wsi, lws_filefd_type fd)</div><div class="line"><a name="l03977"></a><span class="lineno"> 3977</span>&#160;{</div><div class="line"><a name="l03978"></a><span class="lineno"> 3978</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="group__fops.html#gac08aef64c4c34647ed699b24759b6b0e">lws_get_fops</a>(<a class="code" href="group__misc.html#ga0af4f7d2dd375aeedcfa7eb0e1101c4b">lws_get_context</a>(wsi))-&gt;<a class="code" href="structlws__plat__file__ops.html#a034ec96f2fbaf52b4aa3e82d20795f7b">close</a>(wsi, fd);</div><div class="line"><a name="l03979"></a><span class="lineno"> 3979</span>&#160;}</div><div class="line"><a name="l03980"></a><span class="lineno"> 3980</span>&#160;</div><div class="line"><a name="l03988"></a><span class="lineno"> 3988</span>&#160;<span class="keyword">static</span> LWS_INLINE <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span></div><div class="line"><a name="l03989"></a><span class="lineno"> 3989</span>&#160;lws_plat_file_seek_cur(<span class="keyword">struct</span> lws *wsi, lws_filefd_type fd, <span class="keywordtype">long</span> offset)</div><div class="line"><a name="l03990"></a><span class="lineno"> 3990</span>&#160;{</div><div class="line"><a name="l03991"></a><span class="lineno"> 3991</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="group__fops.html#gac08aef64c4c34647ed699b24759b6b0e">lws_get_fops</a>(<a class="code" href="group__misc.html#ga0af4f7d2dd375aeedcfa7eb0e1101c4b">lws_get_context</a>(wsi))-&gt;<a class="code" href="structlws__plat__file__ops.html#abfcda19b003dcc13c61ff9e2bb4ff869">seek_cur</a>(wsi, fd, offset);</div><div class="line"><a name="l03992"></a><span class="lineno"> 3992</span>&#160;}</div><div class="line"><a name="l04002"></a><span class="lineno"> 4002</span>&#160;<span class="keyword">static</span> LWS_INLINE <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l04003"></a><span class="lineno"> 4003</span>&#160;lws_plat_file_read(<span class="keyword">struct</span> lws *wsi, lws_filefd_type fd, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *amount,</div><div class="line"><a name="l04004"></a><span class="lineno"> 4004</span>&#160;                   <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *buf, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> len)</div><div class="line"><a name="l04005"></a><span class="lineno"> 4005</span>&#160;{</div><div class="line"><a name="l04006"></a><span class="lineno"> 4006</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="group__fops.html#gac08aef64c4c34647ed699b24759b6b0e">lws_get_fops</a>(<a class="code" href="group__misc.html#ga0af4f7d2dd375aeedcfa7eb0e1101c4b">lws_get_context</a>(wsi))-&gt;<a class="code" href="structlws__plat__file__ops.html#a01f483807a9862736b17ba9ed5110c40">read</a>(wsi, fd, amount, buf,</div><div class="line"><a name="l04007"></a><span class="lineno"> 4007</span>&#160;                                                        len);</div><div class="line"><a name="l04008"></a><span class="lineno"> 4008</span>&#160;}</div><div class="line"><a name="l04018"></a><span class="lineno"> 4018</span>&#160;<span class="keyword">static</span> LWS_INLINE <span class="keywordtype">int</span> LWS_WARN_UNUSED_RESULT</div><div class="line"><a name="l04019"></a><span class="lineno"> 4019</span>&#160;lws_plat_file_write(<span class="keyword">struct</span> lws *wsi, lws_filefd_type fd, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *amount,</div><div class="line"><a name="l04020"></a><span class="lineno"> 4020</span>&#160;                    <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *buf, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> len)</div><div class="line"><a name="l04021"></a><span class="lineno"> 4021</span>&#160;{</div><div class="line"><a name="l04022"></a><span class="lineno"> 4022</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="group__fops.html#gac08aef64c4c34647ed699b24759b6b0e">lws_get_fops</a>(<a class="code" href="group__misc.html#ga0af4f7d2dd375aeedcfa7eb0e1101c4b">lws_get_context</a>(wsi))-&gt;<a class="code" href="structlws__plat__file__ops.html#a1fae8330ee94649a3551e31a30809793">write</a>(wsi, fd, amount, buf,</div><div class="line"><a name="l04023"></a><span class="lineno"> 4023</span>&#160;                                                         len);</div><div class="line"><a name="l04024"></a><span class="lineno"> 4024</span>&#160;}</div><div class="line"><a name="l04026"></a><span class="lineno"> 4026</span>&#160;</div><div class="line"><a name="l04058"></a><span class="lineno"> 4058</span>&#160;<span class="preprocessor">#ifdef LWS_WITH_SMTP</span></div><div class="line"><a name="l04059"></a><span class="lineno"> 4059</span>&#160;</div><div class="line"><a name="l04061"></a><span class="lineno"><a class="line" href="group__smtp.html#ga116be79bf44f9dc2a97f46e051fe4dc0"> 4061</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="group__smtp.html#ga116be79bf44f9dc2a97f46e051fe4dc0">lwsgs_smtp_states</a> {</div><div class="line"><a name="l04062"></a><span class="lineno"><a class="line" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c"> 4062</a></span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c">LGSSMTP_IDLE</a>, </div><div class="line"><a name="l04063"></a><span class="lineno"><a class="line" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933"> 4063</a></span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933">LGSSMTP_CONNECTING</a>, </div><div class="line"><a name="l04064"></a><span class="lineno"><a class="line" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d"> 4064</a></span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d">LGSSMTP_CONNECTED</a>, </div><div class="line"><a name="l04065"></a><span class="lineno"><a class="line" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad"> 4065</a></span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad">LGSSMTP_SENT_HELO</a>, </div><div class="line"><a name="l04066"></a><span class="lineno"><a class="line" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab"> 4066</a></span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab">LGSSMTP_SENT_FROM</a>, </div><div class="line"><a name="l04067"></a><span class="lineno"><a class="line" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83"> 4067</a></span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83">LGSSMTP_SENT_TO</a>, </div><div class="line"><a name="l04068"></a><span class="lineno"><a class="line" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14"> 4068</a></span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14">LGSSMTP_SENT_DATA</a>, </div><div class="line"><a name="l04069"></a><span class="lineno"><a class="line" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69"> 4069</a></span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69">LGSSMTP_SENT_BODY</a>, </div><div class="line"><a name="l04070"></a><span class="lineno"><a class="line" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5"> 4070</a></span>&#160;        <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5">LGSSMTP_SENT_QUIT</a>, </div><div class="line"><a name="l04071"></a><span class="lineno"> 4071</span>&#160;};</div><div class="line"><a name="l04072"></a><span class="lineno"> 4072</span>&#160;</div><div class="line"><a name="l04074"></a><span class="lineno"><a class="line" href="structlws__email.html"> 4074</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlws__email.html">lws_email</a> {</div><div class="line"><a name="l04075"></a><span class="lineno"><a class="line" href="structlws__email.html#add1341456045382c183f4c763bdea6bc"> 4075</a></span>&#160;        <span class="keywordtype">void</span> *<a class="code" href="structlws__email.html#add1341456045382c183f4c763bdea6bc">data</a>;</div><div class="line"><a name="l04077"></a><span class="lineno"><a class="line" href="structlws__email.html#ab5fbf121195a8e67509c78a42cfbe168"> 4077</a></span>&#160;        uv_loop_t *<a class="code" href="structlws__email.html#ab5fbf121195a8e67509c78a42cfbe168">loop</a>;</div><div class="line"><a name="l04080"></a><span class="lineno"><a class="line" href="structlws__email.html#a472ae23fc9fca6599e5c512bc21458d2"> 4080</a></span>&#160;        <span class="keywordtype">char</span> email_smtp_ip[32]; </div><div class="line"><a name="l04081"></a><span class="lineno"><a class="line" href="structlws__email.html#a939e5d7ee0339a16de73bde71ab4d4d9"> 4081</a></span>&#160;        <span class="keywordtype">char</span> email_helo[32];    </div><div class="line"><a name="l04082"></a><span class="lineno"><a class="line" href="structlws__email.html#af7f0ae934347d81071f63a963301f9e2"> 4082</a></span>&#160;        <span class="keywordtype">char</span> email_from[100];   </div><div class="line"><a name="l04083"></a><span class="lineno"><a class="line" href="structlws__email.html#a6453a8b92b3de6d2c2101af3edce685e"> 4083</a></span>&#160;        <span class="keywordtype">char</span> email_to[100];     </div><div class="line"><a name="l04085"></a><span class="lineno"><a class="line" href="structlws__email.html#a7bbc1964889c984b3da723c86a210e05"> 4085</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structlws__email.html#a7bbc1964889c984b3da723c86a210e05">max_content_size</a>;</div><div class="line"><a name="l04088"></a><span class="lineno"> 4088</span>&#160;        <span class="comment">/* Fill all the callbacks before init */</span></div><div class="line"><a name="l04089"></a><span class="lineno"> 4089</span>&#160;</div><div class="line"><a name="l04090"></a><span class="lineno"><a class="line" href="structlws__email.html#ad8dc60353ee246d84dd59ec0591e9719"> 4090</a></span>&#160;        int (*on_next)(<span class="keyword">struct </span><a class="code" href="structlws__email.html">lws_email</a> *email);</div><div class="line"><a name="l04095"></a><span class="lineno"><a class="line" href="structlws__email.html#a39ef6263d58eb40cca417c8697b227d8"> 4095</a></span>&#160;        int (*<a class="code" href="structlws__email.html#a39ef6263d58eb40cca417c8697b227d8">on_sent</a>)(<span class="keyword">struct </span><a class="code" href="structlws__email.html">lws_email</a> *email);</div><div class="line"><a name="l04100"></a><span class="lineno"><a class="line" href="structlws__email.html#a2aff78c8e04db243052aa91b4d87e987"> 4100</a></span>&#160;        int (*<a class="code" href="structlws__email.html#a2aff78c8e04db243052aa91b4d87e987">on_get_body</a>)(<span class="keyword">struct </span><a class="code" href="structlws__email.html">lws_email</a> *email, <span class="keywordtype">char</span> *buf, <span class="keywordtype">int</span> len);</div><div class="line"><a name="l04106"></a><span class="lineno"> 4106</span>&#160;        <span class="comment">/* private things */</span></div><div class="line"><a name="l04107"></a><span class="lineno"><a class="line" href="structlws__email.html#a77723e2f2b940b1c879ef5e1cd88c2be"> 4107</a></span>&#160;        uv_timer_t <a class="code" href="structlws__email.html#a77723e2f2b940b1c879ef5e1cd88c2be">timeout_email</a>; </div><div class="line"><a name="l04108"></a><span class="lineno"><a class="line" href="structlws__email.html#ac6115d3cbef2e8bac62cc00895bf5fd3"> 4108</a></span>&#160;        <span class="keyword">enum</span> <a class="code" href="group__smtp.html#ga116be79bf44f9dc2a97f46e051fe4dc0">lwsgs_smtp_states</a> <a class="code" href="structlws__email.html#ac6115d3cbef2e8bac62cc00895bf5fd3">estate</a>; </div><div class="line"><a name="l04109"></a><span class="lineno"><a class="line" href="structlws__email.html#a5f53d4c5a1e34b0dcaa8787e2eabb1b3"> 4109</a></span>&#160;        uv_connect_t <a class="code" href="structlws__email.html#a5f53d4c5a1e34b0dcaa8787e2eabb1b3">email_connect_req</a>; </div><div class="line"><a name="l04110"></a><span class="lineno"><a class="line" href="structlws__email.html#a01f31934166dc6d01e8a375012f8ad1e"> 4110</a></span>&#160;        uv_tcp_t <a class="code" href="structlws__email.html#a01f31934166dc6d01e8a375012f8ad1e">email_client</a>; </div><div class="line"><a name="l04111"></a><span class="lineno"><a class="line" href="structlws__email.html#a9747ca85597788c2d118d287df47b7c1"> 4111</a></span>&#160;        time_t <a class="code" href="structlws__email.html#a9747ca85597788c2d118d287df47b7c1">email_connect_started</a>; </div><div class="line"><a name="l04112"></a><span class="lineno"><a class="line" href="structlws__email.html#a8f34ec0643a817be67ef4276aeb7fb82"> 4112</a></span>&#160;        <span class="keywordtype">char</span> <a class="code" href="structlws__email.html#a8f34ec0643a817be67ef4276aeb7fb82">email_buf</a>[256]; </div><div class="line"><a name="l04113"></a><span class="lineno"><a class="line" href="structlws__email.html#a6fff03c5a5d369a2aa3cab0c897b1bed"> 4113</a></span>&#160;        <span class="keywordtype">char</span> *<a class="code" href="structlws__email.html#a6fff03c5a5d369a2aa3cab0c897b1bed">content</a>; </div><div class="line"><a name="l04114"></a><span class="lineno"> 4114</span>&#160;};</div><div class="line"><a name="l04115"></a><span class="lineno"> 4115</span>&#160;</div><div class="line"><a name="l04125"></a><span class="lineno"> 4125</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">int</span></div><div class="line"><a name="l04126"></a><span class="lineno"> 4126</span>&#160;<a class="code" href="group__smtp.html#ga77fc9b56a1bb39484844981ec375fc29">lws_email_init</a>(<span class="keyword">struct</span> <a class="code" href="structlws__email.html">lws_email</a> *email, uv_loop_t *<a class="code" href="structlws__email.html#ab5fbf121195a8e67509c78a42cfbe168">loop</a>, <span class="keywordtype">int</span> max_content);</div><div class="line"><a name="l04127"></a><span class="lineno"> 4127</span>&#160;</div><div class="line"><a name="l04136"></a><span class="lineno"> 4136</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span></div><div class="line"><a name="l04137"></a><span class="lineno"> 4137</span>&#160;<a class="code" href="group__smtp.html#ga5e535e346d92a9daf00be33abf79d4eb">lws_email_check</a>(<span class="keyword">struct</span> <a class="code" href="structlws__email.html">lws_email</a> *email);</div><div class="line"><a name="l04145"></a><span class="lineno"> 4145</span>&#160;LWS_VISIBLE LWS_EXTERN <span class="keywordtype">void</span></div><div class="line"><a name="l04146"></a><span class="lineno"> 4146</span>&#160;<a class="code" href="group__smtp.html#ga25298a5afc1074e13b2d5711a86432b2">lws_email_destroy</a>(<span class="keyword">struct</span> <a class="code" href="structlws__email.html">lws_email</a> *email);</div><div class="line"><a name="l04147"></a><span class="lineno"> 4147</span>&#160;</div><div class="line"><a name="l04148"></a><span class="lineno"> 4148</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l04149"></a><span class="lineno"> 4149</span>&#160;</div><div class="line"><a name="l04150"></a><span class="lineno"> 4150</span>&#160;</div><div class="line"><a name="l04151"></a><span class="lineno"> 4151</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l04152"></a><span class="lineno"> 4152</span>&#160;}</div><div class="line"><a name="l04153"></a><span class="lineno"> 4153</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l04154"></a><span class="lineno"> 4154</span>&#160;</div><div class="line"><a name="l04155"></a><span class="lineno"> 4155</span>&#160;<span class="preprocessor">#endif</span></div><div class="ttc" id="group__form-parsing_html_gaaa482f07dad3f04b391cccf0a814e13b"><div class="ttname"><a href="group__form-parsing.html#gaaa482f07dad3f04b391cccf0a814e13b">lws_spa_destroy</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN int lws_spa_destroy(struct lws_spa *spa)</div></div>
 <div class="ttc" id="group__pur_html_gab15187efcfa256b7c928562c182b92a3"><div class="ttname"><a href="group__pur.html#gab15187efcfa256b7c928562c182b92a3">lws_json_purify</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN const char * lws_json_purify(char *escaped, const char *string, int len)</div></div>
-<div class="ttc" id="structlws__cgi__args_html"><div class="ttname"><a href="structlws__cgi__args.html">lws_cgi_args</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3845</div></div>
+<div class="ttc" id="structlws__cgi__args_html"><div class="ttname"><a href="structlws__cgi__args.html">lws_cgi_args</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3859</div></div>
 <div class="ttc" id="structlws__protocols_html_a0d1d4996d81b2f5e125bcec981e461c5"><div class="ttname"><a href="structlws__protocols.html#a0d1d4996d81b2f5e125bcec981e461c5">lws_protocols::rx_buffer_size</a></div><div class="ttdeci">size_t rx_buffer_size</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1291</div></div>
 <div class="ttc" id="group__form-parsing_html_ga162f86762173a2bc8c28497941d74815"><div class="ttname"><a href="group__form-parsing.html#ga162f86762173a2bc8c28497941d74815">lws_spa_create</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN struct lws_spa * lws_spa_create(struct lws *wsi, const char *const *param_names, int count_params, int max_storage, lws_spa_fileupload_cb opt_cb, void *opt_data)</div></div>
 <div class="ttc" id="group__context-and-vhost_html_ga8db03e19a372e34ac25cf21af894a02c"><div class="ttname"><a href="group__context-and-vhost.html#ga8db03e19a372e34ac25cf21af894a02c">lws_vhost_get</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN struct lws_vhost * lws_vhost_get(struct lws *wsi) LWS_WARN_DEPRECATED</div></div>
@@ -83,14 +83,14 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
 <div class="ttc" id="group__misc_html_gace5171b1dbbc03ec89a98f8afdb5c9af"><div class="ttname"><a href="group__misc.html#gace5171b1dbbc03ec89a98f8afdb5c9af">lws_daemonize</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_daemonize(const char *_lock_path)</div></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:1912</div></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:3131</div></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:4050</div></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:4064</div></div>
 <div class="ttc" id="group__sock-adopt_html_gab2d045df0f81afe00891aaed312d552b"><div class="ttname"><a href="group__sock-adopt.html#gab2d045df0f81afe00891aaed312d552b">lws_adopt_socket_readbuf</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN struct lws * lws_adopt_socket_readbuf(struct lws_context *context, lws_sockfd_type accept_fd, const char *readbuf, size_t len)</div></div>
 <div class="ttc" id="structlws__polarssl__context_html"><div class="ttname"><a href="structlws__polarssl__context.html">lws_polarssl_context</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:233</div></div>
 <div class="ttc" id="structlws__http__mount_html_a614364c770b0bd4db464ad65cddab477"><div class="ttname"><a href="structlws__http__mount.html#a614364c770b0bd4db464ad65cddab477">lws_http_mount::auth_mask</a></div><div class="ttdeci">unsigned int auth_mask</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1947</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:3154</div></div>
-<div class="ttc" id="structlws__email_html_add1341456045382c183f4c763bdea6bc"><div class="ttname"><a href="structlws__email.html#add1341456045382c183f4c763bdea6bc">lws_email::data</a></div><div class="ttdeci">void * data</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4061</div></div>
+<div class="ttc" id="structlws__email_html_add1341456045382c183f4c763bdea6bc"><div class="ttname"><a href="structlws__email.html#add1341456045382c183f4c763bdea6bc">lws_email::data</a></div><div class="ttdeci">void * data</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4075</div></div>
 <div class="ttc" id="structlws__client__connect__info_html_a03c305fdca809667b6a9a83b3edfd83a"><div class="ttname"><a href="structlws__client__connect__info.html#a03c305fdca809667b6a9a83b3edfd83a">lws_client_connect_info::uri_replace_from</a></div><div class="ttdeci">const char * uri_replace_from</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:2011</div></div>
-<div class="ttc" id="structlws__plat__file__ops_html_a1fae8330ee94649a3551e31a30809793"><div class="ttname"><a href="structlws__plat__file__ops.html#a1fae8330ee94649a3551e31a30809793">lws_plat_file_ops::write</a></div><div class="ttdeci">int(* write)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3923</div></div>
+<div class="ttc" id="structlws__plat__file__ops_html_a1fae8330ee94649a3551e31a30809793"><div class="ttname"><a href="structlws__plat__file__ops.html#a1fae8330ee94649a3551e31a30809793">lws_plat_file_ops::write</a></div><div class="ttdeci">int(* write)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3937</div></div>
 <div class="ttc" id="group__usercb_html_gad62860e19975ba4c4af401c3cdb6abf7"><div class="ttname"><a href="group__usercb.html#gad62860e19975ba4c4af401c3cdb6abf7">lws_callback_reasons</a></div><div class="ttdeci">lws_callback_reasons</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:660</div></div>
 <div class="ttc" id="group__HTTP-headers-read_html_gaa427cad61a9a5e3004afd65c4527b5e9"><div class="ttname"><a href="group__HTTP-headers-read.html#gaa427cad61a9a5e3004afd65c4527b5e9">lws_hdr_copy_fragment</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN int lws_hdr_copy_fragment(struct lws *wsi, char *dest, int len, enum lws_token_indexes h, int frag_idx)</div></div>
 <div class="ttc" id="group__usercb_html_ggad62860e19975ba4c4af401c3cdb6abf7ae4986291b7a810fe290851d73bebeb1c"><div class="ttname"><a href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae4986291b7a810fe290851d73bebeb1c">LWS_CALLBACK_OPENSSL_LOAD_EXTRA_CLIENT_VERIFY_CERTS</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:810</div></div>
@@ -109,7 +109,7 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
 <div class="ttc" id="group__callback-when-writeable_html_gac4643fe16b0940ae5b68b4ee6195cbde"><div class="ttname"><a href="group__callback-when-writeable.html#gac4643fe16b0940ae5b68b4ee6195cbde">lws_get_peer_write_allowance</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN size_t lws_get_peer_write_allowance(struct lws *wsi)</div></div>
 <div class="ttc" id="group__usercb_html_ggad62860e19975ba4c4af401c3cdb6abf7ae8d1de0bb56e03aa58cb4d44b18edd2e"><div class="ttname"><a href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae8d1de0bb56e03aa58cb4d44b18edd2e">LWS_CALLBACK_HTTP</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:744</div></div>
 <div class="ttc" id="group__misc_html_gac6abfc0b2bd5b2f09281a4432bb2f5f0"><div class="ttname"><a href="group__misc.html#gac6abfc0b2bd5b2f09281a4432bb2f5f0">lws_get_library_version</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN const char *LWS_WARN_UNUSED_RESULT lws_get_library_version(void)</div></div>
-<div class="ttc" id="structlws__email_html_a39ef6263d58eb40cca417c8697b227d8"><div class="ttname"><a href="structlws__email.html#a39ef6263d58eb40cca417c8697b227d8">lws_email::on_sent</a></div><div class="ttdeci">int(* on_sent)(struct lws_email *email)</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4081</div></div>
+<div class="ttc" id="structlws__email_html_a39ef6263d58eb40cca417c8697b227d8"><div class="ttname"><a href="structlws__email.html#a39ef6263d58eb40cca417c8697b227d8">lws_email::on_sent</a></div><div class="ttdeci">int(* on_sent)(struct lws_email *email)</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4095</div></div>
 <div class="ttc" id="structlwsgw__hash__bin_html"><div class="ttname"><a href="structlwsgw__hash__bin.html">lwsgw_hash_bin</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1431</div></div>
 <div class="ttc" id="structlws__client__connect__info_html_a065063b5117ecd0a59567c97f04bda2e"><div class="ttname"><a href="structlws__client__connect__info.html#a065063b5117ecd0a59567c97f04bda2e">lws_client_connect_info::pwsi</a></div><div class="ttdeci">struct lws ** pwsi</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:2018</div></div>
 <div class="ttc" id="group__usercb_html_ggad62860e19975ba4c4af401c3cdb6abf7a75199176c82c1a56e4a6bbf1cc30c12c"><div class="ttname"><a href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a75199176c82c1a56e4a6bbf1cc30c12c">LWS_CALLBACK_FILTER_HTTP_CONNECTION</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:778</div></div>
@@ -118,7 +118,7 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
 <div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050">LWS_CLOSE_STATUS_INVALID_PAYLOAD</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:579</div></div>
 <div class="ttc" id="structlws__plugin__capability_html"><div class="ttname"><a href="structlws__plugin__capability.html">lws_plugin_capability</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1387</div></div>
 <div class="ttc" id="group__extensions_html_ga6fb3e2c3dfb9d64dc87026a4e99c128b"><div class="ttname"><a href="group__extensions.html#ga6fb3e2c3dfb9d64dc87026a4e99c128b">lws_ext_parse_options</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_ext_parse_options(const struct lws_extension *ext, struct lws *wsi, void *ext_user, const struct lws_ext_options *opts, const char *o, int len)</div></div>
-<div class="ttc" id="structlws__email_html_a9747ca85597788c2d118d287df47b7c1"><div class="ttname"><a href="structlws__email.html#a9747ca85597788c2d118d287df47b7c1">lws_email::email_connect_started</a></div><div class="ttdeci">time_t email_connect_started</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4097</div></div>
+<div class="ttc" id="structlws__email_html_a9747ca85597788c2d118d287df47b7c1"><div class="ttname"><a href="structlws__email.html#a9747ca85597788c2d118d287df47b7c1">lws_email::email_connect_started</a></div><div class="ttdeci">time_t email_connect_started</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4111</div></div>
 <div class="ttc" id="group__wsclose_html_gae399c571df32ba532c0ca67da9284985"><div class="ttname"><a href="group__wsclose.html#gae399c571df32ba532c0ca67da9284985">lws_close_status</a></div><div class="ttdeci">lws_close_status</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:550</div></div>
 <div class="ttc" id="group__callback-when-writeable_html_gacf04bbe089f47c971c6408c5efe2ac70"><div class="ttname"><a href="group__callback-when-writeable.html#gacf04bbe089f47c971c6408c5efe2ac70">lws_callback_all_protocol</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN int lws_callback_all_protocol(struct lws_context *context, const struct lws_protocols *protocol, int reason)</div></div>
 <div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8">LWS_CLOSE_STATUS_MESSAGE_TOO_LARGE</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:590</div></div>
@@ -129,11 +129,11 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
 <div class="ttc" id="group__misc_html_ga0af4f7d2dd375aeedcfa7eb0e1101c4b"><div class="ttname"><a href="group__misc.html#ga0af4f7d2dd375aeedcfa7eb0e1101c4b">lws_get_context</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN struct lws_context *LWS_WARN_UNUSED_RESULT lws_get_context(const struct lws *wsi)</div></div>
 <div class="ttc" id="structlws__protocol__vhost__options_html_a0640a92513c70ee6b9b295a9ad1658e7"><div class="ttname"><a href="structlws__protocol__vhost__options.html#a0640a92513c70ee6b9b295a9ad1658e7">lws_protocol_vhost_options::value</a></div><div class="ttdeci">const char * value</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1901</div></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:2779</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:4055</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:4069</div></div>
 <div class="ttc" id="structlws__gs__event__args_html_a2bec693d8a43730d487004a44326178b"><div class="ttname"><a href="structlws__gs__event__args.html#a2bec693d8a43730d487004a44326178b">lws_gs_event_args::username</a></div><div class="ttdeci">const char * username</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1462</div></div>
 <div class="ttc" id="group__client_html_ga0c966136905f467816307cfba6deb5fd"><div class="ttname"><a href="group__client.html#ga0c966136905f467816307cfba6deb5fd">lws_client_connect_via_info</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN struct lws * lws_client_connect_via_info(struct lws_client_connect_info *ccinfo)</div></div>
 <div class="ttc" id="structlws__http__mount_html_a05347d92c3d379809564bd4f3eab259b"><div class="ttname"><a href="structlws__http__mount.html#a05347d92c3d379809564bd4f3eab259b">lws_http_mount::protocol</a></div><div class="ttdeci">const char * protocol</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1931</div></div>
-<div class="ttc" id="structlws__cgi__args_html_a4ccc1058e7e914a26eef31ab2ad46aa1"><div class="ttname"><a href="structlws__cgi__args.html#a4ccc1058e7e914a26eef31ab2ad46aa1">lws_cgi_args::stdwsi</a></div><div class="ttdeci">struct lws ** stdwsi</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3846</div></div>
+<div class="ttc" id="structlws__cgi__args_html_a4ccc1058e7e914a26eef31ab2ad46aa1"><div class="ttname"><a href="structlws__cgi__args.html#a4ccc1058e7e914a26eef31ab2ad46aa1">lws_cgi_args::stdwsi</a></div><div class="ttdeci">struct lws ** stdwsi</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3860</div></div>
 <div class="ttc" id="group__context-and-vhost_html_ga94e6cc2223c4eec316b13bcebc3628b6"><div class="ttname"><a href="group__context-and-vhost.html#ga94e6cc2223c4eec316b13bcebc3628b6">lws_json_dump_vhost</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN int lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len)</div></div>
 <div class="ttc" id="group__usercb_html_ggad62860e19975ba4c4af401c3cdb6abf7a390da3639296660a78cc1a5dcb19037e"><div class="ttname"><a href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a390da3639296660a78cc1a5dcb19037e">LWS_CALLBACK_CONFIRM_EXTENSION_OKAY</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:865</div></div>
 <div class="ttc" id="group__httpft_html_gab4da87a4800413f15e7aba649fb1d77c"><div class="ttname"><a href="group__httpft.html#gab4da87a4800413f15e7aba649fb1d77c">lws_get_mimetype</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN const char * lws_get_mimetype(const char *file, const struct lws_http_mount *m)</div></div>
@@ -168,7 +168,7 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
 <div class="ttc" id="group__generic-sessions_html_gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a5a607e4668d20cadada62c4b8007f887"><div class="ttname"><a href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a5a607e4668d20cadada62c4b8007f887">LWSGS_AUTH_VERIFIED</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1439</div></div>
 <div class="ttc" id="structlws__client__connect__info_html_a69abb5aeed755750b9755e5c91db6895"><div class="ttname"><a href="structlws__client__connect__info.html#a69abb5aeed755750b9755e5c91db6895">lws_client_connect_info::ietf_version_or_minus_one</a></div><div class="ttdeci">int ietf_version_or_minus_one</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1998</div></div>
 <div class="ttc" id="group__callback-when-writeable_html_ga13c984d8c5a44a745fd02bc2fba36053"><div class="ttname"><a href="group__callback-when-writeable.html#ga13c984d8c5a44a745fd02bc2fba36053">lws_callback_all_protocol_vhost</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN int lws_callback_all_protocol_vhost(struct lws_vhost *vh, const struct lws_protocols *protocol, int reason)</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:4048</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:4062</div></div>
 <div class="ttc" id="structlws__protocol__vhost__options_html"><div class="ttname"><a href="structlws__protocol__vhost__options.html">lws_protocol_vhost_options</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1897</div></div>
 <div class="ttc" id="group__callback-when-writeable_html_ga941caaa468bc507b1cae52275f58800d"><div class="ttname"><a href="group__callback-when-writeable.html#ga941caaa468bc507b1cae52275f58800d">lws_callback_on_writable</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN int lws_callback_on_writable(struct lws *wsi)</div></div>
 <div class="ttc" id="structlws__process__html__state_html_a3b113e00c03a2fded51b1c85ff5bf077"><div class="ttname"><a href="structlws__process__html__state.html#a3b113e00c03a2fded51b1c85ff5bf077">lws_process_html_state::vars</a></div><div class="ttdeci">const char *const * vars</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:2403</div></div>
@@ -200,13 +200,13 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
 <div class="ttc" id="group__usercb_html_ggad62860e19975ba4c4af401c3cdb6abf7a7e12418eec9bce85735e6460176ab604"><div class="ttname"><a href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7e12418eec9bce85735e6460176ab604">LWS_CALLBACK_CLIENT_ESTABLISHED</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:716</div></div>
 <div class="ttc" id="group__usercb_html_ggad62860e19975ba4c4af401c3cdb6abf7ab69783a9fbf2ca71ad70706bda77b412"><div class="ttname"><a href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ab69783a9fbf2ca71ad70706bda77b412">LWS_CALLBACK_ADD_POLL_FD</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:903</div></div>
 <div class="ttc" id="group__service_html_ga9b3cc4473fd8848e5bbee7f310712939"><div class="ttname"><a href="group__service.html#ga9b3cc4473fd8848e5bbee7f310712939">lws_service_tsi</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN int lws_service_tsi(struct lws_context *context, int timeout_ms, int tsi)</div></div>
-<div class="ttc" id="structlws__cgi__args_html_a8ac842084688c02f3f94694ef700d8f7"><div class="ttname"><a href="structlws__cgi__args.html#a8ac842084688c02f3f94694ef700d8f7">lws_cgi_args::data</a></div><div class="ttdeci">unsigned char * data</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3848</div></div>
+<div class="ttc" id="structlws__cgi__args_html_a8ac842084688c02f3f94694ef700d8f7"><div class="ttname"><a href="structlws__cgi__args.html#a8ac842084688c02f3f94694ef700d8f7">lws_cgi_args::data</a></div><div class="ttdeci">unsigned char * data</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3862</div></div>
 <div class="ttc" id="structlws__http__mount_html_a4437423df85ee3dbcae0e15974c89ec7"><div class="ttname"><a href="structlws__http__mount.html#a4437423df85ee3dbcae0e15974c89ec7">lws_http_mount::extra_mimetypes</a></div><div class="ttdeci">const struct lws_protocol_vhost_options * extra_mimetypes</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1938</div></div>
 <div class="ttc" id="group__HTTP-headers-create_html_ga4887605ff2242a54db3a7fa01f6f864b"><div class="ttname"><a href="group__HTTP-headers-create.html#ga4887605ff2242a54db3a7fa01f6f864b">lws_finalize_http_header</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_finalize_http_header(struct lws *wsi, unsigned char **p, unsigned char *end)</div></div>
 <div class="ttc" id="group__usercb_html_ggad62860e19975ba4c4af401c3cdb6abf7aa536e574a642ff3ab9e12bff7ba2c6a2"><div class="ttname"><a href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa536e574a642ff3ab9e12bff7ba2c6a2">LWS_CALLBACK_CLIENT_FILTER_PRE_ESTABLISH</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:709</div></div>
 <div class="ttc" id="group__urlendec_html_gabc2888476e50e001c875c1a8abf455b7"><div class="ttname"><a href="group__urlendec.html#gabc2888476e50e001c875c1a8abf455b7">lws_urlencode</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN const char * lws_urlencode(char *escaped, const char *string, int len)</div></div>
 <div class="ttc" id="group__usercb_html_ggad62860e19975ba4c4af401c3cdb6abf7ae9734e1d7af2abf291665ce9e4a728d3"><div class="ttname"><a href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae9734e1d7af2abf291665ce9e4a728d3">LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:790</div></div>
-<div class="ttc" id="structlws__email_html_ab5fbf121195a8e67509c78a42cfbe168"><div class="ttname"><a href="structlws__email.html#ab5fbf121195a8e67509c78a42cfbe168">lws_email::loop</a></div><div class="ttdeci">uv_loop_t * loop</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4063</div></div>
+<div class="ttc" id="structlws__email_html_ab5fbf121195a8e67509c78a42cfbe168"><div class="ttname"><a href="structlws__email.html#ab5fbf121195a8e67509c78a42cfbe168">lws_email::loop</a></div><div class="ttdeci">uv_loop_t * loop</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4077</div></div>
 <div class="ttc" id="group__usercb_html_ggad62860e19975ba4c4af401c3cdb6abf7a54269ca88508e6efd3afdb9d360a9caa"><div class="ttname"><a href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a54269ca88508e6efd3afdb9d360a9caa">LWS_CALLBACK_PROTOCOL_DESTROY</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:888</div></div>
 <div class="ttc" id="classlws__conn__listener_html"><div class="ttname"><a href="classlws__conn__listener.html">lws_conn_listener</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:72</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:3157</div></div>
@@ -234,7 +234,7 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
 <div class="ttc" id="structlws__http__mount_html_a6a9b1492a0b9749e39bd19932717a0b7"><div class="ttname"><a href="structlws__http__mount.html#a6a9b1492a0b9749e39bd19932717a0b7">lws_http_mount::origin_protocol</a></div><div class="ttdeci">unsigned char origin_protocol</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1954</div></div>
 <div class="ttc" id="structlws__context__creation__info_html_ad0e95ba721f7bd2b676719f8093c23a2"><div class="ttname"><a href="structlws__context__creation__info.html#ad0e95ba721f7bd2b676719f8093c23a2">lws_context_creation_info::log_filepath</a></div><div class="ttdeci">const char * log_filepath</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1669</div></div>
 <div class="ttc" id="group__usercb_html_ggad62860e19975ba4c4af401c3cdb6abf7afedadfb3cde37a8ea4c84ed535f26d09"><div class="ttname"><a href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afedadfb3cde37a8ea4c84ed535f26d09">LWS_CALLBACK_HTTP_WRITEABLE</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:765</div></div>
-<div class="ttc" id="structlws__email_html_a7bbc1964889c984b3da723c86a210e05"><div class="ttname"><a href="structlws__email.html#a7bbc1964889c984b3da723c86a210e05">lws_email::max_content_size</a></div><div class="ttdeci">unsigned int max_content_size</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4071</div></div>
+<div class="ttc" id="structlws__email_html_a7bbc1964889c984b3da723c86a210e05"><div class="ttname"><a href="structlws__email.html#a7bbc1964889c984b3da723c86a210e05">lws_email::max_content_size</a></div><div class="ttdeci">unsigned int max_content_size</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4085</div></div>
 <div class="ttc" id="structlws__ext__option__arg_html_af57fffcfa253dfa8d98681ac1fb1785f"><div class="ttname"><a href="structlws__ext__option__arg.html#af57fffcfa253dfa8d98681ac1fb1785f">lws_ext_option_arg::option_index</a></div><div class="ttdeci">int option_index</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1116</div></div>
 <div class="ttc" id="group__misc_html_gacae4d7b6a8d22e4c2d82ff8b12c1e234"><div class="ttname"><a href="group__misc.html#gacae4d7b6a8d22e4c2d82ff8b12c1e234">lws_get_child</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN struct lws *LWS_WARN_UNUSED_RESULT lws_get_child(const struct lws *wsi)</div></div>
 <div class="ttc" id="group__HTTP-headers-create_html_gaf74adb761b22566ad70004882712dce1"><div class="ttname"><a href="group__HTTP-headers-create.html#gaf74adb761b22566ad70004882712dce1">lws_add_http_header_by_token</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_header_by_token(struct lws *wsi, enum lws_token_indexes token, const unsigned char *value, int length, unsigned char **p, unsigned char *end)</div></div>
@@ -242,7 +242,7 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
 <div class="ttc" id="structlws__client__connect__info_html_a9959ba103d3d2484e559a9f7879eebe3"><div class="ttname"><a href="structlws__client__connect__info.html#a9959ba103d3d2484e559a9f7879eebe3">lws_client_connect_info::uri_replace_to</a></div><div class="ttdeci">const char * uri_replace_to</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:2014</div></div>
 <div class="ttc" id="structlws__client__connect__info_html_a6843a60e1050b10db9d98d7eeb45f587"><div class="ttname"><a href="structlws__client__connect__info.html#a6843a60e1050b10db9d98d7eeb45f587">lws_client_connect_info::parent_wsi</a></div><div class="ttdeci">struct lws * parent_wsi</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:2007</div></div>
 <div class="ttc" id="group__sha_html_ga66316e6a5a0644a09d5a10e919dfdd8d"><div class="ttname"><a href="group__sha.html#ga66316e6a5a0644a09d5a10e919dfdd8d">lws_b64_decode_string</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN int lws_b64_decode_string(const char *in, char *out, int out_size)</div></div>
-<div class="ttc" id="structlws__email_html_ac6115d3cbef2e8bac62cc00895bf5fd3"><div class="ttname"><a href="structlws__email.html#ac6115d3cbef2e8bac62cc00895bf5fd3">lws_email::estate</a></div><div class="ttdeci">enum lwsgs_smtp_states estate</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4094</div></div>
+<div class="ttc" id="structlws__email_html_ac6115d3cbef2e8bac62cc00895bf5fd3"><div class="ttname"><a href="structlws__email.html#ac6115d3cbef2e8bac62cc00895bf5fd3">lws_email::estate</a></div><div class="ttdeci">enum lwsgs_smtp_states estate</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4108</div></div>
 <div class="ttc" id="group__form-parsing_html_ga83835bf250ee3d4a60f36a182f2b8d24"><div class="ttname"><a href="group__form-parsing.html#ga83835bf250ee3d4a60f36a182f2b8d24">lws_spa_finalize</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN int lws_spa_finalize(struct lws_spa *spa)</div></div>
 <div class="ttc" id="group__usercb_html_ggad62860e19975ba4c4af401c3cdb6abf7a24d39bf1cfc0bad9d92da9ac1717e439"><div class="ttname"><a href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a24d39bf1cfc0bad9d92da9ac1717e439">LWS_CALLBACK_ESTABLISHED</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:661</div></div>
 <div class="ttc" id="group__misc_html_ga629f48268fd1856b54b11172991b97d9"><div class="ttname"><a href="group__misc.html#ga629f48268fd1856b54b11172991b97d9">lws_get_count_threads</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_get_count_threads(struct lws_context *context)</div></div>
@@ -250,14 +250,14 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
 <div class="ttc" id="structlws__plugin_html_af4ac8fcb79e10e0c2d960e1804d98105"><div class="ttname"><a href="structlws__plugin.html#af4ac8fcb79e10e0c2d960e1804d98105">lws_plugin::name</a></div><div class="ttdeci">char name[64]</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1407</div></div>
 <div class="ttc" id="group__HTTP-headers-read_html_ga594f3d0ece5b09c2ccf9f98ea533bb4e"><div class="ttname"><a href="group__HTTP-headers-read.html#ga594f3d0ece5b09c2ccf9f98ea533bb4e">lws_hdr_fragment_length</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_hdr_fragment_length(struct lws *wsi, enum lws_token_indexes h, int frag_idx)</div></div>
 <div class="ttc" id="libwebsockets_8h_html_a27bb0b3cdcd0af839c928c253b521ff4"><div class="ttname"><a href="libwebsockets_8h.html#a27bb0b3cdcd0af839c928c253b521ff4">lws_cgi_kill</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN int lws_cgi_kill(struct lws *wsi)</div></div>
-<div class="ttc" id="structlws__email_html_a8f34ec0643a817be67ef4276aeb7fb82"><div class="ttname"><a href="structlws__email.html#a8f34ec0643a817be67ef4276aeb7fb82">lws_email::email_buf</a></div><div class="ttdeci">char email_buf[256]</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4098</div></div>
+<div class="ttc" id="structlws__email_html_a8f34ec0643a817be67ef4276aeb7fb82"><div class="ttname"><a href="structlws__email.html#a8f34ec0643a817be67ef4276aeb7fb82">lws_email::email_buf</a></div><div class="ttdeci">char email_buf[256]</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4112</div></div>
 <div class="ttc" id="group__wsstatus_html_ga26a140623d202dd2bf2004deb6994baa"><div class="ttname"><a href="group__wsstatus.html#ga26a140623d202dd2bf2004deb6994baa">lws_is_ssl</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN int lws_is_ssl(struct lws *wsi)</div></div>
 <div class="ttc" id="group__context-and-vhost_html_gga41c2d763f78cc248df3b9f8645dbd2a5a6582c985ee0ceaadc1d277030eae2d7c"><div class="ttname"><a href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a6582c985ee0ceaadc1d277030eae2d7c">LWS_SERVER_OPTION_SKIP_SERVER_CANONICAL_NAME</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1496</div></div>
-<div class="ttc" id="structlws__plat__file__ops_html_a034ec96f2fbaf52b4aa3e82d20795f7b"><div class="ttname"><a href="structlws__plat__file__ops.html#a034ec96f2fbaf52b4aa3e82d20795f7b">lws_plat_file_ops::close</a></div><div class="ttdeci">int(* close)(struct lws *wsi, lws_filefd_type fd)</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3915</div></div>
+<div class="ttc" id="structlws__plat__file__ops_html_a034ec96f2fbaf52b4aa3e82d20795f7b"><div class="ttname"><a href="structlws__plat__file__ops.html#a034ec96f2fbaf52b4aa3e82d20795f7b">lws_plat_file_ops::close</a></div><div class="ttdeci">int(* close)(struct lws *wsi, lws_filefd_type fd)</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3929</div></div>
 <div class="ttc" id="structlws__plugin_html_af9e1042dc1de5b9d202c2f5fd1834330"><div class="ttname"><a href="structlws__plugin.html#af9e1042dc1de5b9d202c2f5fd1834330">lws_plugin::lib</a></div><div class="ttdeci">uv_lib_t lib</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1403</div></div>
 <div class="ttc" id="structlws__polarssl__context_html_ae7e11c9129ff71c7ee71b3b2e320ff27"><div class="ttname"><a href="structlws__polarssl__context.html#ae7e11c9129ff71c7ee71b3b2e320ff27">lws_polarssl_context::certificate</a></div><div class="ttdeci">x509_crt certificate</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:235</div></div>
 <div class="ttc" id="group__net_html_ga092e5f473b3347f03ffeef8a950080f3"><div class="ttname"><a href="group__net.html#ga092e5f473b3347f03ffeef8a950080f3">lws_get_peer_addresses</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN void lws_get_peer_addresses(struct lws *wsi, lws_sockfd_type fd, char *name, int name_len, char *rip, int rip_len)</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:4049</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:4063</div></div>
 <div class="ttc" id="group__wsstatus_html_ga4ad226d5e01024b4046f4a5a37199aa1"><div class="ttname"><a href="group__wsstatus.html#ga4ad226d5e01024b4046f4a5a37199aa1">lws_is_cgi</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN int lws_is_cgi(struct lws *wsi)</div></div>
 <div class="ttc" id="structlws__client__connect__info_html_a9862297827639238a7a0b4054c3ddf3d"><div class="ttname"><a href="structlws__client__connect__info.html#a9862297827639238a7a0b4054c3ddf3d">lws_client_connect_info::ssl_connection</a></div><div class="ttdeci">int ssl_connection</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1988</div></div>
 <div class="ttc" id="group__generic-sessions_html_ggaa93946b3d921072209d5cd8cdfa5332ea596010a165bf13473c5eea3a34cd4308"><div class="ttname"><a href="group__generic-sessions.html#ggaa93946b3d921072209d5cd8cdfa5332ea596010a165bf13473c5eea3a34cd4308">LWSGSE_CREATED</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1455</div></div>
@@ -311,7 +311,7 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
 <div class="ttc" id="group__log_html_ga42e39775c6b69b7251bdbf5a2cdd5dcd"><div class="ttname"><a href="group__log.html#ga42e39775c6b69b7251bdbf5a2cdd5dcd">lwsl_timestamp</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN int lwsl_timestamp(int level, char *p, int len)</div></div>
 <div class="ttc" id="group__usercb_html_ggad62860e19975ba4c4af401c3cdb6abf7aa5cc921b7697743017a533822a3d556a"><div class="ttname"><a href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa5cc921b7697743017a533822a3d556a">LWS_CALLBACK_HTTP_PMO</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1001</div></div>
 <div class="ttc" id="group__context-and-vhost_html_gga41c2d763f78cc248df3b9f8645dbd2a5aca5d42820b65eac5618ec3f0bd8a1160"><div class="ttname"><a href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aca5d42820b65eac5618ec3f0bd8a1160">LWS_SERVER_OPTION_IPV6_V6ONLY_VALUE</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1535</div></div>
-<div class="ttc" id="structlws__email_html_a77723e2f2b940b1c879ef5e1cd88c2be"><div class="ttname"><a href="structlws__email.html#a77723e2f2b940b1c879ef5e1cd88c2be">lws_email::timeout_email</a></div><div class="ttdeci">uv_timer_t timeout_email</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4093</div></div>
+<div class="ttc" id="structlws__email_html_a77723e2f2b940b1c879ef5e1cd88c2be"><div class="ttname"><a href="structlws__email.html#a77723e2f2b940b1c879ef5e1cd88c2be">lws_email::timeout_email</a></div><div class="ttdeci">uv_timer_t timeout_email</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4107</div></div>
 <div class="ttc" id="group__context-and-vhost_html_gga41c2d763f78cc248df3b9f8645dbd2a5a34ab36e68c0d593b6f19b8d5ef1240a9"><div class="ttname"><a href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a34ab36e68c0d593b6f19b8d5ef1240a9">LWS_SERVER_OPTION_DISABLE_IPV6</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1505</div></div>
 <div class="ttc" id="structlws__context__creation__info_html_a0b154e79abc1167ba4ac3539f4af6720"><div class="ttname"><a href="structlws__context__creation__info.html#a0b154e79abc1167ba4ac3539f4af6720">lws_context_creation_info::max_http_header_pool</a></div><div class="ttdeci">short max_http_header_pool</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1636</div></div>
 <div class="ttc" id="group__html-chunked-substitution_html_ga643073f918c0a7016b690aae9793fd60"><div class="ttname"><a href="group__html-chunked-substitution.html#ga643073f918c0a7016b690aae9793fd60">lws_chunked_html_process</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN int lws_chunked_html_process(struct lws_process_html_args *args, struct lws_process_html_state *s)</div></div>
@@ -319,9 +319,10 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
 <div class="ttc" id="structlws__polarssl__context_html_a1872f2ea24878d807ae20ca8513674af"><div class="ttname"><a href="structlws__polarssl__context.html#a1872f2ea24878d807ae20ca8513674af">lws_polarssl_context::ca</a></div><div class="ttdeci">x509_crt ca</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:234</div></div>
 <div class="ttc" id="structlws__protocols_html_a9bbd85f591ffb4259711cb5acbb05bea"><div class="ttname"><a href="structlws__protocols.html#a9bbd85f591ffb4259711cb5acbb05bea">lws_protocols::per_session_data_size</a></div><div class="ttdeci">size_t per_session_data_size</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1286</div></div>
 <div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985a4b8a3b7ce6f731e5248e4b0fb64a5044"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a4b8a3b7ce6f731e5248e4b0fb64a5044">LWS_CLOSE_STATUS_NO_STATUS</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:568</div></div>
-<div class="ttc" id="group__smtp_html_ga116be79bf44f9dc2a97f46e051fe4dc0"><div class="ttname"><a href="group__smtp.html#ga116be79bf44f9dc2a97f46e051fe4dc0">lwsgs_smtp_states</a></div><div class="ttdeci">lwsgs_smtp_states</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4047</div></div>
+<div class="ttc" id="group__smtp_html_ga116be79bf44f9dc2a97f46e051fe4dc0"><div class="ttname"><a href="group__smtp.html#ga116be79bf44f9dc2a97f46e051fe4dc0">lwsgs_smtp_states</a></div><div class="ttdeci">lwsgs_smtp_states</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4061</div></div>
 <div class="ttc" id="group__context-and-vhost_html_gga41c2d763f78cc248df3b9f8645dbd2a5aff121db04a10cf8b2c5df9d4f2b89f1e"><div class="ttname"><a href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aff121db04a10cf8b2c5df9d4f2b89f1e">LWS_SERVER_OPTION_LIBUV</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1517</div></div>
 <div class="ttc" id="group__usercb_html_ggad62860e19975ba4c4af401c3cdb6abf7a909cc2a7018864b0b71abacc4058fd8f"><div class="ttname"><a href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a909cc2a7018864b0b71abacc4058fd8f">LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:841</div></div>
+<div class="ttc" id="group__misc_html_ga9f37d0e357de2ab4170723fcdb665d21"><div class="ttname"><a href="group__misc.html#ga9f37d0e357de2ab4170723fcdb665d21">lws_snprintf</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN int lws_snprintf(char *str, size_t size, const char *format,...)</div></div>
 <div class="ttc" id="group__usercb_html_ggad62860e19975ba4c4af401c3cdb6abf7a2db02fc6e1c17ab62b52109d1aa9d738"><div class="ttname"><a href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2db02fc6e1c17ab62b52109d1aa9d738">LWS_CALLBACK_RECEIVE_PONG</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:727</div></div>
 <div class="ttc" id="structlws__protocols_html"><div class="ttname"><a href="structlws__protocols.html">lws_protocols</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1278</div></div>
 <div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985a68b3d34bebd88547dcfa5cadba0acd6c"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a68b3d34bebd88547dcfa5cadba0acd6c">LWS_CLOSE_STATUS_ABNORMAL_CLOSE</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:573</div></div>
@@ -330,7 +331,7 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
 <div class="ttc" id="structlws__gs__event__args_html_acd17e4f9f91f7f9a8f0fbf0744a3a463"><div class="ttname"><a href="structlws__gs__event__args.html#acd17e4f9f91f7f9a8f0fbf0744a3a463">lws_gs_event_args::email</a></div><div class="ttdeci">const char * email</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1463</div></div>
 <div class="ttc" id="group__misc_html_ga58f906c6be0ca80efd813f694569dd4a"><div class="ttname"><a href="group__misc.html#ga58f906c6be0ca80efd813f694569dd4a">lws_get_random</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN int lws_get_random(struct lws_context *context, void *buf, int len)</div></div>
 <div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218">LWS_CLOSE_STATUS_GOINGAWAY</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:555</div></div>
-<div class="ttc" id="structlws__email_html_a5f53d4c5a1e34b0dcaa8787e2eabb1b3"><div class="ttname"><a href="structlws__email.html#a5f53d4c5a1e34b0dcaa8787e2eabb1b3">lws_email::email_connect_req</a></div><div class="ttdeci">uv_connect_t email_connect_req</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4095</div></div>
+<div class="ttc" id="structlws__email_html_a5f53d4c5a1e34b0dcaa8787e2eabb1b3"><div class="ttname"><a href="structlws__email.html#a5f53d4c5a1e34b0dcaa8787e2eabb1b3">lws_email::email_connect_req</a></div><div class="ttdeci">uv_connect_t email_connect_req</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4109</div></div>
 <div class="ttc" id="structlws__context__creation__info_html_a137a9b9de4f6a7993fed8746d551e616"><div class="ttname"><a href="structlws__context__creation__info.html#a137a9b9de4f6a7993fed8746d551e616">lws_context_creation_info::server_string</a></div><div class="ttdeci">const char * server_string</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1674</div></div>
 <div class="ttc" id="group__context-and-vhost_html_gga41c2d763f78cc248df3b9f8645dbd2a5a9637e9001d8c8b2521086bcafbd8a941"><div class="ttname"><a href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a9637e9001d8c8b2521086bcafbd8a941">LWS_SERVER_OPTION_UNIX_SOCK</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1528</div></div>
 <div class="ttc" id="structlws__pollfd_html_ac393db6fc7fb6ed8fe7ca20936908ee9"><div class="ttname"><a href="structlws__pollfd.html#ac393db6fc7fb6ed8fe7ca20936908ee9">lws_pollfd::events</a></div><div class="ttdeci">SHORT events</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:415</div></div>
@@ -353,7 +354,7 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
 <div class="ttc" id="group__context-and-vhost_html_gaeb12f934bfd178bd2132a9e73fc641da"><div class="ttname"><a href="group__context-and-vhost.html#gaeb12f934bfd178bd2132a9e73fc641da">lws_context_user</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN void * lws_context_user(struct lws_context *context)</div></div>
 <div class="ttc" id="structlws__protocols_html_a0e63edb457a613c3fa4271e0a8f19624"><div class="ttname"><a href="structlws__protocols.html#a0e63edb457a613c3fa4271e0a8f19624">lws_protocols::name</a></div><div class="ttdeci">const char * name</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1279</div></div>
 <div class="ttc" id="group__client_html_ga4f44b8230e6732816ca5cd8d1aaaf340"><div class="ttname"><a href="group__client.html#ga4f44b8230e6732816ca5cd8d1aaaf340">lws_init_vhost_client_ssl</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN int lws_init_vhost_client_ssl(const struct lws_context_creation_info *info, struct lws_vhost *vhost)</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:4053</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:4067</div></div>
 <div class="ttc" id="structlws__context__creation__info_html_a7b59f2bdc869871e7bde232db94f5ca6"><div class="ttname"><a href="structlws__context__creation__info.html#a7b59f2bdc869871e7bde232db94f5ca6">lws_context_creation_info::http_proxy_port</a></div><div class="ttdeci">unsigned int http_proxy_port</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1602</div></div>
 <div class="ttc" id="group__wsstatus_html_gaeca4afc94b1f026034f99cbba37e2f85"><div class="ttname"><a href="group__wsstatus.html#gaeca4afc94b1f026034f99cbba37e2f85">lws_partial_buffered</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_partial_buffered(struct lws *wsi)</div></div>
 <div class="ttc" id="structlws__context__creation__info_html_a6cfa3d51df2def3349a5cbf0d712822d"><div class="ttname"><a href="structlws__context__creation__info.html#a6cfa3d51df2def3349a5cbf0d712822d">lws_context_creation_info::timeout_secs</a></div><div class="ttdeci">unsigned int timeout_secs</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1649</div></div>
@@ -374,10 +375,10 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
 <div class="ttc" id="structlws__ext__option__arg_html"><div class="ttname"><a href="structlws__ext__option__arg.html">lws_ext_option_arg</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1114</div></div>
 <div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e">LWS_CLOSE_STATUS_EXTENSION_REQUIRED</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:594</div></div>
 <div class="ttc" id="group__Protocols-and-Plugins_html_ga25754726d97c5f519d313e691a9fe29d"><div class="ttname"><a href="group__Protocols-and-Plugins.html#ga25754726d97c5f519d313e691a9fe29d">lws_vhost_name_to_protocol</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN const struct lws_protocols * lws_vhost_name_to_protocol(struct lws_vhost *vh, const char *name)</div></div>
-<div class="ttc" id="structlws__cgi__args_html_a36e5c256433c187bd0eaa9c1ca667f1d"><div class="ttname"><a href="structlws__cgi__args.html#a36e5c256433c187bd0eaa9c1ca667f1d">lws_cgi_args::len</a></div><div class="ttdeci">int len</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3850</div></div>
+<div class="ttc" id="structlws__cgi__args_html_a36e5c256433c187bd0eaa9c1ca667f1d"><div class="ttname"><a href="structlws__cgi__args.html#a36e5c256433c187bd0eaa9c1ca667f1d">lws_cgi_args::len</a></div><div class="ttdeci">int len</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3864</div></div>
 <div class="ttc" id="group__HTTP-headers-read_html_ga84e9ce5e71a77501a0998ac403a984c2"><div class="ttname"><a href="group__HTTP-headers-read.html#ga84e9ce5e71a77501a0998ac403a984c2">lws_get_urlarg_by_name</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN const char * lws_get_urlarg_by_name(struct lws *wsi, const char *name, char *buf, int len)</div></div>
 <div class="ttc" id="structlws__context__creation__info_html_a75434932bb5df54665ea678eb8ac104a"><div class="ttname"><a href="structlws__context__creation__info.html#a75434932bb5df54665ea678eb8ac104a">lws_context_creation_info::iface</a></div><div class="ttdeci">const char * iface</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1564</div></div>
-<div class="ttc" id="structlws__plat__file__ops_html"><div class="ttname"><a href="structlws__plat__file__ops.html">lws_plat_file_ops</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3909</div></div>
+<div class="ttc" id="structlws__plat__file__ops_html"><div class="ttname"><a href="structlws__plat__file__ops.html">lws_plat_file_ops</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3923</div></div>
 <div class="ttc" id="group__log_html_ga898b1f03872ad019f507d4e35bbefa90"><div class="ttname"><a href="group__log.html#ga898b1f03872ad019f507d4e35bbefa90">lwsl_hexdump</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN void lwsl_hexdump(void *buf, size_t len)</div></div>
 <div class="ttc" id="group__usercb_html_ggad62860e19975ba4c4af401c3cdb6abf7aeb0cec65ec82a713cd01e9ca9aeeb5e6"><div class="ttname"><a href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aeb0cec65ec82a713cd01e9ca9aeeb5e6">LWS_CALLBACK_CLIENT_HTTP_WRITEABLE</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1006</div></div>
 <div class="ttc" id="group__form-parsing_html_ga41a74a822771d3dce89751aa3bce28ae"><div class="ttname"><a href="group__form-parsing.html#ga41a74a822771d3dce89751aa3bce28ae">lws_spa_fileupload_states</a></div><div class="ttdeci">lws_spa_fileupload_states</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:2776</div></div>
@@ -387,14 +388,14 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
 <div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985a3ffa38d5081b85fb739e02a747ccf2c4"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a3ffa38d5081b85fb739e02a747ccf2c4">LWS_CLOSE_STATUS_NORMAL</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:552</div></div>
 <div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985a462c99b05459df700919cfd3f53c8276"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a462c99b05459df700919cfd3f53c8276">LWS_CLOSE_STATUS_UNACCEPTABLE_OPCODE</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:561</div></div>
 <div class="ttc" id="group__pur_html_ga9cc82f06e5ae7e71458626d7a39a5865"><div class="ttname"><a href="group__pur.html#ga9cc82f06e5ae7e71458626d7a39a5865">lws_sql_purify</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN const char * lws_sql_purify(char *escaped, const char *string, int len)</div></div>
-<div class="ttc" id="structlws__email_html_a01f31934166dc6d01e8a375012f8ad1e"><div class="ttname"><a href="structlws__email.html#a01f31934166dc6d01e8a375012f8ad1e">lws_email::email_client</a></div><div class="ttdeci">uv_tcp_t email_client</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4096</div></div>
+<div class="ttc" id="structlws__email_html_a01f31934166dc6d01e8a375012f8ad1e"><div class="ttname"><a href="structlws__email.html#a01f31934166dc6d01e8a375012f8ad1e">lws_email::email_client</a></div><div class="ttdeci">uv_tcp_t email_client</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4110</div></div>
 <div class="ttc" id="group__context-and-vhost_html_gae2134657cdd2ea7a59e13ad314e4c50d"><div class="ttname"><a href="group__context-and-vhost.html#gae2134657cdd2ea7a59e13ad314e4c50d">lws_json_dump_context</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN int lws_json_dump_context(const struct lws_context *context, char *buf, int len)</div></div>
 <div class="ttc" id="structlws__pollfd_html"><div class="ttname"><a href="structlws__pollfd.html">lws_pollfd</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:413</div></div>
 <div class="ttc" id="group__usercb_html_ggad62860e19975ba4c4af401c3cdb6abf7ad8c6207b0c4e732f3d507f0fb79370e8"><div class="ttname"><a href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ad8c6207b0c4e732f3d507f0fb79370e8">LWS_CALLBACK_CLIENT_CONNECTION_ERROR</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:665</div></div>
-<div class="ttc" id="structlws__plat__file__ops_html_ad37a97abc68d0af967cef874f4d8df32"><div class="ttname"><a href="structlws__plat__file__ops.html#ad37a97abc68d0af967cef874f4d8df32">lws_plat_file_ops::open</a></div><div class="ttdeci">lws_filefd_type(* open)(struct lws *wsi, const char *filename, unsigned long *filelen, int flags)</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3910</div></div>
+<div class="ttc" id="structlws__plat__file__ops_html_ad37a97abc68d0af967cef874f4d8df32"><div class="ttname"><a href="structlws__plat__file__ops.html#ad37a97abc68d0af967cef874f4d8df32">lws_plat_file_ops::open</a></div><div class="ttdeci">lws_filefd_type(* open)(struct lws *wsi, const char *filename, unsigned long *filelen, int flags)</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3924</div></div>
 <div class="ttc" id="group__sending-data_html_ga98b099cf8c1c7e38ad78501f270e193d"><div class="ttname"><a href="group__sending-data.html#ga98b099cf8c1c7e38ad78501f270e193d">lws_write_protocol</a></div><div class="ttdeci">lws_write_protocol</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3120</div></div>
 <div class="ttc" id="structlws__extension_html_a36b06c213aedb02bf9a402651751855b"><div class="ttname"><a href="structlws__extension.html#a36b06c213aedb02bf9a402651751855b">lws_extension::client_offer</a></div><div class="ttdeci">const char * client_offer</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1191</div></div>
-<div class="ttc" id="structlws__plat__file__ops_html_a01f483807a9862736b17ba9ed5110c40"><div class="ttname"><a href="structlws__plat__file__ops.html#a01f483807a9862736b17ba9ed5110c40">lws_plat_file_ops::read</a></div><div class="ttdeci">int(* read)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3920</div></div>
+<div class="ttc" id="structlws__plat__file__ops_html_a01f483807a9862736b17ba9ed5110c40"><div class="ttname"><a href="structlws__plat__file__ops.html#a01f483807a9862736b17ba9ed5110c40">lws_plat_file_ops::read</a></div><div class="ttdeci">int(* read)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3934</div></div>
 <div class="ttc" id="group__service_html_ga53e3d0801dfda7960a7249dd559e68a2"><div class="ttname"><a href="group__service.html#ga53e3d0801dfda7960a7249dd559e68a2">lws_cancel_service</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN void lws_cancel_service(struct lws_context *context)</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:2777</div></div>
 <div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2">LWS_CLOSE_STATUS_RESERVED</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:566</div></div>
@@ -407,7 +408,7 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
 <div class="ttc" id="group__HTTP-headers-read_html_ga6ce6aa1c0155ea42b7708bed271d1c77"><div class="ttname"><a href="group__HTTP-headers-read.html#ga6ce6aa1c0155ea42b7708bed271d1c77">lws_hdr_copy</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN int lws_hdr_copy(struct lws *wsi, char *dest, int len, enum lws_token_indexes h)</div></div>
 <div class="ttc" id="group__usercb_html_ggad62860e19975ba4c4af401c3cdb6abf7a7ec8e2e9557ee02a4fc9f7dec7e2babc"><div class="ttname"><a href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7ec8e2e9557ee02a4fc9f7dec7e2babc">LWS_CALLBACK_SERVER_WRITEABLE</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:742</div></div>
 <div class="ttc" id="structlws__extension_html_a1e5018c883d85176f5c2152176843f9e"><div class="ttname"><a href="structlws__extension.html#a1e5018c883d85176f5c2152176843f9e">lws_extension::name</a></div><div class="ttdeci">const char * name</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1189</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:4052</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:4066</div></div>
 <div class="ttc" id="structpollfd_html_aafb457d11cac415faf0e1e2b825118c2"><div class="ttname"><a href="structpollfd.html#aafb457d11cac415faf0e1e2b825118c2">pollfd::revents</a></div><div class="ttdeci">short revents</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:431</div></div>
 <div class="ttc" id="structlws__extension_html_afa21f3b3c8c2c9212a276c52b680c3af"><div class="ttname"><a href="structlws__extension.html#afa21f3b3c8c2c9212a276c52b680c3af">lws_extension::callback</a></div><div class="ttdeci">lws_extension_callback_function * callback</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1190</div></div>
 <div class="ttc" id="structlws__context__creation__info_html_a704940261951ced6b5d8191bd8b9bb2d"><div class="ttname"><a href="structlws__context__creation__info.html#a704940261951ced6b5d8191bd8b9bb2d">lws_context_creation_info::ssl_options_set</a></div><div class="ttdeci">long ssl_options_set</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1688</div></div>
@@ -433,19 +434,19 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
 <div class="ttc" id="group__context-and-vhost_html_gaf2fff58562caab7510c41eeac85a8648"><div class="ttname"><a href="group__context-and-vhost.html#gaf2fff58562caab7510c41eeac85a8648">lws_create_context</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN struct lws_context * lws_create_context(struct lws_context_creation_info *info)</div></div>
 <div class="ttc" id="group__usercb_html_ggad62860e19975ba4c4af401c3cdb6abf7a838b18d255c1b94a533287ba302a2eba"><div class="ttname"><a href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a838b18d255c1b94a533287ba302a2eba">LWS_CALLBACK_CLOSED_HTTP</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:721</div></div>
 <div class="ttc" id="structlws__process__html__state_html_af21119890fdfebe28fb5c4dabfc1bdf5"><div class="ttname"><a href="structlws__process__html__state.html#af21119890fdfebe28fb5c4dabfc1bdf5">lws_process_html_state::data</a></div><div class="ttdeci">void * data</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:2402</div></div>
-<div class="ttc" id="structlws__email_html_a6fff03c5a5d369a2aa3cab0c897b1bed"><div class="ttname"><a href="structlws__email.html#a6fff03c5a5d369a2aa3cab0c897b1bed">lws_email::content</a></div><div class="ttdeci">char * content</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4099</div></div>
+<div class="ttc" id="structlws__email_html_a6fff03c5a5d369a2aa3cab0c897b1bed"><div class="ttname"><a href="structlws__email.html#a6fff03c5a5d369a2aa3cab0c897b1bed">lws_email::content</a></div><div class="ttdeci">char * content</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4113</div></div>
 <div class="ttc" id="group__net_html_ga869d8bdffb0f2a7ce08e3ce10d6be3d8"><div class="ttname"><a href="group__net.html#ga869d8bdffb0f2a7ce08e3ce10d6be3d8">lws_interface_to_sa</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN int lws_interface_to_sa(int ipv6, const char *ifname, struct sockaddr_in *addr, size_t addrlen)</div></div>
 <div class="ttc" id="structlws__context__creation__info_html_ac8a75b7b259a3c3a5fbb4219a3f06c29"><div class="ttname"><a href="structlws__context__creation__info.html#ac8a75b7b259a3c3a5fbb4219a3f06c29">lws_context_creation_info::token_limits</a></div><div class="ttdeci">const struct lws_token_limits * token_limits</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1578</div></div>
 <div class="ttc" id="structlws__process__html__state_html_a693d2fb45378afee5da29b539c1ea644"><div class="ttname"><a href="structlws__process__html__state.html#a693d2fb45378afee5da29b539c1ea644">lws_process_html_state::replace</a></div><div class="ttdeci">lws_process_html_state_cb replace</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:2406</div></div>
-<div class="ttc" id="structlws__email_html"><div class="ttname"><a href="structlws__email.html">lws_email</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4060</div></div>
+<div class="ttc" id="structlws__email_html"><div class="ttname"><a href="structlws__email.html">lws_email</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4074</div></div>
 <div class="ttc" id="structlws__client__connect__info_html_aa364094f94ef1bcaaabbd9161971d502"><div class="ttname"><a href="structlws__client__connect__info.html#aa364094f94ef1bcaaabbd9161971d502">lws_client_connect_info::address</a></div><div class="ttdeci">const char * address</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1984</div></div>
-<div class="ttc" id="structlws__plat__file__ops_html_abfcda19b003dcc13c61ff9e2bb4ff869"><div class="ttname"><a href="structlws__plat__file__ops.html#abfcda19b003dcc13c61ff9e2bb4ff869">lws_plat_file_ops::seek_cur</a></div><div class="ttdeci">unsigned long(* seek_cur)(struct lws *wsi, lws_filefd_type fd, long offset_from_cur_pos)</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3917</div></div>
+<div class="ttc" id="structlws__plat__file__ops_html_abfcda19b003dcc13c61ff9e2bb4ff869"><div class="ttname"><a href="structlws__plat__file__ops.html#abfcda19b003dcc13c61ff9e2bb4ff869">lws_plat_file_ops::seek_cur</a></div><div class="ttdeci">unsigned long(* seek_cur)(struct lws *wsi, lws_filefd_type fd, long offset_from_cur_pos)</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3931</div></div>
 <div class="ttc" id="structlws__protocols_html_a3cbd903ad076736ae934a54cae36580e"><div class="ttname"><a href="structlws__protocols.html#a3cbd903ad076736ae934a54cae36580e">lws_protocols::user</a></div><div class="ttdeci">void * user</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1307</div></div>
 <div class="ttc" id="structlws__pollargs_html_a00bbffea9f55de342783e32d71ce1de6"><div class="ttname"><a href="structlws__pollargs.html#a00bbffea9f55de342783e32d71ce1de6">lws_pollargs::events</a></div><div class="ttdeci">int events</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:529</div></div>
-<div class="ttc" id="structlws__email_html_a2aff78c8e04db243052aa91b4d87e987"><div class="ttname"><a href="structlws__email.html#a2aff78c8e04db243052aa91b4d87e987">lws_email::on_get_body</a></div><div class="ttdeci">int(* on_get_body)(struct lws_email *email, char *buf, int len)</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4086</div></div>
+<div class="ttc" id="structlws__email_html_a2aff78c8e04db243052aa91b4d87e987"><div class="ttname"><a href="structlws__email.html#a2aff78c8e04db243052aa91b4d87e987">lws_email::on_get_body</a></div><div class="ttdeci">int(* on_get_body)(struct lws_email *email, char *buf, int len)</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4100</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:1915</div></div>
 <div class="ttc" id="structlws__context__creation__info_html_a0e9d94cdfb893d777b4a4db81e7b5ac0"><div class="ttname"><a href="structlws__context__creation__info.html#a0e9d94cdfb893d777b4a4db81e7b5ac0">lws_context_creation_info::user</a></div><div class="ttdeci">void * user</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1610</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:4056</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:4070</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:3143</div></div>
 <div class="ttc" id="structlws__tokens_html_a9f3635412bc71a5cb78e9862b55f10cd"><div class="ttname"><a href="structlws__tokens.html#a9f3635412bc71a5cb78e9862b55f10cd">lws_tokens::token</a></div><div class="ttdeci">char * token</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:2459</div></div>
 <div class="ttc" id="group__Protocols-and-Plugins_html_gaf3be4243443baac0f8be1fcfb4d25129"><div class="ttname"><a href="group__Protocols-and-Plugins.html#gaf3be4243443baac0f8be1fcfb4d25129">lws_protocol_vh_priv_get</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN void * lws_protocol_vh_priv_get(struct lws_vhost *vhost, const struct lws_protocols *prot)</div></div>
@@ -468,11 +469,11 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
 <div class="ttc" id="group__service_html_ga29c246707997ab7a466aa709aecd2d7b"><div class="ttname"><a href="group__service.html#ga29c246707997ab7a466aa709aecd2d7b">lws_cancel_service_pt</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN void lws_cancel_service_pt(struct lws *wsi)</div></div>
 <div class="ttc" id="group__context-and-vhost_html_gga41c2d763f78cc248df3b9f8645dbd2a5ac962efd35abf6c402f9fb14aa14f5016"><div class="ttname"><a href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5ac962efd35abf6c402f9fb14aa14f5016">LWS_SERVER_OPTION_STS</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1530</div></div>
 <div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985ad0869604d79e13700ae5d196a431b350"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad0869604d79e13700ae5d196a431b350">LWS_CLOSE_STATUS_UNEXPECTED_CONDITION</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:602</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:4051</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:4065</div></div>
 <div class="ttc" id="structlws__plugin__capability_html_a523c7cde6f15bba345f56493dcf6b32a"><div class="ttname"><a href="structlws__plugin__capability.html#a523c7cde6f15bba345f56493dcf6b32a">lws_plugin_capability::api_magic</a></div><div class="ttdeci">unsigned int api_magic</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1388</div></div>
 <div class="ttc" id="group__context-and-vhost_html_gga41c2d763f78cc248df3b9f8645dbd2a5af62887536e25e053e68741006dba46d8"><div class="ttname"><a href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5af62887536e25e053e68741006dba46d8">LWS_SERVER_OPTION_IPV6_V6ONLY_MODIFY</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1533</div></div>
 <div class="ttc" id="group__wsstatus_html_ga2bb3655329b4651cd06f79ee3a764421"><div class="ttname"><a href="group__wsstatus.html#ga2bb3655329b4651cd06f79ee3a764421">lws_send_pipe_choked</a></div><div class="ttdeci">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_send_pipe_choked(struct lws *wsi)</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:4054</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:4068</div></div>
 <div class="ttc" id="group__form-parsing_html_ga5a70527c0861c2ffa3d29333a6aa7f8e"><div class="ttname"><a href="group__form-parsing.html#ga5a70527c0861c2ffa3d29333a6aa7f8e">lws_spa_fileupload_cb</a></div><div class="ttdeci">int(* lws_spa_fileupload_cb)(void *data, const char *name, const char *filename, char *buf, int len, enum lws_spa_fileupload_states state)</div><div class="ttdef"><b>Definition:</b> libwebsockets.h:2798</div></div>
 </div><!-- fragment --></div><!-- contents -->
 </div><!-- doc-content -->
diff --git a/doc/html/navtreedata.js b/doc/html/navtreedata.js
index 5fcaba46..e91b071f 100644
--- a/doc/html/navtreedata.js
+++ b/doc/html/navtreedata.js
@@ -133,9 +133,9 @@ var NAVTREEINDEX =
 [
 "annotated.html",
 "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aa0158b4e85420811e6b0f1378c6ded0f",
-"group__sha.html",
-"libwebsockets_8h.html#a17f5fc891b31d2920bd18b0d66d6cb25",
-"structlws__plat__file__ops.html#a01f483807a9862736b17ba9ed5110c40"
+"group__service.html#gaf95bd0c663d6516a0c80047d9b1167a8",
+"libwebsockets_8h.html",
+"structlws__http__mount.html#ae90d1efe7178199fad39de2926902ee4"
 ];
 
 var SYNCONMSG = 'click to disable panel synchronisation';
diff --git a/doc/html/navtreeindex0.js b/doc/html/navtreeindex0.js
index 6b34d181..54b7b48f 100644
--- a/doc/html/navtreeindex0.js
+++ b/doc/html/navtreeindex0.js
@@ -48,7 +48,7 @@ var NAVTREEINDEX0 =
 "group__HTTP-headers-create.html#gaf74adb761b22566ad70004882712dce1":[9,6,3,1],
 "group__HTTP-headers-create.html#gaf74adb761b22566ad70004882712dce1":[11,0,0,0,46],
 "group__HTTP-headers-read.html":[9,6,4],
-"group__HTTP-headers-read.html#ga2c0597b2ef1d2cee35736c338bcbd17b":[11,0,0,0,152],
+"group__HTTP-headers-read.html#ga2c0597b2ef1d2cee35736c338bcbd17b":[11,0,0,0,153],
 "group__HTTP-headers-read.html#ga2c0597b2ef1d2cee35736c338bcbd17b":[9,6,4,7],
 "group__HTTP-headers-read.html#ga594f3d0ece5b09c2ccf9f98ea533bb4e":[9,6,4,5],
 "group__HTTP-headers-read.html#ga594f3d0ece5b09c2ccf9f98ea533bb4e":[11,0,0,0,106],
@@ -156,7 +156,7 @@ var NAVTREEINDEX0 =
 "group__Protocols-and-Plugins.html":[9,10],
 "group__Protocols-and-Plugins.html#ga106b37ae9c247e84d191ab09441adc43":[9,10,4],
 "group__Protocols-and-Plugins.html#ga106b37ae9c247e84d191ab09441adc43":[11,0,0,0,86],
-"group__Protocols-and-Plugins.html#ga25754726d97c5f519d313e691a9fe29d":[11,0,0,0,160],
+"group__Protocols-and-Plugins.html#ga25754726d97c5f519d313e691a9fe29d":[11,0,0,0,161],
 "group__Protocols-and-Plugins.html#ga25754726d97c5f519d313e691a9fe29d":[9,10,9],
 "group__Protocols-and-Plugins.html#ga40994491e1567f91f579d2b444775266":[11,0,0,0,13],
 "group__Protocols-and-Plugins.html#ga72ad550786ca7976463589d347e62112":[9,10,5],
@@ -208,26 +208,26 @@ var NAVTREEINDEX0 =
 "group__context-and-vhost.html#ga06e77ce2916f8bc9826ef8d9d68e3932":[11,0,0,0,103],
 "group__context-and-vhost.html#ga0c54c667ccd9b8b3dddcd123ca72f87c":[9,4,7],
 "group__context-and-vhost.html#ga0c54c667ccd9b8b3dddcd123ca72f87c":[11,0,0,0,75],
-"group__context-and-vhost.html#ga341064721add2618ae1b29717493a212":[11,0,0,0,167],
+"group__context-and-vhost.html#ga341064721add2618ae1b29717493a212":[11,0,0,0,168],
 "group__context-and-vhost.html#ga341064721add2618ae1b29717493a212":[9,4,14],
 "group__context-and-vhost.html#ga41c2d763f78cc248df3b9f8645dbd2a5":[11,0,0,0,26],
 "group__context-and-vhost.html#ga41c2d763f78cc248df3b9f8645dbd2a5":[9,4,3],
 "group__context-and-vhost.html#ga7e9d5405547a457d86e0b4f0ae2bb1c4":[11,0,0,0,142],
 "group__context-and-vhost.html#ga7e9d5405547a457d86e0b4f0ae2bb1c4":[9,4,11],
-"group__context-and-vhost.html#ga8db03e19a372e34ac25cf21af894a02c":[11,0,0,0,159],
+"group__context-and-vhost.html#ga8db03e19a372e34ac25cf21af894a02c":[11,0,0,0,160],
 "group__context-and-vhost.html#ga8db03e19a372e34ac25cf21af894a02c":[9,4,12],
 "group__context-and-vhost.html#ga8ee0314028755f1ddfa9428e09b4fddb":[11,0,0,0,72],
 "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,117],
-"group__context-and-vhost.html#ga98d88c9080fd89c37114363a6474ea73":[11,0,0,0,166],
+"group__context-and-vhost.html#ga98d88c9080fd89c37114363a6474ea73":[11,0,0,0,167],
 "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,116],
 "group__context-and-vhost.html#gaeb12f934bfd178bd2132a9e73fc641da":[11,0,0,0,73],
 "group__context-and-vhost.html#gaeb12f934bfd178bd2132a9e73fc641da":[9,4,5],
-"group__context-and-vhost.html#gaf2fff58562caab7510c41eeac85a8648":[11,0,0,0,74],
 "group__context-and-vhost.html#gaf2fff58562caab7510c41eeac85a8648":[9,4,6],
+"group__context-and-vhost.html#gaf2fff58562caab7510c41eeac85a8648":[11,0,0,0,74],
 "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a1b2f8bde0f62adc7ebe81b2043f34c0c":[11,0,0,0,26,8],
 "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a1b2f8bde0f62adc7ebe81b2043f34c0c":[9,4,3,8],
 "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a1cc4562d05cba52a6dfa0697a65ade0d":[11,0,0,0,26,2],
diff --git a/doc/html/navtreeindex1.js b/doc/html/navtreeindex1.js
index 88adb979..dbe4fd76 100644
--- a/doc/html/navtreeindex1.js
+++ b/doc/html/navtreeindex1.js
@@ -68,22 +68,22 @@ var NAVTREEINDEX1 =
 "group__fops.html#gac08aef64c4c34647ed699b24759b6b0e":[9,20,1],
 "group__fops.html#gac08aef64c4c34647ed699b24759b6b0e":[11,0,0,0,91],
 "group__form-parsing.html":[9,6,0],
-"group__form-parsing.html#ga162f86762173a2bc8c28497941d74815":[11,0,0,0,145],
+"group__form-parsing.html#ga162f86762173a2bc8c28497941d74815":[11,0,0,0,146],
 "group__form-parsing.html#ga162f86762173a2bc8c28497941d74815":[9,6,0,2],
-"group__form-parsing.html#ga2da476217166da02704b90d3a8d4f3cd":[11,0,0,0,149],
+"group__form-parsing.html#ga2da476217166da02704b90d3a8d4f3cd":[11,0,0,0,150],
 "group__form-parsing.html#ga2da476217166da02704b90d3a8d4f3cd":[9,6,0,6],
-"group__form-parsing.html#ga3fbe378632f85ec9a14cc2c1687bf05f":[11,0,0,0,148],
+"group__form-parsing.html#ga3fbe378632f85ec9a14cc2c1687bf05f":[11,0,0,0,149],
 "group__form-parsing.html#ga3fbe378632f85ec9a14cc2c1687bf05f":[9,6,0,5],
 "group__form-parsing.html#ga41a74a822771d3dce89751aa3bce28ae":[9,6,0,1],
 "group__form-parsing.html#ga41a74a822771d3dce89751aa3bce28ae":[11,0,0,0,33],
 "group__form-parsing.html#ga5a70527c0861c2ffa3d29333a6aa7f8e":[9,6,0,0],
 "group__form-parsing.html#ga5a70527c0861c2ffa3d29333a6aa7f8e":[11,0,0,0,16],
-"group__form-parsing.html#ga83835bf250ee3d4a60f36a182f2b8d24":[11,0,0,0,147],
+"group__form-parsing.html#ga83835bf250ee3d4a60f36a182f2b8d24":[11,0,0,0,148],
 "group__form-parsing.html#ga83835bf250ee3d4a60f36a182f2b8d24":[9,6,0,4],
-"group__form-parsing.html#ga9ad9ebf5ea1a7108415ed7e04cb231d2":[11,0,0,0,150],
+"group__form-parsing.html#ga9ad9ebf5ea1a7108415ed7e04cb231d2":[11,0,0,0,151],
 "group__form-parsing.html#ga9ad9ebf5ea1a7108415ed7e04cb231d2":[9,6,0,7],
-"group__form-parsing.html#gaaa482f07dad3f04b391cccf0a814e13b":[11,0,0,0,146],
 "group__form-parsing.html#gaaa482f07dad3f04b391cccf0a814e13b":[9,6,0,3],
+"group__form-parsing.html#gaaa482f07dad3f04b391cccf0a814e13b":[11,0,0,0,147],
 "group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea2d25de44865bd44e5a3903a2bab9ca83":[9,6,0,1,2],
 "group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea2d25de44865bd44e5a3903a2bab9ca83":[11,0,0,0,33,2],
 "group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea6ce2a55a4c3695cdb640c893d95bd3a7":[9,6,0,1,1],
@@ -158,12 +158,12 @@ var NAVTREEINDEX1 =
 "group__log.html#ga14542b84d2c76efa7814124bb10f9c5f":[11,0,0,0,31],
 "group__log.html#ga244647f9e1bf0097ccdde66d74f41e26":[11,0,0,0,141],
 "group__log.html#ga244647f9e1bf0097ccdde66d74f41e26":[9,7,0],
-"group__log.html#ga42e39775c6b69b7251bdbf5a2cdd5dcd":[11,0,0,0,165],
+"group__log.html#ga42e39775c6b69b7251bdbf5a2cdd5dcd":[11,0,0,0,166],
 "group__log.html#ga42e39775c6b69b7251bdbf5a2cdd5dcd":[9,7,3],
 "group__log.html#ga74eb146969f0595e12ea835851b4588e":[11,0,0,0,40],
-"group__log.html#ga898b1f03872ad019f507d4e35bbefa90":[11,0,0,0,164],
+"group__log.html#ga898b1f03872ad019f507d4e35bbefa90":[11,0,0,0,165],
 "group__log.html#ga898b1f03872ad019f507d4e35bbefa90":[9,7,2],
-"group__log.html#gab7c0fc936cc9f1eb58e2bb234c15147c":[11,0,0,0,163],
+"group__log.html#gab7c0fc936cc9f1eb58e2bb234c15147c":[11,0,0,0,164],
 "group__log.html#gab7c0fc936cc9f1eb58e2bb234c15147c":[9,7,1],
 "group__log.html#gaf5f07837692b2f231a79da8a058288aa":[11,0,0,0,39],
 "group__log.html#gga14542b84d2c76efa7814124bb10f9c5fa083a44e71966a0e768426e477e1bc358":[11,0,0,0,31,8],
@@ -181,8 +181,8 @@ var NAVTREEINDEX1 =
 "group__misc.html#ga0af4f7d2dd375aeedcfa7eb0e1101c4b":[9,8,2],
 "group__misc.html#ga0af4f7d2dd375aeedcfa7eb0e1101c4b":[11,0,0,0,89],
 "group__misc.html#ga0e705d498e8c8500649a26ba30a1e106":[11,0,0,0,127],
-"group__misc.html#ga1ec0d9faac5d3a5824d765c287c043aa":[9,8,8],
 "group__misc.html#ga1ec0d9faac5d3a5824d765c287c043aa":[11,0,0,0,122],
+"group__misc.html#ga1ec0d9faac5d3a5824d765c287c043aa":[9,8,8],
 "group__misc.html#ga33bf2635033710b25f931b57ed663e1e":[9,8,7],
 "group__misc.html#ga33bf2635033710b25f931b57ed663e1e":[11,0,0,0,121],
 "group__misc.html#ga58f906c6be0ca80efd813f694569dd4a":[9,8,6],
@@ -191,8 +191,10 @@ var NAVTREEINDEX1 =
 "group__misc.html#ga629f48268fd1856b54b11172991b97d9":[11,0,0,0,90],
 "group__misc.html#ga8930fe36a3f3eefe4a6a4fd499d8e899":[9,8,5],
 "group__misc.html#ga8930fe36a3f3eefe4a6a4fd499d8e899":[11,0,0,0,94],
-"group__misc.html#gaa194584fff9698f3b280658f770ccd0f":[11,0,0,0,162],
-"group__misc.html#gaa194584fff9698f3b280658f770ccd0f":[9,8,10],
+"group__misc.html#ga9f37d0e357de2ab4170723fcdb665d21":[11,0,0,0,145],
+"group__misc.html#ga9f37d0e357de2ab4170723fcdb665d21":[9,8,10],
+"group__misc.html#gaa194584fff9698f3b280658f770ccd0f":[11,0,0,0,163],
+"group__misc.html#gaa194584fff9698f3b280658f770ccd0f":[9,8,11],
 "group__misc.html#gab321ed812f46f6dc7ef9e3ca6f00cf1b":[11,0,0,0,139],
 "group__misc.html#gab321ed812f46f6dc7ef9e3ca6f00cf1b":[9,8,9],
 "group__misc.html#gac6abfc0b2bd5b2f09281a4432bb2f5f0":[9,8,4],
@@ -211,14 +213,14 @@ var NAVTREEINDEX1 =
 "group__net.html#gad0df22db2be9fc65a667a1e83f9a92a4":[9,9,0],
 "group__net.html#gad0df22db2be9fc65a667a1e83f9a92a4":[11,0,0,0,62],
 "group__pur.html":[9,12],
-"group__pur.html#ga9cc82f06e5ae7e71458626d7a39a5865":[11,0,0,0,151],
+"group__pur.html#ga9cc82f06e5ae7e71458626d7a39a5865":[11,0,0,0,152],
 "group__pur.html#ga9cc82f06e5ae7e71458626d7a39a5865":[9,12,1],
 "group__pur.html#gab15187efcfa256b7c928562c182b92a3":[9,12,0],
 "group__pur.html#gab15187efcfa256b7c928562c182b92a3":[11,0,0,0,118],
 "group__sending-data.html":[9,13],
 "group__sending-data.html#ga98b099cf8c1c7e38ad78501f270e193d":[9,13,0],
 "group__sending-data.html#ga98b099cf8c1c7e38ad78501f270e193d":[11,0,0,0,35],
-"group__sending-data.html#gafd5fdd285a0e25ba7e3e1051deec1001":[11,0,0,0,161],
+"group__sending-data.html#gafd5fdd285a0e25ba7e3e1051deec1001":[11,0,0,0,162],
 "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,35,2],
@@ -230,8 +232,8 @@ var NAVTREEINDEX1 =
 "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da80e8f169fda236c56bfb795ed62903db":[9,13,0,0],
 "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da80e8f169fda236c56bfb795ed62903db":[11,0,0,0,35,0],
 "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dab7e7a62cf6f456c09c21dff24dad9039":[11,0,0,0,35,5],
-"group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e":[11,0,0,0,35,3],
 "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e":[9,13,0,3],
+"group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e":[11,0,0,0,35,3],
 "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dae7d8a025a65524652fe9e24c2654c935":[11,0,0,0,35,6],
 "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193daf6486c0dba50c44198100717721d9ab2":[9,13,0,1],
 "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193daf6486c0dba50c44198100717721d9ab2":[11,0,0,0,35,1],
@@ -247,7 +249,5 @@ var NAVTREEINDEX1 =
 "group__service.html#gad82efa5466d14a9f05aa06416375b28d":[11,0,0,0,136],
 "group__service.html#gad82efa5466d14a9f05aa06416375b28d":[9,0,3],
 "group__service.html#gaebf426eda371ba23642fc11d8e0ace6b":[11,0,0,0,137],
-"group__service.html#gaebf426eda371ba23642fc11d8e0ace6b":[9,0,4],
-"group__service.html#gaf95bd0c663d6516a0c80047d9b1167a8":[11,0,0,0,135],
-"group__service.html#gaf95bd0c663d6516a0c80047d9b1167a8":[9,0,2]
+"group__service.html#gaebf426eda371ba23642fc11d8e0ace6b":[9,0,4]
 };
diff --git a/doc/html/navtreeindex2.js b/doc/html/navtreeindex2.js
index 9a79adc4..696b2d6a 100644
--- a/doc/html/navtreeindex2.js
+++ b/doc/html/navtreeindex2.js
@@ -1,8 +1,10 @@
 var NAVTREEINDEX2 =
 {
+"group__service.html#gaf95bd0c663d6516a0c80047d9b1167a8":[11,0,0,0,135],
+"group__service.html#gaf95bd0c663d6516a0c80047d9b1167a8":[9,0,2],
 "group__sha.html":[9,11],
-"group__sha.html#ga66316e6a5a0644a09d5a10e919dfdd8d":[11,0,0,0,51],
 "group__sha.html#ga66316e6a5a0644a09d5a10e919dfdd8d":[9,11,0],
+"group__sha.html#ga66316e6a5a0644a09d5a10e919dfdd8d":[11,0,0,0,51],
 "group__sha.html#ga7b09ab74646266f0b555103b3bb8dfe5":[11,0,0,0,144],
 "group__sha.html#ga7b09ab74646266f0b555103b3bb8dfe5":[9,11,2],
 "group__sha.html#gaf39765e4a3b413efb65e4698b2ec3575":[9,11,1],
@@ -10,8 +12,8 @@ var NAVTREEINDEX2 =
 "group__smtp.html":[9,14],
 "group__smtp.html#ga116be79bf44f9dc2a97f46e051fe4dc0":[9,14,1],
 "group__smtp.html#ga116be79bf44f9dc2a97f46e051fe4dc0":[11,0,0,0,37],
-"group__smtp.html#ga25298a5afc1074e13b2d5711a86432b2":[9,14,3],
 "group__smtp.html#ga25298a5afc1074e13b2d5711a86432b2":[11,0,0,0,78],
+"group__smtp.html#ga25298a5afc1074e13b2d5711a86432b2":[9,14,3],
 "group__smtp.html#ga5e535e346d92a9daf00be33abf79d4eb":[11,0,0,0,77],
 "group__smtp.html#ga5e535e346d92a9daf00be33abf79d4eb":[9,14,2],
 "group__smtp.html#ga77fc9b56a1bb39484844981ec375fc29":[9,14,4],
@@ -28,10 +30,10 @@ var NAVTREEINDEX2 =
 "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14":[9,14,1,6],
 "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab":[9,14,1,4],
 "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab":[11,0,0,0,37,4],
-"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83":[9,14,1,5],
 "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83":[11,0,0,0,37,5],
-"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d":[11,0,0,0,37,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,37,2],
 "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933":[9,14,1,1],
 "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933":[11,0,0,0,37,1],
 "group__sock-adopt.html":[9,15],
@@ -63,9 +65,9 @@ var NAVTREEINDEX2 =
 "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87ad7ebebb506afd30c48e1e5e3a578cd30":[11,0,0,0,38,1],
 "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87ae8b3de955cec5da5ea52fe040f914501":[11,0,0,0,38,10],
 "group__urlendec.html":[9,6,5],
-"group__urlendec.html#gaa373a9c16acdd96c395af61ab915ece3":[11,0,0,0,153],
+"group__urlendec.html#gaa373a9c16acdd96c395af61ab915ece3":[11,0,0,0,154],
 "group__urlendec.html#gaa373a9c16acdd96c395af61ab915ece3":[9,6,5,0],
-"group__urlendec.html#gabc2888476e50e001c875c1a8abf455b7":[11,0,0,0,154],
+"group__urlendec.html#gabc2888476e50e001c875c1a8abf455b7":[11,0,0,0,155],
 "group__urlendec.html#gabc2888476e50e001c875c1a8abf455b7":[9,6,5,1],
 "group__usercb.html":[9,16],
 "group__usercb.html#gad4fcb82e68d60ffacca61a3f783a0a2f":[11,0,0,0,8],
@@ -89,8 +91,8 @@ var NAVTREEINDEX2 =
 "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a23b90b5e5146e760bc3123ae1fd2a6e5":[11,0,0,0,22,40],
 "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a24d39bf1cfc0bad9d92da9ac1717e439":[9,16,1,0],
 "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a24d39bf1cfc0bad9d92da9ac1717e439":[11,0,0,0,22,0],
-"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2db02fc6e1c17ab62b52109d1aa9d738":[9,16,1,7],
 "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2db02fc6e1c17ab62b52109d1aa9d738":[11,0,0,0,22,7],
+"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2db02fc6e1c17ab62b52109d1aa9d738":[9,16,1,7],
 "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2fce9a8608220f32abbf1422a5498804":[11,0,0,0,22,14],
 "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2fce9a8608220f32abbf1422a5498804":[9,16,1,14],
 "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a390da3639296660a78cc1a5dcb19037e":[11,0,0,0,22,25],
@@ -110,8 +112,8 @@ var NAVTREEINDEX2 =
 "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7e12418eec9bce85735e6460176ab604":[11,0,0,0,22,3],
 "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7ec8e2e9557ee02a4fc9f7dec7e2babc":[11,0,0,0,22,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,22,5],
+"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a838b18d255c1b94a533287ba302a2eba":[9,16,1,5],
 "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8909732521d379179003d97ab7a05428":[11,0,0,0,22,35],
 "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8909732521d379179003d97ab7a05428":[9,16,1,35],
 "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a89862929a72bff65257ca1d51a0fce4d":[11,0,0,0,22,52],
@@ -123,8 +125,8 @@ var NAVTREEINDEX2 =
 "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a982579753e70e59a9ea13ce628ac891a":[9,16,1,41],
 "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa46f705dcf97502e95627ffde614f98b":[11,0,0,0,22,37],
 "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa46f705dcf97502e95627ffde614f98b":[9,16,1,37],
-"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa536e574a642ff3ab9e12bff7ba2c6a2":[9,16,1,2],
 "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa536e574a642ff3ab9e12bff7ba2c6a2":[11,0,0,0,22,2],
+"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa536e574a642ff3ab9e12bff7ba2c6a2":[9,16,1,2],
 "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa5cc921b7697743017a533822a3d556a":[11,0,0,0,22,56],
 "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa5cc921b7697743017a533822a3d556a":[9,16,1,39],
 "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa627548e1296e654fcfab463ec3c9587":[11,0,0,0,22,15],
@@ -157,16 +159,16 @@ var NAVTREEINDEX2 =
 "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ad8c6207b0c4e732f3d507f0fb79370e8":[11,0,0,0,22,1],
 "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7adfb41c92e2522712207ef7f2462b5e34":[11,0,0,0,22,31],
 "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7adfb41c92e2522712207ef7f2462b5e34":[9,16,1,31],
-"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae4986291b7a810fe290851d73bebeb1c":[11,0,0,0,22,21],
 "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae4986291b7a810fe290851d73bebeb1c":[9,16,1,21],
+"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae4986291b7a810fe290851d73bebeb1c":[11,0,0,0,22,21],
 "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae5ad65d779b7eab32ab67ceff91a3bac":[11,0,0,0,22,23],
 "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae5ad65d779b7eab32ab67ceff91a3bac":[9,16,1,23],
 "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae8d1de0bb56e03aa58cb4d44b18edd2e":[11,0,0,0,22,12],
 "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae8d1de0bb56e03aa58cb4d44b18edd2e":[9,16,1,12],
 "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae9734e1d7af2abf291665ce9e4a728d3":[11,0,0,0,22,19],
 "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae9734e1d7af2abf291665ce9e4a728d3":[9,16,1,19],
-"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aeb0cec65ec82a713cd01e9ca9aeeb5e6":[11,0,0,0,22,57],
 "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aeb0cec65ec82a713cd01e9ca9aeeb5e6":[9,16,1,40],
+"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aeb0cec65ec82a713cd01e9ca9aeeb5e6":[11,0,0,0,22,57],
 "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7af6cf80e57aae8ba0a57a5c456b1fe026":[11,0,0,0,22,55],
 "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afc4b2f72cc9e424a750b506ce0cc4310":[11,0,0,0,22,51],
 "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afd8fd77a1cc9405fcb4f26915d7f2d01":[11,0,0,0,22,29],
@@ -176,15 +178,15 @@ var NAVTREEINDEX2 =
 "group__uv.html":[9,22],
 "group__uv.html#ga097c89497824d4de225a85a00661fc89":[11,0,0,0,119],
 "group__uv.html#ga3c75cd6ec3f80fc0a0c8ead4c4e71a15":[11,0,0,0,120],
-"group__uv.html#ga99099e045993383f251a8026e1e40414":[11,0,0,0,158],
-"group__uv.html#gaa5e3593c94f91910d9d928dfa0c18f6c":[11,0,0,0,155],
-"group__uv.html#gac5f60dba13a45e5d554b4fb7df7b9610":[11,0,0,0,157],
-"group__uv.html#gad85ce3bfc53ff754988d36bf5de39e21":[11,0,0,0,156],
+"group__uv.html#ga99099e045993383f251a8026e1e40414":[11,0,0,0,159],
+"group__uv.html#gaa5e3593c94f91910d9d928dfa0c18f6c":[11,0,0,0,156],
+"group__uv.html#gac5f60dba13a45e5d554b4fb7df7b9610":[11,0,0,0,158],
+"group__uv.html#gad85ce3bfc53ff754988d36bf5de39e21":[11,0,0,0,157],
 "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,32],
-"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69":[9,4,0,2,3],
 "group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69":[11,0,0,0,32,3],
+"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69":[9,4,0,2,3],
 "group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0":[9,4,0,2,0],
 "group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0":[11,0,0,0,32,0],
 "group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2":[9,4,0,2,2],
@@ -204,8 +206,8 @@ var NAVTREEINDEX2 =
 "group__wsclose.html#gae399c571df32ba532c0ca67da9284985":[9,17,0],
 "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a1bb501d212fa4d57053db681b1dfab98":[11,0,0,0,25,3],
 "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a1bb501d212fa4d57053db681b1dfab98":[9,17,0,2],
-"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8":[11,0,0,0,25,10],
 "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8":[9,17,0,9],
+"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8":[11,0,0,0,25,10],
 "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a32c38edab10d1379febac0c479ab2e9c":[11,0,0,0,25,14],
 "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a3ffa38d5081b85fb739e02a747ccf2c4":[11,0,0,0,25,1],
 "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a3ffa38d5081b85fb739e02a747ccf2c4":[9,17,0,0],
@@ -215,8 +217,8 @@ var NAVTREEINDEX2 =
 "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a4b8a3b7ce6f731e5248e4b0fb64a5044":[9,17,0,5],
 "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a68b3d34bebd88547dcfa5cadba0acd6c":[11,0,0,0,25,7],
 "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a68b3d34bebd88547dcfa5cadba0acd6c":[9,17,0,6],
-"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050":[11,0,0,0,25,8],
 "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050":[9,17,0,7],
+"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050":[11,0,0,0,25,8],
 "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218":[11,0,0,0,25,2],
 "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218":[9,17,0,1],
 "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e":[9,17,0,10],
@@ -226,8 +228,8 @@ var NAVTREEINDEX2 =
 "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad0869604d79e13700ae5d196a431b350":[11,0,0,0,25,12],
 "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad09e68295eabdddcba4e332fbea70ae5":[11,0,0,0,25,9],
 "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad09e68295eabdddcba4e332fbea70ae5":[9,17,0,8],
-"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad2b477a91c8445bf34ecd43977f9b390":[9,17,0,12],
 "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad2b477a91c8445bf34ecd43977f9b390":[11,0,0,0,25,13],
+"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad2b477a91c8445bf34ecd43977f9b390":[9,17,0,12],
 "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2":[11,0,0,0,25,5],
 "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2":[9,17,0,4],
 "group__wsstatus.html":[9,18],
@@ -239,15 +241,13 @@ var NAVTREEINDEX2 =
 "group__wsstatus.html#ga2bb3655329b4651cd06f79ee3a764421":[11,0,0,0,132],
 "group__wsstatus.html#ga3df5045656dfb6b0e63a38de2dca79d2":[9,18,1],
 "group__wsstatus.html#ga3df5045656dfb6b0e63a38de2dca79d2":[11,0,0,0,100],
-"group__wsstatus.html#ga4ad226d5e01024b4046f4a5a37199aa1":[9,18,2],
 "group__wsstatus.html#ga4ad226d5e01024b4046f4a5a37199aa1":[11,0,0,0,113],
-"group__wsstatus.html#gaccd9c59336efad8af0554f79cc5966fd":[9,18,0],
+"group__wsstatus.html#ga4ad226d5e01024b4046f4a5a37199aa1":[9,18,2],
 "group__wsstatus.html#gaccd9c59336efad8af0554f79cc5966fd":[11,0,0,0,87],
-"group__wsstatus.html#gaeca4afc94b1f026034f99cbba37e2f85":[9,18,5],
+"group__wsstatus.html#gaccd9c59336efad8af0554f79cc5966fd":[9,18,0],
 "group__wsstatus.html#gaeca4afc94b1f026034f99cbba37e2f85":[11,0,0,0,123],
+"group__wsstatus.html#gaeca4afc94b1f026034f99cbba37e2f85":[9,18,5],
 "hierarchy.html":[10,2],
-"index.html":[0],
 "index.html":[],
-"libwebsockets_8h.html":[11,0,0,0],
-"libwebsockets_8h.html#a0b056fdcf949a838ff82209b4a627dd9":[11,0,0,0,168]
+"index.html":[0]
 };
diff --git a/doc/html/navtreeindex3.js b/doc/html/navtreeindex3.js
index 84cc34d8..acec6db7 100644
--- a/doc/html/navtreeindex3.js
+++ b/doc/html/navtreeindex3.js
@@ -1,6 +1,8 @@
 var NAVTREEINDEX3 =
 {
-"libwebsockets_8h.html#a17f5fc891b31d2920bd18b0d66d6cb25":[11,0,0,0,173],
+"libwebsockets_8h.html":[11,0,0,0],
+"libwebsockets_8h.html#a0b056fdcf949a838ff82209b4a627dd9":[11,0,0,0,169],
+"libwebsockets_8h.html#a17f5fc891b31d2920bd18b0d66d6cb25":[11,0,0,0,174],
 "libwebsockets_8h.html#a1b12016562c728eb306c7f954c804bef":[11,0,0,0,20],
 "libwebsockets_8h.html#a2271141d8be8d72b47ba327130b4905f":[11,0,0,0,27],
 "libwebsockets_8h.html#a2271141d8be8d72b47ba327130b4905fa7741c12fc97574fa73a810fedae2be76":[11,0,0,0,27,1],
@@ -21,16 +23,16 @@ var NAVTREEINDEX3 =
 "libwebsockets_8h.html#a5e627dbf1db48170ef486edbaf268672":[11,0,0,0,130],
 "libwebsockets_8h.html#a72fe65e83b8bb03f904a1a256c673536":[11,0,0,0,128],
 "libwebsockets_8h.html#a75e9827318684877deb4189121a8cd2a":[11,0,0,0,43],
-"libwebsockets_8h.html#a863bdd5bca33bcbaa424c42fb7b2fc96":[11,0,0,0,172],
-"libwebsockets_8h.html#a9032a3062641d334161c29adcc4fa15d":[11,0,0,0,170],
+"libwebsockets_8h.html#a863bdd5bca33bcbaa424c42fb7b2fc96":[11,0,0,0,173],
+"libwebsockets_8h.html#a9032a3062641d334161c29adcc4fa15d":[11,0,0,0,171],
 "libwebsockets_8h.html#a9b1bfc6f34319188d2aa40500d825bab":[11,0,0,0,42],
 "libwebsockets_8h.html#a9b878fb94f4596226c982eef4f42a607":[11,0,0,0,44],
-"libwebsockets_8h.html#a9f2a8506fd963db95a5103823c60fb0a":[11,0,0,0,171],
+"libwebsockets_8h.html#a9f2a8506fd963db95a5103823c60fb0a":[11,0,0,0,172],
 "libwebsockets_8h.html#abddb8d337fb2692586d892b494739003":[11,0,0,0,18],
 "libwebsockets_8h.html#ac3abb8b7e6d29a0292797230e4031681":[11,0,0,0,17],
 "libwebsockets_8h.html#adedbc79528b71a5c7f27cde87100c9aa":[11,0,0,0,15],
 "libwebsockets_8h.html#adf4abd01e8c43f07c6e498ce13590c3e":[11,0,0,0,131],
-"libwebsockets_8h.html#aefb2f20fe5bb29d79701a399838ef4ce":[11,0,0,0,169],
+"libwebsockets_8h.html#aefb2f20fe5bb29d79701a399838ef4ce":[11,0,0,0,170],
 "libwebsockets_8h.html#af52923473c59e643a974d65e12290831":[11,0,0,0,63],
 "libwebsockets_8h.html#aff42d53861afdc1a6edfb999ba688ecb":[11,0,0,0,11],
 "libwebsockets_8h_source.html":[11,0,0,0],
@@ -247,7 +249,5 @@ var NAVTREEINDEX3 =
 "structlws__http__mount.html#aabec1a326780aafe11b977000983be0c":[9,4,0,1,1],
 "structlws__http__mount.html#ac8489b60b8f969eb19c9abbdeac90743":[9,4,0,1,12],
 "structlws__http__mount.html#ae137203040c6153694bd88a708da5395":[9,4,0,1,4],
-"structlws__http__mount.html#ae7b5c0f4c5408061e6ea3a8d281f45af":[9,4,0,1,6],
-"structlws__http__mount.html#ae90d1efe7178199fad39de2926902ee4":[9,4,0,1,7],
-"structlws__plat__file__ops.html":[9,20,0]
+"structlws__http__mount.html#ae7b5c0f4c5408061e6ea3a8d281f45af":[9,4,0,1,6]
 };
diff --git a/doc/html/navtreeindex4.js b/doc/html/navtreeindex4.js
index 7524df53..956b252d 100644
--- a/doc/html/navtreeindex4.js
+++ b/doc/html/navtreeindex4.js
@@ -1,5 +1,7 @@
 var NAVTREEINDEX4 =
 {
+"structlws__http__mount.html#ae90d1efe7178199fad39de2926902ee4":[9,4,0,1,7],
+"structlws__plat__file__ops.html":[9,20,0],
 "structlws__plat__file__ops.html#a01f483807a9862736b17ba9ed5110c40":[9,20,0,2],
 "structlws__plat__file__ops.html#a034ec96f2fbaf52b4aa3e82d20795f7b":[9,20,0,0],
 "structlws__plat__file__ops.html#a1fae8330ee94649a3551e31a30809793":[9,20,0,4],
@@ -42,16 +44,16 @@ 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,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":[9,4,2],
 "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#a0640a92513c70ee6b9b295a9ad1658e7":[9,4,0,0,3],
 "structlws__protocol__vhost__options.html#abc714ddb4171756fc8196e9823a1e21c":[9,4,0,0,1],
-"structlws__protocol__vhost__options.html#acf9db77f8eb64cd4e314be9b43d8a8b9":[9,4,2,0],
+"structlws__protocol__vhost__options.html#abc714ddb4171756fc8196e9823a1e21c":[9,4,2,1],
 "structlws__protocol__vhost__options.html#acf9db77f8eb64cd4e314be9b43d8a8b9":[9,4,0,0,0],
-"structlws__protocol__vhost__options.html#afd99fbc90be51ea2465b550c2ec47822":[9,4,0,0,2],
+"structlws__protocol__vhost__options.html#acf9db77f8eb64cd4e314be9b43d8a8b9":[9,4,2,0],
 "structlws__protocol__vhost__options.html#afd99fbc90be51ea2465b550c2ec47822":[9,4,2,2],
+"structlws__protocol__vhost__options.html#afd99fbc90be51ea2465b550c2ec47822":[9,4,0,0,2],
 "structlws__protocols.html":[9,10,1],
 "structlws__protocols.html#a0d1d4996d81b2f5e125bcec981e461c5":[9,10,1,4],
 "structlws__protocols.html#a0e63edb457a613c3fa4271e0a8f19624":[9,10,1,2],
@@ -67,8 +69,8 @@ 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],
diff --git a/lib/client-handshake.c b/lib/client-handshake.c
index 254ccc19..278bb8d5 100644
--- a/lib/client-handshake.c
+++ b/lib/client-handshake.c
@@ -380,7 +380,7 @@ html_parser_cb(const hubbub_token *token, void *pw)
 	switch (token->type) {
 	case HUBBUB_TOKEN_DOCTYPE:
 
-		p += snprintf(p, end - p, "<!DOCTYPE %.*s %s ",
+		p += lws_snprintf(p, end - p, "<!DOCTYPE %.*s %s ",
 				(int) token->data.doctype.name.len,
 				token->data.doctype.name.ptr,
 				token->data.doctype.force_quirks ?
@@ -389,20 +389,20 @@ html_parser_cb(const hubbub_token *token, void *pw)
 		if (token->data.doctype.public_missing)
 			printf("\tpublic: missing\n");
 		else
-			p += snprintf(p, end - p, "PUBLIC \"%.*s\"\n",
+			p += lws_snprintf(p, end - p, "PUBLIC \"%.*s\"\n",
 				(int) token->data.doctype.public_id.len,
 				token->data.doctype.public_id.ptr);
 
 		if (token->data.doctype.system_missing)
 			printf("\tsystem: missing\n");
 		else
-			p += snprintf(p, end - p, " \"%.*s\">\n",
+			p += lws_snprintf(p, end - p, " \"%.*s\">\n",
 				(int) token->data.doctype.system_id.len,
 				token->data.doctype.system_id.ptr);
 
 		break;
 	case HUBBUB_TOKEN_START_TAG:
-		p += snprintf(p, end - p, "<%.*s", (int)token->data.tag.name.len,
+		p += lws_snprintf(p, end - p, "<%.*s", (int)token->data.tag.name.len,
 				token->data.tag.name.ptr);
 
 /*				(token->data.tag.self_closing) ?
@@ -422,23 +422,23 @@ html_parser_cb(const hubbub_token *token, void *pw)
 					pp += r->from_len;
 					plen -= r->from_len;
 				}
-				p += snprintf(p, end - p, " %.*s=\"%s/%.*s\"",
+				p += lws_snprintf(p, end - p, " %.*s=\"%s/%.*s\"",
 				       (int) token->data.tag.attributes[i].name.len,
 				       token->data.tag.attributes[i].name.ptr,
 				       r->to, plen, pp);
 
 			} else
 
-				p += snprintf(p, end - p, " %.*s=\"%.*s\"",
+				p += lws_snprintf(p, end - p, " %.*s=\"%.*s\"",
 					(int) token->data.tag.attributes[i].name.len,
 					token->data.tag.attributes[i].name.ptr,
 					(int) token->data.tag.attributes[i].value.len,
 					token->data.tag.attributes[i].value.ptr);
 		}
-		p += snprintf(p, end - p, ">\n");
+		p += lws_snprintf(p, end - p, ">\n");
 		break;
 	case HUBBUB_TOKEN_END_TAG:
-		p += snprintf(p, end - p, "</%.*s", (int) token->data.tag.name.len,
+		p += lws_snprintf(p, end - p, "</%.*s", (int) token->data.tag.name.len,
 				token->data.tag.name.ptr);
 /*
 				(token->data.tag.self_closing) ?
@@ -447,25 +447,25 @@ html_parser_cb(const hubbub_token *token, void *pw)
 						"attributes:" : "");
 */
 		for (i = 0; i < token->data.tag.n_attributes; i++) {
-			p += snprintf(p, end - p, " %.*s='%.*s'\n",
+			p += lws_snprintf(p, end - p, " %.*s='%.*s'\n",
 				(int) token->data.tag.attributes[i].name.len,
 				token->data.tag.attributes[i].name.ptr,
 				(int) token->data.tag.attributes[i].value.len,
 				token->data.tag.attributes[i].value.ptr);
 		}
-		p += snprintf(p, end - p, ">\n");
+		p += lws_snprintf(p, end - p, ">\n");
 		break;
 	case HUBBUB_TOKEN_COMMENT:
-		p += snprintf(p, end - p, "<!-- %.*s -->\n",
+		p += lws_snprintf(p, end - p, "<!-- %.*s -->\n",
 				(int) token->data.comment.len,
 				token->data.comment.ptr);
 		break;
 	case HUBBUB_TOKEN_CHARACTER:
-		p += snprintf(p, end - p, "%.*s", (int) token->data.character.len,
+		p += lws_snprintf(p, end - p, "%.*s", (int) token->data.character.len,
 				token->data.character.ptr);
 		break;
 	case HUBBUB_TOKEN_EOF:
-		p += snprintf(p, end - p, "\n");
+		p += lws_snprintf(p, end - p, "\n");
 		break;
 	}
 
diff --git a/lib/lejp-conf.c b/lib/lejp-conf.c
index 46866ee8..2b0a889c 100644
--- a/lib/lejp-conf.c
+++ b/lib/lejp-conf.c
@@ -247,7 +247,7 @@ lejp_globals_cb(struct lejp_ctx *ctx, char reason)
 		return 0;
 	}
 
-	a->p += snprintf(a->p, a->end - a->p, "%s", ctx->buf);
+	a->p += lws_snprintf(a->p, a->end - a->p, "%s", ctx->buf);
 	*(a->p)++ = '\0';
 
 	return 0;
@@ -613,11 +613,11 @@ dostring:
 			n = a->end - a->p;
 		strncpy(a->p, p, n);
 		a->p += n;
-		a->p += snprintf(a->p, a->end - a->p, "%s", LWS_INSTALL_DATADIR);
+		a->p += lws_snprintf(a->p, a->end - a->p, "%s", LWS_INSTALL_DATADIR);
 		p += n + strlen(ESC_INSTALL_DATADIR);
 	}
 
-	a->p += snprintf(a->p, a->end - a->p, "%s", p);
+	a->p += lws_snprintf(a->p, a->end - a->p, "%s", p);
 	*(a->p)++ = '\0';
 
 	return 0;
@@ -684,7 +684,7 @@ lwsws_get_config_d(void *user, const char *d, const char * const *paths,
 	}
 
 	while (uv_fs_scandir_next(&req, &dent) != UV_EOF) {
-		snprintf(path, sizeof(path) - 1, "%s/%s", d, dent.name);
+		lws_snprintf(path, sizeof(path) - 1, "%s/%s", d, dent.name);
 		ret = lwsws_get_config(user, path, paths, count_paths, cb);
 		if (ret)
 			goto bail;
@@ -724,7 +724,7 @@ lwsws_get_config_d(void *user, const char *d, const char * const *paths,
 	}
 
 	for (i = 0; i < n; i++) {
-		snprintf(path, sizeof(path) - 1, "%s/%s", d,
+		lws_snprintf(path, sizeof(path) - 1, "%s/%s", d,
 			 namelist[i]->d_name);
 		ret = lwsws_get_config(user, path, paths, count_paths, cb);
 		if (ret) {
@@ -773,11 +773,11 @@ lwsws_get_config_globals(struct lws_context_creation_info *info, const char *d,
 		old++;
 	}
 
-	snprintf(dd, sizeof(dd) - 1, "%s/conf", d);
+	lws_snprintf(dd, sizeof(dd) - 1, "%s/conf", d);
 	if (lwsws_get_config(&a, dd, paths_global,
 			     ARRAY_SIZE(paths_global), lejp_globals_cb) > 1)
 		return 1;
-	snprintf(dd, sizeof(dd) - 1, "%s/conf.d", d);
+	lws_snprintf(dd, sizeof(dd) - 1, "%s/conf.d", d);
 	if (lwsws_get_config_d(&a, dd, paths_global,
 			       ARRAY_SIZE(paths_global), lejp_globals_cb) > 1)
 		return 1;
@@ -808,11 +808,11 @@ lwsws_get_config_vhosts(struct lws_context *context,
 	a.protocols = info->protocols;
 	a.extensions = info->extensions;
 
-	snprintf(dd, sizeof(dd) - 1, "%s/conf", d);
+	lws_snprintf(dd, sizeof(dd) - 1, "%s/conf", d);
 	if (lwsws_get_config(&a, dd, paths_vhosts,
 			     ARRAY_SIZE(paths_vhosts), lejp_vhosts_cb) > 1)
 		return 1;
-	snprintf(dd, sizeof(dd) - 1, "%s/conf.d", d);
+	lws_snprintf(dd, sizeof(dd) - 1, "%s/conf.d", d);
 	if (lwsws_get_config_d(&a, dd, paths_vhosts,
 			       ARRAY_SIZE(paths_vhosts), lejp_vhosts_cb) > 1)
 		return 1;
diff --git a/lib/libuv.c b/lib/libuv.c
index 44689dc8..c12353bf 100644
--- a/lib/libuv.c
+++ b/lib/libuv.c
@@ -492,7 +492,7 @@ lws_plat_plugins_init(struct lws_context * context, const char * const *d)
 
 			lwsl_notice("   %s\n", dent.name);
 
-			snprintf(path, sizeof(path) - 1, "%s/%s", *d, dent.name);
+			lws_snprintf(path, sizeof(path) - 1, "%s/%s", *d, dent.name);
 			if (uv_dlopen(path, &lib)) {
 				uv_dlerror(&lib);
 				lwsl_err("Error loading DSO: %s\n", lib.errmsg);
@@ -500,11 +500,11 @@ lws_plat_plugins_init(struct lws_context * context, const char * const *d)
 			}
 			/* we could open it, can we get his init function? */
 #if !defined(WIN32)
-			m = snprintf(path, sizeof(path) - 1, "init_%s",
+			m = lws_snprintf(path, sizeof(path) - 1, "init_%s",
 				     dent.name + 3 /* snip lib... */);
 			path[m - 3] = '\0'; /* snip the .so */
 #else
-			m = snprintf(path, sizeof(path) - 1, "init_%s",
+			m = lws_snprintf(path, sizeof(path) - 1, "init_%s",
 				     dent.name);
 			path[m - 4] = '\0'; /* snip the .dll */
 #endif
@@ -569,10 +569,10 @@ lws_plat_plugins_destroy(struct lws_context * context)
 	while (plugin) {
 		p = plugin;
 #if !defined(WIN32)
-		m = snprintf(path, sizeof(path) - 1, "destroy_%s", plugin->name + 3);
+		m = lws_snprintf(path, sizeof(path) - 1, "destroy_%s", plugin->name + 3);
 		path[m - 3] = '\0';
 #else
-		m = snprintf(path, sizeof(path) - 1, "destroy_%s", plugin->name);
+		m = lws_snprintf(path, sizeof(path) - 1, "destroy_%s", plugin->name);
 		path[m - 4] = '\0';
 #endif
 
diff --git a/lib/libwebsockets.c b/lib/libwebsockets.c
index 79aee0ee..752fe345 100755
--- a/lib/libwebsockets.c
+++ b/lib/libwebsockets.c
@@ -1124,7 +1124,7 @@ lwsl_timestamp(int level, char *p, int len)
 			continue;
 		now = time_in_microseconds() / 100;
 		if (ptm)
-			n = snprintf(p, len,
+			n = lws_snprintf(p, len,
 				"[%04d/%02d/%02d %02d:%02d:%02d:%04d] %s: ",
 				ptm->tm_year + 1900,
 				ptm->tm_mon + 1,
@@ -1134,7 +1134,7 @@ lwsl_timestamp(int level, char *p, int len)
 				ptm->tm_sec,
 				(int)(now % 10000), log_level_names[n]);
 		else
-			n = snprintf(p, len, "[%llu:%04d] %s: ",
+			n = lws_snprintf(p, len, "[%llu:%04d] %s: ",
 					(unsigned long long) now / 10000,
 					(int)(now % 10000), log_level_names[n]);
 		return n;
@@ -1717,6 +1717,26 @@ lws_finalize_startup(struct lws_context *context)
 	return 0;
 }
 
+int
+lws_snprintf(char *str, size_t size, const char *format, ...)
+{
+	va_list ap;
+	int n;
+
+	if (!size)
+		return 0;
+
+	va_start(ap, format);
+	n = vsnprintf(str, size, format, ap);
+	va_end(ap);
+
+	if (n >= size)
+		return size;
+
+	return n;
+}
+
+
 LWS_VISIBLE LWS_EXTERN int
 lws_is_cgi(struct lws *wsi) {
 #ifdef LWS_WITH_CGI
@@ -1910,18 +1930,18 @@ lws_cgi(struct lws *wsi, const char * const *exec_array, int script_uri_path_len
 		if (uritok < 0)
 			goto bail3;
 
-		snprintf(cgi_path, sizeof(cgi_path) - 1, "REQUEST_URI=%s",
+		lws_snprintf(cgi_path, sizeof(cgi_path) - 1, "REQUEST_URI=%s",
 			 lws_hdr_simple_ptr(wsi, uritok));
 		cgi_path[sizeof(cgi_path) - 1] = '\0';
 		env_array[n++] = cgi_path;
 
 		env_array[n++] = p;
-		p += snprintf(p, end - p, "REQUEST_METHOD=%s",
+		p += lws_snprintf(p, end - p, "REQUEST_METHOD=%s",
 			      meth_names[m]);
 		p++;
 
 		env_array[n++] = p;
-		p += snprintf(p, end - p, "QUERY_STRING=");
+		p += lws_snprintf(p, end - p, "QUERY_STRING=");
 		/* dump the individual URI Arg parameters */
 		m = 0;
 		while (1) {
@@ -1946,55 +1966,55 @@ lws_cgi(struct lws *wsi, const char * const *exec_array, int script_uri_path_len
 		*p++ = '\0';
 
 		env_array[n++] = p;
-		p += snprintf(p, end - p, "PATH_INFO=%s",
+		p += lws_snprintf(p, end - p, "PATH_INFO=%s",
 			      lws_hdr_simple_ptr(wsi, uritok) +
 			      script_uri_path_len);
 		p++;
 	}
 	if (lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_REFERER)) {
 		env_array[n++] = p;
-		p += snprintf(p, end - p, "HTTP_REFERER=%s",
+		p += lws_snprintf(p, end - p, "HTTP_REFERER=%s",
 			      lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_REFERER));
 		p++;
 	}
 	if (lws_hdr_total_length(wsi, WSI_TOKEN_HOST)) {
 		env_array[n++] = p;
-		p += snprintf(p, end - p, "HTTP_HOST=%s",
+		p += lws_snprintf(p, end - p, "HTTP_HOST=%s",
 			      lws_hdr_simple_ptr(wsi, WSI_TOKEN_HOST));
 		p++;
 	}
 	if (lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_COOKIE)) {
 		env_array[n++] = p;
-		p += snprintf(p, end - p, "HTTP_COOKIE=%s",
+		p += lws_snprintf(p, end - p, "HTTP_COOKIE=%s",
 			      lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COOKIE));
 		p++;
 	}
 	if (lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_USER_AGENT)) {
 		env_array[n++] = p;
-		p += snprintf(p, end - p, "USER_AGENT=%s",
+		p += lws_snprintf(p, end - p, "USER_AGENT=%s",
 			      lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_USER_AGENT));
 		p++;
 	}
 	if (uritok == WSI_TOKEN_POST_URI) {
 		if (lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE)) {
 			env_array[n++] = p;
-			p += snprintf(p, end - p, "CONTENT_TYPE=%s",
+			p += lws_snprintf(p, end - p, "CONTENT_TYPE=%s",
 				      lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE));
 			p++;
 		}
 		if (lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH)) {
 			env_array[n++] = p;
-			p += snprintf(p, end - p, "CONTENT_LENGTH=%s",
+			p += lws_snprintf(p, end - p, "CONTENT_LENGTH=%s",
 				      lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH));
 			p++;
 		}
 	}
 	env_array[n++] = p;
-	p += snprintf(p, end - p, "SCRIPT_PATH=%s", exec_array[0]) + 1;
+	p += lws_snprintf(p, end - p, "SCRIPT_PATH=%s", exec_array[0]) + 1;
 
 	while (mp_cgienv) {
 		env_array[n++] = p;
-		p += snprintf(p, end - p, "%s=%s", mp_cgienv->name,
+		p += lws_snprintf(p, end - p, "%s=%s", mp_cgienv->name,
 			      mp_cgienv->value);
 		lwsl_debug("   Applying mount-specific cgi env '%s'\n",
 			   env_array[n - 1]);
@@ -2431,7 +2451,7 @@ lws_access_log(struct lws *wsi)
 	if (!p)
 		p = "";
 
-	l = snprintf(ass, sizeof(ass) - 1, "%s %d %lu %s\n",
+	l = lws_snprintf(ass, sizeof(ass) - 1, "%s %d %lu %s\n",
 		     wsi->access_log.header_log,
 		     wsi->access_log.response, wsi->access_log.sent, p);
 
@@ -2475,7 +2495,7 @@ lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len)
 	if (len < 100)
 		return 0;
 
-	buf += snprintf(buf, end - buf,
+	buf += lws_snprintf(buf, end - buf,
 			"{\n \"name\":\"%s\",\n"
 			" \"port\":\"%d\",\n"
 			" \"use_ssl\":\"%d\",\n"
@@ -2501,11 +2521,11 @@ lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len)
 	if (vh->mount_list) {
 		const struct lws_http_mount *m = vh->mount_list;
 
-		buf += snprintf(buf, end - buf, ",\n \"mounts\":[");
+		buf += lws_snprintf(buf, end - buf, ",\n \"mounts\":[");
 		while (m) {
 			if (!first)
-				buf += snprintf(buf, end - buf, ",");
-			buf += snprintf(buf, end - buf,
+				buf += lws_snprintf(buf, end - buf, ",");
+			buf += lws_snprintf(buf, end - buf,
 					"\n  {\n   \"mountpoint\":\"%s\",\n"
 					"  \"origin\":\"%s%s\",\n"
 					"  \"cache_max_age\":\"%d\",\n"
@@ -2521,25 +2541,25 @@ lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len)
 					m->cache_revalidate,
 					m->cache_intermediaries);
 			if (m->def)
-				buf += snprintf(buf, end - buf,
+				buf += lws_snprintf(buf, end - buf,
 						",\n  \"default\":\"%s\"",
 						m->def);
-			buf += snprintf(buf, end - buf, "\n  }");
+			buf += lws_snprintf(buf, end - buf, "\n  }");
 			first = 0;
 			m = m->mount_next;
 		}
-		buf += snprintf(buf, end - buf, "\n ]");
+		buf += lws_snprintf(buf, end - buf, "\n ]");
 	}
 
 	if (vh->protocols) {
 		n = 0;
 		first = 1;
 
-		buf += snprintf(buf, end - buf, ",\n \"ws-protocols\":[");
+		buf += lws_snprintf(buf, end - buf, ",\n \"ws-protocols\":[");
 		while (n < vh->count_protocols) {
 			if (!first)
-				buf += snprintf(buf, end - buf, ",");
-			buf += snprintf(buf, end - buf,
+				buf += lws_snprintf(buf, end - buf, ",");
+			buf += lws_snprintf(buf, end - buf,
 					"\n  {\n   \"%s\":{\n"
 					"    \"status\":\"ok\"\n   }\n  }"
 					,
@@ -2547,10 +2567,10 @@ lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len)
 			first = 0;
 			n++;
 		}
-		buf += snprintf(buf, end - buf, "\n ]");
+		buf += lws_snprintf(buf, end - buf, "\n ]");
 	}
 
-	buf += snprintf(buf, end - buf, "\n}");
+	buf += lws_snprintf(buf, end - buf, "\n}");
 
 	return buf - orig;
 }
@@ -2569,7 +2589,7 @@ lws_json_dump_context(const struct lws_context *context, char *buf, int len)
 	time_t t = time(NULL);
 	int listening = 0, cgi_count = 0, n;
 
-	buf += snprintf(buf, end - buf, "{ "
+	buf += lws_snprintf(buf, end - buf, "{ "
 					"\"version\":\"%s\",\n"
 					"\"uptime\":\"%ld\",\n"
 					"\"cgi_spawned\":\"%d\",\n"
@@ -2589,19 +2609,19 @@ lws_json_dump_context(const struct lws_context *context, char *buf, int len)
 
 		m = getloadavg(d, 3);
 		for (n = 0; n < m; n++) {
-			buf += snprintf(buf, end - buf,
+			buf += lws_snprintf(buf, end - buf,
 				"\"l%d\":\"%.2f\",\n",
 				n + 1, d[n]);
 		}
 	}
 #endif
 
-	buf += snprintf(buf, end - buf, "\"pt\":[\n ");
+	buf += lws_snprintf(buf, end - buf, "\"pt\":[\n ");
 	for (n = 0; n < context->count_threads; n++) {
 		pt = &context->pt[n];
 		if (n)
-			buf += snprintf(buf, end - buf, ",");
-		buf += snprintf(buf, end - buf,
+			buf += lws_snprintf(buf, end - buf, ",");
+		buf += lws_snprintf(buf, end - buf,
 				"\n  {\n"
 				"    \"fds_count\":\"%d\",\n"
 				"    \"ah_pool_inuse\":\"%d\",\n"
@@ -2612,7 +2632,7 @@ lws_json_dump_context(const struct lws_context *context, char *buf, int len)
 				pt->ah_wait_list_length);
 	}
 
-	buf += snprintf(buf, end - buf, "], \"vhosts\":[\n ");
+	buf += lws_snprintf(buf, end - buf, "], \"vhosts\":[\n ");
 
 	while (vh) {
 		if (!first)
@@ -2625,7 +2645,7 @@ lws_json_dump_context(const struct lws_context *context, char *buf, int len)
 		vh = vh->vhost_next;
 	}
 
-	buf += snprintf(buf, end - buf, "],\n\"listen_wsi\":\"%d\"",
+	buf += lws_snprintf(buf, end - buf, "],\n\"listen_wsi\":\"%d\"",
 			listening);
 
 #ifdef LWS_WITH_CGI
@@ -2640,10 +2660,10 @@ lws_json_dump_context(const struct lws_context *context, char *buf, int len)
 		}
 	}
 #endif
-	buf += snprintf(buf, end - buf, ",\n \"cgi_alive\":\"%d\"\n ",
+	buf += lws_snprintf(buf, end - buf, ",\n \"cgi_alive\":\"%d\"\n ",
 			cgi_count);
 
-	buf += snprintf(buf, end - buf, "}\n ");
+	buf += lws_snprintf(buf, end - buf, "}\n ");
 
 	return buf - orig;
 }
diff --git a/lib/libwebsockets.h b/lib/libwebsockets.h
index d19c899c..6a5f078a 100644
--- a/lib/libwebsockets.h
+++ b/lib/libwebsockets.h
@@ -149,7 +149,7 @@ struct sockaddr_in;
 #define LWS_O_RDONLY _O_RDONLY
 
 #if !defined(_MSC_VER) || _MSC_VER < 1900 /* Visual Studio 2015 already defines this in <stdio.h> */
-#define snprintf _snprintf
+#define lws_snprintf _snprintf
 #endif
 
 #ifndef __func__
@@ -3567,6 +3567,20 @@ lws_interface_to_sa(int ipv6, const char *ifname, struct sockaddr_in *addr,
 */
 ///@{
 
+/**
+ * lws_snprintf(): snprintf that truncates the returned length too
+ *
+ * \param str: destination buffer
+ * \param size: bytes left in destination buffer
+ * \param format: format string
+ * \param ...: args for format
+ *
+ * This lets you correctly truncate buffers by concatenating lengths, if you
+ * reach the limit the reported length doesn't exceed the limit.
+ */
+LWS_VISIBLE LWS_EXTERN int
+lws_snprintf(char *str, size_t size, const char *format, ...);
+
 /**
  * lws_get_random(): fill a buffer with platform random data
  *
diff --git a/lib/lws-plat-esp8266.c b/lib/lws-plat-esp8266.c
index ba36e347..cb6c686d 100644
--- a/lib/lws-plat-esp8266.c
+++ b/lib/lws-plat-esp8266.c
@@ -249,7 +249,7 @@ lws_plat_get_peer_simple(struct lws *wsi, char *name, int namelen)
 {
 	unsigned char *p = wsi->sock->proto.tcp->remote_ip;
 
-	snprintf(name, namelen, "%u.%u.%u.%u", p[0], p[1], p[2], p[3]);
+	lws_snprintf(name, namelen, "%u.%u.%u.%u", p[0], p[1], p[2], p[3]);
 
 	return name;
 }
diff --git a/lib/lws-plat-unix.c b/lib/lws-plat-unix.c
index c3e58947..ee30d0f2 100644
--- a/lib/lws-plat-unix.c
+++ b/lib/lws-plat-unix.c
@@ -327,7 +327,7 @@ lws_plat_plugins_init(struct lws_context * context, const char * const *d)
 
 			lwsl_notice("   %s\n", namelist[i]->d_name);
 
-			snprintf(path, sizeof(path) - 1, "%s/%s", *d,
+			lws_snprintf(path, sizeof(path) - 1, "%s/%s", *d,
 				 namelist[i]->d_name);
 			l = dlopen(path, RTLD_NOW);
 			if (!l) {
@@ -337,7 +337,7 @@ lws_plat_plugins_init(struct lws_context * context, const char * const *d)
 				goto bail;
 			}
 			/* we could open it, can we get his init function? */
-			m = snprintf(path, sizeof(path) - 1, "init_%s",
+			m = lws_snprintf(path, sizeof(path) - 1, "init_%s",
 				     namelist[i]->d_name + 3 /* snip lib... */);
 			path[m - 3] = '\0'; /* snip the .so */
 			initfunc = dlsym(l, path);
@@ -402,7 +402,7 @@ lws_plat_plugins_destroy(struct lws_context * context)
 
 	while (plugin) {
 		p = plugin;
-		m = snprintf(path, sizeof(path) - 1, "destroy_%s", plugin->name + 3);
+		m = lws_snprintf(path, sizeof(path) - 1, "destroy_%s", plugin->name + 3);
 		path[m - 3] = '\0';
 		func = dlsym(plugin->l, path);
 		if (!func) {
diff --git a/lib/private-libwebsockets.h b/lib/private-libwebsockets.h
index 2d2e672d..f475a378 100644
--- a/lib/private-libwebsockets.h
+++ b/lib/private-libwebsockets.h
@@ -141,7 +141,7 @@ char *ets_strchr(const char *s, int c);
 #endif
 
 #ifdef LWS_HAVE__SNPRINTF
-#define snprintf _snprintf
+#define lws_snprintf _snprintf
 #endif
 
 #else /* not windows --> */
diff --git a/lib/server.c b/lib/server.c
index 3dad2e27..c8a8b4cc 100644
--- a/lib/server.c
+++ b/lib/server.c
@@ -356,7 +356,7 @@ lws_http_serve(struct lws *wsi, char *uri, const char *origin,
 #endif
 	int n;
 
-	snprintf(path, sizeof(path) - 1, "%s/%s", origin, uri);
+	lws_snprintf(path, sizeof(path) - 1, "%s/%s", origin, uri);
 
 #if !defined(_WIN32_WCE) && !defined(LWS_WITH_ESP8266)
 	do {
@@ -377,12 +377,12 @@ lws_http_serve(struct lws *wsi, char *uri, const char *origin,
 			}
 			sym[len] = '\0';
 			lwsl_debug("symlink %s -> %s\n", path, sym);
-			snprintf(path, sizeof(path) - 1, "%s", sym);
+			lws_snprintf(path, sizeof(path) - 1, "%s", sym);
 		}
 #endif
 		if ((S_IFMT & st.st_mode) == S_IFDIR) {
 			lwsl_debug("default filename append to dir\n");
-			snprintf(path, sizeof(path) - 1, "%s/%s/index.html",
+			lws_snprintf(path, sizeof(path) - 1, "%s/%s/index.html",
 				 origin, uri);
 		}
 
@@ -729,7 +729,7 @@ lws_http_action(struct lws *wsi)
 			else
 				me = "unknown";
 
-			snprintf(wsi->access_log.header_log, l,
+			lws_snprintf(wsi->access_log.header_log, l,
 				 "%s - - [%s] \"%s %s %s\"",
 				 pa, da, me, uri_ptr,
 				 hver[wsi->u.http.request_version]);
@@ -818,11 +818,11 @@ lws_http_action(struct lws *wsi)
 		/* > at start indicates deal with by redirect */
 		if (hit->origin_protocol == LWSMPRO_REDIR_HTTP ||
 		    hit->origin_protocol == LWSMPRO_REDIR_HTTPS)
-			n = snprintf((char *)end, 256, "%s%s",
+			n = lws_snprintf((char *)end, 256, "%s%s",
 				    oprot[hit->origin_protocol & 1],
 				    hit->origin);
 		else
-			n = snprintf((char *)end, 256,
+			n = lws_snprintf((char *)end, 256,
 			    "%s%s%s/", oprot[lws_is_ssl(wsi)],
 			    lws_hdr_simple_ptr(wsi, WSI_TOKEN_HOST),
 			    uri_ptr);
diff --git a/plugins/generic-sessions/handlers.c b/plugins/generic-sessions/handlers.c
index 108983cc..ccea5446 100644
--- a/plugins/generic-sessions/handlers.c
+++ b/plugins/generic-sessions/handlers.c
@@ -39,7 +39,7 @@ lwsgs_handler_confirm(struct per_vhost_data__gs *vhd, struct lws *wsi,
 		goto verf_fail;
 
 	u.username[0] = '\0';
-	snprintf(s, sizeof(s) - 1,
+	lws_snprintf(s, sizeof(s) - 1,
 		 "select username,email,verified from users where token = '%s';",
 		 lws_sql_purify(esc, &cookie[6], sizeof(esc) - 1));
 	if (sqlite3_exec(vhd->pdb, s, lwsgs_lookup_callback_user, &u, NULL) !=
@@ -55,7 +55,7 @@ lwsgs_handler_confirm(struct per_vhost_data__gs *vhd, struct lws *wsi,
 	}
 
 	lwsl_notice("Verifying %s\n", u.username);
-	snprintf(s, sizeof(s) - 1,
+	lws_snprintf(s, sizeof(s) - 1,
 		 "update users set verified=%d where username='%s';",
 		 LWSGS_VERIFIED_ACCEPTED,
 		 lws_sql_purify(esc, u.username, sizeof(esc) - 1));
@@ -74,7 +74,7 @@ lwsgs_handler_confirm(struct per_vhost_data__gs *vhd, struct lws *wsi,
 	a.email = u.email;
 	lws_callback_vhost_protocols(wsi, LWS_CALLBACK_GS_EVENT, &a, 0);
 
-	snprintf(pss->onward, sizeof(pss->onward),
+	lws_snprintf(pss->onward, sizeof(pss->onward),
 		 "%s/post-verify-ok.html", vhd->email_confirm_url);
 
 	pss->login_expires = lws_now_secs() + vhd->timeout_absolute_secs;
@@ -98,7 +98,7 @@ verf_fail:
 	lwsgs_get_sid_from_wsi(wsi, &pss->delete_session);
 	pss->login_expires = 0;
 
-	snprintf(pss->onward, sizeof(pss->onward), "%s/post-verify-fail.html",
+	lws_snprintf(pss->onward, sizeof(pss->onward), "%s/post-verify-fail.html",
 		 vhd->email_confirm_url);
 
 	return 1;
@@ -119,7 +119,7 @@ lwsgs_handler_forgot(struct per_vhost_data__gs *vhd, struct lws *wsi,
 		goto forgot_fail;
 
 	u.username[0] = '\0';
-	snprintf(s, sizeof(s) - 1,
+	lws_snprintf(s, sizeof(s) - 1,
 		 "select username,verified from users where verified=%d and "
 		 "token = '%s' and token_time != 0;",
 		 LWSGS_VERIFIED_ACCEPTED,
@@ -140,7 +140,7 @@ lwsgs_handler_forgot(struct per_vhost_data__gs *vhd, struct lws *wsi,
 
 	/* mark user as having validated forgot flow just now */
 
-	snprintf(s, sizeof(s) - 1,
+	lws_snprintf(s, sizeof(s) - 1,
 		 "update users set token_time=0,last_forgot_validated=%lu "
 		 "where username='%s';",
 		 (unsigned long)lws_now_secs(),
@@ -157,7 +157,7 @@ lwsgs_handler_forgot(struct per_vhost_data__gs *vhd, struct lws *wsi,
 	if (!a)
 		a = "broken-forget-post-good-url";
 
-	snprintf(pss->onward, sizeof(pss->onward),
+	lws_snprintf(pss->onward, sizeof(pss->onward),
 		 "%s/%s", vhd->email_confirm_url, a);
 
 	pss->login_expires = lws_now_secs() + vhd->timeout_absolute_secs;
@@ -185,7 +185,7 @@ forgot_fail:
 	if (!a)
 		a = "broken-forget-post-bad-url";
 
-	snprintf(pss->onward, sizeof(pss->onward), "%s/%s",
+	lws_snprintf(pss->onward, sizeof(pss->onward), "%s/%s",
 		 vhd->email_confirm_url, a);
 
 	return 1;
@@ -227,7 +227,7 @@ lwsgs_handler_check(struct per_vhost_data__gs *vhd,
 		goto reply;
 	}
 
-	snprintf(s, sizeof(s) - 1,
+	lws_snprintf(s, sizeof(s) - 1,
 		 "select username, email from users where %s = '%s';",
 		 colname[n], lws_sql_purify(esc, pc, sizeof(esc) - 1));
 	if (sqlite3_exec(vhd->pdb, s, lwsgs_lookup_callback_user, &u, NULL) !=
@@ -320,7 +320,7 @@ lwsgs_handler_change_password(struct per_vhost_data__gs *vhd, struct lws *wsi,
 		a.email = "";
 		lws_callback_vhost_protocols(wsi, LWS_CALLBACK_GS_EVENT, &a, 0);
 
-		snprintf(s, sizeof(s) - 1,
+		lws_snprintf(s, sizeof(s) - 1,
 			 "delete from users where username='%s';"
 			 "delete from sessions where username='%s';",
 			 lws_sql_purify(esc, u.username, sizeof(esc) - 1),
@@ -333,7 +333,7 @@ lwsgs_handler_change_password(struct per_vhost_data__gs *vhd, struct lws *wsi,
 
 	lwsl_notice("updating password hash\n");
 
-	snprintf(s, sizeof(s) - 1,
+	lws_snprintf(s, sizeof(s) - 1,
 		 "update users set pwhash='%s', pwsalt='%s', "
 		 "last_forgot_validated=0 where username='%s';",
 		 u.pwhash.id, u.pwsalt.id,
@@ -385,13 +385,13 @@ lwsgs_handler_forgot_pw_form(struct per_vhost_data__gs *vhd,
 
 	u.username[0] = '\0';
 	if (lws_spa_get_string(pss->spa, FGS_USERNAME))
-		snprintf(s, sizeof(s) - 1,
+		lws_snprintf(s, sizeof(s) - 1,
 		 "select username,email "
 		 "from users where username = '%s';",
 		 lws_sql_purify(esc, lws_spa_get_string(pss->spa, FGS_USERNAME),
 				 sizeof(esc) - 1));
 	else
-		snprintf(s, sizeof(s) - 1,
+		lws_snprintf(s, sizeof(s) - 1,
 		 "select username,email "
 		 "from users where email = '%s';",
 		 lws_sql_purify(esc, lws_spa_get_string(pss->spa, FGS_EMAIL), sizeof(esc) - 1));
@@ -414,7 +414,7 @@ lwsgs_handler_forgot_pw_form(struct per_vhost_data__gs *vhd,
 		return 1;
 	}
 	sha1_to_lwsgw_hash(sid_rand, &hash);
-	n = snprintf(s, sizeof(s),
+	n = lws_snprintf(s, sizeof(s),
 		"From: Forgot Password Assistant Noreply <%s>\n"
 		"To: %s <%s>\n"
 		  "Subject: Password reset request\n"
@@ -427,7 +427,7 @@ lwsgs_handler_forgot_pw_form(struct per_vhost_data__gs *vhd,
 		lws_sql_purify(esc2, u.email, sizeof(esc2) - 1),
 		lws_sql_purify(esc3, u.username, sizeof(esc3) - 1),
 		lws_sql_purify(esc4, pss->ip, sizeof(esc4) - 1));
-	snprintf(s + n, sizeof(s) -n,
+	lws_snprintf(s + n, sizeof(s) -n,
 		  "%s/lwsgs-forgot?token=%s"
 		   "&good=%s"
 		   "&bad=%s\n\n"
@@ -446,7 +446,7 @@ lwsgs_handler_forgot_pw_form(struct per_vhost_data__gs *vhd,
 			      sizeof(esc3) - 1),
 		vhd->email_contact_person);
 
-	snprintf((char *)buffer, sizeof(buffer) - 1,
+	lws_snprintf((char *)buffer, sizeof(buffer) - 1,
 		 "insert into email(username, content)"
 		 " values ('%s', '%s');",
 		lws_sql_purify(esc, u.username, sizeof(esc) - 1), s);
@@ -457,7 +457,7 @@ lwsgs_handler_forgot_pw_form(struct per_vhost_data__gs *vhd,
 		return 1;
 	}
 
-	snprintf(s, sizeof(s) - 1,
+	lws_snprintf(s, sizeof(s) - 1,
 		 "update users set token='%s',token_time='%ld' where username='%s';",
 		 hash.id, (long)lws_now_secs(),
 		 lws_sql_purify(esc, u.username, sizeof(esc) - 1));
@@ -513,7 +513,7 @@ lwsgs_handler_register_form(struct per_vhost_data__gs *vhd,
 	}
 
 	u.username[0] = '\0';
-	snprintf(s, sizeof(s) - 1, "select username, email from users where email = '%s';",
+	lws_snprintf(s, sizeof(s) - 1, "select username, email from users where email = '%s';",
 		 lws_sql_purify(esc, lws_spa_get_string(pss->spa, FGS_EMAIL),
 		 sizeof(esc) - 1));
 
@@ -543,7 +543,7 @@ lwsgs_handler_register_form(struct per_vhost_data__gs *vhd,
 	}
 	sha1_to_lwsgw_hash(sid_rand, &hash);
 
-	snprintf((char *)buffer, sizeof(buffer) - 1,
+	lws_snprintf((char *)buffer, sizeof(buffer) - 1,
 		 "insert into users(username,"
 		 " creation_time, ip, email, verified,"
 		 " pwhash, pwsalt, token, last_forgot_validated)"
@@ -561,7 +561,7 @@ lwsgs_handler_register_form(struct per_vhost_data__gs *vhd,
 		return 1;
 	}
 
-	snprintf(s, sizeof(s),
+	lws_snprintf(s, sizeof(s),
 		"From: Noreply <%s>\n"
 		"To: %s <%s>\n"
 		  "Subject: Registration verification\n"
@@ -584,7 +584,7 @@ lwsgs_handler_register_form(struct per_vhost_data__gs *vhd,
 		vhd->email_confirm_url, hash.id,
 		vhd->email_contact_person);
 
-	snprintf((char *)buffer, sizeof(buffer) - 1,
+	lws_snprintf((char *)buffer, sizeof(buffer) - 1,
 		 "insert into email(username, content) values ('%s', '%s');",
 		lws_sql_purify(esc, lws_spa_get_string(pss->spa, FGS_USERNAME),
 			       sizeof(esc) - 1), s);
diff --git a/plugins/generic-sessions/protocol_generic_sessions.c b/plugins/generic-sessions/protocol_generic_sessions.c
index 7dc31b28..a828c209 100644
--- a/plugins/generic-sessions/protocol_generic_sessions.c
+++ b/plugins/generic-sessions/protocol_generic_sessions.c
@@ -77,7 +77,7 @@ lwsgs_email_cb_get_body(struct lws_email *email, char *buf, int len)
 	a.buf = buf;
 	a.len = len;
 
-	snprintf(ss, sizeof(ss) - 1,
+	lws_snprintf(ss, sizeof(ss) - 1,
 		 "select content from email where username='%s';",
 		 lws_sql_purify(esc, vhd->u.username, sizeof(esc) - 1));
 
@@ -100,7 +100,7 @@ lwsgs_email_cb_sent(struct lws_email *email)
 	char s[200], esc[50];
 
 	/* mark the user as having sent the verification email */
-	snprintf(s, sizeof(s) - 1,
+	lws_snprintf(s, sizeof(s) - 1,
 		 "update users set verified=1 where username='%s' and verified==0;",
 		 lws_sql_purify(esc, vhd->u.username, sizeof(esc) - 1));
 	if (sqlite3_exec(vhd->pdb, s, NULL, NULL, NULL) != SQLITE_OK) {
@@ -109,7 +109,7 @@ lwsgs_email_cb_sent(struct lws_email *email)
 		return 1;
 	}
 
-	snprintf(s, sizeof(s) - 1,
+	lws_snprintf(s, sizeof(s) - 1,
 		 "delete from email where username='%s';",
 		 lws_sql_purify(esc, vhd->u.username, sizeof(esc) - 1));
 	if (sqlite3_exec(vhd->pdb, s, NULL, NULL, NULL) != SQLITE_OK) {
@@ -132,7 +132,7 @@ lwsgs_email_cb_on_next(struct lws_email *email)
 	/*
 	 * users not verified in 24h get deleted
 	 */
-	snprintf(s, sizeof(s) - 1, "delete from users where ((verified != %d)"
+	lws_snprintf(s, sizeof(s) - 1, "delete from users where ((verified != %d)"
 		 " and (creation_time <= %lu));", LWSGS_VERIFIED_ACCEPTED,
 		 (unsigned long)now - vhd->timeout_email_secs);
 	if (sqlite3_exec(vhd->pdb, s, NULL, NULL, NULL) != SQLITE_OK) {
@@ -141,7 +141,7 @@ lwsgs_email_cb_on_next(struct lws_email *email)
 		return 1;
 	}
 
-	snprintf(s, sizeof(s) - 1, "update users set token_time=0 where "
+	lws_snprintf(s, sizeof(s) - 1, "update users set token_time=0 where "
 		 "(token_time <= %lu);",
 		 (unsigned long)now - vhd->timeout_email_secs);
 	if (sqlite3_exec(vhd->pdb, s, NULL, NULL, NULL) != SQLITE_OK) {
@@ -151,14 +151,14 @@ lwsgs_email_cb_on_next(struct lws_email *email)
 	}
 
 	vhd->u.username[0] = '\0';
-	snprintf(s, sizeof(s) - 1, "select username from email limit 1;");
+	lws_snprintf(s, sizeof(s) - 1, "select username from email limit 1;");
 	if (sqlite3_exec(vhd->pdb, s, lwsgs_lookup_callback_user, &vhd->u,
 			 NULL) != SQLITE_OK) {
 		lwsl_err("Unable to lookup user: %s\n", sqlite3_errmsg(vhd->pdb));
 		return 1;
 	}
 
-	snprintf(s, sizeof(s) - 1,
+	lws_snprintf(s, sizeof(s) - 1,
 		 "select username, creation_time, email, ip, verified, token"
 		 " from users where username='%s' limit 1;",
 		 lws_sql_purify(esc, vhd->u.username, sizeof(esc) - 1));
@@ -207,7 +207,7 @@ lwsgs_subst(void *data, int index)
 			a->pss->delete_session = sid;
 			return NULL;
 		}
-		snprintf(s, sizeof(s) - 1, "select username,email "
+		lws_snprintf(s, sizeof(s) - 1, "select username,email "
 			 "from users where username = '%s';",
 			 lws_sql_purify(esc, a->pss->result, sizeof(esc) - 1));
 		if (sqlite3_exec(a->vhd->pdb, s, lwsgs_lookup_callback_user,
@@ -467,7 +467,7 @@ callback_generic_sessions(struct lws *wsi, enum lws_callback_reasons reason,
 				if (lws_hdr_copy(wsi, cookie, sizeof(cookie) - 1,
 					     WSI_TOKEN_HOST) < 0)
 					return 1;
-				snprintf(pss->onward, sizeof(pss->onward) - 1,
+				lws_snprintf(pss->onward, sizeof(pss->onward) - 1,
 					 "%s%s%s", oprot[lws_is_ssl(wsi)],
 					    cookie, args->p);
 				lwsl_notice("redirecting to ourselves with cookie refresh\n");
@@ -504,7 +504,7 @@ callback_generic_sessions(struct lws *wsi, enum lws_callback_reasons reason,
 		if (lwsgs_lookup_session(vhd, &sid, username, sizeof(username)))
 			break;
 
-		snprintf(s, sizeof(s) - 1,
+		lws_snprintf(s, sizeof(s) - 1,
 			 "select username, email from users where username='%s';",
 			 username);
 		if (sqlite3_exec(vhd->pdb, s, lwsgs_lookup_callback_user, &u, NULL) !=
diff --git a/plugins/generic-sessions/protocol_lws_messageboard.c b/plugins/generic-sessions/protocol_lws_messageboard.c
index 0adfe8cb..472f3e1b 100644
--- a/plugins/generic-sessions/protocol_lws_messageboard.c
+++ b/plugins/generic-sessions/protocol_lws_messageboard.c
@@ -132,7 +132,7 @@ post_message(struct lws *wsi, struct per_vhost_data__gs_mb *vhd,
 	vhd->gsp->callback(wsi, LWS_CALLBACK_SESSION_INFO,
 			   pss->pss_gs, &sinfo, 0);
 
-	snprintf((char *)s, sizeof(s) - 1,
+	lws_snprintf((char *)s, sizeof(s) - 1,
 		 "insert into msg(time, username, email, ip, content)"
 		 " values (%lu, '%s', '%s', '%s', '%s');",
 		 (unsigned long)lws_now_secs(), sinfo.username, sinfo.email, sinfo.ip,
@@ -253,16 +253,16 @@ callback_messageboard(struct lws *wsi, enum lws_callback_reasons reason,
 			}
 
 			/* format in JSON */
-			p += snprintf(p, end - p,
+			p += lws_snprintf(p, end - p,
 					"{\"idx\":\"%lu\",\"time\":\"%lu\",",
 					m.idx, m.time);
-			p += snprintf(p, end - p, " \"username\":\"%s\",",
+			p += lws_snprintf(p, end - p, " \"username\":\"%s\",",
 				lws_json_purify(e, m.username, sizeof(e)));
-			p += snprintf(p, end - p, " \"email\":\"%s\",",
+			p += lws_snprintf(p, end - p, " \"email\":\"%s\",",
 				lws_json_purify(e, m.email, sizeof(e)));
-			p += snprintf(p, end - p, " \"ip\":\"%s\",",
+			p += lws_snprintf(p, end - p, " \"ip\":\"%s\",",
 				lws_json_purify(e, m.ip, sizeof(e)));
-			p += snprintf(p, end - p, " \"content\":\"%s\"}",
+			p += lws_snprintf(p, end - p, " \"content\":\"%s\"}",
 				lws_json_purify(e, m.content, sizeof(e)));
 
 			if (lws_write(wsi, (unsigned char *)start, p - start,
diff --git a/plugins/generic-sessions/utils.c b/plugins/generic-sessions/utils.c
index 98dfe318..f751f287 100644
--- a/plugins/generic-sessions/utils.c
+++ b/plugins/generic-sessions/utils.c
@@ -64,16 +64,16 @@ lwsgw_cookie_from_session(lwsgw_hash *sid, time_t expires, char **p, char *end)
 	struct tm *tm = gmtime(&expires);
 	time_t n = lws_now_secs();
 
-	*p += snprintf(*p, end - *p, "id=%s;Expires=", sid->id);
+	*p += lws_snprintf(*p, end - *p, "id=%s;Expires=", sid->id);
 #ifdef WIN32
 	*p += strftime(*p, end - *p, "%Y %H:%M %Z", tm);
 #else
 	*p += strftime(*p, end - *p, "%F %H:%M %Z", tm);
 #endif
-	*p += snprintf(*p, end - *p, ";path=/");
-	*p += snprintf(*p, end - *p, ";Max-Age=%lu", (unsigned long)(expires - n));
-//	*p += snprintf(*p, end - *p, ";secure");
-	*p += snprintf(*p, end - *p, ";HttpOnly");
+	*p += lws_snprintf(*p, end - *p, ";path=/");
+	*p += lws_snprintf(*p, end - *p, ";Max-Age=%lu", (unsigned long)(expires - n));
+//	*p += lws_snprintf(*p, end - *p, ";secure");
+	*p += lws_snprintf(*p, end - *p, ";HttpOnly");
 }
 
 int
@@ -87,7 +87,7 @@ lwsgw_expire_old_sessions(struct per_vhost_data__gs *vhd)
 
 	vhd->last_session_expire = n;
 
-	snprintf(s, sizeof(s) - 1,
+	lws_snprintf(s, sizeof(s) - 1,
 		 "delete from sessions where "
 		 "expire <= %lu;", (unsigned long)n);
 
@@ -112,7 +112,7 @@ lwsgw_update_session(struct per_vhost_data__gs *vhd,
 	else
 		n += vhd->timeout_anon_absolute_secs;
 
-	snprintf(s, sizeof(s) - 1,
+	lws_snprintf(s, sizeof(s) - 1,
 		 "update sessions set expire=%lu,username='%s' where name='%s';",
 		 (unsigned long)n,
 		 lws_sql_purify(esc, user, sizeof(esc)),
@@ -222,7 +222,7 @@ lwsgs_lookup_session(struct per_vhost_data__gs *vhd,
 
 	lwsgw_expire_old_sessions(vhd);
 
-	snprintf(s, sizeof(s) - 1,
+	lws_snprintf(s, sizeof(s) - 1,
 		 "select username from sessions where name = '%s';",
 		 lws_sql_purify(esc, sid->id, sizeof(esc) - 1));
 
@@ -300,7 +300,7 @@ lwsgs_lookup_user(struct per_vhost_data__gs *vhd,
 	char s[150], esc[50];
 
 	u->username[0] = '\0';
-	snprintf(s, sizeof(s) - 1,
+	lws_snprintf(s, sizeof(s) - 1,
 		 "select username,creation_time,ip,email,verified,pwhash,pwsalt,last_forgot_validated "
 		 "from users where username = '%s';",
 		 lws_sql_purify(esc, username, sizeof(esc) - 1));
@@ -340,7 +340,7 @@ lwsgs_new_session_id(struct per_vhost_data__gs *vhd,
 
 	sha1_to_lwsgw_hash(sid_rand, sid);
 
-	snprintf(s, sizeof(s) - 1,
+	lws_snprintf(s, sizeof(s) - 1,
 		 "insert into sessions(name, username, expire) "
 		 "values ('%s', '%s', %u);",
 		 lws_sql_purify(esc, sid->id, sizeof(esc) - 1),
@@ -398,7 +398,7 @@ lwsgs_check_credentials(struct per_vhost_data__gs *vhd,
 	lwsl_info("user %s found, salt '%s'\n", username, u.pwsalt.id);
 
 	/* [password in ascii][salt] */
-	n = snprintf((char *)buffer, sizeof(buffer) - 1,
+	n = lws_snprintf((char *)buffer, sizeof(buffer) - 1,
 		     "%s-%s-%s", password, vhd->confounder, u.pwsalt.id);
 
 	/* sha1sum of password + salt */
@@ -439,7 +439,7 @@ lwsgs_hash_password(struct per_vhost_data__gs *vhd,
 	sha1_to_lwsgw_hash(sid_rand, &hash);
 
 	/* [password in ascii][salt] */
-	n = snprintf((char *)buffer, sizeof(buffer) - 1,
+	n = lws_snprintf((char *)buffer, sizeof(buffer) - 1,
 		    "%s-%s-%s", password, vhd->confounder, u->pwsalt.id);
 
 	/* sha1sum of password + salt */
diff --git a/plugins/generic-table/protocol_table_dirlisting.c b/plugins/generic-table/protocol_table_dirlisting.c
index 8d673111..6c3fe443 100644
--- a/plugins/generic-table/protocol_table_dirlisting.c
+++ b/plugins/generic-table/protocol_table_dirlisting.c
@@ -95,7 +95,7 @@ scan_dir(struct lws *wsi, struct per_session_data__tbl_dir *pss)
 
 	lws_protocol_dir_kill_monitor(pss);
 
-	snprintf(path, sizeof(path) - 1, "%s/%s", pss->dir, pss->reldir);
+	lws_snprintf(path, sizeof(path) - 1, "%s/%s", pss->dir, pss->reldir);
 	//lwsl_notice("path = %s\n", path);
 
 	pss->event_req = malloc(sizeof(*pss->event_req));
@@ -119,7 +119,7 @@ scan_dir(struct lws *wsi, struct per_session_data__tbl_dir *pss)
 	pss->p = pss->strings;
 
 	while (uv_fs_scandir_next(&req, &dent) != UV_EOF) {
-		snprintf(path, sizeof(path) - 1, "%s/%s/%s", pss->dir, pss->reldir, dent.name);
+		lws_snprintf(path, sizeof(path) - 1, "%s/%s/%s", pss->dir, pss->reldir, dent.name);
 
 		if (stat(path, &st)) {
 			lwsl_info("unable to stat %s\n", path);
@@ -128,15 +128,15 @@ scan_dir(struct lws *wsi, struct per_session_data__tbl_dir *pss)
 		f = malloc(sizeof(*f));
 		f->next = NULL;
 		f->name = pss->p;
-		n = snprintf(pss->p, end - pss->p, "%s", dent.name);
+		n = lws_snprintf(pss->p, end - pss->p, "%s", dent.name);
 		pss->p += n + 1;
 		f->uri = NULL;
 		if ((S_IFMT & st.st_mode) == S_IFDIR) {
-			n = snprintf(pss->p, end - pss->p, "=%s/%s", pss->reldir, dent.name);
+			n = lws_snprintf(pss->p, end - pss->p, "=%s/%s", pss->reldir, dent.name);
 			f->uri = pss->p;
 		}
 		if (lws_get_mimetype(dent.name, NULL)) {
-			n = snprintf(pss->p, end - pss->p, "./serve/%s/%s", pss->reldir, dent.name);
+			n = lws_snprintf(pss->p, end - pss->p, "./serve/%s/%s", pss->reldir, dent.name);
 			f->uri = pss->p;
 		}
 		if (f->uri)
@@ -152,13 +152,13 @@ scan_dir(struct lws *wsi, struct per_session_data__tbl_dir *pss)
 			icon = "&#x1f4c2;";
 
 		f->icon = pss->p;
-		n = snprintf(pss->p, end - pss->p, "%s", icon);
+		n = lws_snprintf(pss->p, end - pss->p, "%s", icon);
 		pss->p += n + 1;
 
 		f->date = pss->p;
 		tm = gmtime(&st.st_mtime);
 		strftime(da, sizeof(da), "%Y-%b-%d %H:%M:%S %z", tm);
-		n = snprintf(pss->p, end - pss->p, "%s", da);
+		n = lws_snprintf(pss->p, end - pss->p, "%s", da);
 		pss->p += n + 1;
 
 		f->size = st.st_size;
@@ -244,11 +244,11 @@ callback_lws_table_dirlisting(struct lws *wsi, enum lws_callback_reasons reason,
 		if (scan_dir(wsi, pss))
 			return 1;
 
-		p += snprintf(p, end - p, "{\"breadcrumbs\":[");
+		p += lws_snprintf(p, end - p, "{\"breadcrumbs\":[");
 		q = pss->reldir;
 
 		if (!q[0])
-			p += snprintf(p, end - p, "{\"name\":\"top\"}");
+			p += lws_snprintf(p, end - p, "{\"name\":\"top\"}");
 
 		while (*q) {
 
@@ -280,48 +280,48 @@ callback_lws_table_dirlisting(struct lws *wsi, enum lws_callback_reasons reason,
 				q = q1 + 1;
 			}
 			if (!first)
-				p += snprintf(p, end - p, ",");
+				p += lws_snprintf(p, end - p, ",");
 			else
 				first = 0;
 
-			p += snprintf(p, end - p, "{\"name\":\"%s\"",
+			p += lws_snprintf(p, end - p, "{\"name\":\"%s\"",
 					lws_json_purify(e, s, sizeof(e)));
 			if (*q) {
 				w = s1;
 				while (w[0] == '/' && w[1] == '/')
 					w++;
-				p += snprintf(p, end - p, ",\"url\":\"%s\"",
+				p += lws_snprintf(p, end - p, ",\"url\":\"%s\"",
 					lws_json_purify(e, w, sizeof(e)));
 			}
-			p += snprintf(p, end - p, "}");
+			p += lws_snprintf(p, end - p, "}");
 			if (!q1)
 				break;
 		}
 
-		p += snprintf(p, end - p, "],\"data\":[");
+		p += lws_snprintf(p, end - p, "],\"data\":[");
 
 		f = pss->base.next;
 		while (f) {
 			/* format in JSON */
-			p += snprintf(p, end - p, "{\"Icon\":\"%s\",",
+			p += lws_snprintf(p, end - p, "{\"Icon\":\"%s\",",
 					lws_json_purify(e, f->icon, sizeof(e)));
-			p += snprintf(p, end - p, " \"Date\":\"%s\",",
+			p += lws_snprintf(p, end - p, " \"Date\":\"%s\",",
 				lws_json_purify(e, f->date, sizeof(e)));
-			p += snprintf(p, end - p, " \"Size\":\"%ld\",",
+			p += lws_snprintf(p, end - p, " \"Size\":\"%ld\",",
 				f->size);
 			if (f->uri)
-				p += snprintf(p, end - p, " \"uri\":\"%s\",",
+				p += lws_snprintf(p, end - p, " \"uri\":\"%s\",",
 						lws_json_purify(e, f->uri, sizeof(e)));
-			p += snprintf(p, end - p, " \"Name\":\"%s\"}",
+			p += lws_snprintf(p, end - p, " \"Name\":\"%s\"}",
 				lws_json_purify(e, f->name, sizeof(e)));
 
 			f = f->next;
 
 			if (f)
-				p += snprintf(p, end - p, ",");
+				p += lws_snprintf(p, end - p, ",");
 		}
 
-		p += snprintf(p, end - p, "]}");
+		p += lws_snprintf(p, end - p, "]}");
 
 		free_scan_dir(pss);
 
diff --git a/plugins/protocol_dumb_increment.c b/plugins/protocol_dumb_increment.c
index 51db911f..042c5dc9 100644
--- a/plugins/protocol_dumb_increment.c
+++ b/plugins/protocol_dumb_increment.c
@@ -96,7 +96,7 @@ callback_dumb_increment(struct lws *wsi, enum lws_callback_reasons reason,
 		break;
 
 	case LWS_CALLBACK_SERVER_WRITEABLE:
-		n = snprintf((char *)p, sizeof(buf) - LWS_PRE, "%d", pss->number++);
+		n = lws_snprintf((char *)p, sizeof(buf) - LWS_PRE, "%d", pss->number++);
 		m = lws_write(wsi, p, n, LWS_WRITE_TEXT);
 		if (m < n) {
 			lwsl_err("ERROR %d writing to di socket\n", n);
diff --git a/plugins/protocol_lws_status.c b/plugins/protocol_lws_status.c
index 67b53980..49fa6b99 100644
--- a/plugins/protocol_lws_status.c
+++ b/plugins/protocol_lws_status.c
@@ -130,7 +130,7 @@ callback_lws_status(struct lws *wsi, enum lws_callback_reasons reason,
 		switch (pss->walk) {
 		case WALK_INITIAL:
 			n = LWS_WRITE_TEXT | LWS_WRITE_NO_FIN;;
-			p += snprintf(p, end - p,
+			p += lws_snprintf(p, end - p,
 				      "{ \"version\":\"%s\","
 				      " \"hostname\":\"%s\","
 				      " \"wsi\":\"%d\", \"conns\":[",
@@ -166,7 +166,7 @@ callback_lws_status(struct lws *wsi, enum lws_callback_reasons reason,
 			}
 
 			lws_get_peer_simple(pss->walk_next->wsi, ip, sizeof(ip));
-			p += snprintf(p, end - p,
+			p += lws_snprintf(p, end - p,
 					"{\"peer\":\"%s\",\"time\":\"%ld\","
 					"\"ua\":\"%s\"}",
 					ip, (unsigned long)pss->walk_next->time_est,
diff --git a/plugins/protocol_post_demo.c b/plugins/protocol_post_demo.c
index 2b07d5e0..18b6b602 100644
--- a/plugins/protocol_post_demo.c
+++ b/plugins/protocol_post_demo.c
@@ -147,16 +147,16 @@ callback_post_demo(struct lws *wsi, enum lws_callback_reasons reason,
 			"<table><tr><td>Name</td><td>Length</td><td>Value</td></tr>");
 
 		for (n = 0; n < ARRAY_SIZE(param_names); n++)
-			p += snprintf((char *)p, end - p,
+			p += lws_snprintf((char *)p, end - p,
 				    "<tr><td><b>%s</b></td><td>%d</td><td>%s</td></tr>",
 				    param_names[n],
 				    lws_spa_get_length(pss->spa, n),
 				    lws_spa_get_string(pss->spa, n));
 
-		p += snprintf((char *)p, end - p, "</table><br><b>filename:</b> %s, <b>length</b> %ld",
+		p += lws_snprintf((char *)p, end - p, "</table><br><b>filename:</b> %s, <b>length</b> %ld",
 				pss->filename, pss->file_length);
 
-		p += snprintf((char *)p, end - p, "</body></html>");
+		p += lws_snprintf((char *)p, end - p, "</body></html>");
 		pss->result_len = p - (unsigned char *)(pss->result + LWS_PRE);
 
 		n = LWS_PRE + 1024;
diff --git a/test-server/test-fraggle.c b/test-server/test-fraggle.c
index 2137e7b5..80aaea58 100644
--- a/test-server/test-fraggle.c
+++ b/test-server/test-fraggle.c
@@ -349,7 +349,7 @@ int main(int argc, char **argv)
 		struct lws_client_connect_info i;
 
 		address = argv[optind];
-		snprintf(ads_port, sizeof(ads_port), "%s:%u",
+		lws_snprintf(ads_port, sizeof(ads_port), "%s:%u",
 			 address, port & 65535);
 		memset(&i, 0, sizeof(i));
 		i.context = context;
diff --git a/test-server/test-ping.c b/test-server/test-ping.c
index d10e20da..25b8a15c 100644
--- a/test-server/test-ping.c
+++ b/test-server/test-ping.c
@@ -457,7 +457,7 @@ int main(int argc, char **argv)
 	/* create client websockets using dumb increment protocol */
 
 	address = argv[optind];
-	snprintf(ads_port, sizeof(ads_port), "%s:%u",
+	lws_snprintf(ads_port, sizeof(ads_port), "%s:%u",
 		 address, port & 65535);
 	lwsl_notice("Connecting to %s...\n", ads_port);
 	memset(&i, 0, sizeof(i));
diff --git a/test-server/test-server-http.c b/test-server/test-server-http.c
index e15cef98..60cf02a4 100644
--- a/test-server/test-server-http.c
+++ b/test-server/test-server-http.c
@@ -460,16 +460,16 @@ int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user,
 			"<table><tr><td>Name</td><td>Length</td><td>Value</td></tr>");
 
 		for (n = 0; n < ARRAY_SIZE(param_names); n++)
-			p += snprintf((char *)p, end - p,
+			p += lws_snprintf((char *)p, end - p,
 				    "<tr><td><b>%s</b></td><td>%d</td><td>%s</td></tr>",
 				    param_names[n],
 				    lws_spa_get_length(pss->spa, n),
 				    lws_spa_get_string(pss->spa, n));
 
-		p += snprintf((char *)p, end - p, "</table><br><b>filename:</b> %s, <b>length</b> %ld",
+		p += lws_snprintf((char *)p, end - p, "</table><br><b>filename:</b> %s, <b>length</b> %ld",
 				pss->filename, pss->file_length);
 
-		p += snprintf((char *)p, end - p, "</body></html>");
+		p += lws_snprintf((char *)p, end - p, "</body></html>");
 		pss->result_len = p - (unsigned char *)(pss->result + LWS_PRE);
 
 		p = buffer + LWS_PRE;
diff --git a/test-server/test-server-status.c b/test-server/test-server-status.c
index d85897b8..50fe5bf9 100644
--- a/test-server/test-server-status.c
+++ b/test-server/test-server-status.c
@@ -42,7 +42,7 @@ update_status(struct lws *wsi, struct per_session_data__lws_status *pss)
 	struct tm tm;
 #endif
 
-	p += snprintf(p, 512, " { %s, \"wsi\":\"%d\", \"conns\":[",
+	p += lws_snprintf(p, 512, " { %s, \"wsi\":\"%d\", \"conns\":[",
 		     server_info, live_wsi);
 
 	/* render the list */
@@ -67,7 +67,7 @@ update_status(struct lws *wsi, struct per_session_data__lws_status *pss)
 		if (subsequent)
 			*p++ = ',';
 		subsequent = 1;
-		p += snprintf(p, sizeof(cache) - (p - start) - 1,
+		p += lws_snprintf(p, sizeof(cache) - (p - start) - 1,
 				"{\"peer\":\"%s\",\"time\":\"%s\","
 				"\"ua\":\"%s\"}",
 			     (*pp)->ip, date, (*pp)->user_agent);
-- 
GitLab