From f32d25051c72551528060e6f386150b826563f85 Mon Sep 17 00:00:00 2001 From: Andy Green Date: Fri, 15 Jul 2016 13:41:38 +0800 Subject: [PATCH] ws ping pong on idle connections This adds a new member to the context creation info struct "ws_ping_pong_interval". If nonzero, it sets the number of seconds that established ws connections are allowed to be idle before a PING is forced to be sent. If zero (the default) then tracking of idle connection is disabled for backwards compatibility. Timeouts cover both the period between decision to send the ping and it being sent (because it needs the socket to become writeable), and the period between the ping being sent and the PONG coming back. INFO debug logs are issues when the timeout stuff is operating. You can test the server side by running the test server hacked to set ws_ping_pong_interval and debug log mask of 15. Both the mirror protocol and the server-status protocol are idle if nothing is happening and will trigger the PING / PONG testing. (You can also test using lwsws and /etc/lwsws/conf with "ws-pingpong-secs": "20" in the global section) For client, run the test client with -n -P 20 for 20s interval. -n stops the test client writing using the mirror protocol, so it will be idle and trigger the PING / PONGs. The timeout interval may be up to +10s late, as lws checks for affected connections every 10s. --- README.lwsws.md | 1 + doc/html/functions.html | 3 + doc/html/functions_vars.html | 3 + doc/html/group__client.html | 2 +- doc/html/group__context-and-vhost.js | 3 +- doc/html/group__form-parsing.html | 6 +- doc/html/group__sending-data.html | 14 +- doc/html/group__smtp.html | 18 +- doc/html/group__timeout.html | 5 +- doc/html/group__vhost-mounts.html | 14 +- doc/html/libwebsockets_8h.html | 5 +- doc/html/libwebsockets_8h.js | 4 +- doc/html/libwebsockets_8h_source.html | 217 +++++++++--------- doc/html/md_README.lwsws.html | 2 +- doc/html/navtreedata.js | 4 +- doc/html/navtreeindex0.js | 6 +- doc/html/navtreeindex1.js | 12 +- doc/html/navtreeindex2.js | 54 ++--- doc/html/navtreeindex3.js | 8 +- doc/html/navtreeindex4.js | 11 +- .../structlws__context__creation__info.html | 15 ++ .../structlws__context__creation__info.js | 3 +- lib/client-parser.c | 5 + lib/client.c | 24 ++ lib/context.c | 2 + lib/lejp-conf.c | 10 +- lib/libwebsockets.c | 12 + lib/libwebsockets.h | 14 ++ lib/output.c | 3 + lib/parsers.c | 5 + lib/private-libwebsockets.h | 8 + lib/server.c | 2 + lib/service.c | 58 +++++ lib/ssl.c | 2 + lwsws/etc-lwsws-conf-EXAMPLE | 1 + test-server/test-client.c | 32 ++- 36 files changed, 391 insertions(+), 197 deletions(-) diff --git a/README.lwsws.md b/README.lwsws.md index d9f6f073..b15dcd00 100644 --- a/README.lwsws.md +++ b/README.lwsws.md @@ -42,6 +42,7 @@ There is a single file intended for global settings "gid": "48", # apache user "count-threads": "1", "server-string": "myserver v1", # returned in http headers + "ws-pingpong-secs": "200", # confirm idle established ws connections this often "init-ssl": "yes" } } diff --git a/doc/html/functions.html b/doc/html/functions.html index 5394803b..38f2718d 100644 --- a/doc/html/functions.html +++ b/doc/html/functions.html @@ -642,6 +642,9 @@ $(document).ready(function(){initNavTree('functions.html','');});
  • write : lws_plat_file_ops
  • +
  • ws_ping_pong_interval +: lws_context_creation_info +
  • diff --git a/doc/html/functions_vars.html b/doc/html/functions_vars.html index e778a9fc..db3225d8 100644 --- a/doc/html/functions_vars.html +++ b/doc/html/functions_vars.html @@ -629,6 +629,9 @@ $(document).ready(function(){initNavTree('functions_vars.html','');});
  • write : lws_plat_file_ops
  • +
  • ws_ping_pong_interval +: lws_context_creation_info +
  • diff --git a/doc/html/group__client.html b/doc/html/group__client.html index a8a241a8..5e2a448d 100644 --- a/doc/html/group__client.html +++ b/doc/html/group__client.html @@ -112,7 +112,7 @@ LWS_VISIBLE LWS_EXTERN int #include <lib/libwebsockets.h>

    enum lws_client_connect_ssl_connection_flags - flags that may be used with struct lws_client_connect_info ssl_connection member to control if and how SSL checks apply to the client connection being created

    -
    1859  {
    1860  LCCSCF_USE_SSL = (1 << 0),
    1861  LCCSCF_ALLOW_SELFSIGNED = (1 << 1),
    1862  LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK = (1 << 2)
    1863 };
    +
    1871  {
    1872  LCCSCF_USE_SSL = (1 << 0),
    1873  LCCSCF_ALLOW_SELFSIGNED = (1 << 1),
    1874  LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK = (1 << 2)
    1875 };

    Function Documentation

    diff --git a/doc/html/group__context-and-vhost.js b/doc/html/group__context-and-vhost.js index e6317dfa..a0c37cac 100644 --- a/doc/html/group__context-and-vhost.js +++ b/doc/html/group__context-and-vhost.js @@ -40,7 +40,8 @@ var group__context_and_vhost = [ "token_limits", "structlws__context__creation__info.html#ac8a75b7b259a3c3a5fbb4219a3f06c29", null ], [ "uid", "structlws__context__creation__info.html#ac105b4180008cb3e672d57beead8382e", null ], [ "user", "structlws__context__creation__info.html#a0e9d94cdfb893d777b4a4db81e7b5ac0", null ], - [ "vhost_name", "structlws__context__creation__info.html#ad50db098a208f045f7811207d2bee4b9", null ] + [ "vhost_name", "structlws__context__creation__info.html#ad50db098a208f045f7811207d2bee4b9", null ], + [ "ws_ping_pong_interval", "structlws__context__creation__info.html#a33a1a25a7df3793f59047e20dd580078", null ] ] ], [ "lws_protocol_vhost_options", "structlws__protocol__vhost__options.html", [ [ "name", "structlws__protocol__vhost__options.html#acf9db77f8eb64cd4e314be9b43d8a8b9", null ], diff --git a/doc/html/group__form-parsing.html b/doc/html/group__form-parsing.html index 98048db0..48661a21 100644 --- a/doc/html/group__form-parsing.html +++ b/doc/html/group__form-parsing.html @@ -156,9 +156,9 @@ Functions

    a new file is starting to arrive

    -
    2639  {
    2644  LWS_UFS_OPEN
    2646 };
    Definition: libwebsockets.h:2642
    -
    Definition: libwebsockets.h:2644
    -
    Definition: libwebsockets.h:2640
    +
    2651  {
    2656  LWS_UFS_OPEN
    2658 };
    Definition: libwebsockets.h:2654
    +
    Definition: libwebsockets.h:2656
    +
    Definition: libwebsockets.h:2652
    diff --git a/doc/html/group__sending-data.html b/doc/html/group__sending-data.html index 40863bae..c9722e07 100644 --- a/doc/html/group__sending-data.html +++ b/doc/html/group__sending-data.html @@ -130,13 +130,13 @@ Functions

    client packet payload goes out on wire unmunged only useful for security tests since normal servers cannot decode the content if used

    -
    2980  {
    2981  LWS_WRITE_TEXT = 0,
    2985  LWS_WRITE_BINARY = 1,
    2991  LWS_WRITE_HTTP = 3,
    2994  /* LWS_WRITE_CLOSE is handled by lws_close_reason() */
    2995  LWS_WRITE_PING = 5,
    2996  LWS_WRITE_PONG = 6,
    2997 
    2998  /* Same as write_http but we know this write ends the transaction */
    2999  LWS_WRITE_HTTP_FINAL = 7,
    3000 
    3001  /* HTTP2 */
    3002 
    3010  /****** add new things just above ---^ ******/
    3011 
    3012  /* flags */
    3013 
    3014  LWS_WRITE_NO_FIN = 0x40,
    3021 };
    Definition: libwebsockets.h:2991
    -
    Definition: libwebsockets.h:3014
    -
    Definition: libwebsockets.h:2981
    -
    Definition: libwebsockets.h:2985
    -
    Definition: libwebsockets.h:3017
    -
    Definition: libwebsockets.h:2988
    -
    Definition: libwebsockets.h:3003
    +
    2994  {
    2995  LWS_WRITE_TEXT = 0,
    2999  LWS_WRITE_BINARY = 1,
    3005  LWS_WRITE_HTTP = 3,
    3008  /* LWS_WRITE_CLOSE is handled by lws_close_reason() */
    3009  LWS_WRITE_PING = 5,
    3010  LWS_WRITE_PONG = 6,
    3011 
    3012  /* Same as write_http but we know this write ends the transaction */
    3013  LWS_WRITE_HTTP_FINAL = 7,
    3014 
    3015  /* HTTP2 */
    3016 
    3024  /****** add new things just above ---^ ******/
    3025 
    3026  /* flags */
    3027 
    3028  LWS_WRITE_NO_FIN = 0x40,
    3035 };
    Definition: libwebsockets.h:3005
    +
    Definition: libwebsockets.h:3028
    +
    Definition: libwebsockets.h:2995
    +
    Definition: libwebsockets.h:2999
    +
    Definition: libwebsockets.h:3031
    +
    Definition: libwebsockets.h:3002
    +
    Definition: libwebsockets.h:3017
    diff --git a/doc/html/group__smtp.html b/doc/html/group__smtp.html index 15f0e3e3..8b7ebed9 100644 --- a/doc/html/group__smtp.html +++ b/doc/html/group__smtp.html @@ -157,15 +157,15 @@ Functions

    sent the session quit

    -
    3902  {
    3903  LGSSMTP_IDLE,
    3908  LGSSMTP_SENT_TO,
    3912 };
    Definition: libwebsockets.h:3905
    -
    Definition: libwebsockets.h:3910
    -
    Definition: libwebsockets.h:3903
    -
    Definition: libwebsockets.h:3904
    -
    Definition: libwebsockets.h:3908
    -
    Definition: libwebsockets.h:3907
    -
    Definition: libwebsockets.h:3911
    -
    Definition: libwebsockets.h:3906
    -
    Definition: libwebsockets.h:3909
    +
    3916  {
    3917  LGSSMTP_IDLE,
    3922  LGSSMTP_SENT_TO,
    3926 };
    Definition: libwebsockets.h:3919
    +
    Definition: libwebsockets.h:3924
    +
    Definition: libwebsockets.h:3917
    +
    Definition: libwebsockets.h:3918
    +
    Definition: libwebsockets.h:3922
    +
    Definition: libwebsockets.h:3921
    +
    Definition: libwebsockets.h:3925
    +
    Definition: libwebsockets.h:3920
    +
    Definition: libwebsockets.h:3923
    diff --git a/doc/html/group__timeout.html b/doc/html/group__timeout.html index 964ecbd1..db6e20dc 100644 --- a/doc/html/group__timeout.html +++ b/doc/html/group__timeout.html @@ -90,7 +90,10 @@ Enumerations   PENDING_FLUSH_STORED_SEND_BEFORE_CLOSE = 12, PENDING_TIMEOUT_SHUTDOWN_FLUSH = 13, PENDING_TIMEOUT_CGI = 14, -PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE = 15 +PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE = 15, +
    +  PENDING_TIMEOUT_WS_PONG_CHECK_SEND_PING = 16, +PENDING_TIMEOUT_WS_PONG_CHECK_GET_PONG = 17
    }   diff --git a/doc/html/group__vhost-mounts.html b/doc/html/group__vhost-mounts.html index caf59c3b..e149b09e 100644 --- a/doc/html/group__vhost-mounts.html +++ b/doc/html/group__vhost-mounts.html @@ -129,13 +129,13 @@ Enumerations

    hand by named protocol's callback

    -
    1795  {
    1796  LWSMPRO_HTTP = 0,
    1797  LWSMPRO_HTTPS = 1,
    1798  LWSMPRO_FILE = 2,
    1799  LWSMPRO_CGI = 3,
    1800  LWSMPRO_REDIR_HTTP = 4,
    1801  LWSMPRO_REDIR_HTTPS = 5,
    1802  LWSMPRO_CALLBACK = 6,
    1803 };
    Definition: libwebsockets.h:1799
    -
    Definition: libwebsockets.h:1797
    -
    Definition: libwebsockets.h:1798
    -
    Definition: libwebsockets.h:1800
    -
    Definition: libwebsockets.h:1801
    -
    Definition: libwebsockets.h:1796
    -
    Definition: libwebsockets.h:1802
    +
    1807  {
    1808  LWSMPRO_HTTP = 0,
    1809  LWSMPRO_HTTPS = 1,
    1810  LWSMPRO_FILE = 2,
    1811  LWSMPRO_CGI = 3,
    1812  LWSMPRO_REDIR_HTTP = 4,
    1813  LWSMPRO_REDIR_HTTPS = 5,
    1814  LWSMPRO_CALLBACK = 6,
    1815 };
    Definition: libwebsockets.h:1811
    +
    Definition: libwebsockets.h:1809
    +
    Definition: libwebsockets.h:1810
    +
    Definition: libwebsockets.h:1812
    +
    Definition: libwebsockets.h:1813
    +
    Definition: libwebsockets.h:1808
    +
    Definition: libwebsockets.h:1814
    diff --git a/doc/html/libwebsockets_8h.html b/doc/html/libwebsockets_8h.html index 293b8f94..f2a2e8d1 100644 --- a/doc/html/libwebsockets_8h.html +++ b/doc/html/libwebsockets_8h.html @@ -562,7 +562,10 @@ Enumerations   PENDING_FLUSH_STORED_SEND_BEFORE_CLOSE = 12, PENDING_TIMEOUT_SHUTDOWN_FLUSH = 13, PENDING_TIMEOUT_CGI = 14, -PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE = 15 +PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE = 15, +
    +  PENDING_TIMEOUT_WS_PONG_CHECK_SEND_PING = 16, +PENDING_TIMEOUT_WS_PONG_CHECK_GET_PONG = 17
    }   diff --git a/doc/html/libwebsockets_8h.js b/doc/html/libwebsockets_8h.js index b102347b..21a80e6f 100644 --- a/doc/html/libwebsockets_8h.js +++ b/doc/html/libwebsockets_8h.js @@ -368,7 +368,9 @@ var libwebsockets_8h = [ "PENDING_FLUSH_STORED_SEND_BEFORE_CLOSE", "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a0d6b956db11acb6d263af3ea054a914e", null ], [ "PENDING_TIMEOUT_SHUTDOWN_FLUSH", "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a11292263c9eccd090294e7e316200d7f", null ], [ "PENDING_TIMEOUT_CGI", "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a73f61afae387e16f7ab8a4f299aca8d2", null ], - [ "PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE", "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a5fe48ea6f3f5363cca55d39b78490b45", null ] + [ "PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE", "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a5fe48ea6f3f5363cca55d39b78490b45", null ], + [ "PENDING_TIMEOUT_WS_PONG_CHECK_SEND_PING", "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87aaac32d9ca2f7c31f5649ad4059d7b985", null ], + [ "PENDING_TIMEOUT_WS_PONG_CHECK_GET_PONG", "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a62ae208399be1f872e14843fd15f9e06", null ] ] ], [ "_lws_log", "group__log.html#gaf5f07837692b2f231a79da8a058288aa", null ], [ "_lws_logv", "group__log.html#ga74eb146969f0595e12ea835851b4588e", null ], diff --git a/doc/html/libwebsockets_8h_source.html b/doc/html/libwebsockets_8h_source.html index 3eb9d675..d2de1e1e 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','');});
    libwebsockets.h
    -Go to the documentation of this file.
    1 /*
    2  * libwebsockets - small server side websockets and web server implementation
    3  *
    4  * Copyright (C) 2010-2016 Andy Green <andy@warmcat.com>
    5  *
    6  * This library is free software; you can redistribute it and/or
    7  * modify it under the terms of the GNU Lesser General Public
    8  * License as published by the Free Software Foundation:
    9  * version 2.1 of the License.
    10  *
    11  * This library is distributed in the hope that it will be useful,
    12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    14  * Lesser General Public License for more details.
    15  *
    16  * You should have received a copy of the GNU Lesser General Public
    17  * License along with this library; if not, write to the Free Software
    18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
    19  * MA 02110-1301 USA
    20  */
    21 
    24 #ifndef LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C
    25 #define LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C
    26 
    27 #ifdef __cplusplus
    28 #include <cstddef>
    29 #include <cstdarg>
    30 #ifdef MBED_OPERATORS
    31 #include "mbed-drivers/mbed.h"
    32 #include "sal-iface-eth/EthernetInterface.h"
    33 #include "sockets/TCPListener.h"
    34 #include "sal-stack-lwip/lwipv4_init.h"
    35 
    36 namespace {
    37 }
    38 using namespace mbed::Sockets::v0;
    39 
    40 
    41 struct sockaddr_in;
    42 struct lws;
    43 
    44 class lws_conn {
    45  public:
    46  lws_conn():
    47  ts(NULL),
    48  wsi(NULL),
    49  writeable(1),
    50  awaiting_on_writeable(0)
    51  {
    52  }
    53 
    54 public:
    55  void set_wsi(struct lws *_wsi) { wsi = _wsi; }
    56  int actual_onRX(Socket *s);
    57  void onRX(Socket *s);
    58  void onError(Socket *s, socket_error_t err);
    59  void onDisconnect(TCPStream *s);
    60  void onSent(Socket *s, uint16_t len);
    61  void serialized_writeable(struct lws *wsi);
    62 
    63 public:
    64  TCPStream *ts;
    65 
    66 public:
    67  struct lws *wsi;
    68  char writeable;
    69  char awaiting_on_writeable;
    70 };
    71 
    73 public:
    75  srv(SOCKET_STACK_LWIP_IPV4)
    76  {
    77  srv.setOnError(TCPStream::ErrorHandler_t(this,
    79  }
    80 
    81  void start(const uint16_t port);
    83 protected:
    84  void onRX(Socket *s);
    85  void onError(Socket *s, socket_error_t err);
    86  void onIncoming(TCPListener *s, void *impl);
    87  void onDisconnect(TCPStream *s);
    89 public:
    90  TCPListener srv;
    91 };
    92 
    93 #endif
    94 
    95 extern "C" {
    96 #else
    97 #include <stdarg.h>
    98 #endif
    99 
    100 #ifdef MBED_OPERATORS
    101 struct sockaddr_in;
    102 #define LWS_POSIX 0
    103 #else
    104 #define LWS_POSIX 1
    105 #endif
    106 
    107 #include "lws_config.h"
    108 
    109 #if defined(WIN32) || defined(_WIN32)
    110 #ifndef WIN32_LEAN_AND_MEAN
    111 #define WIN32_LEAN_AND_MEAN
    112 #endif
    113 
    114 #include <winsock2.h>
    115 #include <ws2tcpip.h>
    116 #include <stddef.h>
    117 #include <basetsd.h>
    118 #ifndef _WIN32_WCE
    119 #include <stdint.h>
    120 #include <fcntl.h>
    121 #else
    122 #define _O_RDONLY 0x0000
    123 #define O_RDONLY _O_RDONLY
    124 #endif
    125 
    126 // Visual studio older than 2015 and WIN_CE has only _stricmp
    127 #if (defined(_MSC_VER) && _MSC_VER < 1900) || defined(_WIN32_WCE)
    128 #define strcasecmp _stricmp
    129 #else
    130 #define strcasecmp stricmp
    131 #endif
    132 #define getdtablesize() 30000
    133 
    134 #define LWS_INLINE __inline
    135 #define LWS_VISIBLE
    136 #define LWS_WARN_UNUSED_RESULT
    137 #define LWS_WARN_DEPRECATED
    138 
    139 #ifdef LWS_DLL
    140 #ifdef LWS_INTERNAL
    141 #define LWS_EXTERN extern __declspec(dllexport)
    142 #else
    143 #define LWS_EXTERN extern __declspec(dllimport)
    144 #endif
    145 #else
    146 #define LWS_EXTERN
    147 #endif
    148 
    149 #define LWS_INVALID_FILE INVALID_HANDLE_VALUE
    150 #define LWS_O_RDONLY _O_RDONLY
    151 
    152 #if !defined(_MSC_VER) || _MSC_VER < 1900 /* Visual Studio 2015 already defines this in <stdio.h> */
    153 #define snprintf _snprintf
    154 #endif
    155 
    156 #ifndef __func__
    157 #define __func__ __FUNCTION__
    158 #endif
    159 
    160 #else /* NOT WIN32 */
    161 #include <unistd.h>
    162 
    163 #if defined(__NetBSD__) || defined(__FreeBSD__)
    164 #include <netinet/in.h>
    165 #endif
    166 
    167 #define LWS_INLINE inline
    168 #define LWS_O_RDONLY O_RDONLY
    169 
    170 #ifndef MBED_OPERATORS
    171 #include <poll.h>
    172 #include <netdb.h>
    173 #define LWS_INVALID_FILE -1
    174 #else
    175 #define getdtablesize() (20)
    176 #define LWS_INVALID_FILE NULL
    177 #endif
    178 
    179 #if defined(__GNUC__)
    180 
    181 /* warn_unused_result attribute only supported by GCC 3.4 or later */
    182 #if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
    183 #define LWS_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
    184 #else
    185 #define LWS_WARN_UNUSED_RESULT
    186 #endif
    187 
    188 #define LWS_VISIBLE __attribute__((visibility("default")))
    189 #define LWS_WARN_DEPRECATED __attribute__ ((deprecated))
    190 #else
    191 #define LWS_VISIBLE
    192 #define LWS_WARN_UNUSED_RESULT
    193 #define LWS_WARN_DEPRECATED
    194 #endif
    195 
    196 #if defined(__ANDROID__)
    197 #include <unistd.h>
    198 #define getdtablesize() sysconf(_SC_OPEN_MAX)
    199 #endif
    200 
    201 #endif
    202 
    203 #ifdef LWS_USE_LIBEV
    204 #include <ev.h>
    205 #endif /* LWS_USE_LIBEV */
    206 #ifdef LWS_USE_LIBUV
    207 #include <uv.h>
    208 #endif /* LWS_USE_LIBUV */
    209 
    210 #ifndef LWS_EXTERN
    211 #define LWS_EXTERN extern
    212 #endif
    213 
    214 #ifdef _WIN32
    215 #define random rand
    216 #else
    217 #include <sys/time.h>
    218 #include <unistd.h>
    219 #endif
    220 
    221 #ifdef LWS_OPENSSL_SUPPORT
    222 
    223 #ifdef USE_WOLFSSL
    224 #ifdef USE_OLD_CYASSL
    225 #include <cyassl/openssl/ssl.h>
    226 #include <cyassl/error-ssl.h>
    227 #else
    228 #include <wolfssl/openssl/ssl.h>
    229 #include <wolfssl/error-ssl.h>
    230 #endif /* not USE_OLD_CYASSL */
    231 #else
    232 #if defined(LWS_USE_POLARSSL)
    233 #include <polarssl/ssl.h>
    235  x509_crt ca;
    236  x509_crt certificate;
    237  rsa_context key;
    238 };
    239 typedef struct lws_polarssl_context SSL_CTX;
    240 typedef ssl_context SSL;
    241 #else
    242 #if defined(LWS_USE_MBEDTLS)
    243 #include <mbedtls/ssl.h>
    244 #else
    245 #include <openssl/ssl.h>
    246 #include <openssl/err.h>
    247 #endif /* not USE_MBEDTLS */
    248 #endif /* not USE_POLARSSL */
    249 #endif /* not USE_WOLFSSL */
    250 #endif
    251 
    252 
    253 #define CONTEXT_PORT_NO_LISTEN -1
    254 
    265 
    267 enum lws_log_levels {
    268  LLL_ERR = 1 << 0,
    269  LLL_WARN = 1 << 1,
    270  LLL_NOTICE = 1 << 2,
    271  LLL_INFO = 1 << 3,
    272  LLL_DEBUG = 1 << 4,
    273  LLL_PARSER = 1 << 5,
    274  LLL_HEADER = 1 << 6,
    275  LLL_EXT = 1 << 7,
    276  LLL_CLIENT = 1 << 8,
    277  LLL_LATENCY = 1 << 9,
    278 
    279  LLL_COUNT = 10 /* set to count of valid flags */
    280 };
    281 
    282 LWS_VISIBLE LWS_EXTERN void _lws_log(int filter, const char *format, ...);
    283 LWS_VISIBLE LWS_EXTERN void _lws_logv(int filter, const char *format, va_list vl);
    293 LWS_VISIBLE LWS_EXTERN int
    294 lwsl_timestamp(int level, char *p, int len);
    295 
    296 /* notice, warn and log are always compiled in */
    297 #define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__)
    298 #define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__)
    299 #define lwsl_err(...) _lws_log(LLL_ERR, __VA_ARGS__)
    300 /*
    301  * weaker logging can be deselected at configure time using --disable-debug
    302  * that gets rid of the overhead of checking while keeping _warn and _err
    303  * active
    304  */
    305 #ifdef _DEBUG
    306 
    307 #define lwsl_info(...) _lws_log(LLL_INFO, __VA_ARGS__)
    308 #define lwsl_debug(...) _lws_log(LLL_DEBUG, __VA_ARGS__)
    309 #define lwsl_parser(...) _lws_log(LLL_PARSER, __VA_ARGS__)
    310 #define lwsl_header(...) _lws_log(LLL_HEADER, __VA_ARGS__)
    311 #define lwsl_ext(...) _lws_log(LLL_EXT, __VA_ARGS__)
    312 #define lwsl_client(...) _lws_log(LLL_CLIENT, __VA_ARGS__)
    313 #define lwsl_latency(...) _lws_log(LLL_LATENCY, __VA_ARGS__)
    314 
    320 LWS_VISIBLE LWS_EXTERN void lwsl_hexdump(void *buf, size_t len);
    321 
    322 #else /* no debug */
    323 
    324 #define lwsl_info(...) {}
    325 #define lwsl_debug(...) {}
    326 #define lwsl_parser(...) {}
    327 #define lwsl_header(...) {}
    328 #define lwsl_ext(...) {}
    329 #define lwsl_client(...) {}
    330 #define lwsl_latency(...) {}
    331 #define lwsl_hexdump(a, b)
    332 
    333 #endif
    334 
    345 LWS_VISIBLE LWS_EXTERN void
    346 lws_set_log_level(int level,
    347  void (*log_emit_function)(int level, const char *line));
    348 
    358 LWS_VISIBLE LWS_EXTERN void
    359 lwsl_emit_syslog(int level, const char *line);
    360 
    362 
    363 
    364 #include <stddef.h>
    365 
    366 #ifndef lws_container_of
    367 #define lws_container_of(P,T,M) ((T *)((char *)(P) - offsetof(T, M)))
    368 #endif
    369 
    370 
    371 struct lws;
    372 #ifndef ARRAY_SIZE
    373 #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
    374 #endif
    375 
    376 /* api change list for user code to test against */
    377 
    378 #define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_ARG
    379 
    380 /* the struct lws_protocols has the id field present */
    381 #define LWS_FEATURE_PROTOCOLS_HAS_ID_FIELD
    382 
    383 /* you can call lws_get_peer_write_allowance */
    384 #define LWS_FEATURE_PROTOCOLS_HAS_PEER_WRITE_ALLOWANCE
    385 
    386 /* extra parameter introduced in 917f43ab821 */
    387 #define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_LEN
    388 
    389 /* File operations stuff exists */
    390 #define LWS_FEATURE_FOPS
    391 
    392 
    393 #if defined(_WIN32)
    394 typedef SOCKET lws_sockfd_type;
    395 typedef HANDLE lws_filefd_type;
    396 #define lws_sockfd_valid(sfd) (!!sfd)
    397 struct lws_pollfd {
    398  lws_sockfd_type fd;
    399  SHORT events;
    400  SHORT revents;
    401 };
    402 #define LWS_POLLHUP (FD_CLOSE)
    403 #define LWS_POLLIN (FD_READ | FD_ACCEPT)
    404 #define LWS_POLLOUT (FD_WRITE)
    405 #else
    406 
    407 #if defined(MBED_OPERATORS)
    408 /* it's a class lws_conn * */
    409 typedef void * lws_sockfd_type;
    410 typedef void * lws_filefd_type;
    411 #define lws_sockfd_valid(sfd) (!!sfd)
    412 struct pollfd {
    413  lws_sockfd_type fd;
    414  short events;
    415  short revents;
    416 };
    417 #define POLLIN 0x0001
    418 #define POLLPRI 0x0002
    419 #define POLLOUT 0x0004
    420 #define POLLERR 0x0008
    421 #define POLLHUP 0x0010
    422 #define POLLNVAL 0x0020
    423 
    424 struct lws;
    425 
    426 void * mbed3_create_tcp_stream_socket(void);
    427 void mbed3_delete_tcp_stream_socket(void *sockfd);
    428 void mbed3_tcp_stream_bind(void *sock, int port, struct lws *);
    429 void mbed3_tcp_stream_accept(void *sock, struct lws *);
    430 #else
    431 typedef int lws_sockfd_type;
    432 typedef int lws_filefd_type;
    433 #define lws_sockfd_valid(sfd) (sfd >= 0)
    434 #endif
    435 
    436 #define lws_pollfd pollfd
    437 #define LWS_POLLHUP (POLLHUP|POLLERR)
    438 #define LWS_POLLIN (POLLIN)
    439 #define LWS_POLLOUT (POLLOUT)
    440 #endif
    441 
    444 struct lws_pollargs {
    445  lws_sockfd_type fd;
    446  int events;
    448 };
    449 
    450 struct lws_tokens;
    451 struct lws_token_limits;
    452 
    460 
    462 /*
    463  * NOTE: These public enums are part of the abi. If you want to add one,
    464  * add it at where specified so existing users are unaffected.
    465  */
    468  LWS_CLOSE_STATUS_NOSTATUS = 0,
    530  /****** add new things just above ---^ ******/
    531 
    532  LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY = 9999,
    533 };
    534 
    547 LWS_VISIBLE LWS_EXTERN void
    548 lws_close_reason(struct lws *wsi, enum lws_close_status status,
    549  unsigned char *buf, size_t len);
    550 
    552 
    553 struct lws;
    554 struct lws_context;
    555 /* needed even with extensions disabled for create context */
    556 struct lws_extension;
    557 
    569 
    571 
    572 /*
    573  * NOTE: These public enums are part of the abi. If you want to add one,
    574  * add it at where specified so existing users are unaffected.
    575  */
    819  /* external poll() management support */
    882  LWS_CALLBACK_WS_EXT_DEFAULTS = 39,
    885  LWS_CALLBACK_CGI = 40,
    887  LWS_CALLBACK_CGI_TERMINATED = 41,
    889  LWS_CALLBACK_CGI_STDIN_DATA = 42,
    891  LWS_CALLBACK_CGI_STDIN_COMPLETED = 43,
    893  LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP = 44,
    895  LWS_CALLBACK_CLOSED_CLIENT_HTTP = 45,
    897  LWS_CALLBACK_RECEIVE_CLIENT_HTTP = 46,
    899  LWS_CALLBACK_COMPLETED_CLIENT_HTTP = 47,
    901  LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ = 48,
    903  LWS_CALLBACK_HTTP_BIND_PROTOCOL = 49,
    905  LWS_CALLBACK_HTTP_DROP_PROTOCOL = 50,
    907  LWS_CALLBACK_CHECK_ACCESS_RIGHTS = 51,
    909  LWS_CALLBACK_PROCESS_HTML = 52,
    911  LWS_CALLBACK_ADD_HEADERS = 53,
    913  LWS_CALLBACK_SESSION_INFO = 54,
    916  LWS_CALLBACK_GS_EVENT = 55,
    924  /****** add new things just above ---^ ******/
    925 
    928 };
    929 
    930 
    931 
    947 typedef int
    948 lws_callback_function(struct lws *wsi, enum lws_callback_reasons reason,
    949  void *user, void *in, size_t len);
    951 
    961 
    963 /*
    964  * NOTE: These public enums are part of the abi. If you want to add one,
    965  * add it at where specified so existing users are unaffected.
    966  */
    967 enum lws_extension_callback_reasons {
    968  LWS_EXT_CB_SERVER_CONTEXT_CONSTRUCT = 0,
    969  LWS_EXT_CB_CLIENT_CONTEXT_CONSTRUCT = 1,
    970  LWS_EXT_CB_SERVER_CONTEXT_DESTRUCT = 2,
    971  LWS_EXT_CB_CLIENT_CONTEXT_DESTRUCT = 3,
    972  LWS_EXT_CB_CONSTRUCT = 4,
    973  LWS_EXT_CB_CLIENT_CONSTRUCT = 5,
    974  LWS_EXT_CB_CHECK_OK_TO_REALLY_CLOSE = 6,
    975  LWS_EXT_CB_CHECK_OK_TO_PROPOSE_EXTENSION = 7,
    976  LWS_EXT_CB_DESTROY = 8,
    977  LWS_EXT_CB_DESTROY_ANY_WSI_CLOSING = 9,
    978  LWS_EXT_CB_ANY_WSI_ESTABLISHED = 10,
    979  LWS_EXT_CB_PACKET_RX_PREPARSE = 11,
    980  LWS_EXT_CB_PACKET_TX_PRESEND = 12,
    981  LWS_EXT_CB_PACKET_TX_DO_SEND = 13,
    982  LWS_EXT_CB_HANDSHAKE_REPLY_TX = 14,
    983  LWS_EXT_CB_FLUSH_PENDING_TX = 15,
    984  LWS_EXT_CB_EXTENDED_PAYLOAD_RX = 16,
    985  LWS_EXT_CB_CAN_PROXY_CLIENT_CONNECTION = 17,
    986  LWS_EXT_CB_1HZ = 18,
    987  LWS_EXT_CB_REQUEST_ON_WRITEABLE = 19,
    988  LWS_EXT_CB_IS_WRITEABLE = 20,
    989  LWS_EXT_CB_PAYLOAD_TX = 21,
    990  LWS_EXT_CB_PAYLOAD_RX = 22,
    991  LWS_EXT_CB_OPTION_DEFAULT = 23,
    992  LWS_EXT_CB_OPTION_SET = 24,
    993  LWS_EXT_CB_OPTION_CONFIRM = 25,
    994  LWS_EXT_CB_NAMED_OPTION_SET = 26,
    995 
    996  /****** add new things just above ---^ ******/
    997 };
    998 
    1005  /* Add new things just above here ---^
    1006  * This is part of the ABI, don't needlessly break compatibility */
    1007 };
    1008 
    1014  const char *name;
    1017  /* Add new things just above here ---^
    1018  * This is part of the ABI, don't needlessly break compatibility */
    1019 };
    1020 
    1023  const char *option_name;
    1025  const char *start;
    1026  int len;
    1027 };
    1028 
    1089 typedef int
    1090 lws_extension_callback_function(struct lws_context *context,
    1091  const struct lws_extension *ext, struct lws *wsi,
    1092  enum lws_extension_callback_reasons reason,
    1093  void *user, void *in, size_t len);
    1094 
    1097  const char *name;
    1099  const char *client_offer;
    1101  /* Add new things just above here ---^
    1102  * This is part of the ABI, don't needlessly break compatibility */
    1103 };
    1104 
    1113 LWS_VISIBLE LWS_EXTERN int
    1114 lws_set_extension_option(struct lws *wsi, const char *ext_name,
    1115  const char *opt_name, const char *opt_val);
    1116 
    1117 #ifndef LWS_NO_EXTENSIONS
    1118 /* lws_get_internal_extensions() - DEPRECATED
    1119  *
    1120  * \Deprecated There is no longer a set internal extensions table. The table is provided
    1121  * by user code along with application-specific settings. See the test
    1122  * client and server for how to do.
    1123  */
    1124 static LWS_INLINE LWS_WARN_DEPRECATED const struct lws_extension *
    1125 lws_get_internal_extensions() { return NULL; }
    1126 
    1137 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    1138 lws_ext_parse_options(const struct lws_extension *ext, struct lws *wsi,
    1139  void *ext_user, const struct lws_ext_options *opts,
    1140  const char *o, int len);
    1141 #endif
    1142 
    1155 LWS_EXTERN
    1157  struct lws_context *context, const struct lws_extension *ext,
    1158  struct lws *wsi, enum lws_extension_callback_reasons reason,
    1159  void *user, void *in, size_t len);
    1160 
    1161 /*
    1162  * The internal exts are part of the public abi
    1163  * If we add more extensions, publish the callback here ------v
    1164  */
    1166 
    1182 
    1187  const char *name;
    1208  unsigned int id;
    1215  void *user;
    1218  /* Add new things just above here ---^
    1219  * This is part of the ABI, don't needlessly break compatibility */
    1220 };
    1221 
    1222 struct lws_vhost;
    1223 
    1232 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
    1233 lws_vhost_name_to_protocol(struct lws_vhost *vh, const char *name);
    1234 
    1244 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
    1245 lws_get_protocol(struct lws *wsi);
    1246 
    1248 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
    1249 lws_protocol_get(struct lws *wsi) LWS_WARN_DEPRECATED;
    1250 
    1261 LWS_VISIBLE LWS_EXTERN void *
    1262 lws_protocol_vh_priv_zalloc(struct lws_vhost *vhost, const struct lws_protocols *prot,
    1263  int size);
    1264 
    1274 LWS_VISIBLE LWS_EXTERN void *
    1275 lws_protocol_vh_priv_get(struct lws_vhost *vhost, const struct lws_protocols *prot);
    1276 
    1285 LWS_VISIBLE LWS_EXTERN int
    1286 lws_finalize_startup(struct lws_context *context);
    1287 
    1288 #ifdef LWS_WITH_PLUGINS
    1289 
    1290 /* PLUGINS implies LIBUV */
    1291 
    1292 #define LWS_PLUGIN_API_MAGIC 180
    1293 
    1296  unsigned int api_magic;
    1297  const struct lws_protocols *protocols;
    1299  const struct lws_extension *extensions;
    1301 };
    1302 
    1303 typedef int (*lws_plugin_init_func)(struct lws_context *,
    1304  struct lws_plugin_capability *);
    1305 typedef int (*lws_plugin_destroy_func)(struct lws_context *);
    1306 
    1308 struct lws_plugin {
    1309  struct lws_plugin *list;
    1310 #if (UV_VERSION_MAJOR > 0)
    1311  uv_lib_t lib;
    1312 #else
    1313  void *l;
    1314 #endif
    1315  char name[64];
    1317 };
    1318 
    1319 #endif
    1320 
    1322 
    1323 
    1332 
    1334 #define LWSGS_EMAIL_CONTENT_SIZE 16384
    1335 
    1337 /* SHA-1 binary and hexified versions */
    1339 typedef struct { unsigned char bin[20]; } lwsgw_hash_bin;
    1341 typedef struct { char id[41]; } lwsgw_hash;
    1342 
    1349 };
    1350 
    1353  char username[32];
    1354  char email[100];
    1355  char ip[72];
    1356  unsigned int mask;
    1358  char session[42];
    1359 };
    1360 
    1365 };
    1366 
    1369  enum lws_gs_event event;
    1370  const char *username;
    1371  const char *email;
    1372 };
    1373 
    1375 
    1376 
    1390 
    1392 /*
    1393  * NOTE: These public enums are part of the abi. If you want to add one,
    1394  * add it at where specified so existing users are unaffected.
    1395  */
    1396 
    1400  (1 << 12),
    1407  (1 << 12),
    1423  (1 << 12),
    1428  (1 << 12),
    1446  /****** add new things just above ---^ ******/
    1447 };
    1448 
    1449 #define lws_check_opt(c, f) (((c) & (f)) == (f))
    1450 
    1461  int port;
    1466  const char *iface;
    1473  const struct lws_protocols *protocols;
    1477  const struct lws_extension *extensions;
    1485  const char *ssl_cert_filepath;
    1495  const char *ssl_ca_filepath;
    1497  const char *ssl_cipher_list;
    1501  const char *http_proxy_address;
    1504  unsigned int http_proxy_port;
    1506  int gid;
    1508  int uid;
    1510  unsigned int options;
    1512  void *user;
    1515  int ka_time;
    1525 #ifdef LWS_OPENSSL_SUPPORT
    1531 #else /* maintain structure layout either way */
    1533 #endif
    1534 
    1545  unsigned int count_threads;
    1547  unsigned int fd_limit_per_thread;
    1551  unsigned int timeout_secs;
    1556  const char *ecdh_curve;
    1558  const char *vhost_name;
    1562  const char * const *plugin_dirs;
    1571  const char *log_filepath;
    1574  const struct lws_http_mount *mounts;
    1576  const char *server_string;
    1579  unsigned int pt_serv_buf_size;
    1595  /* Add new things just above here ---^
    1596  * This is part of the ABI, don't needlessly break compatibility
    1597  *
    1598  * The below is to ensure later library versions with new
    1599  * members added above will see 0 (default) even if the app
    1600  * was not built against the newer headers.
    1601  */
    1602 
    1603  void *_unused[8];
    1604 };
    1605 
    1640 LWS_VISIBLE LWS_EXTERN struct lws_context *
    1642 
    1651 LWS_VISIBLE LWS_EXTERN void
    1652 lws_context_destroy(struct lws_context *context);
    1653 
    1671 LWS_VISIBLE LWS_EXTERN int
    1672 lws_set_proxy(struct lws_vhost *vhost, const char *proxy);
    1673 
    1674 
    1675 struct lws_vhost;
    1676 
    1686 LWS_EXTERN LWS_VISIBLE struct lws_vhost *
    1687 lws_create_vhost(struct lws_context *context,
    1688  struct lws_context_creation_info *info);
    1689 
    1704 LWS_VISIBLE LWS_EXTERN int
    1705 lwsws_get_config_globals(struct lws_context_creation_info *info, const char *d,
    1706  char **config_strings, int *len);
    1707 
    1723 LWS_VISIBLE LWS_EXTERN int
    1724 lwsws_get_config_vhosts(struct lws_context *context,
    1725  struct lws_context_creation_info *info, const char *d,
    1726  char **config_strings, int *len);
    1727 
    1729 LWS_VISIBLE LWS_EXTERN struct lws_vhost *
    1730 lws_vhost_get(struct lws *wsi) LWS_WARN_DEPRECATED;
    1731 
    1737 LWS_VISIBLE LWS_EXTERN struct lws_vhost *
    1738 lws_get_vhost(struct lws *wsi);
    1739 
    1747 LWS_VISIBLE LWS_EXTERN int
    1748 lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len);
    1749 
    1757 LWS_VISIBLE LWS_EXTERN int
    1758 lws_json_dump_context(const struct lws_context *context, char *buf, int len);
    1759 
    1769 LWS_VISIBLE LWS_EXTERN void *
    1770 lws_context_user(struct lws_context *context);
    1771 
    1777 
    1787  const char *name;
    1788  const char *value;
    1789 };
    1790 
    1803 };
    1804 
    1812  const char *mountpoint;
    1814  const char *origin;
    1816  const char *def;
    1818  const char *protocol;
    1834  unsigned int auth_mask;
    1837  unsigned int cache_reusable:1;
    1838  unsigned int cache_revalidate:1;
    1839  unsigned int cache_intermediaries:1;
    1841  unsigned char origin_protocol;
    1842  unsigned char mountpoint_len;
    1843 };
    1846 
    1852 
    1860  LCCSCF_USE_SSL = (1 << 0),
    1861  LCCSCF_ALLOW_SELFSIGNED = (1 << 1),
    1862  LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK = (1 << 2)
    1863 };
    1864 
    1869  struct lws_context *context;
    1871  const char *address;
    1873  int port;
    1877  const char *path;
    1879  const char *host;
    1881  const char *origin;
    1883  const char *protocol;
    1887  void *userdata;
    1891  const char *method;
    1894  struct lws *parent_wsi;
    1898  const char *uri_replace_from;
    1901  const char *uri_replace_to;
    1903  struct lws_vhost *vhost;
    1905  struct lws **pwsi;
    1917  /* Add new things just above here ---^
    1918  * This is part of the ABI, don't needlessly break compatibility
    1919  *
    1920  * The below is to ensure later library versions with new
    1921  * members added above will see 0 (default) even if the app
    1922  * was not built against the newer headers.
    1923  */
    1924 
    1925  void *_unused[4];
    1926 };
    1927 
    1935 LWS_VISIBLE LWS_EXTERN struct lws *
    1937 
    1958 /* deprecated, use lws_client_connect_via_info() */
    1959 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    1960 lws_client_connect(struct lws_context *clients, const char *address,
    1961  int port, int ssl_connection, const char *path,
    1962  const char *host, const char *origin, const char *protocol,
    1963  int ietf_version_or_minus_one) LWS_WARN_DEPRECATED;
    1964 /* deprecated, use lws_client_connect_via_info() */
    1985 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    1986 lws_client_connect_extended(struct lws_context *clients, const char *address,
    1987  int port, int ssl_connection, const char *path,
    1988  const char *host, const char *origin,
    1989  const char *protocol, int ietf_version_or_minus_one,
    1990  void *userdata) LWS_WARN_DEPRECATED;
    1991 
    2017 LWS_VISIBLE LWS_EXTERN int
    2019  struct lws_vhost *vhost);
    2020 
    2021 LWS_VISIBLE LWS_EXTERN int
    2022 lws_http_client_read(struct lws *wsi, char **buf, int *len);
    2024 
    2032 
    2065 LWS_VISIBLE LWS_EXTERN int
    2066 lws_service(struct lws_context *context, int timeout_ms);
    2067 
    2079 LWS_VISIBLE LWS_EXTERN int
    2080 lws_service_tsi(struct lws_context *context, int timeout_ms, int tsi);
    2081 
    2097 LWS_VISIBLE LWS_EXTERN void
    2098 lws_cancel_service_pt(struct lws *wsi);
    2099 
    2111 LWS_VISIBLE LWS_EXTERN void
    2112 lws_cancel_service(struct lws_context *context);
    2113 
    2136 LWS_VISIBLE LWS_EXTERN int
    2137 lws_service_fd(struct lws_context *context, struct lws_pollfd *pollfd);
    2138 
    2148 LWS_VISIBLE LWS_EXTERN int
    2149 lws_service_fd_tsi(struct lws_context *context, struct lws_pollfd *pollfd,
    2150  int tsi);
    2151 
    2153 
    2159 
    2166 
    2178 LWS_VISIBLE LWS_EXTERN const char *
    2179 lws_get_mimetype(const char *file, const struct lws_http_mount *m);
    2180 
    2199 LWS_VISIBLE LWS_EXTERN int
    2200 lws_serve_http_file(struct lws *wsi, const char *file, const char *content_type,
    2201  const char *other_headers, int other_headers_len);
    2202 LWS_VISIBLE LWS_EXTERN int
    2203 lws_serve_http_file_fragment(struct lws *wsi);
    2205 
    2216 
    2217 enum http_status {
    2218  HTTP_STATUS_OK = 200,
    2219  HTTP_STATUS_NO_CONTENT = 204,
    2220 
    2221  HTTP_STATUS_MOVED_PERMANENTLY = 301,
    2222  HTTP_STATUS_FOUND = 302,
    2223  HTTP_STATUS_SEE_OTHER = 303,
    2224 
    2225  HTTP_STATUS_BAD_REQUEST = 400,
    2226  HTTP_STATUS_UNAUTHORIZED,
    2227  HTTP_STATUS_PAYMENT_REQUIRED,
    2228  HTTP_STATUS_FORBIDDEN,
    2229  HTTP_STATUS_NOT_FOUND,
    2230  HTTP_STATUS_METHOD_NOT_ALLOWED,
    2231  HTTP_STATUS_NOT_ACCEPTABLE,
    2232  HTTP_STATUS_PROXY_AUTH_REQUIRED,
    2233  HTTP_STATUS_REQUEST_TIMEOUT,
    2234  HTTP_STATUS_CONFLICT,
    2235  HTTP_STATUS_GONE,
    2236  HTTP_STATUS_LENGTH_REQUIRED,
    2237  HTTP_STATUS_PRECONDITION_FAILED,
    2238  HTTP_STATUS_REQ_ENTITY_TOO_LARGE,
    2239  HTTP_STATUS_REQ_URI_TOO_LONG,
    2240  HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE,
    2241  HTTP_STATUS_REQ_RANGE_NOT_SATISFIABLE,
    2242  HTTP_STATUS_EXPECTATION_FAILED,
    2243 
    2244  HTTP_STATUS_INTERNAL_SERVER_ERROR = 500,
    2245  HTTP_STATUS_NOT_IMPLEMENTED,
    2246  HTTP_STATUS_BAD_GATEWAY,
    2247  HTTP_STATUS_SERVICE_UNAVAILABLE,
    2248  HTTP_STATUS_GATEWAY_TIMEOUT,
    2249  HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED,
    2250 };
    2251 
    2253  char *p;
    2254  int len;
    2255  int max_len;
    2256  int final;
    2257 };
    2258 
    2259 typedef const char *(*lws_process_html_state_cb)(void *data, int index);
    2260 
    2262  char *start;
    2263  char swallow[16];
    2264  int pos;
    2265  void *data;
    2266  const char * const *vars;
    2269  lws_process_html_state_cb replace;
    2270 };
    2271 
    2276 LWS_VISIBLE LWS_EXTERN int
    2278  struct lws_process_html_state *s);
    2280 
    2313 
    2321 struct lws_tokens {
    2322  char *token;
    2324 };
    2325 
    2326 /* enum lws_token_indexes
    2327  * these have to be kept in sync with lextable.h / minilex.c
    2328  *
    2329  * NOTE: These public enums are part of the abi. If you want to add one,
    2330  * add it at where specified so existing users are unaffected.
    2331  */
    2332 enum lws_token_indexes {
    2333  WSI_TOKEN_GET_URI = 0,
    2334  WSI_TOKEN_POST_URI = 1,
    2335  WSI_TOKEN_OPTIONS_URI = 2,
    2336  WSI_TOKEN_HOST = 3,
    2337  WSI_TOKEN_CONNECTION = 4,
    2338  WSI_TOKEN_UPGRADE = 5,
    2339  WSI_TOKEN_ORIGIN = 6,
    2340  WSI_TOKEN_DRAFT = 7,
    2341  WSI_TOKEN_CHALLENGE = 8,
    2342  WSI_TOKEN_EXTENSIONS = 9,
    2343  WSI_TOKEN_KEY1 = 10,
    2344  WSI_TOKEN_KEY2 = 11,
    2345  WSI_TOKEN_PROTOCOL = 12,
    2346  WSI_TOKEN_ACCEPT = 13,
    2347  WSI_TOKEN_NONCE = 14,
    2348  WSI_TOKEN_HTTP = 15,
    2349  WSI_TOKEN_HTTP2_SETTINGS = 16,
    2350  WSI_TOKEN_HTTP_ACCEPT = 17,
    2351  WSI_TOKEN_HTTP_AC_REQUEST_HEADERS = 18,
    2352  WSI_TOKEN_HTTP_IF_MODIFIED_SINCE = 19,
    2353  WSI_TOKEN_HTTP_IF_NONE_MATCH = 20,
    2354  WSI_TOKEN_HTTP_ACCEPT_ENCODING = 21,
    2355  WSI_TOKEN_HTTP_ACCEPT_LANGUAGE = 22,
    2356  WSI_TOKEN_HTTP_PRAGMA = 23,
    2357  WSI_TOKEN_HTTP_CACHE_CONTROL = 24,
    2358  WSI_TOKEN_HTTP_AUTHORIZATION = 25,
    2359  WSI_TOKEN_HTTP_COOKIE = 26,
    2360  WSI_TOKEN_HTTP_CONTENT_LENGTH = 27,
    2361  WSI_TOKEN_HTTP_CONTENT_TYPE = 28,
    2362  WSI_TOKEN_HTTP_DATE = 29,
    2363  WSI_TOKEN_HTTP_RANGE = 30,
    2364  WSI_TOKEN_HTTP_REFERER = 31,
    2365  WSI_TOKEN_KEY = 32,
    2366  WSI_TOKEN_VERSION = 33,
    2367  WSI_TOKEN_SWORIGIN = 34,
    2368 
    2369  WSI_TOKEN_HTTP_COLON_AUTHORITY = 35,
    2370  WSI_TOKEN_HTTP_COLON_METHOD = 36,
    2371  WSI_TOKEN_HTTP_COLON_PATH = 37,
    2372  WSI_TOKEN_HTTP_COLON_SCHEME = 38,
    2373  WSI_TOKEN_HTTP_COLON_STATUS = 39,
    2374 
    2375  WSI_TOKEN_HTTP_ACCEPT_CHARSET = 40,
    2376  WSI_TOKEN_HTTP_ACCEPT_RANGES = 41,
    2377  WSI_TOKEN_HTTP_ACCESS_CONTROL_ALLOW_ORIGIN = 42,
    2378  WSI_TOKEN_HTTP_AGE = 43,
    2379  WSI_TOKEN_HTTP_ALLOW = 44,
    2380  WSI_TOKEN_HTTP_CONTENT_DISPOSITION = 45,
    2381  WSI_TOKEN_HTTP_CONTENT_ENCODING = 46,
    2382  WSI_TOKEN_HTTP_CONTENT_LANGUAGE = 47,
    2383  WSI_TOKEN_HTTP_CONTENT_LOCATION = 48,
    2384  WSI_TOKEN_HTTP_CONTENT_RANGE = 49,
    2385  WSI_TOKEN_HTTP_ETAG = 50,
    2386  WSI_TOKEN_HTTP_EXPECT = 51,
    2387  WSI_TOKEN_HTTP_EXPIRES = 52,
    2388  WSI_TOKEN_HTTP_FROM = 53,
    2389  WSI_TOKEN_HTTP_IF_MATCH = 54,
    2390  WSI_TOKEN_HTTP_IF_RANGE = 55,
    2391  WSI_TOKEN_HTTP_IF_UNMODIFIED_SINCE = 56,
    2392  WSI_TOKEN_HTTP_LAST_MODIFIED = 57,
    2393  WSI_TOKEN_HTTP_LINK = 58,
    2394  WSI_TOKEN_HTTP_LOCATION = 59,
    2395  WSI_TOKEN_HTTP_MAX_FORWARDS = 60,
    2396  WSI_TOKEN_HTTP_PROXY_AUTHENTICATE = 61,
    2397  WSI_TOKEN_HTTP_PROXY_AUTHORIZATION = 62,
    2398  WSI_TOKEN_HTTP_REFRESH = 63,
    2399  WSI_TOKEN_HTTP_RETRY_AFTER = 64,
    2400  WSI_TOKEN_HTTP_SERVER = 65,
    2401  WSI_TOKEN_HTTP_SET_COOKIE = 66,
    2402  WSI_TOKEN_HTTP_STRICT_TRANSPORT_SECURITY = 67,
    2403  WSI_TOKEN_HTTP_TRANSFER_ENCODING = 68,
    2404  WSI_TOKEN_HTTP_USER_AGENT = 69,
    2405  WSI_TOKEN_HTTP_VARY = 70,
    2406  WSI_TOKEN_HTTP_VIA = 71,
    2407  WSI_TOKEN_HTTP_WWW_AUTHENTICATE = 72,
    2408 
    2409  WSI_TOKEN_PATCH_URI = 73,
    2410  WSI_TOKEN_PUT_URI = 74,
    2411  WSI_TOKEN_DELETE_URI = 75,
    2412 
    2413  WSI_TOKEN_HTTP_URI_ARGS = 76,
    2414  WSI_TOKEN_PROXY = 77,
    2415  WSI_TOKEN_HTTP_X_REAL_IP = 78,
    2416  WSI_TOKEN_HTTP1_0 = 79,
    2417 
    2418  /****** add new things just above ---^ ******/
    2419 
    2420  /* use token storage to stash these internally, not for
    2421  * user use */
    2422 
    2423  _WSI_TOKEN_CLIENT_SENT_PROTOCOLS,
    2424  _WSI_TOKEN_CLIENT_PEER_ADDRESS,
    2425  _WSI_TOKEN_CLIENT_URI,
    2426  _WSI_TOKEN_CLIENT_HOST,
    2427  _WSI_TOKEN_CLIENT_ORIGIN,
    2428  _WSI_TOKEN_CLIENT_METHOD,
    2429 
    2430  /* always last real token index*/
    2431  WSI_TOKEN_COUNT,
    2432 
    2433  /* parser state additions, no storage associated */
    2434  WSI_TOKEN_NAME_PART,
    2435  WSI_TOKEN_SKIPPING,
    2436  WSI_TOKEN_SKIPPING_SAW_CR,
    2437  WSI_PARSING_COMPLETE,
    2438  WSI_INIT_TOKEN_MUXURL,
    2439 };
    2440 
    2442  unsigned short token_limit[WSI_TOKEN_COUNT];
    2443 };
    2444 
    2450 LWS_VISIBLE LWS_EXTERN const unsigned char *
    2451 lws_token_to_string(enum lws_token_indexes token);
    2452 
    2453 
    2462 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2463 lws_hdr_total_length(struct lws *wsi, enum lws_token_indexes h);
    2464 
    2474 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2475 lws_hdr_fragment_length(struct lws *wsi, enum lws_token_indexes h, int frag_idx);
    2476 
    2490 LWS_VISIBLE LWS_EXTERN int
    2491 lws_hdr_copy(struct lws *wsi, char *dest, int len, enum lws_token_indexes h);
    2492 
    2510 LWS_VISIBLE LWS_EXTERN int
    2511 lws_hdr_copy_fragment(struct lws *wsi, char *dest, int len,
    2512  enum lws_token_indexes h, int frag_idx);
    2513 
    2524 LWS_VISIBLE LWS_EXTERN const char *
    2525 lws_get_urlarg_by_name(struct lws *wsi, const char *name, char *buf, int len);
    2527 
    2542 
    2553 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2554 lws_add_http_header_status(struct lws *wsi,
    2555  unsigned int code, unsigned char **p,
    2556  unsigned char *end);
    2569 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2570 lws_add_http_header_by_name(struct lws *wsi, const unsigned char *name,
    2571  const unsigned char *value, int length,
    2572  unsigned char **p, unsigned char *end);
    2586 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2587 lws_add_http_header_by_token(struct lws *wsi, enum lws_token_indexes token,
    2588  const unsigned char *value, int length,
    2589  unsigned char **p, unsigned char *end);
    2600 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2601 lws_add_http_header_content_length(struct lws *wsi,
    2602  unsigned long content_length,
    2603  unsigned char **p, unsigned char *end);
    2613 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2614 lws_finalize_http_header(struct lws *wsi, unsigned char **p,
    2615  unsigned char *end);
    2617 
    2636 
    2646 };
    2647 
    2661 typedef int (*lws_spa_fileupload_cb)(void *data, const char *name,
    2662  const char *filename, char *buf, int len,
    2663  enum lws_spa_fileupload_states state);
    2664 
    2667 struct lws_spa;
    2668 
    2687 LWS_VISIBLE LWS_EXTERN struct lws_spa *
    2688 lws_spa_create(struct lws *wsi, const char * const *param_names,
    2689  int count_params, int max_storage, lws_spa_fileupload_cb opt_cb,
    2690  void *opt_data);
    2691 
    2699 LWS_VISIBLE LWS_EXTERN int
    2700 lws_spa_process(struct lws_spa *spa, const char *in, int len);
    2701 
    2707 LWS_VISIBLE LWS_EXTERN int
    2708 lws_spa_finalize(struct lws_spa *spa);
    2709 
    2716 LWS_VISIBLE LWS_EXTERN int
    2717 lws_spa_get_length(struct lws_spa *spa, int n);
    2718 
    2724 LWS_VISIBLE LWS_EXTERN const char *
    2725 lws_spa_get_string(struct lws_spa *spa, int n);
    2726 
    2732 LWS_VISIBLE LWS_EXTERN int
    2733 lws_spa_destroy(struct lws_spa *spa);
    2735 
    2746 
    2757 LWS_VISIBLE LWS_EXTERN const char *
    2758 lws_urlencode(char *escaped, const char *string, int len);
    2759 
    2760 /*
    2761  * URLDECODE 1 / 2
    2762  *
    2763  * This simple urldecode only operates until the first '\0' and requires the
    2764  * data to exist all at once
    2765  */
    2778 LWS_VISIBLE LWS_EXTERN int
    2779 lws_urldecode(char *string, const char *escaped, int len);
    2781 
    2790 LWS_VISIBLE LWS_EXTERN int
    2791 lws_return_http_status(struct lws *wsi, unsigned int code,
    2792  const char *html_body);
    2793 
    2804 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2805 lws_http_redirect(struct lws *wsi, int code, const unsigned char *loc, int len,
    2806  unsigned char **p, unsigned char *end);
    2807 
    2816 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2817 lws_http_transaction_completed(struct lws *wsi);
    2819 
    2827 
    2838 LWS_VISIBLE LWS_EXTERN const char *
    2839 lws_sql_purify(char *escaped, const char *string, int len);
    2840 
    2851 LWS_VISIBLE LWS_EXTERN const char *
    2852 lws_json_purify(char *escaped, const char *string, int len);
    2854 
    2861 
    2863 #ifdef LWS_USE_LIBEV
    2864 typedef void (lws_ev_signal_cb_t)(EV_P_ struct ev_signal *w, int revents);
    2865 
    2866 LWS_VISIBLE LWS_EXTERN int
    2867 lws_ev_sigint_cfg(struct lws_context *context, int use_ev_sigint,
    2868  lws_ev_signal_cb_t *cb);
    2869 
    2870 LWS_VISIBLE LWS_EXTERN int
    2871 lws_ev_initloop(struct lws_context *context, struct ev_loop *loop, int tsi);
    2872 
    2873 LWS_VISIBLE LWS_EXTERN void
    2874 lws_ev_sigint_cb(struct ev_loop *loop, struct ev_signal *watcher, int revents);
    2875 #endif /* LWS_USE_LIBEV */
    2876 
    2878 
    2885 #ifdef LWS_USE_LIBUV
    2887 LWS_VISIBLE LWS_EXTERN int
    2888 lws_uv_sigint_cfg(struct lws_context *context, int use_uv_sigint,
    2889  uv_signal_cb cb);
    2890 
    2891 LWS_VISIBLE LWS_EXTERN void
    2892 lws_libuv_run(const struct lws_context *context, int tsi);
    2893 
    2894 LWS_VISIBLE LWS_EXTERN void
    2895 lws_libuv_stop(struct lws_context *context);
    2896 
    2897 LWS_VISIBLE LWS_EXTERN int
    2898 lws_uv_initloop(struct lws_context *context, uv_loop_t *loop, int tsi);
    2899 
    2900 LWS_VISIBLE LWS_EXTERN uv_loop_t *
    2901 lws_uv_getloop(struct lws_context *context, int tsi);
    2902 
    2903 LWS_VISIBLE LWS_EXTERN void
    2904 lws_uv_sigint_cb(uv_signal_t *watcher, int signum);
    2905 #endif /* LWS_USE_LIBUV */
    2906 
    2913 
    2914 /*
    2915  * NOTE: These public enums are part of the abi. If you want to add one,
    2916  * add it at where specified so existing users are unaffected.
    2917  */
    2918 enum pending_timeout {
    2919  NO_PENDING_TIMEOUT = 0,
    2920  PENDING_TIMEOUT_AWAITING_PROXY_RESPONSE = 1,
    2921  PENDING_TIMEOUT_AWAITING_CONNECT_RESPONSE = 2,
    2922  PENDING_TIMEOUT_ESTABLISH_WITH_SERVER = 3,
    2923  PENDING_TIMEOUT_AWAITING_SERVER_RESPONSE = 4,
    2924  PENDING_TIMEOUT_AWAITING_PING = 5,
    2925  PENDING_TIMEOUT_CLOSE_ACK = 6,
    2926  PENDING_TIMEOUT_AWAITING_EXTENSION_CONNECT_RESPONSE = 7,
    2927  PENDING_TIMEOUT_SENT_CLIENT_HANDSHAKE = 8,
    2928  PENDING_TIMEOUT_SSL_ACCEPT = 9,
    2929  PENDING_TIMEOUT_HTTP_CONTENT = 10,
    2930  PENDING_TIMEOUT_AWAITING_CLIENT_HS_SEND = 11,
    2931  PENDING_FLUSH_STORED_SEND_BEFORE_CLOSE = 12,
    2932  PENDING_TIMEOUT_SHUTDOWN_FLUSH = 13,
    2933  PENDING_TIMEOUT_CGI = 14,
    2934  PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE = 15,
    2935 
    2936  /****** add new things just above ---^ ******/
    2937 };
    2938 
    2948 LWS_VISIBLE LWS_EXTERN void
    2949 lws_set_timeout(struct lws *wsi, enum pending_timeout reason, int secs);
    2951 
    2957 #if !defined(LWS_SIZEOFPTR)
    2958 #define LWS_SIZEOFPTR (sizeof (void *))
    2959 #endif
    2960 #if !defined(u_int64_t)
    2961 #define u_int64_t unsigned long long
    2962 #endif
    2963 
    2964 #if defined(__x86_64__)
    2965 #define _LWS_PAD_SIZE 16 /* Intel recommended for best performance */
    2966 #else
    2967 #define _LWS_PAD_SIZE LWS_SIZEOFPTR /* Size of a pointer on the target arch */
    2968 #endif
    2969 #define _LWS_PAD(n) (((n) % _LWS_PAD_SIZE) ? \
    2970  ((n) + (_LWS_PAD_SIZE - ((n) % _LWS_PAD_SIZE))) : (n))
    2971 #define LWS_PRE _LWS_PAD(4 + 10)
    2972 /* used prior to 1.7 and retained for backward compatibility */
    2973 #define LWS_SEND_BUFFER_PRE_PADDING LWS_PRE
    2974 #define LWS_SEND_BUFFER_POST_PADDING 0
    2975 
    2976 /*
    2977  * NOTE: These public enums are part of the abi. If you want to add one,
    2978  * add it at where specified so existing users are unaffected.
    2979  */
    2994  /* LWS_WRITE_CLOSE is handled by lws_close_reason() */
    2995  LWS_WRITE_PING = 5,
    2996  LWS_WRITE_PONG = 6,
    2997 
    2998  /* Same as write_http but we know this write ends the transaction */
    2999  LWS_WRITE_HTTP_FINAL = 7,
    3000 
    3001  /* HTTP2 */
    3002 
    3010  /****** add new things just above ---^ ******/
    3011 
    3012  /* flags */
    3013 
    3021 };
    3022 
    3023 
    3095 LWS_VISIBLE LWS_EXTERN int
    3096 lws_write(struct lws *wsi, unsigned char *buf, size_t len,
    3097  enum lws_write_protocol protocol);
    3098 
    3099 /* helper for case where buffer may be const */
    3100 #define lws_write_http(wsi, buf, len) \
    3101  lws_write(wsi, (unsigned char *)(buf), len, LWS_WRITE_HTTP)
    3102 
    3104 
    3123 
    3136 LWS_VISIBLE LWS_EXTERN int
    3137 lws_callback_on_writable(struct lws *wsi);
    3138 
    3152 LWS_VISIBLE LWS_EXTERN int
    3153 lws_callback_on_writable_all_protocol(const struct lws_context *context,
    3154  const struct lws_protocols *protocol);
    3155 
    3169 LWS_VISIBLE LWS_EXTERN int
    3170 lws_callback_on_writable_all_protocol_vhost(const struct lws_vhost *vhost,
    3171  const struct lws_protocols *protocol);
    3172 
    3185 LWS_VISIBLE LWS_EXTERN int
    3186 lws_callback_all_protocol(struct lws_context *context,
    3187  const struct lws_protocols *protocol, int reason);
    3188 
    3201 LWS_VISIBLE LWS_EXTERN int
    3202 lws_callback_all_protocol_vhost(struct lws_vhost *vh,
    3203  const struct lws_protocols *protocol, int reason);
    3204 
    3218 LWS_VISIBLE LWS_EXTERN int
    3219 lws_callback_vhost_protocols(struct lws *wsi, int reason, void *in, int len);
    3220 
    3228 LWS_VISIBLE LWS_EXTERN int
    3229 lws_get_socket_fd(struct lws *wsi);
    3230 
    3252 LWS_VISIBLE LWS_EXTERN size_t
    3253 lws_get_peer_write_allowance(struct lws *wsi);
    3255 
    3266 LWS_VISIBLE LWS_EXTERN int
    3267 lws_rx_flow_control(struct lws *wsi, int enable);
    3268 
    3278 LWS_VISIBLE LWS_EXTERN void
    3279 lws_rx_flow_allow_all_protocol(const struct lws_context *context,
    3280  const struct lws_protocols *protocol);
    3281 
    3298 LWS_VISIBLE LWS_EXTERN size_t
    3299 lws_remaining_packet_payload(struct lws *wsi);
    3300 
    3301 
    3310 
    3323 LWS_VISIBLE LWS_EXTERN struct lws *
    3324 lws_adopt_socket(struct lws_context *context, lws_sockfd_type accept_fd);
    3347 LWS_VISIBLE LWS_EXTERN struct lws *
    3348 lws_adopt_socket_readbuf(struct lws_context *context, lws_sockfd_type accept_fd,
    3349  const char *readbuf, size_t len);
    3351 
    3357 
    3368 LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT
    3369 lws_canonical_hostname(struct lws_context *context);
    3370 
    3385 LWS_VISIBLE LWS_EXTERN void
    3386 lws_get_peer_addresses(struct lws *wsi, lws_sockfd_type fd, char *name,
    3387  int name_len, char *rip, int rip_len);
    3388 
    3399 LWS_VISIBLE LWS_EXTERN const char *
    3400 lws_get_peer_simple(struct lws *wsi, char *name, int namelen);
    3401 
    3413 LWS_VISIBLE LWS_EXTERN int
    3414 lws_interface_to_sa(int ipv6, const char *ifname, struct sockaddr_in *addr,
    3415  size_t addrlen);
    3417 
    3423 
    3436 LWS_VISIBLE LWS_EXTERN int
    3437 lws_get_random(struct lws_context *context, void *buf, int len);
    3445 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3446 lws_daemonize(const char *_lock_path);
    3452 LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT
    3454 
    3461 LWS_VISIBLE LWS_EXTERN void *
    3462 lws_wsi_user(struct lws *wsi);
    3463 
    3475 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3476 lws_parse_uri(char *p, const char **prot, const char **ads, int *port,
    3477  const char **path);
    3478 
    3482 LWS_VISIBLE LWS_EXTERN unsigned long
    3483 lws_now_secs(void);
    3484 
    3494 LWS_VISIBLE LWS_EXTERN struct lws_context * LWS_WARN_UNUSED_RESULT
    3495 lws_get_context(const struct lws *wsi);
    3496 
    3506 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3507 lws_get_count_threads(struct lws_context *context);
    3508 
    3516 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    3517 lws_get_parent(const struct lws *wsi);
    3518 
    3525 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    3526 lws_get_child(const struct lws *wsi);
    3527 
    3528 
    3529 /*
    3530  * \deprecated DEPRECATED Note: this is not normally needed as a user api.
    3531  * It's provided in case it is
    3532  * useful when integrating with other app poll loop service code.
    3533  */
    3534 LWS_VISIBLE LWS_EXTERN int
    3535 lws_read(struct lws *wsi, unsigned char *buf, size_t len);
    3536 
    3544 LWS_VISIBLE LWS_EXTERN void
    3545 lws_set_allocator(void *(*realloc)(void *ptr, size_t size));
    3547 
    3553 
    3560 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3561 lws_send_pipe_choked(struct lws *wsi);
    3562 
    3567 LWS_VISIBLE LWS_EXTERN int
    3568 lws_is_final_fragment(struct lws *wsi);
    3569 
    3574 LWS_VISIBLE LWS_EXTERN unsigned char
    3575 lws_get_reserved_bits(struct lws *wsi);
    3576 
    3593 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3594 lws_partial_buffered(struct lws *wsi);
    3595 
    3605 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3606 lws_frame_is_binary(struct lws *wsi);
    3607 
    3616 LWS_VISIBLE LWS_EXTERN int
    3617 lws_is_ssl(struct lws *wsi);
    3622 LWS_VISIBLE LWS_EXTERN int
    3623 lws_is_cgi(struct lws *wsi);
    3625 
    3626 
    3632 #ifdef LWS_SHA1_USE_OPENSSL_NAME
    3634 #define lws_SHA1 SHA1
    3635 #else
    3636 
    3645 LWS_VISIBLE LWS_EXTERN unsigned char *
    3646 lws_SHA1(const unsigned char *d, size_t n, unsigned char *md);
    3647 #endif
    3648 
    3658 LWS_VISIBLE LWS_EXTERN int
    3659 lws_b64_encode_string(const char *in, int in_len, char *out, int out_size);
    3669 LWS_VISIBLE LWS_EXTERN int
    3670 lws_b64_decode_string(const char *in, char *out, int out_size);
    3672 
    3673 
    3683 #ifdef LWS_WITH_CGI
    3684 enum lws_enum_stdinouterr {
    3685  LWS_STDIN = 0,
    3686  LWS_STDOUT = 1,
    3687  LWS_STDERR = 2,
    3688 };
    3689 
    3690 enum lws_cgi_hdr_state {
    3691  LCHS_HEADER,
    3692  LCHS_CR1,
    3693  LCHS_LF1,
    3694  LCHS_CR2,
    3695  LCHS_LF2,
    3696  LHCS_PAYLOAD,
    3697  LCHS_SINGLE_0A,
    3698 };
    3699 
    3701  struct lws **stdwsi;
    3702  enum lws_enum_stdinouterr ch;
    3703  unsigned char *data;
    3704  enum lws_cgi_hdr_state hdr_state;
    3705  int len;
    3706 };
    3707 
    3708 
    3718 LWS_VISIBLE LWS_EXTERN int
    3719 lws_cgi(struct lws *wsi, const char * const *exec_array,
    3720  int script_uri_path_len, int timeout_secs,
    3721  const struct lws_protocol_vhost_options *mp_cgienv);
    3722 
    3728 LWS_VISIBLE LWS_EXTERN int
    3729 lws_cgi_write_split_stdout_headers(struct lws *wsi);
    3730 
    3736 LWS_VISIBLE LWS_EXTERN int
    3737 lws_cgi_kill(struct lws *wsi);
    3738 #endif
    3739 
    3741 
    3758 
    3765  lws_filefd_type (*open)(struct lws *wsi, const char *filename,
    3766  unsigned long *filelen, int flags);
    3770  int (*close)(struct lws *wsi, lws_filefd_type fd);
    3772  unsigned long (*seek_cur)(struct lws *wsi, lws_filefd_type fd,
    3773  long offset_from_cur_pos);
    3775  int (*read)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    3776  unsigned char *buf, unsigned long len);
    3778  int (*write)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    3779  unsigned char *buf, unsigned long len);
    3782  /* Add new things just above here ---^
    3783  * This is part of the ABI, don't needlessly break compatibility */
    3784 };
    3785 
    3791 LWS_VISIBLE LWS_EXTERN struct lws_plat_file_ops * LWS_WARN_UNUSED_RESULT
    3792 lws_get_fops(struct lws_context *context);
    3793 
    3802 static LWS_INLINE lws_filefd_type LWS_WARN_UNUSED_RESULT
    3803 lws_plat_file_open(struct lws *wsi, const char *filename,
    3804  unsigned long *filelen, int flags)
    3805 {
    3806  return lws_get_fops(lws_get_context(wsi))->open(wsi, filename,
    3807  filelen, flags);
    3808 }
    3809 
    3816 static LWS_INLINE int
    3817 lws_plat_file_close(struct lws *wsi, lws_filefd_type fd)
    3818 {
    3819  return lws_get_fops(lws_get_context(wsi))->close(wsi, fd);
    3820 }
    3821 
    3829 static LWS_INLINE unsigned long
    3830 lws_plat_file_seek_cur(struct lws *wsi, lws_filefd_type fd, long offset)
    3831 {
    3832  return lws_get_fops(lws_get_context(wsi))->seek_cur(wsi, fd, offset);
    3833 }
    3843 static LWS_INLINE int LWS_WARN_UNUSED_RESULT
    3844 lws_plat_file_read(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    3845  unsigned char *buf, unsigned long len)
    3846 {
    3847  return lws_get_fops(lws_get_context(wsi))->read(wsi, fd, amount, buf,
    3848  len);
    3849 }
    3859 static LWS_INLINE int LWS_WARN_UNUSED_RESULT
    3860 lws_plat_file_write(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    3861  unsigned char *buf, unsigned long len)
    3862 {
    3863  return lws_get_fops(lws_get_context(wsi))->write(wsi, fd, amount, buf,
    3864  len);
    3865 }
    3867 
    3899 #ifdef LWS_WITH_SMTP
    3900 
    3912 };
    3913 
    3915 struct lws_email {
    3916  void *data;
    3918  uv_loop_t *loop;
    3921  char email_smtp_ip[32];
    3922  char email_helo[32];
    3923  char email_from[100];
    3924  char email_to[100];
    3926  unsigned int max_content_size;
    3929  /* Fill all the callbacks before init */
    3930 
    3931  int (*on_next)(struct lws_email *email);
    3936  int (*on_sent)(struct lws_email *email);
    3941  int (*on_get_body)(struct lws_email *email, char *buf, int len);
    3947  /* private things */
    3948  uv_timer_t timeout_email;
    3950  uv_connect_t email_connect_req;
    3951  uv_tcp_t email_client;
    3953  char email_buf[256];
    3954  char *content;
    3955 };
    3956 
    3966 LWS_VISIBLE LWS_EXTERN int
    3967 lws_email_init(struct lws_email *email, uv_loop_t *loop, int max_content);
    3968 
    3977 LWS_VISIBLE LWS_EXTERN void
    3978 lws_email_check(struct lws_email *email);
    3986 LWS_VISIBLE LWS_EXTERN void
    3987 lws_email_destroy(struct lws_email *email);
    3988 
    3989 #endif
    3990 
    3991 
    3992 #ifdef __cplusplus
    3993 }
    3994 #endif
    3995 
    3996 #endif
    LWS_VISIBLE LWS_EXTERN int lws_spa_destroy(struct lws_spa *spa)
    +Go to the documentation of this file.
    1 /*
    2  * libwebsockets - small server side websockets and web server implementation
    3  *
    4  * Copyright (C) 2010-2016 Andy Green <andy@warmcat.com>
    5  *
    6  * This library is free software; you can redistribute it and/or
    7  * modify it under the terms of the GNU Lesser General Public
    8  * License as published by the Free Software Foundation:
    9  * version 2.1 of the License.
    10  *
    11  * This library is distributed in the hope that it will be useful,
    12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    14  * Lesser General Public License for more details.
    15  *
    16  * You should have received a copy of the GNU Lesser General Public
    17  * License along with this library; if not, write to the Free Software
    18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
    19  * MA 02110-1301 USA
    20  */
    21 
    24 #ifndef LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C
    25 #define LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C
    26 
    27 #ifdef __cplusplus
    28 #include <cstddef>
    29 #include <cstdarg>
    30 #ifdef MBED_OPERATORS
    31 #include "mbed-drivers/mbed.h"
    32 #include "sal-iface-eth/EthernetInterface.h"
    33 #include "sockets/TCPListener.h"
    34 #include "sal-stack-lwip/lwipv4_init.h"
    35 
    36 namespace {
    37 }
    38 using namespace mbed::Sockets::v0;
    39 
    40 
    41 struct sockaddr_in;
    42 struct lws;
    43 
    44 class lws_conn {
    45  public:
    46  lws_conn():
    47  ts(NULL),
    48  wsi(NULL),
    49  writeable(1),
    50  awaiting_on_writeable(0)
    51  {
    52  }
    53 
    54 public:
    55  void set_wsi(struct lws *_wsi) { wsi = _wsi; }
    56  int actual_onRX(Socket *s);
    57  void onRX(Socket *s);
    58  void onError(Socket *s, socket_error_t err);
    59  void onDisconnect(TCPStream *s);
    60  void onSent(Socket *s, uint16_t len);
    61  void serialized_writeable(struct lws *wsi);
    62 
    63 public:
    64  TCPStream *ts;
    65 
    66 public:
    67  struct lws *wsi;
    68  char writeable;
    69  char awaiting_on_writeable;
    70 };
    71 
    73 public:
    75  srv(SOCKET_STACK_LWIP_IPV4)
    76  {
    77  srv.setOnError(TCPStream::ErrorHandler_t(this,
    79  }
    80 
    81  void start(const uint16_t port);
    83 protected:
    84  void onRX(Socket *s);
    85  void onError(Socket *s, socket_error_t err);
    86  void onIncoming(TCPListener *s, void *impl);
    87  void onDisconnect(TCPStream *s);
    89 public:
    90  TCPListener srv;
    91 };
    92 
    93 #endif
    94 
    95 extern "C" {
    96 #else
    97 #include <stdarg.h>
    98 #endif
    99 
    100 #ifdef MBED_OPERATORS
    101 struct sockaddr_in;
    102 #define LWS_POSIX 0
    103 #else
    104 #define LWS_POSIX 1
    105 #endif
    106 
    107 #include "lws_config.h"
    108 
    109 #if defined(WIN32) || defined(_WIN32)
    110 #ifndef WIN32_LEAN_AND_MEAN
    111 #define WIN32_LEAN_AND_MEAN
    112 #endif
    113 
    114 #include <winsock2.h>
    115 #include <ws2tcpip.h>
    116 #include <stddef.h>
    117 #include <basetsd.h>
    118 #ifndef _WIN32_WCE
    119 #include <stdint.h>
    120 #include <fcntl.h>
    121 #else
    122 #define _O_RDONLY 0x0000
    123 #define O_RDONLY _O_RDONLY
    124 #endif
    125 
    126 // Visual studio older than 2015 and WIN_CE has only _stricmp
    127 #if (defined(_MSC_VER) && _MSC_VER < 1900) || defined(_WIN32_WCE)
    128 #define strcasecmp _stricmp
    129 #else
    130 #define strcasecmp stricmp
    131 #endif
    132 #define getdtablesize() 30000
    133 
    134 #define LWS_INLINE __inline
    135 #define LWS_VISIBLE
    136 #define LWS_WARN_UNUSED_RESULT
    137 #define LWS_WARN_DEPRECATED
    138 
    139 #ifdef LWS_DLL
    140 #ifdef LWS_INTERNAL
    141 #define LWS_EXTERN extern __declspec(dllexport)
    142 #else
    143 #define LWS_EXTERN extern __declspec(dllimport)
    144 #endif
    145 #else
    146 #define LWS_EXTERN
    147 #endif
    148 
    149 #define LWS_INVALID_FILE INVALID_HANDLE_VALUE
    150 #define LWS_O_RDONLY _O_RDONLY
    151 
    152 #if !defined(_MSC_VER) || _MSC_VER < 1900 /* Visual Studio 2015 already defines this in <stdio.h> */
    153 #define snprintf _snprintf
    154 #endif
    155 
    156 #ifndef __func__
    157 #define __func__ __FUNCTION__
    158 #endif
    159 
    160 #else /* NOT WIN32 */
    161 #include <unistd.h>
    162 
    163 #if defined(__NetBSD__) || defined(__FreeBSD__)
    164 #include <netinet/in.h>
    165 #endif
    166 
    167 #define LWS_INLINE inline
    168 #define LWS_O_RDONLY O_RDONLY
    169 
    170 #ifndef MBED_OPERATORS
    171 #include <poll.h>
    172 #include <netdb.h>
    173 #define LWS_INVALID_FILE -1
    174 #else
    175 #define getdtablesize() (20)
    176 #define LWS_INVALID_FILE NULL
    177 #endif
    178 
    179 #if defined(__GNUC__)
    180 
    181 /* warn_unused_result attribute only supported by GCC 3.4 or later */
    182 #if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
    183 #define LWS_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
    184 #else
    185 #define LWS_WARN_UNUSED_RESULT
    186 #endif
    187 
    188 #define LWS_VISIBLE __attribute__((visibility("default")))
    189 #define LWS_WARN_DEPRECATED __attribute__ ((deprecated))
    190 #else
    191 #define LWS_VISIBLE
    192 #define LWS_WARN_UNUSED_RESULT
    193 #define LWS_WARN_DEPRECATED
    194 #endif
    195 
    196 #if defined(__ANDROID__)
    197 #include <unistd.h>
    198 #define getdtablesize() sysconf(_SC_OPEN_MAX)
    199 #endif
    200 
    201 #endif
    202 
    203 #ifdef LWS_USE_LIBEV
    204 #include <ev.h>
    205 #endif /* LWS_USE_LIBEV */
    206 #ifdef LWS_USE_LIBUV
    207 #include <uv.h>
    208 #endif /* LWS_USE_LIBUV */
    209 
    210 #ifndef LWS_EXTERN
    211 #define LWS_EXTERN extern
    212 #endif
    213 
    214 #ifdef _WIN32
    215 #define random rand
    216 #else
    217 #include <sys/time.h>
    218 #include <unistd.h>
    219 #endif
    220 
    221 #ifdef LWS_OPENSSL_SUPPORT
    222 
    223 #ifdef USE_WOLFSSL
    224 #ifdef USE_OLD_CYASSL
    225 #include <cyassl/openssl/ssl.h>
    226 #include <cyassl/error-ssl.h>
    227 #else
    228 #include <wolfssl/openssl/ssl.h>
    229 #include <wolfssl/error-ssl.h>
    230 #endif /* not USE_OLD_CYASSL */
    231 #else
    232 #if defined(LWS_USE_POLARSSL)
    233 #include <polarssl/ssl.h>
    235  x509_crt ca;
    236  x509_crt certificate;
    237  rsa_context key;
    238 };
    239 typedef struct lws_polarssl_context SSL_CTX;
    240 typedef ssl_context SSL;
    241 #else
    242 #if defined(LWS_USE_MBEDTLS)
    243 #include <mbedtls/ssl.h>
    244 #else
    245 #include <openssl/ssl.h>
    246 #include <openssl/err.h>
    247 #endif /* not USE_MBEDTLS */
    248 #endif /* not USE_POLARSSL */
    249 #endif /* not USE_WOLFSSL */
    250 #endif
    251 
    252 
    253 #define CONTEXT_PORT_NO_LISTEN -1
    254 
    265 
    267 enum lws_log_levels {
    268  LLL_ERR = 1 << 0,
    269  LLL_WARN = 1 << 1,
    270  LLL_NOTICE = 1 << 2,
    271  LLL_INFO = 1 << 3,
    272  LLL_DEBUG = 1 << 4,
    273  LLL_PARSER = 1 << 5,
    274  LLL_HEADER = 1 << 6,
    275  LLL_EXT = 1 << 7,
    276  LLL_CLIENT = 1 << 8,
    277  LLL_LATENCY = 1 << 9,
    278 
    279  LLL_COUNT = 10 /* set to count of valid flags */
    280 };
    281 
    282 LWS_VISIBLE LWS_EXTERN void _lws_log(int filter, const char *format, ...);
    283 LWS_VISIBLE LWS_EXTERN void _lws_logv(int filter, const char *format, va_list vl);
    293 LWS_VISIBLE LWS_EXTERN int
    294 lwsl_timestamp(int level, char *p, int len);
    295 
    296 /* notice, warn and log are always compiled in */
    297 #define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__)
    298 #define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__)
    299 #define lwsl_err(...) _lws_log(LLL_ERR, __VA_ARGS__)
    300 /*
    301  * weaker logging can be deselected at configure time using --disable-debug
    302  * that gets rid of the overhead of checking while keeping _warn and _err
    303  * active
    304  */
    305 #ifdef _DEBUG
    306 
    307 #define lwsl_info(...) _lws_log(LLL_INFO, __VA_ARGS__)
    308 #define lwsl_debug(...) _lws_log(LLL_DEBUG, __VA_ARGS__)
    309 #define lwsl_parser(...) _lws_log(LLL_PARSER, __VA_ARGS__)
    310 #define lwsl_header(...) _lws_log(LLL_HEADER, __VA_ARGS__)
    311 #define lwsl_ext(...) _lws_log(LLL_EXT, __VA_ARGS__)
    312 #define lwsl_client(...) _lws_log(LLL_CLIENT, __VA_ARGS__)
    313 #define lwsl_latency(...) _lws_log(LLL_LATENCY, __VA_ARGS__)
    314 
    320 LWS_VISIBLE LWS_EXTERN void lwsl_hexdump(void *buf, size_t len);
    321 
    322 #else /* no debug */
    323 
    324 #define lwsl_info(...) {}
    325 #define lwsl_debug(...) {}
    326 #define lwsl_parser(...) {}
    327 #define lwsl_header(...) {}
    328 #define lwsl_ext(...) {}
    329 #define lwsl_client(...) {}
    330 #define lwsl_latency(...) {}
    331 #define lwsl_hexdump(a, b)
    332 
    333 #endif
    334 
    345 LWS_VISIBLE LWS_EXTERN void
    346 lws_set_log_level(int level,
    347  void (*log_emit_function)(int level, const char *line));
    348 
    358 LWS_VISIBLE LWS_EXTERN void
    359 lwsl_emit_syslog(int level, const char *line);
    360 
    362 
    363 
    364 #include <stddef.h>
    365 
    366 #ifndef lws_container_of
    367 #define lws_container_of(P,T,M) ((T *)((char *)(P) - offsetof(T, M)))
    368 #endif
    369 
    370 
    371 struct lws;
    372 #ifndef ARRAY_SIZE
    373 #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
    374 #endif
    375 
    376 /* api change list for user code to test against */
    377 
    378 #define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_ARG
    379 
    380 /* the struct lws_protocols has the id field present */
    381 #define LWS_FEATURE_PROTOCOLS_HAS_ID_FIELD
    382 
    383 /* you can call lws_get_peer_write_allowance */
    384 #define LWS_FEATURE_PROTOCOLS_HAS_PEER_WRITE_ALLOWANCE
    385 
    386 /* extra parameter introduced in 917f43ab821 */
    387 #define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_LEN
    388 
    389 /* File operations stuff exists */
    390 #define LWS_FEATURE_FOPS
    391 
    392 
    393 #if defined(_WIN32)
    394 typedef SOCKET lws_sockfd_type;
    395 typedef HANDLE lws_filefd_type;
    396 #define lws_sockfd_valid(sfd) (!!sfd)
    397 struct lws_pollfd {
    398  lws_sockfd_type fd;
    399  SHORT events;
    400  SHORT revents;
    401 };
    402 #define LWS_POLLHUP (FD_CLOSE)
    403 #define LWS_POLLIN (FD_READ | FD_ACCEPT)
    404 #define LWS_POLLOUT (FD_WRITE)
    405 #else
    406 
    407 #if defined(MBED_OPERATORS)
    408 /* it's a class lws_conn * */
    409 typedef void * lws_sockfd_type;
    410 typedef void * lws_filefd_type;
    411 #define lws_sockfd_valid(sfd) (!!sfd)
    412 struct pollfd {
    413  lws_sockfd_type fd;
    414  short events;
    415  short revents;
    416 };
    417 #define POLLIN 0x0001
    418 #define POLLPRI 0x0002
    419 #define POLLOUT 0x0004
    420 #define POLLERR 0x0008
    421 #define POLLHUP 0x0010
    422 #define POLLNVAL 0x0020
    423 
    424 struct lws;
    425 
    426 void * mbed3_create_tcp_stream_socket(void);
    427 void mbed3_delete_tcp_stream_socket(void *sockfd);
    428 void mbed3_tcp_stream_bind(void *sock, int port, struct lws *);
    429 void mbed3_tcp_stream_accept(void *sock, struct lws *);
    430 #else
    431 typedef int lws_sockfd_type;
    432 typedef int lws_filefd_type;
    433 #define lws_sockfd_valid(sfd) (sfd >= 0)
    434 #endif
    435 
    436 #define lws_pollfd pollfd
    437 #define LWS_POLLHUP (POLLHUP|POLLERR)
    438 #define LWS_POLLIN (POLLIN)
    439 #define LWS_POLLOUT (POLLOUT)
    440 #endif
    441 
    444 struct lws_pollargs {
    445  lws_sockfd_type fd;
    446  int events;
    448 };
    449 
    450 struct lws_tokens;
    451 struct lws_token_limits;
    452 
    460 
    462 /*
    463  * NOTE: These public enums are part of the abi. If you want to add one,
    464  * add it at where specified so existing users are unaffected.
    465  */
    468  LWS_CLOSE_STATUS_NOSTATUS = 0,
    530  /****** add new things just above ---^ ******/
    531 
    532  LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY = 9999,
    533 };
    534 
    547 LWS_VISIBLE LWS_EXTERN void
    548 lws_close_reason(struct lws *wsi, enum lws_close_status status,
    549  unsigned char *buf, size_t len);
    550 
    552 
    553 struct lws;
    554 struct lws_context;
    555 /* needed even with extensions disabled for create context */
    556 struct lws_extension;
    557 
    569 
    571 
    572 /*
    573  * NOTE: These public enums are part of the abi. If you want to add one,
    574  * add it at where specified so existing users are unaffected.
    575  */
    819  /* external poll() management support */
    882  LWS_CALLBACK_WS_EXT_DEFAULTS = 39,
    885  LWS_CALLBACK_CGI = 40,
    887  LWS_CALLBACK_CGI_TERMINATED = 41,
    889  LWS_CALLBACK_CGI_STDIN_DATA = 42,
    891  LWS_CALLBACK_CGI_STDIN_COMPLETED = 43,
    893  LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP = 44,
    895  LWS_CALLBACK_CLOSED_CLIENT_HTTP = 45,
    897  LWS_CALLBACK_RECEIVE_CLIENT_HTTP = 46,
    899  LWS_CALLBACK_COMPLETED_CLIENT_HTTP = 47,
    901  LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ = 48,
    903  LWS_CALLBACK_HTTP_BIND_PROTOCOL = 49,
    905  LWS_CALLBACK_HTTP_DROP_PROTOCOL = 50,
    907  LWS_CALLBACK_CHECK_ACCESS_RIGHTS = 51,
    909  LWS_CALLBACK_PROCESS_HTML = 52,
    911  LWS_CALLBACK_ADD_HEADERS = 53,
    913  LWS_CALLBACK_SESSION_INFO = 54,
    916  LWS_CALLBACK_GS_EVENT = 55,
    924  /****** add new things just above ---^ ******/
    925 
    928 };
    929 
    930 
    931 
    947 typedef int
    948 lws_callback_function(struct lws *wsi, enum lws_callback_reasons reason,
    949  void *user, void *in, size_t len);
    951 
    961 
    963 /*
    964  * NOTE: These public enums are part of the abi. If you want to add one,
    965  * add it at where specified so existing users are unaffected.
    966  */
    967 enum lws_extension_callback_reasons {
    968  LWS_EXT_CB_SERVER_CONTEXT_CONSTRUCT = 0,
    969  LWS_EXT_CB_CLIENT_CONTEXT_CONSTRUCT = 1,
    970  LWS_EXT_CB_SERVER_CONTEXT_DESTRUCT = 2,
    971  LWS_EXT_CB_CLIENT_CONTEXT_DESTRUCT = 3,
    972  LWS_EXT_CB_CONSTRUCT = 4,
    973  LWS_EXT_CB_CLIENT_CONSTRUCT = 5,
    974  LWS_EXT_CB_CHECK_OK_TO_REALLY_CLOSE = 6,
    975  LWS_EXT_CB_CHECK_OK_TO_PROPOSE_EXTENSION = 7,
    976  LWS_EXT_CB_DESTROY = 8,
    977  LWS_EXT_CB_DESTROY_ANY_WSI_CLOSING = 9,
    978  LWS_EXT_CB_ANY_WSI_ESTABLISHED = 10,
    979  LWS_EXT_CB_PACKET_RX_PREPARSE = 11,
    980  LWS_EXT_CB_PACKET_TX_PRESEND = 12,
    981  LWS_EXT_CB_PACKET_TX_DO_SEND = 13,
    982  LWS_EXT_CB_HANDSHAKE_REPLY_TX = 14,
    983  LWS_EXT_CB_FLUSH_PENDING_TX = 15,
    984  LWS_EXT_CB_EXTENDED_PAYLOAD_RX = 16,
    985  LWS_EXT_CB_CAN_PROXY_CLIENT_CONNECTION = 17,
    986  LWS_EXT_CB_1HZ = 18,
    987  LWS_EXT_CB_REQUEST_ON_WRITEABLE = 19,
    988  LWS_EXT_CB_IS_WRITEABLE = 20,
    989  LWS_EXT_CB_PAYLOAD_TX = 21,
    990  LWS_EXT_CB_PAYLOAD_RX = 22,
    991  LWS_EXT_CB_OPTION_DEFAULT = 23,
    992  LWS_EXT_CB_OPTION_SET = 24,
    993  LWS_EXT_CB_OPTION_CONFIRM = 25,
    994  LWS_EXT_CB_NAMED_OPTION_SET = 26,
    995 
    996  /****** add new things just above ---^ ******/
    997 };
    998 
    1005  /* Add new things just above here ---^
    1006  * This is part of the ABI, don't needlessly break compatibility */
    1007 };
    1008 
    1014  const char *name;
    1017  /* Add new things just above here ---^
    1018  * This is part of the ABI, don't needlessly break compatibility */
    1019 };
    1020 
    1023  const char *option_name;
    1025  const char *start;
    1026  int len;
    1027 };
    1028 
    1089 typedef int
    1090 lws_extension_callback_function(struct lws_context *context,
    1091  const struct lws_extension *ext, struct lws *wsi,
    1092  enum lws_extension_callback_reasons reason,
    1093  void *user, void *in, size_t len);
    1094 
    1097  const char *name;
    1099  const char *client_offer;
    1101  /* Add new things just above here ---^
    1102  * This is part of the ABI, don't needlessly break compatibility */
    1103 };
    1104 
    1113 LWS_VISIBLE LWS_EXTERN int
    1114 lws_set_extension_option(struct lws *wsi, const char *ext_name,
    1115  const char *opt_name, const char *opt_val);
    1116 
    1117 #ifndef LWS_NO_EXTENSIONS
    1118 /* lws_get_internal_extensions() - DEPRECATED
    1119  *
    1120  * \Deprecated There is no longer a set internal extensions table. The table is provided
    1121  * by user code along with application-specific settings. See the test
    1122  * client and server for how to do.
    1123  */
    1124 static LWS_INLINE LWS_WARN_DEPRECATED const struct lws_extension *
    1125 lws_get_internal_extensions() { return NULL; }
    1126 
    1137 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    1138 lws_ext_parse_options(const struct lws_extension *ext, struct lws *wsi,
    1139  void *ext_user, const struct lws_ext_options *opts,
    1140  const char *o, int len);
    1141 #endif
    1142 
    1155 LWS_EXTERN
    1157  struct lws_context *context, const struct lws_extension *ext,
    1158  struct lws *wsi, enum lws_extension_callback_reasons reason,
    1159  void *user, void *in, size_t len);
    1160 
    1161 /*
    1162  * The internal exts are part of the public abi
    1163  * If we add more extensions, publish the callback here ------v
    1164  */
    1166 
    1182 
    1187  const char *name;
    1208  unsigned int id;
    1215  void *user;
    1218  /* Add new things just above here ---^
    1219  * This is part of the ABI, don't needlessly break compatibility */
    1220 };
    1221 
    1222 struct lws_vhost;
    1223 
    1232 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
    1233 lws_vhost_name_to_protocol(struct lws_vhost *vh, const char *name);
    1234 
    1244 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
    1245 lws_get_protocol(struct lws *wsi);
    1246 
    1248 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
    1249 lws_protocol_get(struct lws *wsi) LWS_WARN_DEPRECATED;
    1250 
    1261 LWS_VISIBLE LWS_EXTERN void *
    1262 lws_protocol_vh_priv_zalloc(struct lws_vhost *vhost, const struct lws_protocols *prot,
    1263  int size);
    1264 
    1274 LWS_VISIBLE LWS_EXTERN void *
    1275 lws_protocol_vh_priv_get(struct lws_vhost *vhost, const struct lws_protocols *prot);
    1276 
    1285 LWS_VISIBLE LWS_EXTERN int
    1286 lws_finalize_startup(struct lws_context *context);
    1287 
    1288 #ifdef LWS_WITH_PLUGINS
    1289 
    1290 /* PLUGINS implies LIBUV */
    1291 
    1292 #define LWS_PLUGIN_API_MAGIC 180
    1293 
    1296  unsigned int api_magic;
    1297  const struct lws_protocols *protocols;
    1299  const struct lws_extension *extensions;
    1301 };
    1302 
    1303 typedef int (*lws_plugin_init_func)(struct lws_context *,
    1304  struct lws_plugin_capability *);
    1305 typedef int (*lws_plugin_destroy_func)(struct lws_context *);
    1306 
    1308 struct lws_plugin {
    1309  struct lws_plugin *list;
    1310 #if (UV_VERSION_MAJOR > 0)
    1311  uv_lib_t lib;
    1312 #else
    1313  void *l;
    1314 #endif
    1315  char name[64];
    1317 };
    1318 
    1319 #endif
    1320 
    1322 
    1323 
    1332 
    1334 #define LWSGS_EMAIL_CONTENT_SIZE 16384
    1335 
    1337 /* SHA-1 binary and hexified versions */
    1339 typedef struct { unsigned char bin[20]; } lwsgw_hash_bin;
    1341 typedef struct { char id[41]; } lwsgw_hash;
    1342 
    1349 };
    1350 
    1353  char username[32];
    1354  char email[100];
    1355  char ip[72];
    1356  unsigned int mask;
    1358  char session[42];
    1359 };
    1360 
    1365 };
    1366 
    1369  enum lws_gs_event event;
    1370  const char *username;
    1371  const char *email;
    1372 };
    1373 
    1375 
    1376 
    1390 
    1392 /*
    1393  * NOTE: These public enums are part of the abi. If you want to add one,
    1394  * add it at where specified so existing users are unaffected.
    1395  */
    1396 
    1400  (1 << 12),
    1407  (1 << 12),
    1423  (1 << 12),
    1428  (1 << 12),
    1446  /****** add new things just above ---^ ******/
    1447 };
    1448 
    1449 #define lws_check_opt(c, f) (((c) & (f)) == (f))
    1450 
    1461  int port;
    1466  const char *iface;
    1473  const struct lws_protocols *protocols;
    1477  const struct lws_extension *extensions;
    1485  const char *ssl_cert_filepath;
    1495  const char *ssl_ca_filepath;
    1497  const char *ssl_cipher_list;
    1501  const char *http_proxy_address;
    1504  unsigned int http_proxy_port;
    1506  int gid;
    1508  int uid;
    1510  unsigned int options;
    1512  void *user;
    1515  int ka_time;
    1525 #ifdef LWS_OPENSSL_SUPPORT
    1531 #else /* maintain structure layout either way */
    1533 #endif
    1534 
    1545  unsigned int count_threads;
    1547  unsigned int fd_limit_per_thread;
    1551  unsigned int timeout_secs;
    1556  const char *ecdh_curve;
    1558  const char *vhost_name;
    1562  const char * const *plugin_dirs;
    1571  const char *log_filepath;
    1574  const struct lws_http_mount *mounts;
    1576  const char *server_string;
    1579  unsigned int pt_serv_buf_size;
    1594  unsigned short ws_ping_pong_interval;
    1607  /* Add new things just above here ---^
    1608  * This is part of the ABI, don't needlessly break compatibility
    1609  *
    1610  * The below is to ensure later library versions with new
    1611  * members added above will see 0 (default) even if the app
    1612  * was not built against the newer headers.
    1613  */
    1614 
    1615  void *_unused[8];
    1616 };
    1617 
    1652 LWS_VISIBLE LWS_EXTERN struct lws_context *
    1654 
    1663 LWS_VISIBLE LWS_EXTERN void
    1664 lws_context_destroy(struct lws_context *context);
    1665 
    1683 LWS_VISIBLE LWS_EXTERN int
    1684 lws_set_proxy(struct lws_vhost *vhost, const char *proxy);
    1685 
    1686 
    1687 struct lws_vhost;
    1688 
    1698 LWS_EXTERN LWS_VISIBLE struct lws_vhost *
    1699 lws_create_vhost(struct lws_context *context,
    1700  struct lws_context_creation_info *info);
    1701 
    1716 LWS_VISIBLE LWS_EXTERN int
    1717 lwsws_get_config_globals(struct lws_context_creation_info *info, const char *d,
    1718  char **config_strings, int *len);
    1719 
    1735 LWS_VISIBLE LWS_EXTERN int
    1736 lwsws_get_config_vhosts(struct lws_context *context,
    1737  struct lws_context_creation_info *info, const char *d,
    1738  char **config_strings, int *len);
    1739 
    1741 LWS_VISIBLE LWS_EXTERN struct lws_vhost *
    1742 lws_vhost_get(struct lws *wsi) LWS_WARN_DEPRECATED;
    1743 
    1749 LWS_VISIBLE LWS_EXTERN struct lws_vhost *
    1750 lws_get_vhost(struct lws *wsi);
    1751 
    1759 LWS_VISIBLE LWS_EXTERN int
    1760 lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len);
    1761 
    1769 LWS_VISIBLE LWS_EXTERN int
    1770 lws_json_dump_context(const struct lws_context *context, char *buf, int len);
    1771 
    1781 LWS_VISIBLE LWS_EXTERN void *
    1782 lws_context_user(struct lws_context *context);
    1783 
    1789 
    1799  const char *name;
    1800  const char *value;
    1801 };
    1802 
    1815 };
    1816 
    1824  const char *mountpoint;
    1826  const char *origin;
    1828  const char *def;
    1830  const char *protocol;
    1846  unsigned int auth_mask;
    1849  unsigned int cache_reusable:1;
    1850  unsigned int cache_revalidate:1;
    1851  unsigned int cache_intermediaries:1;
    1853  unsigned char origin_protocol;
    1854  unsigned char mountpoint_len;
    1855 };
    1858 
    1864 
    1872  LCCSCF_USE_SSL = (1 << 0),
    1873  LCCSCF_ALLOW_SELFSIGNED = (1 << 1),
    1874  LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK = (1 << 2)
    1875 };
    1876 
    1881  struct lws_context *context;
    1883  const char *address;
    1885  int port;
    1889  const char *path;
    1891  const char *host;
    1893  const char *origin;
    1895  const char *protocol;
    1899  void *userdata;
    1903  const char *method;
    1906  struct lws *parent_wsi;
    1910  const char *uri_replace_from;
    1913  const char *uri_replace_to;
    1915  struct lws_vhost *vhost;
    1917  struct lws **pwsi;
    1929  /* Add new things just above here ---^
    1930  * This is part of the ABI, don't needlessly break compatibility
    1931  *
    1932  * The below is to ensure later library versions with new
    1933  * members added above will see 0 (default) even if the app
    1934  * was not built against the newer headers.
    1935  */
    1936 
    1937  void *_unused[4];
    1938 };
    1939 
    1947 LWS_VISIBLE LWS_EXTERN struct lws *
    1949 
    1970 /* deprecated, use lws_client_connect_via_info() */
    1971 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    1972 lws_client_connect(struct lws_context *clients, const char *address,
    1973  int port, int ssl_connection, const char *path,
    1974  const char *host, const char *origin, const char *protocol,
    1975  int ietf_version_or_minus_one) LWS_WARN_DEPRECATED;
    1976 /* deprecated, use lws_client_connect_via_info() */
    1997 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    1998 lws_client_connect_extended(struct lws_context *clients, const char *address,
    1999  int port, int ssl_connection, const char *path,
    2000  const char *host, const char *origin,
    2001  const char *protocol, int ietf_version_or_minus_one,
    2002  void *userdata) LWS_WARN_DEPRECATED;
    2003 
    2029 LWS_VISIBLE LWS_EXTERN int
    2031  struct lws_vhost *vhost);
    2032 
    2033 LWS_VISIBLE LWS_EXTERN int
    2034 lws_http_client_read(struct lws *wsi, char **buf, int *len);
    2036 
    2044 
    2077 LWS_VISIBLE LWS_EXTERN int
    2078 lws_service(struct lws_context *context, int timeout_ms);
    2079 
    2091 LWS_VISIBLE LWS_EXTERN int
    2092 lws_service_tsi(struct lws_context *context, int timeout_ms, int tsi);
    2093 
    2109 LWS_VISIBLE LWS_EXTERN void
    2110 lws_cancel_service_pt(struct lws *wsi);
    2111 
    2123 LWS_VISIBLE LWS_EXTERN void
    2124 lws_cancel_service(struct lws_context *context);
    2125 
    2148 LWS_VISIBLE LWS_EXTERN int
    2149 lws_service_fd(struct lws_context *context, struct lws_pollfd *pollfd);
    2150 
    2160 LWS_VISIBLE LWS_EXTERN int
    2161 lws_service_fd_tsi(struct lws_context *context, struct lws_pollfd *pollfd,
    2162  int tsi);
    2163 
    2165 
    2171 
    2178 
    2190 LWS_VISIBLE LWS_EXTERN const char *
    2191 lws_get_mimetype(const char *file, const struct lws_http_mount *m);
    2192 
    2211 LWS_VISIBLE LWS_EXTERN int
    2212 lws_serve_http_file(struct lws *wsi, const char *file, const char *content_type,
    2213  const char *other_headers, int other_headers_len);
    2214 LWS_VISIBLE LWS_EXTERN int
    2215 lws_serve_http_file_fragment(struct lws *wsi);
    2217 
    2228 
    2229 enum http_status {
    2230  HTTP_STATUS_OK = 200,
    2231  HTTP_STATUS_NO_CONTENT = 204,
    2232 
    2233  HTTP_STATUS_MOVED_PERMANENTLY = 301,
    2234  HTTP_STATUS_FOUND = 302,
    2235  HTTP_STATUS_SEE_OTHER = 303,
    2236 
    2237  HTTP_STATUS_BAD_REQUEST = 400,
    2238  HTTP_STATUS_UNAUTHORIZED,
    2239  HTTP_STATUS_PAYMENT_REQUIRED,
    2240  HTTP_STATUS_FORBIDDEN,
    2241  HTTP_STATUS_NOT_FOUND,
    2242  HTTP_STATUS_METHOD_NOT_ALLOWED,
    2243  HTTP_STATUS_NOT_ACCEPTABLE,
    2244  HTTP_STATUS_PROXY_AUTH_REQUIRED,
    2245  HTTP_STATUS_REQUEST_TIMEOUT,
    2246  HTTP_STATUS_CONFLICT,
    2247  HTTP_STATUS_GONE,
    2248  HTTP_STATUS_LENGTH_REQUIRED,
    2249  HTTP_STATUS_PRECONDITION_FAILED,
    2250  HTTP_STATUS_REQ_ENTITY_TOO_LARGE,
    2251  HTTP_STATUS_REQ_URI_TOO_LONG,
    2252  HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE,
    2253  HTTP_STATUS_REQ_RANGE_NOT_SATISFIABLE,
    2254  HTTP_STATUS_EXPECTATION_FAILED,
    2255 
    2256  HTTP_STATUS_INTERNAL_SERVER_ERROR = 500,
    2257  HTTP_STATUS_NOT_IMPLEMENTED,
    2258  HTTP_STATUS_BAD_GATEWAY,
    2259  HTTP_STATUS_SERVICE_UNAVAILABLE,
    2260  HTTP_STATUS_GATEWAY_TIMEOUT,
    2261  HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED,
    2262 };
    2263 
    2265  char *p;
    2266  int len;
    2267  int max_len;
    2268  int final;
    2269 };
    2270 
    2271 typedef const char *(*lws_process_html_state_cb)(void *data, int index);
    2272 
    2274  char *start;
    2275  char swallow[16];
    2276  int pos;
    2277  void *data;
    2278  const char * const *vars;
    2281  lws_process_html_state_cb replace;
    2282 };
    2283 
    2288 LWS_VISIBLE LWS_EXTERN int
    2290  struct lws_process_html_state *s);
    2292 
    2325 
    2333 struct lws_tokens {
    2334  char *token;
    2336 };
    2337 
    2338 /* enum lws_token_indexes
    2339  * these have to be kept in sync with lextable.h / minilex.c
    2340  *
    2341  * NOTE: These public enums are part of the abi. If you want to add one,
    2342  * add it at where specified so existing users are unaffected.
    2343  */
    2344 enum lws_token_indexes {
    2345  WSI_TOKEN_GET_URI = 0,
    2346  WSI_TOKEN_POST_URI = 1,
    2347  WSI_TOKEN_OPTIONS_URI = 2,
    2348  WSI_TOKEN_HOST = 3,
    2349  WSI_TOKEN_CONNECTION = 4,
    2350  WSI_TOKEN_UPGRADE = 5,
    2351  WSI_TOKEN_ORIGIN = 6,
    2352  WSI_TOKEN_DRAFT = 7,
    2353  WSI_TOKEN_CHALLENGE = 8,
    2354  WSI_TOKEN_EXTENSIONS = 9,
    2355  WSI_TOKEN_KEY1 = 10,
    2356  WSI_TOKEN_KEY2 = 11,
    2357  WSI_TOKEN_PROTOCOL = 12,
    2358  WSI_TOKEN_ACCEPT = 13,
    2359  WSI_TOKEN_NONCE = 14,
    2360  WSI_TOKEN_HTTP = 15,
    2361  WSI_TOKEN_HTTP2_SETTINGS = 16,
    2362  WSI_TOKEN_HTTP_ACCEPT = 17,
    2363  WSI_TOKEN_HTTP_AC_REQUEST_HEADERS = 18,
    2364  WSI_TOKEN_HTTP_IF_MODIFIED_SINCE = 19,
    2365  WSI_TOKEN_HTTP_IF_NONE_MATCH = 20,
    2366  WSI_TOKEN_HTTP_ACCEPT_ENCODING = 21,
    2367  WSI_TOKEN_HTTP_ACCEPT_LANGUAGE = 22,
    2368  WSI_TOKEN_HTTP_PRAGMA = 23,
    2369  WSI_TOKEN_HTTP_CACHE_CONTROL = 24,
    2370  WSI_TOKEN_HTTP_AUTHORIZATION = 25,
    2371  WSI_TOKEN_HTTP_COOKIE = 26,
    2372  WSI_TOKEN_HTTP_CONTENT_LENGTH = 27,
    2373  WSI_TOKEN_HTTP_CONTENT_TYPE = 28,
    2374  WSI_TOKEN_HTTP_DATE = 29,
    2375  WSI_TOKEN_HTTP_RANGE = 30,
    2376  WSI_TOKEN_HTTP_REFERER = 31,
    2377  WSI_TOKEN_KEY = 32,
    2378  WSI_TOKEN_VERSION = 33,
    2379  WSI_TOKEN_SWORIGIN = 34,
    2380 
    2381  WSI_TOKEN_HTTP_COLON_AUTHORITY = 35,
    2382  WSI_TOKEN_HTTP_COLON_METHOD = 36,
    2383  WSI_TOKEN_HTTP_COLON_PATH = 37,
    2384  WSI_TOKEN_HTTP_COLON_SCHEME = 38,
    2385  WSI_TOKEN_HTTP_COLON_STATUS = 39,
    2386 
    2387  WSI_TOKEN_HTTP_ACCEPT_CHARSET = 40,
    2388  WSI_TOKEN_HTTP_ACCEPT_RANGES = 41,
    2389  WSI_TOKEN_HTTP_ACCESS_CONTROL_ALLOW_ORIGIN = 42,
    2390  WSI_TOKEN_HTTP_AGE = 43,
    2391  WSI_TOKEN_HTTP_ALLOW = 44,
    2392  WSI_TOKEN_HTTP_CONTENT_DISPOSITION = 45,
    2393  WSI_TOKEN_HTTP_CONTENT_ENCODING = 46,
    2394  WSI_TOKEN_HTTP_CONTENT_LANGUAGE = 47,
    2395  WSI_TOKEN_HTTP_CONTENT_LOCATION = 48,
    2396  WSI_TOKEN_HTTP_CONTENT_RANGE = 49,
    2397  WSI_TOKEN_HTTP_ETAG = 50,
    2398  WSI_TOKEN_HTTP_EXPECT = 51,
    2399  WSI_TOKEN_HTTP_EXPIRES = 52,
    2400  WSI_TOKEN_HTTP_FROM = 53,
    2401  WSI_TOKEN_HTTP_IF_MATCH = 54,
    2402  WSI_TOKEN_HTTP_IF_RANGE = 55,
    2403  WSI_TOKEN_HTTP_IF_UNMODIFIED_SINCE = 56,
    2404  WSI_TOKEN_HTTP_LAST_MODIFIED = 57,
    2405  WSI_TOKEN_HTTP_LINK = 58,
    2406  WSI_TOKEN_HTTP_LOCATION = 59,
    2407  WSI_TOKEN_HTTP_MAX_FORWARDS = 60,
    2408  WSI_TOKEN_HTTP_PROXY_AUTHENTICATE = 61,
    2409  WSI_TOKEN_HTTP_PROXY_AUTHORIZATION = 62,
    2410  WSI_TOKEN_HTTP_REFRESH = 63,
    2411  WSI_TOKEN_HTTP_RETRY_AFTER = 64,
    2412  WSI_TOKEN_HTTP_SERVER = 65,
    2413  WSI_TOKEN_HTTP_SET_COOKIE = 66,
    2414  WSI_TOKEN_HTTP_STRICT_TRANSPORT_SECURITY = 67,
    2415  WSI_TOKEN_HTTP_TRANSFER_ENCODING = 68,
    2416  WSI_TOKEN_HTTP_USER_AGENT = 69,
    2417  WSI_TOKEN_HTTP_VARY = 70,
    2418  WSI_TOKEN_HTTP_VIA = 71,
    2419  WSI_TOKEN_HTTP_WWW_AUTHENTICATE = 72,
    2420 
    2421  WSI_TOKEN_PATCH_URI = 73,
    2422  WSI_TOKEN_PUT_URI = 74,
    2423  WSI_TOKEN_DELETE_URI = 75,
    2424 
    2425  WSI_TOKEN_HTTP_URI_ARGS = 76,
    2426  WSI_TOKEN_PROXY = 77,
    2427  WSI_TOKEN_HTTP_X_REAL_IP = 78,
    2428  WSI_TOKEN_HTTP1_0 = 79,
    2429 
    2430  /****** add new things just above ---^ ******/
    2431 
    2432  /* use token storage to stash these internally, not for
    2433  * user use */
    2434 
    2435  _WSI_TOKEN_CLIENT_SENT_PROTOCOLS,
    2436  _WSI_TOKEN_CLIENT_PEER_ADDRESS,
    2437  _WSI_TOKEN_CLIENT_URI,
    2438  _WSI_TOKEN_CLIENT_HOST,
    2439  _WSI_TOKEN_CLIENT_ORIGIN,
    2440  _WSI_TOKEN_CLIENT_METHOD,
    2441 
    2442  /* always last real token index*/
    2443  WSI_TOKEN_COUNT,
    2444 
    2445  /* parser state additions, no storage associated */
    2446  WSI_TOKEN_NAME_PART,
    2447  WSI_TOKEN_SKIPPING,
    2448  WSI_TOKEN_SKIPPING_SAW_CR,
    2449  WSI_PARSING_COMPLETE,
    2450  WSI_INIT_TOKEN_MUXURL,
    2451 };
    2452 
    2454  unsigned short token_limit[WSI_TOKEN_COUNT];
    2455 };
    2456 
    2462 LWS_VISIBLE LWS_EXTERN const unsigned char *
    2463 lws_token_to_string(enum lws_token_indexes token);
    2464 
    2465 
    2474 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2475 lws_hdr_total_length(struct lws *wsi, enum lws_token_indexes h);
    2476 
    2486 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2487 lws_hdr_fragment_length(struct lws *wsi, enum lws_token_indexes h, int frag_idx);
    2488 
    2502 LWS_VISIBLE LWS_EXTERN int
    2503 lws_hdr_copy(struct lws *wsi, char *dest, int len, enum lws_token_indexes h);
    2504 
    2522 LWS_VISIBLE LWS_EXTERN int
    2523 lws_hdr_copy_fragment(struct lws *wsi, char *dest, int len,
    2524  enum lws_token_indexes h, int frag_idx);
    2525 
    2536 LWS_VISIBLE LWS_EXTERN const char *
    2537 lws_get_urlarg_by_name(struct lws *wsi, const char *name, char *buf, int len);
    2539 
    2554 
    2565 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2566 lws_add_http_header_status(struct lws *wsi,
    2567  unsigned int code, unsigned char **p,
    2568  unsigned char *end);
    2581 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2582 lws_add_http_header_by_name(struct lws *wsi, const unsigned char *name,
    2583  const unsigned char *value, int length,
    2584  unsigned char **p, unsigned char *end);
    2598 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2599 lws_add_http_header_by_token(struct lws *wsi, enum lws_token_indexes token,
    2600  const unsigned char *value, int length,
    2601  unsigned char **p, unsigned char *end);
    2612 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2613 lws_add_http_header_content_length(struct lws *wsi,
    2614  unsigned long content_length,
    2615  unsigned char **p, unsigned char *end);
    2625 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2626 lws_finalize_http_header(struct lws *wsi, unsigned char **p,
    2627  unsigned char *end);
    2629 
    2648 
    2658 };
    2659 
    2673 typedef int (*lws_spa_fileupload_cb)(void *data, const char *name,
    2674  const char *filename, char *buf, int len,
    2675  enum lws_spa_fileupload_states state);
    2676 
    2679 struct lws_spa;
    2680 
    2699 LWS_VISIBLE LWS_EXTERN struct lws_spa *
    2700 lws_spa_create(struct lws *wsi, const char * const *param_names,
    2701  int count_params, int max_storage, lws_spa_fileupload_cb opt_cb,
    2702  void *opt_data);
    2703 
    2711 LWS_VISIBLE LWS_EXTERN int
    2712 lws_spa_process(struct lws_spa *spa, const char *in, int len);
    2713 
    2719 LWS_VISIBLE LWS_EXTERN int
    2720 lws_spa_finalize(struct lws_spa *spa);
    2721 
    2728 LWS_VISIBLE LWS_EXTERN int
    2729 lws_spa_get_length(struct lws_spa *spa, int n);
    2730 
    2736 LWS_VISIBLE LWS_EXTERN const char *
    2737 lws_spa_get_string(struct lws_spa *spa, int n);
    2738 
    2744 LWS_VISIBLE LWS_EXTERN int
    2745 lws_spa_destroy(struct lws_spa *spa);
    2747 
    2758 
    2769 LWS_VISIBLE LWS_EXTERN const char *
    2770 lws_urlencode(char *escaped, const char *string, int len);
    2771 
    2772 /*
    2773  * URLDECODE 1 / 2
    2774  *
    2775  * This simple urldecode only operates until the first '\0' and requires the
    2776  * data to exist all at once
    2777  */
    2790 LWS_VISIBLE LWS_EXTERN int
    2791 lws_urldecode(char *string, const char *escaped, int len);
    2793 
    2802 LWS_VISIBLE LWS_EXTERN int
    2803 lws_return_http_status(struct lws *wsi, unsigned int code,
    2804  const char *html_body);
    2805 
    2816 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2817 lws_http_redirect(struct lws *wsi, int code, const unsigned char *loc, int len,
    2818  unsigned char **p, unsigned char *end);
    2819 
    2828 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2829 lws_http_transaction_completed(struct lws *wsi);
    2831 
    2839 
    2850 LWS_VISIBLE LWS_EXTERN const char *
    2851 lws_sql_purify(char *escaped, const char *string, int len);
    2852 
    2863 LWS_VISIBLE LWS_EXTERN const char *
    2864 lws_json_purify(char *escaped, const char *string, int len);
    2866 
    2873 
    2875 #ifdef LWS_USE_LIBEV
    2876 typedef void (lws_ev_signal_cb_t)(EV_P_ struct ev_signal *w, int revents);
    2877 
    2878 LWS_VISIBLE LWS_EXTERN int
    2879 lws_ev_sigint_cfg(struct lws_context *context, int use_ev_sigint,
    2880  lws_ev_signal_cb_t *cb);
    2881 
    2882 LWS_VISIBLE LWS_EXTERN int
    2883 lws_ev_initloop(struct lws_context *context, struct ev_loop *loop, int tsi);
    2884 
    2885 LWS_VISIBLE LWS_EXTERN void
    2886 lws_ev_sigint_cb(struct ev_loop *loop, struct ev_signal *watcher, int revents);
    2887 #endif /* LWS_USE_LIBEV */
    2888 
    2890 
    2897 #ifdef LWS_USE_LIBUV
    2899 LWS_VISIBLE LWS_EXTERN int
    2900 lws_uv_sigint_cfg(struct lws_context *context, int use_uv_sigint,
    2901  uv_signal_cb cb);
    2902 
    2903 LWS_VISIBLE LWS_EXTERN void
    2904 lws_libuv_run(const struct lws_context *context, int tsi);
    2905 
    2906 LWS_VISIBLE LWS_EXTERN void
    2907 lws_libuv_stop(struct lws_context *context);
    2908 
    2909 LWS_VISIBLE LWS_EXTERN int
    2910 lws_uv_initloop(struct lws_context *context, uv_loop_t *loop, int tsi);
    2911 
    2912 LWS_VISIBLE LWS_EXTERN uv_loop_t *
    2913 lws_uv_getloop(struct lws_context *context, int tsi);
    2914 
    2915 LWS_VISIBLE LWS_EXTERN void
    2916 lws_uv_sigint_cb(uv_signal_t *watcher, int signum);
    2917 #endif /* LWS_USE_LIBUV */
    2918 
    2925 
    2926 /*
    2927  * NOTE: These public enums are part of the abi. If you want to add one,
    2928  * add it at where specified so existing users are unaffected.
    2929  */
    2930 enum pending_timeout {
    2931  NO_PENDING_TIMEOUT = 0,
    2932  PENDING_TIMEOUT_AWAITING_PROXY_RESPONSE = 1,
    2933  PENDING_TIMEOUT_AWAITING_CONNECT_RESPONSE = 2,
    2934  PENDING_TIMEOUT_ESTABLISH_WITH_SERVER = 3,
    2935  PENDING_TIMEOUT_AWAITING_SERVER_RESPONSE = 4,
    2936  PENDING_TIMEOUT_AWAITING_PING = 5,
    2937  PENDING_TIMEOUT_CLOSE_ACK = 6,
    2938  PENDING_TIMEOUT_AWAITING_EXTENSION_CONNECT_RESPONSE = 7,
    2939  PENDING_TIMEOUT_SENT_CLIENT_HANDSHAKE = 8,
    2940  PENDING_TIMEOUT_SSL_ACCEPT = 9,
    2941  PENDING_TIMEOUT_HTTP_CONTENT = 10,
    2942  PENDING_TIMEOUT_AWAITING_CLIENT_HS_SEND = 11,
    2943  PENDING_FLUSH_STORED_SEND_BEFORE_CLOSE = 12,
    2944  PENDING_TIMEOUT_SHUTDOWN_FLUSH = 13,
    2945  PENDING_TIMEOUT_CGI = 14,
    2946  PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE = 15,
    2947  PENDING_TIMEOUT_WS_PONG_CHECK_SEND_PING = 16,
    2948  PENDING_TIMEOUT_WS_PONG_CHECK_GET_PONG = 17,
    2949 
    2950  /****** add new things just above ---^ ******/
    2951 };
    2952 
    2962 LWS_VISIBLE LWS_EXTERN void
    2963 lws_set_timeout(struct lws *wsi, enum pending_timeout reason, int secs);
    2965 
    2971 #if !defined(LWS_SIZEOFPTR)
    2972 #define LWS_SIZEOFPTR (sizeof (void *))
    2973 #endif
    2974 #if !defined(u_int64_t)
    2975 #define u_int64_t unsigned long long
    2976 #endif
    2977 
    2978 #if defined(__x86_64__)
    2979 #define _LWS_PAD_SIZE 16 /* Intel recommended for best performance */
    2980 #else
    2981 #define _LWS_PAD_SIZE LWS_SIZEOFPTR /* Size of a pointer on the target arch */
    2982 #endif
    2983 #define _LWS_PAD(n) (((n) % _LWS_PAD_SIZE) ? \
    2984  ((n) + (_LWS_PAD_SIZE - ((n) % _LWS_PAD_SIZE))) : (n))
    2985 #define LWS_PRE _LWS_PAD(4 + 10)
    2986 /* used prior to 1.7 and retained for backward compatibility */
    2987 #define LWS_SEND_BUFFER_PRE_PADDING LWS_PRE
    2988 #define LWS_SEND_BUFFER_POST_PADDING 0
    2989 
    2990 /*
    2991  * NOTE: These public enums are part of the abi. If you want to add one,
    2992  * add it at where specified so existing users are unaffected.
    2993  */
    3008  /* LWS_WRITE_CLOSE is handled by lws_close_reason() */
    3009  LWS_WRITE_PING = 5,
    3010  LWS_WRITE_PONG = 6,
    3011 
    3012  /* Same as write_http but we know this write ends the transaction */
    3013  LWS_WRITE_HTTP_FINAL = 7,
    3014 
    3015  /* HTTP2 */
    3016 
    3024  /****** add new things just above ---^ ******/
    3025 
    3026  /* flags */
    3027 
    3035 };
    3036 
    3037 
    3109 LWS_VISIBLE LWS_EXTERN int
    3110 lws_write(struct lws *wsi, unsigned char *buf, size_t len,
    3111  enum lws_write_protocol protocol);
    3112 
    3113 /* helper for case where buffer may be const */
    3114 #define lws_write_http(wsi, buf, len) \
    3115  lws_write(wsi, (unsigned char *)(buf), len, LWS_WRITE_HTTP)
    3116 
    3118 
    3137 
    3150 LWS_VISIBLE LWS_EXTERN int
    3151 lws_callback_on_writable(struct lws *wsi);
    3152 
    3166 LWS_VISIBLE LWS_EXTERN int
    3167 lws_callback_on_writable_all_protocol(const struct lws_context *context,
    3168  const struct lws_protocols *protocol);
    3169 
    3183 LWS_VISIBLE LWS_EXTERN int
    3184 lws_callback_on_writable_all_protocol_vhost(const struct lws_vhost *vhost,
    3185  const struct lws_protocols *protocol);
    3186 
    3199 LWS_VISIBLE LWS_EXTERN int
    3200 lws_callback_all_protocol(struct lws_context *context,
    3201  const struct lws_protocols *protocol, int reason);
    3202 
    3215 LWS_VISIBLE LWS_EXTERN int
    3216 lws_callback_all_protocol_vhost(struct lws_vhost *vh,
    3217  const struct lws_protocols *protocol, int reason);
    3218 
    3232 LWS_VISIBLE LWS_EXTERN int
    3233 lws_callback_vhost_protocols(struct lws *wsi, int reason, void *in, int len);
    3234 
    3242 LWS_VISIBLE LWS_EXTERN int
    3243 lws_get_socket_fd(struct lws *wsi);
    3244 
    3266 LWS_VISIBLE LWS_EXTERN size_t
    3267 lws_get_peer_write_allowance(struct lws *wsi);
    3269 
    3280 LWS_VISIBLE LWS_EXTERN int
    3281 lws_rx_flow_control(struct lws *wsi, int enable);
    3282 
    3292 LWS_VISIBLE LWS_EXTERN void
    3293 lws_rx_flow_allow_all_protocol(const struct lws_context *context,
    3294  const struct lws_protocols *protocol);
    3295 
    3312 LWS_VISIBLE LWS_EXTERN size_t
    3313 lws_remaining_packet_payload(struct lws *wsi);
    3314 
    3315 
    3324 
    3337 LWS_VISIBLE LWS_EXTERN struct lws *
    3338 lws_adopt_socket(struct lws_context *context, lws_sockfd_type accept_fd);
    3361 LWS_VISIBLE LWS_EXTERN struct lws *
    3362 lws_adopt_socket_readbuf(struct lws_context *context, lws_sockfd_type accept_fd,
    3363  const char *readbuf, size_t len);
    3365 
    3371 
    3382 LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT
    3383 lws_canonical_hostname(struct lws_context *context);
    3384 
    3399 LWS_VISIBLE LWS_EXTERN void
    3400 lws_get_peer_addresses(struct lws *wsi, lws_sockfd_type fd, char *name,
    3401  int name_len, char *rip, int rip_len);
    3402 
    3413 LWS_VISIBLE LWS_EXTERN const char *
    3414 lws_get_peer_simple(struct lws *wsi, char *name, int namelen);
    3415 
    3427 LWS_VISIBLE LWS_EXTERN int
    3428 lws_interface_to_sa(int ipv6, const char *ifname, struct sockaddr_in *addr,
    3429  size_t addrlen);
    3431 
    3437 
    3450 LWS_VISIBLE LWS_EXTERN int
    3451 lws_get_random(struct lws_context *context, void *buf, int len);
    3459 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3460 lws_daemonize(const char *_lock_path);
    3466 LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT
    3468 
    3475 LWS_VISIBLE LWS_EXTERN void *
    3476 lws_wsi_user(struct lws *wsi);
    3477 
    3489 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3490 lws_parse_uri(char *p, const char **prot, const char **ads, int *port,
    3491  const char **path);
    3492 
    3496 LWS_VISIBLE LWS_EXTERN unsigned long
    3497 lws_now_secs(void);
    3498 
    3508 LWS_VISIBLE LWS_EXTERN struct lws_context * LWS_WARN_UNUSED_RESULT
    3509 lws_get_context(const struct lws *wsi);
    3510 
    3520 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3521 lws_get_count_threads(struct lws_context *context);
    3522 
    3530 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    3531 lws_get_parent(const struct lws *wsi);
    3532 
    3539 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    3540 lws_get_child(const struct lws *wsi);
    3541 
    3542 
    3543 /*
    3544  * \deprecated DEPRECATED Note: this is not normally needed as a user api.
    3545  * It's provided in case it is
    3546  * useful when integrating with other app poll loop service code.
    3547  */
    3548 LWS_VISIBLE LWS_EXTERN int
    3549 lws_read(struct lws *wsi, unsigned char *buf, size_t len);
    3550 
    3558 LWS_VISIBLE LWS_EXTERN void
    3559 lws_set_allocator(void *(*realloc)(void *ptr, size_t size));
    3561 
    3567 
    3574 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3575 lws_send_pipe_choked(struct lws *wsi);
    3576 
    3581 LWS_VISIBLE LWS_EXTERN int
    3582 lws_is_final_fragment(struct lws *wsi);
    3583 
    3588 LWS_VISIBLE LWS_EXTERN unsigned char
    3589 lws_get_reserved_bits(struct lws *wsi);
    3590 
    3607 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3608 lws_partial_buffered(struct lws *wsi);
    3609 
    3619 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3620 lws_frame_is_binary(struct lws *wsi);
    3621 
    3630 LWS_VISIBLE LWS_EXTERN int
    3631 lws_is_ssl(struct lws *wsi);
    3636 LWS_VISIBLE LWS_EXTERN int
    3637 lws_is_cgi(struct lws *wsi);
    3639 
    3640 
    3646 #ifdef LWS_SHA1_USE_OPENSSL_NAME
    3648 #define lws_SHA1 SHA1
    3649 #else
    3650 
    3659 LWS_VISIBLE LWS_EXTERN unsigned char *
    3660 lws_SHA1(const unsigned char *d, size_t n, unsigned char *md);
    3661 #endif
    3662 
    3672 LWS_VISIBLE LWS_EXTERN int
    3673 lws_b64_encode_string(const char *in, int in_len, char *out, int out_size);
    3683 LWS_VISIBLE LWS_EXTERN int
    3684 lws_b64_decode_string(const char *in, char *out, int out_size);
    3686 
    3687 
    3697 #ifdef LWS_WITH_CGI
    3698 enum lws_enum_stdinouterr {
    3699  LWS_STDIN = 0,
    3700  LWS_STDOUT = 1,
    3701  LWS_STDERR = 2,
    3702 };
    3703 
    3704 enum lws_cgi_hdr_state {
    3705  LCHS_HEADER,
    3706  LCHS_CR1,
    3707  LCHS_LF1,
    3708  LCHS_CR2,
    3709  LCHS_LF2,
    3710  LHCS_PAYLOAD,
    3711  LCHS_SINGLE_0A,
    3712 };
    3713 
    3715  struct lws **stdwsi;
    3716  enum lws_enum_stdinouterr ch;
    3717  unsigned char *data;
    3718  enum lws_cgi_hdr_state hdr_state;
    3719  int len;
    3720 };
    3721 
    3722 
    3732 LWS_VISIBLE LWS_EXTERN int
    3733 lws_cgi(struct lws *wsi, const char * const *exec_array,
    3734  int script_uri_path_len, int timeout_secs,
    3735  const struct lws_protocol_vhost_options *mp_cgienv);
    3736 
    3742 LWS_VISIBLE LWS_EXTERN int
    3743 lws_cgi_write_split_stdout_headers(struct lws *wsi);
    3744 
    3750 LWS_VISIBLE LWS_EXTERN int
    3751 lws_cgi_kill(struct lws *wsi);
    3752 #endif
    3753 
    3755 
    3772 
    3779  lws_filefd_type (*open)(struct lws *wsi, const char *filename,
    3780  unsigned long *filelen, int flags);
    3784  int (*close)(struct lws *wsi, lws_filefd_type fd);
    3786  unsigned long (*seek_cur)(struct lws *wsi, lws_filefd_type fd,
    3787  long offset_from_cur_pos);
    3789  int (*read)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    3790  unsigned char *buf, unsigned long len);
    3792  int (*write)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    3793  unsigned char *buf, unsigned long len);
    3796  /* Add new things just above here ---^
    3797  * This is part of the ABI, don't needlessly break compatibility */
    3798 };
    3799 
    3805 LWS_VISIBLE LWS_EXTERN struct lws_plat_file_ops * LWS_WARN_UNUSED_RESULT
    3806 lws_get_fops(struct lws_context *context);
    3807 
    3816 static LWS_INLINE lws_filefd_type LWS_WARN_UNUSED_RESULT
    3817 lws_plat_file_open(struct lws *wsi, const char *filename,
    3818  unsigned long *filelen, int flags)
    3819 {
    3820  return lws_get_fops(lws_get_context(wsi))->open(wsi, filename,
    3821  filelen, flags);
    3822 }
    3823 
    3830 static LWS_INLINE int
    3831 lws_plat_file_close(struct lws *wsi, lws_filefd_type fd)
    3832 {
    3833  return lws_get_fops(lws_get_context(wsi))->close(wsi, fd);
    3834 }
    3835 
    3843 static LWS_INLINE unsigned long
    3844 lws_plat_file_seek_cur(struct lws *wsi, lws_filefd_type fd, long offset)
    3845 {
    3846  return lws_get_fops(lws_get_context(wsi))->seek_cur(wsi, fd, offset);
    3847 }
    3857 static LWS_INLINE int LWS_WARN_UNUSED_RESULT
    3858 lws_plat_file_read(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    3859  unsigned char *buf, unsigned long len)
    3860 {
    3861  return lws_get_fops(lws_get_context(wsi))->read(wsi, fd, amount, buf,
    3862  len);
    3863 }
    3873 static LWS_INLINE int LWS_WARN_UNUSED_RESULT
    3874 lws_plat_file_write(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    3875  unsigned char *buf, unsigned long len)
    3876 {
    3877  return lws_get_fops(lws_get_context(wsi))->write(wsi, fd, amount, buf,
    3878  len);
    3879 }
    3881 
    3913 #ifdef LWS_WITH_SMTP
    3914 
    3926 };
    3927 
    3929 struct lws_email {
    3930  void *data;
    3932  uv_loop_t *loop;
    3935  char email_smtp_ip[32];
    3936  char email_helo[32];
    3937  char email_from[100];
    3938  char email_to[100];
    3940  unsigned int max_content_size;
    3943  /* Fill all the callbacks before init */
    3944 
    3945  int (*on_next)(struct lws_email *email);
    3950  int (*on_sent)(struct lws_email *email);
    3955  int (*on_get_body)(struct lws_email *email, char *buf, int len);
    3961  /* private things */
    3962  uv_timer_t timeout_email;
    3964  uv_connect_t email_connect_req;
    3965  uv_tcp_t email_client;
    3967  char email_buf[256];
    3968  char *content;
    3969 };
    3970 
    3980 LWS_VISIBLE LWS_EXTERN int
    3981 lws_email_init(struct lws_email *email, uv_loop_t *loop, int max_content);
    3982 
    3991 LWS_VISIBLE LWS_EXTERN void
    3992 lws_email_check(struct lws_email *email);
    4000 LWS_VISIBLE LWS_EXTERN void
    4001 lws_email_destroy(struct lws_email *email);
    4002 
    4003 #endif
    4004 
    4005 
    4006 #ifdef __cplusplus
    4007 }
    4008 #endif
    4009 
    4010 #endif
    LWS_VISIBLE LWS_EXTERN int lws_spa_destroy(struct lws_spa *spa)
    LWS_VISIBLE LWS_EXTERN const char * lws_json_purify(char *escaped, const char *string, int len)
    -
    Definition: libwebsockets.h:3700
    +
    Definition: libwebsockets.h:3714
    size_t rx_buffer_size
    Definition: libwebsockets.h:1199
    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)
    LWS_VISIBLE LWS_EXTERN struct lws_vhost * lws_vhost_get(struct lws *wsi) LWS_WARN_DEPRECATED
    @@ -81,16 +81,16 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    Definition: libwebsockets.h:684
    Definition: libwebsockets.h:812
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_daemonize(const char *_lock_path)
    -
    Definition: libwebsockets.h:1799
    -
    Definition: libwebsockets.h:2991
    -
    Definition: libwebsockets.h:3905
    +
    Definition: libwebsockets.h:1811
    +
    Definition: libwebsockets.h:3005
    +
    Definition: libwebsockets.h:3919
    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)
    Definition: libwebsockets.h:234
    -
    unsigned int auth_mask
    Definition: libwebsockets.h:1834
    -
    Definition: libwebsockets.h:3014
    -
    void * data
    Definition: libwebsockets.h:3916
    -
    const char * uri_replace_from
    Definition: libwebsockets.h:1898
    -
    int(* write)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)
    Definition: libwebsockets.h:3778
    +
    unsigned int auth_mask
    Definition: libwebsockets.h:1846
    +
    Definition: libwebsockets.h:3028
    +
    void * data
    Definition: libwebsockets.h:3930
    +
    const char * uri_replace_from
    Definition: libwebsockets.h:1910
    +
    int(* write)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)
    Definition: libwebsockets.h:3792
    lws_callback_reasons
    Definition: libwebsockets.h:577
    LWS_VISIBLE LWS_EXTERN int lws_hdr_copy_fragment(struct lws *wsi, char *dest, int len, enum lws_token_indexes h, int frag_idx)
    @@ -109,75 +109,76 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    LWS_VISIBLE LWS_EXTERN size_t lws_get_peer_write_allowance(struct lws *wsi)
    Definition: libwebsockets.h:661
    LWS_VISIBLE LWS_EXTERN const char *LWS_WARN_UNUSED_RESULT lws_get_library_version(void)
    -
    int(* on_sent)(struct lws_email *email)
    Definition: libwebsockets.h:3936
    +
    int(* on_sent)(struct lws_email *email)
    Definition: libwebsockets.h:3950
    Definition: libwebsockets.h:1339
    -
    struct lws ** pwsi
    Definition: libwebsockets.h:1905
    +
    struct lws ** pwsi
    Definition: libwebsockets.h:1917
    Definition: libwebsockets.h:695
    -
    const char * path
    Definition: libwebsockets.h:1877
    +
    const char * path
    Definition: libwebsockets.h:1889
    LWS_VISIBLE LWS_EXTERN size_t lws_remaining_packet_payload(struct lws *wsi)
    Definition: libwebsockets.h:496
    Definition: libwebsockets.h:1295
    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)
    -
    time_t email_connect_started
    Definition: libwebsockets.h:3952
    +
    time_t email_connect_started
    Definition: libwebsockets.h:3966
    lws_close_status
    Definition: libwebsockets.h:467
    LWS_VISIBLE LWS_EXTERN int lws_callback_all_protocol(struct lws_context *context, const struct lws_protocols *protocol, int reason)
    Definition: libwebsockets.h:507
    -
    int token_len
    Definition: libwebsockets.h:2323
    +
    int token_len
    Definition: libwebsockets.h:2335
    const struct lws_http_mount * mounts
    Definition: libwebsockets.h:1574
    Definition: libwebsockets.h:836
    LWS_VISIBLE LWS_EXTERN struct lws_context *LWS_WARN_UNUSED_RESULT lws_get_context(const struct lws *wsi)
    -
    const char * value
    Definition: libwebsockets.h:1788
    -
    Definition: libwebsockets.h:2642
    -
    Definition: libwebsockets.h:3910
    +
    const char * value
    Definition: libwebsockets.h:1800
    +
    Definition: libwebsockets.h:2654
    +
    Definition: libwebsockets.h:3924
    const char * username
    Definition: libwebsockets.h:1370
    LWS_VISIBLE LWS_EXTERN struct lws * lws_client_connect_via_info(struct lws_client_connect_info *ccinfo)
    -
    const char * protocol
    Definition: libwebsockets.h:1818
    -
    struct lws ** stdwsi
    Definition: libwebsockets.h:3701
    +
    const char * protocol
    Definition: libwebsockets.h:1830
    +
    struct lws ** stdwsi
    Definition: libwebsockets.h:3715
    LWS_VISIBLE LWS_EXTERN int lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len)
    Definition: libwebsockets.h:782
    LWS_VISIBLE LWS_EXTERN const char * lws_get_mimetype(const char *file, const struct lws_http_mount *m)
    Definition: libwebsockets.h:1341
    -
    int cache_max_age
    Definition: libwebsockets.h:1832
    +
    int cache_max_age
    Definition: libwebsockets.h:1844
    long ssl_options_clear
    Definition: libwebsockets.h:1592
    Definition: libwebsockets.h:675
    Definition: libwebsockets.h:1460
    LWS_VISIBLE LWS_EXTERN void lws_context_destroy(struct lws_context *context)
    Definition: libwebsockets.h:523
    -
    char * start
    Definition: libwebsockets.h:2262
    +
    char * start
    Definition: libwebsockets.h:2274
    LWS_VISIBLE LWS_EXTERN void lws_set_allocator(void *(*realloc)(void *ptr, size_t size))
    lws_callback_function * callback
    Definition: libwebsockets.h:1190
    -
    Definition: libwebsockets.h:2981
    +
    Definition: libwebsockets.h:2995
    LWS_VISIBLE LWS_EXTERN int lws_get_socket_fd(struct lws *wsi)
    Definition: libwebsockets.h:873
    -
    const char * protocol
    Definition: libwebsockets.h:1883
    +
    const char * protocol
    Definition: libwebsockets.h:1895
    Definition: libwebsockets.h:862
    unsigned int pt_serv_buf_size
    Definition: libwebsockets.h:1579
    LWS_VISIBLE LWS_EXTERN struct lws * lws_adopt_socket(struct lws_context *context, lws_sockfd_type accept_fd)
    -
    int len
    Definition: libwebsockets.h:2254
    +
    int len
    Definition: libwebsockets.h:2266
    int ka_time
    Definition: libwebsockets.h:1515
    Definition: libwebsockets.h:1415
    LWS_VISIBLE LWS_EXTERN int lws_callback_on_writable_all_protocol(const struct lws_context *context, const struct lws_protocols *protocol)
    LWS_VISIBLE LWS_EXTERN void lws_set_log_level(int level, void(*log_emit_function)(int level, const char *line))
    +
    unsigned short ws_ping_pong_interval
    Definition: libwebsockets.h:1594
    int count_extensions
    Definition: libwebsockets.h:1300
    -
    Definition: libwebsockets.h:2985
    -
    int port
    Definition: libwebsockets.h:1873
    -
    struct lws_context * context
    Definition: libwebsockets.h:1869
    +
    Definition: libwebsockets.h:2999
    +
    int port
    Definition: libwebsockets.h:1885
    +
    struct lws_context * context
    Definition: libwebsockets.h:1881
    Definition: libwebsockets.h:1347
    -
    int ietf_version_or_minus_one
    Definition: libwebsockets.h:1885
    +
    int ietf_version_or_minus_one
    Definition: libwebsockets.h:1897
    LWS_VISIBLE LWS_EXTERN int lws_callback_all_protocol_vhost(struct lws_vhost *vh, const struct lws_protocols *protocol, int reason)
    -
    Definition: libwebsockets.h:3903
    -
    Definition: libwebsockets.h:1784
    +
    Definition: libwebsockets.h:3917
    +
    Definition: libwebsockets.h:1796
    LWS_VISIBLE LWS_EXTERN int lws_callback_on_writable(struct lws *wsi)
    -
    const char *const * vars
    Definition: libwebsockets.h:2266
    +
    const char *const * vars
    Definition: libwebsockets.h:2278
    Definition: libwebsockets.h:475
    -
    Definition: libwebsockets.h:1868
    +
    Definition: libwebsockets.h:1880
    int lws_extension_callback_function(struct lws_context *context, const struct lws_extension *ext, struct lws *wsi, enum lws_extension_callback_reasons reason, void *user, void *in, size_t len)
    Definition: libwebsockets.h:1090
    int len
    Definition: libwebsockets.h:1026
    -
    Definition: libwebsockets.h:1809
    -
    const char * def
    Definition: libwebsockets.h:1816
    +
    Definition: libwebsockets.h:1821
    +
    const char * def
    Definition: libwebsockets.h:1828
    Definition: libwebsockets.h:636
    Definition: libwebsockets.h:1427
    lws_context_options
    Definition: libwebsockets.h:1398
    @@ -186,28 +187,28 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    Definition: libwebsockets.h:1433
    Definition: libwebsockets.h:802
    const char * option_name
    Definition: libwebsockets.h:1023
    -
    Definition: libwebsockets.h:1797
    +
    Definition: libwebsockets.h:1809
    lws_sockfd_type fd
    Definition: libwebsockets.h:445
    const char * ssl_private_key_password
    Definition: libwebsockets.h:1483
    short events
    Definition: libwebsockets.h:414
    Definition: libwebsockets.h:1308
    const struct lws_extension * extensions
    Definition: libwebsockets.h:1299
    LWS_VISIBLE LWS_EXTERN void lws_set_timeout(struct lws *wsi, enum pending_timeout reason, int secs)
    -
    void * userdata
    Definition: libwebsockets.h:1887
    +
    void * userdata
    Definition: libwebsockets.h:1899
    Definition: libwebsockets.h:633
    Definition: libwebsockets.h:820
    LWS_VISIBLE LWS_EXTERN int lws_service_tsi(struct lws_context *context, int timeout_ms, int tsi)
    -
    unsigned char * data
    Definition: libwebsockets.h:3703
    -
    const struct lws_protocol_vhost_options * extra_mimetypes
    Definition: libwebsockets.h:1825
    +
    unsigned char * data
    Definition: libwebsockets.h:3717
    +
    const struct lws_protocol_vhost_options * extra_mimetypes
    Definition: libwebsockets.h:1837
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_finalize_http_header(struct lws *wsi, unsigned char **p, unsigned char *end)
    Definition: libwebsockets.h:626
    LWS_VISIBLE LWS_EXTERN const char * lws_urlencode(char *escaped, const char *string, int len)
    Definition: libwebsockets.h:707
    -
    uv_loop_t * loop
    Definition: libwebsockets.h:3918
    +
    uv_loop_t * loop
    Definition: libwebsockets.h:3932
    Definition: libwebsockets.h:805
    Definition: libwebsockets.h:72
    -
    Definition: libwebsockets.h:3017
    -
    int pos
    Definition: libwebsockets.h:2264
    +
    Definition: libwebsockets.h:3031
    +
    int pos
    Definition: libwebsockets.h:2276
    struct lws_plugin * list
    Definition: libwebsockets.h:1309
    LWS_VISIBLE LWS_EXTERN struct lws *LWS_WARN_UNUSED_RESULT lws_client_connect_extended(struct lws_context *clients, const char *address, int port, int ssl_connection, const char *path, const char *host, const char *origin, const char *protocol, int ietf_version_or_minus_one, void *userdata) LWS_WARN_DEPRECATED
    short max_http_header_data
    Definition: libwebsockets.h:1535
    @@ -220,26 +221,26 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    Definition: libwebsockets.h:1002
    int ka_probes
    Definition: libwebsockets.h:1518
    void onError(Socket *s, socket_error_t err)
    -
    const char * origin
    Definition: libwebsockets.h:1881
    +
    const char * origin
    Definition: libwebsockets.h:1893
    SHORT revents
    Definition: libwebsockets.h:400
    -
    const char * method
    Definition: libwebsockets.h:1891
    +
    const char * method
    Definition: libwebsockets.h:1903
    LWS_VISIBLE LWS_EXTERN const char * lws_spa_get_string(struct lws_spa *spa, int n)
    Definition: libwebsockets.h:1096
    LWS_VISIBLE LWS_EXTERN int lws_callback_on_writable_all_protocol_vhost(const struct lws_vhost *vhost, const struct lws_protocols *protocol)
    Definition: libwebsockets.h:842
    -
    const struct lws_extension * client_exts
    Definition: libwebsockets.h:1889
    -
    unsigned char origin_protocol
    Definition: libwebsockets.h:1841
    +
    const struct lws_extension * client_exts
    Definition: libwebsockets.h:1901
    +
    unsigned char origin_protocol
    Definition: libwebsockets.h:1853
    const char * log_filepath
    Definition: libwebsockets.h:1571
    Definition: libwebsockets.h:682
    -
    unsigned int max_content_size
    Definition: libwebsockets.h:3926
    +
    unsigned int max_content_size
    Definition: libwebsockets.h:3940
    int option_index
    Definition: libwebsockets.h:1024
    LWS_VISIBLE LWS_EXTERN struct lws *LWS_WARN_UNUSED_RESULT lws_get_child(const struct lws *wsi)
    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)
    Definition: libwebsockets.h:678
    -
    const char * uri_replace_to
    Definition: libwebsockets.h:1901
    -
    struct lws * parent_wsi
    Definition: libwebsockets.h:1894
    +
    const char * uri_replace_to
    Definition: libwebsockets.h:1913
    +
    struct lws * parent_wsi
    Definition: libwebsockets.h:1906
    LWS_VISIBLE LWS_EXTERN int lws_b64_decode_string(const char *in, char *out, int out_size)
    -
    enum lwsgs_smtp_states estate
    Definition: libwebsockets.h:3949
    +
    enum lwsgs_smtp_states estate
    Definition: libwebsockets.h:3963
    LWS_VISIBLE LWS_EXTERN int lws_spa_finalize(struct lws_spa *spa)
    Definition: libwebsockets.h:578
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_get_count_threads(struct lws_context *context)
    @@ -247,29 +248,29 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    char name[64]
    Definition: libwebsockets.h:1315
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_hdr_fragment_length(struct lws *wsi, enum lws_token_indexes h, int frag_idx)
    LWS_VISIBLE LWS_EXTERN int lws_cgi_kill(struct lws *wsi)
    -
    char email_buf[256]
    Definition: libwebsockets.h:3953
    +
    char email_buf[256]
    Definition: libwebsockets.h:3967
    LWS_VISIBLE LWS_EXTERN int lws_is_ssl(struct lws *wsi)
    Definition: libwebsockets.h:1404
    -
    int(* close)(struct lws *wsi, lws_filefd_type fd)
    Definition: libwebsockets.h:3770
    +
    int(* close)(struct lws *wsi, lws_filefd_type fd)
    Definition: libwebsockets.h:3784
    uv_lib_t lib
    Definition: libwebsockets.h:1311
    x509_crt certificate
    Definition: libwebsockets.h:236
    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)
    -
    Definition: libwebsockets.h:3904
    +
    Definition: libwebsockets.h:3918
    LWS_VISIBLE LWS_EXTERN int lws_is_cgi(struct lws *wsi)
    -
    int ssl_connection
    Definition: libwebsockets.h:1875
    +
    int ssl_connection
    Definition: libwebsockets.h:1887
    Definition: libwebsockets.h:1363
    SSL_CTX * provided_client_ssl_ctx
    Definition: libwebsockets.h:1526
    LWS_VISIBLE LWS_EXTERN int lws_rx_flow_control(struct lws *wsi, int enable)
    -
    Definition: libwebsockets.h:2252
    +
    Definition: libwebsockets.h:2264
    LWS_VISIBLE LWS_EXTERN struct lws_plat_file_ops *LWS_WARN_UNUSED_RESULT lws_get_fops(struct lws_context *context)
    Definition: libwebsockets.h:444
    -
    const struct lws_protocol_vhost_options * cgienv
    Definition: libwebsockets.h:1821
    -
    const char * name
    Definition: libwebsockets.h:1787
    -
    unsigned char mountpoint_len
    Definition: libwebsockets.h:1842
    -
    Definition: libwebsockets.h:2988
    +
    const struct lws_protocol_vhost_options * cgienv
    Definition: libwebsockets.h:1833
    +
    const char * name
    Definition: libwebsockets.h:1799
    +
    unsigned char mountpoint_len
    Definition: libwebsockets.h:1854
    +
    Definition: libwebsockets.h:3002
    Definition: libwebsockets.h:1422
    lws_sockfd_type fd
    Definition: libwebsockets.h:398
    -
    Definition: libwebsockets.h:1798
    +
    Definition: libwebsockets.h:1810
    LWS_VISIBLE LWS_EXTERN int lws_is_final_fragment(struct lws *wsi)
    const struct lws_extension * extensions
    Definition: libwebsockets.h:1477
    Definition: libwebsockets.h:1406
    @@ -284,14 +285,14 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    const char * start
    Definition: libwebsockets.h:1025
    const char * ssl_cipher_list
    Definition: libwebsockets.h:1497
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_header_by_name(struct lws *wsi, const unsigned char *name, const unsigned char *value, int length, unsigned char **p, unsigned char *end)
    -
    const char * mountpoint
    Definition: libwebsockets.h:1812
    +
    const char * mountpoint
    Definition: libwebsockets.h:1824
    const char * http_proxy_address
    Definition: libwebsockets.h:1501
    rsa_context key
    Definition: libwebsockets.h:237
    const char * ssl_cert_filepath
    Definition: libwebsockets.h:1485
    const char * ecdh_curve
    Definition: libwebsockets.h:1556
    -
    int cgi_timeout
    Definition: libwebsockets.h:1830
    -
    Definition: libwebsockets.h:1800
    +
    int cgi_timeout
    Definition: libwebsockets.h:1842
    +
    Definition: libwebsockets.h:1812
    Definition: libwebsockets.h:1348
    Definition: libwebsockets.h:412
    Definition: libwebsockets.h:501
    @@ -308,15 +309,15 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    LWS_VISIBLE LWS_EXTERN int lwsl_timestamp(int level, char *p, int len)
    Definition: libwebsockets.h:918
    Definition: libwebsockets.h:1443
    -
    uv_timer_t timeout_email
    Definition: libwebsockets.h:3948
    +
    uv_timer_t timeout_email
    Definition: libwebsockets.h:3962
    Definition: libwebsockets.h:1413
    short max_http_header_pool
    Definition: libwebsockets.h:1538
    LWS_VISIBLE LWS_EXTERN int lws_chunked_html_process(struct lws_process_html_args *args, struct lws_process_html_state *s)
    -
    char * p
    Definition: libwebsockets.h:2253
    +
    char * p
    Definition: libwebsockets.h:2265
    x509_crt ca
    Definition: libwebsockets.h:235
    size_t per_session_data_size
    Definition: libwebsockets.h:1194
    Definition: libwebsockets.h:485
    -
    lwsgs_smtp_states
    Definition: libwebsockets.h:3902
    +
    lwsgs_smtp_states
    Definition: libwebsockets.h:3916
    Definition: libwebsockets.h:1425
    Definition: libwebsockets.h:758
    Definition: libwebsockets.h:644
    @@ -327,14 +328,14 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    const char * email
    Definition: libwebsockets.h:1371
    LWS_VISIBLE LWS_EXTERN int lws_get_random(struct lws_context *context, void *buf, int len)
    Definition: libwebsockets.h:472
    -
    uv_connect_t email_connect_req
    Definition: libwebsockets.h:3950
    +
    uv_connect_t email_connect_req
    Definition: libwebsockets.h:3964
    const char * server_string
    Definition: libwebsockets.h:1576
    Definition: libwebsockets.h:1436
    SHORT events
    Definition: libwebsockets.h:399
    Definition: libwebsockets.h:649
    Definition: libwebsockets.h:1420
    const char * vhost_name
    Definition: libwebsockets.h:1558
    -
    Definition: libwebsockets.h:1801
    +
    Definition: libwebsockets.h:1813
    LWS_VISIBLE LWS_EXTERN const struct lws_protocols * lws_get_protocol(struct lws *wsi)
    Definition: libwebsockets.h:1346
    Definition: libwebsockets.h:1368
    @@ -345,12 +346,12 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    int ka_interval
    Definition: libwebsockets.h:1522
    Definition: libwebsockets.h:1345
    int uid
    Definition: libwebsockets.h:1508
    -
    Definition: libwebsockets.h:2644
    +
    Definition: libwebsockets.h:2656
    LWS_VISIBLE LWS_EXTERN int lws_b64_encode_string(const char *in, int in_len, char *out, int out_size)
    LWS_VISIBLE LWS_EXTERN void * lws_context_user(struct lws_context *context)
    const char * name
    Definition: libwebsockets.h:1187
    LWS_VISIBLE LWS_EXTERN int lws_init_vhost_client_ssl(const struct lws_context_creation_info *info, struct lws_vhost *vhost)
    -
    Definition: libwebsockets.h:3908
    +
    Definition: libwebsockets.h:3922
    unsigned int http_proxy_port
    Definition: libwebsockets.h:1504
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_partial_buffered(struct lws *wsi)
    unsigned int timeout_secs
    Definition: libwebsockets.h:1551
    @@ -358,43 +359,43 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_parse_uri(char *p, const char **prot, const char **ads, int *port, const char **path)
    unsigned int options
    Definition: libwebsockets.h:1510
    LWS_VISIBLE LWS_EXTERN int lws_spa_get_length(struct lws_spa *spa, int n)
    -
    const struct lws_protocol_vhost_options * options
    Definition: libwebsockets.h:1786
    +
    const struct lws_protocol_vhost_options * options
    Definition: libwebsockets.h:1798
    int prev_events
    Definition: libwebsockets.h:447
    int keepalive_timeout
    Definition: libwebsockets.h:1568
    Definition: libwebsockets.h:1352
    Definition: libwebsockets.h:1013
    -
    Definition: libwebsockets.h:2441
    +
    Definition: libwebsockets.h:2453
    LWS_VISIBLE LWS_EXTERN int lws_write(struct lws *wsi, unsigned char *buf, size_t len, enum lws_write_protocol protocol)
    const struct lws_protocol_vhost_options * pvo
    Definition: libwebsockets.h:1565
    -
    const char * host
    Definition: libwebsockets.h:1879
    +
    const char * host
    Definition: libwebsockets.h:1891
    Definition: libwebsockets.h:1022
    Definition: libwebsockets.h:511
    LWS_VISIBLE LWS_EXTERN const struct lws_protocols * lws_vhost_name_to_protocol(struct lws_vhost *vh, const char *name)
    -
    int len
    Definition: libwebsockets.h:3705
    -
    struct lws_http_mount * mount_next
    Definition: libwebsockets.h:1810
    +
    int len
    Definition: libwebsockets.h:3719
    +
    struct lws_http_mount * mount_next
    Definition: libwebsockets.h:1822
    LWS_VISIBLE LWS_EXTERN const char * lws_get_urlarg_by_name(struct lws *wsi, const char *name, char *buf, int len)
    const char * iface
    Definition: libwebsockets.h:1466
    -
    Definition: libwebsockets.h:3764
    +
    Definition: libwebsockets.h:3778
    LWS_VISIBLE LWS_EXTERN void lwsl_hexdump(void *buf, size_t len)
    -
    lws_spa_fileupload_states
    Definition: libwebsockets.h:2639
    +
    lws_spa_fileupload_states
    Definition: libwebsockets.h:2651
    LWS_VISIBLE LWS_EXTERN int lws_service_fd(struct lws_context *context, struct lws_pollfd *pollfd)
    LWS_VISIBLE LWS_EXTERN int lws_callback_vhost_protocols(struct lws *wsi, int reason, void *in, int len)
    Definition: libwebsockets.h:469
    Definition: libwebsockets.h:478
    LWS_VISIBLE LWS_EXTERN const char * lws_sql_purify(char *escaped, const char *string, int len)
    -
    uv_tcp_t email_client
    Definition: libwebsockets.h:3951
    +
    uv_tcp_t email_client
    Definition: libwebsockets.h:3965
    LWS_VISIBLE LWS_EXTERN int lws_json_dump_context(const struct lws_context *context, char *buf, int len)
    Definition: libwebsockets.h:397
    Definition: libwebsockets.h:582
    -
    lws_filefd_type(* open)(struct lws *wsi, const char *filename, unsigned long *filelen, int flags)
    Definition: libwebsockets.h:3765
    -
    lws_write_protocol
    Definition: libwebsockets.h:2980
    +
    lws_filefd_type(* open)(struct lws *wsi, const char *filename, unsigned long *filelen, int flags)
    Definition: libwebsockets.h:3779
    +
    lws_write_protocol
    Definition: libwebsockets.h:2994
    const char * client_offer
    Definition: libwebsockets.h:1099
    -
    int(* read)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)
    Definition: libwebsockets.h:3775
    +
    int(* read)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)
    Definition: libwebsockets.h:3789
    LWS_VISIBLE LWS_EXTERN void lws_cancel_service(struct lws_context *context)
    -
    Definition: libwebsockets.h:2640
    +
    Definition: libwebsockets.h:2652
    Definition: libwebsockets.h:483
    -
    const char * origin
    Definition: libwebsockets.h:1814
    +
    const char * origin
    Definition: libwebsockets.h:1826
    const char * name
    Definition: libwebsockets.h:1014
    LWS_VISIBLE LWS_EXTERN int lws_serve_http_file(struct lws *wsi, const char *file, const char *content_type, const char *other_headers, int other_headers_len)
    LWS_VISIBLE LWS_EXTERN void lws_email_check(struct lws_email *email)
    @@ -403,7 +404,7 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    LWS_VISIBLE LWS_EXTERN int lws_hdr_copy(struct lws *wsi, char *dest, int len, enum lws_token_indexes h)
    Definition: libwebsockets.h:659
    const char * name
    Definition: libwebsockets.h:1097
    -
    Definition: libwebsockets.h:3907
    +
    Definition: libwebsockets.h:3921
    short revents
    Definition: libwebsockets.h:415
    lws_extension_callback_function * callback
    Definition: libwebsockets.h:1098
    long ssl_options_set
    Definition: libwebsockets.h:1590
    @@ -411,65 +412,65 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    LWS_VISIBLE LWS_EXTERN const struct lws_protocols * lws_protocol_get(struct lws *wsi) LWS_WARN_DEPRECATED
    unsigned int mask
    Definition: libwebsockets.h:1356
    LWS_VISIBLE LWS_EXTERN int lws_email_init(struct lws_email *email, uv_loop_t *loop, int max_content)
    -
    lws_mount_protocols
    Definition: libwebsockets.h:1795
    +
    lws_mount_protocols
    Definition: libwebsockets.h:1807
    LWS_EXTERN int lws_extension_callback_pm_deflate(struct lws_context *context, const struct lws_extension *ext, struct lws *wsi, enum lws_extension_callback_reasons reason, void *user, void *in, size_t len)
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_header_content_length(struct lws *wsi, unsigned long content_length, unsigned char **p, unsigned char *end)
    lws_sockfd_type fd
    Definition: libwebsockets.h:413
    unsigned int max_http_header_data2
    Definition: libwebsockets.h:1585
    -
    Definition: libwebsockets.h:1796
    +
    Definition: libwebsockets.h:1808
    LWS_VISIBLE LWS_EXTERN int lws_return_http_status(struct lws *wsi, unsigned int code, const char *html_body)
    LWS_EXTERN LWS_VISIBLE struct lws_vhost * lws_create_vhost(struct lws_context *context, struct lws_context_creation_info *info)
    -
    const struct lws_protocol_vhost_options * interpret
    Definition: libwebsockets.h:1827
    +
    const struct lws_protocol_vhost_options * interpret
    Definition: libwebsockets.h:1839
    LWS_VISIBLE LWS_EXTERN int lws_service(struct lws_context *context, int timeout_ms)
    Definition: libwebsockets.h:1418
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_http_transaction_completed(struct lws *wsi)
    -
    int count_vars
    Definition: libwebsockets.h:2267
    +
    int count_vars
    Definition: libwebsockets.h:2279
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_header_status(struct lws *wsi, unsigned int code, unsigned char **p, unsigned char *end)
    -
    Definition: libwebsockets.h:2321
    +
    Definition: libwebsockets.h:2333
    LWS_VISIBLE LWS_EXTERN struct lws_context * lws_create_context(struct lws_context_creation_info *info)
    Definition: libwebsockets.h:638
    -
    void * data
    Definition: libwebsockets.h:2265
    -
    char * content
    Definition: libwebsockets.h:3954
    +
    void * data
    Definition: libwebsockets.h:2277
    +
    char * content
    Definition: libwebsockets.h:3968
    LWS_VISIBLE LWS_EXTERN int lws_interface_to_sa(int ipv6, const char *ifname, struct sockaddr_in *addr, size_t addrlen)
    const struct lws_token_limits * token_limits
    Definition: libwebsockets.h:1480
    -
    lws_process_html_state_cb replace
    Definition: libwebsockets.h:2269
    -
    Definition: libwebsockets.h:3915
    -
    const char * address
    Definition: libwebsockets.h:1871
    -
    unsigned long(* seek_cur)(struct lws *wsi, lws_filefd_type fd, long offset_from_cur_pos)
    Definition: libwebsockets.h:3772
    +
    lws_process_html_state_cb replace
    Definition: libwebsockets.h:2281
    +
    Definition: libwebsockets.h:3929
    +
    const char * address
    Definition: libwebsockets.h:1883
    +
    unsigned long(* seek_cur)(struct lws *wsi, lws_filefd_type fd, long offset_from_cur_pos)
    Definition: libwebsockets.h:3786
    void * user
    Definition: libwebsockets.h:1215
    int events
    Definition: libwebsockets.h:446
    -
    int(* on_get_body)(struct lws_email *email, char *buf, int len)
    Definition: libwebsockets.h:3941
    -
    Definition: libwebsockets.h:1802
    +
    int(* on_get_body)(struct lws_email *email, char *buf, int len)
    Definition: libwebsockets.h:3955
    +
    Definition: libwebsockets.h:1814
    void * user
    Definition: libwebsockets.h:1512
    -
    Definition: libwebsockets.h:3911
    -
    Definition: libwebsockets.h:3003
    -
    char * token
    Definition: libwebsockets.h:2322
    +
    Definition: libwebsockets.h:3925
    +
    Definition: libwebsockets.h:3017
    +
    char * token
    Definition: libwebsockets.h:2334
    LWS_VISIBLE LWS_EXTERN void * lws_protocol_vh_priv_get(struct lws_vhost *vhost, const struct lws_protocols *prot)
    int count_protocols
    Definition: libwebsockets.h:1298
    void * l
    Definition: libwebsockets.h:1313
    const char * ssl_private_key_filepath
    Definition: libwebsockets.h:1489
    -
    int max_len
    Definition: libwebsockets.h:2255
    +
    int max_len
    Definition: libwebsockets.h:2267
    Definition: libwebsockets.h:640
    -
    const struct lws_protocol_vhost_options * next
    Definition: libwebsockets.h:1785
    +
    const struct lws_protocol_vhost_options * next
    Definition: libwebsockets.h:1797
    Definition: libwebsockets.h:651
    LWS_VISIBLE LWS_EXTERN void lws_rx_flow_allow_all_protocol(const struct lws_context *context, const struct lws_protocols *protocol)
    -
    Definition: libwebsockets.h:2261
    +
    Definition: libwebsockets.h:2273
    LWS_VISIBLE LWS_EXTERN const char *LWS_WARN_UNUSED_RESULT lws_canonical_hostname(struct lws_context *context)
    Definition: libwebsockets.h:850
    const char * ssl_ca_filepath
    Definition: libwebsockets.h:1495
    -
    lws_client_connect_ssl_connection_flags
    Definition: libwebsockets.h:1859
    +
    lws_client_connect_ssl_connection_flags
    Definition: libwebsockets.h:1871
    int gid
    Definition: libwebsockets.h:1506
    -
    struct lws_vhost * vhost
    Definition: libwebsockets.h:1903
    +
    struct lws_vhost * vhost
    Definition: libwebsockets.h:1915
    int lws_callback_function(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len)
    Definition: libwebsockets.h:948
    LWS_VISIBLE LWS_EXTERN void lws_cancel_service_pt(struct lws *wsi)
    Definition: libwebsockets.h:1438
    Definition: libwebsockets.h:519
    -
    Definition: libwebsockets.h:3906
    +
    Definition: libwebsockets.h:3920
    unsigned int api_magic
    Definition: libwebsockets.h:1296
    Definition: libwebsockets.h:1441
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_send_pipe_choked(struct lws *wsi)
    -
    Definition: libwebsockets.h:3909
    -
    int(* lws_spa_fileupload_cb)(void *data, const char *name, const char *filename, char *buf, int len, enum lws_spa_fileupload_states state)
    Definition: libwebsockets.h:2661
    +
    Definition: libwebsockets.h:3923
    +
    int(* lws_spa_fileupload_cb)(void *data, const char *name, const char *filename, char *buf, int len, enum lws_spa_fileupload_states state)
    Definition: libwebsockets.h:2673
    diff --git a/doc/html/md_README.lwsws.html b/doc/html/md_README.lwsws.html index c46ef8a9..86223ae5 100644 --- a/doc/html/md_README.lwsws.html +++ b/doc/html/md_README.lwsws.html @@ -81,7 +81,7 @@ Lwsws Configuration
  • There's also a single substitution, if a string contains "_lws_ddir_", then that is replaced with the LWS install data directory path, eg, "/usr/share" or whatever was set when LWS was built + installed. That lets you refer to installed paths without having to change the config if your install path was different.
  • There is a single file intended for global settings

    -

    /etc/lwsws/conf

    1 # these are the server global settings
    2 # stuff related to vhosts should go in one
    3 # file per vhost in ../conf.d/
    4 
    5 {
    6  "global": {
    7  "uid": "48", # apache user
    8  "gid": "48", # apache user
    9  "count-threads": "1",
    10  "server-string": "myserver v1", # returned in http headers
    11  "init-ssl": "yes"
    12  }
    13 }

    and a config directory intended to take one file per vhost

    +

    /etc/lwsws/conf

    1 # these are the server global settings
    2 # stuff related to vhosts should go in one
    3 # file per vhost in ../conf.d/
    4 
    5 {
    6  "global": {
    7  "uid": "48", # apache user
    8  "gid": "48", # apache user
    9  "count-threads": "1",
    10  "server-string": "myserver v1", # returned in http headers
    11  "ws-pingpong-secs": "200", # confirm idle established ws connections this often
    12  "init-ssl": "yes"
    13  }
    14 }

    and a config directory intended to take one file per vhost

    /etc/lwsws/conf.d/warmcat.com

    1 {
    2  "vhosts": [{
    3  "name": "warmcat.com",
    4  "port": "443",
    5  "interface": "eth0", # optional
    6  "host-ssl-key": "/etc/pki/tls/private/warmcat.com.key", # if given enable ssl
    7  "host-ssl-cert": "/etc/pki/tls/certs/warmcat.com.crt",
    8  "host-ssl-ca": "/etc/pki/tls/certs/warmcat.com.cer",
    9  "mounts": [{ # autoserve
    10  "mountpoint": "/",
    11  "origin": "file:///var/www/warmcat.com",
    12  "default": "index.html"
    13  }]
    14  }]
    15 }

    To get started quickly, an example config reproducing the old test server on port 7681, non-SSL is provided. To set it up

    1 # mkdir -p /etc/lwsws/conf.d /var/log/lwsws
    2 # cp ./lwsws/etc-lwsws-conf-EXAMPLE /etc/lwsws/conf
    3 # cp ./lwsws/etc-lwsws-conf.d-localhost-EXAMPLE /etc/lwsws/conf.d/test-server
    4 # sudo lwsws

    Lwsws Vhosts

    One server can run many vhosts, where SSL is in use SNI is used to match the connection to a vhost and its vhost-specific SSL keys during SSL negotiation.

    diff --git a/doc/html/navtreedata.js b/doc/html/navtreedata.js index 482fae4d..1113c369 100644 --- a/doc/html/navtreedata.js +++ b/doc/html/navtreedata.js @@ -134,8 +134,8 @@ var NAVTREEINDEX = "annotated.html", "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5ac962efd35abf6c402f9fb14aa14f5016", "group__sha.html#ga7b09ab74646266f0b555103b3bb8dfe5", -"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedbac8f5f992c6615324108cdf931da903be", -"structlws__polarssl__context.html#a919c33af37aab170f828d954de1fa270" +"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedba60ac587febc583475c185e1409a0210c", +"structlws__plugin__capability.html#ae38f7cf1246b9ca3af3cbf9d46b7090f" ]; var SYNCONMSG = 'click to disable panel synchronisation'; diff --git a/doc/html/navtreeindex0.js b/doc/html/navtreeindex0.js index 1d194346..04cf1366 100644 --- a/doc/html/navtreeindex0.js +++ b/doc/html/navtreeindex0.js @@ -204,8 +204,8 @@ var NAVTREEINDEX0 = "group__context-and-vhost.html":[9,4], "group__context-and-vhost.html#ga06e77ce2916f8bc9826ef8d9d68e3932":[9,4,8], "group__context-and-vhost.html#ga06e77ce2916f8bc9826ef8d9d68e3932":[11,0,0,0,94], -"group__context-and-vhost.html#ga0c54c667ccd9b8b3dddcd123ca72f87c":[11,0,0,0,66], "group__context-and-vhost.html#ga0c54c667ccd9b8b3dddcd123ca72f87c":[9,4,7], +"group__context-and-vhost.html#ga0c54c667ccd9b8b3dddcd123ca72f87c":[11,0,0,0,66], "group__context-and-vhost.html#ga341064721add2618ae1b29717493a212":[11,0,0,0,158], "group__context-and-vhost.html#ga341064721add2618ae1b29717493a212":[9,4,14], "group__context-and-vhost.html#ga41c2d763f78cc248df3b9f8645dbd2a5":[11,0,0,0,23], @@ -214,16 +214,16 @@ var NAVTREEINDEX0 = "group__context-and-vhost.html#ga7e9d5405547a457d86e0b4f0ae2bb1c4":[9,4,11], "group__context-and-vhost.html#ga8db03e19a372e34ac25cf21af894a02c":[11,0,0,0,150], "group__context-and-vhost.html#ga8db03e19a372e34ac25cf21af894a02c":[9,4,12], -"group__context-and-vhost.html#ga8ee0314028755f1ddfa9428e09b4fddb":[9,4,4], "group__context-and-vhost.html#ga8ee0314028755f1ddfa9428e09b4fddb":[11,0,0,0,63], +"group__context-and-vhost.html#ga8ee0314028755f1ddfa9428e09b4fddb":[9,4,4], "group__context-and-vhost.html#ga94e6cc2223c4eec316b13bcebc3628b6":[9,4,10], "group__context-and-vhost.html#ga94e6cc2223c4eec316b13bcebc3628b6":[11,0,0,0,108], "group__context-and-vhost.html#ga98d88c9080fd89c37114363a6474ea73":[11,0,0,0,157], "group__context-and-vhost.html#ga98d88c9080fd89c37114363a6474ea73":[9,4,13], "group__context-and-vhost.html#gae2134657cdd2ea7a59e13ad314e4c50d":[9,4,9], "group__context-and-vhost.html#gae2134657cdd2ea7a59e13ad314e4c50d":[11,0,0,0,107], -"group__context-and-vhost.html#gaeb12f934bfd178bd2132a9e73fc641da":[11,0,0,0,64], "group__context-and-vhost.html#gaeb12f934bfd178bd2132a9e73fc641da":[9,4,5], +"group__context-and-vhost.html#gaeb12f934bfd178bd2132a9e73fc641da":[11,0,0,0,64], "group__context-and-vhost.html#gaf2fff58562caab7510c41eeac85a8648":[11,0,0,0,65], "group__context-and-vhost.html#gaf2fff58562caab7510c41eeac85a8648":[9,4,6], "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a1b2f8bde0f62adc7ebe81b2043f34c0c":[11,0,0,0,23,8], diff --git a/doc/html/navtreeindex1.js b/doc/html/navtreeindex1.js index 524da74a..476f0200 100644 --- a/doc/html/navtreeindex1.js +++ b/doc/html/navtreeindex1.js @@ -189,8 +189,8 @@ var NAVTREEINDEX1 = "group__misc.html#ga8930fe36a3f3eefe4a6a4fd499d8e899":[11,0,0,0,85], "group__misc.html#gaa194584fff9698f3b280658f770ccd0f":[11,0,0,0,153], "group__misc.html#gaa194584fff9698f3b280658f770ccd0f":[9,8,10], -"group__misc.html#gab321ed812f46f6dc7ef9e3ca6f00cf1b":[9,8,9], "group__misc.html#gab321ed812f46f6dc7ef9e3ca6f00cf1b":[11,0,0,0,130], +"group__misc.html#gab321ed812f46f6dc7ef9e3ca6f00cf1b":[9,8,9], "group__misc.html#gac6abfc0b2bd5b2f09281a4432bb2f5f0":[9,8,4], "group__misc.html#gac6abfc0b2bd5b2f09281a4432bb2f5f0":[11,0,0,0,83], "group__misc.html#gacae4d7b6a8d22e4c2d82ff8b12c1e234":[9,8,1], @@ -218,8 +218,8 @@ var NAVTREEINDEX1 = "group__sending-data.html#gafd5fdd285a0e25ba7e3e1051deec1001":[9,13,1], "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da10047eb05b5e1c298151dc47a5b44826":[9,13,0,2], "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da10047eb05b5e1c298151dc47a5b44826":[11,0,0,0,32,2], -"group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da115440f272a5d55518adfc8099acfee3":[9,13,0,5], "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da115440f272a5d55518adfc8099acfee3":[11,0,0,0,32,8], +"group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da115440f272a5d55518adfc8099acfee3":[9,13,0,5], "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da220d8e8652d9b97fb66e476e2a60ffce":[9,13,0,6], "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da220d8e8652d9b97fb66e476e2a60ffce":[11,0,0,0,32,9], "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da6e556322ff8f205bf311608f7f6e6559":[11,0,0,0,32,4], @@ -234,18 +234,18 @@ var NAVTREEINDEX1 = "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dafe5a38e940ce56708ac814627e9c0917":[9,13,0,4], "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dafe5a38e940ce56708ac814627e9c0917":[11,0,0,0,32,7], "group__service.html":[9,0], -"group__service.html#ga29c246707997ab7a466aa709aecd2d7b":[11,0,0,0,53], "group__service.html#ga29c246707997ab7a466aa709aecd2d7b":[9,0,1], +"group__service.html#ga29c246707997ab7a466aa709aecd2d7b":[11,0,0,0,53], "group__service.html#ga53e3d0801dfda7960a7249dd559e68a2":[9,0,0], "group__service.html#ga53e3d0801dfda7960a7249dd559e68a2":[11,0,0,0,52], -"group__service.html#ga9b3cc4473fd8848e5bbee7f310712939":[9,0,5], "group__service.html#ga9b3cc4473fd8848e5bbee7f310712939":[11,0,0,0,129], +"group__service.html#ga9b3cc4473fd8848e5bbee7f310712939":[9,0,5], "group__service.html#gad82efa5466d14a9f05aa06416375b28d":[9,0,3], "group__service.html#gad82efa5466d14a9f05aa06416375b28d":[11,0,0,0,127], -"group__service.html#gaebf426eda371ba23642fc11d8e0ace6b":[9,0,4], "group__service.html#gaebf426eda371ba23642fc11d8e0ace6b":[11,0,0,0,128], -"group__service.html#gaf95bd0c663d6516a0c80047d9b1167a8":[9,0,2], +"group__service.html#gaebf426eda371ba23642fc11d8e0ace6b":[9,0,4], "group__service.html#gaf95bd0c663d6516a0c80047d9b1167a8":[11,0,0,0,126], +"group__service.html#gaf95bd0c663d6516a0c80047d9b1167a8":[9,0,2], "group__sha.html":[9,11], "group__sha.html#ga66316e6a5a0644a09d5a10e919dfdd8d":[9,11,0], "group__sha.html#ga66316e6a5a0644a09d5a10e919dfdd8d":[11,0,0,0,44], diff --git a/doc/html/navtreeindex2.js b/doc/html/navtreeindex2.js index 90becfce..25f413bd 100644 --- a/doc/html/navtreeindex2.js +++ b/doc/html/navtreeindex2.js @@ -1,11 +1,11 @@ var NAVTREEINDEX2 = { "group__sha.html#ga7b09ab74646266f0b555103b3bb8dfe5":[9,11,2], -"group__sha.html#gaf39765e4a3b413efb65e4698b2ec3575":[9,11,1], "group__sha.html#gaf39765e4a3b413efb65e4698b2ec3575":[11,0,0,0,45], +"group__sha.html#gaf39765e4a3b413efb65e4698b2ec3575":[9,11,1], "group__smtp.html":[9,14], -"group__smtp.html#ga116be79bf44f9dc2a97f46e051fe4dc0":[9,14,1], "group__smtp.html#ga116be79bf44f9dc2a97f46e051fe4dc0":[11,0,0,0,34], +"group__smtp.html#ga116be79bf44f9dc2a97f46e051fe4dc0":[9,14,1], "group__smtp.html#ga25298a5afc1074e13b2d5711a86432b2":[9,14,3], "group__smtp.html#ga25298a5afc1074e13b2d5711a86432b2":[11,0,0,0,69], "group__smtp.html#ga5e535e346d92a9daf00be33abf79d4eb":[9,14,2], @@ -14,27 +14,27 @@ var NAVTREEINDEX2 = "group__smtp.html#ga77fc9b56a1bb39484844981ec375fc29":[9,14,4], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad":[9,14,1,3], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad":[11,0,0,0,34,3], -"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c":[11,0,0,0,34,0], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c":[9,14,1,0], -"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5":[11,0,0,0,34,8], +"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c":[11,0,0,0,34,0], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5":[9,14,1,8], +"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5":[11,0,0,0,34,8], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69":[11,0,0,0,34,7], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69":[9,14,1,7], -"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14":[9,14,1,6], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14":[11,0,0,0,34,6], +"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14":[9,14,1,6], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab":[9,14,1,4], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab":[11,0,0,0,34,4], -"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83":[9,14,1,5], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83":[11,0,0,0,34,5], -"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d":[11,0,0,0,34,2], +"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83":[9,14,1,5], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d":[9,14,1,2], +"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d":[11,0,0,0,34,2], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933":[9,14,1,1], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933":[11,0,0,0,34,1], "group__sock-adopt.html":[9,15], -"group__sock-adopt.html#gab2d045df0f81afe00891aaed312d552b":[11,0,0,0,43], "group__sock-adopt.html#gab2d045df0f81afe00891aaed312d552b":[9,15,1], -"group__sock-adopt.html#gabe71b7462afb21c767bdc67334f305af":[9,15,0], +"group__sock-adopt.html#gab2d045df0f81afe00891aaed312d552b":[11,0,0,0,43], "group__sock-adopt.html#gabe71b7462afb21c767bdc67334f305af":[11,0,0,0,42], +"group__sock-adopt.html#gabe71b7462afb21c767bdc67334f305af":[9,15,0], "group__timeout.html":[9,3], "group__timeout.html#ga2c0aa4b9c3c55bae7b35cbfac3246c87":[11,0,0,0,35], "group__timeout.html#gaced9f9237f6172fed9f730a2af51345a":[11,0,0,0,134], @@ -48,9 +48,11 @@ var NAVTREEINDEX2 = "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a44feda6cc9507a8613b9263b1acc8ce1":[11,0,0,0,35,8], "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a52236b42ec5ffe65d4cdbadeb6c4fcb0":[11,0,0,0,35,2], "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a5fe48ea6f3f5363cca55d39b78490b45":[11,0,0,0,35,15], +"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a62ae208399be1f872e14843fd15f9e06":[11,0,0,0,35,17], "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a65785467c0b560bead865231fdd405d7":[11,0,0,0,35,0], "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a73f61afae387e16f7ab8a4f299aca8d2":[11,0,0,0,35,14], "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a7d5b3bcc88ccbddfa57674e174a78c2d":[11,0,0,0,35,9], +"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87aaac32d9ca2f7c31f5649ad4059d7b985":[11,0,0,0,35,16], "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87aaf69f440c2e000787efae5ad6f39e74c":[11,0,0,0,35,11], "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87ab20463ee983bcd68cd8a501319da56d3":[11,0,0,0,35,6], "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87ad7ebebb506afd30c48e1e5e3a578cd30":[11,0,0,0,35,1], @@ -61,10 +63,10 @@ var NAVTREEINDEX2 = "group__urlendec.html#gabc2888476e50e001c875c1a8abf455b7":[11,0,0,0,145], "group__urlendec.html#gabc2888476e50e001c875c1a8abf455b7":[9,6,5,1], "group__usercb.html":[9,16], -"group__usercb.html#gad4fcb82e68d60ffacca61a3f783a0a2f":[11,0,0,0,7], "group__usercb.html#gad4fcb82e68d60ffacca61a3f783a0a2f":[9,16,0], -"group__usercb.html#gad62860e19975ba4c4af401c3cdb6abf7":[11,0,0,0,19], +"group__usercb.html#gad4fcb82e68d60ffacca61a3f783a0a2f":[11,0,0,0,7], "group__usercb.html#gad62860e19975ba4c4af401c3cdb6abf7":[9,16,1], +"group__usercb.html#gad62860e19975ba4c4af401c3cdb6abf7":[11,0,0,0,19], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a026502768778b8d79d62dd0fe4375fc6":[11,0,0,0,19,17], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a026502768778b8d79d62dd0fe4375fc6":[9,16,1,17], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a0418587d5083bb4850faa438648496ba":[11,0,0,0,19,49], @@ -103,8 +105,8 @@ var NAVTREEINDEX2 = "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7e12418eec9bce85735e6460176ab604":[9,16,1,3], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7ec8e2e9557ee02a4fc9f7dec7e2babc":[11,0,0,0,19,11], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7ec8e2e9557ee02a4fc9f7dec7e2babc":[9,16,1,11], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a838b18d255c1b94a533287ba302a2eba":[9,16,1,5], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a838b18d255c1b94a533287ba302a2eba":[11,0,0,0,19,5], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a838b18d255c1b94a533287ba302a2eba":[9,16,1,5], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8909732521d379179003d97ab7a05428":[11,0,0,0,19,35], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8909732521d379179003d97ab7a05428":[9,16,1,35], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a89862929a72bff65257ca1d51a0fce4d":[11,0,0,0,19,52], @@ -132,11 +134,11 @@ var NAVTREEINDEX2 = "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7abbbe7a0a67c5866ca9109d46823fc5b1":[9,16,1,8], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7abcf9c720cd3d361a83d1ac65bf052a25":[11,0,0,0,19,39], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac11c336f7052abf3618962902a71ebc8":[11,0,0,0,19,54], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac3fc5bbb55e69f90396526287ee84a51":[11,0,0,0,19,38], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac3fc5bbb55e69f90396526287ee84a51":[9,16,1,38], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac3fc5bbb55e69f90396526287ee84a51":[11,0,0,0,19,38], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac432e9f891c733ba8f968c1bf57c0ddc":[11,0,0,0,19,45], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac4c68e00efcf1ff7bda7ada462aff8ae":[9,16,1,13], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac4c68e00efcf1ff7bda7ada462aff8ae":[11,0,0,0,19,13], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac4c68e00efcf1ff7bda7ada462aff8ae":[9,16,1,13], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac8c0ae966ef1877e0020c0077ff2e4a4":[11,0,0,0,19,41], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aca834dc035b7f7486f9ce40fde54fe9e":[11,0,0,0,19,30], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aca834dc035b7f7486f9ce40fde54fe9e":[9,16,1,30], @@ -154,16 +156,16 @@ var NAVTREEINDEX2 = "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae4986291b7a810fe290851d73bebeb1c":[9,16,1,21], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae5ad65d779b7eab32ab67ceff91a3bac":[11,0,0,0,19,23], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae5ad65d779b7eab32ab67ceff91a3bac":[9,16,1,23], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae8d1de0bb56e03aa58cb4d44b18edd2e":[9,16,1,12], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae8d1de0bb56e03aa58cb4d44b18edd2e":[11,0,0,0,19,12], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae8d1de0bb56e03aa58cb4d44b18edd2e":[9,16,1,12], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae9734e1d7af2abf291665ce9e4a728d3":[11,0,0,0,19,19], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae9734e1d7af2abf291665ce9e4a728d3":[9,16,1,19], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7af6cf80e57aae8ba0a57a5c456b1fe026":[11,0,0,0,19,55], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afc4b2f72cc9e424a750b506ce0cc4310":[11,0,0,0,19,51], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afd8fd77a1cc9405fcb4f26915d7f2d01":[11,0,0,0,19,29], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afd8fd77a1cc9405fcb4f26915d7f2d01":[9,16,1,29], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afedadfb3cde37a8ea4c84ed535f26d09":[9,16,1,16], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afedadfb3cde37a8ea4c84ed535f26d09":[11,0,0,0,19,16], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afedadfb3cde37a8ea4c84ed535f26d09":[9,16,1,16], "group__uv.html":[9,22], "group__uv.html#ga097c89497824d4de225a85a00661fc89":[11,0,0,0,110], "group__uv.html#ga3c75cd6ec3f80fc0a0c8ead4c4e71a15":[11,0,0,0,111], @@ -174,8 +176,8 @@ var NAVTREEINDEX2 = "group__vhost-mounts.html":[9,4,0], "group__vhost-mounts.html#ga31eca18e50cb4357480f2fcad36ff437":[9,4,0,2], "group__vhost-mounts.html#ga31eca18e50cb4357480f2fcad36ff437":[11,0,0,0,29], -"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69":[9,4,0,2,3], "group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69":[11,0,0,0,29,3], +"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69":[9,4,0,2,3], "group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0":[11,0,0,0,29,0], "group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0":[9,4,0,2,0], "group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2":[9,4,0,2,2], @@ -184,8 +186,8 @@ var NAVTREEINDEX2 = "group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a8894d16316863077dfe530963ca59f67":[11,0,0,0,29,5], "group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da":[9,4,0,2,6], "group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da":[11,0,0,0,29,6], -"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970":[11,0,0,0,29,4], "group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970":[9,4,0,2,4], +"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970":[11,0,0,0,29,4], "group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1":[11,0,0,0,29,1], "group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1":[9,4,0,2,1], "group__wsclose.html":[9,17], @@ -195,8 +197,8 @@ var NAVTREEINDEX2 = "group__wsclose.html#gae399c571df32ba532c0ca67da9284985":[9,17,0], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a1bb501d212fa4d57053db681b1dfab98":[11,0,0,0,22,3], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a1bb501d212fa4d57053db681b1dfab98":[9,17,0,2], -"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8":[9,17,0,9], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8":[11,0,0,0,22,10], +"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8":[9,17,0,9], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a32c38edab10d1379febac0c479ab2e9c":[11,0,0,0,22,14], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a3ffa38d5081b85fb739e02a747ccf2c4":[11,0,0,0,22,1], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a3ffa38d5081b85fb739e02a747ccf2c4":[9,17,0,0], @@ -210,24 +212,24 @@ var NAVTREEINDEX2 = "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050":[9,17,0,7], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218":[11,0,0,0,22,2], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218":[9,17,0,1], -"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e":[9,17,0,10], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e":[11,0,0,0,22,11], +"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e":[9,17,0,10], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985acc9a317c70363dd88e823e066b2c73b7":[11,0,0,0,22,0], -"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad0869604d79e13700ae5d196a431b350":[11,0,0,0,22,12], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad0869604d79e13700ae5d196a431b350":[9,17,0,11], +"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad0869604d79e13700ae5d196a431b350":[11,0,0,0,22,12], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad09e68295eabdddcba4e332fbea70ae5":[9,17,0,8], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad09e68295eabdddcba4e332fbea70ae5":[11,0,0,0,22,9], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad2b477a91c8445bf34ecd43977f9b390":[9,17,0,12], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad2b477a91c8445bf34ecd43977f9b390":[11,0,0,0,22,13], -"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2":[9,17,0,4], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2":[11,0,0,0,22,5], +"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2":[9,17,0,4], "group__wsstatus.html":[9,18], "group__wsstatus.html#ga08e9ee165fca503fd9427d55cfecac37":[9,18,3], "group__wsstatus.html#ga08e9ee165fca503fd9427d55cfecac37":[11,0,0,0,105], "group__wsstatus.html#ga26a140623d202dd2bf2004deb6994baa":[9,18,4], "group__wsstatus.html#ga26a140623d202dd2bf2004deb6994baa":[11,0,0,0,106], -"group__wsstatus.html#ga2bb3655329b4651cd06f79ee3a764421":[9,18,6], "group__wsstatus.html#ga2bb3655329b4651cd06f79ee3a764421":[11,0,0,0,123], +"group__wsstatus.html#ga2bb3655329b4651cd06f79ee3a764421":[9,18,6], "group__wsstatus.html#ga3df5045656dfb6b0e63a38de2dca79d2":[9,18,1], "group__wsstatus.html#ga3df5045656dfb6b0e63a38de2dca79d2":[11,0,0,0,91], "group__wsstatus.html#ga4ad226d5e01024b4046f4a5a37199aa1":[9,18,2], @@ -237,8 +239,8 @@ var NAVTREEINDEX2 = "group__wsstatus.html#gaeca4afc94b1f026034f99cbba37e2f85":[9,18,5], "group__wsstatus.html#gaeca4afc94b1f026034f99cbba37e2f85":[11,0,0,0,114], "hierarchy.html":[10,2], -"index.html":[0], "index.html":[], +"index.html":[0], "libwebsockets_8h.html":[11,0,0,0], "libwebsockets_8h.html#a0b056fdcf949a838ff82209b4a627dd9":[11,0,0,0,159], "libwebsockets_8h.html#a2271141d8be8d72b47ba327130b4905f":[11,0,0,0,24], @@ -247,7 +249,5 @@ var NAVTREEINDEX2 = "libwebsockets_8h.html#a2271141d8be8d72b47ba327130b4905fafdb6cf2797a3ea957c690ad6edff25d6":[11,0,0,0,24,0], "libwebsockets_8h.html#a27bb0b3cdcd0af839c928c253b521ff4":[11,0,0,0,56], "libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedb":[11,0,0,0,20], -"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedba35cf2bed9944faa062d9310197489b2f":[11,0,0,0,20,4], -"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedba60ac587febc583475c185e1409a0210c":[11,0,0,0,20,1], -"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedbaa424646e067c6266bcb4f0190b026d66":[11,0,0,0,20,0] +"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedba35cf2bed9944faa062d9310197489b2f":[11,0,0,0,20,4] }; diff --git a/doc/html/navtreeindex3.js b/doc/html/navtreeindex3.js index f73ea749..de0173de 100644 --- a/doc/html/navtreeindex3.js +++ b/doc/html/navtreeindex3.js @@ -1,5 +1,7 @@ var NAVTREEINDEX3 = { +"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedba60ac587febc583475c185e1409a0210c":[11,0,0,0,20,1], +"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedbaa424646e067c6266bcb4f0190b026d66":[11,0,0,0,20,0], "libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedbac8f5f992c6615324108cdf931da903be":[11,0,0,0,20,2], "libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedbad655f0eecc9e94be37b8ed07348716ef":[11,0,0,0,20,6], "libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedbad9cdc12a796e6c7d912278834d9c7dde":[11,0,0,0,20,3], @@ -147,6 +149,7 @@ var NAVTREEINDEX3 = "structlws__context__creation__info.html#a137a9b9de4f6a7993fed8746d551e616":[9,4,1,26], "structlws__context__creation__info.html#a13ffbb0d010309669611f8c4eda7d7f8":[9,4,1,17], "structlws__context__creation__info.html#a1654d41bea6fb2f619b57e6a264b26a4":[9,4,1,22], +"structlws__context__creation__info.html#a33a1a25a7df3793f59047e20dd580078":[9,4,1,39], "structlws__context__creation__info.html#a381342a398883d6204955ff3c1849ddd":[9,4,1,9], "structlws__context__creation__info.html#a3baab4285c679fbe027c2504621d7410":[9,4,1,10], "structlws__context__creation__info.html#a3e1516fd7fed26bfa77c0246ed26c2eb":[9,4,1,29], @@ -246,8 +249,5 @@ var NAVTREEINDEX3 = "structlws__plugin__capability.html#a523c7cde6f15bba345f56493dcf6b32a":[9,10,2,0], "structlws__plugin__capability.html#a6a4d9d01e770f378ddadc77b37522033":[9,10,2,4], "structlws__plugin__capability.html#a7936f0eb93d79dea76b903d0f8a5f623":[9,10,2,3], -"structlws__plugin__capability.html#abcf51db969522fdda9aaf902e65739d3":[9,10,2,1], -"structlws__plugin__capability.html#ae38f7cf1246b9ca3af3cbf9d46b7090f":[9,10,2,2], -"structlws__polarssl__context.html":[10,0,14], -"structlws__polarssl__context.html#a1872f2ea24878d807ae20ca8513674af":[10,0,14,0] +"structlws__plugin__capability.html#abcf51db969522fdda9aaf902e65739d3":[9,10,2,1] }; diff --git a/doc/html/navtreeindex4.js b/doc/html/navtreeindex4.js index 64a59b9b..dedcebfd 100644 --- a/doc/html/navtreeindex4.js +++ b/doc/html/navtreeindex4.js @@ -1,5 +1,8 @@ var NAVTREEINDEX4 = { +"structlws__plugin__capability.html#ae38f7cf1246b9ca3af3cbf9d46b7090f":[9,10,2,2], +"structlws__polarssl__context.html":[10,0,14], +"structlws__polarssl__context.html#a1872f2ea24878d807ae20ca8513674af":[10,0,14,0], "structlws__polarssl__context.html#a919c33af37aab170f828d954de1fa270":[10,0,14,2], "structlws__polarssl__context.html#ae7e11c9129ff71c7ee71b3b2e320ff27":[10,0,14,1], "structlws__pollargs.html":[10,0,15], @@ -23,12 +26,12 @@ var NAVTREEINDEX4 = "structlws__process__html__state.html#adcafd17704775b4bbeea9561fb340968":[9,6,1,1,0], "structlws__process__html__state.html#af0732884ef891e24fe5fa237ebaa21a3":[9,6,1,1,4], "structlws__process__html__state.html#af21119890fdfebe28fb5c4dabfc1bdf5":[9,6,1,1,1], -"structlws__protocol__vhost__options.html":[9,4,0,0], "structlws__protocol__vhost__options.html":[9,4,2], +"structlws__protocol__vhost__options.html":[9,4,0,0], "structlws__protocol__vhost__options.html#a0640a92513c70ee6b9b295a9ad1658e7":[9,4,0,0,3], "structlws__protocol__vhost__options.html#a0640a92513c70ee6b9b295a9ad1658e7":[9,4,2,3], -"structlws__protocol__vhost__options.html#abc714ddb4171756fc8196e9823a1e21c":[9,4,2,1], "structlws__protocol__vhost__options.html#abc714ddb4171756fc8196e9823a1e21c":[9,4,0,0,1], +"structlws__protocol__vhost__options.html#abc714ddb4171756fc8196e9823a1e21c":[9,4,2,1], "structlws__protocol__vhost__options.html#acf9db77f8eb64cd4e314be9b43d8a8b9":[9,4,2,0], "structlws__protocol__vhost__options.html#acf9db77f8eb64cd4e314be9b43d8a8b9":[9,4,0,0,0], "structlws__protocol__vhost__options.html#afd99fbc90be51ea2465b550c2ec47822":[9,4,2,2], @@ -48,12 +51,12 @@ var NAVTREEINDEX4 = "structlws__session__info.html#afb924864b70f40372920688a5c1c895e":[9,10,0,2,2], "structlws__token__limits.html":[9,6,4,1], "structlws__token__limits.html#a6ec712306cbf8585bce7a56758a3ceff":[9,6,4,1,0], -"structlws__tokens.html":[9,6,6], "structlws__tokens.html":[9,6,4,0], +"structlws__tokens.html":[9,6,6], "structlws__tokens.html#a855b7375d1d58516c0ecd4b60e9a7766":[9,6,6,1], "structlws__tokens.html#a855b7375d1d58516c0ecd4b60e9a7766":[9,6,4,0,1], -"structlws__tokens.html#a9f3635412bc71a5cb78e9862b55f10cd":[9,6,6,0], "structlws__tokens.html#a9f3635412bc71a5cb78e9862b55f10cd":[9,6,4,0,0], +"structlws__tokens.html#a9f3635412bc71a5cb78e9862b55f10cd":[9,6,6,0], "structlwsgw__hash.html":[9,10,0,1], "structlwsgw__hash.html#a29435f5cf78747d4257695b0f141d164":[9,10,0,1,0], "structlwsgw__hash__bin.html":[9,10,0,0], diff --git a/doc/html/structlws__context__creation__info.html b/doc/html/structlws__context__creation__info.html index 9ab13178..502b95e2 100644 --- a/doc/html/structlws__context__creation__info.html +++ b/doc/html/structlws__context__creation__info.html @@ -156,6 +156,8 @@ Data Fields   long ssl_options_clear   +unsigned short ws_ping_pong_interval +  void * _unused [8]   @@ -669,6 +671,19 @@ Data Fields

    VHOST: name of vhost, must match external DNS name used to access the site, like "warmcat.com" as it's used to match Host: header and / or SNI name for SSL.

    +
    + + +
    +
    + + + + +
    unsigned short lws_context_creation_info::ws_ping_pong_interval
    +
    +

    CONTEXT: 0 for none, else interval in seconds between sending PINGs on idle websocket connections. When the PING is sent, the PONG must come within the normal timeout_secs timeout period or the connection will be dropped. Any RX or TX traffic on the connection restarts the interval timer, so a connection which always sends or receives something at intervals less than the interval given here will never send PINGs / expect PONGs. Conversely as soon as the ws connection is established, an idle connection will do the PING / PONG roundtrip as soon as ws_ping_pong_interval seconds has passed without traffic

    +

    The documentation for this struct was generated from the following file: