diff --git a/doc/html/globals_func.html b/doc/html/globals_func.html index d50346c6..dd691c97 100644 --- a/doc/html/globals_func.html +++ b/doc/html/globals_func.html @@ -228,6 +228,9 @@ $(document).ready(function(){initNavTree('globals_func.html','');});
  • lws_get_socket_fd() : libwebsockets.h
  • +
  • lws_get_ssl() +: libwebsockets.h +
  • lws_get_urlarg_by_name() : libwebsockets.h
  • diff --git a/doc/html/globals_l.html b/doc/html/globals_l.html index 815f6bbe..2301275c 100644 --- a/doc/html/globals_l.html +++ b/doc/html/globals_l.html @@ -444,6 +444,9 @@ $(document).ready(function(){initNavTree('globals_l.html','');});
  • lws_get_socket_fd() : libwebsockets.h
  • +
  • lws_get_ssl() +: libwebsockets.h +
  • lws_get_urlarg_by_name() : libwebsockets.h
  • diff --git a/doc/html/group__smtp.html b/doc/html/group__smtp.html index 45e9e3c9..a0ffc892 100644 --- a/doc/html/group__smtp.html +++ b/doc/html/group__smtp.html @@ -149,15 +149,15 @@ Functions LGSSMTP_SENT_QUIT 

    sent the session quit

    -
    4260  {
    4261  LGSSMTP_IDLE,
    4262  LGSSMTP_CONNECTING,
    4263  LGSSMTP_CONNECTED,
    4264  LGSSMTP_SENT_HELO,
    4265  LGSSMTP_SENT_FROM,
    4266  LGSSMTP_SENT_TO,
    4267  LGSSMTP_SENT_DATA,
    4268  LGSSMTP_SENT_BODY,
    4269  LGSSMTP_SENT_QUIT,
    4270 };
    Definition: libwebsockets.h:4263
    -
    Definition: libwebsockets.h:4268
    -
    Definition: libwebsockets.h:4261
    -
    Definition: libwebsockets.h:4262
    -
    Definition: libwebsockets.h:4266
    -
    Definition: libwebsockets.h:4265
    -
    Definition: libwebsockets.h:4269
    -
    Definition: libwebsockets.h:4264
    -
    Definition: libwebsockets.h:4267
    +
    4271  {
    4272  LGSSMTP_IDLE,
    4277  LGSSMTP_SENT_TO,
    4281 };
    Definition: libwebsockets.h:4274
    +
    Definition: libwebsockets.h:4279
    +
    Definition: libwebsockets.h:4272
    +
    Definition: libwebsockets.h:4273
    +
    Definition: libwebsockets.h:4277
    +
    Definition: libwebsockets.h:4276
    +
    Definition: libwebsockets.h:4280
    +
    Definition: libwebsockets.h:4275
    +
    Definition: libwebsockets.h:4278
    diff --git a/doc/html/group__wsstatus.html b/doc/html/group__wsstatus.html index 5e7e16e3..d945284b 100644 --- a/doc/html/group__wsstatus.html +++ b/doc/html/group__wsstatus.html @@ -83,6 +83,8 @@ Functions   LWS_VISIBLE LWS_EXTERN int lws_is_cgi (struct lws *wsi)   +LWS_VISIBLE LWS_EXTERN SSL * lws_get_ssl (struct lws *wsi) + 

    Detailed Description

    Websocket connection status APIs

    @@ -140,6 +142,33 @@ Functions + + + +

    § lws_get_ssl()

    + +
    +
    + + + + + + + + +
    LWS_VISIBLE LWS_EXTERN SSL* lws_get_ssl (struct lws * wsi)
    +
    + +

    #include <lib/libwebsockets.h>

    +

    lws_get_ssl() - Return wsi's SSL context structure

    Parameters
    + + +
    wsiwebsocket connection
    +
    +
    +

    Returns pointer to the SSL library's context structure

    +
    diff --git a/doc/html/group__wsstatus.js b/doc/html/group__wsstatus.js index 1f198aa3..a699aec9 100644 --- a/doc/html/group__wsstatus.js +++ b/doc/html/group__wsstatus.js @@ -2,6 +2,7 @@ var group__wsstatus = [ [ "lws_frame_is_binary", "group__wsstatus.html#gaccd9c59336efad8af0554f79cc5966fd", null ], [ "lws_get_reserved_bits", "group__wsstatus.html#ga3df5045656dfb6b0e63a38de2dca79d2", null ], + [ "lws_get_ssl", "group__wsstatus.html#ga42152ffb385f9b19f4e7b04f998425de", null ], [ "lws_is_cgi", "group__wsstatus.html#ga4ad226d5e01024b4046f4a5a37199aa1", null ], [ "lws_is_final_fragment", "group__wsstatus.html#ga08e9ee165fca503fd9427d55cfecac37", null ], [ "lws_is_ssl", "group__wsstatus.html#ga26a140623d202dd2bf2004deb6994baa", null ], diff --git a/doc/html/libwebsockets_8h.html b/doc/html/libwebsockets_8h.html index 8965b54c..1570d928 100644 --- a/doc/html/libwebsockets_8h.html +++ b/doc/html/libwebsockets_8h.html @@ -929,6 +929,8 @@ LWS_VISIBLE LWS_EXTERN int   LWS_VISIBLE LWS_EXTERN int lws_is_cgi (struct lws *wsi)   +LWS_VISIBLE LWS_EXTERN SSL * lws_get_ssl (struct lws *wsi) +  LWS_VISIBLE LWS_EXTERN unsigned char * lws_SHA1 (const unsigned char *d, size_t n, unsigned char *md)   LWS_VISIBLE LWS_EXTERN int lws_b64_encode_string (const char *in, int in_len, char *out, int out_size) diff --git a/doc/html/libwebsockets_8h.js b/doc/html/libwebsockets_8h.js index 891c6167..b5ac42e1 100644 --- a/doc/html/libwebsockets_8h.js +++ b/doc/html/libwebsockets_8h.js @@ -451,6 +451,7 @@ var libwebsockets_8h = [ "lws_get_random", "group__misc.html#ga58f906c6be0ca80efd813f694569dd4a", null ], [ "lws_get_reserved_bits", "group__wsstatus.html#ga3df5045656dfb6b0e63a38de2dca79d2", null ], [ "lws_get_socket_fd", "group__callback-when-writeable.html#gaa709e02a10558753c851e58f1e2c16ba", null ], + [ "lws_get_ssl", "group__wsstatus.html#ga42152ffb385f9b19f4e7b04f998425de", null ], [ "lws_get_urlarg_by_name", "group__HTTP-headers-read.html#ga84e9ce5e71a77501a0998ac403a984c2", null ], [ "lws_get_vhost", "group__context-and-vhost.html#ga06e77ce2916f8bc9826ef8d9d68e3932", null ], [ "lws_hdr_copy", "group__HTTP-headers-read.html#ga6ce6aa1c0155ea42b7708bed271d1c77", null ], diff --git a/doc/html/libwebsockets_8h_source.html b/doc/html/libwebsockets_8h_source.html index 2095e819..43cec6e3 100644 --- a/doc/html/libwebsockets_8h_source.html +++ b/doc/html/libwebsockets_8h_source.html @@ -64,9 +64,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 #if defined(MBED_OPERATORS) || defined(LWS_WITH_ESP8266)
    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 <fcntl.h>
    120 #else
    121 #define _O_RDONLY 0x0000
    122 #define O_RDONLY _O_RDONLY
    123 #endif
    124 
    125 // Visual studio older than 2015 and WIN_CE has only _stricmp
    126 #if (defined(_MSC_VER) && _MSC_VER < 1900) || defined(_WIN32_WCE)
    127 #define strcasecmp _stricmp
    128 #elif !defined(__MINGW32__)
    129 #define strcasecmp stricmp
    130 #endif
    131 #define getdtablesize() 30000
    132 
    133 #define LWS_INLINE __inline
    134 #define LWS_VISIBLE
    135 #define LWS_WARN_UNUSED_RESULT
    136 #define LWS_WARN_DEPRECATED
    137 
    138 #ifdef LWS_DLL
    139 #ifdef LWS_INTERNAL
    140 #define LWS_EXTERN extern __declspec(dllexport)
    141 #else
    142 #define LWS_EXTERN extern __declspec(dllimport)
    143 #endif
    144 #else
    145 #define LWS_EXTERN
    146 #endif
    147 
    148 #define LWS_INVALID_FILE INVALID_HANDLE_VALUE
    149 #define LWS_O_RDONLY _O_RDONLY
    150 
    151 #if !defined(__MINGW32__) && (!defined(_MSC_VER) || _MSC_VER < 1900) /* Visual Studio 2015 already defines this in <stdio.h> */
    152 #define lws_snprintf _snprintf
    153 #endif
    154 
    155 #ifndef __func__
    156 #define __func__ __FUNCTION__
    157 #endif
    158 
    159 #else /* NOT WIN32 */
    160 #include <unistd.h>
    161 
    162 #if defined(__NetBSD__) || defined(__FreeBSD__)
    163 #include <netinet/in.h>
    164 #endif
    165 
    166 #define LWS_INLINE inline
    167 #define LWS_O_RDONLY O_RDONLY
    168 
    169 #if !defined(MBED_OPERATORS) && !defined(LWS_WITH_ESP8266) && !defined(OPTEE_TA)
    170 #include <poll.h>
    171 #include <netdb.h>
    172 #define LWS_INVALID_FILE -1
    173 #else
    174 #define getdtablesize() (20)
    175 #define LWS_INVALID_FILE NULL
    176 #endif
    177 
    178 #if defined(__GNUC__)
    179 
    180 /* warn_unused_result attribute only supported by GCC 3.4 or later */
    181 #if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
    182 #define LWS_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
    183 #else
    184 #define LWS_WARN_UNUSED_RESULT
    185 #endif
    186 
    187 #define LWS_VISIBLE __attribute__((visibility("default")))
    188 #define LWS_WARN_DEPRECATED __attribute__ ((deprecated))
    189 #else
    190 #define LWS_VISIBLE
    191 #define LWS_WARN_UNUSED_RESULT
    192 #define LWS_WARN_DEPRECATED
    193 #endif
    194 
    195 #if defined(__ANDROID__)
    196 #include <unistd.h>
    197 #define getdtablesize() sysconf(_SC_OPEN_MAX)
    198 #endif
    199 
    200 #endif
    201 
    202 #ifdef LWS_USE_LIBEV
    203 #include <ev.h>
    204 #endif /* LWS_USE_LIBEV */
    205 #ifdef LWS_USE_LIBUV
    206 #include <uv.h>
    207 #ifdef LWS_HAVE_UV_VERSION_H
    208 #include <uv-version.h>
    209 #endif
    210 #endif /* LWS_USE_LIBUV */
    211 
    212 #ifndef LWS_EXTERN
    213 #define LWS_EXTERN extern
    214 #endif
    215 
    216 #ifdef _WIN32
    217 #define random rand
    218 #else
    219 #if !defined(OPTEE_TA)
    220 #include <sys/time.h>
    221 #include <unistd.h>
    222 #endif
    223 #endif
    224 
    225 #ifdef LWS_OPENSSL_SUPPORT
    226 
    227 #ifdef USE_WOLFSSL
    228 #ifdef USE_OLD_CYASSL
    229 #include <cyassl/openssl/ssl.h>
    230 #include <cyassl/error-ssl.h>
    231 #else
    232 #include <wolfssl/openssl/ssl.h>
    233 #include <wolfssl/error-ssl.h>
    234 #endif /* not USE_OLD_CYASSL */
    235 #else
    236 #if defined(LWS_USE_POLARSSL)
    237 #include <polarssl/ssl.h>
    239  x509_crt ca;
    240  x509_crt certificate;
    241  rsa_context key;
    242 };
    243 typedef struct lws_polarssl_context SSL_CTX;
    244 typedef ssl_context SSL;
    245 #else
    246 #if defined(LWS_USE_MBEDTLS)
    247 #include <mbedtls/ssl.h>
    248 #else
    249 #include <openssl/ssl.h>
    250 #include <openssl/err.h>
    251 #endif /* not USE_MBEDTLS */
    252 #endif /* not USE_POLARSSL */
    253 #endif /* not USE_WOLFSSL */
    254 #endif
    255 
    256 
    257 #define CONTEXT_PORT_NO_LISTEN -1
    258 #define CONTEXT_PORT_NO_LISTEN_SERVER -2
    259 
    270 
    272 enum lws_log_levels {
    273  LLL_ERR = 1 << 0,
    274  LLL_WARN = 1 << 1,
    275  LLL_NOTICE = 1 << 2,
    276  LLL_INFO = 1 << 3,
    277  LLL_DEBUG = 1 << 4,
    278  LLL_PARSER = 1 << 5,
    279  LLL_HEADER = 1 << 6,
    280  LLL_EXT = 1 << 7,
    281  LLL_CLIENT = 1 << 8,
    282  LLL_LATENCY = 1 << 9,
    283 
    284  LLL_COUNT = 10 /* set to count of valid flags */
    285 };
    286 
    287 LWS_VISIBLE LWS_EXTERN void _lws_log(int filter, const char *format, ...);
    288 LWS_VISIBLE LWS_EXTERN void _lws_logv(int filter, const char *format, va_list vl);
    298 LWS_VISIBLE LWS_EXTERN int
    299 lwsl_timestamp(int level, char *p, int len);
    300 
    301 #define lwsl_err(...) _lws_log(LLL_ERR, __VA_ARGS__)
    302 
    303 #if !defined(LWS_WITH_NO_LOGS)
    304 /* notice, warn and log are always compiled in */
    305 #define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__)
    306 #define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__)
    307 #endif
    308 /*
    309  * weaker logging can be deselected at configure time using --disable-debug
    310  * that gets rid of the overhead of checking while keeping _warn and _err
    311  * active
    312  */
    313 
    314 #if defined(LWS_WITH_ESP8266)
    315 #undef _DEBUG
    316 #endif
    317 
    318 #ifdef _DEBUG
    319 #if defined(LWS_WITH_NO_LOGS)
    320 /* notice, warn and log are always compiled in */
    321 //#define lwsl_err(...) _lws_log(LLL_ERR, __VA_ARGS__)
    322 #define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__)
    323 #define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__)
    324 #endif
    325 #define lwsl_info(...) _lws_log(LLL_INFO, __VA_ARGS__)
    326 #define lwsl_debug(...) _lws_log(LLL_DEBUG, __VA_ARGS__)
    327 #define lwsl_parser(...) _lws_log(LLL_PARSER, __VA_ARGS__)
    328 #define lwsl_header(...) _lws_log(LLL_HEADER, __VA_ARGS__)
    329 #define lwsl_ext(...) _lws_log(LLL_EXT, __VA_ARGS__)
    330 #define lwsl_client(...) _lws_log(LLL_CLIENT, __VA_ARGS__)
    331 #define lwsl_latency(...) _lws_log(LLL_LATENCY, __VA_ARGS__)
    332 
    338 LWS_VISIBLE LWS_EXTERN void lwsl_hexdump(void *buf, size_t len);
    339 
    340 #else /* no debug */
    341 #if defined(LWS_WITH_NO_LOGS)
    342 //#define lwsl_err(...) do {} while(0)
    343 #define lwsl_warn(...) do {} while(0)
    344 #define lwsl_notice(...) do {} while(0)
    345 #endif
    346 #define lwsl_info(...) do {} while(0)
    347 #define lwsl_debug(...) do {} while(0)
    348 #define lwsl_parser(...) do {} while(0)
    349 #define lwsl_header(...) do {} while(0)
    350 #define lwsl_ext(...) do {} while(0)
    351 #define lwsl_client(...) do {} while(0)
    352 #define lwsl_latency(...) do {} while(0)
    353 #define lwsl_hexdump(a, b)
    354 
    355 #endif
    356 
    367 LWS_VISIBLE LWS_EXTERN void
    368 lws_set_log_level(int level,
    369  void (*log_emit_function)(int level, const char *line));
    370 
    380 LWS_VISIBLE LWS_EXTERN void
    381 lwsl_emit_syslog(int level, const char *line);
    382 
    384 
    385 
    386 #include <stddef.h>
    387 
    388 #ifndef lws_container_of
    389 #define lws_container_of(P,T,M) ((T *)((char *)(P) - offsetof(T, M)))
    390 #endif
    391 
    392 
    393 struct lws;
    394 #ifndef ARRAY_SIZE
    395 #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
    396 #endif
    397 
    398 /* api change list for user code to test against */
    399 
    400 #define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_ARG
    401 
    402 /* the struct lws_protocols has the id field present */
    403 #define LWS_FEATURE_PROTOCOLS_HAS_ID_FIELD
    404 
    405 /* you can call lws_get_peer_write_allowance */
    406 #define LWS_FEATURE_PROTOCOLS_HAS_PEER_WRITE_ALLOWANCE
    407 
    408 /* extra parameter introduced in 917f43ab821 */
    409 #define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_LEN
    410 
    411 /* File operations stuff exists */
    412 #define LWS_FEATURE_FOPS
    413 
    414 
    415 #if defined(_WIN32)
    416 typedef SOCKET lws_sockfd_type;
    417 typedef HANDLE lws_filefd_type;
    418 #define lws_sockfd_valid(sfd) (!!sfd)
    419 struct lws_pollfd {
    420  lws_sockfd_type fd;
    421  SHORT events;
    422  SHORT revents;
    423 };
    424 #define LWS_POLLHUP (FD_CLOSE)
    425 #define LWS_POLLIN (FD_READ | FD_ACCEPT)
    426 #define LWS_POLLOUT (FD_WRITE)
    427 #else
    428 
    429 #if defined(MBED_OPERATORS)
    430 /* it's a class lws_conn * */
    431 typedef void * lws_sockfd_type;
    432 typedef void * lws_filefd_type;
    433 #define lws_sockfd_valid(sfd) (!!sfd)
    434 struct pollfd {
    435  lws_sockfd_type fd;
    436  short events;
    437  short revents;
    438 };
    439 #define POLLIN 0x0001
    440 #define POLLPRI 0x0002
    441 #define POLLOUT 0x0004
    442 #define POLLERR 0x0008
    443 #define POLLHUP 0x0010
    444 #define POLLNVAL 0x0020
    445 
    446 struct lws;
    447 
    448 void * mbed3_create_tcp_stream_socket(void);
    449 void mbed3_delete_tcp_stream_socket(void *sockfd);
    450 void mbed3_tcp_stream_bind(void *sock, int port, struct lws *);
    451 void mbed3_tcp_stream_accept(void *sock, struct lws *);
    452 #else
    453 #if defined(LWS_WITH_ESP8266)
    454 
    455 #include <user_interface.h>
    456 #include <espconn.h>
    457 
    458 typedef struct espconn * lws_sockfd_type;
    459 typedef void * lws_filefd_type;
    460 #define lws_sockfd_valid(sfd) (!!sfd)
    461 struct pollfd {
    462  lws_sockfd_type fd;
    463  short events;
    464  short revents;
    465 };
    466 #define POLLIN 0x0001
    467 #define POLLPRI 0x0002
    468 #define POLLOUT 0x0004
    469 #define POLLERR 0x0008
    470 #define POLLHUP 0x0010
    471 #define POLLNVAL 0x0020
    472 
    473 struct lws_vhost;
    474 
    475 lws_sockfd_type esp8266_create_tcp_listen_socket(struct lws_vhost *vh);
    476 void esp8266_tcp_stream_accept(lws_sockfd_type fd, struct lws *wsi);
    477 
    478 #include <os_type.h>
    479 #include <osapi.h>
    480 #include "ets_sys.h"
    481 
    482 int ets_snprintf(char *str, size_t size, const char *format, ...);
    483 #define snprintf ets_snprintf
    484 
    485 typedef os_timer_t uv_timer_t;
    486 typedef void uv_cb_t(uv_timer_t *);
    487 
    488 void os_timer_disarm(void *);
    489 void os_timer_setfn(os_timer_t *, os_timer_func_t *, void *);
    490 
    491 void ets_timer_arm_new(os_timer_t *, int, int, int);
    492 
    493 //void os_timer_arm(os_timer_t *, int, int);
    494 
    495 #define UV_VERSION_MAJOR 1
    496 
    497 #define lws_uv_getloop(a, b) (NULL)
    498 
    499 static inline void uv_timer_init(void *l, uv_timer_t *t)
    500 {
    501  (void)l;
    502  memset(t, 0, sizeof(*t));
    503  os_timer_disarm(t);
    504 }
    505 
    506 static inline void uv_timer_start(uv_timer_t *t, uv_cb_t *cb, int first, int rep)
    507 {
    508  os_timer_setfn(t, (os_timer_func_t *)cb, t);
    509  /* ms, repeat */
    510  os_timer_arm(t, first, !!rep);
    511 }
    512 
    513 static inline void uv_timer_stop(uv_timer_t *t)
    514 {
    515  os_timer_disarm(t);
    516 }
    517 
    518 #else
    519 typedef int lws_sockfd_type;
    520 typedef int lws_filefd_type;
    521 #define lws_sockfd_valid(sfd) (sfd >= 0)
    522 #endif
    523 #endif
    524 
    525 #define lws_pollfd pollfd
    526 #define LWS_POLLHUP (POLLHUP|POLLERR)
    527 #define LWS_POLLIN (POLLIN)
    528 #define LWS_POLLOUT (POLLOUT)
    529 #endif
    530 
    533 struct lws_pollargs {
    534  lws_sockfd_type fd;
    535  int events;
    537 };
    538 
    539 struct lws_tokens;
    540 struct lws_token_limits;
    541 
    549 
    551 /*
    552  * NOTE: These public enums are part of the abi. If you want to add one,
    553  * add it at where specified so existing users are unaffected.
    554  */
    557  LWS_CLOSE_STATUS_NOSTATUS = 0,
    619  /****** add new things just above ---^ ******/
    620 
    621  LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY = 9999,
    622 };
    623 
    636 LWS_VISIBLE LWS_EXTERN void
    637 lws_close_reason(struct lws *wsi, enum lws_close_status status,
    638  unsigned char *buf, size_t len);
    639 
    641 
    642 struct lws;
    643 struct lws_context;
    644 /* needed even with extensions disabled for create context */
    645 struct lws_extension;
    646 
    658 
    660 
    661 /*
    662  * NOTE: These public enums are part of the abi. If you want to add one,
    663  * add it at where specified so existing users are unaffected.
    664  */
    908  /* external poll() management support */
    971  LWS_CALLBACK_WS_EXT_DEFAULTS = 39,
    974  LWS_CALLBACK_CGI = 40,
    976  LWS_CALLBACK_CGI_TERMINATED = 41,
    978  LWS_CALLBACK_CGI_STDIN_DATA = 42,
    980  LWS_CALLBACK_CGI_STDIN_COMPLETED = 43,
    982  LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP = 44,
    984  LWS_CALLBACK_CLOSED_CLIENT_HTTP = 45,
    986  LWS_CALLBACK_RECEIVE_CLIENT_HTTP = 46,
    988  LWS_CALLBACK_COMPLETED_CLIENT_HTTP = 47,
    990  LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ = 48,
    992  LWS_CALLBACK_HTTP_BIND_PROTOCOL = 49,
    994  LWS_CALLBACK_HTTP_DROP_PROTOCOL = 50,
    996  LWS_CALLBACK_CHECK_ACCESS_RIGHTS = 51,
    998  LWS_CALLBACK_PROCESS_HTML = 52,
    1000  LWS_CALLBACK_ADD_HEADERS = 53,
    1002  LWS_CALLBACK_SESSION_INFO = 54,
    1005  LWS_CALLBACK_GS_EVENT = 55,
    1052  /****** add new things just above ---^ ******/
    1053 
    1056 };
    1057 
    1058 
    1059 
    1075 typedef int
    1076 lws_callback_function(struct lws *wsi, enum lws_callback_reasons reason,
    1077  void *user, void *in, size_t len);
    1079 
    1089 
    1091 /*
    1092  * NOTE: These public enums are part of the abi. If you want to add one,
    1093  * add it at where specified so existing users are unaffected.
    1094  */
    1095 enum lws_extension_callback_reasons {
    1096  LWS_EXT_CB_SERVER_CONTEXT_CONSTRUCT = 0,
    1097  LWS_EXT_CB_CLIENT_CONTEXT_CONSTRUCT = 1,
    1098  LWS_EXT_CB_SERVER_CONTEXT_DESTRUCT = 2,
    1099  LWS_EXT_CB_CLIENT_CONTEXT_DESTRUCT = 3,
    1100  LWS_EXT_CB_CONSTRUCT = 4,
    1101  LWS_EXT_CB_CLIENT_CONSTRUCT = 5,
    1102  LWS_EXT_CB_CHECK_OK_TO_REALLY_CLOSE = 6,
    1103  LWS_EXT_CB_CHECK_OK_TO_PROPOSE_EXTENSION = 7,
    1104  LWS_EXT_CB_DESTROY = 8,
    1105  LWS_EXT_CB_DESTROY_ANY_WSI_CLOSING = 9,
    1106  LWS_EXT_CB_ANY_WSI_ESTABLISHED = 10,
    1107  LWS_EXT_CB_PACKET_RX_PREPARSE = 11,
    1108  LWS_EXT_CB_PACKET_TX_PRESEND = 12,
    1109  LWS_EXT_CB_PACKET_TX_DO_SEND = 13,
    1110  LWS_EXT_CB_HANDSHAKE_REPLY_TX = 14,
    1111  LWS_EXT_CB_FLUSH_PENDING_TX = 15,
    1112  LWS_EXT_CB_EXTENDED_PAYLOAD_RX = 16,
    1113  LWS_EXT_CB_CAN_PROXY_CLIENT_CONNECTION = 17,
    1114  LWS_EXT_CB_1HZ = 18,
    1115  LWS_EXT_CB_REQUEST_ON_WRITEABLE = 19,
    1116  LWS_EXT_CB_IS_WRITEABLE = 20,
    1117  LWS_EXT_CB_PAYLOAD_TX = 21,
    1118  LWS_EXT_CB_PAYLOAD_RX = 22,
    1119  LWS_EXT_CB_OPTION_DEFAULT = 23,
    1120  LWS_EXT_CB_OPTION_SET = 24,
    1121  LWS_EXT_CB_OPTION_CONFIRM = 25,
    1122  LWS_EXT_CB_NAMED_OPTION_SET = 26,
    1123 
    1124  /****** add new things just above ---^ ******/
    1125 };
    1126 
    1133  /* Add new things just above here ---^
    1134  * This is part of the ABI, don't needlessly break compatibility */
    1135 };
    1136 
    1142  const char *name;
    1145  /* Add new things just above here ---^
    1146  * This is part of the ABI, don't needlessly break compatibility */
    1147 };
    1148 
    1151  const char *option_name;
    1153  const char *start;
    1154  int len;
    1155 };
    1156 
    1217 typedef int
    1218 lws_extension_callback_function(struct lws_context *context,
    1219  const struct lws_extension *ext, struct lws *wsi,
    1220  enum lws_extension_callback_reasons reason,
    1221  void *user, void *in, size_t len);
    1222 
    1225  const char *name;
    1227  const char *client_offer;
    1229  /* Add new things just above here ---^
    1230  * This is part of the ABI, don't needlessly break compatibility */
    1231 };
    1232 
    1241 LWS_VISIBLE LWS_EXTERN int
    1242 lws_set_extension_option(struct lws *wsi, const char *ext_name,
    1243  const char *opt_name, const char *opt_val);
    1244 
    1245 #ifndef LWS_NO_EXTENSIONS
    1246 /* lws_get_internal_extensions() - DEPRECATED
    1247  *
    1248  * \Deprecated There is no longer a set internal extensions table. The table is provided
    1249  * by user code along with application-specific settings. See the test
    1250  * client and server for how to do.
    1251  */
    1252 static LWS_INLINE LWS_WARN_DEPRECATED const struct lws_extension *
    1253 lws_get_internal_extensions(void) { return NULL; }
    1254 
    1265 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    1266 lws_ext_parse_options(const struct lws_extension *ext, struct lws *wsi,
    1267  void *ext_user, const struct lws_ext_options *opts,
    1268  const char *o, int len);
    1269 #endif
    1270 
    1283 LWS_EXTERN
    1285  struct lws_context *context, const struct lws_extension *ext,
    1286  struct lws *wsi, enum lws_extension_callback_reasons reason,
    1287  void *user, void *in, size_t len);
    1288 
    1289 /*
    1290  * The internal exts are part of the public abi
    1291  * If we add more extensions, publish the callback here ------v
    1292  */
    1294 
    1310 
    1315  const char *name;
    1336  unsigned int id;
    1343  void *user;
    1346  /* Add new things just above here ---^
    1347  * This is part of the ABI, don't needlessly break compatibility */
    1348 };
    1349 
    1350 struct lws_vhost;
    1351 
    1360 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
    1361 lws_vhost_name_to_protocol(struct lws_vhost *vh, const char *name);
    1362 
    1372 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
    1373 lws_get_protocol(struct lws *wsi);
    1374 
    1376 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
    1377 lws_protocol_get(struct lws *wsi) LWS_WARN_DEPRECATED;
    1378 
    1389 LWS_VISIBLE LWS_EXTERN void *
    1390 lws_protocol_vh_priv_zalloc(struct lws_vhost *vhost, const struct lws_protocols *prot,
    1391  int size);
    1392 
    1402 LWS_VISIBLE LWS_EXTERN void *
    1403 lws_protocol_vh_priv_get(struct lws_vhost *vhost, const struct lws_protocols *prot);
    1404 
    1413 LWS_VISIBLE LWS_EXTERN int
    1414 lws_finalize_startup(struct lws_context *context);
    1415 
    1416 #ifdef LWS_WITH_PLUGINS
    1417 
    1418 /* PLUGINS implies LIBUV */
    1419 
    1420 #define LWS_PLUGIN_API_MAGIC 180
    1421 
    1424  unsigned int api_magic;
    1425  const struct lws_protocols *protocols;
    1427  const struct lws_extension *extensions;
    1429 };
    1430 
    1431 typedef int (*lws_plugin_init_func)(struct lws_context *,
    1432  struct lws_plugin_capability *);
    1433 typedef int (*lws_plugin_destroy_func)(struct lws_context *);
    1434 
    1436 struct lws_plugin {
    1437  struct lws_plugin *list;
    1438 #if (UV_VERSION_MAJOR > 0)
    1439  uv_lib_t lib;
    1440 #else
    1441  void *l;
    1442 #endif
    1443  char name[64];
    1445 };
    1446 
    1447 #endif
    1448 
    1450 
    1451 
    1460 
    1462 #define LWSGS_EMAIL_CONTENT_SIZE 16384
    1463 
    1465 /* SHA-1 binary and hexified versions */
    1467 typedef struct { unsigned char bin[20]; } lwsgw_hash_bin;
    1469 typedef struct { char id[41]; } lwsgw_hash;
    1470 
    1477 };
    1478 
    1481  char username[32];
    1482  char email[100];
    1483  char ip[72];
    1484  unsigned int mask;
    1486  char session[42];
    1487 };
    1488 
    1493 };
    1494 
    1497  enum lws_gs_event event;
    1498  const char *username;
    1499  const char *email;
    1500 };
    1501 
    1503 
    1504 
    1518 
    1520 /*
    1521  * NOTE: These public enums are part of the abi. If you want to add one,
    1522  * add it at where specified so existing users are unaffected.
    1523  */
    1524 
    1528  (1 << 12),
    1535  (1 << 12),
    1551  (1 << 12),
    1556  (1 << 12),
    1580  /****** add new things just above ---^ ******/
    1581 };
    1582 
    1583 #define lws_check_opt(c, f) (((c) & (f)) == (f))
    1584 
    1595  int port;
    1600  const char *iface;
    1607  const struct lws_protocols *protocols;
    1611  const struct lws_extension *extensions;
    1619  const char *ssl_cert_filepath;
    1629  const char *ssl_ca_filepath;
    1631  const char *ssl_cipher_list;
    1635  const char *http_proxy_address;
    1638  unsigned int http_proxy_port;
    1640  int gid;
    1642  int uid;
    1644  unsigned int options;
    1646  void *user;
    1649  int ka_time;
    1659 #ifdef LWS_OPENSSL_SUPPORT
    1665 #else /* maintain structure layout either way */
    1667 #endif
    1668 
    1679  unsigned int count_threads;
    1681  unsigned int fd_limit_per_thread;
    1685  unsigned int timeout_secs;
    1690  const char *ecdh_curve;
    1692  const char *vhost_name;
    1696  const char * const *plugin_dirs;
    1705  const char *log_filepath;
    1708  const struct lws_http_mount *mounts;
    1710  const char *server_string;
    1713  unsigned int pt_serv_buf_size;
    1728  unsigned short ws_ping_pong_interval;
    1759  /* Add new things just above here ---^
    1760  * This is part of the ABI, don't needlessly break compatibility
    1761  *
    1762  * The below is to ensure later library versions with new
    1763  * members added above will see 0 (default) even if the app
    1764  * was not built against the newer headers.
    1765  */
    1766 
    1767  void *_unused[8];
    1768 };
    1769 
    1804 LWS_VISIBLE LWS_EXTERN struct lws_context *
    1806 
    1815 LWS_VISIBLE LWS_EXTERN void
    1816 lws_context_destroy(struct lws_context *context);
    1817 
    1818 LWS_VISIBLE LWS_EXTERN void
    1819 lws_context_destroy2(struct lws_context *context);
    1820 
    1821 typedef int (*lws_reload_func)(void);
    1822 
    1847 LWS_VISIBLE LWS_EXTERN void
    1848 lws_context_deprecate(struct lws_context *context, lws_reload_func cb);
    1849 
    1850 LWS_VISIBLE LWS_EXTERN int
    1851 lws_context_is_deprecated(struct lws_context *context);
    1852 
    1870 LWS_VISIBLE LWS_EXTERN int
    1871 lws_set_proxy(struct lws_vhost *vhost, const char *proxy);
    1872 
    1873 
    1874 struct lws_vhost;
    1875 
    1885 LWS_EXTERN LWS_VISIBLE struct lws_vhost *
    1886 lws_create_vhost(struct lws_context *context,
    1887  struct lws_context_creation_info *info);
    1888 
    1903 LWS_VISIBLE LWS_EXTERN int
    1904 lwsws_get_config_globals(struct lws_context_creation_info *info, const char *d,
    1905  char **config_strings, int *len);
    1906 
    1922 LWS_VISIBLE LWS_EXTERN int
    1923 lwsws_get_config_vhosts(struct lws_context *context,
    1924  struct lws_context_creation_info *info, const char *d,
    1925  char **config_strings, int *len);
    1926 
    1928 LWS_VISIBLE LWS_EXTERN struct lws_vhost *
    1929 lws_vhost_get(struct lws *wsi) LWS_WARN_DEPRECATED;
    1930 
    1936 LWS_VISIBLE LWS_EXTERN struct lws_vhost *
    1937 lws_get_vhost(struct lws *wsi);
    1938 
    1946 LWS_VISIBLE LWS_EXTERN int
    1947 lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len);
    1948 
    1956 LWS_VISIBLE LWS_EXTERN int
    1957 lws_json_dump_context(const struct lws_context *context, char *buf, int len,
    1958  int hide_vhosts);
    1959 
    1969 LWS_VISIBLE LWS_EXTERN void *
    1970 lws_context_user(struct lws_context *context);
    1971 
    1977 
    1987  const char *name;
    1988  const char *value;
    1989 };
    1990 
    2003 };
    2004 
    2012  const char *mountpoint;
    2014  const char *origin;
    2016  const char *def;
    2018  const char *protocol;
    2034  unsigned int auth_mask;
    2037  unsigned int cache_reusable:1;
    2038  unsigned int cache_revalidate:1;
    2039  unsigned int cache_intermediaries:1;
    2041  unsigned char origin_protocol;
    2042  unsigned char mountpoint_len;
    2047  /* Add new things just above here ---^
    2048  * This is part of the ABI, don't needlessly break compatibility
    2049  *
    2050  * The below is to ensure later library versions with new
    2051  * members added above will see 0 (default) even if the app
    2052  * was not built against the newer headers.
    2053  */
    2054 
    2055  void *_unused[2];
    2056 };
    2059 
    2065 
    2073  LCCSCF_USE_SSL = (1 << 0),
    2074  LCCSCF_ALLOW_SELFSIGNED = (1 << 1),
    2075  LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK = (1 << 2),
    2076  LCCSCF_ALLOW_EXPIRED = (1 << 3)
    2077 };
    2078 
    2083  struct lws_context *context;
    2085  const char *address;
    2087  int port;
    2091  const char *path;
    2093  const char *host;
    2095  const char *origin;
    2097  const char *protocol;
    2101  void *userdata;
    2105  const char *method;
    2108  struct lws *parent_wsi;
    2112  const char *uri_replace_from;
    2115  const char *uri_replace_to;
    2117  struct lws_vhost *vhost;
    2119  struct lws **pwsi;
    2131  /* Add new things just above here ---^
    2132  * This is part of the ABI, don't needlessly break compatibility
    2133  *
    2134  * The below is to ensure later library versions with new
    2135  * members added above will see 0 (default) even if the app
    2136  * was not built against the newer headers.
    2137  */
    2138 
    2139  void *_unused[4];
    2140 };
    2141 
    2149 LWS_VISIBLE LWS_EXTERN struct lws *
    2151 
    2172 /* deprecated, use lws_client_connect_via_info() */
    2173 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    2174 lws_client_connect(struct lws_context *clients, const char *address,
    2175  int port, int ssl_connection, const char *path,
    2176  const char *host, const char *origin, const char *protocol,
    2177  int ietf_version_or_minus_one) LWS_WARN_DEPRECATED;
    2178 /* deprecated, use lws_client_connect_via_info() */
    2199 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    2200 lws_client_connect_extended(struct lws_context *clients, const char *address,
    2201  int port, int ssl_connection, const char *path,
    2202  const char *host, const char *origin,
    2203  const char *protocol, int ietf_version_or_minus_one,
    2204  void *userdata) LWS_WARN_DEPRECATED;
    2205 
    2231 LWS_VISIBLE LWS_EXTERN int
    2233  struct lws_vhost *vhost);
    2234 
    2235 LWS_VISIBLE LWS_EXTERN int
    2236 lws_http_client_read(struct lws *wsi, char **buf, int *len);
    2237 
    2245 LWS_VISIBLE LWS_EXTERN unsigned int
    2246 lws_http_client_http_response(struct lws *wsi);
    2247 
    2248 LWS_VISIBLE LWS_EXTERN void
    2249 lws_client_http_body_pending(struct lws *wsi, int something_left_to_send);
    2250 
    2271 
    2280 
    2313 LWS_VISIBLE LWS_EXTERN int
    2314 lws_service(struct lws_context *context, int timeout_ms);
    2315 
    2327 LWS_VISIBLE LWS_EXTERN int
    2328 lws_service_tsi(struct lws_context *context, int timeout_ms, int tsi);
    2329 
    2345 LWS_VISIBLE LWS_EXTERN void
    2346 lws_cancel_service_pt(struct lws *wsi);
    2347 
    2359 LWS_VISIBLE LWS_EXTERN void
    2360 lws_cancel_service(struct lws_context *context);
    2361 
    2388 LWS_VISIBLE LWS_EXTERN int
    2389 lws_service_fd(struct lws_context *context, struct lws_pollfd *pollfd);
    2390 
    2400 LWS_VISIBLE LWS_EXTERN int
    2401 lws_service_fd_tsi(struct lws_context *context, struct lws_pollfd *pollfd,
    2402  int tsi);
    2403 
    2421 LWS_VISIBLE LWS_EXTERN int
    2422 lws_service_adjust_timeout(struct lws_context *context, int timeout_ms, int tsi);
    2423 
    2424 /* Backwards compatibility */
    2425 #define lws_plat_service_tsi lws_service_tsi
    2426 
    2428 
    2434 
    2441 
    2453 LWS_VISIBLE LWS_EXTERN const char *
    2454 lws_get_mimetype(const char *file, const struct lws_http_mount *m);
    2455 
    2474 LWS_VISIBLE LWS_EXTERN int
    2475 lws_serve_http_file(struct lws *wsi, const char *file, const char *content_type,
    2476  const char *other_headers, int other_headers_len);
    2477 LWS_VISIBLE LWS_EXTERN int
    2478 lws_serve_http_file_fragment(struct lws *wsi);
    2480 
    2491 
    2492 enum http_status {
    2493  HTTP_STATUS_OK = 200,
    2494  HTTP_STATUS_NO_CONTENT = 204,
    2495  HTTP_STATUS_PARTIAL_CONTENT = 206,
    2496 
    2497  HTTP_STATUS_MOVED_PERMANENTLY = 301,
    2498  HTTP_STATUS_FOUND = 302,
    2499  HTTP_STATUS_SEE_OTHER = 303,
    2500 
    2501  HTTP_STATUS_BAD_REQUEST = 400,
    2502  HTTP_STATUS_UNAUTHORIZED,
    2503  HTTP_STATUS_PAYMENT_REQUIRED,
    2504  HTTP_STATUS_FORBIDDEN,
    2505  HTTP_STATUS_NOT_FOUND,
    2506  HTTP_STATUS_METHOD_NOT_ALLOWED,
    2507  HTTP_STATUS_NOT_ACCEPTABLE,
    2508  HTTP_STATUS_PROXY_AUTH_REQUIRED,
    2509  HTTP_STATUS_REQUEST_TIMEOUT,
    2510  HTTP_STATUS_CONFLICT,
    2511  HTTP_STATUS_GONE,
    2512  HTTP_STATUS_LENGTH_REQUIRED,
    2513  HTTP_STATUS_PRECONDITION_FAILED,
    2514  HTTP_STATUS_REQ_ENTITY_TOO_LARGE,
    2515  HTTP_STATUS_REQ_URI_TOO_LONG,
    2516  HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE,
    2517  HTTP_STATUS_REQ_RANGE_NOT_SATISFIABLE,
    2518  HTTP_STATUS_EXPECTATION_FAILED,
    2519 
    2520  HTTP_STATUS_INTERNAL_SERVER_ERROR = 500,
    2521  HTTP_STATUS_NOT_IMPLEMENTED,
    2522  HTTP_STATUS_BAD_GATEWAY,
    2523  HTTP_STATUS_SERVICE_UNAVAILABLE,
    2524  HTTP_STATUS_GATEWAY_TIMEOUT,
    2525  HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED,
    2526 };
    2527 
    2529  char *p;
    2530  int len;
    2531  int max_len;
    2532  int final;
    2533 };
    2534 
    2535 typedef const char *(*lws_process_html_state_cb)(void *data, int index);
    2536 
    2538  char *start;
    2539  char swallow[16];
    2540  int pos;
    2541  void *data;
    2542  const char * const *vars;
    2545  lws_process_html_state_cb replace;
    2546 };
    2547 
    2552 LWS_VISIBLE LWS_EXTERN int
    2554  struct lws_process_html_state *s);
    2556 
    2589 
    2597 struct lws_tokens {
    2598  char *token;
    2600 };
    2601 
    2602 /* enum lws_token_indexes
    2603  * these have to be kept in sync with lextable.h / minilex.c
    2604  *
    2605  * NOTE: These public enums are part of the abi. If you want to add one,
    2606  * add it at where specified so existing users are unaffected.
    2607  */
    2608 enum lws_token_indexes {
    2609  WSI_TOKEN_GET_URI = 0,
    2610  WSI_TOKEN_POST_URI = 1,
    2611  WSI_TOKEN_OPTIONS_URI = 2,
    2612  WSI_TOKEN_HOST = 3,
    2613  WSI_TOKEN_CONNECTION = 4,
    2614  WSI_TOKEN_UPGRADE = 5,
    2615  WSI_TOKEN_ORIGIN = 6,
    2616  WSI_TOKEN_DRAFT = 7,
    2617  WSI_TOKEN_CHALLENGE = 8,
    2618  WSI_TOKEN_EXTENSIONS = 9,
    2619  WSI_TOKEN_KEY1 = 10,
    2620  WSI_TOKEN_KEY2 = 11,
    2621  WSI_TOKEN_PROTOCOL = 12,
    2622  WSI_TOKEN_ACCEPT = 13,
    2623  WSI_TOKEN_NONCE = 14,
    2624  WSI_TOKEN_HTTP = 15,
    2625  WSI_TOKEN_HTTP2_SETTINGS = 16,
    2626  WSI_TOKEN_HTTP_ACCEPT = 17,
    2627  WSI_TOKEN_HTTP_AC_REQUEST_HEADERS = 18,
    2628  WSI_TOKEN_HTTP_IF_MODIFIED_SINCE = 19,
    2629  WSI_TOKEN_HTTP_IF_NONE_MATCH = 20,
    2630  WSI_TOKEN_HTTP_ACCEPT_ENCODING = 21,
    2631  WSI_TOKEN_HTTP_ACCEPT_LANGUAGE = 22,
    2632  WSI_TOKEN_HTTP_PRAGMA = 23,
    2633  WSI_TOKEN_HTTP_CACHE_CONTROL = 24,
    2634  WSI_TOKEN_HTTP_AUTHORIZATION = 25,
    2635  WSI_TOKEN_HTTP_COOKIE = 26,
    2636  WSI_TOKEN_HTTP_CONTENT_LENGTH = 27,
    2637  WSI_TOKEN_HTTP_CONTENT_TYPE = 28,
    2638  WSI_TOKEN_HTTP_DATE = 29,
    2639  WSI_TOKEN_HTTP_RANGE = 30,
    2640  WSI_TOKEN_HTTP_REFERER = 31,
    2641  WSI_TOKEN_KEY = 32,
    2642  WSI_TOKEN_VERSION = 33,
    2643  WSI_TOKEN_SWORIGIN = 34,
    2644 
    2645  WSI_TOKEN_HTTP_COLON_AUTHORITY = 35,
    2646  WSI_TOKEN_HTTP_COLON_METHOD = 36,
    2647  WSI_TOKEN_HTTP_COLON_PATH = 37,
    2648  WSI_TOKEN_HTTP_COLON_SCHEME = 38,
    2649  WSI_TOKEN_HTTP_COLON_STATUS = 39,
    2650 
    2651  WSI_TOKEN_HTTP_ACCEPT_CHARSET = 40,
    2652  WSI_TOKEN_HTTP_ACCEPT_RANGES = 41,
    2653  WSI_TOKEN_HTTP_ACCESS_CONTROL_ALLOW_ORIGIN = 42,
    2654  WSI_TOKEN_HTTP_AGE = 43,
    2655  WSI_TOKEN_HTTP_ALLOW = 44,
    2656  WSI_TOKEN_HTTP_CONTENT_DISPOSITION = 45,
    2657  WSI_TOKEN_HTTP_CONTENT_ENCODING = 46,
    2658  WSI_TOKEN_HTTP_CONTENT_LANGUAGE = 47,
    2659  WSI_TOKEN_HTTP_CONTENT_LOCATION = 48,
    2660  WSI_TOKEN_HTTP_CONTENT_RANGE = 49,
    2661  WSI_TOKEN_HTTP_ETAG = 50,
    2662  WSI_TOKEN_HTTP_EXPECT = 51,
    2663  WSI_TOKEN_HTTP_EXPIRES = 52,
    2664  WSI_TOKEN_HTTP_FROM = 53,
    2665  WSI_TOKEN_HTTP_IF_MATCH = 54,
    2666  WSI_TOKEN_HTTP_IF_RANGE = 55,
    2667  WSI_TOKEN_HTTP_IF_UNMODIFIED_SINCE = 56,
    2668  WSI_TOKEN_HTTP_LAST_MODIFIED = 57,
    2669  WSI_TOKEN_HTTP_LINK = 58,
    2670  WSI_TOKEN_HTTP_LOCATION = 59,
    2671  WSI_TOKEN_HTTP_MAX_FORWARDS = 60,
    2672  WSI_TOKEN_HTTP_PROXY_AUTHENTICATE = 61,
    2673  WSI_TOKEN_HTTP_PROXY_AUTHORIZATION = 62,
    2674  WSI_TOKEN_HTTP_REFRESH = 63,
    2675  WSI_TOKEN_HTTP_RETRY_AFTER = 64,
    2676  WSI_TOKEN_HTTP_SERVER = 65,
    2677  WSI_TOKEN_HTTP_SET_COOKIE = 66,
    2678  WSI_TOKEN_HTTP_STRICT_TRANSPORT_SECURITY = 67,
    2679  WSI_TOKEN_HTTP_TRANSFER_ENCODING = 68,
    2680  WSI_TOKEN_HTTP_USER_AGENT = 69,
    2681  WSI_TOKEN_HTTP_VARY = 70,
    2682  WSI_TOKEN_HTTP_VIA = 71,
    2683  WSI_TOKEN_HTTP_WWW_AUTHENTICATE = 72,
    2684 
    2685  WSI_TOKEN_PATCH_URI = 73,
    2686  WSI_TOKEN_PUT_URI = 74,
    2687  WSI_TOKEN_DELETE_URI = 75,
    2688 
    2689  WSI_TOKEN_HTTP_URI_ARGS = 76,
    2690  WSI_TOKEN_PROXY = 77,
    2691  WSI_TOKEN_HTTP_X_REAL_IP = 78,
    2692  WSI_TOKEN_HTTP1_0 = 79,
    2693  WSI_TOKEN_X_FORWARDED_FOR = 80,
    2694 
    2695  /****** add new things just above ---^ ******/
    2696 
    2697  /* use token storage to stash these internally, not for
    2698  * user use */
    2699 
    2700  _WSI_TOKEN_CLIENT_SENT_PROTOCOLS,
    2701  _WSI_TOKEN_CLIENT_PEER_ADDRESS,
    2702  _WSI_TOKEN_CLIENT_URI,
    2703  _WSI_TOKEN_CLIENT_HOST,
    2704  _WSI_TOKEN_CLIENT_ORIGIN,
    2705  _WSI_TOKEN_CLIENT_METHOD,
    2706 
    2707  /* always last real token index*/
    2708  WSI_TOKEN_COUNT,
    2709 
    2710  /* parser state additions, no storage associated */
    2711  WSI_TOKEN_NAME_PART,
    2712  WSI_TOKEN_SKIPPING,
    2713  WSI_TOKEN_SKIPPING_SAW_CR,
    2714  WSI_PARSING_COMPLETE,
    2715  WSI_INIT_TOKEN_MUXURL,
    2716 };
    2717 
    2719  unsigned short token_limit[WSI_TOKEN_COUNT];
    2720 };
    2721 
    2727 LWS_VISIBLE LWS_EXTERN const unsigned char *
    2728 lws_token_to_string(enum lws_token_indexes token);
    2729 
    2730 
    2739 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2740 lws_hdr_total_length(struct lws *wsi, enum lws_token_indexes h);
    2741 
    2751 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2752 lws_hdr_fragment_length(struct lws *wsi, enum lws_token_indexes h, int frag_idx);
    2753 
    2767 LWS_VISIBLE LWS_EXTERN int
    2768 lws_hdr_copy(struct lws *wsi, char *dest, int len, enum lws_token_indexes h);
    2769 
    2787 LWS_VISIBLE LWS_EXTERN int
    2788 lws_hdr_copy_fragment(struct lws *wsi, char *dest, int len,
    2789  enum lws_token_indexes h, int frag_idx);
    2790 
    2801 LWS_VISIBLE LWS_EXTERN const char *
    2802 lws_get_urlarg_by_name(struct lws *wsi, const char *name, char *buf, int len);
    2804 
    2819 
    2830 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2831 lws_add_http_header_status(struct lws *wsi,
    2832  unsigned int code, unsigned char **p,
    2833  unsigned char *end);
    2846 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2847 lws_add_http_header_by_name(struct lws *wsi, const unsigned char *name,
    2848  const unsigned char *value, int length,
    2849  unsigned char **p, unsigned char *end);
    2863 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2864 lws_add_http_header_by_token(struct lws *wsi, enum lws_token_indexes token,
    2865  const unsigned char *value, int length,
    2866  unsigned char **p, unsigned char *end);
    2877 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2878 lws_add_http_header_content_length(struct lws *wsi,
    2879  unsigned long content_length,
    2880  unsigned char **p, unsigned char *end);
    2890 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2891 lws_finalize_http_header(struct lws *wsi, unsigned char **p,
    2892  unsigned char *end);
    2894 
    2913 
    2923 };
    2924 
    2938 typedef int (*lws_spa_fileupload_cb)(void *data, const char *name,
    2939  const char *filename, char *buf, int len,
    2940  enum lws_spa_fileupload_states state);
    2941 
    2944 struct lws_spa;
    2945 
    2964 LWS_VISIBLE LWS_EXTERN struct lws_spa *
    2965 lws_spa_create(struct lws *wsi, const char * const *param_names,
    2966  int count_params, int max_storage, lws_spa_fileupload_cb opt_cb,
    2967  void *opt_data);
    2968 
    2976 LWS_VISIBLE LWS_EXTERN int
    2977 lws_spa_process(struct lws_spa *spa, const char *in, int len);
    2978 
    2984 LWS_VISIBLE LWS_EXTERN int
    2985 lws_spa_finalize(struct lws_spa *spa);
    2986 
    2993 LWS_VISIBLE LWS_EXTERN int
    2994 lws_spa_get_length(struct lws_spa *spa, int n);
    2995 
    3001 LWS_VISIBLE LWS_EXTERN const char *
    3002 lws_spa_get_string(struct lws_spa *spa, int n);
    3003 
    3009 LWS_VISIBLE LWS_EXTERN int
    3010 lws_spa_destroy(struct lws_spa *spa);
    3012 
    3023 
    3034 LWS_VISIBLE LWS_EXTERN const char *
    3035 lws_urlencode(char *escaped, const char *string, int len);
    3036 
    3037 /*
    3038  * URLDECODE 1 / 2
    3039  *
    3040  * This simple urldecode only operates until the first '\0' and requires the
    3041  * data to exist all at once
    3042  */
    3055 LWS_VISIBLE LWS_EXTERN int
    3056 lws_urldecode(char *string, const char *escaped, int len);
    3058 
    3067 LWS_VISIBLE LWS_EXTERN int
    3068 lws_return_http_status(struct lws *wsi, unsigned int code,
    3069  const char *html_body);
    3070 
    3081 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3082 lws_http_redirect(struct lws *wsi, int code, const unsigned char *loc, int len,
    3083  unsigned char **p, unsigned char *end);
    3084 
    3093 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3094 lws_http_transaction_completed(struct lws *wsi);
    3096 
    3104 
    3115 LWS_VISIBLE LWS_EXTERN const char *
    3116 lws_sql_purify(char *escaped, const char *string, int len);
    3117 
    3128 LWS_VISIBLE LWS_EXTERN const char *
    3129 lws_json_purify(char *escaped, const char *string, int len);
    3131 
    3138 
    3140 #ifdef LWS_USE_LIBEV
    3141 typedef void (lws_ev_signal_cb_t)(EV_P_ struct ev_signal *w, int revents);
    3142 
    3143 LWS_VISIBLE LWS_EXTERN int
    3144 lws_ev_sigint_cfg(struct lws_context *context, int use_ev_sigint,
    3145  lws_ev_signal_cb_t *cb);
    3146 
    3147 LWS_VISIBLE LWS_EXTERN int
    3148 lws_ev_initloop(struct lws_context *context, struct ev_loop *loop, int tsi);
    3149 
    3150 LWS_VISIBLE LWS_EXTERN void
    3151 lws_ev_sigint_cb(struct ev_loop *loop, struct ev_signal *watcher, int revents);
    3152 #endif /* LWS_USE_LIBEV */
    3153 
    3155 
    3162 #ifdef LWS_USE_LIBUV
    3164 LWS_VISIBLE LWS_EXTERN int
    3165 lws_uv_sigint_cfg(struct lws_context *context, int use_uv_sigint,
    3166  uv_signal_cb cb);
    3167 
    3168 LWS_VISIBLE LWS_EXTERN void
    3169 lws_libuv_run(const struct lws_context *context, int tsi);
    3170 
    3171 LWS_VISIBLE LWS_EXTERN void
    3172 lws_libuv_stop(struct lws_context *context);
    3173 
    3174 LWS_VISIBLE LWS_EXTERN void
    3175 lws_libuv_stop_without_kill(const struct lws_context *context, int tsi);
    3176 
    3177 LWS_VISIBLE LWS_EXTERN int
    3178 lws_uv_initloop(struct lws_context *context, uv_loop_t *loop, int tsi);
    3179 
    3180 LWS_VISIBLE LWS_EXTERN uv_loop_t *
    3181 lws_uv_getloop(struct lws_context *context, int tsi);
    3182 
    3183 LWS_VISIBLE LWS_EXTERN void
    3184 lws_uv_sigint_cb(uv_signal_t *watcher, int signum);
    3185 #endif /* LWS_USE_LIBUV */
    3186 
    3193 
    3194 /*
    3195  * NOTE: These public enums are part of the abi. If you want to add one,
    3196  * add it at where specified so existing users are unaffected.
    3197  */
    3198 enum pending_timeout {
    3199  NO_PENDING_TIMEOUT = 0,
    3200  PENDING_TIMEOUT_AWAITING_PROXY_RESPONSE = 1,
    3201  PENDING_TIMEOUT_AWAITING_CONNECT_RESPONSE = 2,
    3202  PENDING_TIMEOUT_ESTABLISH_WITH_SERVER = 3,
    3203  PENDING_TIMEOUT_AWAITING_SERVER_RESPONSE = 4,
    3204  PENDING_TIMEOUT_AWAITING_PING = 5,
    3205  PENDING_TIMEOUT_CLOSE_ACK = 6,
    3206  PENDING_TIMEOUT_AWAITING_EXTENSION_CONNECT_RESPONSE = 7,
    3207  PENDING_TIMEOUT_SENT_CLIENT_HANDSHAKE = 8,
    3208  PENDING_TIMEOUT_SSL_ACCEPT = 9,
    3209  PENDING_TIMEOUT_HTTP_CONTENT = 10,
    3210  PENDING_TIMEOUT_AWAITING_CLIENT_HS_SEND = 11,
    3211  PENDING_FLUSH_STORED_SEND_BEFORE_CLOSE = 12,
    3212  PENDING_TIMEOUT_SHUTDOWN_FLUSH = 13,
    3213  PENDING_TIMEOUT_CGI = 14,
    3214  PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE = 15,
    3215  PENDING_TIMEOUT_WS_PONG_CHECK_SEND_PING = 16,
    3216  PENDING_TIMEOUT_WS_PONG_CHECK_GET_PONG = 17,
    3217  PENDING_TIMEOUT_CLIENT_ISSUE_PAYLOAD = 18,
    3218 
    3219  /****** add new things just above ---^ ******/
    3220 };
    3221 
    3231 LWS_VISIBLE LWS_EXTERN void
    3232 lws_set_timeout(struct lws *wsi, enum pending_timeout reason, int secs);
    3234 
    3240 #if !defined(LWS_SIZEOFPTR)
    3241 #define LWS_SIZEOFPTR (sizeof (void *))
    3242 #endif
    3243 #if !defined(u_int64_t)
    3244 #define u_int64_t unsigned long long
    3245 #endif
    3246 
    3247 #if defined(__x86_64__)
    3248 #define _LWS_PAD_SIZE 16 /* Intel recommended for best performance */
    3249 #else
    3250 #define _LWS_PAD_SIZE LWS_SIZEOFPTR /* Size of a pointer on the target arch */
    3251 #endif
    3252 #define _LWS_PAD(n) (((n) % _LWS_PAD_SIZE) ? \
    3253  ((n) + (_LWS_PAD_SIZE - ((n) % _LWS_PAD_SIZE))) : (n))
    3254 #define LWS_PRE _LWS_PAD(4 + 10)
    3255 /* used prior to 1.7 and retained for backward compatibility */
    3256 #define LWS_SEND_BUFFER_PRE_PADDING LWS_PRE
    3257 #define LWS_SEND_BUFFER_POST_PADDING 0
    3258 
    3259 /*
    3260  * NOTE: These public enums are part of the abi. If you want to add one,
    3261  * add it at where specified so existing users are unaffected.
    3262  */
    3277  /* LWS_WRITE_CLOSE is handled by lws_close_reason() */
    3278  LWS_WRITE_PING = 5,
    3279  LWS_WRITE_PONG = 6,
    3280 
    3281  /* Same as write_http but we know this write ends the transaction */
    3282  LWS_WRITE_HTTP_FINAL = 7,
    3283 
    3284  /* HTTP2 */
    3285 
    3293  /****** add new things just above ---^ ******/
    3294 
    3295  /* flags */
    3296 
    3304 };
    3305 
    3306 
    3393 LWS_VISIBLE LWS_EXTERN int
    3394 lws_write(struct lws *wsi, unsigned char *buf, size_t len,
    3395  enum lws_write_protocol protocol);
    3396 
    3397 /* helper for case where buffer may be const */
    3398 #define lws_write_http(wsi, buf, len) \
    3399  lws_write(wsi, (unsigned char *)(buf), len, LWS_WRITE_HTTP)
    3400 
    3420 
    3433 LWS_VISIBLE LWS_EXTERN int
    3434 lws_callback_on_writable(struct lws *wsi);
    3435 
    3449 LWS_VISIBLE LWS_EXTERN int
    3450 lws_callback_on_writable_all_protocol(const struct lws_context *context,
    3451  const struct lws_protocols *protocol);
    3452 
    3466 LWS_VISIBLE LWS_EXTERN int
    3467 lws_callback_on_writable_all_protocol_vhost(const struct lws_vhost *vhost,
    3468  const struct lws_protocols *protocol);
    3469 
    3482 LWS_VISIBLE LWS_EXTERN int
    3483 lws_callback_all_protocol(struct lws_context *context,
    3484  const struct lws_protocols *protocol, int reason);
    3485 
    3498 LWS_VISIBLE LWS_EXTERN int
    3499 lws_callback_all_protocol_vhost(struct lws_vhost *vh,
    3500  const struct lws_protocols *protocol, int reason);
    3501 
    3515 LWS_VISIBLE LWS_EXTERN int
    3516 lws_callback_vhost_protocols(struct lws *wsi, int reason, void *in, int len);
    3517 
    3518 LWS_VISIBLE LWS_EXTERN int
    3519 lws_callback_http_dummy(struct lws *wsi, enum lws_callback_reasons reason,
    3520  void *user, void *in, size_t len);
    3521 
    3529 LWS_VISIBLE LWS_EXTERN int
    3530 lws_get_socket_fd(struct lws *wsi);
    3531 
    3553 LWS_VISIBLE LWS_EXTERN size_t
    3554 lws_get_peer_write_allowance(struct lws *wsi);
    3556 
    3567 LWS_VISIBLE LWS_EXTERN int
    3568 lws_rx_flow_control(struct lws *wsi, int enable);
    3569 
    3579 LWS_VISIBLE LWS_EXTERN void
    3580 lws_rx_flow_allow_all_protocol(const struct lws_context *context,
    3581  const struct lws_protocols *protocol);
    3582 
    3599 LWS_VISIBLE LWS_EXTERN size_t
    3600 lws_remaining_packet_payload(struct lws *wsi);
    3601 
    3602 
    3611 
    3625 LWS_VISIBLE LWS_EXTERN struct lws *
    3626 lws_adopt_socket(struct lws_context *context, lws_sockfd_type accept_fd);
    3639 LWS_VISIBLE LWS_EXTERN struct lws *
    3640 lws_adopt_socket_vhost(struct lws_vhost *vh, lws_sockfd_type accept_fd);
    3664 LWS_VISIBLE LWS_EXTERN struct lws *
    3665 lws_adopt_socket_readbuf(struct lws_context *context, lws_sockfd_type accept_fd,
    3666  const char *readbuf, size_t len);
    3690 LWS_VISIBLE LWS_EXTERN struct lws *
    3691 lws_adopt_socket_vhost_readbuf(struct lws_vhost *vhost, lws_sockfd_type accept_fd,
    3692  const char *readbuf, size_t len);
    3694 
    3700 
    3711 LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT
    3712 lws_canonical_hostname(struct lws_context *context);
    3713 
    3728 LWS_VISIBLE LWS_EXTERN void
    3729 lws_get_peer_addresses(struct lws *wsi, lws_sockfd_type fd, char *name,
    3730  int name_len, char *rip, int rip_len);
    3731 
    3742 LWS_VISIBLE LWS_EXTERN const char *
    3743 lws_get_peer_simple(struct lws *wsi, char *name, int namelen);
    3744 #ifndef LWS_WITH_ESP8266
    3745 
    3756 LWS_VISIBLE LWS_EXTERN int
    3757 lws_interface_to_sa(int ipv6, const char *ifname, struct sockaddr_in *addr,
    3758  size_t addrlen);
    3760 #endif
    3761 
    3767 
    3780 LWS_VISIBLE LWS_EXTERN int
    3781 lws_snprintf(char *str, size_t size, const char *format, ...);
    3782 
    3794 LWS_VISIBLE LWS_EXTERN int
    3795 lws_get_random(struct lws_context *context, void *buf, int len);
    3803 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3804 lws_daemonize(const char *_lock_path);
    3810 LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT
    3812 
    3819 LWS_VISIBLE LWS_EXTERN void *
    3820 lws_wsi_user(struct lws *wsi);
    3821 
    3833 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3834 lws_parse_uri(char *p, const char **prot, const char **ads, int *port,
    3835  const char **path);
    3836 
    3840 LWS_VISIBLE LWS_EXTERN unsigned long
    3841 lws_now_secs(void);
    3842 
    3852 LWS_VISIBLE LWS_EXTERN struct lws_context * LWS_WARN_UNUSED_RESULT
    3853 lws_get_context(const struct lws *wsi);
    3854 
    3864 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3865 lws_get_count_threads(struct lws_context *context);
    3866 
    3874 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    3875 lws_get_parent(const struct lws *wsi);
    3876 
    3883 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    3884 lws_get_child(const struct lws *wsi);
    3885 
    3886 
    3887 /*
    3888  * \deprecated DEPRECATED Note: this is not normally needed as a user api.
    3889  * It's provided in case it is
    3890  * useful when integrating with other app poll loop service code.
    3891  */
    3892 LWS_VISIBLE LWS_EXTERN int
    3893 lws_read(struct lws *wsi, unsigned char *buf, size_t len);
    3894 
    3902 LWS_VISIBLE LWS_EXTERN void
    3903 lws_set_allocator(void *(*realloc)(void *ptr, size_t size));
    3905 
    3911 
    3918 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3919 lws_send_pipe_choked(struct lws *wsi);
    3920 
    3925 LWS_VISIBLE LWS_EXTERN int
    3926 lws_is_final_fragment(struct lws *wsi);
    3927 
    3932 LWS_VISIBLE LWS_EXTERN unsigned char
    3933 lws_get_reserved_bits(struct lws *wsi);
    3934 
    3951 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3952 lws_partial_buffered(struct lws *wsi);
    3953 
    3963 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3964 lws_frame_is_binary(struct lws *wsi);
    3965 
    3974 LWS_VISIBLE LWS_EXTERN int
    3975 lws_is_ssl(struct lws *wsi);
    3980 LWS_VISIBLE LWS_EXTERN int
    3981 lws_is_cgi(struct lws *wsi);
    3983 
    3984 
    3990 #ifdef LWS_SHA1_USE_OPENSSL_NAME
    3992 #define lws_SHA1 SHA1
    3993 #else
    3994 
    4003 LWS_VISIBLE LWS_EXTERN unsigned char *
    4004 lws_SHA1(const unsigned char *d, size_t n, unsigned char *md);
    4005 #endif
    4006 
    4016 LWS_VISIBLE LWS_EXTERN int
    4017 lws_b64_encode_string(const char *in, int in_len, char *out, int out_size);
    4027 LWS_VISIBLE LWS_EXTERN int
    4028 lws_b64_decode_string(const char *in, char *out, int out_size);
    4030 
    4031 
    4041 #ifdef LWS_WITH_CGI
    4042 enum lws_enum_stdinouterr {
    4043  LWS_STDIN = 0,
    4044  LWS_STDOUT = 1,
    4045  LWS_STDERR = 2,
    4046 };
    4047 
    4048 enum lws_cgi_hdr_state {
    4049  LCHS_HEADER,
    4050  LCHS_CR1,
    4051  LCHS_LF1,
    4052  LCHS_CR2,
    4053  LCHS_LF2,
    4054  LHCS_PAYLOAD,
    4055  LCHS_SINGLE_0A,
    4056 };
    4057 
    4059  struct lws **stdwsi;
    4060  enum lws_enum_stdinouterr ch;
    4061  unsigned char *data;
    4062  enum lws_cgi_hdr_state hdr_state;
    4063  int len;
    4064 };
    4065 
    4066 
    4076 LWS_VISIBLE LWS_EXTERN int
    4077 lws_cgi(struct lws *wsi, const char * const *exec_array,
    4078  int script_uri_path_len, int timeout_secs,
    4079  const struct lws_protocol_vhost_options *mp_cgienv);
    4080 
    4086 LWS_VISIBLE LWS_EXTERN int
    4087 lws_cgi_write_split_stdout_headers(struct lws *wsi);
    4088 
    4094 LWS_VISIBLE LWS_EXTERN int
    4095 lws_cgi_kill(struct lws *wsi);
    4096 #endif
    4097 
    4099 
    4116 
    4123  lws_filefd_type (*open)(struct lws *wsi, const char *filename,
    4124  unsigned long *filelen, int flags);
    4128  int (*close)(struct lws *wsi, lws_filefd_type fd);
    4130  unsigned long (*seek_cur)(struct lws *wsi, lws_filefd_type fd,
    4131  long offset_from_cur_pos);
    4133  int (*read)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    4134  unsigned char *buf, unsigned long len);
    4136  int (*write)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    4137  unsigned char *buf, unsigned long len);
    4140  /* Add new things just above here ---^
    4141  * This is part of the ABI, don't needlessly break compatibility */
    4142 };
    4143 
    4149 LWS_VISIBLE LWS_EXTERN struct lws_plat_file_ops * LWS_WARN_UNUSED_RESULT
    4150 lws_get_fops(struct lws_context *context);
    4151 
    4160 static LWS_INLINE lws_filefd_type LWS_WARN_UNUSED_RESULT
    4161 lws_plat_file_open(struct lws *wsi, const char *filename,
    4162  unsigned long *filelen, int flags)
    4163 {
    4164  return lws_get_fops(lws_get_context(wsi))->open(wsi, filename,
    4165  filelen, flags);
    4166 }
    4167 
    4174 static LWS_INLINE int
    4175 lws_plat_file_close(struct lws *wsi, lws_filefd_type fd)
    4176 {
    4177  return lws_get_fops(lws_get_context(wsi))->close(wsi, fd);
    4178 }
    4179 
    4187 static LWS_INLINE unsigned long
    4188 lws_plat_file_seek_cur(struct lws *wsi, lws_filefd_type fd, long offset)
    4189 {
    4190  return lws_get_fops(lws_get_context(wsi))->seek_cur(wsi, fd, offset);
    4191 }
    4201 static LWS_INLINE int LWS_WARN_UNUSED_RESULT
    4202 lws_plat_file_read(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    4203  unsigned char *buf, unsigned long len)
    4204 {
    4205  return lws_get_fops(lws_get_context(wsi))->read(wsi, fd, amount, buf,
    4206  len);
    4207 }
    4217 static LWS_INLINE int LWS_WARN_UNUSED_RESULT
    4218 lws_plat_file_write(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    4219  unsigned char *buf, unsigned long len)
    4220 {
    4221  return lws_get_fops(lws_get_context(wsi))->write(wsi, fd, amount, buf,
    4222  len);
    4223 }
    4225 
    4257 #ifdef LWS_WITH_SMTP
    4258 
    4270 };
    4271 
    4273 struct lws_email {
    4274  void *data;
    4276  uv_loop_t *loop;
    4279  char email_smtp_ip[32];
    4280  char email_helo[32];
    4281  char email_from[100];
    4282  char email_to[100];
    4284  unsigned int max_content_size;
    4287  /* Fill all the callbacks before init */
    4288 
    4289  int (*on_next)(struct lws_email *email);
    4294  int (*on_sent)(struct lws_email *email);
    4299  int (*on_get_body)(struct lws_email *email, char *buf, int len);
    4305  /* private things */
    4306  uv_timer_t timeout_email;
    4308  uv_connect_t email_connect_req;
    4309  uv_tcp_t email_client;
    4311  char email_buf[256];
    4312  char *content;
    4313 };
    4314 
    4324 LWS_VISIBLE LWS_EXTERN int
    4325 lws_email_init(struct lws_email *email, uv_loop_t *loop, int max_content);
    4326 
    4335 LWS_VISIBLE LWS_EXTERN void
    4336 lws_email_check(struct lws_email *email);
    4344 LWS_VISIBLE LWS_EXTERN void
    4345 lws_email_destroy(struct lws_email *email);
    4346 
    4347 #endif
    4348 
    4349 
    4350 #ifdef __cplusplus
    4351 }
    4352 #endif
    4353 
    4354 #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 #if defined(MBED_OPERATORS) || defined(LWS_WITH_ESP8266)
    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 <fcntl.h>
    120 #else
    121 #define _O_RDONLY 0x0000
    122 #define O_RDONLY _O_RDONLY
    123 #endif
    124 
    125 // Visual studio older than 2015 and WIN_CE has only _stricmp
    126 #if (defined(_MSC_VER) && _MSC_VER < 1900) || defined(_WIN32_WCE)
    127 #define strcasecmp _stricmp
    128 #elif !defined(__MINGW32__)
    129 #define strcasecmp stricmp
    130 #endif
    131 #define getdtablesize() 30000
    132 
    133 #define LWS_INLINE __inline
    134 #define LWS_VISIBLE
    135 #define LWS_WARN_UNUSED_RESULT
    136 #define LWS_WARN_DEPRECATED
    137 
    138 #ifdef LWS_DLL
    139 #ifdef LWS_INTERNAL
    140 #define LWS_EXTERN extern __declspec(dllexport)
    141 #else
    142 #define LWS_EXTERN extern __declspec(dllimport)
    143 #endif
    144 #else
    145 #define LWS_EXTERN
    146 #endif
    147 
    148 #define LWS_INVALID_FILE INVALID_HANDLE_VALUE
    149 #define LWS_O_RDONLY _O_RDONLY
    150 
    151 #if !defined(__MINGW32__) && (!defined(_MSC_VER) || _MSC_VER < 1900) /* Visual Studio 2015 already defines this in <stdio.h> */
    152 #define lws_snprintf _snprintf
    153 #endif
    154 
    155 #ifndef __func__
    156 #define __func__ __FUNCTION__
    157 #endif
    158 
    159 #else /* NOT WIN32 */
    160 #include <unistd.h>
    161 
    162 #if defined(__NetBSD__) || defined(__FreeBSD__)
    163 #include <netinet/in.h>
    164 #endif
    165 
    166 #define LWS_INLINE inline
    167 #define LWS_O_RDONLY O_RDONLY
    168 
    169 #if !defined(MBED_OPERATORS) && !defined(LWS_WITH_ESP8266) && !defined(OPTEE_TA)
    170 #include <poll.h>
    171 #include <netdb.h>
    172 #define LWS_INVALID_FILE -1
    173 #else
    174 #define getdtablesize() (20)
    175 #define LWS_INVALID_FILE NULL
    176 #endif
    177 
    178 #if defined(__GNUC__)
    179 
    180 /* warn_unused_result attribute only supported by GCC 3.4 or later */
    181 #if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
    182 #define LWS_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
    183 #else
    184 #define LWS_WARN_UNUSED_RESULT
    185 #endif
    186 
    187 #define LWS_VISIBLE __attribute__((visibility("default")))
    188 #define LWS_WARN_DEPRECATED __attribute__ ((deprecated))
    189 #else
    190 #define LWS_VISIBLE
    191 #define LWS_WARN_UNUSED_RESULT
    192 #define LWS_WARN_DEPRECATED
    193 #endif
    194 
    195 #if defined(__ANDROID__)
    196 #include <unistd.h>
    197 #define getdtablesize() sysconf(_SC_OPEN_MAX)
    198 #endif
    199 
    200 #endif
    201 
    202 #ifdef LWS_USE_LIBEV
    203 #include <ev.h>
    204 #endif /* LWS_USE_LIBEV */
    205 #ifdef LWS_USE_LIBUV
    206 #include <uv.h>
    207 #ifdef LWS_HAVE_UV_VERSION_H
    208 #include <uv-version.h>
    209 #endif
    210 #endif /* LWS_USE_LIBUV */
    211 
    212 #ifndef LWS_EXTERN
    213 #define LWS_EXTERN extern
    214 #endif
    215 
    216 #ifdef _WIN32
    217 #define random rand
    218 #else
    219 #if !defined(OPTEE_TA)
    220 #include <sys/time.h>
    221 #include <unistd.h>
    222 #endif
    223 #endif
    224 
    225 #ifdef LWS_OPENSSL_SUPPORT
    226 
    227 #ifdef USE_WOLFSSL
    228 #ifdef USE_OLD_CYASSL
    229 #include <cyassl/openssl/ssl.h>
    230 #include <cyassl/error-ssl.h>
    231 #else
    232 #include <wolfssl/openssl/ssl.h>
    233 #include <wolfssl/error-ssl.h>
    234 #endif /* not USE_OLD_CYASSL */
    235 #else
    236 #if defined(LWS_USE_POLARSSL)
    237 #include <polarssl/ssl.h>
    239  x509_crt ca;
    240  x509_crt certificate;
    241  rsa_context key;
    242 };
    243 typedef struct lws_polarssl_context SSL_CTX;
    244 typedef ssl_context SSL;
    245 #else
    246 #if defined(LWS_USE_MBEDTLS)
    247 #include <mbedtls/ssl.h>
    248 #else
    249 #include <openssl/ssl.h>
    250 #include <openssl/err.h>
    251 #endif /* not USE_MBEDTLS */
    252 #endif /* not USE_POLARSSL */
    253 #endif /* not USE_WOLFSSL */
    254 #endif
    255 
    256 
    257 #define CONTEXT_PORT_NO_LISTEN -1
    258 #define CONTEXT_PORT_NO_LISTEN_SERVER -2
    259 
    270 
    272 enum lws_log_levels {
    273  LLL_ERR = 1 << 0,
    274  LLL_WARN = 1 << 1,
    275  LLL_NOTICE = 1 << 2,
    276  LLL_INFO = 1 << 3,
    277  LLL_DEBUG = 1 << 4,
    278  LLL_PARSER = 1 << 5,
    279  LLL_HEADER = 1 << 6,
    280  LLL_EXT = 1 << 7,
    281  LLL_CLIENT = 1 << 8,
    282  LLL_LATENCY = 1 << 9,
    283 
    284  LLL_COUNT = 10 /* set to count of valid flags */
    285 };
    286 
    287 LWS_VISIBLE LWS_EXTERN void _lws_log(int filter, const char *format, ...);
    288 LWS_VISIBLE LWS_EXTERN void _lws_logv(int filter, const char *format, va_list vl);
    298 LWS_VISIBLE LWS_EXTERN int
    299 lwsl_timestamp(int level, char *p, int len);
    300 
    301 #define lwsl_err(...) _lws_log(LLL_ERR, __VA_ARGS__)
    302 
    303 #if !defined(LWS_WITH_NO_LOGS)
    304 /* notice, warn and log are always compiled in */
    305 #define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__)
    306 #define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__)
    307 #endif
    308 /*
    309  * weaker logging can be deselected at configure time using --disable-debug
    310  * that gets rid of the overhead of checking while keeping _warn and _err
    311  * active
    312  */
    313 
    314 #if defined(LWS_WITH_ESP8266)
    315 #undef _DEBUG
    316 #endif
    317 
    318 #ifdef _DEBUG
    319 #if defined(LWS_WITH_NO_LOGS)
    320 /* notice, warn and log are always compiled in */
    321 //#define lwsl_err(...) _lws_log(LLL_ERR, __VA_ARGS__)
    322 #define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__)
    323 #define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__)
    324 #endif
    325 #define lwsl_info(...) _lws_log(LLL_INFO, __VA_ARGS__)
    326 #define lwsl_debug(...) _lws_log(LLL_DEBUG, __VA_ARGS__)
    327 #define lwsl_parser(...) _lws_log(LLL_PARSER, __VA_ARGS__)
    328 #define lwsl_header(...) _lws_log(LLL_HEADER, __VA_ARGS__)
    329 #define lwsl_ext(...) _lws_log(LLL_EXT, __VA_ARGS__)
    330 #define lwsl_client(...) _lws_log(LLL_CLIENT, __VA_ARGS__)
    331 #define lwsl_latency(...) _lws_log(LLL_LATENCY, __VA_ARGS__)
    332 
    338 LWS_VISIBLE LWS_EXTERN void lwsl_hexdump(void *buf, size_t len);
    339 
    340 #else /* no debug */
    341 #if defined(LWS_WITH_NO_LOGS)
    342 //#define lwsl_err(...) do {} while(0)
    343 #define lwsl_warn(...) do {} while(0)
    344 #define lwsl_notice(...) do {} while(0)
    345 #endif
    346 #define lwsl_info(...) do {} while(0)
    347 #define lwsl_debug(...) do {} while(0)
    348 #define lwsl_parser(...) do {} while(0)
    349 #define lwsl_header(...) do {} while(0)
    350 #define lwsl_ext(...) do {} while(0)
    351 #define lwsl_client(...) do {} while(0)
    352 #define lwsl_latency(...) do {} while(0)
    353 #define lwsl_hexdump(a, b)
    354 
    355 #endif
    356 
    367 LWS_VISIBLE LWS_EXTERN void
    368 lws_set_log_level(int level,
    369  void (*log_emit_function)(int level, const char *line));
    370 
    380 LWS_VISIBLE LWS_EXTERN void
    381 lwsl_emit_syslog(int level, const char *line);
    382 
    384 
    385 
    386 #include <stddef.h>
    387 
    388 #ifndef lws_container_of
    389 #define lws_container_of(P,T,M) ((T *)((char *)(P) - offsetof(T, M)))
    390 #endif
    391 
    392 
    393 struct lws;
    394 #ifndef ARRAY_SIZE
    395 #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
    396 #endif
    397 
    398 /* api change list for user code to test against */
    399 
    400 #define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_ARG
    401 
    402 /* the struct lws_protocols has the id field present */
    403 #define LWS_FEATURE_PROTOCOLS_HAS_ID_FIELD
    404 
    405 /* you can call lws_get_peer_write_allowance */
    406 #define LWS_FEATURE_PROTOCOLS_HAS_PEER_WRITE_ALLOWANCE
    407 
    408 /* extra parameter introduced in 917f43ab821 */
    409 #define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_LEN
    410 
    411 /* File operations stuff exists */
    412 #define LWS_FEATURE_FOPS
    413 
    414 
    415 #if defined(_WIN32)
    416 typedef SOCKET lws_sockfd_type;
    417 typedef HANDLE lws_filefd_type;
    418 #define lws_sockfd_valid(sfd) (!!sfd)
    419 struct lws_pollfd {
    420  lws_sockfd_type fd;
    421  SHORT events;
    422  SHORT revents;
    423 };
    424 #define LWS_POLLHUP (FD_CLOSE)
    425 #define LWS_POLLIN (FD_READ | FD_ACCEPT)
    426 #define LWS_POLLOUT (FD_WRITE)
    427 #else
    428 
    429 #if defined(MBED_OPERATORS)
    430 /* it's a class lws_conn * */
    431 typedef void * lws_sockfd_type;
    432 typedef void * lws_filefd_type;
    433 #define lws_sockfd_valid(sfd) (!!sfd)
    434 struct pollfd {
    435  lws_sockfd_type fd;
    436  short events;
    437  short revents;
    438 };
    439 #define POLLIN 0x0001
    440 #define POLLPRI 0x0002
    441 #define POLLOUT 0x0004
    442 #define POLLERR 0x0008
    443 #define POLLHUP 0x0010
    444 #define POLLNVAL 0x0020
    445 
    446 struct lws;
    447 
    448 void * mbed3_create_tcp_stream_socket(void);
    449 void mbed3_delete_tcp_stream_socket(void *sockfd);
    450 void mbed3_tcp_stream_bind(void *sock, int port, struct lws *);
    451 void mbed3_tcp_stream_accept(void *sock, struct lws *);
    452 #else
    453 #if defined(LWS_WITH_ESP8266)
    454 
    455 #include <user_interface.h>
    456 #include <espconn.h>
    457 
    458 typedef struct espconn * lws_sockfd_type;
    459 typedef void * lws_filefd_type;
    460 #define lws_sockfd_valid(sfd) (!!sfd)
    461 struct pollfd {
    462  lws_sockfd_type fd;
    463  short events;
    464  short revents;
    465 };
    466 #define POLLIN 0x0001
    467 #define POLLPRI 0x0002
    468 #define POLLOUT 0x0004
    469 #define POLLERR 0x0008
    470 #define POLLHUP 0x0010
    471 #define POLLNVAL 0x0020
    472 
    473 struct lws_vhost;
    474 
    475 lws_sockfd_type esp8266_create_tcp_listen_socket(struct lws_vhost *vh);
    476 void esp8266_tcp_stream_accept(lws_sockfd_type fd, struct lws *wsi);
    477 
    478 #include <os_type.h>
    479 #include <osapi.h>
    480 #include "ets_sys.h"
    481 
    482 int ets_snprintf(char *str, size_t size, const char *format, ...);
    483 #define snprintf ets_snprintf
    484 
    485 typedef os_timer_t uv_timer_t;
    486 typedef void uv_cb_t(uv_timer_t *);
    487 
    488 void os_timer_disarm(void *);
    489 void os_timer_setfn(os_timer_t *, os_timer_func_t *, void *);
    490 
    491 void ets_timer_arm_new(os_timer_t *, int, int, int);
    492 
    493 //void os_timer_arm(os_timer_t *, int, int);
    494 
    495 #define UV_VERSION_MAJOR 1
    496 
    497 #define lws_uv_getloop(a, b) (NULL)
    498 
    499 static inline void uv_timer_init(void *l, uv_timer_t *t)
    500 {
    501  (void)l;
    502  memset(t, 0, sizeof(*t));
    503  os_timer_disarm(t);
    504 }
    505 
    506 static inline void uv_timer_start(uv_timer_t *t, uv_cb_t *cb, int first, int rep)
    507 {
    508  os_timer_setfn(t, (os_timer_func_t *)cb, t);
    509  /* ms, repeat */
    510  os_timer_arm(t, first, !!rep);
    511 }
    512 
    513 static inline void uv_timer_stop(uv_timer_t *t)
    514 {
    515  os_timer_disarm(t);
    516 }
    517 
    518 #else
    519 typedef int lws_sockfd_type;
    520 typedef int lws_filefd_type;
    521 #define lws_sockfd_valid(sfd) (sfd >= 0)
    522 #endif
    523 #endif
    524 
    525 #define lws_pollfd pollfd
    526 #define LWS_POLLHUP (POLLHUP|POLLERR)
    527 #define LWS_POLLIN (POLLIN)
    528 #define LWS_POLLOUT (POLLOUT)
    529 #endif
    530 
    533 struct lws_pollargs {
    534  lws_sockfd_type fd;
    535  int events;
    537 };
    538 
    539 struct lws_tokens;
    540 struct lws_token_limits;
    541 
    549 
    551 /*
    552  * NOTE: These public enums are part of the abi. If you want to add one,
    553  * add it at where specified so existing users are unaffected.
    554  */
    557  LWS_CLOSE_STATUS_NOSTATUS = 0,
    619  /****** add new things just above ---^ ******/
    620 
    621  LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY = 9999,
    622 };
    623 
    636 LWS_VISIBLE LWS_EXTERN void
    637 lws_close_reason(struct lws *wsi, enum lws_close_status status,
    638  unsigned char *buf, size_t len);
    639 
    641 
    642 struct lws;
    643 struct lws_context;
    644 /* needed even with extensions disabled for create context */
    645 struct lws_extension;
    646 
    658 
    660 
    661 /*
    662  * NOTE: These public enums are part of the abi. If you want to add one,
    663  * add it at where specified so existing users are unaffected.
    664  */
    908  /* external poll() management support */
    971  LWS_CALLBACK_WS_EXT_DEFAULTS = 39,
    974  LWS_CALLBACK_CGI = 40,
    976  LWS_CALLBACK_CGI_TERMINATED = 41,
    978  LWS_CALLBACK_CGI_STDIN_DATA = 42,
    980  LWS_CALLBACK_CGI_STDIN_COMPLETED = 43,
    982  LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP = 44,
    984  LWS_CALLBACK_CLOSED_CLIENT_HTTP = 45,
    986  LWS_CALLBACK_RECEIVE_CLIENT_HTTP = 46,
    988  LWS_CALLBACK_COMPLETED_CLIENT_HTTP = 47,
    990  LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ = 48,
    992  LWS_CALLBACK_HTTP_BIND_PROTOCOL = 49,
    994  LWS_CALLBACK_HTTP_DROP_PROTOCOL = 50,
    996  LWS_CALLBACK_CHECK_ACCESS_RIGHTS = 51,
    998  LWS_CALLBACK_PROCESS_HTML = 52,
    1000  LWS_CALLBACK_ADD_HEADERS = 53,
    1002  LWS_CALLBACK_SESSION_INFO = 54,
    1005  LWS_CALLBACK_GS_EVENT = 55,
    1052  /****** add new things just above ---^ ******/
    1053 
    1056 };
    1057 
    1058 
    1059 
    1075 typedef int
    1076 lws_callback_function(struct lws *wsi, enum lws_callback_reasons reason,
    1077  void *user, void *in, size_t len);
    1079 
    1089 
    1091 /*
    1092  * NOTE: These public enums are part of the abi. If you want to add one,
    1093  * add it at where specified so existing users are unaffected.
    1094  */
    1095 enum lws_extension_callback_reasons {
    1096  LWS_EXT_CB_SERVER_CONTEXT_CONSTRUCT = 0,
    1097  LWS_EXT_CB_CLIENT_CONTEXT_CONSTRUCT = 1,
    1098  LWS_EXT_CB_SERVER_CONTEXT_DESTRUCT = 2,
    1099  LWS_EXT_CB_CLIENT_CONTEXT_DESTRUCT = 3,
    1100  LWS_EXT_CB_CONSTRUCT = 4,
    1101  LWS_EXT_CB_CLIENT_CONSTRUCT = 5,
    1102  LWS_EXT_CB_CHECK_OK_TO_REALLY_CLOSE = 6,
    1103  LWS_EXT_CB_CHECK_OK_TO_PROPOSE_EXTENSION = 7,
    1104  LWS_EXT_CB_DESTROY = 8,
    1105  LWS_EXT_CB_DESTROY_ANY_WSI_CLOSING = 9,
    1106  LWS_EXT_CB_ANY_WSI_ESTABLISHED = 10,
    1107  LWS_EXT_CB_PACKET_RX_PREPARSE = 11,
    1108  LWS_EXT_CB_PACKET_TX_PRESEND = 12,
    1109  LWS_EXT_CB_PACKET_TX_DO_SEND = 13,
    1110  LWS_EXT_CB_HANDSHAKE_REPLY_TX = 14,
    1111  LWS_EXT_CB_FLUSH_PENDING_TX = 15,
    1112  LWS_EXT_CB_EXTENDED_PAYLOAD_RX = 16,
    1113  LWS_EXT_CB_CAN_PROXY_CLIENT_CONNECTION = 17,
    1114  LWS_EXT_CB_1HZ = 18,
    1115  LWS_EXT_CB_REQUEST_ON_WRITEABLE = 19,
    1116  LWS_EXT_CB_IS_WRITEABLE = 20,
    1117  LWS_EXT_CB_PAYLOAD_TX = 21,
    1118  LWS_EXT_CB_PAYLOAD_RX = 22,
    1119  LWS_EXT_CB_OPTION_DEFAULT = 23,
    1120  LWS_EXT_CB_OPTION_SET = 24,
    1121  LWS_EXT_CB_OPTION_CONFIRM = 25,
    1122  LWS_EXT_CB_NAMED_OPTION_SET = 26,
    1123 
    1124  /****** add new things just above ---^ ******/
    1125 };
    1126 
    1133  /* Add new things just above here ---^
    1134  * This is part of the ABI, don't needlessly break compatibility */
    1135 };
    1136 
    1142  const char *name;
    1145  /* Add new things just above here ---^
    1146  * This is part of the ABI, don't needlessly break compatibility */
    1147 };
    1148 
    1151  const char *option_name;
    1153  const char *start;
    1154  int len;
    1155 };
    1156 
    1217 typedef int
    1218 lws_extension_callback_function(struct lws_context *context,
    1219  const struct lws_extension *ext, struct lws *wsi,
    1220  enum lws_extension_callback_reasons reason,
    1221  void *user, void *in, size_t len);
    1222 
    1225  const char *name;
    1227  const char *client_offer;
    1229  /* Add new things just above here ---^
    1230  * This is part of the ABI, don't needlessly break compatibility */
    1231 };
    1232 
    1241 LWS_VISIBLE LWS_EXTERN int
    1242 lws_set_extension_option(struct lws *wsi, const char *ext_name,
    1243  const char *opt_name, const char *opt_val);
    1244 
    1245 #ifndef LWS_NO_EXTENSIONS
    1246 /* lws_get_internal_extensions() - DEPRECATED
    1247  *
    1248  * \Deprecated There is no longer a set internal extensions table. The table is provided
    1249  * by user code along with application-specific settings. See the test
    1250  * client and server for how to do.
    1251  */
    1252 static LWS_INLINE LWS_WARN_DEPRECATED const struct lws_extension *
    1253 lws_get_internal_extensions(void) { return NULL; }
    1254 
    1265 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    1266 lws_ext_parse_options(const struct lws_extension *ext, struct lws *wsi,
    1267  void *ext_user, const struct lws_ext_options *opts,
    1268  const char *o, int len);
    1269 #endif
    1270 
    1283 LWS_EXTERN
    1285  struct lws_context *context, const struct lws_extension *ext,
    1286  struct lws *wsi, enum lws_extension_callback_reasons reason,
    1287  void *user, void *in, size_t len);
    1288 
    1289 /*
    1290  * The internal exts are part of the public abi
    1291  * If we add more extensions, publish the callback here ------v
    1292  */
    1294 
    1310 
    1315  const char *name;
    1336  unsigned int id;
    1343  void *user;
    1346  /* Add new things just above here ---^
    1347  * This is part of the ABI, don't needlessly break compatibility */
    1348 };
    1349 
    1350 struct lws_vhost;
    1351 
    1360 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
    1361 lws_vhost_name_to_protocol(struct lws_vhost *vh, const char *name);
    1362 
    1372 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
    1373 lws_get_protocol(struct lws *wsi);
    1374 
    1376 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
    1377 lws_protocol_get(struct lws *wsi) LWS_WARN_DEPRECATED;
    1378 
    1389 LWS_VISIBLE LWS_EXTERN void *
    1390 lws_protocol_vh_priv_zalloc(struct lws_vhost *vhost, const struct lws_protocols *prot,
    1391  int size);
    1392 
    1402 LWS_VISIBLE LWS_EXTERN void *
    1403 lws_protocol_vh_priv_get(struct lws_vhost *vhost, const struct lws_protocols *prot);
    1404 
    1413 LWS_VISIBLE LWS_EXTERN int
    1414 lws_finalize_startup(struct lws_context *context);
    1415 
    1416 #ifdef LWS_WITH_PLUGINS
    1417 
    1418 /* PLUGINS implies LIBUV */
    1419 
    1420 #define LWS_PLUGIN_API_MAGIC 180
    1421 
    1424  unsigned int api_magic;
    1425  const struct lws_protocols *protocols;
    1427  const struct lws_extension *extensions;
    1429 };
    1430 
    1431 typedef int (*lws_plugin_init_func)(struct lws_context *,
    1432  struct lws_plugin_capability *);
    1433 typedef int (*lws_plugin_destroy_func)(struct lws_context *);
    1434 
    1436 struct lws_plugin {
    1437  struct lws_plugin *list;
    1438 #if (UV_VERSION_MAJOR > 0)
    1439  uv_lib_t lib;
    1440 #else
    1441  void *l;
    1442 #endif
    1443  char name[64];
    1445 };
    1446 
    1447 #endif
    1448 
    1450 
    1451 
    1460 
    1462 #define LWSGS_EMAIL_CONTENT_SIZE 16384
    1463 
    1465 /* SHA-1 binary and hexified versions */
    1467 typedef struct { unsigned char bin[20]; } lwsgw_hash_bin;
    1469 typedef struct { char id[41]; } lwsgw_hash;
    1470 
    1477 };
    1478 
    1481  char username[32];
    1482  char email[100];
    1483  char ip[72];
    1484  unsigned int mask;
    1486  char session[42];
    1487 };
    1488 
    1493 };
    1494 
    1497  enum lws_gs_event event;
    1498  const char *username;
    1499  const char *email;
    1500 };
    1501 
    1503 
    1504 
    1518 
    1520 /*
    1521  * NOTE: These public enums are part of the abi. If you want to add one,
    1522  * add it at where specified so existing users are unaffected.
    1523  */
    1524 
    1528  (1 << 12),
    1535  (1 << 12),
    1551  (1 << 12),
    1556  (1 << 12),
    1580  /****** add new things just above ---^ ******/
    1581 };
    1582 
    1583 #define lws_check_opt(c, f) (((c) & (f)) == (f))
    1584 
    1595  int port;
    1600  const char *iface;
    1607  const struct lws_protocols *protocols;
    1611  const struct lws_extension *extensions;
    1619  const char *ssl_cert_filepath;
    1629  const char *ssl_ca_filepath;
    1631  const char *ssl_cipher_list;
    1635  const char *http_proxy_address;
    1638  unsigned int http_proxy_port;
    1640  int gid;
    1642  int uid;
    1644  unsigned int options;
    1646  void *user;
    1649  int ka_time;
    1659 #ifdef LWS_OPENSSL_SUPPORT
    1665 #else /* maintain structure layout either way */
    1667 #endif
    1668 
    1679  unsigned int count_threads;
    1681  unsigned int fd_limit_per_thread;
    1685  unsigned int timeout_secs;
    1690  const char *ecdh_curve;
    1692  const char *vhost_name;
    1696  const char * const *plugin_dirs;
    1705  const char *log_filepath;
    1708  const struct lws_http_mount *mounts;
    1710  const char *server_string;
    1713  unsigned int pt_serv_buf_size;
    1728  unsigned short ws_ping_pong_interval;
    1759  /* Add new things just above here ---^
    1760  * This is part of the ABI, don't needlessly break compatibility
    1761  *
    1762  * The below is to ensure later library versions with new
    1763  * members added above will see 0 (default) even if the app
    1764  * was not built against the newer headers.
    1765  */
    1766 
    1767  void *_unused[8];
    1768 };
    1769 
    1804 LWS_VISIBLE LWS_EXTERN struct lws_context *
    1806 
    1815 LWS_VISIBLE LWS_EXTERN void
    1816 lws_context_destroy(struct lws_context *context);
    1817 
    1818 LWS_VISIBLE LWS_EXTERN void
    1819 lws_context_destroy2(struct lws_context *context);
    1820 
    1821 typedef int (*lws_reload_func)(void);
    1822 
    1847 LWS_VISIBLE LWS_EXTERN void
    1848 lws_context_deprecate(struct lws_context *context, lws_reload_func cb);
    1849 
    1850 LWS_VISIBLE LWS_EXTERN int
    1851 lws_context_is_deprecated(struct lws_context *context);
    1852 
    1870 LWS_VISIBLE LWS_EXTERN int
    1871 lws_set_proxy(struct lws_vhost *vhost, const char *proxy);
    1872 
    1873 
    1874 struct lws_vhost;
    1875 
    1885 LWS_EXTERN LWS_VISIBLE struct lws_vhost *
    1886 lws_create_vhost(struct lws_context *context,
    1887  struct lws_context_creation_info *info);
    1888 
    1903 LWS_VISIBLE LWS_EXTERN int
    1904 lwsws_get_config_globals(struct lws_context_creation_info *info, const char *d,
    1905  char **config_strings, int *len);
    1906 
    1922 LWS_VISIBLE LWS_EXTERN int
    1923 lwsws_get_config_vhosts(struct lws_context *context,
    1924  struct lws_context_creation_info *info, const char *d,
    1925  char **config_strings, int *len);
    1926 
    1928 LWS_VISIBLE LWS_EXTERN struct lws_vhost *
    1929 lws_vhost_get(struct lws *wsi) LWS_WARN_DEPRECATED;
    1930 
    1936 LWS_VISIBLE LWS_EXTERN struct lws_vhost *
    1937 lws_get_vhost(struct lws *wsi);
    1938 
    1946 LWS_VISIBLE LWS_EXTERN int
    1947 lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len);
    1948 
    1956 LWS_VISIBLE LWS_EXTERN int
    1957 lws_json_dump_context(const struct lws_context *context, char *buf, int len,
    1958  int hide_vhosts);
    1959 
    1969 LWS_VISIBLE LWS_EXTERN void *
    1970 lws_context_user(struct lws_context *context);
    1971 
    1977 
    1987  const char *name;
    1988  const char *value;
    1989 };
    1990 
    2003 };
    2004 
    2012  const char *mountpoint;
    2014  const char *origin;
    2016  const char *def;
    2018  const char *protocol;
    2034  unsigned int auth_mask;
    2037  unsigned int cache_reusable:1;
    2038  unsigned int cache_revalidate:1;
    2039  unsigned int cache_intermediaries:1;
    2041  unsigned char origin_protocol;
    2042  unsigned char mountpoint_len;
    2047  /* Add new things just above here ---^
    2048  * This is part of the ABI, don't needlessly break compatibility
    2049  *
    2050  * The below is to ensure later library versions with new
    2051  * members added above will see 0 (default) even if the app
    2052  * was not built against the newer headers.
    2053  */
    2054 
    2055  void *_unused[2];
    2056 };
    2059 
    2065 
    2073  LCCSCF_USE_SSL = (1 << 0),
    2074  LCCSCF_ALLOW_SELFSIGNED = (1 << 1),
    2075  LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK = (1 << 2),
    2076  LCCSCF_ALLOW_EXPIRED = (1 << 3)
    2077 };
    2078 
    2083  struct lws_context *context;
    2085  const char *address;
    2087  int port;
    2091  const char *path;
    2093  const char *host;
    2095  const char *origin;
    2097  const char *protocol;
    2101  void *userdata;
    2105  const char *method;
    2108  struct lws *parent_wsi;
    2112  const char *uri_replace_from;
    2115  const char *uri_replace_to;
    2117  struct lws_vhost *vhost;
    2119  struct lws **pwsi;
    2131  /* Add new things just above here ---^
    2132  * This is part of the ABI, don't needlessly break compatibility
    2133  *
    2134  * The below is to ensure later library versions with new
    2135  * members added above will see 0 (default) even if the app
    2136  * was not built against the newer headers.
    2137  */
    2138 
    2139  void *_unused[4];
    2140 };
    2141 
    2149 LWS_VISIBLE LWS_EXTERN struct lws *
    2151 
    2172 /* deprecated, use lws_client_connect_via_info() */
    2173 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    2174 lws_client_connect(struct lws_context *clients, const char *address,
    2175  int port, int ssl_connection, const char *path,
    2176  const char *host, const char *origin, const char *protocol,
    2177  int ietf_version_or_minus_one) LWS_WARN_DEPRECATED;
    2178 /* deprecated, use lws_client_connect_via_info() */
    2199 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    2200 lws_client_connect_extended(struct lws_context *clients, const char *address,
    2201  int port, int ssl_connection, const char *path,
    2202  const char *host, const char *origin,
    2203  const char *protocol, int ietf_version_or_minus_one,
    2204  void *userdata) LWS_WARN_DEPRECATED;
    2205 
    2231 LWS_VISIBLE LWS_EXTERN int
    2233  struct lws_vhost *vhost);
    2234 
    2235 LWS_VISIBLE LWS_EXTERN int
    2236 lws_http_client_read(struct lws *wsi, char **buf, int *len);
    2237 
    2245 LWS_VISIBLE LWS_EXTERN unsigned int
    2246 lws_http_client_http_response(struct lws *wsi);
    2247 
    2248 LWS_VISIBLE LWS_EXTERN void
    2249 lws_client_http_body_pending(struct lws *wsi, int something_left_to_send);
    2250 
    2271 
    2280 
    2313 LWS_VISIBLE LWS_EXTERN int
    2314 lws_service(struct lws_context *context, int timeout_ms);
    2315 
    2327 LWS_VISIBLE LWS_EXTERN int
    2328 lws_service_tsi(struct lws_context *context, int timeout_ms, int tsi);
    2329 
    2345 LWS_VISIBLE LWS_EXTERN void
    2346 lws_cancel_service_pt(struct lws *wsi);
    2347 
    2359 LWS_VISIBLE LWS_EXTERN void
    2360 lws_cancel_service(struct lws_context *context);
    2361 
    2388 LWS_VISIBLE LWS_EXTERN int
    2389 lws_service_fd(struct lws_context *context, struct lws_pollfd *pollfd);
    2390 
    2400 LWS_VISIBLE LWS_EXTERN int
    2401 lws_service_fd_tsi(struct lws_context *context, struct lws_pollfd *pollfd,
    2402  int tsi);
    2403 
    2421 LWS_VISIBLE LWS_EXTERN int
    2422 lws_service_adjust_timeout(struct lws_context *context, int timeout_ms, int tsi);
    2423 
    2424 /* Backwards compatibility */
    2425 #define lws_plat_service_tsi lws_service_tsi
    2426 
    2428 
    2434 
    2441 
    2453 LWS_VISIBLE LWS_EXTERN const char *
    2454 lws_get_mimetype(const char *file, const struct lws_http_mount *m);
    2455 
    2474 LWS_VISIBLE LWS_EXTERN int
    2475 lws_serve_http_file(struct lws *wsi, const char *file, const char *content_type,
    2476  const char *other_headers, int other_headers_len);
    2477 LWS_VISIBLE LWS_EXTERN int
    2478 lws_serve_http_file_fragment(struct lws *wsi);
    2480 
    2491 
    2492 enum http_status {
    2493  HTTP_STATUS_OK = 200,
    2494  HTTP_STATUS_NO_CONTENT = 204,
    2495  HTTP_STATUS_PARTIAL_CONTENT = 206,
    2496 
    2497  HTTP_STATUS_MOVED_PERMANENTLY = 301,
    2498  HTTP_STATUS_FOUND = 302,
    2499  HTTP_STATUS_SEE_OTHER = 303,
    2500 
    2501  HTTP_STATUS_BAD_REQUEST = 400,
    2502  HTTP_STATUS_UNAUTHORIZED,
    2503  HTTP_STATUS_PAYMENT_REQUIRED,
    2504  HTTP_STATUS_FORBIDDEN,
    2505  HTTP_STATUS_NOT_FOUND,
    2506  HTTP_STATUS_METHOD_NOT_ALLOWED,
    2507  HTTP_STATUS_NOT_ACCEPTABLE,
    2508  HTTP_STATUS_PROXY_AUTH_REQUIRED,
    2509  HTTP_STATUS_REQUEST_TIMEOUT,
    2510  HTTP_STATUS_CONFLICT,
    2511  HTTP_STATUS_GONE,
    2512  HTTP_STATUS_LENGTH_REQUIRED,
    2513  HTTP_STATUS_PRECONDITION_FAILED,
    2514  HTTP_STATUS_REQ_ENTITY_TOO_LARGE,
    2515  HTTP_STATUS_REQ_URI_TOO_LONG,
    2516  HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE,
    2517  HTTP_STATUS_REQ_RANGE_NOT_SATISFIABLE,
    2518  HTTP_STATUS_EXPECTATION_FAILED,
    2519 
    2520  HTTP_STATUS_INTERNAL_SERVER_ERROR = 500,
    2521  HTTP_STATUS_NOT_IMPLEMENTED,
    2522  HTTP_STATUS_BAD_GATEWAY,
    2523  HTTP_STATUS_SERVICE_UNAVAILABLE,
    2524  HTTP_STATUS_GATEWAY_TIMEOUT,
    2525  HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED,
    2526 };
    2527 
    2529  char *p;
    2530  int len;
    2531  int max_len;
    2532  int final;
    2533 };
    2534 
    2535 typedef const char *(*lws_process_html_state_cb)(void *data, int index);
    2536 
    2538  char *start;
    2539  char swallow[16];
    2540  int pos;
    2541  void *data;
    2542  const char * const *vars;
    2545  lws_process_html_state_cb replace;
    2546 };
    2547 
    2552 LWS_VISIBLE LWS_EXTERN int
    2554  struct lws_process_html_state *s);
    2556 
    2589 
    2597 struct lws_tokens {
    2598  char *token;
    2600 };
    2601 
    2602 /* enum lws_token_indexes
    2603  * these have to be kept in sync with lextable.h / minilex.c
    2604  *
    2605  * NOTE: These public enums are part of the abi. If you want to add one,
    2606  * add it at where specified so existing users are unaffected.
    2607  */
    2608 enum lws_token_indexes {
    2609  WSI_TOKEN_GET_URI = 0,
    2610  WSI_TOKEN_POST_URI = 1,
    2611  WSI_TOKEN_OPTIONS_URI = 2,
    2612  WSI_TOKEN_HOST = 3,
    2613  WSI_TOKEN_CONNECTION = 4,
    2614  WSI_TOKEN_UPGRADE = 5,
    2615  WSI_TOKEN_ORIGIN = 6,
    2616  WSI_TOKEN_DRAFT = 7,
    2617  WSI_TOKEN_CHALLENGE = 8,
    2618  WSI_TOKEN_EXTENSIONS = 9,
    2619  WSI_TOKEN_KEY1 = 10,
    2620  WSI_TOKEN_KEY2 = 11,
    2621  WSI_TOKEN_PROTOCOL = 12,
    2622  WSI_TOKEN_ACCEPT = 13,
    2623  WSI_TOKEN_NONCE = 14,
    2624  WSI_TOKEN_HTTP = 15,
    2625  WSI_TOKEN_HTTP2_SETTINGS = 16,
    2626  WSI_TOKEN_HTTP_ACCEPT = 17,
    2627  WSI_TOKEN_HTTP_AC_REQUEST_HEADERS = 18,
    2628  WSI_TOKEN_HTTP_IF_MODIFIED_SINCE = 19,
    2629  WSI_TOKEN_HTTP_IF_NONE_MATCH = 20,
    2630  WSI_TOKEN_HTTP_ACCEPT_ENCODING = 21,
    2631  WSI_TOKEN_HTTP_ACCEPT_LANGUAGE = 22,
    2632  WSI_TOKEN_HTTP_PRAGMA = 23,
    2633  WSI_TOKEN_HTTP_CACHE_CONTROL = 24,
    2634  WSI_TOKEN_HTTP_AUTHORIZATION = 25,
    2635  WSI_TOKEN_HTTP_COOKIE = 26,
    2636  WSI_TOKEN_HTTP_CONTENT_LENGTH = 27,
    2637  WSI_TOKEN_HTTP_CONTENT_TYPE = 28,
    2638  WSI_TOKEN_HTTP_DATE = 29,
    2639  WSI_TOKEN_HTTP_RANGE = 30,
    2640  WSI_TOKEN_HTTP_REFERER = 31,
    2641  WSI_TOKEN_KEY = 32,
    2642  WSI_TOKEN_VERSION = 33,
    2643  WSI_TOKEN_SWORIGIN = 34,
    2644 
    2645  WSI_TOKEN_HTTP_COLON_AUTHORITY = 35,
    2646  WSI_TOKEN_HTTP_COLON_METHOD = 36,
    2647  WSI_TOKEN_HTTP_COLON_PATH = 37,
    2648  WSI_TOKEN_HTTP_COLON_SCHEME = 38,
    2649  WSI_TOKEN_HTTP_COLON_STATUS = 39,
    2650 
    2651  WSI_TOKEN_HTTP_ACCEPT_CHARSET = 40,
    2652  WSI_TOKEN_HTTP_ACCEPT_RANGES = 41,
    2653  WSI_TOKEN_HTTP_ACCESS_CONTROL_ALLOW_ORIGIN = 42,
    2654  WSI_TOKEN_HTTP_AGE = 43,
    2655  WSI_TOKEN_HTTP_ALLOW = 44,
    2656  WSI_TOKEN_HTTP_CONTENT_DISPOSITION = 45,
    2657  WSI_TOKEN_HTTP_CONTENT_ENCODING = 46,
    2658  WSI_TOKEN_HTTP_CONTENT_LANGUAGE = 47,
    2659  WSI_TOKEN_HTTP_CONTENT_LOCATION = 48,
    2660  WSI_TOKEN_HTTP_CONTENT_RANGE = 49,
    2661  WSI_TOKEN_HTTP_ETAG = 50,
    2662  WSI_TOKEN_HTTP_EXPECT = 51,
    2663  WSI_TOKEN_HTTP_EXPIRES = 52,
    2664  WSI_TOKEN_HTTP_FROM = 53,
    2665  WSI_TOKEN_HTTP_IF_MATCH = 54,
    2666  WSI_TOKEN_HTTP_IF_RANGE = 55,
    2667  WSI_TOKEN_HTTP_IF_UNMODIFIED_SINCE = 56,
    2668  WSI_TOKEN_HTTP_LAST_MODIFIED = 57,
    2669  WSI_TOKEN_HTTP_LINK = 58,
    2670  WSI_TOKEN_HTTP_LOCATION = 59,
    2671  WSI_TOKEN_HTTP_MAX_FORWARDS = 60,
    2672  WSI_TOKEN_HTTP_PROXY_AUTHENTICATE = 61,
    2673  WSI_TOKEN_HTTP_PROXY_AUTHORIZATION = 62,
    2674  WSI_TOKEN_HTTP_REFRESH = 63,
    2675  WSI_TOKEN_HTTP_RETRY_AFTER = 64,
    2676  WSI_TOKEN_HTTP_SERVER = 65,
    2677  WSI_TOKEN_HTTP_SET_COOKIE = 66,
    2678  WSI_TOKEN_HTTP_STRICT_TRANSPORT_SECURITY = 67,
    2679  WSI_TOKEN_HTTP_TRANSFER_ENCODING = 68,
    2680  WSI_TOKEN_HTTP_USER_AGENT = 69,
    2681  WSI_TOKEN_HTTP_VARY = 70,
    2682  WSI_TOKEN_HTTP_VIA = 71,
    2683  WSI_TOKEN_HTTP_WWW_AUTHENTICATE = 72,
    2684 
    2685  WSI_TOKEN_PATCH_URI = 73,
    2686  WSI_TOKEN_PUT_URI = 74,
    2687  WSI_TOKEN_DELETE_URI = 75,
    2688 
    2689  WSI_TOKEN_HTTP_URI_ARGS = 76,
    2690  WSI_TOKEN_PROXY = 77,
    2691  WSI_TOKEN_HTTP_X_REAL_IP = 78,
    2692  WSI_TOKEN_HTTP1_0 = 79,
    2693  WSI_TOKEN_X_FORWARDED_FOR = 80,
    2694 
    2695  /****** add new things just above ---^ ******/
    2696 
    2697  /* use token storage to stash these internally, not for
    2698  * user use */
    2699 
    2700  _WSI_TOKEN_CLIENT_SENT_PROTOCOLS,
    2701  _WSI_TOKEN_CLIENT_PEER_ADDRESS,
    2702  _WSI_TOKEN_CLIENT_URI,
    2703  _WSI_TOKEN_CLIENT_HOST,
    2704  _WSI_TOKEN_CLIENT_ORIGIN,
    2705  _WSI_TOKEN_CLIENT_METHOD,
    2706 
    2707  /* always last real token index*/
    2708  WSI_TOKEN_COUNT,
    2709 
    2710  /* parser state additions, no storage associated */
    2711  WSI_TOKEN_NAME_PART,
    2712  WSI_TOKEN_SKIPPING,
    2713  WSI_TOKEN_SKIPPING_SAW_CR,
    2714  WSI_PARSING_COMPLETE,
    2715  WSI_INIT_TOKEN_MUXURL,
    2716 };
    2717 
    2719  unsigned short token_limit[WSI_TOKEN_COUNT];
    2720 };
    2721 
    2727 LWS_VISIBLE LWS_EXTERN const unsigned char *
    2728 lws_token_to_string(enum lws_token_indexes token);
    2729 
    2730 
    2739 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2740 lws_hdr_total_length(struct lws *wsi, enum lws_token_indexes h);
    2741 
    2751 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2752 lws_hdr_fragment_length(struct lws *wsi, enum lws_token_indexes h, int frag_idx);
    2753 
    2767 LWS_VISIBLE LWS_EXTERN int
    2768 lws_hdr_copy(struct lws *wsi, char *dest, int len, enum lws_token_indexes h);
    2769 
    2787 LWS_VISIBLE LWS_EXTERN int
    2788 lws_hdr_copy_fragment(struct lws *wsi, char *dest, int len,
    2789  enum lws_token_indexes h, int frag_idx);
    2790 
    2801 LWS_VISIBLE LWS_EXTERN const char *
    2802 lws_get_urlarg_by_name(struct lws *wsi, const char *name, char *buf, int len);
    2804 
    2819 
    2830 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2831 lws_add_http_header_status(struct lws *wsi,
    2832  unsigned int code, unsigned char **p,
    2833  unsigned char *end);
    2846 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2847 lws_add_http_header_by_name(struct lws *wsi, const unsigned char *name,
    2848  const unsigned char *value, int length,
    2849  unsigned char **p, unsigned char *end);
    2863 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2864 lws_add_http_header_by_token(struct lws *wsi, enum lws_token_indexes token,
    2865  const unsigned char *value, int length,
    2866  unsigned char **p, unsigned char *end);
    2877 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2878 lws_add_http_header_content_length(struct lws *wsi,
    2879  unsigned long content_length,
    2880  unsigned char **p, unsigned char *end);
    2890 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2891 lws_finalize_http_header(struct lws *wsi, unsigned char **p,
    2892  unsigned char *end);
    2894 
    2913 
    2923 };
    2924 
    2938 typedef int (*lws_spa_fileupload_cb)(void *data, const char *name,
    2939  const char *filename, char *buf, int len,
    2940  enum lws_spa_fileupload_states state);
    2941 
    2944 struct lws_spa;
    2945 
    2964 LWS_VISIBLE LWS_EXTERN struct lws_spa *
    2965 lws_spa_create(struct lws *wsi, const char * const *param_names,
    2966  int count_params, int max_storage, lws_spa_fileupload_cb opt_cb,
    2967  void *opt_data);
    2968 
    2976 LWS_VISIBLE LWS_EXTERN int
    2977 lws_spa_process(struct lws_spa *spa, const char *in, int len);
    2978 
    2984 LWS_VISIBLE LWS_EXTERN int
    2985 lws_spa_finalize(struct lws_spa *spa);
    2986 
    2993 LWS_VISIBLE LWS_EXTERN int
    2994 lws_spa_get_length(struct lws_spa *spa, int n);
    2995 
    3001 LWS_VISIBLE LWS_EXTERN const char *
    3002 lws_spa_get_string(struct lws_spa *spa, int n);
    3003 
    3009 LWS_VISIBLE LWS_EXTERN int
    3010 lws_spa_destroy(struct lws_spa *spa);
    3012 
    3023 
    3034 LWS_VISIBLE LWS_EXTERN const char *
    3035 lws_urlencode(char *escaped, const char *string, int len);
    3036 
    3037 /*
    3038  * URLDECODE 1 / 2
    3039  *
    3040  * This simple urldecode only operates until the first '\0' and requires the
    3041  * data to exist all at once
    3042  */
    3055 LWS_VISIBLE LWS_EXTERN int
    3056 lws_urldecode(char *string, const char *escaped, int len);
    3058 
    3067 LWS_VISIBLE LWS_EXTERN int
    3068 lws_return_http_status(struct lws *wsi, unsigned int code,
    3069  const char *html_body);
    3070 
    3081 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3082 lws_http_redirect(struct lws *wsi, int code, const unsigned char *loc, int len,
    3083  unsigned char **p, unsigned char *end);
    3084 
    3093 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3094 lws_http_transaction_completed(struct lws *wsi);
    3096 
    3104 
    3115 LWS_VISIBLE LWS_EXTERN const char *
    3116 lws_sql_purify(char *escaped, const char *string, int len);
    3117 
    3128 LWS_VISIBLE LWS_EXTERN const char *
    3129 lws_json_purify(char *escaped, const char *string, int len);
    3131 
    3138 
    3140 #ifdef LWS_USE_LIBEV
    3141 typedef void (lws_ev_signal_cb_t)(EV_P_ struct ev_signal *w, int revents);
    3142 
    3143 LWS_VISIBLE LWS_EXTERN int
    3144 lws_ev_sigint_cfg(struct lws_context *context, int use_ev_sigint,
    3145  lws_ev_signal_cb_t *cb);
    3146 
    3147 LWS_VISIBLE LWS_EXTERN int
    3148 lws_ev_initloop(struct lws_context *context, struct ev_loop *loop, int tsi);
    3149 
    3150 LWS_VISIBLE LWS_EXTERN void
    3151 lws_ev_sigint_cb(struct ev_loop *loop, struct ev_signal *watcher, int revents);
    3152 #endif /* LWS_USE_LIBEV */
    3153 
    3155 
    3162 #ifdef LWS_USE_LIBUV
    3164 LWS_VISIBLE LWS_EXTERN int
    3165 lws_uv_sigint_cfg(struct lws_context *context, int use_uv_sigint,
    3166  uv_signal_cb cb);
    3167 
    3168 LWS_VISIBLE LWS_EXTERN void
    3169 lws_libuv_run(const struct lws_context *context, int tsi);
    3170 
    3171 LWS_VISIBLE LWS_EXTERN void
    3172 lws_libuv_stop(struct lws_context *context);
    3173 
    3174 LWS_VISIBLE LWS_EXTERN void
    3175 lws_libuv_stop_without_kill(const struct lws_context *context, int tsi);
    3176 
    3177 LWS_VISIBLE LWS_EXTERN int
    3178 lws_uv_initloop(struct lws_context *context, uv_loop_t *loop, int tsi);
    3179 
    3180 LWS_VISIBLE LWS_EXTERN uv_loop_t *
    3181 lws_uv_getloop(struct lws_context *context, int tsi);
    3182 
    3183 LWS_VISIBLE LWS_EXTERN void
    3184 lws_uv_sigint_cb(uv_signal_t *watcher, int signum);
    3185 #endif /* LWS_USE_LIBUV */
    3186 
    3193 
    3194 /*
    3195  * NOTE: These public enums are part of the abi. If you want to add one,
    3196  * add it at where specified so existing users are unaffected.
    3197  */
    3198 enum pending_timeout {
    3199  NO_PENDING_TIMEOUT = 0,
    3200  PENDING_TIMEOUT_AWAITING_PROXY_RESPONSE = 1,
    3201  PENDING_TIMEOUT_AWAITING_CONNECT_RESPONSE = 2,
    3202  PENDING_TIMEOUT_ESTABLISH_WITH_SERVER = 3,
    3203  PENDING_TIMEOUT_AWAITING_SERVER_RESPONSE = 4,
    3204  PENDING_TIMEOUT_AWAITING_PING = 5,
    3205  PENDING_TIMEOUT_CLOSE_ACK = 6,
    3206  PENDING_TIMEOUT_AWAITING_EXTENSION_CONNECT_RESPONSE = 7,
    3207  PENDING_TIMEOUT_SENT_CLIENT_HANDSHAKE = 8,
    3208  PENDING_TIMEOUT_SSL_ACCEPT = 9,
    3209  PENDING_TIMEOUT_HTTP_CONTENT = 10,
    3210  PENDING_TIMEOUT_AWAITING_CLIENT_HS_SEND = 11,
    3211  PENDING_FLUSH_STORED_SEND_BEFORE_CLOSE = 12,
    3212  PENDING_TIMEOUT_SHUTDOWN_FLUSH = 13,
    3213  PENDING_TIMEOUT_CGI = 14,
    3214  PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE = 15,
    3215  PENDING_TIMEOUT_WS_PONG_CHECK_SEND_PING = 16,
    3216  PENDING_TIMEOUT_WS_PONG_CHECK_GET_PONG = 17,
    3217  PENDING_TIMEOUT_CLIENT_ISSUE_PAYLOAD = 18,
    3218 
    3219  /****** add new things just above ---^ ******/
    3220 };
    3221 
    3231 LWS_VISIBLE LWS_EXTERN void
    3232 lws_set_timeout(struct lws *wsi, enum pending_timeout reason, int secs);
    3234 
    3240 #if !defined(LWS_SIZEOFPTR)
    3241 #define LWS_SIZEOFPTR (sizeof (void *))
    3242 #endif
    3243 #if !defined(u_int64_t)
    3244 #define u_int64_t unsigned long long
    3245 #endif
    3246 
    3247 #if defined(__x86_64__)
    3248 #define _LWS_PAD_SIZE 16 /* Intel recommended for best performance */
    3249 #else
    3250 #define _LWS_PAD_SIZE LWS_SIZEOFPTR /* Size of a pointer on the target arch */
    3251 #endif
    3252 #define _LWS_PAD(n) (((n) % _LWS_PAD_SIZE) ? \
    3253  ((n) + (_LWS_PAD_SIZE - ((n) % _LWS_PAD_SIZE))) : (n))
    3254 #define LWS_PRE _LWS_PAD(4 + 10)
    3255 /* used prior to 1.7 and retained for backward compatibility */
    3256 #define LWS_SEND_BUFFER_PRE_PADDING LWS_PRE
    3257 #define LWS_SEND_BUFFER_POST_PADDING 0
    3258 
    3259 /*
    3260  * NOTE: These public enums are part of the abi. If you want to add one,
    3261  * add it at where specified so existing users are unaffected.
    3262  */
    3277  /* LWS_WRITE_CLOSE is handled by lws_close_reason() */
    3278  LWS_WRITE_PING = 5,
    3279  LWS_WRITE_PONG = 6,
    3280 
    3281  /* Same as write_http but we know this write ends the transaction */
    3282  LWS_WRITE_HTTP_FINAL = 7,
    3283 
    3284  /* HTTP2 */
    3285 
    3293  /****** add new things just above ---^ ******/
    3294 
    3295  /* flags */
    3296 
    3304 };
    3305 
    3306 
    3393 LWS_VISIBLE LWS_EXTERN int
    3394 lws_write(struct lws *wsi, unsigned char *buf, size_t len,
    3395  enum lws_write_protocol protocol);
    3396 
    3397 /* helper for case where buffer may be const */
    3398 #define lws_write_http(wsi, buf, len) \
    3399  lws_write(wsi, (unsigned char *)(buf), len, LWS_WRITE_HTTP)
    3400 
    3420 
    3433 LWS_VISIBLE LWS_EXTERN int
    3434 lws_callback_on_writable(struct lws *wsi);
    3435 
    3449 LWS_VISIBLE LWS_EXTERN int
    3450 lws_callback_on_writable_all_protocol(const struct lws_context *context,
    3451  const struct lws_protocols *protocol);
    3452 
    3466 LWS_VISIBLE LWS_EXTERN int
    3467 lws_callback_on_writable_all_protocol_vhost(const struct lws_vhost *vhost,
    3468  const struct lws_protocols *protocol);
    3469 
    3482 LWS_VISIBLE LWS_EXTERN int
    3483 lws_callback_all_protocol(struct lws_context *context,
    3484  const struct lws_protocols *protocol, int reason);
    3485 
    3498 LWS_VISIBLE LWS_EXTERN int
    3499 lws_callback_all_protocol_vhost(struct lws_vhost *vh,
    3500  const struct lws_protocols *protocol, int reason);
    3501 
    3515 LWS_VISIBLE LWS_EXTERN int
    3516 lws_callback_vhost_protocols(struct lws *wsi, int reason, void *in, int len);
    3517 
    3518 LWS_VISIBLE LWS_EXTERN int
    3519 lws_callback_http_dummy(struct lws *wsi, enum lws_callback_reasons reason,
    3520  void *user, void *in, size_t len);
    3521 
    3529 LWS_VISIBLE LWS_EXTERN int
    3530 lws_get_socket_fd(struct lws *wsi);
    3531 
    3553 LWS_VISIBLE LWS_EXTERN size_t
    3554 lws_get_peer_write_allowance(struct lws *wsi);
    3556 
    3567 LWS_VISIBLE LWS_EXTERN int
    3568 lws_rx_flow_control(struct lws *wsi, int enable);
    3569 
    3579 LWS_VISIBLE LWS_EXTERN void
    3580 lws_rx_flow_allow_all_protocol(const struct lws_context *context,
    3581  const struct lws_protocols *protocol);
    3582 
    3599 LWS_VISIBLE LWS_EXTERN size_t
    3600 lws_remaining_packet_payload(struct lws *wsi);
    3601 
    3602 
    3611 
    3625 LWS_VISIBLE LWS_EXTERN struct lws *
    3626 lws_adopt_socket(struct lws_context *context, lws_sockfd_type accept_fd);
    3639 LWS_VISIBLE LWS_EXTERN struct lws *
    3640 lws_adopt_socket_vhost(struct lws_vhost *vh, lws_sockfd_type accept_fd);
    3664 LWS_VISIBLE LWS_EXTERN struct lws *
    3665 lws_adopt_socket_readbuf(struct lws_context *context, lws_sockfd_type accept_fd,
    3666  const char *readbuf, size_t len);
    3690 LWS_VISIBLE LWS_EXTERN struct lws *
    3691 lws_adopt_socket_vhost_readbuf(struct lws_vhost *vhost, lws_sockfd_type accept_fd,
    3692  const char *readbuf, size_t len);
    3694 
    3700 
    3711 LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT
    3712 lws_canonical_hostname(struct lws_context *context);
    3713 
    3728 LWS_VISIBLE LWS_EXTERN void
    3729 lws_get_peer_addresses(struct lws *wsi, lws_sockfd_type fd, char *name,
    3730  int name_len, char *rip, int rip_len);
    3731 
    3742 LWS_VISIBLE LWS_EXTERN const char *
    3743 lws_get_peer_simple(struct lws *wsi, char *name, int namelen);
    3744 #ifndef LWS_WITH_ESP8266
    3745 
    3756 LWS_VISIBLE LWS_EXTERN int
    3757 lws_interface_to_sa(int ipv6, const char *ifname, struct sockaddr_in *addr,
    3758  size_t addrlen);
    3760 #endif
    3761 
    3767 
    3780 LWS_VISIBLE LWS_EXTERN int
    3781 lws_snprintf(char *str, size_t size, const char *format, ...);
    3782 
    3794 LWS_VISIBLE LWS_EXTERN int
    3795 lws_get_random(struct lws_context *context, void *buf, int len);
    3803 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3804 lws_daemonize(const char *_lock_path);
    3810 LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT
    3812 
    3819 LWS_VISIBLE LWS_EXTERN void *
    3820 lws_wsi_user(struct lws *wsi);
    3821 
    3833 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3834 lws_parse_uri(char *p, const char **prot, const char **ads, int *port,
    3835  const char **path);
    3836 
    3840 LWS_VISIBLE LWS_EXTERN unsigned long
    3841 lws_now_secs(void);
    3842 
    3852 LWS_VISIBLE LWS_EXTERN struct lws_context * LWS_WARN_UNUSED_RESULT
    3853 lws_get_context(const struct lws *wsi);
    3854 
    3864 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3865 lws_get_count_threads(struct lws_context *context);
    3866 
    3874 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    3875 lws_get_parent(const struct lws *wsi);
    3876 
    3883 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    3884 lws_get_child(const struct lws *wsi);
    3885 
    3886 
    3887 /*
    3888  * \deprecated DEPRECATED Note: this is not normally needed as a user api.
    3889  * It's provided in case it is
    3890  * useful when integrating with other app poll loop service code.
    3891  */
    3892 LWS_VISIBLE LWS_EXTERN int
    3893 lws_read(struct lws *wsi, unsigned char *buf, size_t len);
    3894 
    3902 LWS_VISIBLE LWS_EXTERN void
    3903 lws_set_allocator(void *(*realloc)(void *ptr, size_t size));
    3905 
    3911 
    3918 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3919 lws_send_pipe_choked(struct lws *wsi);
    3920 
    3925 LWS_VISIBLE LWS_EXTERN int
    3926 lws_is_final_fragment(struct lws *wsi);
    3927 
    3932 LWS_VISIBLE LWS_EXTERN unsigned char
    3933 lws_get_reserved_bits(struct lws *wsi);
    3934 
    3951 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3952 lws_partial_buffered(struct lws *wsi);
    3953 
    3963 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3964 lws_frame_is_binary(struct lws *wsi);
    3965 
    3974 LWS_VISIBLE LWS_EXTERN int
    3975 lws_is_ssl(struct lws *wsi);
    3980 LWS_VISIBLE LWS_EXTERN int
    3981 lws_is_cgi(struct lws *wsi);
    3982 
    3983 #ifdef LWS_OPENSSL_SUPPORT
    3984 
    3990 LWS_VISIBLE LWS_EXTERN SSL*
    3991 lws_get_ssl(struct lws *wsi);
    3992 #endif
    3993 
    3995 
    4001 #ifdef LWS_SHA1_USE_OPENSSL_NAME
    4003 #define lws_SHA1 SHA1
    4004 #else
    4005 
    4014 LWS_VISIBLE LWS_EXTERN unsigned char *
    4015 lws_SHA1(const unsigned char *d, size_t n, unsigned char *md);
    4016 #endif
    4017 
    4027 LWS_VISIBLE LWS_EXTERN int
    4028 lws_b64_encode_string(const char *in, int in_len, char *out, int out_size);
    4038 LWS_VISIBLE LWS_EXTERN int
    4039 lws_b64_decode_string(const char *in, char *out, int out_size);
    4041 
    4042 
    4052 #ifdef LWS_WITH_CGI
    4053 enum lws_enum_stdinouterr {
    4054  LWS_STDIN = 0,
    4055  LWS_STDOUT = 1,
    4056  LWS_STDERR = 2,
    4057 };
    4058 
    4059 enum lws_cgi_hdr_state {
    4060  LCHS_HEADER,
    4061  LCHS_CR1,
    4062  LCHS_LF1,
    4063  LCHS_CR2,
    4064  LCHS_LF2,
    4065  LHCS_PAYLOAD,
    4066  LCHS_SINGLE_0A,
    4067 };
    4068 
    4070  struct lws **stdwsi;
    4071  enum lws_enum_stdinouterr ch;
    4072  unsigned char *data;
    4073  enum lws_cgi_hdr_state hdr_state;
    4074  int len;
    4075 };
    4076 
    4077 
    4087 LWS_VISIBLE LWS_EXTERN int
    4088 lws_cgi(struct lws *wsi, const char * const *exec_array,
    4089  int script_uri_path_len, int timeout_secs,
    4090  const struct lws_protocol_vhost_options *mp_cgienv);
    4091 
    4097 LWS_VISIBLE LWS_EXTERN int
    4098 lws_cgi_write_split_stdout_headers(struct lws *wsi);
    4099 
    4105 LWS_VISIBLE LWS_EXTERN int
    4106 lws_cgi_kill(struct lws *wsi);
    4107 #endif
    4108 
    4110 
    4127 
    4134  lws_filefd_type (*open)(struct lws *wsi, const char *filename,
    4135  unsigned long *filelen, int flags);
    4139  int (*close)(struct lws *wsi, lws_filefd_type fd);
    4141  unsigned long (*seek_cur)(struct lws *wsi, lws_filefd_type fd,
    4142  long offset_from_cur_pos);
    4144  int (*read)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    4145  unsigned char *buf, unsigned long len);
    4147  int (*write)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    4148  unsigned char *buf, unsigned long len);
    4151  /* Add new things just above here ---^
    4152  * This is part of the ABI, don't needlessly break compatibility */
    4153 };
    4154 
    4160 LWS_VISIBLE LWS_EXTERN struct lws_plat_file_ops * LWS_WARN_UNUSED_RESULT
    4161 lws_get_fops(struct lws_context *context);
    4162 
    4171 static LWS_INLINE lws_filefd_type LWS_WARN_UNUSED_RESULT
    4172 lws_plat_file_open(struct lws *wsi, const char *filename,
    4173  unsigned long *filelen, int flags)
    4174 {
    4175  return lws_get_fops(lws_get_context(wsi))->open(wsi, filename,
    4176  filelen, flags);
    4177 }
    4178 
    4185 static LWS_INLINE int
    4186 lws_plat_file_close(struct lws *wsi, lws_filefd_type fd)
    4187 {
    4188  return lws_get_fops(lws_get_context(wsi))->close(wsi, fd);
    4189 }
    4190 
    4198 static LWS_INLINE unsigned long
    4199 lws_plat_file_seek_cur(struct lws *wsi, lws_filefd_type fd, long offset)
    4200 {
    4201  return lws_get_fops(lws_get_context(wsi))->seek_cur(wsi, fd, offset);
    4202 }
    4212 static LWS_INLINE int LWS_WARN_UNUSED_RESULT
    4213 lws_plat_file_read(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    4214  unsigned char *buf, unsigned long len)
    4215 {
    4216  return lws_get_fops(lws_get_context(wsi))->read(wsi, fd, amount, buf,
    4217  len);
    4218 }
    4228 static LWS_INLINE int LWS_WARN_UNUSED_RESULT
    4229 lws_plat_file_write(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    4230  unsigned char *buf, unsigned long len)
    4231 {
    4232  return lws_get_fops(lws_get_context(wsi))->write(wsi, fd, amount, buf,
    4233  len);
    4234 }
    4236 
    4268 #ifdef LWS_WITH_SMTP
    4269 
    4281 };
    4282 
    4284 struct lws_email {
    4285  void *data;
    4287  uv_loop_t *loop;
    4290  char email_smtp_ip[32];
    4291  char email_helo[32];
    4292  char email_from[100];
    4293  char email_to[100];
    4295  unsigned int max_content_size;
    4298  /* Fill all the callbacks before init */
    4299 
    4300  int (*on_next)(struct lws_email *email);
    4305  int (*on_sent)(struct lws_email *email);
    4310  int (*on_get_body)(struct lws_email *email, char *buf, int len);
    4316  /* private things */
    4317  uv_timer_t timeout_email;
    4319  uv_connect_t email_connect_req;
    4320  uv_tcp_t email_client;
    4322  char email_buf[256];
    4323  char *content;
    4324 };
    4325 
    4335 LWS_VISIBLE LWS_EXTERN int
    4336 lws_email_init(struct lws_email *email, uv_loop_t *loop, int max_content);
    4337 
    4346 LWS_VISIBLE LWS_EXTERN void
    4347 lws_email_check(struct lws_email *email);
    4355 LWS_VISIBLE LWS_EXTERN void
    4356 lws_email_destroy(struct lws_email *email);
    4357 
    4358 #endif
    4359 
    4360 
    4361 #ifdef __cplusplus
    4362 }
    4363 #endif
    4364 
    4365 #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:4058
    +
    Definition: libwebsockets.h:4069
    size_t rx_buffer_size
    Definition: libwebsockets.h:1327
    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
    @@ -76,14 +76,14 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_daemonize(const char *_lock_path)
    Definition: libwebsockets.h:1999
    Definition: libwebsockets.h:3274
    -
    Definition: libwebsockets.h:4263
    +
    Definition: libwebsockets.h:4274
    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:238
    unsigned int auth_mask
    Definition: libwebsockets.h:2034
    Definition: libwebsockets.h:3297
    -
    void * data
    Definition: libwebsockets.h:4274
    +
    void * data
    Definition: libwebsockets.h:4285
    const char * uri_replace_from
    Definition: libwebsockets.h:2112
    -
    int(* write)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)
    Definition: libwebsockets.h:4136
    +
    int(* write)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)
    Definition: libwebsockets.h:4147
    lws_callback_reasons
    Definition: libwebsockets.h:666
    LWS_VISIBLE LWS_EXTERN int lws_hdr_copy_fragment(struct lws *wsi, char *dest, int len, enum lws_token_indexes h, int frag_idx)
    @@ -104,7 +104,7 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    LWS_VISIBLE LWS_EXTERN struct lws * lws_adopt_socket_vhost(struct lws_vhost *vh, lws_sockfd_type accept_fd)
    Definition: libwebsockets.h:750
    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:4294
    +
    int(* on_sent)(struct lws_email *email)
    Definition: libwebsockets.h:4305
    Definition: libwebsockets.h:1467
    struct lws ** pwsi
    Definition: libwebsockets.h:2119
    Definition: libwebsockets.h:784
    @@ -113,7 +113,7 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    Definition: libwebsockets.h:585
    Definition: libwebsockets.h:1423
    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:4310
    +
    time_t email_connect_started
    Definition: libwebsockets.h:4321
    lws_close_status
    Definition: libwebsockets.h:556
    LWS_VISIBLE LWS_EXTERN int lws_callback_all_protocol(struct lws_context *context, const struct lws_protocols *protocol, int reason)
    Definition: libwebsockets.h:596
    @@ -124,11 +124,11 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    LWS_VISIBLE LWS_EXTERN struct lws_context *LWS_WARN_UNUSED_RESULT lws_get_context(const struct lws *wsi)
    const char * value
    Definition: libwebsockets.h:1988
    Definition: libwebsockets.h:2919
    -
    Definition: libwebsockets.h:4268
    +
    Definition: libwebsockets.h:4279
    const char * username
    Definition: libwebsockets.h:1498
    LWS_VISIBLE LWS_EXTERN struct lws * lws_client_connect_via_info(struct lws_client_connect_info *ccinfo)
    const char * protocol
    Definition: libwebsockets.h:2018
    -
    struct lws ** stdwsi
    Definition: libwebsockets.h:4059
    +
    struct lws ** stdwsi
    Definition: libwebsockets.h:4070
    LWS_VISIBLE LWS_EXTERN int lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len)
    Definition: libwebsockets.h:871
    LWS_VISIBLE LWS_EXTERN const char * lws_get_mimetype(const char *file, const struct lws_http_mount *m)
    @@ -164,10 +164,11 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    Definition: libwebsockets.h:1475
    int ietf_version_or_minus_one
    Definition: libwebsockets.h:2099
    LWS_VISIBLE LWS_EXTERN int lws_callback_all_protocol_vhost(struct lws_vhost *vh, const struct lws_protocols *protocol, int reason)
    -
    Definition: libwebsockets.h:4261
    +
    Definition: libwebsockets.h:4272
    Definition: libwebsockets.h:1984
    LWS_VISIBLE LWS_EXTERN int lws_callback_on_writable(struct lws *wsi)
    const char *const * vars
    Definition: libwebsockets.h:2542
    +
    LWS_VISIBLE LWS_EXTERN SSL * lws_get_ssl(struct lws *wsi)
    Definition: libwebsockets.h:564
    Definition: libwebsockets.h:2082
    Definition: libwebsockets.h:1573
    @@ -197,13 +198,13 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    Definition: libwebsockets.h:722
    Definition: libwebsockets.h:909
    LWS_VISIBLE LWS_EXTERN int lws_service_tsi(struct lws_context *context, int timeout_ms, int tsi)
    -
    unsigned char * data
    Definition: libwebsockets.h:4061
    +
    unsigned char * data
    Definition: libwebsockets.h:4072
    const struct lws_protocol_vhost_options * extra_mimetypes
    Definition: libwebsockets.h:2025
    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:715
    LWS_VISIBLE LWS_EXTERN const char * lws_urlencode(char *escaped, const char *string, int len)
    Definition: libwebsockets.h:796
    -
    uv_loop_t * loop
    Definition: libwebsockets.h:4276
    +
    uv_loop_t * loop
    Definition: libwebsockets.h:4287
    Definition: libwebsockets.h:894
    Definition: libwebsockets.h:72
    Definition: libwebsockets.h:3300
    @@ -231,7 +232,7 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    unsigned char origin_protocol
    Definition: libwebsockets.h:2041
    const char * log_filepath
    Definition: libwebsockets.h:1705
    Definition: libwebsockets.h:771
    -
    unsigned int max_content_size
    Definition: libwebsockets.h:4284
    +
    unsigned int max_content_size
    Definition: libwebsockets.h:4295
    int option_index
    Definition: libwebsockets.h:1152
    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)
    @@ -239,7 +240,7 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    const char * uri_replace_to
    Definition: libwebsockets.h:2115
    struct lws * parent_wsi
    Definition: libwebsockets.h:2108
    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:4307
    +
    enum lwsgs_smtp_states estate
    Definition: libwebsockets.h:4318
    LWS_VISIBLE LWS_EXTERN int lws_spa_finalize(struct lws_spa *spa)
    Definition: libwebsockets.h:667
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_get_count_threads(struct lws_context *context)
    @@ -247,14 +248,14 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    char name[64]
    Definition: libwebsockets.h:1443
    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:4311
    +
    char email_buf[256]
    Definition: libwebsockets.h:4322
    LWS_VISIBLE LWS_EXTERN int lws_is_ssl(struct lws *wsi)
    Definition: libwebsockets.h:1532
    -
    int(* close)(struct lws *wsi, lws_filefd_type fd)
    Definition: libwebsockets.h:4128
    +
    int(* close)(struct lws *wsi, lws_filefd_type fd)
    Definition: libwebsockets.h:4139
    uv_lib_t lib
    Definition: libwebsockets.h:1439
    x509_crt certificate
    Definition: libwebsockets.h:240
    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:4262
    +
    Definition: libwebsockets.h:4273
    LWS_VISIBLE LWS_EXTERN int lws_is_cgi(struct lws *wsi)
    int ssl_connection
    Definition: libwebsockets.h:2089
    Definition: libwebsockets.h:1491
    @@ -308,7 +309,7 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    LWS_VISIBLE LWS_EXTERN int lwsl_timestamp(int level, char *p, int len)
    Definition: libwebsockets.h:1007
    Definition: libwebsockets.h:1571
    -
    uv_timer_t timeout_email
    Definition: libwebsockets.h:4306
    +
    uv_timer_t timeout_email
    Definition: libwebsockets.h:4317
    Definition: libwebsockets.h:1541
    short max_http_header_pool
    Definition: libwebsockets.h:1672
    LWS_VISIBLE LWS_EXTERN int lws_chunked_html_process(struct lws_process_html_args *args, struct lws_process_html_state *s)
    @@ -317,7 +318,7 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    size_t per_session_data_size
    Definition: libwebsockets.h:1322
    Definition: libwebsockets.h:574
    const struct lws_protocol_vhost_options * reject_service_keywords
    Definition: libwebsockets.h:1744
    -
    lwsgs_smtp_states
    Definition: libwebsockets.h:4260
    +
    lwsgs_smtp_states
    Definition: libwebsockets.h:4271
    Definition: libwebsockets.h:1553
    Definition: libwebsockets.h:847
    LWS_VISIBLE LWS_EXTERN int lws_snprintf(char *str, size_t size, const char *format,...)
    @@ -330,7 +331,7 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    const char * email
    Definition: libwebsockets.h:1499
    LWS_VISIBLE LWS_EXTERN int lws_get_random(struct lws_context *context, void *buf, int len)
    Definition: libwebsockets.h:561
    -
    uv_connect_t email_connect_req
    Definition: libwebsockets.h:4308
    +
    uv_connect_t email_connect_req
    Definition: libwebsockets.h:4319
    const char * server_string
    Definition: libwebsockets.h:1710
    Definition: libwebsockets.h:1564
    SHORT events
    Definition: libwebsockets.h:421
    @@ -353,7 +354,7 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    LWS_VISIBLE LWS_EXTERN void * lws_context_user(struct lws_context *context)
    const char * name
    Definition: libwebsockets.h:1315
    LWS_VISIBLE LWS_EXTERN int lws_init_vhost_client_ssl(const struct lws_context_creation_info *info, struct lws_vhost *vhost)
    -
    Definition: libwebsockets.h:4266
    +
    Definition: libwebsockets.h:4277
    unsigned int http_proxy_port
    Definition: libwebsockets.h:1638
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_partial_buffered(struct lws *wsi)
    unsigned int timeout_secs
    Definition: libwebsockets.h:1685
    @@ -375,10 +376,10 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    Definition: libwebsockets.h:1150
    Definition: libwebsockets.h:600
    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:4063
    +
    int len
    Definition: libwebsockets.h:4074
    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:1600
    -
    Definition: libwebsockets.h:4122
    +
    Definition: libwebsockets.h:4133
    LWS_VISIBLE LWS_EXTERN void lwsl_hexdump(void *buf, size_t len)
    Definition: libwebsockets.h:1012
    lws_spa_fileupload_states
    Definition: libwebsockets.h:2916
    @@ -388,13 +389,13 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    Definition: libwebsockets.h:558
    Definition: libwebsockets.h:567
    LWS_VISIBLE LWS_EXTERN const char * lws_sql_purify(char *escaped, const char *string, int len)
    -
    uv_tcp_t email_client
    Definition: libwebsockets.h:4309
    +
    uv_tcp_t email_client
    Definition: libwebsockets.h:4320
    Definition: libwebsockets.h:419
    Definition: libwebsockets.h:671
    -
    lws_filefd_type(* open)(struct lws *wsi, const char *filename, unsigned long *filelen, int flags)
    Definition: libwebsockets.h:4123
    +
    lws_filefd_type(* open)(struct lws *wsi, const char *filename, unsigned long *filelen, int flags)
    Definition: libwebsockets.h:4134
    lws_write_protocol
    Definition: libwebsockets.h:3263
    const char * client_offer
    Definition: libwebsockets.h:1227
    -
    int(* read)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)
    Definition: libwebsockets.h:4133
    +
    int(* read)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)
    Definition: libwebsockets.h:4144
    LWS_VISIBLE LWS_EXTERN void lws_cancel_service(struct lws_context *context)
    Definition: libwebsockets.h:2917
    Definition: libwebsockets.h:572
    @@ -407,7 +408,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:748
    const char * name
    Definition: libwebsockets.h:1225
    -
    Definition: libwebsockets.h:4265
    +
    Definition: libwebsockets.h:4276
    short revents
    Definition: libwebsockets.h:437
    lws_extension_callback_function * callback
    Definition: libwebsockets.h:1226
    long ssl_options_set
    Definition: libwebsockets.h:1724
    @@ -435,19 +436,19 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    LWS_VISIBLE LWS_EXTERN struct lws_context * lws_create_context(struct lws_context_creation_info *info)
    Definition: libwebsockets.h:727
    void * data
    Definition: libwebsockets.h:2541
    -
    char * content
    Definition: libwebsockets.h:4312
    +
    char * content
    Definition: libwebsockets.h:4323
    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:1614
    -
    Definition: libwebsockets.h:4273
    +
    Definition: libwebsockets.h:4284
    const char * address
    Definition: libwebsockets.h:2085
    -
    unsigned long(* seek_cur)(struct lws *wsi, lws_filefd_type fd, long offset_from_cur_pos)
    Definition: libwebsockets.h:4130
    +
    unsigned long(* seek_cur)(struct lws *wsi, lws_filefd_type fd, long offset_from_cur_pos)
    Definition: libwebsockets.h:4141
    void * user
    Definition: libwebsockets.h:1343
    int events
    Definition: libwebsockets.h:535
    LWS_VISIBLE LWS_EXTERN unsigned int lws_http_client_http_response(struct lws *wsi)
    -
    int(* on_get_body)(struct lws_email *email, char *buf, int len)
    Definition: libwebsockets.h:4299
    +
    int(* on_get_body)(struct lws_email *email, char *buf, int len)
    Definition: libwebsockets.h:4310
    Definition: libwebsockets.h:2002
    void * user
    Definition: libwebsockets.h:1646
    -
    Definition: libwebsockets.h:4269
    +
    Definition: libwebsockets.h:4280
    Definition: libwebsockets.h:3286
    char * token
    Definition: libwebsockets.h:2598
    LWS_VISIBLE LWS_EXTERN void * lws_protocol_vh_priv_get(struct lws_vhost *vhost, const struct lws_protocols *prot)
    @@ -470,11 +471,11 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    LWS_VISIBLE LWS_EXTERN void lws_cancel_service_pt(struct lws *wsi)
    Definition: libwebsockets.h:1566
    Definition: libwebsockets.h:608
    -
    Definition: libwebsockets.h:4264
    +
    Definition: libwebsockets.h:4275
    unsigned int api_magic
    Definition: libwebsockets.h:1424
    Definition: libwebsockets.h:1569
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_send_pipe_choked(struct lws *wsi)
    -
    Definition: libwebsockets.h:4267
    +
    Definition: libwebsockets.h:4278
    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:2938
    diff --git a/doc/html/navtreedata.js b/doc/html/navtreedata.js index 8b69ae81..c6c1a2c1 100644 --- a/doc/html/navtreedata.js +++ b/doc/html/navtreedata.js @@ -138,7 +138,7 @@ var NAVTREEINDEX = "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a4933347a821e73c3f1e13fb6bfc7ad93", "group__service.html#ga29c246707997ab7a466aa709aecd2d7b", "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2", -"structlws__extension.html" +"structlws__ext__options.html#a1769e4a9805bbdda227821e9578ddc7e" ]; var SYNCONMSG = 'click to disable panel synchronisation'; diff --git a/doc/html/navtreeindex0.js b/doc/html/navtreeindex0.js index b4448659..663be16e 100644 --- a/doc/html/navtreeindex0.js +++ b/doc/html/navtreeindex0.js @@ -48,18 +48,18 @@ var NAVTREEINDEX0 = "group__HTTP-headers-create.html#gaf74adb761b22566ad70004882712dce1":[9,6,3,1], "group__HTTP-headers-create.html#gaf74adb761b22566ad70004882712dce1":[11,0,0,0,47], "group__HTTP-headers-read.html":[9,6,4], -"group__HTTP-headers-read.html#ga2c0597b2ef1d2cee35736c338bcbd17b":[11,0,0,0,162], +"group__HTTP-headers-read.html#ga2c0597b2ef1d2cee35736c338bcbd17b":[11,0,0,0,163], "group__HTTP-headers-read.html#ga2c0597b2ef1d2cee35736c338bcbd17b":[9,6,4,7], -"group__HTTP-headers-read.html#ga594f3d0ece5b09c2ccf9f98ea533bb4e":[11,0,0,0,112], +"group__HTTP-headers-read.html#ga594f3d0ece5b09c2ccf9f98ea533bb4e":[11,0,0,0,113], "group__HTTP-headers-read.html#ga594f3d0ece5b09c2ccf9f98ea533bb4e":[9,6,4,5], -"group__HTTP-headers-read.html#ga6ce6aa1c0155ea42b7708bed271d1c77":[11,0,0,0,110], +"group__HTTP-headers-read.html#ga6ce6aa1c0155ea42b7708bed271d1c77":[11,0,0,0,111], "group__HTTP-headers-read.html#ga6ce6aa1c0155ea42b7708bed271d1c77":[9,6,4,3], "group__HTTP-headers-read.html#ga6e747906f9d76532ec118d6ef418b82e":[11,0,0,0,35], -"group__HTTP-headers-read.html#ga84e9ce5e71a77501a0998ac403a984c2":[11,0,0,0,108], +"group__HTTP-headers-read.html#ga84e9ce5e71a77501a0998ac403a984c2":[11,0,0,0,109], "group__HTTP-headers-read.html#ga84e9ce5e71a77501a0998ac403a984c2":[9,6,4,2], -"group__HTTP-headers-read.html#ga8ade0e1ffb0da7e62b989d8d867bf6c8":[11,0,0,0,113], +"group__HTTP-headers-read.html#ga8ade0e1ffb0da7e62b989d8d867bf6c8":[11,0,0,0,114], "group__HTTP-headers-read.html#ga8ade0e1ffb0da7e62b989d8d867bf6c8":[9,6,4,6], -"group__HTTP-headers-read.html#gaa427cad61a9a5e3004afd65c4527b5e9":[11,0,0,0,111], +"group__HTTP-headers-read.html#gaa427cad61a9a5e3004afd65c4527b5e9":[11,0,0,0,112], "group__HTTP-headers-read.html#gaa427cad61a9a5e3004afd65c4527b5e9":[9,6,4,4], "group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea03293996964a8bb617215508908048d4":[11,0,0,0,35,42], "group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea05c73ad09f25570a50068de13333e41a":[11,0,0,0,35,57], @@ -157,17 +157,17 @@ var NAVTREEINDEX0 = "group__Protocols-and-Plugins.html":[9,10], "group__Protocols-and-Plugins.html#ga106b37ae9c247e84d191ab09441adc43":[9,10,4], "group__Protocols-and-Plugins.html#ga106b37ae9c247e84d191ab09441adc43":[11,0,0,0,92], -"group__Protocols-and-Plugins.html#ga25754726d97c5f519d313e691a9fe29d":[11,0,0,0,170], +"group__Protocols-and-Plugins.html#ga25754726d97c5f519d313e691a9fe29d":[11,0,0,0,171], "group__Protocols-and-Plugins.html#ga25754726d97c5f519d313e691a9fe29d":[9,10,9], "group__Protocols-and-Plugins.html#ga40994491e1567f91f579d2b444775266":[11,0,0,0,13], -"group__Protocols-and-Plugins.html#ga72ad550786ca7976463589d347e62112":[9,10,5], "group__Protocols-and-Plugins.html#ga72ad550786ca7976463589d347e62112":[11,0,0,0,104], +"group__Protocols-and-Plugins.html#ga72ad550786ca7976463589d347e62112":[9,10,5], "group__Protocols-and-Plugins.html#ga83f7a924ba790fa273476075a59f08b0":[11,0,0,0,12], -"group__Protocols-and-Plugins.html#ga8bbe5e65faca068845704bab911a5030":[11,0,0,0,132], +"group__Protocols-and-Plugins.html#ga8bbe5e65faca068845704bab911a5030":[11,0,0,0,133], "group__Protocols-and-Plugins.html#ga8bbe5e65faca068845704bab911a5030":[9,10,6], -"group__Protocols-and-Plugins.html#gaec0c0477288ff3f83aff38d357b883d1":[11,0,0,0,134], +"group__Protocols-and-Plugins.html#gaec0c0477288ff3f83aff38d357b883d1":[11,0,0,0,135], "group__Protocols-and-Plugins.html#gaec0c0477288ff3f83aff38d357b883d1":[9,10,8], -"group__Protocols-and-Plugins.html#gaf3be4243443baac0f8be1fcfb4d25129":[11,0,0,0,133], +"group__Protocols-and-Plugins.html#gaf3be4243443baac0f8be1fcfb4d25129":[11,0,0,0,134], "group__Protocols-and-Plugins.html#gaf3be4243443baac0f8be1fcfb4d25129":[9,10,7], "group__callback-when-writeable.html":[9,1], "group__callback-when-writeable.html#ga13c984d8c5a44a745fd02bc2fba36053":[9,1,1], @@ -192,12 +192,12 @@ var NAVTREEINDEX0 = "group__client.html#ga0c966136905f467816307cfba6deb5fd":[9,2,4], "group__client.html#ga0c966136905f467816307cfba6deb5fd":[11,0,0,0,72], "group__client.html#ga26588fb345083076c14169dd5859f57a":[11,0,0,0,73], -"group__client.html#ga4450c34200bf9dab3beb90ef23221870":[11,0,0,0,115], +"group__client.html#ga4450c34200bf9dab3beb90ef23221870":[11,0,0,0,116], "group__client.html#ga4af0a20108a95e8b6d94dd4d80055ff3":[9,2,2], "group__client.html#ga4af0a20108a95e8b6d94dd4d80055ff3":[11,0,0,0,70], -"group__client.html#ga4f44b8230e6732816ca5cd8d1aaaf340":[11,0,0,0,118], +"group__client.html#ga4f44b8230e6732816ca5cd8d1aaaf340":[11,0,0,0,119], "group__client.html#ga4f44b8230e6732816ca5cd8d1aaaf340":[9,2,6], -"group__client.html#ga715efffc0c4e8fbf72a4293008eb2187":[11,0,0,0,114], +"group__client.html#ga715efffc0c4e8fbf72a4293008eb2187":[11,0,0,0,115], "group__client.html#ga715efffc0c4e8fbf72a4293008eb2187":[9,2,5], "group__client.html#ga96f3dbad54b2853969cfa933d66871ce":[9,2,1], "group__client.html#ga96f3dbad54b2853969cfa933d66871ce":[11,0,0,0,25], @@ -208,29 +208,29 @@ var NAVTREEINDEX0 = "group__client.html#gga96f3dbad54b2853969cfa933d66871cea89866ab6a749aaa1684158c55f826b35":[11,0,0,0,25,2], "group__client.html#gga96f3dbad54b2853969cfa933d66871ceafc72c0ffbc7462bdddd4ce7bd99ac092":[11,0,0,0,25,1], "group__context-and-vhost.html":[9,4], -"group__context-and-vhost.html#ga06e77ce2916f8bc9826ef8d9d68e3932":[11,0,0,0,109], +"group__context-and-vhost.html#ga06e77ce2916f8bc9826ef8d9d68e3932":[11,0,0,0,110], "group__context-and-vhost.html#ga06e77ce2916f8bc9826ef8d9d68e3932":[9,4,9], "group__context-and-vhost.html#ga0c54c667ccd9b8b3dddcd123ca72f87c":[9,4,8], "group__context-and-vhost.html#ga0c54c667ccd9b8b3dddcd123ca72f87c":[11,0,0,0,81], "group__context-and-vhost.html#ga1863f0a15ab9da0f07be7bd66230d232":[11,0,0,0,75], "group__context-and-vhost.html#ga1863f0a15ab9da0f07be7bd66230d232":[9,4,4], "group__context-and-vhost.html#ga1dce5453d72a2037051aba5410e18135":[9,4,10], -"group__context-and-vhost.html#ga1dce5453d72a2037051aba5410e18135":[11,0,0,0,123], +"group__context-and-vhost.html#ga1dce5453d72a2037051aba5410e18135":[11,0,0,0,124], "group__context-and-vhost.html#ga256a49a07d2dd5062d6cf7bdc3668096":[11,0,0,0,15], "group__context-and-vhost.html#ga341064721add2618ae1b29717493a212":[9,4,15], -"group__context-and-vhost.html#ga341064721add2618ae1b29717493a212":[11,0,0,0,177], +"group__context-and-vhost.html#ga341064721add2618ae1b29717493a212":[11,0,0,0,178], "group__context-and-vhost.html#ga41c2d763f78cc248df3b9f8645dbd2a5":[11,0,0,0,27], "group__context-and-vhost.html#ga41c2d763f78cc248df3b9f8645dbd2a5":[9,4,3], "group__context-and-vhost.html#ga7e9d5405547a457d86e0b4f0ae2bb1c4":[9,4,12], -"group__context-and-vhost.html#ga7e9d5405547a457d86e0b4f0ae2bb1c4":[11,0,0,0,151], +"group__context-and-vhost.html#ga7e9d5405547a457d86e0b4f0ae2bb1c4":[11,0,0,0,152], "group__context-and-vhost.html#ga8db03e19a372e34ac25cf21af894a02c":[9,4,13], -"group__context-and-vhost.html#ga8db03e19a372e34ac25cf21af894a02c":[11,0,0,0,169], +"group__context-and-vhost.html#ga8db03e19a372e34ac25cf21af894a02c":[11,0,0,0,170], "group__context-and-vhost.html#ga8ee0314028755f1ddfa9428e09b4fddb":[11,0,0,0,76], "group__context-and-vhost.html#ga8ee0314028755f1ddfa9428e09b4fddb":[9,4,5], "group__context-and-vhost.html#ga94e6cc2223c4eec316b13bcebc3628b6":[9,4,11], -"group__context-and-vhost.html#ga94e6cc2223c4eec316b13bcebc3628b6":[11,0,0,0,124], +"group__context-and-vhost.html#ga94e6cc2223c4eec316b13bcebc3628b6":[11,0,0,0,125], "group__context-and-vhost.html#ga98d88c9080fd89c37114363a6474ea73":[9,4,14], -"group__context-and-vhost.html#ga98d88c9080fd89c37114363a6474ea73":[11,0,0,0,176], +"group__context-and-vhost.html#ga98d88c9080fd89c37114363a6474ea73":[11,0,0,0,177], "group__context-and-vhost.html#gaa327c9d543edaddf06765d2c6131065c":[11,0,0,0,77], "group__context-and-vhost.html#gaeb12f934bfd178bd2132a9e73fc641da":[11,0,0,0,79], "group__context-and-vhost.html#gaeb12f934bfd178bd2132a9e73fc641da":[9,4,6], diff --git a/doc/html/navtreeindex1.js b/doc/html/navtreeindex1.js index 2917d348..2915a903 100644 --- a/doc/html/navtreeindex1.js +++ b/doc/html/navtreeindex1.js @@ -37,7 +37,7 @@ var NAVTREEINDEX1 = "group__extensions.html#gaae7169b2cd346b34fa33d0250db2afd0":[11,0,0,0,10], "group__extensions.html#gacc9f55936dc165257a2e1f7d47bce89e":[9,5,4], "group__extensions.html#gacc9f55936dc165257a2e1f7d47bce89e":[11,0,0,0,29], -"group__extensions.html#gae0e24e1768f83a7fb07896ce975704b9":[11,0,0,0,149], +"group__extensions.html#gae0e24e1768f83a7fb07896ce975704b9":[11,0,0,0,150], "group__extensions.html#gae0e24e1768f83a7fb07896ce975704b9":[9,5,7], "group__extensions.html#gae9993815eee72c6070300a0ae2f022d7":[11,0,0,0,30], "group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea1c86adf924c8786a12bee9687094673e":[9,5,4,1], @@ -77,21 +77,21 @@ var NAVTREEINDEX1 = "group__fops.html#gac08aef64c4c34647ed699b24759b6b0e":[9,20,1], "group__fops.html#gac08aef64c4c34647ed699b24759b6b0e":[11,0,0,0,97], "group__form-parsing.html":[9,6,0], -"group__form-parsing.html#ga162f86762173a2bc8c28497941d74815":[11,0,0,0,155], +"group__form-parsing.html#ga162f86762173a2bc8c28497941d74815":[11,0,0,0,156], "group__form-parsing.html#ga162f86762173a2bc8c28497941d74815":[9,6,0,2], -"group__form-parsing.html#ga2da476217166da02704b90d3a8d4f3cd":[11,0,0,0,159], +"group__form-parsing.html#ga2da476217166da02704b90d3a8d4f3cd":[11,0,0,0,160], "group__form-parsing.html#ga2da476217166da02704b90d3a8d4f3cd":[9,6,0,6], -"group__form-parsing.html#ga3fbe378632f85ec9a14cc2c1687bf05f":[11,0,0,0,158], +"group__form-parsing.html#ga3fbe378632f85ec9a14cc2c1687bf05f":[11,0,0,0,159], "group__form-parsing.html#ga3fbe378632f85ec9a14cc2c1687bf05f":[9,6,0,5], "group__form-parsing.html#ga41a74a822771d3dce89751aa3bce28ae":[9,6,0,1], "group__form-parsing.html#ga41a74a822771d3dce89751aa3bce28ae":[11,0,0,0,34], "group__form-parsing.html#ga5a70527c0861c2ffa3d29333a6aa7f8e":[9,6,0,0], "group__form-parsing.html#ga5a70527c0861c2ffa3d29333a6aa7f8e":[11,0,0,0,17], -"group__form-parsing.html#ga83835bf250ee3d4a60f36a182f2b8d24":[11,0,0,0,157], +"group__form-parsing.html#ga83835bf250ee3d4a60f36a182f2b8d24":[11,0,0,0,158], "group__form-parsing.html#ga83835bf250ee3d4a60f36a182f2b8d24":[9,6,0,4], -"group__form-parsing.html#ga9ad9ebf5ea1a7108415ed7e04cb231d2":[11,0,0,0,160], +"group__form-parsing.html#ga9ad9ebf5ea1a7108415ed7e04cb231d2":[11,0,0,0,161], "group__form-parsing.html#ga9ad9ebf5ea1a7108415ed7e04cb231d2":[9,6,0,7], -"group__form-parsing.html#gaaa482f07dad3f04b391cccf0a814e13b":[11,0,0,0,156], +"group__form-parsing.html#gaaa482f07dad3f04b391cccf0a814e13b":[11,0,0,0,157], "group__form-parsing.html#gaaa482f07dad3f04b391cccf0a814e13b":[9,6,0,3], "group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea2d25de44865bd44e5a3903a2bab9ca83":[9,6,0,1,2], "group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea2d25de44865bd44e5a3903a2bab9ca83":[11,0,0,0,34,2], @@ -152,28 +152,28 @@ var NAVTREEINDEX1 = "group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8daf06c31278cb67d7eec4b2b8157b9ad25":[11,0,0,0,22,10], "group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8dafac24097912a70f224166528ce44b83b":[11,0,0,0,22,8], "group__http.html":[9,6], -"group__http.html#ga8fbf01e473ac421fc33ad9f8da8b8a25":[11,0,0,0,116], +"group__http.html#ga8fbf01e473ac421fc33ad9f8da8b8a25":[11,0,0,0,117], "group__http.html#ga8fbf01e473ac421fc33ad9f8da8b8a25":[9,6,7], -"group__http.html#gac8a4a71240857dc6b2ed70456b6923f4":[11,0,0,0,137], +"group__http.html#gac8a4a71240857dc6b2ed70456b6923f4":[11,0,0,0,138], "group__http.html#gac8a4a71240857dc6b2ed70456b6923f4":[9,6,9], -"group__http.html#gad27aed6c66a41b2b89ffe4da2a309e8a":[11,0,0,0,117], +"group__http.html#gad27aed6c66a41b2b89ffe4da2a309e8a":[11,0,0,0,118], "group__http.html#gad27aed6c66a41b2b89ffe4da2a309e8a":[9,6,8], "group__httpft.html":[9,6,2], -"group__httpft.html#ga29e1123f6d56cd777b3e5bf9ca40f9e5":[11,0,0,0,142], -"group__httpft.html#gab393a06d3d2722af4c3f8b06842c80d7":[11,0,0,0,141], +"group__httpft.html#ga29e1123f6d56cd777b3e5bf9ca40f9e5":[11,0,0,0,143], +"group__httpft.html#gab393a06d3d2722af4c3f8b06842c80d7":[11,0,0,0,142], "group__httpft.html#gab393a06d3d2722af4c3f8b06842c80d7":[9,6,2,1], "group__httpft.html#gab4da87a4800413f15e7aba649fb1d77c":[9,6,2,0], "group__httpft.html#gab4da87a4800413f15e7aba649fb1d77c":[11,0,0,0,99], "group__log.html":[9,7], "group__log.html#ga14542b84d2c76efa7814124bb10f9c5f":[11,0,0,0,32], -"group__log.html#ga244647f9e1bf0097ccdde66d74f41e26":[11,0,0,0,150], +"group__log.html#ga244647f9e1bf0097ccdde66d74f41e26":[11,0,0,0,151], "group__log.html#ga244647f9e1bf0097ccdde66d74f41e26":[9,7,0], -"group__log.html#ga42e39775c6b69b7251bdbf5a2cdd5dcd":[11,0,0,0,175], +"group__log.html#ga42e39775c6b69b7251bdbf5a2cdd5dcd":[11,0,0,0,176], "group__log.html#ga42e39775c6b69b7251bdbf5a2cdd5dcd":[9,7,3], "group__log.html#ga74eb146969f0595e12ea835851b4588e":[11,0,0,0,41], -"group__log.html#ga898b1f03872ad019f507d4e35bbefa90":[11,0,0,0,174], +"group__log.html#ga898b1f03872ad019f507d4e35bbefa90":[11,0,0,0,175], "group__log.html#ga898b1f03872ad019f507d4e35bbefa90":[9,7,2], -"group__log.html#gab7c0fc936cc9f1eb58e2bb234c15147c":[11,0,0,0,173], +"group__log.html#gab7c0fc936cc9f1eb58e2bb234c15147c":[11,0,0,0,174], "group__log.html#gab7c0fc936cc9f1eb58e2bb234c15147c":[9,7,1], "group__log.html#gaf5f07837692b2f231a79da8a058288aa":[11,0,0,0,40], "group__log.html#gga14542b84d2c76efa7814124bb10f9c5fa083a44e71966a0e768426e477e1bc358":[11,0,0,0,32,8], @@ -190,10 +190,10 @@ var NAVTREEINDEX1 = "group__misc.html":[9,8], "group__misc.html#ga0af4f7d2dd375aeedcfa7eb0e1101c4b":[9,8,2], "group__misc.html#ga0af4f7d2dd375aeedcfa7eb0e1101c4b":[11,0,0,0,95], -"group__misc.html#ga0e705d498e8c8500649a26ba30a1e106":[11,0,0,0,135], -"group__misc.html#ga1ec0d9faac5d3a5824d765c287c043aa":[11,0,0,0,130], +"group__misc.html#ga0e705d498e8c8500649a26ba30a1e106":[11,0,0,0,136], +"group__misc.html#ga1ec0d9faac5d3a5824d765c287c043aa":[11,0,0,0,131], "group__misc.html#ga1ec0d9faac5d3a5824d765c287c043aa":[9,8,8], -"group__misc.html#ga33bf2635033710b25f931b57ed663e1e":[11,0,0,0,129], +"group__misc.html#ga33bf2635033710b25f931b57ed663e1e":[11,0,0,0,130], "group__misc.html#ga33bf2635033710b25f931b57ed663e1e":[9,8,7], "group__misc.html#ga58f906c6be0ca80efd813f694569dd4a":[11,0,0,0,105], "group__misc.html#ga58f906c6be0ca80efd813f694569dd4a":[9,8,6], @@ -201,11 +201,11 @@ var NAVTREEINDEX1 = "group__misc.html#ga629f48268fd1856b54b11172991b97d9":[11,0,0,0,96], "group__misc.html#ga8930fe36a3f3eefe4a6a4fd499d8e899":[9,8,5], "group__misc.html#ga8930fe36a3f3eefe4a6a4fd499d8e899":[11,0,0,0,100], -"group__misc.html#ga9f37d0e357de2ab4170723fcdb665d21":[11,0,0,0,154], +"group__misc.html#ga9f37d0e357de2ab4170723fcdb665d21":[11,0,0,0,155], "group__misc.html#ga9f37d0e357de2ab4170723fcdb665d21":[9,8,10], -"group__misc.html#gaa194584fff9698f3b280658f770ccd0f":[11,0,0,0,172], +"group__misc.html#gaa194584fff9698f3b280658f770ccd0f":[11,0,0,0,173], "group__misc.html#gaa194584fff9698f3b280658f770ccd0f":[9,8,11], -"group__misc.html#gab321ed812f46f6dc7ef9e3ca6f00cf1b":[11,0,0,0,148], +"group__misc.html#gab321ed812f46f6dc7ef9e3ca6f00cf1b":[11,0,0,0,149], "group__misc.html#gab321ed812f46f6dc7ef9e3ca6f00cf1b":[9,8,9], "group__misc.html#gac6abfc0b2bd5b2f09281a4432bb2f5f0":[9,8,4], "group__misc.html#gac6abfc0b2bd5b2f09281a4432bb2f5f0":[11,0,0,0,98], @@ -216,21 +216,21 @@ var NAVTREEINDEX1 = "group__net.html":[9,9], "group__net.html#ga092e5f473b3347f03ffeef8a950080f3":[9,9,1], "group__net.html#ga092e5f473b3347f03ffeef8a950080f3":[11,0,0,0,101], -"group__net.html#ga869d8bdffb0f2a7ce08e3ce10d6be3d8":[11,0,0,0,119], +"group__net.html#ga869d8bdffb0f2a7ce08e3ce10d6be3d8":[11,0,0,0,120], "group__net.html#ga869d8bdffb0f2a7ce08e3ce10d6be3d8":[9,9,3], "group__net.html#gad01014fed09759741b6d23afccfdaacc":[9,9,2], "group__net.html#gad01014fed09759741b6d23afccfdaacc":[11,0,0,0,102], "group__net.html#gad0df22db2be9fc65a667a1e83f9a92a4":[9,9,0], "group__net.html#gad0df22db2be9fc65a667a1e83f9a92a4":[11,0,0,0,65], "group__pur.html":[9,12], -"group__pur.html#ga9cc82f06e5ae7e71458626d7a39a5865":[11,0,0,0,161], +"group__pur.html#ga9cc82f06e5ae7e71458626d7a39a5865":[11,0,0,0,162], "group__pur.html#ga9cc82f06e5ae7e71458626d7a39a5865":[9,12,1], -"group__pur.html#gab15187efcfa256b7c928562c182b92a3":[11,0,0,0,125], +"group__pur.html#gab15187efcfa256b7c928562c182b92a3":[11,0,0,0,126], "group__pur.html#gab15187efcfa256b7c928562c182b92a3":[9,12,0], "group__sending-data.html":[9,13], "group__sending-data.html#ga98b099cf8c1c7e38ad78501f270e193d":[9,13,0], "group__sending-data.html#ga98b099cf8c1c7e38ad78501f270e193d":[11,0,0,0,36], -"group__sending-data.html#gafd5fdd285a0e25ba7e3e1051deec1001":[11,0,0,0,171], +"group__sending-data.html#gafd5fdd285a0e25ba7e3e1051deec1001":[11,0,0,0,172], "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,36,2], @@ -242,8 +242,8 @@ var NAVTREEINDEX1 = "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da80e8f169fda236c56bfb795ed62903db":[9,13,0,0], "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da80e8f169fda236c56bfb795ed62903db":[11,0,0,0,36,0], "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dab7e7a62cf6f456c09c21dff24dad9039":[11,0,0,0,36,5], -"group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e":[9,13,0,3], "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e":[11,0,0,0,36,3], +"group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e":[9,13,0,3], "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dae7d8a025a65524652fe9e24c2654c935":[11,0,0,0,36,6], "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193daf6486c0dba50c44198100717721d9ab2":[9,13,0,1], "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193daf6486c0dba50c44198100717721d9ab2":[11,0,0,0,36,1], diff --git a/doc/html/navtreeindex2.js b/doc/html/navtreeindex2.js index c2196b11..7bde0bcd 100644 --- a/doc/html/navtreeindex2.js +++ b/doc/html/navtreeindex2.js @@ -2,22 +2,22 @@ var NAVTREEINDEX2 = { "group__service.html#ga29c246707997ab7a466aa709aecd2d7b":[9,0,1], "group__service.html#ga29c246707997ab7a466aa709aecd2d7b":[11,0,0,0,64], -"group__service.html#ga4fd9d714434ca499e2b3f7dbba86f241":[11,0,0,0,144], +"group__service.html#ga4fd9d714434ca499e2b3f7dbba86f241":[11,0,0,0,145], "group__service.html#ga4fd9d714434ca499e2b3f7dbba86f241":[9,0,3], -"group__service.html#ga53e3d0801dfda7960a7249dd559e68a2":[11,0,0,0,63], "group__service.html#ga53e3d0801dfda7960a7249dd559e68a2":[9,0,0], -"group__service.html#ga9b3cc4473fd8848e5bbee7f310712939":[11,0,0,0,147], +"group__service.html#ga53e3d0801dfda7960a7249dd559e68a2":[11,0,0,0,63], +"group__service.html#ga9b3cc4473fd8848e5bbee7f310712939":[11,0,0,0,148], "group__service.html#ga9b3cc4473fd8848e5bbee7f310712939":[9,0,6], -"group__service.html#gad82efa5466d14a9f05aa06416375b28d":[11,0,0,0,145], +"group__service.html#gad82efa5466d14a9f05aa06416375b28d":[11,0,0,0,146], "group__service.html#gad82efa5466d14a9f05aa06416375b28d":[9,0,4], +"group__service.html#gaebf426eda371ba23642fc11d8e0ace6b":[11,0,0,0,147], "group__service.html#gaebf426eda371ba23642fc11d8e0ace6b":[9,0,5], -"group__service.html#gaebf426eda371ba23642fc11d8e0ace6b":[11,0,0,0,146], -"group__service.html#gaf95bd0c663d6516a0c80047d9b1167a8":[11,0,0,0,143], +"group__service.html#gaf95bd0c663d6516a0c80047d9b1167a8":[11,0,0,0,144], "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,54], -"group__sha.html#ga7b09ab74646266f0b555103b3bb8dfe5":[11,0,0,0,153], +"group__sha.html#ga7b09ab74646266f0b555103b3bb8dfe5":[11,0,0,0,154], "group__sha.html#ga7b09ab74646266f0b555103b3bb8dfe5":[9,11,2], "group__sha.html#gaf39765e4a3b413efb65e4698b2ec3575":[9,11,1], "group__sha.html#gaf39765e4a3b413efb65e4698b2ec3575":[11,0,0,0,55], @@ -26,20 +26,20 @@ var NAVTREEINDEX2 = "group__smtp.html#ga116be79bf44f9dc2a97f46e051fe4dc0":[11,0,0,0,38], "group__smtp.html#ga25298a5afc1074e13b2d5711a86432b2":[9,14,3], "group__smtp.html#ga25298a5afc1074e13b2d5711a86432b2":[11,0,0,0,84], -"group__smtp.html#ga5e535e346d92a9daf00be33abf79d4eb":[9,14,2], "group__smtp.html#ga5e535e346d92a9daf00be33abf79d4eb":[11,0,0,0,83], -"group__smtp.html#ga77fc9b56a1bb39484844981ec375fc29":[11,0,0,0,85], +"group__smtp.html#ga5e535e346d92a9daf00be33abf79d4eb":[9,14,2], "group__smtp.html#ga77fc9b56a1bb39484844981ec375fc29":[9,14,4], +"group__smtp.html#ga77fc9b56a1bb39484844981ec375fc29":[11,0,0,0,85], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad":[9,14,1,3], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad":[11,0,0,0,38,3], -"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c":[9,14,1,0], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c":[11,0,0,0,38,0], +"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c":[9,14,1,0], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5":[9,14,1,8], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5":[11,0,0,0,38,8], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69":[9,14,1,7], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69":[11,0,0,0,38,7], -"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14":[9,14,1,6], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14":[11,0,0,0,38,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,38,4], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83":[9,14,1,5], @@ -49,18 +49,18 @@ var NAVTREEINDEX2 = "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933":[9,14,1,1], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933":[11,0,0,0,38,1], "group__sock-adopt.html":[9,15], -"group__sock-adopt.html#ga18747e81ff49df2076e7cd4f131f967c":[9,15,2], "group__sock-adopt.html#ga18747e81ff49df2076e7cd4f131f967c":[11,0,0,0,52], -"group__sock-adopt.html#ga5ed5fd251ac0ed46798af341c33bf067":[11,0,0,0,53], +"group__sock-adopt.html#ga18747e81ff49df2076e7cd4f131f967c":[9,15,2], "group__sock-adopt.html#ga5ed5fd251ac0ed46798af341c33bf067":[9,15,3], -"group__sock-adopt.html#gab2d045df0f81afe00891aaed312d552b":[11,0,0,0,51], +"group__sock-adopt.html#ga5ed5fd251ac0ed46798af341c33bf067":[11,0,0,0,53], "group__sock-adopt.html#gab2d045df0f81afe00891aaed312d552b":[9,15,1], -"group__sock-adopt.html#gabe71b7462afb21c767bdc67334f305af":[11,0,0,0,50], +"group__sock-adopt.html#gab2d045df0f81afe00891aaed312d552b":[11,0,0,0,51], "group__sock-adopt.html#gabe71b7462afb21c767bdc67334f305af":[9,15,0], +"group__sock-adopt.html#gabe71b7462afb21c767bdc67334f305af":[11,0,0,0,50], "group__timeout.html":[9,3], "group__timeout.html#ga2c0aa4b9c3c55bae7b35cbfac3246c87":[11,0,0,0,39], "group__timeout.html#gaced9f9237f6172fed9f730a2af51345a":[9,3,0], -"group__timeout.html#gaced9f9237f6172fed9f730a2af51345a":[11,0,0,0,152], +"group__timeout.html#gaced9f9237f6172fed9f730a2af51345a":[11,0,0,0,153], "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a0d6b956db11acb6d263af3ea054a914e":[11,0,0,0,39,12], "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a0eef059426f37d00b75142d4dc3e25e3":[11,0,0,0,39,3], "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a1104c39d0177378713a9332ab7a9d7fe":[11,0,0,0,39,4], @@ -81,9 +81,9 @@ var NAVTREEINDEX2 = "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87ad7ebebb506afd30c48e1e5e3a578cd30":[11,0,0,0,39,1], "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87ae8b3de955cec5da5ea52fe040f914501":[11,0,0,0,39,10], "group__urlendec.html":[9,6,5], -"group__urlendec.html#gaa373a9c16acdd96c395af61ab915ece3":[11,0,0,0,163], +"group__urlendec.html#gaa373a9c16acdd96c395af61ab915ece3":[11,0,0,0,164], "group__urlendec.html#gaa373a9c16acdd96c395af61ab915ece3":[9,6,5,0], -"group__urlendec.html#gabc2888476e50e001c875c1a8abf455b7":[11,0,0,0,164], +"group__urlendec.html#gabc2888476e50e001c875c1a8abf455b7":[11,0,0,0,165], "group__urlendec.html#gabc2888476e50e001c875c1a8abf455b7":[9,6,5,1], "group__usercb.html":[9,16], "group__usercb.html#gad4fcb82e68d60ffacca61a3f783a0a2f":[11,0,0,0,8], @@ -97,10 +97,10 @@ var NAVTREEINDEX2 = "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a06006e98d27e1e884364d88317f83493":[9,16,1,22], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a0e9e3dd667c0c42cdbe1a3d921f4fd79":[11,0,0,0,23,36], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a0e9e3dd667c0c42cdbe1a3d921f4fd79":[9,16,1,36], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a136a7cec11c3afd13245623bd84e76c9":[11,0,0,0,23,9], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a136a7cec11c3afd13245623bd84e76c9":[9,16,1,9], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a17620dd6cb920b9b6daeae63575be08b":[11,0,0,0,23,58], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a136a7cec11c3afd13245623bd84e76c9":[11,0,0,0,23,9], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a17620dd6cb920b9b6daeae63575be08b":[9,16,1,41], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a17620dd6cb920b9b6daeae63575be08b":[11,0,0,0,23,58], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a182a4a14c3278784505cea6d516a8308":[11,0,0,0,23,47], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a1ce5b22039ca37ee224d00047596ea46":[11,0,0,0,23,26], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a1ce5b22039ca37ee224d00047596ea46":[9,16,1,26], @@ -109,15 +109,15 @@ var NAVTREEINDEX2 = "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a23b90b5e5146e760bc3123ae1fd2a6e5":[11,0,0,0,23,40], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a24d39bf1cfc0bad9d92da9ac1717e439":[11,0,0,0,23,0], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a24d39bf1cfc0bad9d92da9ac1717e439":[9,16,1,0], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2db02fc6e1c17ab62b52109d1aa9d738":[9,16,1,7], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2db02fc6e1c17ab62b52109d1aa9d738":[11,0,0,0,23,7], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2db02fc6e1c17ab62b52109d1aa9d738":[9,16,1,7], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2fce9a8608220f32abbf1422a5498804":[11,0,0,0,23,14], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2fce9a8608220f32abbf1422a5498804":[9,16,1,14], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a390da3639296660a78cc1a5dcb19037e":[11,0,0,0,23,25], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a390da3639296660a78cc1a5dcb19037e":[9,16,1,25], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a390da3639296660a78cc1a5dcb19037e":[11,0,0,0,23,25], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a45d538082dec32dbecfe9d9a05ddfecd":[11,0,0,0,23,50], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a48a9590e5e18c7920282e094a0bfd9d8":[11,0,0,0,23,4], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a48a9590e5e18c7920282e094a0bfd9d8":[9,16,1,4], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a48a9590e5e18c7920282e094a0bfd9d8":[11,0,0,0,23,4], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a492c1b1c0ac0ed980042ee732fe2990c":[11,0,0,0,23,6], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a492c1b1c0ac0ed980042ee732fe2990c":[9,16,1,6], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a54269ca88508e6efd3afdb9d360a9caa":[11,0,0,0,23,28], @@ -126,21 +126,21 @@ var NAVTREEINDEX2 = "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a6a09ee9c01c4a233aedbe6697e29cc01":[11,0,0,0,23,44], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a75199176c82c1a56e4a6bbf1cc30c12c":[11,0,0,0,23,18], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a75199176c82c1a56e4a6bbf1cc30c12c":[9,16,1,18], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7e12418eec9bce85735e6460176ab604":[9,16,1,3], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7e12418eec9bce85735e6460176ab604":[11,0,0,0,23,3], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7e12418eec9bce85735e6460176ab604":[9,16,1,3], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7ec8e2e9557ee02a4fc9f7dec7e2babc":[11,0,0,0,23,11], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7ec8e2e9557ee02a4fc9f7dec7e2babc":[9,16,1,11], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a838b18d255c1b94a533287ba302a2eba":[11,0,0,0,23,5], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a838b18d255c1b94a533287ba302a2eba":[9,16,1,5], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a838b18d255c1b94a533287ba302a2eba":[11,0,0,0,23,5], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8909732521d379179003d97ab7a05428":[11,0,0,0,23,35], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8909732521d379179003d97ab7a05428":[9,16,1,35], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a89862929a72bff65257ca1d51a0fce4d":[11,0,0,0,23,52], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8e8b2e6dbeac76d8d126947d2166a514":[11,0,0,0,23,10], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8e8b2e6dbeac76d8d126947d2166a514":[9,16,1,10], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a909cc2a7018864b0b71abacc4058fd8f":[9,16,1,24], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a909cc2a7018864b0b71abacc4058fd8f":[11,0,0,0,23,24], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a982579753e70e59a9ea13ce628ac891a":[9,16,1,42], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a909cc2a7018864b0b71abacc4058fd8f":[9,16,1,24], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a982579753e70e59a9ea13ce628ac891a":[11,0,0,0,23,59], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a982579753e70e59a9ea13ce628ac891a":[9,16,1,42], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa46f705dcf97502e95627ffde614f98b":[11,0,0,0,23,37], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa46f705dcf97502e95627ffde614f98b":[9,16,1,37], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa536e574a642ff3ab9e12bff7ba2c6a2":[9,16,1,2], @@ -155,8 +155,8 @@ var NAVTREEINDEX2 = "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ab69783a9fbf2ca71ad70706bda77b412":[11,0,0,0,23,32], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ab69783a9fbf2ca71ad70706bda77b412":[9,16,1,32], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ab884f3d5f8a6126a0d34c0172f5e3725":[11,0,0,0,23,53], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7abbbe7a0a67c5866ca9109d46823fc5b1":[11,0,0,0,23,8], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7abbbe7a0a67c5866ca9109d46823fc5b1":[9,16,1,8], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7abbbe7a0a67c5866ca9109d46823fc5b1":[11,0,0,0,23,8], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7abcf9c720cd3d361a83d1ac65bf052a25":[11,0,0,0,23,39], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac11c336f7052abf3618962902a71ebc8":[11,0,0,0,23,54], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac3fc5bbb55e69f90396526287ee84a51":[11,0,0,0,23,38], @@ -167,10 +167,10 @@ var NAVTREEINDEX2 = "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac8c0ae966ef1877e0020c0077ff2e4a4":[11,0,0,0,23,41], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aca834dc035b7f7486f9ce40fde54fe9e":[11,0,0,0,23,30], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aca834dc035b7f7486f9ce40fde54fe9e":[9,16,1,30], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7accd8753672d319a30b4b4c2fb775e84d":[11,0,0,0,23,20], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7accd8753672d319a30b4b4c2fb775e84d":[9,16,1,20], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ad5d34583e3556e153eda91620b48cc49":[9,16,1,27], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7accd8753672d319a30b4b4c2fb775e84d":[11,0,0,0,23,20], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ad5d34583e3556e153eda91620b48cc49":[11,0,0,0,23,27], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ad5d34583e3556e153eda91620b48cc49":[9,16,1,27], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ad724974204d51d688f569c5d387b967d":[11,0,0,0,23,43], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ad87774f1c7784cf632e1e2f5b51036e1":[11,0,0,0,23,48], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ad8c6207b0c4e732f3d507f0fb79370e8":[9,16,1,1], @@ -179,28 +179,28 @@ var NAVTREEINDEX2 = "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7adfb41c92e2522712207ef7f2462b5e34":[9,16,1,31], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae4986291b7a810fe290851d73bebeb1c":[11,0,0,0,23,21], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae4986291b7a810fe290851d73bebeb1c":[9,16,1,21], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae5ad65d779b7eab32ab67ceff91a3bac":[9,16,1,23], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae5ad65d779b7eab32ab67ceff91a3bac":[11,0,0,0,23,23], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae8d1de0bb56e03aa58cb4d44b18edd2e":[11,0,0,0,23,12], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae5ad65d779b7eab32ab67ceff91a3bac":[9,16,1,23], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae8d1de0bb56e03aa58cb4d44b18edd2e":[9,16,1,12], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae8d1de0bb56e03aa58cb4d44b18edd2e":[11,0,0,0,23,12], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae9734e1d7af2abf291665ce9e4a728d3":[11,0,0,0,23,19], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae9734e1d7af2abf291665ce9e4a728d3":[9,16,1,19], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aeb0cec65ec82a713cd01e9ca9aeeb5e6":[11,0,0,0,23,57], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aeb0cec65ec82a713cd01e9ca9aeeb5e6":[9,16,1,40], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7af6cf80e57aae8ba0a57a5c456b1fe026":[11,0,0,0,23,55], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afc4b2f72cc9e424a750b506ce0cc4310":[11,0,0,0,23,51], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afd8fd77a1cc9405fcb4f26915d7f2d01":[11,0,0,0,23,29], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afd8fd77a1cc9405fcb4f26915d7f2d01":[9,16,1,29], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afd8fd77a1cc9405fcb4f26915d7f2d01":[11,0,0,0,23,29], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afedadfb3cde37a8ea4c84ed535f26d09":[11,0,0,0,23,16], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afedadfb3cde37a8ea4c84ed535f26d09":[9,16,1,16], "group__uv.html":[9,22], -"group__uv.html#ga097c89497824d4de225a85a00661fc89":[11,0,0,0,126], -"group__uv.html#ga3c75cd6ec3f80fc0a0c8ead4c4e71a15":[11,0,0,0,127], -"group__uv.html#ga99099e045993383f251a8026e1e40414":[11,0,0,0,168], -"group__uv.html#gaa17758e1f852017a2271d8fb3e9305aa":[11,0,0,0,128], -"group__uv.html#gaa5e3593c94f91910d9d928dfa0c18f6c":[11,0,0,0,165], -"group__uv.html#gac5f60dba13a45e5d554b4fb7df7b9610":[11,0,0,0,167], -"group__uv.html#gad85ce3bfc53ff754988d36bf5de39e21":[11,0,0,0,166], +"group__uv.html#ga097c89497824d4de225a85a00661fc89":[11,0,0,0,127], +"group__uv.html#ga3c75cd6ec3f80fc0a0c8ead4c4e71a15":[11,0,0,0,128], +"group__uv.html#ga99099e045993383f251a8026e1e40414":[11,0,0,0,169], +"group__uv.html#gaa17758e1f852017a2271d8fb3e9305aa":[11,0,0,0,129], +"group__uv.html#gaa5e3593c94f91910d9d928dfa0c18f6c":[11,0,0,0,166], +"group__uv.html#gac5f60dba13a45e5d554b4fb7df7b9610":[11,0,0,0,168], +"group__uv.html#gad85ce3bfc53ff754988d36bf5de39e21":[11,0,0,0,167], "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,33], @@ -225,8 +225,8 @@ var NAVTREEINDEX2 = "group__wsclose.html#gae399c571df32ba532c0ca67da9284985":[9,17,0], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a1bb501d212fa4d57053db681b1dfab98":[11,0,0,0,26,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,26,10], +"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8":[9,17,0,9], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a32c38edab10d1379febac0c479ab2e9c":[11,0,0,0,26,14], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a3ffa38d5081b85fb739e02a747ccf2c4":[11,0,0,0,26,1], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a3ffa38d5081b85fb739e02a747ccf2c4":[9,17,0,0], @@ -238,16 +238,16 @@ var NAVTREEINDEX2 = "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a68b3d34bebd88547dcfa5cadba0acd6c":[9,17,0,6], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050":[11,0,0,0,26,8], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050":[9,17,0,7], -"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218":[11,0,0,0,26,2], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218":[9,17,0,1], +"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218":[11,0,0,0,26,2], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e":[9,17,0,10], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e":[11,0,0,0,26,11], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985acc9a317c70363dd88e823e066b2c73b7":[11,0,0,0,26,0], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad0869604d79e13700ae5d196a431b350":[9,17,0,11], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad0869604d79e13700ae5d196a431b350":[11,0,0,0,26,12], -"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad09e68295eabdddcba4e332fbea70ae5":[9,17,0,8], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad09e68295eabdddcba4e332fbea70ae5":[11,0,0,0,26,9], +"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad09e68295eabdddcba4e332fbea70ae5":[9,17,0,8], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad2b477a91c8445bf34ecd43977f9b390":[9,17,0,12], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad2b477a91c8445bf34ecd43977f9b390":[11,0,0,0,26,13], -"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2":[11,0,0,0,26,5] +"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2":[9,17,0,4] }; diff --git a/doc/html/navtreeindex3.js b/doc/html/navtreeindex3.js index b2580e64..aa650db7 100644 --- a/doc/html/navtreeindex3.js +++ b/doc/html/navtreeindex3.js @@ -1,27 +1,29 @@ var NAVTREEINDEX3 = { -"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2":[9,17,0,4], +"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2":[11,0,0,0,26,5], "group__wsstatus.html":[9,18], -"group__wsstatus.html#ga08e9ee165fca503fd9427d55cfecac37":[11,0,0,0,121], -"group__wsstatus.html#ga08e9ee165fca503fd9427d55cfecac37":[9,18,3], -"group__wsstatus.html#ga26a140623d202dd2bf2004deb6994baa":[9,18,4], -"group__wsstatus.html#ga26a140623d202dd2bf2004deb6994baa":[11,0,0,0,122], -"group__wsstatus.html#ga2bb3655329b4651cd06f79ee3a764421":[11,0,0,0,140], -"group__wsstatus.html#ga2bb3655329b4651cd06f79ee3a764421":[9,18,6], -"group__wsstatus.html#ga3df5045656dfb6b0e63a38de2dca79d2":[9,18,1], +"group__wsstatus.html#ga08e9ee165fca503fd9427d55cfecac37":[9,18,4], +"group__wsstatus.html#ga08e9ee165fca503fd9427d55cfecac37":[11,0,0,0,122], +"group__wsstatus.html#ga26a140623d202dd2bf2004deb6994baa":[9,18,5], +"group__wsstatus.html#ga26a140623d202dd2bf2004deb6994baa":[11,0,0,0,123], +"group__wsstatus.html#ga2bb3655329b4651cd06f79ee3a764421":[11,0,0,0,141], +"group__wsstatus.html#ga2bb3655329b4651cd06f79ee3a764421":[9,18,7], "group__wsstatus.html#ga3df5045656dfb6b0e63a38de2dca79d2":[11,0,0,0,106], -"group__wsstatus.html#ga4ad226d5e01024b4046f4a5a37199aa1":[9,18,2], -"group__wsstatus.html#ga4ad226d5e01024b4046f4a5a37199aa1":[11,0,0,0,120], -"group__wsstatus.html#gaccd9c59336efad8af0554f79cc5966fd":[11,0,0,0,93], +"group__wsstatus.html#ga3df5045656dfb6b0e63a38de2dca79d2":[9,18,1], +"group__wsstatus.html#ga42152ffb385f9b19f4e7b04f998425de":[11,0,0,0,108], +"group__wsstatus.html#ga42152ffb385f9b19f4e7b04f998425de":[9,18,2], +"group__wsstatus.html#ga4ad226d5e01024b4046f4a5a37199aa1":[11,0,0,0,121], +"group__wsstatus.html#ga4ad226d5e01024b4046f4a5a37199aa1":[9,18,3], "group__wsstatus.html#gaccd9c59336efad8af0554f79cc5966fd":[9,18,0], -"group__wsstatus.html#gaeca4afc94b1f026034f99cbba37e2f85":[11,0,0,0,131], -"group__wsstatus.html#gaeca4afc94b1f026034f99cbba37e2f85":[9,18,5], +"group__wsstatus.html#gaccd9c59336efad8af0554f79cc5966fd":[11,0,0,0,93], +"group__wsstatus.html#gaeca4afc94b1f026034f99cbba37e2f85":[9,18,6], +"group__wsstatus.html#gaeca4afc94b1f026034f99cbba37e2f85":[11,0,0,0,132], "hierarchy.html":[10,2], "index.html":[], "index.html":[0], "libwebsockets_8h.html":[11,0,0,0], -"libwebsockets_8h.html#a0b056fdcf949a838ff82209b4a627dd9":[11,0,0,0,178], -"libwebsockets_8h.html#a17f5fc891b31d2920bd18b0d66d6cb25":[11,0,0,0,183], +"libwebsockets_8h.html#a0b056fdcf949a838ff82209b4a627dd9":[11,0,0,0,179], +"libwebsockets_8h.html#a17f5fc891b31d2920bd18b0d66d6cb25":[11,0,0,0,184], "libwebsockets_8h.html#a1b12016562c728eb306c7f954c804bef":[11,0,0,0,21], "libwebsockets_8h.html#a2271141d8be8d72b47ba327130b4905f":[11,0,0,0,28], "libwebsockets_8h.html#a2271141d8be8d72b47ba327130b4905fa7741c12fc97574fa73a810fedae2be76":[11,0,0,0,28,1], @@ -39,19 +41,19 @@ var NAVTREEINDEX3 = "libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedbada3dca91d96bcde5df08a67b5a66e972":[11,0,0,0,24,5], "libwebsockets_8h.html#a4e877a4f0bb027d05d3a90c8e6a632de":[11,0,0,0,42], "libwebsockets_8h.html#a5326d3402af8429a166dd991dc65c4a2":[11,0,0,0,68], -"libwebsockets_8h.html#a5e627dbf1db48170ef486edbaf268672":[11,0,0,0,138], -"libwebsockets_8h.html#a72fe65e83b8bb03f904a1a256c673536":[11,0,0,0,136], +"libwebsockets_8h.html#a5e627dbf1db48170ef486edbaf268672":[11,0,0,0,139], +"libwebsockets_8h.html#a72fe65e83b8bb03f904a1a256c673536":[11,0,0,0,137], "libwebsockets_8h.html#a75e9827318684877deb4189121a8cd2a":[11,0,0,0,44], -"libwebsockets_8h.html#a863bdd5bca33bcbaa424c42fb7b2fc96":[11,0,0,0,182], -"libwebsockets_8h.html#a9032a3062641d334161c29adcc4fa15d":[11,0,0,0,180], +"libwebsockets_8h.html#a863bdd5bca33bcbaa424c42fb7b2fc96":[11,0,0,0,183], +"libwebsockets_8h.html#a9032a3062641d334161c29adcc4fa15d":[11,0,0,0,181], "libwebsockets_8h.html#a9b1bfc6f34319188d2aa40500d825bab":[11,0,0,0,43], "libwebsockets_8h.html#a9b878fb94f4596226c982eef4f42a607":[11,0,0,0,45], -"libwebsockets_8h.html#a9f2a8506fd963db95a5103823c60fb0a":[11,0,0,0,181], +"libwebsockets_8h.html#a9f2a8506fd963db95a5103823c60fb0a":[11,0,0,0,182], "libwebsockets_8h.html#abddb8d337fb2692586d892b494739003":[11,0,0,0,19], "libwebsockets_8h.html#ac3abb8b7e6d29a0292797230e4031681":[11,0,0,0,18], "libwebsockets_8h.html#adedbc79528b71a5c7f27cde87100c9aa":[11,0,0,0,16], -"libwebsockets_8h.html#adf4abd01e8c43f07c6e498ce13590c3e":[11,0,0,0,139], -"libwebsockets_8h.html#aefb2f20fe5bb29d79701a399838ef4ce":[11,0,0,0,179], +"libwebsockets_8h.html#adf4abd01e8c43f07c6e498ce13590c3e":[11,0,0,0,140], +"libwebsockets_8h.html#aefb2f20fe5bb29d79701a399838ef4ce":[11,0,0,0,180], "libwebsockets_8h.html#af52923473c59e643a974d65e12290831":[11,0,0,0,66], "libwebsockets_8h.html#aff42d53861afdc1a6edfb999ba688ecb":[11,0,0,0,11], "libwebsockets_8h_source.html":[11,0,0,0], @@ -247,7 +249,5 @@ var NAVTREEINDEX3 = "structlws__ext__option__arg.html#a0b1f7b30c3ceaf5f1bf9d105c24568d1":[9,5,1,3], "structlws__ext__option__arg.html#af37f0b6caa7735af51a1ac12b68d5bc5":[9,5,1,0], "structlws__ext__option__arg.html#af57fffcfa253dfa8d98681ac1fb1785f":[9,5,1,1], -"structlws__ext__options.html":[9,5,0], -"structlws__ext__options.html#a1769e4a9805bbdda227821e9578ddc7e":[9,5,0,0], -"structlws__ext__options.html#a7c4dbd62dbeba63a9d50d2306bd1cc61":[9,5,0,1] +"structlws__ext__options.html":[9,5,0] }; diff --git a/doc/html/navtreeindex4.js b/doc/html/navtreeindex4.js index b0d76b50..8917f2cd 100644 --- a/doc/html/navtreeindex4.js +++ b/doc/html/navtreeindex4.js @@ -1,5 +1,7 @@ var NAVTREEINDEX4 = { +"structlws__ext__options.html#a1769e4a9805bbdda227821e9578ddc7e":[9,5,0,0], +"structlws__ext__options.html#a7c4dbd62dbeba63a9d50d2306bd1cc61":[9,5,0,1], "structlws__extension.html":[9,5,2], "structlws__extension.html#a1e5018c883d85176f5c2152176843f9e":[9,5,2,2], "structlws__extension.html#a36b06c213aedb02bf9a402651751855b":[9,5,2,1], @@ -76,10 +78,10 @@ var NAVTREEINDEX4 = "structlws__protocol__vhost__options.html#a0640a92513c70ee6b9b295a9ad1658e7":[9,4,0,0,3], "structlws__protocol__vhost__options.html#abc714ddb4171756fc8196e9823a1e21c":[9,4,0,0,1], "structlws__protocol__vhost__options.html#abc714ddb4171756fc8196e9823a1e21c":[9,4,2,1], -"structlws__protocol__vhost__options.html#acf9db77f8eb64cd4e314be9b43d8a8b9":[9,4,0,0,0], "structlws__protocol__vhost__options.html#acf9db77f8eb64cd4e314be9b43d8a8b9":[9,4,2,0], -"structlws__protocol__vhost__options.html#afd99fbc90be51ea2465b550c2ec47822":[9,4,2,2], +"structlws__protocol__vhost__options.html#acf9db77f8eb64cd4e314be9b43d8a8b9":[9,4,0,0,0], "structlws__protocol__vhost__options.html#afd99fbc90be51ea2465b550c2ec47822":[9,4,0,0,2], +"structlws__protocol__vhost__options.html#afd99fbc90be51ea2465b550c2ec47822":[9,4,2,2], "structlws__protocols.html":[9,10,1], "structlws__protocols.html#a0d1d4996d81b2f5e125bcec981e461c5":[9,10,1,4], "structlws__protocols.html#a0e63edb457a613c3fa4271e0a8f19624":[9,10,1,2], @@ -95,12 +97,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,4,0], "structlws__tokens.html":[9,6,6], -"structlws__tokens.html#a855b7375d1d58516c0ecd4b60e9a7766":[9,6,4,0,1], +"structlws__tokens.html":[9,6,4,0], "structlws__tokens.html#a855b7375d1d58516c0ecd4b60e9a7766":[9,6,6,1], -"structlws__tokens.html#a9f3635412bc71a5cb78e9862b55f10cd":[9,6,6,0], +"structlws__tokens.html#a855b7375d1d58516c0ecd4b60e9a7766":[9,6,4,0,1], "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/lib/client.c b/lib/client.c index 0431e4de..f3329aa9 100755 --- a/lib/client.c +++ b/lib/client.c @@ -1010,9 +1010,14 @@ lws_generate_client_handshake(struct lws *wsi, char *pkt) p += sprintf(p, "Host: %s\x0d\x0a", lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_HOST)); - if (lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_ORIGIN)) - p += sprintf(p, "Origin: http://%s\x0d\x0a", - lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_ORIGIN)); + if (lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_ORIGIN)) { + if (lws_check_opt(context->options, LWS_SERVER_OPTION_JUST_USE_RAW_ORIGIN)) + p += sprintf(p, "Origin: %s\x0d\x0a", + lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_ORIGIN)); + else + p += sprintf(p, "Origin: http://%s\x0d\x0a", + lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_ORIGIN)); + } if (wsi->do_ws) { p += sprintf(p, "Upgrade: websocket\x0d\x0a" diff --git a/lib/libwebsockets.h b/lib/libwebsockets.h index 410ef7b4..3598bc1d 100644 --- a/lib/libwebsockets.h +++ b/lib/libwebsockets.h @@ -1576,6 +1576,13 @@ enum lws_context_options { * even if it happened without a debugger in place. You can disable * that by giving this option. */ + LWS_SERVER_OPTION_JUST_USE_RAW_ORIGIN = (1 << 19), + /**< For backwards-compatibility reasons, by default + * lws prepends "http://" to the origin you give in the client + * connection info struct. If you give this flag when you create + * the context, only the string you give in the client connect + * info for .origin (if any) will be used directly. + */ /****** add new things just above ---^ ******/ };