diff --git a/doc/html/globals_func.html b/doc/html/globals_func.html index 0dec7474..d3ca228d 100644 --- a/doc/html/globals_func.html +++ b/doc/html/globals_func.html @@ -354,6 +354,9 @@ $(document).ready(function(){initNavTree('globals_func.html','');});
  • lws_SHA1() : libwebsockets.h
  • +
  • lws_snprintf() +: libwebsockets.h +
  • lws_spa_create() : libwebsockets.h
  • diff --git a/doc/html/globals_l.html b/doc/html/globals_l.html index 8a8324ba..69efae18 100644 --- a/doc/html/globals_l.html +++ b/doc/html/globals_l.html @@ -628,6 +628,9 @@ $(document).ready(function(){initNavTree('globals_l.html','');});
  • lws_SHA1() : libwebsockets.h
  • +
  • lws_snprintf() +: libwebsockets.h +
  • lws_spa_create() : libwebsockets.h
  • diff --git a/doc/html/group__misc.html b/doc/html/group__misc.html index 205bb2e4..b772a654 100644 --- a/doc/html/group__misc.html +++ b/doc/html/group__misc.html @@ -70,6 +70,8 @@ $(document).ready(function(){initNavTree('group__misc.html','');}); + + @@ -391,6 +393,57 @@ LWS_VISIBLE LWS_EXTERN int 

    sent the session quit

    Functions

    LWS_VISIBLE LWS_EXTERN int lws_snprintf (char *str, size_t size, const char *format,...)
     
    LWS_VISIBLE LWS_EXTERN int lws_get_random (struct lws_context *context, void *buf, int len)
     
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_daemonize (const char *_lock_path)
    + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    LWS_VISIBLE LWS_EXTERN int lws_snprintf (char * str,
    size_t size,
    const char * format,
     ... 
    )
    +
    + +

    #include <lib/libwebsockets.h>

    +

    lws_snprintf(): snprintf that truncates the returned length too

    +
    Parameters
    + + + + + +
    strdestination buffer
    sizebytes left in destination buffer
    formatformat string
    ...args for format
    +
    +
    +

    This lets you correctly truncate buffers by concatenating lengths, if you reach the limit the reported length doesn't exceed the limit.

    +
    diff --git a/doc/html/group__misc.js b/doc/html/group__misc.js index de8f7d03..c9fd40e1 100644 --- a/doc/html/group__misc.js +++ b/doc/html/group__misc.js @@ -10,5 +10,6 @@ var group__misc = [ "lws_now_secs", "group__misc.html#ga33bf2635033710b25f931b57ed663e1e", null ], [ "lws_parse_uri", "group__misc.html#ga1ec0d9faac5d3a5824d765c287c043aa", null ], [ "lws_set_allocator", "group__misc.html#gab321ed812f46f6dc7ef9e3ca6f00cf1b", null ], + [ "lws_snprintf", "group__misc.html#ga9f37d0e357de2ab4170723fcdb665d21", null ], [ "lws_wsi_user", "group__misc.html#gaa194584fff9698f3b280658f770ccd0f", null ] ]; \ No newline at end of file diff --git a/doc/html/group__smtp.html b/doc/html/group__smtp.html index 311eecee..ef58f054 100644 --- a/doc/html/group__smtp.html +++ b/doc/html/group__smtp.html @@ -157,15 +157,15 @@ Functions
    -
    4047  {
    4048  LGSSMTP_IDLE,
    4049  LGSSMTP_CONNECTING,
    4050  LGSSMTP_CONNECTED,
    4051  LGSSMTP_SENT_HELO,
    4052  LGSSMTP_SENT_FROM,
    4053  LGSSMTP_SENT_TO,
    4054  LGSSMTP_SENT_DATA,
    4055  LGSSMTP_SENT_BODY,
    4056  LGSSMTP_SENT_QUIT,
    4057 };
    Definition: libwebsockets.h:4050
    -
    Definition: libwebsockets.h:4055
    -
    Definition: libwebsockets.h:4048
    -
    Definition: libwebsockets.h:4049
    -
    Definition: libwebsockets.h:4053
    -
    Definition: libwebsockets.h:4052
    -
    Definition: libwebsockets.h:4056
    -
    Definition: libwebsockets.h:4051
    -
    Definition: libwebsockets.h:4054
    +
    4061  {
    4062  LGSSMTP_IDLE,
    4067  LGSSMTP_SENT_TO,
    4071 };
    Definition: libwebsockets.h:4064
    +
    Definition: libwebsockets.h:4069
    +
    Definition: libwebsockets.h:4062
    +
    Definition: libwebsockets.h:4063
    +
    Definition: libwebsockets.h:4067
    +
    Definition: libwebsockets.h:4066
    +
    Definition: libwebsockets.h:4070
    +
    Definition: libwebsockets.h:4065
    +
    Definition: libwebsockets.h:4068
    diff --git a/doc/html/libwebsockets_8h.html b/doc/html/libwebsockets_8h.html index a65c4d5e..15899ed0 100644 --- a/doc/html/libwebsockets_8h.html +++ b/doc/html/libwebsockets_8h.html @@ -868,6 +868,8 @@ LWS_VISIBLE LWS_EXTERN int   LWS_VISIBLE LWS_EXTERN int lws_interface_to_sa (int ipv6, const char *ifname, struct sockaddr_in *addr, size_t addrlen)   +LWS_VISIBLE LWS_EXTERN int lws_snprintf (char *str, size_t size, const char *format,...) +  LWS_VISIBLE LWS_EXTERN int lws_get_random (struct lws_context *context, void *buf, int len)   LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_daemonize (const char *_lock_path) diff --git a/doc/html/libwebsockets_8h.js b/doc/html/libwebsockets_8h.js index e3dd549e..a94b0641 100644 --- a/doc/html/libwebsockets_8h.js +++ b/doc/html/libwebsockets_8h.js @@ -484,6 +484,7 @@ var libwebsockets_8h = [ "lws_set_proxy", "group__context-and-vhost.html#ga7e9d5405547a457d86e0b4f0ae2bb1c4", null ], [ "lws_set_timeout", "group__timeout.html#gaced9f9237f6172fed9f730a2af51345a", null ], [ "lws_SHA1", "group__sha.html#ga7b09ab74646266f0b555103b3bb8dfe5", null ], + [ "lws_snprintf", "group__misc.html#ga9f37d0e357de2ab4170723fcdb665d21", null ], [ "lws_spa_create", "group__form-parsing.html#ga162f86762173a2bc8c28497941d74815", null ], [ "lws_spa_destroy", "group__form-parsing.html#gaaa482f07dad3f04b391cccf0a814e13b", null ], [ "lws_spa_finalize", "group__form-parsing.html#ga83835bf250ee3d4a60f36a182f2b8d24", null ], diff --git a/doc/html/libwebsockets_8h_source.html b/doc/html/libwebsockets_8h_source.html index 0377a07c..a536f350 100644 --- a/doc/html/libwebsockets_8h_source.html +++ b/doc/html/libwebsockets_8h_source.html @@ -71,9 +71,9 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    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 #else
    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(_MSC_VER) || _MSC_VER < 1900 /* Visual Studio 2015 already defines this in <stdio.h> */
    152 #define 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)
    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 #endif /* LWS_USE_LIBUV */
    208 
    209 #ifndef LWS_EXTERN
    210 #define LWS_EXTERN extern
    211 #endif
    212 
    213 #ifdef _WIN32
    214 #define random rand
    215 #else
    216 #include <sys/time.h>
    217 #include <unistd.h>
    218 #endif
    219 
    220 #ifdef LWS_OPENSSL_SUPPORT
    221 
    222 #ifdef USE_WOLFSSL
    223 #ifdef USE_OLD_CYASSL
    224 #include <cyassl/openssl/ssl.h>
    225 #include <cyassl/error-ssl.h>
    226 #else
    227 #include <wolfssl/openssl/ssl.h>
    228 #include <wolfssl/error-ssl.h>
    229 #endif /* not USE_OLD_CYASSL */
    230 #else
    231 #if defined(LWS_USE_POLARSSL)
    232 #include <polarssl/ssl.h>
    234  x509_crt ca;
    235  x509_crt certificate;
    236  rsa_context key;
    237 };
    238 typedef struct lws_polarssl_context SSL_CTX;
    239 typedef ssl_context SSL;
    240 #else
    241 #if defined(LWS_USE_MBEDTLS)
    242 #include <mbedtls/ssl.h>
    243 #else
    244 #include <openssl/ssl.h>
    245 #include <openssl/err.h>
    246 #endif /* not USE_MBEDTLS */
    247 #endif /* not USE_POLARSSL */
    248 #endif /* not USE_WOLFSSL */
    249 #endif
    250 
    251 
    252 #define CONTEXT_PORT_NO_LISTEN -1
    253 
    264 
    266 enum lws_log_levels {
    267  LLL_ERR = 1 << 0,
    268  LLL_WARN = 1 << 1,
    269  LLL_NOTICE = 1 << 2,
    270  LLL_INFO = 1 << 3,
    271  LLL_DEBUG = 1 << 4,
    272  LLL_PARSER = 1 << 5,
    273  LLL_HEADER = 1 << 6,
    274  LLL_EXT = 1 << 7,
    275  LLL_CLIENT = 1 << 8,
    276  LLL_LATENCY = 1 << 9,
    277 
    278  LLL_COUNT = 10 /* set to count of valid flags */
    279 };
    280 
    281 LWS_VISIBLE LWS_EXTERN void _lws_log(int filter, const char *format, ...);
    282 LWS_VISIBLE LWS_EXTERN void _lws_logv(int filter, const char *format, va_list vl);
    292 LWS_VISIBLE LWS_EXTERN int
    293 lwsl_timestamp(int level, char *p, int len);
    294 
    295 #define lwsl_err(...) _lws_log(LLL_ERR, __VA_ARGS__)
    296 
    297 #if !defined(LWS_WITH_NO_LOGS)
    298 /* notice, warn and log are always compiled in */
    299 #define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__)
    300 #define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__)
    301 #endif
    302 /*
    303  * weaker logging can be deselected at configure time using --disable-debug
    304  * that gets rid of the overhead of checking while keeping _warn and _err
    305  * active
    306  */
    307 
    308 #if defined(LWS_WITH_ESP8266)
    309 #undef _DEBUG
    310 #endif
    311 
    312 #ifdef _DEBUG
    313 #if defined(LWS_WITH_NO_LOGS)
    314 /* notice, warn and log are always compiled in */
    315 //#define lwsl_err(...) _lws_log(LLL_ERR, __VA_ARGS__)
    316 #define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__)
    317 #define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__)
    318 #endif
    319 #define lwsl_info(...) _lws_log(LLL_INFO, __VA_ARGS__)
    320 #define lwsl_debug(...) _lws_log(LLL_DEBUG, __VA_ARGS__)
    321 #define lwsl_parser(...) _lws_log(LLL_PARSER, __VA_ARGS__)
    322 #define lwsl_header(...) _lws_log(LLL_HEADER, __VA_ARGS__)
    323 #define lwsl_ext(...) _lws_log(LLL_EXT, __VA_ARGS__)
    324 #define lwsl_client(...) _lws_log(LLL_CLIENT, __VA_ARGS__)
    325 #define lwsl_latency(...) _lws_log(LLL_LATENCY, __VA_ARGS__)
    326 
    332 LWS_VISIBLE LWS_EXTERN void lwsl_hexdump(void *buf, size_t len);
    333 
    334 #else /* no debug */
    335 #if defined(LWS_WITH_NO_LOGS)
    336 //#define lwsl_err(...) do {} while(0)
    337 #define lwsl_warn(...) do {} while(0)
    338 #define lwsl_notice(...) do {} while(0)
    339 #endif
    340 #define lwsl_info(...) do {} while(0)
    341 #define lwsl_debug(...) do {} while(0)
    342 #define lwsl_parser(...) do {} while(0)
    343 #define lwsl_header(...) do {} while(0)
    344 #define lwsl_ext(...) do {} while(0)
    345 #define lwsl_client(...) do {} while(0)
    346 #define lwsl_latency(...) do {} while(0)
    347 #define lwsl_hexdump(a, b)
    348 
    349 #endif
    350 
    361 LWS_VISIBLE LWS_EXTERN void
    362 lws_set_log_level(int level,
    363  void (*log_emit_function)(int level, const char *line));
    364 
    374 LWS_VISIBLE LWS_EXTERN void
    375 lwsl_emit_syslog(int level, const char *line);
    376 
    378 
    379 
    380 #include <stddef.h>
    381 
    382 #ifndef lws_container_of
    383 #define lws_container_of(P,T,M) ((T *)((char *)(P) - offsetof(T, M)))
    384 #endif
    385 
    386 
    387 struct lws;
    388 #ifndef ARRAY_SIZE
    389 #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
    390 #endif
    391 
    392 /* api change list for user code to test against */
    393 
    394 #define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_ARG
    395 
    396 /* the struct lws_protocols has the id field present */
    397 #define LWS_FEATURE_PROTOCOLS_HAS_ID_FIELD
    398 
    399 /* you can call lws_get_peer_write_allowance */
    400 #define LWS_FEATURE_PROTOCOLS_HAS_PEER_WRITE_ALLOWANCE
    401 
    402 /* extra parameter introduced in 917f43ab821 */
    403 #define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_LEN
    404 
    405 /* File operations stuff exists */
    406 #define LWS_FEATURE_FOPS
    407 
    408 
    409 #if defined(_WIN32)
    410 typedef SOCKET lws_sockfd_type;
    411 typedef HANDLE lws_filefd_type;
    412 #define lws_sockfd_valid(sfd) (!!sfd)
    413 struct lws_pollfd {
    414  lws_sockfd_type fd;
    415  SHORT events;
    416  SHORT revents;
    417 };
    418 #define LWS_POLLHUP (FD_CLOSE)
    419 #define LWS_POLLIN (FD_READ | FD_ACCEPT)
    420 #define LWS_POLLOUT (FD_WRITE)
    421 #else
    422 
    423 #if defined(MBED_OPERATORS)
    424 /* it's a class lws_conn * */
    425 typedef void * lws_sockfd_type;
    426 typedef void * lws_filefd_type;
    427 #define lws_sockfd_valid(sfd) (!!sfd)
    428 struct pollfd {
    429  lws_sockfd_type fd;
    430  short events;
    431  short revents;
    432 };
    433 #define POLLIN 0x0001
    434 #define POLLPRI 0x0002
    435 #define POLLOUT 0x0004
    436 #define POLLERR 0x0008
    437 #define POLLHUP 0x0010
    438 #define POLLNVAL 0x0020
    439 
    440 struct lws;
    441 
    442 void * mbed3_create_tcp_stream_socket(void);
    443 void mbed3_delete_tcp_stream_socket(void *sockfd);
    444 void mbed3_tcp_stream_bind(void *sock, int port, struct lws *);
    445 void mbed3_tcp_stream_accept(void *sock, struct lws *);
    446 #else
    447 #if defined(LWS_WITH_ESP8266)
    448 
    449 #include <user_interface.h>
    450 #include <espconn.h>
    451 
    452 typedef struct espconn * lws_sockfd_type;
    453 typedef void * lws_filefd_type;
    454 #define lws_sockfd_valid(sfd) (!!sfd)
    455 struct pollfd {
    456  lws_sockfd_type fd;
    457  short events;
    458  short revents;
    459 };
    460 #define POLLIN 0x0001
    461 #define POLLPRI 0x0002
    462 #define POLLOUT 0x0004
    463 #define POLLERR 0x0008
    464 #define POLLHUP 0x0010
    465 #define POLLNVAL 0x0020
    466 
    467 struct lws_vhost;
    468 
    469 lws_sockfd_type esp8266_create_tcp_listen_socket(struct lws_vhost *vh);
    470 void esp8266_tcp_stream_accept(lws_sockfd_type fd, struct lws *wsi);
    471 
    472 #include <os_type.h>
    473 #include <osapi.h>
    474 #include "ets_sys.h"
    475 
    476 int ets_snprintf(char *str, size_t size, const char *format, ...);
    477 #define snprintf ets_snprintf
    478 
    479 typedef os_timer_t uv_timer_t;
    480 typedef void uv_cb_t(uv_timer_t *);
    481 
    482 void os_timer_disarm(void *);
    483 void os_timer_setfn(os_timer_t *, os_timer_func_t *, void *);
    484 
    485 void ets_timer_arm_new(os_timer_t *, int, int, int);
    486 
    487 //void os_timer_arm(os_timer_t *, int, int);
    488 
    489 #define UV_VERSION_MAJOR 1
    490 
    491 #define lws_uv_getloop(a, b) (NULL)
    492 
    493 static inline void uv_timer_init(void *l, uv_timer_t *t)
    494 {
    495  (void)l;
    496  memset(t, 0, sizeof(*t));
    497  os_timer_disarm(t);
    498 }
    499 
    500 static inline void uv_timer_start(uv_timer_t *t, uv_cb_t *cb, int first, int rep)
    501 {
    502  os_timer_setfn(t, (os_timer_func_t *)cb, t);
    503  /* ms, repeat */
    504  os_timer_arm(t, first, !!rep);
    505 }
    506 
    507 static inline void uv_timer_stop(uv_timer_t *t)
    508 {
    509  os_timer_disarm(t);
    510 }
    511 
    512 #else
    513 typedef int lws_sockfd_type;
    514 typedef int lws_filefd_type;
    515 #define lws_sockfd_valid(sfd) (sfd >= 0)
    516 #endif
    517 #endif
    518 
    519 #define lws_pollfd pollfd
    520 #define LWS_POLLHUP (POLLHUP|POLLERR)
    521 #define LWS_POLLIN (POLLIN)
    522 #define LWS_POLLOUT (POLLOUT)
    523 #endif
    524 
    527 struct lws_pollargs {
    528  lws_sockfd_type fd;
    529  int events;
    531 };
    532 
    533 struct lws_tokens;
    534 struct lws_token_limits;
    535 
    543 
    545 /*
    546  * NOTE: These public enums are part of the abi. If you want to add one,
    547  * add it at where specified so existing users are unaffected.
    548  */
    551  LWS_CLOSE_STATUS_NOSTATUS = 0,
    613  /****** add new things just above ---^ ******/
    614 
    615  LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY = 9999,
    616 };
    617 
    630 LWS_VISIBLE LWS_EXTERN void
    631 lws_close_reason(struct lws *wsi, enum lws_close_status status,
    632  unsigned char *buf, size_t len);
    633 
    635 
    636 struct lws;
    637 struct lws_context;
    638 /* needed even with extensions disabled for create context */
    639 struct lws_extension;
    640 
    652 
    654 
    655 /*
    656  * NOTE: These public enums are part of the abi. If you want to add one,
    657  * add it at where specified so existing users are unaffected.
    658  */
    902  /* external poll() management support */
    965  LWS_CALLBACK_WS_EXT_DEFAULTS = 39,
    968  LWS_CALLBACK_CGI = 40,
    970  LWS_CALLBACK_CGI_TERMINATED = 41,
    972  LWS_CALLBACK_CGI_STDIN_DATA = 42,
    974  LWS_CALLBACK_CGI_STDIN_COMPLETED = 43,
    976  LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP = 44,
    978  LWS_CALLBACK_CLOSED_CLIENT_HTTP = 45,
    980  LWS_CALLBACK_RECEIVE_CLIENT_HTTP = 46,
    982  LWS_CALLBACK_COMPLETED_CLIENT_HTTP = 47,
    984  LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ = 48,
    986  LWS_CALLBACK_HTTP_BIND_PROTOCOL = 49,
    988  LWS_CALLBACK_HTTP_DROP_PROTOCOL = 50,
    990  LWS_CALLBACK_CHECK_ACCESS_RIGHTS = 51,
    992  LWS_CALLBACK_PROCESS_HTML = 52,
    994  LWS_CALLBACK_ADD_HEADERS = 53,
    996  LWS_CALLBACK_SESSION_INFO = 54,
    999  LWS_CALLBACK_GS_EVENT = 55,
    1016  /****** add new things just above ---^ ******/
    1017 
    1020 };
    1021 
    1022 
    1023 
    1039 typedef int
    1040 lws_callback_function(struct lws *wsi, enum lws_callback_reasons reason,
    1041  void *user, void *in, size_t len);
    1043 
    1053 
    1055 /*
    1056  * NOTE: These public enums are part of the abi. If you want to add one,
    1057  * add it at where specified so existing users are unaffected.
    1058  */
    1059 enum lws_extension_callback_reasons {
    1060  LWS_EXT_CB_SERVER_CONTEXT_CONSTRUCT = 0,
    1061  LWS_EXT_CB_CLIENT_CONTEXT_CONSTRUCT = 1,
    1062  LWS_EXT_CB_SERVER_CONTEXT_DESTRUCT = 2,
    1063  LWS_EXT_CB_CLIENT_CONTEXT_DESTRUCT = 3,
    1064  LWS_EXT_CB_CONSTRUCT = 4,
    1065  LWS_EXT_CB_CLIENT_CONSTRUCT = 5,
    1066  LWS_EXT_CB_CHECK_OK_TO_REALLY_CLOSE = 6,
    1067  LWS_EXT_CB_CHECK_OK_TO_PROPOSE_EXTENSION = 7,
    1068  LWS_EXT_CB_DESTROY = 8,
    1069  LWS_EXT_CB_DESTROY_ANY_WSI_CLOSING = 9,
    1070  LWS_EXT_CB_ANY_WSI_ESTABLISHED = 10,
    1071  LWS_EXT_CB_PACKET_RX_PREPARSE = 11,
    1072  LWS_EXT_CB_PACKET_TX_PRESEND = 12,
    1073  LWS_EXT_CB_PACKET_TX_DO_SEND = 13,
    1074  LWS_EXT_CB_HANDSHAKE_REPLY_TX = 14,
    1075  LWS_EXT_CB_FLUSH_PENDING_TX = 15,
    1076  LWS_EXT_CB_EXTENDED_PAYLOAD_RX = 16,
    1077  LWS_EXT_CB_CAN_PROXY_CLIENT_CONNECTION = 17,
    1078  LWS_EXT_CB_1HZ = 18,
    1079  LWS_EXT_CB_REQUEST_ON_WRITEABLE = 19,
    1080  LWS_EXT_CB_IS_WRITEABLE = 20,
    1081  LWS_EXT_CB_PAYLOAD_TX = 21,
    1082  LWS_EXT_CB_PAYLOAD_RX = 22,
    1083  LWS_EXT_CB_OPTION_DEFAULT = 23,
    1084  LWS_EXT_CB_OPTION_SET = 24,
    1085  LWS_EXT_CB_OPTION_CONFIRM = 25,
    1086  LWS_EXT_CB_NAMED_OPTION_SET = 26,
    1087 
    1088  /****** add new things just above ---^ ******/
    1089 };
    1090 
    1097  /* Add new things just above here ---^
    1098  * This is part of the ABI, don't needlessly break compatibility */
    1099 };
    1100 
    1106  const char *name;
    1109  /* Add new things just above here ---^
    1110  * This is part of the ABI, don't needlessly break compatibility */
    1111 };
    1112 
    1115  const char *option_name;
    1117  const char *start;
    1118  int len;
    1119 };
    1120 
    1181 typedef int
    1182 lws_extension_callback_function(struct lws_context *context,
    1183  const struct lws_extension *ext, struct lws *wsi,
    1184  enum lws_extension_callback_reasons reason,
    1185  void *user, void *in, size_t len);
    1186 
    1189  const char *name;
    1191  const char *client_offer;
    1193  /* Add new things just above here ---^
    1194  * This is part of the ABI, don't needlessly break compatibility */
    1195 };
    1196 
    1205 LWS_VISIBLE LWS_EXTERN int
    1206 lws_set_extension_option(struct lws *wsi, const char *ext_name,
    1207  const char *opt_name, const char *opt_val);
    1208 
    1209 #ifndef LWS_NO_EXTENSIONS
    1210 /* lws_get_internal_extensions() - DEPRECATED
    1211  *
    1212  * \Deprecated There is no longer a set internal extensions table. The table is provided
    1213  * by user code along with application-specific settings. See the test
    1214  * client and server for how to do.
    1215  */
    1216 static LWS_INLINE LWS_WARN_DEPRECATED const struct lws_extension *
    1217 lws_get_internal_extensions() { return NULL; }
    1218 
    1229 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    1230 lws_ext_parse_options(const struct lws_extension *ext, struct lws *wsi,
    1231  void *ext_user, const struct lws_ext_options *opts,
    1232  const char *o, int len);
    1233 #endif
    1234 
    1247 LWS_EXTERN
    1249  struct lws_context *context, const struct lws_extension *ext,
    1250  struct lws *wsi, enum lws_extension_callback_reasons reason,
    1251  void *user, void *in, size_t len);
    1252 
    1253 /*
    1254  * The internal exts are part of the public abi
    1255  * If we add more extensions, publish the callback here ------v
    1256  */
    1258 
    1274 
    1279  const char *name;
    1300  unsigned int id;
    1307  void *user;
    1310  /* Add new things just above here ---^
    1311  * This is part of the ABI, don't needlessly break compatibility */
    1312 };
    1313 
    1314 struct lws_vhost;
    1315 
    1324 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
    1325 lws_vhost_name_to_protocol(struct lws_vhost *vh, const char *name);
    1326 
    1336 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
    1337 lws_get_protocol(struct lws *wsi);
    1338 
    1340 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
    1341 lws_protocol_get(struct lws *wsi) LWS_WARN_DEPRECATED;
    1342 
    1353 LWS_VISIBLE LWS_EXTERN void *
    1354 lws_protocol_vh_priv_zalloc(struct lws_vhost *vhost, const struct lws_protocols *prot,
    1355  int size);
    1356 
    1366 LWS_VISIBLE LWS_EXTERN void *
    1367 lws_protocol_vh_priv_get(struct lws_vhost *vhost, const struct lws_protocols *prot);
    1368 
    1377 LWS_VISIBLE LWS_EXTERN int
    1378 lws_finalize_startup(struct lws_context *context);
    1379 
    1380 #ifdef LWS_WITH_PLUGINS
    1381 
    1382 /* PLUGINS implies LIBUV */
    1383 
    1384 #define LWS_PLUGIN_API_MAGIC 180
    1385 
    1388  unsigned int api_magic;
    1389  const struct lws_protocols *protocols;
    1391  const struct lws_extension *extensions;
    1393 };
    1394 
    1395 typedef int (*lws_plugin_init_func)(struct lws_context *,
    1396  struct lws_plugin_capability *);
    1397 typedef int (*lws_plugin_destroy_func)(struct lws_context *);
    1398 
    1400 struct lws_plugin {
    1401  struct lws_plugin *list;
    1402 #if (UV_VERSION_MAJOR > 0)
    1403  uv_lib_t lib;
    1404 #else
    1405  void *l;
    1406 #endif
    1407  char name[64];
    1409 };
    1410 
    1411 #endif
    1412 
    1414 
    1415 
    1424 
    1426 #define LWSGS_EMAIL_CONTENT_SIZE 16384
    1427 
    1429 /* SHA-1 binary and hexified versions */
    1431 typedef struct { unsigned char bin[20]; } lwsgw_hash_bin;
    1433 typedef struct { char id[41]; } lwsgw_hash;
    1434 
    1441 };
    1442 
    1445  char username[32];
    1446  char email[100];
    1447  char ip[72];
    1448  unsigned int mask;
    1450  char session[42];
    1451 };
    1452 
    1457 };
    1458 
    1461  enum lws_gs_event event;
    1462  const char *username;
    1463  const char *email;
    1464 };
    1465 
    1467 
    1468 
    1482 
    1484 /*
    1485  * NOTE: These public enums are part of the abi. If you want to add one,
    1486  * add it at where specified so existing users are unaffected.
    1487  */
    1488 
    1492  (1 << 12),
    1499  (1 << 12),
    1515  (1 << 12),
    1520  (1 << 12),
    1544  /****** add new things just above ---^ ******/
    1545 };
    1546 
    1547 #define lws_check_opt(c, f) (((c) & (f)) == (f))
    1548 
    1559  int port;
    1564  const char *iface;
    1571  const struct lws_protocols *protocols;
    1575  const struct lws_extension *extensions;
    1583  const char *ssl_cert_filepath;
    1593  const char *ssl_ca_filepath;
    1595  const char *ssl_cipher_list;
    1599  const char *http_proxy_address;
    1602  unsigned int http_proxy_port;
    1604  int gid;
    1606  int uid;
    1608  unsigned int options;
    1610  void *user;
    1613  int ka_time;
    1623 #ifdef LWS_OPENSSL_SUPPORT
    1629 #else /* maintain structure layout either way */
    1631 #endif
    1632 
    1643  unsigned int count_threads;
    1645  unsigned int fd_limit_per_thread;
    1649  unsigned int timeout_secs;
    1654  const char *ecdh_curve;
    1656  const char *vhost_name;
    1660  const char * const *plugin_dirs;
    1669  const char *log_filepath;
    1672  const struct lws_http_mount *mounts;
    1674  const char *server_string;
    1677  unsigned int pt_serv_buf_size;
    1692  unsigned short ws_ping_pong_interval;
    1708  /* Add new things just above here ---^
    1709  * This is part of the ABI, don't needlessly break compatibility
    1710  *
    1711  * The below is to ensure later library versions with new
    1712  * members added above will see 0 (default) even if the app
    1713  * was not built against the newer headers.
    1714  */
    1715 
    1716  void *_unused[8];
    1717 };
    1718 
    1753 LWS_VISIBLE LWS_EXTERN struct lws_context *
    1755 
    1764 LWS_VISIBLE LWS_EXTERN void
    1765 lws_context_destroy(struct lws_context *context);
    1766 
    1784 LWS_VISIBLE LWS_EXTERN int
    1785 lws_set_proxy(struct lws_vhost *vhost, const char *proxy);
    1786 
    1787 
    1788 struct lws_vhost;
    1789 
    1799 LWS_EXTERN LWS_VISIBLE struct lws_vhost *
    1800 lws_create_vhost(struct lws_context *context,
    1801  struct lws_context_creation_info *info);
    1802 
    1817 LWS_VISIBLE LWS_EXTERN int
    1818 lwsws_get_config_globals(struct lws_context_creation_info *info, const char *d,
    1819  char **config_strings, int *len);
    1820 
    1836 LWS_VISIBLE LWS_EXTERN int
    1837 lwsws_get_config_vhosts(struct lws_context *context,
    1838  struct lws_context_creation_info *info, const char *d,
    1839  char **config_strings, int *len);
    1840 
    1842 LWS_VISIBLE LWS_EXTERN struct lws_vhost *
    1843 lws_vhost_get(struct lws *wsi) LWS_WARN_DEPRECATED;
    1844 
    1850 LWS_VISIBLE LWS_EXTERN struct lws_vhost *
    1851 lws_get_vhost(struct lws *wsi);
    1852 
    1860 LWS_VISIBLE LWS_EXTERN int
    1861 lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len);
    1862 
    1870 LWS_VISIBLE LWS_EXTERN int
    1871 lws_json_dump_context(const struct lws_context *context, char *buf, int len);
    1872 
    1882 LWS_VISIBLE LWS_EXTERN void *
    1883 lws_context_user(struct lws_context *context);
    1884 
    1890 
    1900  const char *name;
    1901  const char *value;
    1902 };
    1903 
    1916 };
    1917 
    1925  const char *mountpoint;
    1927  const char *origin;
    1929  const char *def;
    1931  const char *protocol;
    1947  unsigned int auth_mask;
    1950  unsigned int cache_reusable:1;
    1951  unsigned int cache_revalidate:1;
    1952  unsigned int cache_intermediaries:1;
    1954  unsigned char origin_protocol;
    1955  unsigned char mountpoint_len;
    1956 };
    1959 
    1965 
    1973  LCCSCF_USE_SSL = (1 << 0),
    1974  LCCSCF_ALLOW_SELFSIGNED = (1 << 1),
    1975  LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK = (1 << 2)
    1976 };
    1977 
    1982  struct lws_context *context;
    1984  const char *address;
    1986  int port;
    1990  const char *path;
    1992  const char *host;
    1994  const char *origin;
    1996  const char *protocol;
    2000  void *userdata;
    2004  const char *method;
    2007  struct lws *parent_wsi;
    2011  const char *uri_replace_from;
    2014  const char *uri_replace_to;
    2016  struct lws_vhost *vhost;
    2018  struct lws **pwsi;
    2030  /* Add new things just above here ---^
    2031  * This is part of the ABI, don't needlessly break compatibility
    2032  *
    2033  * The below is to ensure later library versions with new
    2034  * members added above will see 0 (default) even if the app
    2035  * was not built against the newer headers.
    2036  */
    2037 
    2038  void *_unused[4];
    2039 };
    2040 
    2048 LWS_VISIBLE LWS_EXTERN struct lws *
    2050 
    2071 /* deprecated, use lws_client_connect_via_info() */
    2072 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    2073 lws_client_connect(struct lws_context *clients, const char *address,
    2074  int port, int ssl_connection, const char *path,
    2075  const char *host, const char *origin, const char *protocol,
    2076  int ietf_version_or_minus_one) LWS_WARN_DEPRECATED;
    2077 /* deprecated, use lws_client_connect_via_info() */
    2098 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    2099 lws_client_connect_extended(struct lws_context *clients, const char *address,
    2100  int port, int ssl_connection, const char *path,
    2101  const char *host, const char *origin,
    2102  const char *protocol, int ietf_version_or_minus_one,
    2103  void *userdata) LWS_WARN_DEPRECATED;
    2104 
    2130 LWS_VISIBLE LWS_EXTERN int
    2132  struct lws_vhost *vhost);
    2133 
    2134 LWS_VISIBLE LWS_EXTERN int
    2135 lws_http_client_read(struct lws *wsi, char **buf, int *len);
    2136 
    2137 LWS_VISIBLE LWS_EXTERN void
    2138 lws_client_http_body_pending(struct lws *wsi, int something_left_to_send);
    2139 
    2160 
    2169 
    2202 LWS_VISIBLE LWS_EXTERN int
    2203 lws_service(struct lws_context *context, int timeout_ms);
    2204 
    2216 LWS_VISIBLE LWS_EXTERN int
    2217 lws_service_tsi(struct lws_context *context, int timeout_ms, int tsi);
    2218 
    2234 LWS_VISIBLE LWS_EXTERN void
    2235 lws_cancel_service_pt(struct lws *wsi);
    2236 
    2248 LWS_VISIBLE LWS_EXTERN void
    2249 lws_cancel_service(struct lws_context *context);
    2250 
    2273 LWS_VISIBLE LWS_EXTERN int
    2274 lws_service_fd(struct lws_context *context, struct lws_pollfd *pollfd);
    2275 
    2285 LWS_VISIBLE LWS_EXTERN int
    2286 lws_service_fd_tsi(struct lws_context *context, struct lws_pollfd *pollfd,
    2287  int tsi);
    2288 
    2290 
    2296 
    2303 
    2315 LWS_VISIBLE LWS_EXTERN const char *
    2316 lws_get_mimetype(const char *file, const struct lws_http_mount *m);
    2317 
    2336 LWS_VISIBLE LWS_EXTERN int
    2337 lws_serve_http_file(struct lws *wsi, const char *file, const char *content_type,
    2338  const char *other_headers, int other_headers_len);
    2339 LWS_VISIBLE LWS_EXTERN int
    2340 lws_serve_http_file_fragment(struct lws *wsi);
    2342 
    2353 
    2354 enum http_status {
    2355  HTTP_STATUS_OK = 200,
    2356  HTTP_STATUS_NO_CONTENT = 204,
    2357 
    2358  HTTP_STATUS_MOVED_PERMANENTLY = 301,
    2359  HTTP_STATUS_FOUND = 302,
    2360  HTTP_STATUS_SEE_OTHER = 303,
    2361 
    2362  HTTP_STATUS_BAD_REQUEST = 400,
    2363  HTTP_STATUS_UNAUTHORIZED,
    2364  HTTP_STATUS_PAYMENT_REQUIRED,
    2365  HTTP_STATUS_FORBIDDEN,
    2366  HTTP_STATUS_NOT_FOUND,
    2367  HTTP_STATUS_METHOD_NOT_ALLOWED,
    2368  HTTP_STATUS_NOT_ACCEPTABLE,
    2369  HTTP_STATUS_PROXY_AUTH_REQUIRED,
    2370  HTTP_STATUS_REQUEST_TIMEOUT,
    2371  HTTP_STATUS_CONFLICT,
    2372  HTTP_STATUS_GONE,
    2373  HTTP_STATUS_LENGTH_REQUIRED,
    2374  HTTP_STATUS_PRECONDITION_FAILED,
    2375  HTTP_STATUS_REQ_ENTITY_TOO_LARGE,
    2376  HTTP_STATUS_REQ_URI_TOO_LONG,
    2377  HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE,
    2378  HTTP_STATUS_REQ_RANGE_NOT_SATISFIABLE,
    2379  HTTP_STATUS_EXPECTATION_FAILED,
    2380 
    2381  HTTP_STATUS_INTERNAL_SERVER_ERROR = 500,
    2382  HTTP_STATUS_NOT_IMPLEMENTED,
    2383  HTTP_STATUS_BAD_GATEWAY,
    2384  HTTP_STATUS_SERVICE_UNAVAILABLE,
    2385  HTTP_STATUS_GATEWAY_TIMEOUT,
    2386  HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED,
    2387 };
    2388 
    2390  char *p;
    2391  int len;
    2392  int max_len;
    2393  int final;
    2394 };
    2395 
    2396 typedef const char *(*lws_process_html_state_cb)(void *data, int index);
    2397 
    2399  char *start;
    2400  char swallow[16];
    2401  int pos;
    2402  void *data;
    2403  const char * const *vars;
    2406  lws_process_html_state_cb replace;
    2407 };
    2408 
    2413 LWS_VISIBLE LWS_EXTERN int
    2415  struct lws_process_html_state *s);
    2417 
    2450 
    2458 struct lws_tokens {
    2459  char *token;
    2461 };
    2462 
    2463 /* enum lws_token_indexes
    2464  * these have to be kept in sync with lextable.h / minilex.c
    2465  *
    2466  * NOTE: These public enums are part of the abi. If you want to add one,
    2467  * add it at where specified so existing users are unaffected.
    2468  */
    2469 enum lws_token_indexes {
    2470  WSI_TOKEN_GET_URI = 0,
    2471  WSI_TOKEN_POST_URI = 1,
    2472  WSI_TOKEN_OPTIONS_URI = 2,
    2473  WSI_TOKEN_HOST = 3,
    2474  WSI_TOKEN_CONNECTION = 4,
    2475  WSI_TOKEN_UPGRADE = 5,
    2476  WSI_TOKEN_ORIGIN = 6,
    2477  WSI_TOKEN_DRAFT = 7,
    2478  WSI_TOKEN_CHALLENGE = 8,
    2479  WSI_TOKEN_EXTENSIONS = 9,
    2480  WSI_TOKEN_KEY1 = 10,
    2481  WSI_TOKEN_KEY2 = 11,
    2482  WSI_TOKEN_PROTOCOL = 12,
    2483  WSI_TOKEN_ACCEPT = 13,
    2484  WSI_TOKEN_NONCE = 14,
    2485  WSI_TOKEN_HTTP = 15,
    2486  WSI_TOKEN_HTTP2_SETTINGS = 16,
    2487  WSI_TOKEN_HTTP_ACCEPT = 17,
    2488  WSI_TOKEN_HTTP_AC_REQUEST_HEADERS = 18,
    2489  WSI_TOKEN_HTTP_IF_MODIFIED_SINCE = 19,
    2490  WSI_TOKEN_HTTP_IF_NONE_MATCH = 20,
    2491  WSI_TOKEN_HTTP_ACCEPT_ENCODING = 21,
    2492  WSI_TOKEN_HTTP_ACCEPT_LANGUAGE = 22,
    2493  WSI_TOKEN_HTTP_PRAGMA = 23,
    2494  WSI_TOKEN_HTTP_CACHE_CONTROL = 24,
    2495  WSI_TOKEN_HTTP_AUTHORIZATION = 25,
    2496  WSI_TOKEN_HTTP_COOKIE = 26,
    2497  WSI_TOKEN_HTTP_CONTENT_LENGTH = 27,
    2498  WSI_TOKEN_HTTP_CONTENT_TYPE = 28,
    2499  WSI_TOKEN_HTTP_DATE = 29,
    2500  WSI_TOKEN_HTTP_RANGE = 30,
    2501  WSI_TOKEN_HTTP_REFERER = 31,
    2502  WSI_TOKEN_KEY = 32,
    2503  WSI_TOKEN_VERSION = 33,
    2504  WSI_TOKEN_SWORIGIN = 34,
    2505 
    2506  WSI_TOKEN_HTTP_COLON_AUTHORITY = 35,
    2507  WSI_TOKEN_HTTP_COLON_METHOD = 36,
    2508  WSI_TOKEN_HTTP_COLON_PATH = 37,
    2509  WSI_TOKEN_HTTP_COLON_SCHEME = 38,
    2510  WSI_TOKEN_HTTP_COLON_STATUS = 39,
    2511 
    2512  WSI_TOKEN_HTTP_ACCEPT_CHARSET = 40,
    2513  WSI_TOKEN_HTTP_ACCEPT_RANGES = 41,
    2514  WSI_TOKEN_HTTP_ACCESS_CONTROL_ALLOW_ORIGIN = 42,
    2515  WSI_TOKEN_HTTP_AGE = 43,
    2516  WSI_TOKEN_HTTP_ALLOW = 44,
    2517  WSI_TOKEN_HTTP_CONTENT_DISPOSITION = 45,
    2518  WSI_TOKEN_HTTP_CONTENT_ENCODING = 46,
    2519  WSI_TOKEN_HTTP_CONTENT_LANGUAGE = 47,
    2520  WSI_TOKEN_HTTP_CONTENT_LOCATION = 48,
    2521  WSI_TOKEN_HTTP_CONTENT_RANGE = 49,
    2522  WSI_TOKEN_HTTP_ETAG = 50,
    2523  WSI_TOKEN_HTTP_EXPECT = 51,
    2524  WSI_TOKEN_HTTP_EXPIRES = 52,
    2525  WSI_TOKEN_HTTP_FROM = 53,
    2526  WSI_TOKEN_HTTP_IF_MATCH = 54,
    2527  WSI_TOKEN_HTTP_IF_RANGE = 55,
    2528  WSI_TOKEN_HTTP_IF_UNMODIFIED_SINCE = 56,
    2529  WSI_TOKEN_HTTP_LAST_MODIFIED = 57,
    2530  WSI_TOKEN_HTTP_LINK = 58,
    2531  WSI_TOKEN_HTTP_LOCATION = 59,
    2532  WSI_TOKEN_HTTP_MAX_FORWARDS = 60,
    2533  WSI_TOKEN_HTTP_PROXY_AUTHENTICATE = 61,
    2534  WSI_TOKEN_HTTP_PROXY_AUTHORIZATION = 62,
    2535  WSI_TOKEN_HTTP_REFRESH = 63,
    2536  WSI_TOKEN_HTTP_RETRY_AFTER = 64,
    2537  WSI_TOKEN_HTTP_SERVER = 65,
    2538  WSI_TOKEN_HTTP_SET_COOKIE = 66,
    2539  WSI_TOKEN_HTTP_STRICT_TRANSPORT_SECURITY = 67,
    2540  WSI_TOKEN_HTTP_TRANSFER_ENCODING = 68,
    2541  WSI_TOKEN_HTTP_USER_AGENT = 69,
    2542  WSI_TOKEN_HTTP_VARY = 70,
    2543  WSI_TOKEN_HTTP_VIA = 71,
    2544  WSI_TOKEN_HTTP_WWW_AUTHENTICATE = 72,
    2545 
    2546  WSI_TOKEN_PATCH_URI = 73,
    2547  WSI_TOKEN_PUT_URI = 74,
    2548  WSI_TOKEN_DELETE_URI = 75,
    2549 
    2550  WSI_TOKEN_HTTP_URI_ARGS = 76,
    2551  WSI_TOKEN_PROXY = 77,
    2552  WSI_TOKEN_HTTP_X_REAL_IP = 78,
    2553  WSI_TOKEN_HTTP1_0 = 79,
    2554 
    2555  /****** add new things just above ---^ ******/
    2556 
    2557  /* use token storage to stash these internally, not for
    2558  * user use */
    2559 
    2560  _WSI_TOKEN_CLIENT_SENT_PROTOCOLS,
    2561  _WSI_TOKEN_CLIENT_PEER_ADDRESS,
    2562  _WSI_TOKEN_CLIENT_URI,
    2563  _WSI_TOKEN_CLIENT_HOST,
    2564  _WSI_TOKEN_CLIENT_ORIGIN,
    2565  _WSI_TOKEN_CLIENT_METHOD,
    2566 
    2567  /* always last real token index*/
    2568  WSI_TOKEN_COUNT,
    2569 
    2570  /* parser state additions, no storage associated */
    2571  WSI_TOKEN_NAME_PART,
    2572  WSI_TOKEN_SKIPPING,
    2573  WSI_TOKEN_SKIPPING_SAW_CR,
    2574  WSI_PARSING_COMPLETE,
    2575  WSI_INIT_TOKEN_MUXURL,
    2576 };
    2577 
    2579  unsigned short token_limit[WSI_TOKEN_COUNT];
    2580 };
    2581 
    2587 LWS_VISIBLE LWS_EXTERN const unsigned char *
    2588 lws_token_to_string(enum lws_token_indexes token);
    2589 
    2590 
    2599 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2600 lws_hdr_total_length(struct lws *wsi, enum lws_token_indexes h);
    2601 
    2611 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2612 lws_hdr_fragment_length(struct lws *wsi, enum lws_token_indexes h, int frag_idx);
    2613 
    2627 LWS_VISIBLE LWS_EXTERN int
    2628 lws_hdr_copy(struct lws *wsi, char *dest, int len, enum lws_token_indexes h);
    2629 
    2647 LWS_VISIBLE LWS_EXTERN int
    2648 lws_hdr_copy_fragment(struct lws *wsi, char *dest, int len,
    2649  enum lws_token_indexes h, int frag_idx);
    2650 
    2661 LWS_VISIBLE LWS_EXTERN const char *
    2662 lws_get_urlarg_by_name(struct lws *wsi, const char *name, char *buf, int len);
    2664 
    2679 
    2690 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2691 lws_add_http_header_status(struct lws *wsi,
    2692  unsigned int code, unsigned char **p,
    2693  unsigned char *end);
    2706 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2707 lws_add_http_header_by_name(struct lws *wsi, const unsigned char *name,
    2708  const unsigned char *value, int length,
    2709  unsigned char **p, unsigned char *end);
    2723 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2724 lws_add_http_header_by_token(struct lws *wsi, enum lws_token_indexes token,
    2725  const unsigned char *value, int length,
    2726  unsigned char **p, unsigned char *end);
    2737 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2738 lws_add_http_header_content_length(struct lws *wsi,
    2739  unsigned long content_length,
    2740  unsigned char **p, unsigned char *end);
    2750 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2751 lws_finalize_http_header(struct lws *wsi, unsigned char **p,
    2752  unsigned char *end);
    2754 
    2773 
    2783 };
    2784 
    2798 typedef int (*lws_spa_fileupload_cb)(void *data, const char *name,
    2799  const char *filename, char *buf, int len,
    2800  enum lws_spa_fileupload_states state);
    2801 
    2804 struct lws_spa;
    2805 
    2824 LWS_VISIBLE LWS_EXTERN struct lws_spa *
    2825 lws_spa_create(struct lws *wsi, const char * const *param_names,
    2826  int count_params, int max_storage, lws_spa_fileupload_cb opt_cb,
    2827  void *opt_data);
    2828 
    2836 LWS_VISIBLE LWS_EXTERN int
    2837 lws_spa_process(struct lws_spa *spa, const char *in, int len);
    2838 
    2844 LWS_VISIBLE LWS_EXTERN int
    2845 lws_spa_finalize(struct lws_spa *spa);
    2846 
    2853 LWS_VISIBLE LWS_EXTERN int
    2854 lws_spa_get_length(struct lws_spa *spa, int n);
    2855 
    2861 LWS_VISIBLE LWS_EXTERN const char *
    2862 lws_spa_get_string(struct lws_spa *spa, int n);
    2863 
    2869 LWS_VISIBLE LWS_EXTERN int
    2870 lws_spa_destroy(struct lws_spa *spa);
    2872 
    2883 
    2894 LWS_VISIBLE LWS_EXTERN const char *
    2895 lws_urlencode(char *escaped, const char *string, int len);
    2896 
    2897 /*
    2898  * URLDECODE 1 / 2
    2899  *
    2900  * This simple urldecode only operates until the first '\0' and requires the
    2901  * data to exist all at once
    2902  */
    2915 LWS_VISIBLE LWS_EXTERN int
    2916 lws_urldecode(char *string, const char *escaped, int len);
    2918 
    2927 LWS_VISIBLE LWS_EXTERN int
    2928 lws_return_http_status(struct lws *wsi, unsigned int code,
    2929  const char *html_body);
    2930 
    2941 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2942 lws_http_redirect(struct lws *wsi, int code, const unsigned char *loc, int len,
    2943  unsigned char **p, unsigned char *end);
    2944 
    2953 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2954 lws_http_transaction_completed(struct lws *wsi);
    2956 
    2964 
    2975 LWS_VISIBLE LWS_EXTERN const char *
    2976 lws_sql_purify(char *escaped, const char *string, int len);
    2977 
    2988 LWS_VISIBLE LWS_EXTERN const char *
    2989 lws_json_purify(char *escaped, const char *string, int len);
    2991 
    2998 
    3000 #ifdef LWS_USE_LIBEV
    3001 typedef void (lws_ev_signal_cb_t)(EV_P_ struct ev_signal *w, int revents);
    3002 
    3003 LWS_VISIBLE LWS_EXTERN int
    3004 lws_ev_sigint_cfg(struct lws_context *context, int use_ev_sigint,
    3005  lws_ev_signal_cb_t *cb);
    3006 
    3007 LWS_VISIBLE LWS_EXTERN int
    3008 lws_ev_initloop(struct lws_context *context, struct ev_loop *loop, int tsi);
    3009 
    3010 LWS_VISIBLE LWS_EXTERN void
    3011 lws_ev_sigint_cb(struct ev_loop *loop, struct ev_signal *watcher, int revents);
    3012 #endif /* LWS_USE_LIBEV */
    3013 
    3015 
    3022 #ifdef LWS_USE_LIBUV
    3024 LWS_VISIBLE LWS_EXTERN int
    3025 lws_uv_sigint_cfg(struct lws_context *context, int use_uv_sigint,
    3026  uv_signal_cb cb);
    3027 
    3028 LWS_VISIBLE LWS_EXTERN void
    3029 lws_libuv_run(const struct lws_context *context, int tsi);
    3030 
    3031 LWS_VISIBLE LWS_EXTERN void
    3032 lws_libuv_stop(struct lws_context *context);
    3033 
    3034 LWS_VISIBLE LWS_EXTERN int
    3035 lws_uv_initloop(struct lws_context *context, uv_loop_t *loop, int tsi);
    3036 
    3037 LWS_VISIBLE LWS_EXTERN uv_loop_t *
    3038 lws_uv_getloop(struct lws_context *context, int tsi);
    3039 
    3040 LWS_VISIBLE LWS_EXTERN void
    3041 lws_uv_sigint_cb(uv_signal_t *watcher, int signum);
    3042 #endif /* LWS_USE_LIBUV */
    3043 
    3050 
    3051 /*
    3052  * NOTE: These public enums are part of the abi. If you want to add one,
    3053  * add it at where specified so existing users are unaffected.
    3054  */
    3055 enum pending_timeout {
    3056  NO_PENDING_TIMEOUT = 0,
    3057  PENDING_TIMEOUT_AWAITING_PROXY_RESPONSE = 1,
    3058  PENDING_TIMEOUT_AWAITING_CONNECT_RESPONSE = 2,
    3059  PENDING_TIMEOUT_ESTABLISH_WITH_SERVER = 3,
    3060  PENDING_TIMEOUT_AWAITING_SERVER_RESPONSE = 4,
    3061  PENDING_TIMEOUT_AWAITING_PING = 5,
    3062  PENDING_TIMEOUT_CLOSE_ACK = 6,
    3063  PENDING_TIMEOUT_AWAITING_EXTENSION_CONNECT_RESPONSE = 7,
    3064  PENDING_TIMEOUT_SENT_CLIENT_HANDSHAKE = 8,
    3065  PENDING_TIMEOUT_SSL_ACCEPT = 9,
    3066  PENDING_TIMEOUT_HTTP_CONTENT = 10,
    3067  PENDING_TIMEOUT_AWAITING_CLIENT_HS_SEND = 11,
    3068  PENDING_FLUSH_STORED_SEND_BEFORE_CLOSE = 12,
    3069  PENDING_TIMEOUT_SHUTDOWN_FLUSH = 13,
    3070  PENDING_TIMEOUT_CGI = 14,
    3071  PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE = 15,
    3072  PENDING_TIMEOUT_WS_PONG_CHECK_SEND_PING = 16,
    3073  PENDING_TIMEOUT_WS_PONG_CHECK_GET_PONG = 17,
    3074  PENDING_TIMEOUT_CLIENT_ISSUE_PAYLOAD = 18,
    3075 
    3076  /****** add new things just above ---^ ******/
    3077 };
    3078 
    3088 LWS_VISIBLE LWS_EXTERN void
    3089 lws_set_timeout(struct lws *wsi, enum pending_timeout reason, int secs);
    3091 
    3097 #if !defined(LWS_SIZEOFPTR)
    3098 #define LWS_SIZEOFPTR (sizeof (void *))
    3099 #endif
    3100 #if !defined(u_int64_t)
    3101 #define u_int64_t unsigned long long
    3102 #endif
    3103 
    3104 #if defined(__x86_64__)
    3105 #define _LWS_PAD_SIZE 16 /* Intel recommended for best performance */
    3106 #else
    3107 #define _LWS_PAD_SIZE LWS_SIZEOFPTR /* Size of a pointer on the target arch */
    3108 #endif
    3109 #define _LWS_PAD(n) (((n) % _LWS_PAD_SIZE) ? \
    3110  ((n) + (_LWS_PAD_SIZE - ((n) % _LWS_PAD_SIZE))) : (n))
    3111 #define LWS_PRE _LWS_PAD(4 + 10)
    3112 /* used prior to 1.7 and retained for backward compatibility */
    3113 #define LWS_SEND_BUFFER_PRE_PADDING LWS_PRE
    3114 #define LWS_SEND_BUFFER_POST_PADDING 0
    3115 
    3116 /*
    3117  * NOTE: These public enums are part of the abi. If you want to add one,
    3118  * add it at where specified so existing users are unaffected.
    3119  */
    3134  /* LWS_WRITE_CLOSE is handled by lws_close_reason() */
    3135  LWS_WRITE_PING = 5,
    3136  LWS_WRITE_PONG = 6,
    3137 
    3138  /* Same as write_http but we know this write ends the transaction */
    3139  LWS_WRITE_HTTP_FINAL = 7,
    3140 
    3141  /* HTTP2 */
    3142 
    3150  /****** add new things just above ---^ ******/
    3151 
    3152  /* flags */
    3153 
    3161 };
    3162 
    3163 
    3235 LWS_VISIBLE LWS_EXTERN int
    3236 lws_write(struct lws *wsi, unsigned char *buf, size_t len,
    3237  enum lws_write_protocol protocol);
    3238 
    3239 /* helper for case where buffer may be const */
    3240 #define lws_write_http(wsi, buf, len) \
    3241  lws_write(wsi, (unsigned char *)(buf), len, LWS_WRITE_HTTP)
    3242 
    3244 
    3263 
    3276 LWS_VISIBLE LWS_EXTERN int
    3277 lws_callback_on_writable(struct lws *wsi);
    3278 
    3292 LWS_VISIBLE LWS_EXTERN int
    3293 lws_callback_on_writable_all_protocol(const struct lws_context *context,
    3294  const struct lws_protocols *protocol);
    3295 
    3309 LWS_VISIBLE LWS_EXTERN int
    3310 lws_callback_on_writable_all_protocol_vhost(const struct lws_vhost *vhost,
    3311  const struct lws_protocols *protocol);
    3312 
    3325 LWS_VISIBLE LWS_EXTERN int
    3326 lws_callback_all_protocol(struct lws_context *context,
    3327  const struct lws_protocols *protocol, int reason);
    3328 
    3341 LWS_VISIBLE LWS_EXTERN int
    3342 lws_callback_all_protocol_vhost(struct lws_vhost *vh,
    3343  const struct lws_protocols *protocol, int reason);
    3344 
    3358 LWS_VISIBLE LWS_EXTERN int
    3359 lws_callback_vhost_protocols(struct lws *wsi, int reason, void *in, int len);
    3360 
    3361 LWS_VISIBLE LWS_EXTERN int
    3362 lws_callback_http_dummy(struct lws *wsi, enum lws_callback_reasons reason,
    3363  void *user, void *in, size_t len);
    3364 
    3372 LWS_VISIBLE LWS_EXTERN int
    3373 lws_get_socket_fd(struct lws *wsi);
    3374 
    3396 LWS_VISIBLE LWS_EXTERN size_t
    3397 lws_get_peer_write_allowance(struct lws *wsi);
    3399 
    3410 LWS_VISIBLE LWS_EXTERN int
    3411 lws_rx_flow_control(struct lws *wsi, int enable);
    3412 
    3422 LWS_VISIBLE LWS_EXTERN void
    3423 lws_rx_flow_allow_all_protocol(const struct lws_context *context,
    3424  const struct lws_protocols *protocol);
    3425 
    3442 LWS_VISIBLE LWS_EXTERN size_t
    3443 lws_remaining_packet_payload(struct lws *wsi);
    3444 
    3445 
    3454 
    3467 LWS_VISIBLE LWS_EXTERN struct lws *
    3468 lws_adopt_socket(struct lws_context *context, lws_sockfd_type accept_fd);
    3491 LWS_VISIBLE LWS_EXTERN struct lws *
    3492 lws_adopt_socket_readbuf(struct lws_context *context, lws_sockfd_type accept_fd,
    3493  const char *readbuf, size_t len);
    3495 
    3501 
    3512 LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT
    3513 lws_canonical_hostname(struct lws_context *context);
    3514 
    3529 LWS_VISIBLE LWS_EXTERN void
    3530 lws_get_peer_addresses(struct lws *wsi, lws_sockfd_type fd, char *name,
    3531  int name_len, char *rip, int rip_len);
    3532 
    3543 LWS_VISIBLE LWS_EXTERN const char *
    3544 lws_get_peer_simple(struct lws *wsi, char *name, int namelen);
    3545 #ifndef LWS_WITH_ESP8266
    3546 
    3557 LWS_VISIBLE LWS_EXTERN int
    3558 lws_interface_to_sa(int ipv6, const char *ifname, struct sockaddr_in *addr,
    3559  size_t addrlen);
    3561 #endif
    3562 
    3568 
    3581 LWS_VISIBLE LWS_EXTERN int
    3582 lws_get_random(struct lws_context *context, void *buf, int len);
    3590 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3591 lws_daemonize(const char *_lock_path);
    3597 LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT
    3599 
    3606 LWS_VISIBLE LWS_EXTERN void *
    3607 lws_wsi_user(struct lws *wsi);
    3608 
    3620 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3621 lws_parse_uri(char *p, const char **prot, const char **ads, int *port,
    3622  const char **path);
    3623 
    3627 LWS_VISIBLE LWS_EXTERN unsigned long
    3628 lws_now_secs(void);
    3629 
    3639 LWS_VISIBLE LWS_EXTERN struct lws_context * LWS_WARN_UNUSED_RESULT
    3640 lws_get_context(const struct lws *wsi);
    3641 
    3651 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3652 lws_get_count_threads(struct lws_context *context);
    3653 
    3661 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    3662 lws_get_parent(const struct lws *wsi);
    3663 
    3670 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    3671 lws_get_child(const struct lws *wsi);
    3672 
    3673 
    3674 /*
    3675  * \deprecated DEPRECATED Note: this is not normally needed as a user api.
    3676  * It's provided in case it is
    3677  * useful when integrating with other app poll loop service code.
    3678  */
    3679 LWS_VISIBLE LWS_EXTERN int
    3680 lws_read(struct lws *wsi, unsigned char *buf, size_t len);
    3681 
    3689 LWS_VISIBLE LWS_EXTERN void
    3690 lws_set_allocator(void *(*realloc)(void *ptr, size_t size));
    3692 
    3698 
    3705 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3706 lws_send_pipe_choked(struct lws *wsi);
    3707 
    3712 LWS_VISIBLE LWS_EXTERN int
    3713 lws_is_final_fragment(struct lws *wsi);
    3714 
    3719 LWS_VISIBLE LWS_EXTERN unsigned char
    3720 lws_get_reserved_bits(struct lws *wsi);
    3721 
    3738 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3739 lws_partial_buffered(struct lws *wsi);
    3740 
    3750 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3751 lws_frame_is_binary(struct lws *wsi);
    3752 
    3761 LWS_VISIBLE LWS_EXTERN int
    3762 lws_is_ssl(struct lws *wsi);
    3767 LWS_VISIBLE LWS_EXTERN int
    3768 lws_is_cgi(struct lws *wsi);
    3770 
    3771 
    3777 #ifdef LWS_SHA1_USE_OPENSSL_NAME
    3779 #define lws_SHA1 SHA1
    3780 #else
    3781 
    3790 LWS_VISIBLE LWS_EXTERN unsigned char *
    3791 lws_SHA1(const unsigned char *d, size_t n, unsigned char *md);
    3792 #endif
    3793 
    3803 LWS_VISIBLE LWS_EXTERN int
    3804 lws_b64_encode_string(const char *in, int in_len, char *out, int out_size);
    3814 LWS_VISIBLE LWS_EXTERN int
    3815 lws_b64_decode_string(const char *in, char *out, int out_size);
    3817 
    3818 
    3828 #ifdef LWS_WITH_CGI
    3829 enum lws_enum_stdinouterr {
    3830  LWS_STDIN = 0,
    3831  LWS_STDOUT = 1,
    3832  LWS_STDERR = 2,
    3833 };
    3834 
    3835 enum lws_cgi_hdr_state {
    3836  LCHS_HEADER,
    3837  LCHS_CR1,
    3838  LCHS_LF1,
    3839  LCHS_CR2,
    3840  LCHS_LF2,
    3841  LHCS_PAYLOAD,
    3842  LCHS_SINGLE_0A,
    3843 };
    3844 
    3846  struct lws **stdwsi;
    3847  enum lws_enum_stdinouterr ch;
    3848  unsigned char *data;
    3849  enum lws_cgi_hdr_state hdr_state;
    3850  int len;
    3851 };
    3852 
    3853 
    3863 LWS_VISIBLE LWS_EXTERN int
    3864 lws_cgi(struct lws *wsi, const char * const *exec_array,
    3865  int script_uri_path_len, int timeout_secs,
    3866  const struct lws_protocol_vhost_options *mp_cgienv);
    3867 
    3873 LWS_VISIBLE LWS_EXTERN int
    3874 lws_cgi_write_split_stdout_headers(struct lws *wsi);
    3875 
    3881 LWS_VISIBLE LWS_EXTERN int
    3882 lws_cgi_kill(struct lws *wsi);
    3883 #endif
    3884 
    3886 
    3903 
    3910  lws_filefd_type (*open)(struct lws *wsi, const char *filename,
    3911  unsigned long *filelen, int flags);
    3915  int (*close)(struct lws *wsi, lws_filefd_type fd);
    3917  unsigned long (*seek_cur)(struct lws *wsi, lws_filefd_type fd,
    3918  long offset_from_cur_pos);
    3920  int (*read)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    3921  unsigned char *buf, unsigned long len);
    3923  int (*write)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    3924  unsigned char *buf, unsigned long len);
    3927  /* Add new things just above here ---^
    3928  * This is part of the ABI, don't needlessly break compatibility */
    3929 };
    3930 
    3936 LWS_VISIBLE LWS_EXTERN struct lws_plat_file_ops * LWS_WARN_UNUSED_RESULT
    3937 lws_get_fops(struct lws_context *context);
    3938 
    3947 static LWS_INLINE lws_filefd_type LWS_WARN_UNUSED_RESULT
    3948 lws_plat_file_open(struct lws *wsi, const char *filename,
    3949  unsigned long *filelen, int flags)
    3950 {
    3951  return lws_get_fops(lws_get_context(wsi))->open(wsi, filename,
    3952  filelen, flags);
    3953 }
    3954 
    3961 static LWS_INLINE int
    3962 lws_plat_file_close(struct lws *wsi, lws_filefd_type fd)
    3963 {
    3964  return lws_get_fops(lws_get_context(wsi))->close(wsi, fd);
    3965 }
    3966 
    3974 static LWS_INLINE unsigned long
    3975 lws_plat_file_seek_cur(struct lws *wsi, lws_filefd_type fd, long offset)
    3976 {
    3977  return lws_get_fops(lws_get_context(wsi))->seek_cur(wsi, fd, offset);
    3978 }
    3988 static LWS_INLINE int LWS_WARN_UNUSED_RESULT
    3989 lws_plat_file_read(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    3990  unsigned char *buf, unsigned long len)
    3991 {
    3992  return lws_get_fops(lws_get_context(wsi))->read(wsi, fd, amount, buf,
    3993  len);
    3994 }
    4004 static LWS_INLINE int LWS_WARN_UNUSED_RESULT
    4005 lws_plat_file_write(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    4006  unsigned char *buf, unsigned long len)
    4007 {
    4008  return lws_get_fops(lws_get_context(wsi))->write(wsi, fd, amount, buf,
    4009  len);
    4010 }
    4012 
    4044 #ifdef LWS_WITH_SMTP
    4045 
    4057 };
    4058 
    4060 struct lws_email {
    4061  void *data;
    4063  uv_loop_t *loop;
    4066  char email_smtp_ip[32];
    4067  char email_helo[32];
    4068  char email_from[100];
    4069  char email_to[100];
    4071  unsigned int max_content_size;
    4074  /* Fill all the callbacks before init */
    4075 
    4076  int (*on_next)(struct lws_email *email);
    4081  int (*on_sent)(struct lws_email *email);
    4086  int (*on_get_body)(struct lws_email *email, char *buf, int len);
    4092  /* private things */
    4093  uv_timer_t timeout_email;
    4095  uv_connect_t email_connect_req;
    4096  uv_tcp_t email_client;
    4098  char email_buf[256];
    4099  char *content;
    4100 };
    4101 
    4111 LWS_VISIBLE LWS_EXTERN int
    4112 lws_email_init(struct lws_email *email, uv_loop_t *loop, int max_content);
    4113 
    4122 LWS_VISIBLE LWS_EXTERN void
    4123 lws_email_check(struct lws_email *email);
    4131 LWS_VISIBLE LWS_EXTERN void
    4132 lws_email_destroy(struct lws_email *email);
    4133 
    4134 #endif
    4135 
    4136 
    4137 #ifdef __cplusplus
    4138 }
    4139 #endif
    4140 
    4141 #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 #else
    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(_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)
    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 #endif /* LWS_USE_LIBUV */
    208 
    209 #ifndef LWS_EXTERN
    210 #define LWS_EXTERN extern
    211 #endif
    212 
    213 #ifdef _WIN32
    214 #define random rand
    215 #else
    216 #include <sys/time.h>
    217 #include <unistd.h>
    218 #endif
    219 
    220 #ifdef LWS_OPENSSL_SUPPORT
    221 
    222 #ifdef USE_WOLFSSL
    223 #ifdef USE_OLD_CYASSL
    224 #include <cyassl/openssl/ssl.h>
    225 #include <cyassl/error-ssl.h>
    226 #else
    227 #include <wolfssl/openssl/ssl.h>
    228 #include <wolfssl/error-ssl.h>
    229 #endif /* not USE_OLD_CYASSL */
    230 #else
    231 #if defined(LWS_USE_POLARSSL)
    232 #include <polarssl/ssl.h>
    234  x509_crt ca;
    235  x509_crt certificate;
    236  rsa_context key;
    237 };
    238 typedef struct lws_polarssl_context SSL_CTX;
    239 typedef ssl_context SSL;
    240 #else
    241 #if defined(LWS_USE_MBEDTLS)
    242 #include <mbedtls/ssl.h>
    243 #else
    244 #include <openssl/ssl.h>
    245 #include <openssl/err.h>
    246 #endif /* not USE_MBEDTLS */
    247 #endif /* not USE_POLARSSL */
    248 #endif /* not USE_WOLFSSL */
    249 #endif
    250 
    251 
    252 #define CONTEXT_PORT_NO_LISTEN -1
    253 
    264 
    266 enum lws_log_levels {
    267  LLL_ERR = 1 << 0,
    268  LLL_WARN = 1 << 1,
    269  LLL_NOTICE = 1 << 2,
    270  LLL_INFO = 1 << 3,
    271  LLL_DEBUG = 1 << 4,
    272  LLL_PARSER = 1 << 5,
    273  LLL_HEADER = 1 << 6,
    274  LLL_EXT = 1 << 7,
    275  LLL_CLIENT = 1 << 8,
    276  LLL_LATENCY = 1 << 9,
    277 
    278  LLL_COUNT = 10 /* set to count of valid flags */
    279 };
    280 
    281 LWS_VISIBLE LWS_EXTERN void _lws_log(int filter, const char *format, ...);
    282 LWS_VISIBLE LWS_EXTERN void _lws_logv(int filter, const char *format, va_list vl);
    292 LWS_VISIBLE LWS_EXTERN int
    293 lwsl_timestamp(int level, char *p, int len);
    294 
    295 #define lwsl_err(...) _lws_log(LLL_ERR, __VA_ARGS__)
    296 
    297 #if !defined(LWS_WITH_NO_LOGS)
    298 /* notice, warn and log are always compiled in */
    299 #define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__)
    300 #define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__)
    301 #endif
    302 /*
    303  * weaker logging can be deselected at configure time using --disable-debug
    304  * that gets rid of the overhead of checking while keeping _warn and _err
    305  * active
    306  */
    307 
    308 #if defined(LWS_WITH_ESP8266)
    309 #undef _DEBUG
    310 #endif
    311 
    312 #ifdef _DEBUG
    313 #if defined(LWS_WITH_NO_LOGS)
    314 /* notice, warn and log are always compiled in */
    315 //#define lwsl_err(...) _lws_log(LLL_ERR, __VA_ARGS__)
    316 #define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__)
    317 #define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__)
    318 #endif
    319 #define lwsl_info(...) _lws_log(LLL_INFO, __VA_ARGS__)
    320 #define lwsl_debug(...) _lws_log(LLL_DEBUG, __VA_ARGS__)
    321 #define lwsl_parser(...) _lws_log(LLL_PARSER, __VA_ARGS__)
    322 #define lwsl_header(...) _lws_log(LLL_HEADER, __VA_ARGS__)
    323 #define lwsl_ext(...) _lws_log(LLL_EXT, __VA_ARGS__)
    324 #define lwsl_client(...) _lws_log(LLL_CLIENT, __VA_ARGS__)
    325 #define lwsl_latency(...) _lws_log(LLL_LATENCY, __VA_ARGS__)
    326 
    332 LWS_VISIBLE LWS_EXTERN void lwsl_hexdump(void *buf, size_t len);
    333 
    334 #else /* no debug */
    335 #if defined(LWS_WITH_NO_LOGS)
    336 //#define lwsl_err(...) do {} while(0)
    337 #define lwsl_warn(...) do {} while(0)
    338 #define lwsl_notice(...) do {} while(0)
    339 #endif
    340 #define lwsl_info(...) do {} while(0)
    341 #define lwsl_debug(...) do {} while(0)
    342 #define lwsl_parser(...) do {} while(0)
    343 #define lwsl_header(...) do {} while(0)
    344 #define lwsl_ext(...) do {} while(0)
    345 #define lwsl_client(...) do {} while(0)
    346 #define lwsl_latency(...) do {} while(0)
    347 #define lwsl_hexdump(a, b)
    348 
    349 #endif
    350 
    361 LWS_VISIBLE LWS_EXTERN void
    362 lws_set_log_level(int level,
    363  void (*log_emit_function)(int level, const char *line));
    364 
    374 LWS_VISIBLE LWS_EXTERN void
    375 lwsl_emit_syslog(int level, const char *line);
    376 
    378 
    379 
    380 #include <stddef.h>
    381 
    382 #ifndef lws_container_of
    383 #define lws_container_of(P,T,M) ((T *)((char *)(P) - offsetof(T, M)))
    384 #endif
    385 
    386 
    387 struct lws;
    388 #ifndef ARRAY_SIZE
    389 #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
    390 #endif
    391 
    392 /* api change list for user code to test against */
    393 
    394 #define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_ARG
    395 
    396 /* the struct lws_protocols has the id field present */
    397 #define LWS_FEATURE_PROTOCOLS_HAS_ID_FIELD
    398 
    399 /* you can call lws_get_peer_write_allowance */
    400 #define LWS_FEATURE_PROTOCOLS_HAS_PEER_WRITE_ALLOWANCE
    401 
    402 /* extra parameter introduced in 917f43ab821 */
    403 #define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_LEN
    404 
    405 /* File operations stuff exists */
    406 #define LWS_FEATURE_FOPS
    407 
    408 
    409 #if defined(_WIN32)
    410 typedef SOCKET lws_sockfd_type;
    411 typedef HANDLE lws_filefd_type;
    412 #define lws_sockfd_valid(sfd) (!!sfd)
    413 struct lws_pollfd {
    414  lws_sockfd_type fd;
    415  SHORT events;
    416  SHORT revents;
    417 };
    418 #define LWS_POLLHUP (FD_CLOSE)
    419 #define LWS_POLLIN (FD_READ | FD_ACCEPT)
    420 #define LWS_POLLOUT (FD_WRITE)
    421 #else
    422 
    423 #if defined(MBED_OPERATORS)
    424 /* it's a class lws_conn * */
    425 typedef void * lws_sockfd_type;
    426 typedef void * lws_filefd_type;
    427 #define lws_sockfd_valid(sfd) (!!sfd)
    428 struct pollfd {
    429  lws_sockfd_type fd;
    430  short events;
    431  short revents;
    432 };
    433 #define POLLIN 0x0001
    434 #define POLLPRI 0x0002
    435 #define POLLOUT 0x0004
    436 #define POLLERR 0x0008
    437 #define POLLHUP 0x0010
    438 #define POLLNVAL 0x0020
    439 
    440 struct lws;
    441 
    442 void * mbed3_create_tcp_stream_socket(void);
    443 void mbed3_delete_tcp_stream_socket(void *sockfd);
    444 void mbed3_tcp_stream_bind(void *sock, int port, struct lws *);
    445 void mbed3_tcp_stream_accept(void *sock, struct lws *);
    446 #else
    447 #if defined(LWS_WITH_ESP8266)
    448 
    449 #include <user_interface.h>
    450 #include <espconn.h>
    451 
    452 typedef struct espconn * lws_sockfd_type;
    453 typedef void * lws_filefd_type;
    454 #define lws_sockfd_valid(sfd) (!!sfd)
    455 struct pollfd {
    456  lws_sockfd_type fd;
    457  short events;
    458  short revents;
    459 };
    460 #define POLLIN 0x0001
    461 #define POLLPRI 0x0002
    462 #define POLLOUT 0x0004
    463 #define POLLERR 0x0008
    464 #define POLLHUP 0x0010
    465 #define POLLNVAL 0x0020
    466 
    467 struct lws_vhost;
    468 
    469 lws_sockfd_type esp8266_create_tcp_listen_socket(struct lws_vhost *vh);
    470 void esp8266_tcp_stream_accept(lws_sockfd_type fd, struct lws *wsi);
    471 
    472 #include <os_type.h>
    473 #include <osapi.h>
    474 #include "ets_sys.h"
    475 
    476 int ets_snprintf(char *str, size_t size, const char *format, ...);
    477 #define snprintf ets_snprintf
    478 
    479 typedef os_timer_t uv_timer_t;
    480 typedef void uv_cb_t(uv_timer_t *);
    481 
    482 void os_timer_disarm(void *);
    483 void os_timer_setfn(os_timer_t *, os_timer_func_t *, void *);
    484 
    485 void ets_timer_arm_new(os_timer_t *, int, int, int);
    486 
    487 //void os_timer_arm(os_timer_t *, int, int);
    488 
    489 #define UV_VERSION_MAJOR 1
    490 
    491 #define lws_uv_getloop(a, b) (NULL)
    492 
    493 static inline void uv_timer_init(void *l, uv_timer_t *t)
    494 {
    495  (void)l;
    496  memset(t, 0, sizeof(*t));
    497  os_timer_disarm(t);
    498 }
    499 
    500 static inline void uv_timer_start(uv_timer_t *t, uv_cb_t *cb, int first, int rep)
    501 {
    502  os_timer_setfn(t, (os_timer_func_t *)cb, t);
    503  /* ms, repeat */
    504  os_timer_arm(t, first, !!rep);
    505 }
    506 
    507 static inline void uv_timer_stop(uv_timer_t *t)
    508 {
    509  os_timer_disarm(t);
    510 }
    511 
    512 #else
    513 typedef int lws_sockfd_type;
    514 typedef int lws_filefd_type;
    515 #define lws_sockfd_valid(sfd) (sfd >= 0)
    516 #endif
    517 #endif
    518 
    519 #define lws_pollfd pollfd
    520 #define LWS_POLLHUP (POLLHUP|POLLERR)
    521 #define LWS_POLLIN (POLLIN)
    522 #define LWS_POLLOUT (POLLOUT)
    523 #endif
    524 
    527 struct lws_pollargs {
    528  lws_sockfd_type fd;
    529  int events;
    531 };
    532 
    533 struct lws_tokens;
    534 struct lws_token_limits;
    535 
    543 
    545 /*
    546  * NOTE: These public enums are part of the abi. If you want to add one,
    547  * add it at where specified so existing users are unaffected.
    548  */
    551  LWS_CLOSE_STATUS_NOSTATUS = 0,
    613  /****** add new things just above ---^ ******/
    614 
    615  LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY = 9999,
    616 };
    617 
    630 LWS_VISIBLE LWS_EXTERN void
    631 lws_close_reason(struct lws *wsi, enum lws_close_status status,
    632  unsigned char *buf, size_t len);
    633 
    635 
    636 struct lws;
    637 struct lws_context;
    638 /* needed even with extensions disabled for create context */
    639 struct lws_extension;
    640 
    652 
    654 
    655 /*
    656  * NOTE: These public enums are part of the abi. If you want to add one,
    657  * add it at where specified so existing users are unaffected.
    658  */
    902  /* external poll() management support */
    965  LWS_CALLBACK_WS_EXT_DEFAULTS = 39,
    968  LWS_CALLBACK_CGI = 40,
    970  LWS_CALLBACK_CGI_TERMINATED = 41,
    972  LWS_CALLBACK_CGI_STDIN_DATA = 42,
    974  LWS_CALLBACK_CGI_STDIN_COMPLETED = 43,
    976  LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP = 44,
    978  LWS_CALLBACK_CLOSED_CLIENT_HTTP = 45,
    980  LWS_CALLBACK_RECEIVE_CLIENT_HTTP = 46,
    982  LWS_CALLBACK_COMPLETED_CLIENT_HTTP = 47,
    984  LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ = 48,
    986  LWS_CALLBACK_HTTP_BIND_PROTOCOL = 49,
    988  LWS_CALLBACK_HTTP_DROP_PROTOCOL = 50,
    990  LWS_CALLBACK_CHECK_ACCESS_RIGHTS = 51,
    992  LWS_CALLBACK_PROCESS_HTML = 52,
    994  LWS_CALLBACK_ADD_HEADERS = 53,
    996  LWS_CALLBACK_SESSION_INFO = 54,
    999  LWS_CALLBACK_GS_EVENT = 55,
    1016  /****** add new things just above ---^ ******/
    1017 
    1020 };
    1021 
    1022 
    1023 
    1039 typedef int
    1040 lws_callback_function(struct lws *wsi, enum lws_callback_reasons reason,
    1041  void *user, void *in, size_t len);
    1043 
    1053 
    1055 /*
    1056  * NOTE: These public enums are part of the abi. If you want to add one,
    1057  * add it at where specified so existing users are unaffected.
    1058  */
    1059 enum lws_extension_callback_reasons {
    1060  LWS_EXT_CB_SERVER_CONTEXT_CONSTRUCT = 0,
    1061  LWS_EXT_CB_CLIENT_CONTEXT_CONSTRUCT = 1,
    1062  LWS_EXT_CB_SERVER_CONTEXT_DESTRUCT = 2,
    1063  LWS_EXT_CB_CLIENT_CONTEXT_DESTRUCT = 3,
    1064  LWS_EXT_CB_CONSTRUCT = 4,
    1065  LWS_EXT_CB_CLIENT_CONSTRUCT = 5,
    1066  LWS_EXT_CB_CHECK_OK_TO_REALLY_CLOSE = 6,
    1067  LWS_EXT_CB_CHECK_OK_TO_PROPOSE_EXTENSION = 7,
    1068  LWS_EXT_CB_DESTROY = 8,
    1069  LWS_EXT_CB_DESTROY_ANY_WSI_CLOSING = 9,
    1070  LWS_EXT_CB_ANY_WSI_ESTABLISHED = 10,
    1071  LWS_EXT_CB_PACKET_RX_PREPARSE = 11,
    1072  LWS_EXT_CB_PACKET_TX_PRESEND = 12,
    1073  LWS_EXT_CB_PACKET_TX_DO_SEND = 13,
    1074  LWS_EXT_CB_HANDSHAKE_REPLY_TX = 14,
    1075  LWS_EXT_CB_FLUSH_PENDING_TX = 15,
    1076  LWS_EXT_CB_EXTENDED_PAYLOAD_RX = 16,
    1077  LWS_EXT_CB_CAN_PROXY_CLIENT_CONNECTION = 17,
    1078  LWS_EXT_CB_1HZ = 18,
    1079  LWS_EXT_CB_REQUEST_ON_WRITEABLE = 19,
    1080  LWS_EXT_CB_IS_WRITEABLE = 20,
    1081  LWS_EXT_CB_PAYLOAD_TX = 21,
    1082  LWS_EXT_CB_PAYLOAD_RX = 22,
    1083  LWS_EXT_CB_OPTION_DEFAULT = 23,
    1084  LWS_EXT_CB_OPTION_SET = 24,
    1085  LWS_EXT_CB_OPTION_CONFIRM = 25,
    1086  LWS_EXT_CB_NAMED_OPTION_SET = 26,
    1087 
    1088  /****** add new things just above ---^ ******/
    1089 };
    1090 
    1097  /* Add new things just above here ---^
    1098  * This is part of the ABI, don't needlessly break compatibility */
    1099 };
    1100 
    1106  const char *name;
    1109  /* Add new things just above here ---^
    1110  * This is part of the ABI, don't needlessly break compatibility */
    1111 };
    1112 
    1115  const char *option_name;
    1117  const char *start;
    1118  int len;
    1119 };
    1120 
    1181 typedef int
    1182 lws_extension_callback_function(struct lws_context *context,
    1183  const struct lws_extension *ext, struct lws *wsi,
    1184  enum lws_extension_callback_reasons reason,
    1185  void *user, void *in, size_t len);
    1186 
    1189  const char *name;
    1191  const char *client_offer;
    1193  /* Add new things just above here ---^
    1194  * This is part of the ABI, don't needlessly break compatibility */
    1195 };
    1196 
    1205 LWS_VISIBLE LWS_EXTERN int
    1206 lws_set_extension_option(struct lws *wsi, const char *ext_name,
    1207  const char *opt_name, const char *opt_val);
    1208 
    1209 #ifndef LWS_NO_EXTENSIONS
    1210 /* lws_get_internal_extensions() - DEPRECATED
    1211  *
    1212  * \Deprecated There is no longer a set internal extensions table. The table is provided
    1213  * by user code along with application-specific settings. See the test
    1214  * client and server for how to do.
    1215  */
    1216 static LWS_INLINE LWS_WARN_DEPRECATED const struct lws_extension *
    1217 lws_get_internal_extensions() { return NULL; }
    1218 
    1229 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    1230 lws_ext_parse_options(const struct lws_extension *ext, struct lws *wsi,
    1231  void *ext_user, const struct lws_ext_options *opts,
    1232  const char *o, int len);
    1233 #endif
    1234 
    1247 LWS_EXTERN
    1249  struct lws_context *context, const struct lws_extension *ext,
    1250  struct lws *wsi, enum lws_extension_callback_reasons reason,
    1251  void *user, void *in, size_t len);
    1252 
    1253 /*
    1254  * The internal exts are part of the public abi
    1255  * If we add more extensions, publish the callback here ------v
    1256  */
    1258 
    1274 
    1279  const char *name;
    1300  unsigned int id;
    1307  void *user;
    1310  /* Add new things just above here ---^
    1311  * This is part of the ABI, don't needlessly break compatibility */
    1312 };
    1313 
    1314 struct lws_vhost;
    1315 
    1324 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
    1325 lws_vhost_name_to_protocol(struct lws_vhost *vh, const char *name);
    1326 
    1336 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
    1337 lws_get_protocol(struct lws *wsi);
    1338 
    1340 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
    1341 lws_protocol_get(struct lws *wsi) LWS_WARN_DEPRECATED;
    1342 
    1353 LWS_VISIBLE LWS_EXTERN void *
    1354 lws_protocol_vh_priv_zalloc(struct lws_vhost *vhost, const struct lws_protocols *prot,
    1355  int size);
    1356 
    1366 LWS_VISIBLE LWS_EXTERN void *
    1367 lws_protocol_vh_priv_get(struct lws_vhost *vhost, const struct lws_protocols *prot);
    1368 
    1377 LWS_VISIBLE LWS_EXTERN int
    1378 lws_finalize_startup(struct lws_context *context);
    1379 
    1380 #ifdef LWS_WITH_PLUGINS
    1381 
    1382 /* PLUGINS implies LIBUV */
    1383 
    1384 #define LWS_PLUGIN_API_MAGIC 180
    1385 
    1388  unsigned int api_magic;
    1389  const struct lws_protocols *protocols;
    1391  const struct lws_extension *extensions;
    1393 };
    1394 
    1395 typedef int (*lws_plugin_init_func)(struct lws_context *,
    1396  struct lws_plugin_capability *);
    1397 typedef int (*lws_plugin_destroy_func)(struct lws_context *);
    1398 
    1400 struct lws_plugin {
    1401  struct lws_plugin *list;
    1402 #if (UV_VERSION_MAJOR > 0)
    1403  uv_lib_t lib;
    1404 #else
    1405  void *l;
    1406 #endif
    1407  char name[64];
    1409 };
    1410 
    1411 #endif
    1412 
    1414 
    1415 
    1424 
    1426 #define LWSGS_EMAIL_CONTENT_SIZE 16384
    1427 
    1429 /* SHA-1 binary and hexified versions */
    1431 typedef struct { unsigned char bin[20]; } lwsgw_hash_bin;
    1433 typedef struct { char id[41]; } lwsgw_hash;
    1434 
    1441 };
    1442 
    1445  char username[32];
    1446  char email[100];
    1447  char ip[72];
    1448  unsigned int mask;
    1450  char session[42];
    1451 };
    1452 
    1457 };
    1458 
    1461  enum lws_gs_event event;
    1462  const char *username;
    1463  const char *email;
    1464 };
    1465 
    1467 
    1468 
    1482 
    1484 /*
    1485  * NOTE: These public enums are part of the abi. If you want to add one,
    1486  * add it at where specified so existing users are unaffected.
    1487  */
    1488 
    1492  (1 << 12),
    1499  (1 << 12),
    1515  (1 << 12),
    1520  (1 << 12),
    1544  /****** add new things just above ---^ ******/
    1545 };
    1546 
    1547 #define lws_check_opt(c, f) (((c) & (f)) == (f))
    1548 
    1559  int port;
    1564  const char *iface;
    1571  const struct lws_protocols *protocols;
    1575  const struct lws_extension *extensions;
    1583  const char *ssl_cert_filepath;
    1593  const char *ssl_ca_filepath;
    1595  const char *ssl_cipher_list;
    1599  const char *http_proxy_address;
    1602  unsigned int http_proxy_port;
    1604  int gid;
    1606  int uid;
    1608  unsigned int options;
    1610  void *user;
    1613  int ka_time;
    1623 #ifdef LWS_OPENSSL_SUPPORT
    1629 #else /* maintain structure layout either way */
    1631 #endif
    1632 
    1643  unsigned int count_threads;
    1645  unsigned int fd_limit_per_thread;
    1649  unsigned int timeout_secs;
    1654  const char *ecdh_curve;
    1656  const char *vhost_name;
    1660  const char * const *plugin_dirs;
    1669  const char *log_filepath;
    1672  const struct lws_http_mount *mounts;
    1674  const char *server_string;
    1677  unsigned int pt_serv_buf_size;
    1692  unsigned short ws_ping_pong_interval;
    1708  /* Add new things just above here ---^
    1709  * This is part of the ABI, don't needlessly break compatibility
    1710  *
    1711  * The below is to ensure later library versions with new
    1712  * members added above will see 0 (default) even if the app
    1713  * was not built against the newer headers.
    1714  */
    1715 
    1716  void *_unused[8];
    1717 };
    1718 
    1753 LWS_VISIBLE LWS_EXTERN struct lws_context *
    1755 
    1764 LWS_VISIBLE LWS_EXTERN void
    1765 lws_context_destroy(struct lws_context *context);
    1766 
    1784 LWS_VISIBLE LWS_EXTERN int
    1785 lws_set_proxy(struct lws_vhost *vhost, const char *proxy);
    1786 
    1787 
    1788 struct lws_vhost;
    1789 
    1799 LWS_EXTERN LWS_VISIBLE struct lws_vhost *
    1800 lws_create_vhost(struct lws_context *context,
    1801  struct lws_context_creation_info *info);
    1802 
    1817 LWS_VISIBLE LWS_EXTERN int
    1818 lwsws_get_config_globals(struct lws_context_creation_info *info, const char *d,
    1819  char **config_strings, int *len);
    1820 
    1836 LWS_VISIBLE LWS_EXTERN int
    1837 lwsws_get_config_vhosts(struct lws_context *context,
    1838  struct lws_context_creation_info *info, const char *d,
    1839  char **config_strings, int *len);
    1840 
    1842 LWS_VISIBLE LWS_EXTERN struct lws_vhost *
    1843 lws_vhost_get(struct lws *wsi) LWS_WARN_DEPRECATED;
    1844 
    1850 LWS_VISIBLE LWS_EXTERN struct lws_vhost *
    1851 lws_get_vhost(struct lws *wsi);
    1852 
    1860 LWS_VISIBLE LWS_EXTERN int
    1861 lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len);
    1862 
    1870 LWS_VISIBLE LWS_EXTERN int
    1871 lws_json_dump_context(const struct lws_context *context, char *buf, int len);
    1872 
    1882 LWS_VISIBLE LWS_EXTERN void *
    1883 lws_context_user(struct lws_context *context);
    1884 
    1890 
    1900  const char *name;
    1901  const char *value;
    1902 };
    1903 
    1916 };
    1917 
    1925  const char *mountpoint;
    1927  const char *origin;
    1929  const char *def;
    1931  const char *protocol;
    1947  unsigned int auth_mask;
    1950  unsigned int cache_reusable:1;
    1951  unsigned int cache_revalidate:1;
    1952  unsigned int cache_intermediaries:1;
    1954  unsigned char origin_protocol;
    1955  unsigned char mountpoint_len;
    1956 };
    1959 
    1965 
    1973  LCCSCF_USE_SSL = (1 << 0),
    1974  LCCSCF_ALLOW_SELFSIGNED = (1 << 1),
    1975  LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK = (1 << 2)
    1976 };
    1977 
    1982  struct lws_context *context;
    1984  const char *address;
    1986  int port;
    1990  const char *path;
    1992  const char *host;
    1994  const char *origin;
    1996  const char *protocol;
    2000  void *userdata;
    2004  const char *method;
    2007  struct lws *parent_wsi;
    2011  const char *uri_replace_from;
    2014  const char *uri_replace_to;
    2016  struct lws_vhost *vhost;
    2018  struct lws **pwsi;
    2030  /* Add new things just above here ---^
    2031  * This is part of the ABI, don't needlessly break compatibility
    2032  *
    2033  * The below is to ensure later library versions with new
    2034  * members added above will see 0 (default) even if the app
    2035  * was not built against the newer headers.
    2036  */
    2037 
    2038  void *_unused[4];
    2039 };
    2040 
    2048 LWS_VISIBLE LWS_EXTERN struct lws *
    2050 
    2071 /* deprecated, use lws_client_connect_via_info() */
    2072 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    2073 lws_client_connect(struct lws_context *clients, const char *address,
    2074  int port, int ssl_connection, const char *path,
    2075  const char *host, const char *origin, const char *protocol,
    2076  int ietf_version_or_minus_one) LWS_WARN_DEPRECATED;
    2077 /* deprecated, use lws_client_connect_via_info() */
    2098 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    2099 lws_client_connect_extended(struct lws_context *clients, const char *address,
    2100  int port, int ssl_connection, const char *path,
    2101  const char *host, const char *origin,
    2102  const char *protocol, int ietf_version_or_minus_one,
    2103  void *userdata) LWS_WARN_DEPRECATED;
    2104 
    2130 LWS_VISIBLE LWS_EXTERN int
    2132  struct lws_vhost *vhost);
    2133 
    2134 LWS_VISIBLE LWS_EXTERN int
    2135 lws_http_client_read(struct lws *wsi, char **buf, int *len);
    2136 
    2137 LWS_VISIBLE LWS_EXTERN void
    2138 lws_client_http_body_pending(struct lws *wsi, int something_left_to_send);
    2139 
    2160 
    2169 
    2202 LWS_VISIBLE LWS_EXTERN int
    2203 lws_service(struct lws_context *context, int timeout_ms);
    2204 
    2216 LWS_VISIBLE LWS_EXTERN int
    2217 lws_service_tsi(struct lws_context *context, int timeout_ms, int tsi);
    2218 
    2234 LWS_VISIBLE LWS_EXTERN void
    2235 lws_cancel_service_pt(struct lws *wsi);
    2236 
    2248 LWS_VISIBLE LWS_EXTERN void
    2249 lws_cancel_service(struct lws_context *context);
    2250 
    2273 LWS_VISIBLE LWS_EXTERN int
    2274 lws_service_fd(struct lws_context *context, struct lws_pollfd *pollfd);
    2275 
    2285 LWS_VISIBLE LWS_EXTERN int
    2286 lws_service_fd_tsi(struct lws_context *context, struct lws_pollfd *pollfd,
    2287  int tsi);
    2288 
    2290 
    2296 
    2303 
    2315 LWS_VISIBLE LWS_EXTERN const char *
    2316 lws_get_mimetype(const char *file, const struct lws_http_mount *m);
    2317 
    2336 LWS_VISIBLE LWS_EXTERN int
    2337 lws_serve_http_file(struct lws *wsi, const char *file, const char *content_type,
    2338  const char *other_headers, int other_headers_len);
    2339 LWS_VISIBLE LWS_EXTERN int
    2340 lws_serve_http_file_fragment(struct lws *wsi);
    2342 
    2353 
    2354 enum http_status {
    2355  HTTP_STATUS_OK = 200,
    2356  HTTP_STATUS_NO_CONTENT = 204,
    2357 
    2358  HTTP_STATUS_MOVED_PERMANENTLY = 301,
    2359  HTTP_STATUS_FOUND = 302,
    2360  HTTP_STATUS_SEE_OTHER = 303,
    2361 
    2362  HTTP_STATUS_BAD_REQUEST = 400,
    2363  HTTP_STATUS_UNAUTHORIZED,
    2364  HTTP_STATUS_PAYMENT_REQUIRED,
    2365  HTTP_STATUS_FORBIDDEN,
    2366  HTTP_STATUS_NOT_FOUND,
    2367  HTTP_STATUS_METHOD_NOT_ALLOWED,
    2368  HTTP_STATUS_NOT_ACCEPTABLE,
    2369  HTTP_STATUS_PROXY_AUTH_REQUIRED,
    2370  HTTP_STATUS_REQUEST_TIMEOUT,
    2371  HTTP_STATUS_CONFLICT,
    2372  HTTP_STATUS_GONE,
    2373  HTTP_STATUS_LENGTH_REQUIRED,
    2374  HTTP_STATUS_PRECONDITION_FAILED,
    2375  HTTP_STATUS_REQ_ENTITY_TOO_LARGE,
    2376  HTTP_STATUS_REQ_URI_TOO_LONG,
    2377  HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE,
    2378  HTTP_STATUS_REQ_RANGE_NOT_SATISFIABLE,
    2379  HTTP_STATUS_EXPECTATION_FAILED,
    2380 
    2381  HTTP_STATUS_INTERNAL_SERVER_ERROR = 500,
    2382  HTTP_STATUS_NOT_IMPLEMENTED,
    2383  HTTP_STATUS_BAD_GATEWAY,
    2384  HTTP_STATUS_SERVICE_UNAVAILABLE,
    2385  HTTP_STATUS_GATEWAY_TIMEOUT,
    2386  HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED,
    2387 };
    2388 
    2390  char *p;
    2391  int len;
    2392  int max_len;
    2393  int final;
    2394 };
    2395 
    2396 typedef const char *(*lws_process_html_state_cb)(void *data, int index);
    2397 
    2399  char *start;
    2400  char swallow[16];
    2401  int pos;
    2402  void *data;
    2403  const char * const *vars;
    2406  lws_process_html_state_cb replace;
    2407 };
    2408 
    2413 LWS_VISIBLE LWS_EXTERN int
    2415  struct lws_process_html_state *s);
    2417 
    2450 
    2458 struct lws_tokens {
    2459  char *token;
    2461 };
    2462 
    2463 /* enum lws_token_indexes
    2464  * these have to be kept in sync with lextable.h / minilex.c
    2465  *
    2466  * NOTE: These public enums are part of the abi. If you want to add one,
    2467  * add it at where specified so existing users are unaffected.
    2468  */
    2469 enum lws_token_indexes {
    2470  WSI_TOKEN_GET_URI = 0,
    2471  WSI_TOKEN_POST_URI = 1,
    2472  WSI_TOKEN_OPTIONS_URI = 2,
    2473  WSI_TOKEN_HOST = 3,
    2474  WSI_TOKEN_CONNECTION = 4,
    2475  WSI_TOKEN_UPGRADE = 5,
    2476  WSI_TOKEN_ORIGIN = 6,
    2477  WSI_TOKEN_DRAFT = 7,
    2478  WSI_TOKEN_CHALLENGE = 8,
    2479  WSI_TOKEN_EXTENSIONS = 9,
    2480  WSI_TOKEN_KEY1 = 10,
    2481  WSI_TOKEN_KEY2 = 11,
    2482  WSI_TOKEN_PROTOCOL = 12,
    2483  WSI_TOKEN_ACCEPT = 13,
    2484  WSI_TOKEN_NONCE = 14,
    2485  WSI_TOKEN_HTTP = 15,
    2486  WSI_TOKEN_HTTP2_SETTINGS = 16,
    2487  WSI_TOKEN_HTTP_ACCEPT = 17,
    2488  WSI_TOKEN_HTTP_AC_REQUEST_HEADERS = 18,
    2489  WSI_TOKEN_HTTP_IF_MODIFIED_SINCE = 19,
    2490  WSI_TOKEN_HTTP_IF_NONE_MATCH = 20,
    2491  WSI_TOKEN_HTTP_ACCEPT_ENCODING = 21,
    2492  WSI_TOKEN_HTTP_ACCEPT_LANGUAGE = 22,
    2493  WSI_TOKEN_HTTP_PRAGMA = 23,
    2494  WSI_TOKEN_HTTP_CACHE_CONTROL = 24,
    2495  WSI_TOKEN_HTTP_AUTHORIZATION = 25,
    2496  WSI_TOKEN_HTTP_COOKIE = 26,
    2497  WSI_TOKEN_HTTP_CONTENT_LENGTH = 27,
    2498  WSI_TOKEN_HTTP_CONTENT_TYPE = 28,
    2499  WSI_TOKEN_HTTP_DATE = 29,
    2500  WSI_TOKEN_HTTP_RANGE = 30,
    2501  WSI_TOKEN_HTTP_REFERER = 31,
    2502  WSI_TOKEN_KEY = 32,
    2503  WSI_TOKEN_VERSION = 33,
    2504  WSI_TOKEN_SWORIGIN = 34,
    2505 
    2506  WSI_TOKEN_HTTP_COLON_AUTHORITY = 35,
    2507  WSI_TOKEN_HTTP_COLON_METHOD = 36,
    2508  WSI_TOKEN_HTTP_COLON_PATH = 37,
    2509  WSI_TOKEN_HTTP_COLON_SCHEME = 38,
    2510  WSI_TOKEN_HTTP_COLON_STATUS = 39,
    2511 
    2512  WSI_TOKEN_HTTP_ACCEPT_CHARSET = 40,
    2513  WSI_TOKEN_HTTP_ACCEPT_RANGES = 41,
    2514  WSI_TOKEN_HTTP_ACCESS_CONTROL_ALLOW_ORIGIN = 42,
    2515  WSI_TOKEN_HTTP_AGE = 43,
    2516  WSI_TOKEN_HTTP_ALLOW = 44,
    2517  WSI_TOKEN_HTTP_CONTENT_DISPOSITION = 45,
    2518  WSI_TOKEN_HTTP_CONTENT_ENCODING = 46,
    2519  WSI_TOKEN_HTTP_CONTENT_LANGUAGE = 47,
    2520  WSI_TOKEN_HTTP_CONTENT_LOCATION = 48,
    2521  WSI_TOKEN_HTTP_CONTENT_RANGE = 49,
    2522  WSI_TOKEN_HTTP_ETAG = 50,
    2523  WSI_TOKEN_HTTP_EXPECT = 51,
    2524  WSI_TOKEN_HTTP_EXPIRES = 52,
    2525  WSI_TOKEN_HTTP_FROM = 53,
    2526  WSI_TOKEN_HTTP_IF_MATCH = 54,
    2527  WSI_TOKEN_HTTP_IF_RANGE = 55,
    2528  WSI_TOKEN_HTTP_IF_UNMODIFIED_SINCE = 56,
    2529  WSI_TOKEN_HTTP_LAST_MODIFIED = 57,
    2530  WSI_TOKEN_HTTP_LINK = 58,
    2531  WSI_TOKEN_HTTP_LOCATION = 59,
    2532  WSI_TOKEN_HTTP_MAX_FORWARDS = 60,
    2533  WSI_TOKEN_HTTP_PROXY_AUTHENTICATE = 61,
    2534  WSI_TOKEN_HTTP_PROXY_AUTHORIZATION = 62,
    2535  WSI_TOKEN_HTTP_REFRESH = 63,
    2536  WSI_TOKEN_HTTP_RETRY_AFTER = 64,
    2537  WSI_TOKEN_HTTP_SERVER = 65,
    2538  WSI_TOKEN_HTTP_SET_COOKIE = 66,
    2539  WSI_TOKEN_HTTP_STRICT_TRANSPORT_SECURITY = 67,
    2540  WSI_TOKEN_HTTP_TRANSFER_ENCODING = 68,
    2541  WSI_TOKEN_HTTP_USER_AGENT = 69,
    2542  WSI_TOKEN_HTTP_VARY = 70,
    2543  WSI_TOKEN_HTTP_VIA = 71,
    2544  WSI_TOKEN_HTTP_WWW_AUTHENTICATE = 72,
    2545 
    2546  WSI_TOKEN_PATCH_URI = 73,
    2547  WSI_TOKEN_PUT_URI = 74,
    2548  WSI_TOKEN_DELETE_URI = 75,
    2549 
    2550  WSI_TOKEN_HTTP_URI_ARGS = 76,
    2551  WSI_TOKEN_PROXY = 77,
    2552  WSI_TOKEN_HTTP_X_REAL_IP = 78,
    2553  WSI_TOKEN_HTTP1_0 = 79,
    2554 
    2555  /****** add new things just above ---^ ******/
    2556 
    2557  /* use token storage to stash these internally, not for
    2558  * user use */
    2559 
    2560  _WSI_TOKEN_CLIENT_SENT_PROTOCOLS,
    2561  _WSI_TOKEN_CLIENT_PEER_ADDRESS,
    2562  _WSI_TOKEN_CLIENT_URI,
    2563  _WSI_TOKEN_CLIENT_HOST,
    2564  _WSI_TOKEN_CLIENT_ORIGIN,
    2565  _WSI_TOKEN_CLIENT_METHOD,
    2566 
    2567  /* always last real token index*/
    2568  WSI_TOKEN_COUNT,
    2569 
    2570  /* parser state additions, no storage associated */
    2571  WSI_TOKEN_NAME_PART,
    2572  WSI_TOKEN_SKIPPING,
    2573  WSI_TOKEN_SKIPPING_SAW_CR,
    2574  WSI_PARSING_COMPLETE,
    2575  WSI_INIT_TOKEN_MUXURL,
    2576 };
    2577 
    2579  unsigned short token_limit[WSI_TOKEN_COUNT];
    2580 };
    2581 
    2587 LWS_VISIBLE LWS_EXTERN const unsigned char *
    2588 lws_token_to_string(enum lws_token_indexes token);
    2589 
    2590 
    2599 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2600 lws_hdr_total_length(struct lws *wsi, enum lws_token_indexes h);
    2601 
    2611 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2612 lws_hdr_fragment_length(struct lws *wsi, enum lws_token_indexes h, int frag_idx);
    2613 
    2627 LWS_VISIBLE LWS_EXTERN int
    2628 lws_hdr_copy(struct lws *wsi, char *dest, int len, enum lws_token_indexes h);
    2629 
    2647 LWS_VISIBLE LWS_EXTERN int
    2648 lws_hdr_copy_fragment(struct lws *wsi, char *dest, int len,
    2649  enum lws_token_indexes h, int frag_idx);
    2650 
    2661 LWS_VISIBLE LWS_EXTERN const char *
    2662 lws_get_urlarg_by_name(struct lws *wsi, const char *name, char *buf, int len);
    2664 
    2679 
    2690 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2691 lws_add_http_header_status(struct lws *wsi,
    2692  unsigned int code, unsigned char **p,
    2693  unsigned char *end);
    2706 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2707 lws_add_http_header_by_name(struct lws *wsi, const unsigned char *name,
    2708  const unsigned char *value, int length,
    2709  unsigned char **p, unsigned char *end);
    2723 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2724 lws_add_http_header_by_token(struct lws *wsi, enum lws_token_indexes token,
    2725  const unsigned char *value, int length,
    2726  unsigned char **p, unsigned char *end);
    2737 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2738 lws_add_http_header_content_length(struct lws *wsi,
    2739  unsigned long content_length,
    2740  unsigned char **p, unsigned char *end);
    2750 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2751 lws_finalize_http_header(struct lws *wsi, unsigned char **p,
    2752  unsigned char *end);
    2754 
    2773 
    2783 };
    2784 
    2798 typedef int (*lws_spa_fileupload_cb)(void *data, const char *name,
    2799  const char *filename, char *buf, int len,
    2800  enum lws_spa_fileupload_states state);
    2801 
    2804 struct lws_spa;
    2805 
    2824 LWS_VISIBLE LWS_EXTERN struct lws_spa *
    2825 lws_spa_create(struct lws *wsi, const char * const *param_names,
    2826  int count_params, int max_storage, lws_spa_fileupload_cb opt_cb,
    2827  void *opt_data);
    2828 
    2836 LWS_VISIBLE LWS_EXTERN int
    2837 lws_spa_process(struct lws_spa *spa, const char *in, int len);
    2838 
    2844 LWS_VISIBLE LWS_EXTERN int
    2845 lws_spa_finalize(struct lws_spa *spa);
    2846 
    2853 LWS_VISIBLE LWS_EXTERN int
    2854 lws_spa_get_length(struct lws_spa *spa, int n);
    2855 
    2861 LWS_VISIBLE LWS_EXTERN const char *
    2862 lws_spa_get_string(struct lws_spa *spa, int n);
    2863 
    2869 LWS_VISIBLE LWS_EXTERN int
    2870 lws_spa_destroy(struct lws_spa *spa);
    2872 
    2883 
    2894 LWS_VISIBLE LWS_EXTERN const char *
    2895 lws_urlencode(char *escaped, const char *string, int len);
    2896 
    2897 /*
    2898  * URLDECODE 1 / 2
    2899  *
    2900  * This simple urldecode only operates until the first '\0' and requires the
    2901  * data to exist all at once
    2902  */
    2915 LWS_VISIBLE LWS_EXTERN int
    2916 lws_urldecode(char *string, const char *escaped, int len);
    2918 
    2927 LWS_VISIBLE LWS_EXTERN int
    2928 lws_return_http_status(struct lws *wsi, unsigned int code,
    2929  const char *html_body);
    2930 
    2941 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2942 lws_http_redirect(struct lws *wsi, int code, const unsigned char *loc, int len,
    2943  unsigned char **p, unsigned char *end);
    2944 
    2953 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2954 lws_http_transaction_completed(struct lws *wsi);
    2956 
    2964 
    2975 LWS_VISIBLE LWS_EXTERN const char *
    2976 lws_sql_purify(char *escaped, const char *string, int len);
    2977 
    2988 LWS_VISIBLE LWS_EXTERN const char *
    2989 lws_json_purify(char *escaped, const char *string, int len);
    2991 
    2998 
    3000 #ifdef LWS_USE_LIBEV
    3001 typedef void (lws_ev_signal_cb_t)(EV_P_ struct ev_signal *w, int revents);
    3002 
    3003 LWS_VISIBLE LWS_EXTERN int
    3004 lws_ev_sigint_cfg(struct lws_context *context, int use_ev_sigint,
    3005  lws_ev_signal_cb_t *cb);
    3006 
    3007 LWS_VISIBLE LWS_EXTERN int
    3008 lws_ev_initloop(struct lws_context *context, struct ev_loop *loop, int tsi);
    3009 
    3010 LWS_VISIBLE LWS_EXTERN void
    3011 lws_ev_sigint_cb(struct ev_loop *loop, struct ev_signal *watcher, int revents);
    3012 #endif /* LWS_USE_LIBEV */
    3013 
    3015 
    3022 #ifdef LWS_USE_LIBUV
    3024 LWS_VISIBLE LWS_EXTERN int
    3025 lws_uv_sigint_cfg(struct lws_context *context, int use_uv_sigint,
    3026  uv_signal_cb cb);
    3027 
    3028 LWS_VISIBLE LWS_EXTERN void
    3029 lws_libuv_run(const struct lws_context *context, int tsi);
    3030 
    3031 LWS_VISIBLE LWS_EXTERN void
    3032 lws_libuv_stop(struct lws_context *context);
    3033 
    3034 LWS_VISIBLE LWS_EXTERN int
    3035 lws_uv_initloop(struct lws_context *context, uv_loop_t *loop, int tsi);
    3036 
    3037 LWS_VISIBLE LWS_EXTERN uv_loop_t *
    3038 lws_uv_getloop(struct lws_context *context, int tsi);
    3039 
    3040 LWS_VISIBLE LWS_EXTERN void
    3041 lws_uv_sigint_cb(uv_signal_t *watcher, int signum);
    3042 #endif /* LWS_USE_LIBUV */
    3043 
    3050 
    3051 /*
    3052  * NOTE: These public enums are part of the abi. If you want to add one,
    3053  * add it at where specified so existing users are unaffected.
    3054  */
    3055 enum pending_timeout {
    3056  NO_PENDING_TIMEOUT = 0,
    3057  PENDING_TIMEOUT_AWAITING_PROXY_RESPONSE = 1,
    3058  PENDING_TIMEOUT_AWAITING_CONNECT_RESPONSE = 2,
    3059  PENDING_TIMEOUT_ESTABLISH_WITH_SERVER = 3,
    3060  PENDING_TIMEOUT_AWAITING_SERVER_RESPONSE = 4,
    3061  PENDING_TIMEOUT_AWAITING_PING = 5,
    3062  PENDING_TIMEOUT_CLOSE_ACK = 6,
    3063  PENDING_TIMEOUT_AWAITING_EXTENSION_CONNECT_RESPONSE = 7,
    3064  PENDING_TIMEOUT_SENT_CLIENT_HANDSHAKE = 8,
    3065  PENDING_TIMEOUT_SSL_ACCEPT = 9,
    3066  PENDING_TIMEOUT_HTTP_CONTENT = 10,
    3067  PENDING_TIMEOUT_AWAITING_CLIENT_HS_SEND = 11,
    3068  PENDING_FLUSH_STORED_SEND_BEFORE_CLOSE = 12,
    3069  PENDING_TIMEOUT_SHUTDOWN_FLUSH = 13,
    3070  PENDING_TIMEOUT_CGI = 14,
    3071  PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE = 15,
    3072  PENDING_TIMEOUT_WS_PONG_CHECK_SEND_PING = 16,
    3073  PENDING_TIMEOUT_WS_PONG_CHECK_GET_PONG = 17,
    3074  PENDING_TIMEOUT_CLIENT_ISSUE_PAYLOAD = 18,
    3075 
    3076  /****** add new things just above ---^ ******/
    3077 };
    3078 
    3088 LWS_VISIBLE LWS_EXTERN void
    3089 lws_set_timeout(struct lws *wsi, enum pending_timeout reason, int secs);
    3091 
    3097 #if !defined(LWS_SIZEOFPTR)
    3098 #define LWS_SIZEOFPTR (sizeof (void *))
    3099 #endif
    3100 #if !defined(u_int64_t)
    3101 #define u_int64_t unsigned long long
    3102 #endif
    3103 
    3104 #if defined(__x86_64__)
    3105 #define _LWS_PAD_SIZE 16 /* Intel recommended for best performance */
    3106 #else
    3107 #define _LWS_PAD_SIZE LWS_SIZEOFPTR /* Size of a pointer on the target arch */
    3108 #endif
    3109 #define _LWS_PAD(n) (((n) % _LWS_PAD_SIZE) ? \
    3110  ((n) + (_LWS_PAD_SIZE - ((n) % _LWS_PAD_SIZE))) : (n))
    3111 #define LWS_PRE _LWS_PAD(4 + 10)
    3112 /* used prior to 1.7 and retained for backward compatibility */
    3113 #define LWS_SEND_BUFFER_PRE_PADDING LWS_PRE
    3114 #define LWS_SEND_BUFFER_POST_PADDING 0
    3115 
    3116 /*
    3117  * NOTE: These public enums are part of the abi. If you want to add one,
    3118  * add it at where specified so existing users are unaffected.
    3119  */
    3134  /* LWS_WRITE_CLOSE is handled by lws_close_reason() */
    3135  LWS_WRITE_PING = 5,
    3136  LWS_WRITE_PONG = 6,
    3137 
    3138  /* Same as write_http but we know this write ends the transaction */
    3139  LWS_WRITE_HTTP_FINAL = 7,
    3140 
    3141  /* HTTP2 */
    3142 
    3150  /****** add new things just above ---^ ******/
    3151 
    3152  /* flags */
    3153 
    3161 };
    3162 
    3163 
    3235 LWS_VISIBLE LWS_EXTERN int
    3236 lws_write(struct lws *wsi, unsigned char *buf, size_t len,
    3237  enum lws_write_protocol protocol);
    3238 
    3239 /* helper for case where buffer may be const */
    3240 #define lws_write_http(wsi, buf, len) \
    3241  lws_write(wsi, (unsigned char *)(buf), len, LWS_WRITE_HTTP)
    3242 
    3244 
    3263 
    3276 LWS_VISIBLE LWS_EXTERN int
    3277 lws_callback_on_writable(struct lws *wsi);
    3278 
    3292 LWS_VISIBLE LWS_EXTERN int
    3293 lws_callback_on_writable_all_protocol(const struct lws_context *context,
    3294  const struct lws_protocols *protocol);
    3295 
    3309 LWS_VISIBLE LWS_EXTERN int
    3310 lws_callback_on_writable_all_protocol_vhost(const struct lws_vhost *vhost,
    3311  const struct lws_protocols *protocol);
    3312 
    3325 LWS_VISIBLE LWS_EXTERN int
    3326 lws_callback_all_protocol(struct lws_context *context,
    3327  const struct lws_protocols *protocol, int reason);
    3328 
    3341 LWS_VISIBLE LWS_EXTERN int
    3342 lws_callback_all_protocol_vhost(struct lws_vhost *vh,
    3343  const struct lws_protocols *protocol, int reason);
    3344 
    3358 LWS_VISIBLE LWS_EXTERN int
    3359 lws_callback_vhost_protocols(struct lws *wsi, int reason, void *in, int len);
    3360 
    3361 LWS_VISIBLE LWS_EXTERN int
    3362 lws_callback_http_dummy(struct lws *wsi, enum lws_callback_reasons reason,
    3363  void *user, void *in, size_t len);
    3364 
    3372 LWS_VISIBLE LWS_EXTERN int
    3373 lws_get_socket_fd(struct lws *wsi);
    3374 
    3396 LWS_VISIBLE LWS_EXTERN size_t
    3397 lws_get_peer_write_allowance(struct lws *wsi);
    3399 
    3410 LWS_VISIBLE LWS_EXTERN int
    3411 lws_rx_flow_control(struct lws *wsi, int enable);
    3412 
    3422 LWS_VISIBLE LWS_EXTERN void
    3423 lws_rx_flow_allow_all_protocol(const struct lws_context *context,
    3424  const struct lws_protocols *protocol);
    3425 
    3442 LWS_VISIBLE LWS_EXTERN size_t
    3443 lws_remaining_packet_payload(struct lws *wsi);
    3444 
    3445 
    3454 
    3467 LWS_VISIBLE LWS_EXTERN struct lws *
    3468 lws_adopt_socket(struct lws_context *context, lws_sockfd_type accept_fd);
    3491 LWS_VISIBLE LWS_EXTERN struct lws *
    3492 lws_adopt_socket_readbuf(struct lws_context *context, lws_sockfd_type accept_fd,
    3493  const char *readbuf, size_t len);
    3495 
    3501 
    3512 LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT
    3513 lws_canonical_hostname(struct lws_context *context);
    3514 
    3529 LWS_VISIBLE LWS_EXTERN void
    3530 lws_get_peer_addresses(struct lws *wsi, lws_sockfd_type fd, char *name,
    3531  int name_len, char *rip, int rip_len);
    3532 
    3543 LWS_VISIBLE LWS_EXTERN const char *
    3544 lws_get_peer_simple(struct lws *wsi, char *name, int namelen);
    3545 #ifndef LWS_WITH_ESP8266
    3546 
    3557 LWS_VISIBLE LWS_EXTERN int
    3558 lws_interface_to_sa(int ipv6, const char *ifname, struct sockaddr_in *addr,
    3559  size_t addrlen);
    3561 #endif
    3562 
    3568 
    3581 LWS_VISIBLE LWS_EXTERN int
    3582 lws_snprintf(char *str, size_t size, const char *format, ...);
    3583 
    3595 LWS_VISIBLE LWS_EXTERN int
    3596 lws_get_random(struct lws_context *context, void *buf, int len);
    3604 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3605 lws_daemonize(const char *_lock_path);
    3611 LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT
    3613 
    3620 LWS_VISIBLE LWS_EXTERN void *
    3621 lws_wsi_user(struct lws *wsi);
    3622 
    3634 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3635 lws_parse_uri(char *p, const char **prot, const char **ads, int *port,
    3636  const char **path);
    3637 
    3641 LWS_VISIBLE LWS_EXTERN unsigned long
    3642 lws_now_secs(void);
    3643 
    3653 LWS_VISIBLE LWS_EXTERN struct lws_context * LWS_WARN_UNUSED_RESULT
    3654 lws_get_context(const struct lws *wsi);
    3655 
    3665 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3666 lws_get_count_threads(struct lws_context *context);
    3667 
    3675 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    3676 lws_get_parent(const struct lws *wsi);
    3677 
    3684 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    3685 lws_get_child(const struct lws *wsi);
    3686 
    3687 
    3688 /*
    3689  * \deprecated DEPRECATED Note: this is not normally needed as a user api.
    3690  * It's provided in case it is
    3691  * useful when integrating with other app poll loop service code.
    3692  */
    3693 LWS_VISIBLE LWS_EXTERN int
    3694 lws_read(struct lws *wsi, unsigned char *buf, size_t len);
    3695 
    3703 LWS_VISIBLE LWS_EXTERN void
    3704 lws_set_allocator(void *(*realloc)(void *ptr, size_t size));
    3706 
    3712 
    3719 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3720 lws_send_pipe_choked(struct lws *wsi);
    3721 
    3726 LWS_VISIBLE LWS_EXTERN int
    3727 lws_is_final_fragment(struct lws *wsi);
    3728 
    3733 LWS_VISIBLE LWS_EXTERN unsigned char
    3734 lws_get_reserved_bits(struct lws *wsi);
    3735 
    3752 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3753 lws_partial_buffered(struct lws *wsi);
    3754 
    3764 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3765 lws_frame_is_binary(struct lws *wsi);
    3766 
    3775 LWS_VISIBLE LWS_EXTERN int
    3776 lws_is_ssl(struct lws *wsi);
    3781 LWS_VISIBLE LWS_EXTERN int
    3782 lws_is_cgi(struct lws *wsi);
    3784 
    3785 
    3791 #ifdef LWS_SHA1_USE_OPENSSL_NAME
    3793 #define lws_SHA1 SHA1
    3794 #else
    3795 
    3804 LWS_VISIBLE LWS_EXTERN unsigned char *
    3805 lws_SHA1(const unsigned char *d, size_t n, unsigned char *md);
    3806 #endif
    3807 
    3817 LWS_VISIBLE LWS_EXTERN int
    3818 lws_b64_encode_string(const char *in, int in_len, char *out, int out_size);
    3828 LWS_VISIBLE LWS_EXTERN int
    3829 lws_b64_decode_string(const char *in, char *out, int out_size);
    3831 
    3832 
    3842 #ifdef LWS_WITH_CGI
    3843 enum lws_enum_stdinouterr {
    3844  LWS_STDIN = 0,
    3845  LWS_STDOUT = 1,
    3846  LWS_STDERR = 2,
    3847 };
    3848 
    3849 enum lws_cgi_hdr_state {
    3850  LCHS_HEADER,
    3851  LCHS_CR1,
    3852  LCHS_LF1,
    3853  LCHS_CR2,
    3854  LCHS_LF2,
    3855  LHCS_PAYLOAD,
    3856  LCHS_SINGLE_0A,
    3857 };
    3858 
    3860  struct lws **stdwsi;
    3861  enum lws_enum_stdinouterr ch;
    3862  unsigned char *data;
    3863  enum lws_cgi_hdr_state hdr_state;
    3864  int len;
    3865 };
    3866 
    3867 
    3877 LWS_VISIBLE LWS_EXTERN int
    3878 lws_cgi(struct lws *wsi, const char * const *exec_array,
    3879  int script_uri_path_len, int timeout_secs,
    3880  const struct lws_protocol_vhost_options *mp_cgienv);
    3881 
    3887 LWS_VISIBLE LWS_EXTERN int
    3888 lws_cgi_write_split_stdout_headers(struct lws *wsi);
    3889 
    3895 LWS_VISIBLE LWS_EXTERN int
    3896 lws_cgi_kill(struct lws *wsi);
    3897 #endif
    3898 
    3900 
    3917 
    3924  lws_filefd_type (*open)(struct lws *wsi, const char *filename,
    3925  unsigned long *filelen, int flags);
    3929  int (*close)(struct lws *wsi, lws_filefd_type fd);
    3931  unsigned long (*seek_cur)(struct lws *wsi, lws_filefd_type fd,
    3932  long offset_from_cur_pos);
    3934  int (*read)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    3935  unsigned char *buf, unsigned long len);
    3937  int (*write)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    3938  unsigned char *buf, unsigned long len);
    3941  /* Add new things just above here ---^
    3942  * This is part of the ABI, don't needlessly break compatibility */
    3943 };
    3944 
    3950 LWS_VISIBLE LWS_EXTERN struct lws_plat_file_ops * LWS_WARN_UNUSED_RESULT
    3951 lws_get_fops(struct lws_context *context);
    3952 
    3961 static LWS_INLINE lws_filefd_type LWS_WARN_UNUSED_RESULT
    3962 lws_plat_file_open(struct lws *wsi, const char *filename,
    3963  unsigned long *filelen, int flags)
    3964 {
    3965  return lws_get_fops(lws_get_context(wsi))->open(wsi, filename,
    3966  filelen, flags);
    3967 }
    3968 
    3975 static LWS_INLINE int
    3976 lws_plat_file_close(struct lws *wsi, lws_filefd_type fd)
    3977 {
    3978  return lws_get_fops(lws_get_context(wsi))->close(wsi, fd);
    3979 }
    3980 
    3988 static LWS_INLINE unsigned long
    3989 lws_plat_file_seek_cur(struct lws *wsi, lws_filefd_type fd, long offset)
    3990 {
    3991  return lws_get_fops(lws_get_context(wsi))->seek_cur(wsi, fd, offset);
    3992 }
    4002 static LWS_INLINE int LWS_WARN_UNUSED_RESULT
    4003 lws_plat_file_read(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    4004  unsigned char *buf, unsigned long len)
    4005 {
    4006  return lws_get_fops(lws_get_context(wsi))->read(wsi, fd, amount, buf,
    4007  len);
    4008 }
    4018 static LWS_INLINE int LWS_WARN_UNUSED_RESULT
    4019 lws_plat_file_write(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    4020  unsigned char *buf, unsigned long len)
    4021 {
    4022  return lws_get_fops(lws_get_context(wsi))->write(wsi, fd, amount, buf,
    4023  len);
    4024 }
    4026 
    4058 #ifdef LWS_WITH_SMTP
    4059 
    4071 };
    4072 
    4074 struct lws_email {
    4075  void *data;
    4077  uv_loop_t *loop;
    4080  char email_smtp_ip[32];
    4081  char email_helo[32];
    4082  char email_from[100];
    4083  char email_to[100];
    4085  unsigned int max_content_size;
    4088  /* Fill all the callbacks before init */
    4089 
    4090  int (*on_next)(struct lws_email *email);
    4095  int (*on_sent)(struct lws_email *email);
    4100  int (*on_get_body)(struct lws_email *email, char *buf, int len);
    4106  /* private things */
    4107  uv_timer_t timeout_email;
    4109  uv_connect_t email_connect_req;
    4110  uv_tcp_t email_client;
    4112  char email_buf[256];
    4113  char *content;
    4114 };
    4115 
    4125 LWS_VISIBLE LWS_EXTERN int
    4126 lws_email_init(struct lws_email *email, uv_loop_t *loop, int max_content);
    4127 
    4136 LWS_VISIBLE LWS_EXTERN void
    4137 lws_email_check(struct lws_email *email);
    4145 LWS_VISIBLE LWS_EXTERN void
    4146 lws_email_destroy(struct lws_email *email);
    4147 
    4148 #endif
    4149 
    4150 
    4151 #ifdef __cplusplus
    4152 }
    4153 #endif
    4154 
    4155 #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:3845
    +
    Definition: libwebsockets.h:3859
    size_t rx_buffer_size
    Definition: libwebsockets.h:1291
    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
    @@ -83,14 +83,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:1912
    Definition: libwebsockets.h:3131
    -
    Definition: libwebsockets.h:4050
    +
    Definition: libwebsockets.h:4064
    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:233
    unsigned int auth_mask
    Definition: libwebsockets.h:1947
    Definition: libwebsockets.h:3154
    -
    void * data
    Definition: libwebsockets.h:4061
    +
    void * data
    Definition: libwebsockets.h:4075
    const char * uri_replace_from
    Definition: libwebsockets.h:2011
    -
    int(* write)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)
    Definition: libwebsockets.h:3923
    +
    int(* write)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)
    Definition: libwebsockets.h:3937
    lws_callback_reasons
    Definition: libwebsockets.h:660
    LWS_VISIBLE LWS_EXTERN int lws_hdr_copy_fragment(struct lws *wsi, char *dest, int len, enum lws_token_indexes h, int frag_idx)
    @@ -109,7 +109,7 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    LWS_VISIBLE LWS_EXTERN size_t lws_get_peer_write_allowance(struct lws *wsi)
    Definition: libwebsockets.h:744
    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:4081
    +
    int(* on_sent)(struct lws_email *email)
    Definition: libwebsockets.h:4095
    Definition: libwebsockets.h:1431
    struct lws ** pwsi
    Definition: libwebsockets.h:2018
    Definition: libwebsockets.h:778
    @@ -118,7 +118,7 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    Definition: libwebsockets.h:579
    Definition: libwebsockets.h:1387
    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:4097
    +
    time_t email_connect_started
    Definition: libwebsockets.h:4111
    lws_close_status
    Definition: libwebsockets.h:550
    LWS_VISIBLE LWS_EXTERN int lws_callback_all_protocol(struct lws_context *context, const struct lws_protocols *protocol, int reason)
    Definition: libwebsockets.h:590
    @@ -129,11 +129,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:1901
    Definition: libwebsockets.h:2779
    -
    Definition: libwebsockets.h:4055
    +
    Definition: libwebsockets.h:4069
    const char * username
    Definition: libwebsockets.h:1462
    LWS_VISIBLE LWS_EXTERN struct lws * lws_client_connect_via_info(struct lws_client_connect_info *ccinfo)
    const char * protocol
    Definition: libwebsockets.h:1931
    -
    struct lws ** stdwsi
    Definition: libwebsockets.h:3846
    +
    struct lws ** stdwsi
    Definition: libwebsockets.h:3860
    LWS_VISIBLE LWS_EXTERN int lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len)
    Definition: libwebsockets.h:865
    LWS_VISIBLE LWS_EXTERN const char * lws_get_mimetype(const char *file, const struct lws_http_mount *m)
    @@ -168,7 +168,7 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    Definition: libwebsockets.h:1439
    int ietf_version_or_minus_one
    Definition: libwebsockets.h:1998
    LWS_VISIBLE LWS_EXTERN int lws_callback_all_protocol_vhost(struct lws_vhost *vh, const struct lws_protocols *protocol, int reason)
    -
    Definition: libwebsockets.h:4048
    +
    Definition: libwebsockets.h:4062
    Definition: libwebsockets.h:1897
    LWS_VISIBLE LWS_EXTERN int lws_callback_on_writable(struct lws *wsi)
    const char *const * vars
    Definition: libwebsockets.h:2403
    @@ -200,13 +200,13 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    Definition: libwebsockets.h:716
    Definition: libwebsockets.h:903
    LWS_VISIBLE LWS_EXTERN int lws_service_tsi(struct lws_context *context, int timeout_ms, int tsi)
    -
    unsigned char * data
    Definition: libwebsockets.h:3848
    +
    unsigned char * data
    Definition: libwebsockets.h:3862
    const struct lws_protocol_vhost_options * extra_mimetypes
    Definition: libwebsockets.h:1938
    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:709
    LWS_VISIBLE LWS_EXTERN const char * lws_urlencode(char *escaped, const char *string, int len)
    Definition: libwebsockets.h:790
    -
    uv_loop_t * loop
    Definition: libwebsockets.h:4063
    +
    uv_loop_t * loop
    Definition: libwebsockets.h:4077
    Definition: libwebsockets.h:888
    Definition: libwebsockets.h:72
    Definition: libwebsockets.h:3157
    @@ -234,7 +234,7 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    unsigned char origin_protocol
    Definition: libwebsockets.h:1954
    const char * log_filepath
    Definition: libwebsockets.h:1669
    Definition: libwebsockets.h:765
    -
    unsigned int max_content_size
    Definition: libwebsockets.h:4071
    +
    unsigned int max_content_size
    Definition: libwebsockets.h:4085
    int option_index
    Definition: libwebsockets.h:1116
    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)
    @@ -242,7 +242,7 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    const char * uri_replace_to
    Definition: libwebsockets.h:2014
    struct lws * parent_wsi
    Definition: libwebsockets.h:2007
    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:4094
    +
    enum lwsgs_smtp_states estate
    Definition: libwebsockets.h:4108
    LWS_VISIBLE LWS_EXTERN int lws_spa_finalize(struct lws_spa *spa)
    Definition: libwebsockets.h:661
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_get_count_threads(struct lws_context *context)
    @@ -250,14 +250,14 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    char name[64]
    Definition: libwebsockets.h:1407
    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:4098
    +
    char email_buf[256]
    Definition: libwebsockets.h:4112
    LWS_VISIBLE LWS_EXTERN int lws_is_ssl(struct lws *wsi)
    Definition: libwebsockets.h:1496
    -
    int(* close)(struct lws *wsi, lws_filefd_type fd)
    Definition: libwebsockets.h:3915
    +
    int(* close)(struct lws *wsi, lws_filefd_type fd)
    Definition: libwebsockets.h:3929
    uv_lib_t lib
    Definition: libwebsockets.h:1403
    x509_crt certificate
    Definition: libwebsockets.h:235
    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:4049
    +
    Definition: libwebsockets.h:4063
    LWS_VISIBLE LWS_EXTERN int lws_is_cgi(struct lws *wsi)
    int ssl_connection
    Definition: libwebsockets.h:1988
    Definition: libwebsockets.h:1455
    @@ -311,7 +311,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:1001
    Definition: libwebsockets.h:1535
    -
    uv_timer_t timeout_email
    Definition: libwebsockets.h:4093
    +
    uv_timer_t timeout_email
    Definition: libwebsockets.h:4107
    Definition: libwebsockets.h:1505
    short max_http_header_pool
    Definition: libwebsockets.h:1636
    LWS_VISIBLE LWS_EXTERN int lws_chunked_html_process(struct lws_process_html_args *args, struct lws_process_html_state *s)
    @@ -319,9 +319,10 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    x509_crt ca
    Definition: libwebsockets.h:234
    size_t per_session_data_size
    Definition: libwebsockets.h:1286
    Definition: libwebsockets.h:568
    -
    lwsgs_smtp_states
    Definition: libwebsockets.h:4047
    +
    lwsgs_smtp_states
    Definition: libwebsockets.h:4061
    Definition: libwebsockets.h:1517
    Definition: libwebsockets.h:841
    +
    LWS_VISIBLE LWS_EXTERN int lws_snprintf(char *str, size_t size, const char *format,...)
    Definition: libwebsockets.h:727
    Definition: libwebsockets.h:1278
    Definition: libwebsockets.h:573
    @@ -330,7 +331,7 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    const char * email
    Definition: libwebsockets.h:1463
    LWS_VISIBLE LWS_EXTERN int lws_get_random(struct lws_context *context, void *buf, int len)
    Definition: libwebsockets.h:555
    -
    uv_connect_t email_connect_req
    Definition: libwebsockets.h:4095
    +
    uv_connect_t email_connect_req
    Definition: libwebsockets.h:4109
    const char * server_string
    Definition: libwebsockets.h:1674
    Definition: libwebsockets.h:1528
    SHORT events
    Definition: libwebsockets.h:415
    @@ -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:1279
    LWS_VISIBLE LWS_EXTERN int lws_init_vhost_client_ssl(const struct lws_context_creation_info *info, struct lws_vhost *vhost)
    -
    Definition: libwebsockets.h:4053
    +
    Definition: libwebsockets.h:4067
    unsigned int http_proxy_port
    Definition: libwebsockets.h:1602
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_partial_buffered(struct lws *wsi)
    unsigned int timeout_secs
    Definition: libwebsockets.h:1649
    @@ -374,10 +375,10 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    Definition: libwebsockets.h:1114
    Definition: libwebsockets.h:594
    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:3850
    +
    int len
    Definition: libwebsockets.h:3864
    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:1564
    -
    Definition: libwebsockets.h:3909
    +
    Definition: libwebsockets.h:3923
    LWS_VISIBLE LWS_EXTERN void lwsl_hexdump(void *buf, size_t len)
    Definition: libwebsockets.h:1006
    lws_spa_fileupload_states
    Definition: libwebsockets.h:2776
    @@ -387,14 +388,14 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    Definition: libwebsockets.h:552
    Definition: libwebsockets.h:561
    LWS_VISIBLE LWS_EXTERN const char * lws_sql_purify(char *escaped, const char *string, int len)
    -
    uv_tcp_t email_client
    Definition: libwebsockets.h:4096
    +
    uv_tcp_t email_client
    Definition: libwebsockets.h:4110
    LWS_VISIBLE LWS_EXTERN int lws_json_dump_context(const struct lws_context *context, char *buf, int len)
    Definition: libwebsockets.h:413
    Definition: libwebsockets.h:665
    -
    lws_filefd_type(* open)(struct lws *wsi, const char *filename, unsigned long *filelen, int flags)
    Definition: libwebsockets.h:3910
    +
    lws_filefd_type(* open)(struct lws *wsi, const char *filename, unsigned long *filelen, int flags)
    Definition: libwebsockets.h:3924
    lws_write_protocol
    Definition: libwebsockets.h:3120
    const char * client_offer
    Definition: libwebsockets.h:1191
    -
    int(* read)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)
    Definition: libwebsockets.h:3920
    +
    int(* read)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)
    Definition: libwebsockets.h:3934
    LWS_VISIBLE LWS_EXTERN void lws_cancel_service(struct lws_context *context)
    Definition: libwebsockets.h:2777
    Definition: libwebsockets.h:566
    @@ -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:742
    const char * name
    Definition: libwebsockets.h:1189
    -
    Definition: libwebsockets.h:4052
    +
    Definition: libwebsockets.h:4066
    short revents
    Definition: libwebsockets.h:431
    lws_extension_callback_function * callback
    Definition: libwebsockets.h:1190
    long ssl_options_set
    Definition: libwebsockets.h:1688
    @@ -433,19 +434,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:721
    void * data
    Definition: libwebsockets.h:2402
    -
    char * content
    Definition: libwebsockets.h:4099
    +
    char * content
    Definition: libwebsockets.h:4113
    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:1578
    lws_process_html_state_cb replace
    Definition: libwebsockets.h:2406
    -
    Definition: libwebsockets.h:4060
    +
    Definition: libwebsockets.h:4074
    const char * address
    Definition: libwebsockets.h:1984
    -
    unsigned long(* seek_cur)(struct lws *wsi, lws_filefd_type fd, long offset_from_cur_pos)
    Definition: libwebsockets.h:3917
    +
    unsigned long(* seek_cur)(struct lws *wsi, lws_filefd_type fd, long offset_from_cur_pos)
    Definition: libwebsockets.h:3931
    void * user
    Definition: libwebsockets.h:1307
    int events
    Definition: libwebsockets.h:529
    -
    int(* on_get_body)(struct lws_email *email, char *buf, int len)
    Definition: libwebsockets.h:4086
    +
    int(* on_get_body)(struct lws_email *email, char *buf, int len)
    Definition: libwebsockets.h:4100
    Definition: libwebsockets.h:1915
    void * user
    Definition: libwebsockets.h:1610
    -
    Definition: libwebsockets.h:4056
    +
    Definition: libwebsockets.h:4070
    Definition: libwebsockets.h:3143
    char * token
    Definition: libwebsockets.h:2459
    LWS_VISIBLE LWS_EXTERN void * lws_protocol_vh_priv_get(struct lws_vhost *vhost, const struct lws_protocols *prot)
    @@ -468,11 +469,11 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    LWS_VISIBLE LWS_EXTERN void lws_cancel_service_pt(struct lws *wsi)
    Definition: libwebsockets.h:1530
    Definition: libwebsockets.h:602
    -
    Definition: libwebsockets.h:4051
    +
    Definition: libwebsockets.h:4065
    unsigned int api_magic
    Definition: libwebsockets.h:1388
    Definition: libwebsockets.h:1533
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_send_pipe_choked(struct lws *wsi)
    -
    Definition: libwebsockets.h:4054
    +
    Definition: libwebsockets.h:4068
    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:2798
    diff --git a/doc/html/navtreedata.js b/doc/html/navtreedata.js index 5fcaba46..e91b071f 100644 --- a/doc/html/navtreedata.js +++ b/doc/html/navtreedata.js @@ -133,9 +133,9 @@ var NAVTREEINDEX = [ "annotated.html", "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aa0158b4e85420811e6b0f1378c6ded0f", -"group__sha.html", -"libwebsockets_8h.html#a17f5fc891b31d2920bd18b0d66d6cb25", -"structlws__plat__file__ops.html#a01f483807a9862736b17ba9ed5110c40" +"group__service.html#gaf95bd0c663d6516a0c80047d9b1167a8", +"libwebsockets_8h.html", +"structlws__http__mount.html#ae90d1efe7178199fad39de2926902ee4" ]; var SYNCONMSG = 'click to disable panel synchronisation'; diff --git a/doc/html/navtreeindex0.js b/doc/html/navtreeindex0.js index 6b34d181..54b7b48f 100644 --- a/doc/html/navtreeindex0.js +++ b/doc/html/navtreeindex0.js @@ -48,7 +48,7 @@ var NAVTREEINDEX0 = "group__HTTP-headers-create.html#gaf74adb761b22566ad70004882712dce1":[9,6,3,1], "group__HTTP-headers-create.html#gaf74adb761b22566ad70004882712dce1":[11,0,0,0,46], "group__HTTP-headers-read.html":[9,6,4], -"group__HTTP-headers-read.html#ga2c0597b2ef1d2cee35736c338bcbd17b":[11,0,0,0,152], +"group__HTTP-headers-read.html#ga2c0597b2ef1d2cee35736c338bcbd17b":[11,0,0,0,153], "group__HTTP-headers-read.html#ga2c0597b2ef1d2cee35736c338bcbd17b":[9,6,4,7], "group__HTTP-headers-read.html#ga594f3d0ece5b09c2ccf9f98ea533bb4e":[9,6,4,5], "group__HTTP-headers-read.html#ga594f3d0ece5b09c2ccf9f98ea533bb4e":[11,0,0,0,106], @@ -156,7 +156,7 @@ var NAVTREEINDEX0 = "group__Protocols-and-Plugins.html":[9,10], "group__Protocols-and-Plugins.html#ga106b37ae9c247e84d191ab09441adc43":[9,10,4], "group__Protocols-and-Plugins.html#ga106b37ae9c247e84d191ab09441adc43":[11,0,0,0,86], -"group__Protocols-and-Plugins.html#ga25754726d97c5f519d313e691a9fe29d":[11,0,0,0,160], +"group__Protocols-and-Plugins.html#ga25754726d97c5f519d313e691a9fe29d":[11,0,0,0,161], "group__Protocols-and-Plugins.html#ga25754726d97c5f519d313e691a9fe29d":[9,10,9], "group__Protocols-and-Plugins.html#ga40994491e1567f91f579d2b444775266":[11,0,0,0,13], "group__Protocols-and-Plugins.html#ga72ad550786ca7976463589d347e62112":[9,10,5], @@ -208,26 +208,26 @@ var NAVTREEINDEX0 = "group__context-and-vhost.html#ga06e77ce2916f8bc9826ef8d9d68e3932":[11,0,0,0,103], "group__context-and-vhost.html#ga0c54c667ccd9b8b3dddcd123ca72f87c":[9,4,7], "group__context-and-vhost.html#ga0c54c667ccd9b8b3dddcd123ca72f87c":[11,0,0,0,75], -"group__context-and-vhost.html#ga341064721add2618ae1b29717493a212":[11,0,0,0,167], +"group__context-and-vhost.html#ga341064721add2618ae1b29717493a212":[11,0,0,0,168], "group__context-and-vhost.html#ga341064721add2618ae1b29717493a212":[9,4,14], "group__context-and-vhost.html#ga41c2d763f78cc248df3b9f8645dbd2a5":[11,0,0,0,26], "group__context-and-vhost.html#ga41c2d763f78cc248df3b9f8645dbd2a5":[9,4,3], "group__context-and-vhost.html#ga7e9d5405547a457d86e0b4f0ae2bb1c4":[11,0,0,0,142], "group__context-and-vhost.html#ga7e9d5405547a457d86e0b4f0ae2bb1c4":[9,4,11], -"group__context-and-vhost.html#ga8db03e19a372e34ac25cf21af894a02c":[11,0,0,0,159], +"group__context-and-vhost.html#ga8db03e19a372e34ac25cf21af894a02c":[11,0,0,0,160], "group__context-and-vhost.html#ga8db03e19a372e34ac25cf21af894a02c":[9,4,12], "group__context-and-vhost.html#ga8ee0314028755f1ddfa9428e09b4fddb":[11,0,0,0,72], "group__context-and-vhost.html#ga8ee0314028755f1ddfa9428e09b4fddb":[9,4,4], "group__context-and-vhost.html#ga94e6cc2223c4eec316b13bcebc3628b6":[9,4,10], "group__context-and-vhost.html#ga94e6cc2223c4eec316b13bcebc3628b6":[11,0,0,0,117], -"group__context-and-vhost.html#ga98d88c9080fd89c37114363a6474ea73":[11,0,0,0,166], +"group__context-and-vhost.html#ga98d88c9080fd89c37114363a6474ea73":[11,0,0,0,167], "group__context-and-vhost.html#ga98d88c9080fd89c37114363a6474ea73":[9,4,13], "group__context-and-vhost.html#gae2134657cdd2ea7a59e13ad314e4c50d":[9,4,9], "group__context-and-vhost.html#gae2134657cdd2ea7a59e13ad314e4c50d":[11,0,0,0,116], "group__context-and-vhost.html#gaeb12f934bfd178bd2132a9e73fc641da":[11,0,0,0,73], "group__context-and-vhost.html#gaeb12f934bfd178bd2132a9e73fc641da":[9,4,5], -"group__context-and-vhost.html#gaf2fff58562caab7510c41eeac85a8648":[11,0,0,0,74], "group__context-and-vhost.html#gaf2fff58562caab7510c41eeac85a8648":[9,4,6], +"group__context-and-vhost.html#gaf2fff58562caab7510c41eeac85a8648":[11,0,0,0,74], "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a1b2f8bde0f62adc7ebe81b2043f34c0c":[11,0,0,0,26,8], "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a1b2f8bde0f62adc7ebe81b2043f34c0c":[9,4,3,8], "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a1cc4562d05cba52a6dfa0697a65ade0d":[11,0,0,0,26,2], diff --git a/doc/html/navtreeindex1.js b/doc/html/navtreeindex1.js index 88adb979..dbe4fd76 100644 --- a/doc/html/navtreeindex1.js +++ b/doc/html/navtreeindex1.js @@ -68,22 +68,22 @@ var NAVTREEINDEX1 = "group__fops.html#gac08aef64c4c34647ed699b24759b6b0e":[9,20,1], "group__fops.html#gac08aef64c4c34647ed699b24759b6b0e":[11,0,0,0,91], "group__form-parsing.html":[9,6,0], -"group__form-parsing.html#ga162f86762173a2bc8c28497941d74815":[11,0,0,0,145], +"group__form-parsing.html#ga162f86762173a2bc8c28497941d74815":[11,0,0,0,146], "group__form-parsing.html#ga162f86762173a2bc8c28497941d74815":[9,6,0,2], -"group__form-parsing.html#ga2da476217166da02704b90d3a8d4f3cd":[11,0,0,0,149], +"group__form-parsing.html#ga2da476217166da02704b90d3a8d4f3cd":[11,0,0,0,150], "group__form-parsing.html#ga2da476217166da02704b90d3a8d4f3cd":[9,6,0,6], -"group__form-parsing.html#ga3fbe378632f85ec9a14cc2c1687bf05f":[11,0,0,0,148], +"group__form-parsing.html#ga3fbe378632f85ec9a14cc2c1687bf05f":[11,0,0,0,149], "group__form-parsing.html#ga3fbe378632f85ec9a14cc2c1687bf05f":[9,6,0,5], "group__form-parsing.html#ga41a74a822771d3dce89751aa3bce28ae":[9,6,0,1], "group__form-parsing.html#ga41a74a822771d3dce89751aa3bce28ae":[11,0,0,0,33], "group__form-parsing.html#ga5a70527c0861c2ffa3d29333a6aa7f8e":[9,6,0,0], "group__form-parsing.html#ga5a70527c0861c2ffa3d29333a6aa7f8e":[11,0,0,0,16], -"group__form-parsing.html#ga83835bf250ee3d4a60f36a182f2b8d24":[11,0,0,0,147], +"group__form-parsing.html#ga83835bf250ee3d4a60f36a182f2b8d24":[11,0,0,0,148], "group__form-parsing.html#ga83835bf250ee3d4a60f36a182f2b8d24":[9,6,0,4], -"group__form-parsing.html#ga9ad9ebf5ea1a7108415ed7e04cb231d2":[11,0,0,0,150], +"group__form-parsing.html#ga9ad9ebf5ea1a7108415ed7e04cb231d2":[11,0,0,0,151], "group__form-parsing.html#ga9ad9ebf5ea1a7108415ed7e04cb231d2":[9,6,0,7], -"group__form-parsing.html#gaaa482f07dad3f04b391cccf0a814e13b":[11,0,0,0,146], "group__form-parsing.html#gaaa482f07dad3f04b391cccf0a814e13b":[9,6,0,3], +"group__form-parsing.html#gaaa482f07dad3f04b391cccf0a814e13b":[11,0,0,0,147], "group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea2d25de44865bd44e5a3903a2bab9ca83":[9,6,0,1,2], "group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea2d25de44865bd44e5a3903a2bab9ca83":[11,0,0,0,33,2], "group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea6ce2a55a4c3695cdb640c893d95bd3a7":[9,6,0,1,1], @@ -158,12 +158,12 @@ var NAVTREEINDEX1 = "group__log.html#ga14542b84d2c76efa7814124bb10f9c5f":[11,0,0,0,31], "group__log.html#ga244647f9e1bf0097ccdde66d74f41e26":[11,0,0,0,141], "group__log.html#ga244647f9e1bf0097ccdde66d74f41e26":[9,7,0], -"group__log.html#ga42e39775c6b69b7251bdbf5a2cdd5dcd":[11,0,0,0,165], +"group__log.html#ga42e39775c6b69b7251bdbf5a2cdd5dcd":[11,0,0,0,166], "group__log.html#ga42e39775c6b69b7251bdbf5a2cdd5dcd":[9,7,3], "group__log.html#ga74eb146969f0595e12ea835851b4588e":[11,0,0,0,40], -"group__log.html#ga898b1f03872ad019f507d4e35bbefa90":[11,0,0,0,164], +"group__log.html#ga898b1f03872ad019f507d4e35bbefa90":[11,0,0,0,165], "group__log.html#ga898b1f03872ad019f507d4e35bbefa90":[9,7,2], -"group__log.html#gab7c0fc936cc9f1eb58e2bb234c15147c":[11,0,0,0,163], +"group__log.html#gab7c0fc936cc9f1eb58e2bb234c15147c":[11,0,0,0,164], "group__log.html#gab7c0fc936cc9f1eb58e2bb234c15147c":[9,7,1], "group__log.html#gaf5f07837692b2f231a79da8a058288aa":[11,0,0,0,39], "group__log.html#gga14542b84d2c76efa7814124bb10f9c5fa083a44e71966a0e768426e477e1bc358":[11,0,0,0,31,8], @@ -181,8 +181,8 @@ var NAVTREEINDEX1 = "group__misc.html#ga0af4f7d2dd375aeedcfa7eb0e1101c4b":[9,8,2], "group__misc.html#ga0af4f7d2dd375aeedcfa7eb0e1101c4b":[11,0,0,0,89], "group__misc.html#ga0e705d498e8c8500649a26ba30a1e106":[11,0,0,0,127], -"group__misc.html#ga1ec0d9faac5d3a5824d765c287c043aa":[9,8,8], "group__misc.html#ga1ec0d9faac5d3a5824d765c287c043aa":[11,0,0,0,122], +"group__misc.html#ga1ec0d9faac5d3a5824d765c287c043aa":[9,8,8], "group__misc.html#ga33bf2635033710b25f931b57ed663e1e":[9,8,7], "group__misc.html#ga33bf2635033710b25f931b57ed663e1e":[11,0,0,0,121], "group__misc.html#ga58f906c6be0ca80efd813f694569dd4a":[9,8,6], @@ -191,8 +191,10 @@ var NAVTREEINDEX1 = "group__misc.html#ga629f48268fd1856b54b11172991b97d9":[11,0,0,0,90], "group__misc.html#ga8930fe36a3f3eefe4a6a4fd499d8e899":[9,8,5], "group__misc.html#ga8930fe36a3f3eefe4a6a4fd499d8e899":[11,0,0,0,94], -"group__misc.html#gaa194584fff9698f3b280658f770ccd0f":[11,0,0,0,162], -"group__misc.html#gaa194584fff9698f3b280658f770ccd0f":[9,8,10], +"group__misc.html#ga9f37d0e357de2ab4170723fcdb665d21":[11,0,0,0,145], +"group__misc.html#ga9f37d0e357de2ab4170723fcdb665d21":[9,8,10], +"group__misc.html#gaa194584fff9698f3b280658f770ccd0f":[11,0,0,0,163], +"group__misc.html#gaa194584fff9698f3b280658f770ccd0f":[9,8,11], "group__misc.html#gab321ed812f46f6dc7ef9e3ca6f00cf1b":[11,0,0,0,139], "group__misc.html#gab321ed812f46f6dc7ef9e3ca6f00cf1b":[9,8,9], "group__misc.html#gac6abfc0b2bd5b2f09281a4432bb2f5f0":[9,8,4], @@ -211,14 +213,14 @@ var NAVTREEINDEX1 = "group__net.html#gad0df22db2be9fc65a667a1e83f9a92a4":[9,9,0], "group__net.html#gad0df22db2be9fc65a667a1e83f9a92a4":[11,0,0,0,62], "group__pur.html":[9,12], -"group__pur.html#ga9cc82f06e5ae7e71458626d7a39a5865":[11,0,0,0,151], +"group__pur.html#ga9cc82f06e5ae7e71458626d7a39a5865":[11,0,0,0,152], "group__pur.html#ga9cc82f06e5ae7e71458626d7a39a5865":[9,12,1], "group__pur.html#gab15187efcfa256b7c928562c182b92a3":[9,12,0], "group__pur.html#gab15187efcfa256b7c928562c182b92a3":[11,0,0,0,118], "group__sending-data.html":[9,13], "group__sending-data.html#ga98b099cf8c1c7e38ad78501f270e193d":[9,13,0], "group__sending-data.html#ga98b099cf8c1c7e38ad78501f270e193d":[11,0,0,0,35], -"group__sending-data.html#gafd5fdd285a0e25ba7e3e1051deec1001":[11,0,0,0,161], +"group__sending-data.html#gafd5fdd285a0e25ba7e3e1051deec1001":[11,0,0,0,162], "group__sending-data.html#gafd5fdd285a0e25ba7e3e1051deec1001":[9,13,1], "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da10047eb05b5e1c298151dc47a5b44826":[9,13,0,2], "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da10047eb05b5e1c298151dc47a5b44826":[11,0,0,0,35,2], @@ -230,8 +232,8 @@ var NAVTREEINDEX1 = "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da80e8f169fda236c56bfb795ed62903db":[9,13,0,0], "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da80e8f169fda236c56bfb795ed62903db":[11,0,0,0,35,0], "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dab7e7a62cf6f456c09c21dff24dad9039":[11,0,0,0,35,5], -"group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e":[11,0,0,0,35,3], "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e":[9,13,0,3], +"group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e":[11,0,0,0,35,3], "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dae7d8a025a65524652fe9e24c2654c935":[11,0,0,0,35,6], "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193daf6486c0dba50c44198100717721d9ab2":[9,13,0,1], "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193daf6486c0dba50c44198100717721d9ab2":[11,0,0,0,35,1], @@ -247,7 +249,5 @@ var NAVTREEINDEX1 = "group__service.html#gad82efa5466d14a9f05aa06416375b28d":[11,0,0,0,136], "group__service.html#gad82efa5466d14a9f05aa06416375b28d":[9,0,3], "group__service.html#gaebf426eda371ba23642fc11d8e0ace6b":[11,0,0,0,137], -"group__service.html#gaebf426eda371ba23642fc11d8e0ace6b":[9,0,4], -"group__service.html#gaf95bd0c663d6516a0c80047d9b1167a8":[11,0,0,0,135], -"group__service.html#gaf95bd0c663d6516a0c80047d9b1167a8":[9,0,2] +"group__service.html#gaebf426eda371ba23642fc11d8e0ace6b":[9,0,4] }; diff --git a/doc/html/navtreeindex2.js b/doc/html/navtreeindex2.js index 9a79adc4..696b2d6a 100644 --- a/doc/html/navtreeindex2.js +++ b/doc/html/navtreeindex2.js @@ -1,8 +1,10 @@ var NAVTREEINDEX2 = { +"group__service.html#gaf95bd0c663d6516a0c80047d9b1167a8":[11,0,0,0,135], +"group__service.html#gaf95bd0c663d6516a0c80047d9b1167a8":[9,0,2], "group__sha.html":[9,11], -"group__sha.html#ga66316e6a5a0644a09d5a10e919dfdd8d":[11,0,0,0,51], "group__sha.html#ga66316e6a5a0644a09d5a10e919dfdd8d":[9,11,0], +"group__sha.html#ga66316e6a5a0644a09d5a10e919dfdd8d":[11,0,0,0,51], "group__sha.html#ga7b09ab74646266f0b555103b3bb8dfe5":[11,0,0,0,144], "group__sha.html#ga7b09ab74646266f0b555103b3bb8dfe5":[9,11,2], "group__sha.html#gaf39765e4a3b413efb65e4698b2ec3575":[9,11,1], @@ -10,8 +12,8 @@ var NAVTREEINDEX2 = "group__smtp.html":[9,14], "group__smtp.html#ga116be79bf44f9dc2a97f46e051fe4dc0":[9,14,1], "group__smtp.html#ga116be79bf44f9dc2a97f46e051fe4dc0":[11,0,0,0,37], -"group__smtp.html#ga25298a5afc1074e13b2d5711a86432b2":[9,14,3], "group__smtp.html#ga25298a5afc1074e13b2d5711a86432b2":[11,0,0,0,78], +"group__smtp.html#ga25298a5afc1074e13b2d5711a86432b2":[9,14,3], "group__smtp.html#ga5e535e346d92a9daf00be33abf79d4eb":[11,0,0,0,77], "group__smtp.html#ga5e535e346d92a9daf00be33abf79d4eb":[9,14,2], "group__smtp.html#ga77fc9b56a1bb39484844981ec375fc29":[9,14,4], @@ -28,10 +30,10 @@ var NAVTREEINDEX2 = "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14":[9,14,1,6], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab":[9,14,1,4], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab":[11,0,0,0,37,4], -"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83":[9,14,1,5], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83":[11,0,0,0,37,5], -"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d":[11,0,0,0,37,2], +"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83":[9,14,1,5], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d":[9,14,1,2], +"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d":[11,0,0,0,37,2], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933":[9,14,1,1], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933":[11,0,0,0,37,1], "group__sock-adopt.html":[9,15], @@ -63,9 +65,9 @@ var NAVTREEINDEX2 = "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87ad7ebebb506afd30c48e1e5e3a578cd30":[11,0,0,0,38,1], "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87ae8b3de955cec5da5ea52fe040f914501":[11,0,0,0,38,10], "group__urlendec.html":[9,6,5], -"group__urlendec.html#gaa373a9c16acdd96c395af61ab915ece3":[11,0,0,0,153], +"group__urlendec.html#gaa373a9c16acdd96c395af61ab915ece3":[11,0,0,0,154], "group__urlendec.html#gaa373a9c16acdd96c395af61ab915ece3":[9,6,5,0], -"group__urlendec.html#gabc2888476e50e001c875c1a8abf455b7":[11,0,0,0,154], +"group__urlendec.html#gabc2888476e50e001c875c1a8abf455b7":[11,0,0,0,155], "group__urlendec.html#gabc2888476e50e001c875c1a8abf455b7":[9,6,5,1], "group__usercb.html":[9,16], "group__usercb.html#gad4fcb82e68d60ffacca61a3f783a0a2f":[11,0,0,0,8], @@ -89,8 +91,8 @@ var NAVTREEINDEX2 = "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a23b90b5e5146e760bc3123ae1fd2a6e5":[11,0,0,0,22,40], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a24d39bf1cfc0bad9d92da9ac1717e439":[9,16,1,0], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a24d39bf1cfc0bad9d92da9ac1717e439":[11,0,0,0,22,0], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2db02fc6e1c17ab62b52109d1aa9d738":[9,16,1,7], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2db02fc6e1c17ab62b52109d1aa9d738":[11,0,0,0,22,7], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2db02fc6e1c17ab62b52109d1aa9d738":[9,16,1,7], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2fce9a8608220f32abbf1422a5498804":[11,0,0,0,22,14], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2fce9a8608220f32abbf1422a5498804":[9,16,1,14], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a390da3639296660a78cc1a5dcb19037e":[11,0,0,0,22,25], @@ -110,8 +112,8 @@ var NAVTREEINDEX2 = "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7e12418eec9bce85735e6460176ab604":[11,0,0,0,22,3], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7ec8e2e9557ee02a4fc9f7dec7e2babc":[11,0,0,0,22,11], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7ec8e2e9557ee02a4fc9f7dec7e2babc":[9,16,1,11], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a838b18d255c1b94a533287ba302a2eba":[9,16,1,5], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a838b18d255c1b94a533287ba302a2eba":[11,0,0,0,22,5], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a838b18d255c1b94a533287ba302a2eba":[9,16,1,5], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8909732521d379179003d97ab7a05428":[11,0,0,0,22,35], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8909732521d379179003d97ab7a05428":[9,16,1,35], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a89862929a72bff65257ca1d51a0fce4d":[11,0,0,0,22,52], @@ -123,8 +125,8 @@ var NAVTREEINDEX2 = "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a982579753e70e59a9ea13ce628ac891a":[9,16,1,41], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa46f705dcf97502e95627ffde614f98b":[11,0,0,0,22,37], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa46f705dcf97502e95627ffde614f98b":[9,16,1,37], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa536e574a642ff3ab9e12bff7ba2c6a2":[9,16,1,2], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa536e574a642ff3ab9e12bff7ba2c6a2":[11,0,0,0,22,2], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa536e574a642ff3ab9e12bff7ba2c6a2":[9,16,1,2], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa5cc921b7697743017a533822a3d556a":[11,0,0,0,22,56], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa5cc921b7697743017a533822a3d556a":[9,16,1,39], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa627548e1296e654fcfab463ec3c9587":[11,0,0,0,22,15], @@ -157,16 +159,16 @@ var NAVTREEINDEX2 = "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ad8c6207b0c4e732f3d507f0fb79370e8":[11,0,0,0,22,1], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7adfb41c92e2522712207ef7f2462b5e34":[11,0,0,0,22,31], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7adfb41c92e2522712207ef7f2462b5e34":[9,16,1,31], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae4986291b7a810fe290851d73bebeb1c":[11,0,0,0,22,21], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae4986291b7a810fe290851d73bebeb1c":[9,16,1,21], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae4986291b7a810fe290851d73bebeb1c":[11,0,0,0,22,21], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae5ad65d779b7eab32ab67ceff91a3bac":[11,0,0,0,22,23], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae5ad65d779b7eab32ab67ceff91a3bac":[9,16,1,23], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae8d1de0bb56e03aa58cb4d44b18edd2e":[11,0,0,0,22,12], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae8d1de0bb56e03aa58cb4d44b18edd2e":[9,16,1,12], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae9734e1d7af2abf291665ce9e4a728d3":[11,0,0,0,22,19], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae9734e1d7af2abf291665ce9e4a728d3":[9,16,1,19], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aeb0cec65ec82a713cd01e9ca9aeeb5e6":[11,0,0,0,22,57], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aeb0cec65ec82a713cd01e9ca9aeeb5e6":[9,16,1,40], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aeb0cec65ec82a713cd01e9ca9aeeb5e6":[11,0,0,0,22,57], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7af6cf80e57aae8ba0a57a5c456b1fe026":[11,0,0,0,22,55], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afc4b2f72cc9e424a750b506ce0cc4310":[11,0,0,0,22,51], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afd8fd77a1cc9405fcb4f26915d7f2d01":[11,0,0,0,22,29], @@ -176,15 +178,15 @@ var NAVTREEINDEX2 = "group__uv.html":[9,22], "group__uv.html#ga097c89497824d4de225a85a00661fc89":[11,0,0,0,119], "group__uv.html#ga3c75cd6ec3f80fc0a0c8ead4c4e71a15":[11,0,0,0,120], -"group__uv.html#ga99099e045993383f251a8026e1e40414":[11,0,0,0,158], -"group__uv.html#gaa5e3593c94f91910d9d928dfa0c18f6c":[11,0,0,0,155], -"group__uv.html#gac5f60dba13a45e5d554b4fb7df7b9610":[11,0,0,0,157], -"group__uv.html#gad85ce3bfc53ff754988d36bf5de39e21":[11,0,0,0,156], +"group__uv.html#ga99099e045993383f251a8026e1e40414":[11,0,0,0,159], +"group__uv.html#gaa5e3593c94f91910d9d928dfa0c18f6c":[11,0,0,0,156], +"group__uv.html#gac5f60dba13a45e5d554b4fb7df7b9610":[11,0,0,0,158], +"group__uv.html#gad85ce3bfc53ff754988d36bf5de39e21":[11,0,0,0,157], "group__vhost-mounts.html":[9,4,0], "group__vhost-mounts.html#ga31eca18e50cb4357480f2fcad36ff437":[9,4,0,2], "group__vhost-mounts.html#ga31eca18e50cb4357480f2fcad36ff437":[11,0,0,0,32], -"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69":[9,4,0,2,3], "group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69":[11,0,0,0,32,3], +"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69":[9,4,0,2,3], "group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0":[9,4,0,2,0], "group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0":[11,0,0,0,32,0], "group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2":[9,4,0,2,2], @@ -204,8 +206,8 @@ var NAVTREEINDEX2 = "group__wsclose.html#gae399c571df32ba532c0ca67da9284985":[9,17,0], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a1bb501d212fa4d57053db681b1dfab98":[11,0,0,0,25,3], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a1bb501d212fa4d57053db681b1dfab98":[9,17,0,2], -"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8":[11,0,0,0,25,10], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8":[9,17,0,9], +"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8":[11,0,0,0,25,10], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a32c38edab10d1379febac0c479ab2e9c":[11,0,0,0,25,14], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a3ffa38d5081b85fb739e02a747ccf2c4":[11,0,0,0,25,1], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a3ffa38d5081b85fb739e02a747ccf2c4":[9,17,0,0], @@ -215,8 +217,8 @@ var NAVTREEINDEX2 = "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a4b8a3b7ce6f731e5248e4b0fb64a5044":[9,17,0,5], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a68b3d34bebd88547dcfa5cadba0acd6c":[11,0,0,0,25,7], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a68b3d34bebd88547dcfa5cadba0acd6c":[9,17,0,6], -"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050":[11,0,0,0,25,8], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050":[9,17,0,7], +"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050":[11,0,0,0,25,8], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218":[11,0,0,0,25,2], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218":[9,17,0,1], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e":[9,17,0,10], @@ -226,8 +228,8 @@ var NAVTREEINDEX2 = "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad0869604d79e13700ae5d196a431b350":[11,0,0,0,25,12], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad09e68295eabdddcba4e332fbea70ae5":[11,0,0,0,25,9], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad09e68295eabdddcba4e332fbea70ae5":[9,17,0,8], -"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad2b477a91c8445bf34ecd43977f9b390":[9,17,0,12], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad2b477a91c8445bf34ecd43977f9b390":[11,0,0,0,25,13], +"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad2b477a91c8445bf34ecd43977f9b390":[9,17,0,12], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2":[11,0,0,0,25,5], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2":[9,17,0,4], "group__wsstatus.html":[9,18], @@ -239,15 +241,13 @@ var NAVTREEINDEX2 = "group__wsstatus.html#ga2bb3655329b4651cd06f79ee3a764421":[11,0,0,0,132], "group__wsstatus.html#ga3df5045656dfb6b0e63a38de2dca79d2":[9,18,1], "group__wsstatus.html#ga3df5045656dfb6b0e63a38de2dca79d2":[11,0,0,0,100], -"group__wsstatus.html#ga4ad226d5e01024b4046f4a5a37199aa1":[9,18,2], "group__wsstatus.html#ga4ad226d5e01024b4046f4a5a37199aa1":[11,0,0,0,113], -"group__wsstatus.html#gaccd9c59336efad8af0554f79cc5966fd":[9,18,0], +"group__wsstatus.html#ga4ad226d5e01024b4046f4a5a37199aa1":[9,18,2], "group__wsstatus.html#gaccd9c59336efad8af0554f79cc5966fd":[11,0,0,0,87], -"group__wsstatus.html#gaeca4afc94b1f026034f99cbba37e2f85":[9,18,5], +"group__wsstatus.html#gaccd9c59336efad8af0554f79cc5966fd":[9,18,0], "group__wsstatus.html#gaeca4afc94b1f026034f99cbba37e2f85":[11,0,0,0,123], +"group__wsstatus.html#gaeca4afc94b1f026034f99cbba37e2f85":[9,18,5], "hierarchy.html":[10,2], -"index.html":[0], "index.html":[], -"libwebsockets_8h.html":[11,0,0,0], -"libwebsockets_8h.html#a0b056fdcf949a838ff82209b4a627dd9":[11,0,0,0,168] +"index.html":[0] }; diff --git a/doc/html/navtreeindex3.js b/doc/html/navtreeindex3.js index 84cc34d8..acec6db7 100644 --- a/doc/html/navtreeindex3.js +++ b/doc/html/navtreeindex3.js @@ -1,6 +1,8 @@ var NAVTREEINDEX3 = { -"libwebsockets_8h.html#a17f5fc891b31d2920bd18b0d66d6cb25":[11,0,0,0,173], +"libwebsockets_8h.html":[11,0,0,0], +"libwebsockets_8h.html#a0b056fdcf949a838ff82209b4a627dd9":[11,0,0,0,169], +"libwebsockets_8h.html#a17f5fc891b31d2920bd18b0d66d6cb25":[11,0,0,0,174], "libwebsockets_8h.html#a1b12016562c728eb306c7f954c804bef":[11,0,0,0,20], "libwebsockets_8h.html#a2271141d8be8d72b47ba327130b4905f":[11,0,0,0,27], "libwebsockets_8h.html#a2271141d8be8d72b47ba327130b4905fa7741c12fc97574fa73a810fedae2be76":[11,0,0,0,27,1], @@ -21,16 +23,16 @@ var NAVTREEINDEX3 = "libwebsockets_8h.html#a5e627dbf1db48170ef486edbaf268672":[11,0,0,0,130], "libwebsockets_8h.html#a72fe65e83b8bb03f904a1a256c673536":[11,0,0,0,128], "libwebsockets_8h.html#a75e9827318684877deb4189121a8cd2a":[11,0,0,0,43], -"libwebsockets_8h.html#a863bdd5bca33bcbaa424c42fb7b2fc96":[11,0,0,0,172], -"libwebsockets_8h.html#a9032a3062641d334161c29adcc4fa15d":[11,0,0,0,170], +"libwebsockets_8h.html#a863bdd5bca33bcbaa424c42fb7b2fc96":[11,0,0,0,173], +"libwebsockets_8h.html#a9032a3062641d334161c29adcc4fa15d":[11,0,0,0,171], "libwebsockets_8h.html#a9b1bfc6f34319188d2aa40500d825bab":[11,0,0,0,42], "libwebsockets_8h.html#a9b878fb94f4596226c982eef4f42a607":[11,0,0,0,44], -"libwebsockets_8h.html#a9f2a8506fd963db95a5103823c60fb0a":[11,0,0,0,171], +"libwebsockets_8h.html#a9f2a8506fd963db95a5103823c60fb0a":[11,0,0,0,172], "libwebsockets_8h.html#abddb8d337fb2692586d892b494739003":[11,0,0,0,18], "libwebsockets_8h.html#ac3abb8b7e6d29a0292797230e4031681":[11,0,0,0,17], "libwebsockets_8h.html#adedbc79528b71a5c7f27cde87100c9aa":[11,0,0,0,15], "libwebsockets_8h.html#adf4abd01e8c43f07c6e498ce13590c3e":[11,0,0,0,131], -"libwebsockets_8h.html#aefb2f20fe5bb29d79701a399838ef4ce":[11,0,0,0,169], +"libwebsockets_8h.html#aefb2f20fe5bb29d79701a399838ef4ce":[11,0,0,0,170], "libwebsockets_8h.html#af52923473c59e643a974d65e12290831":[11,0,0,0,63], "libwebsockets_8h.html#aff42d53861afdc1a6edfb999ba688ecb":[11,0,0,0,11], "libwebsockets_8h_source.html":[11,0,0,0], @@ -247,7 +249,5 @@ var NAVTREEINDEX3 = "structlws__http__mount.html#aabec1a326780aafe11b977000983be0c":[9,4,0,1,1], "structlws__http__mount.html#ac8489b60b8f969eb19c9abbdeac90743":[9,4,0,1,12], "structlws__http__mount.html#ae137203040c6153694bd88a708da5395":[9,4,0,1,4], -"structlws__http__mount.html#ae7b5c0f4c5408061e6ea3a8d281f45af":[9,4,0,1,6], -"structlws__http__mount.html#ae90d1efe7178199fad39de2926902ee4":[9,4,0,1,7], -"structlws__plat__file__ops.html":[9,20,0] +"structlws__http__mount.html#ae7b5c0f4c5408061e6ea3a8d281f45af":[9,4,0,1,6] }; diff --git a/doc/html/navtreeindex4.js b/doc/html/navtreeindex4.js index 7524df53..956b252d 100644 --- a/doc/html/navtreeindex4.js +++ b/doc/html/navtreeindex4.js @@ -1,5 +1,7 @@ var NAVTREEINDEX4 = { +"structlws__http__mount.html#ae90d1efe7178199fad39de2926902ee4":[9,4,0,1,7], +"structlws__plat__file__ops.html":[9,20,0], "structlws__plat__file__ops.html#a01f483807a9862736b17ba9ed5110c40":[9,20,0,2], "structlws__plat__file__ops.html#a034ec96f2fbaf52b4aa3e82d20795f7b":[9,20,0,0], "structlws__plat__file__ops.html#a1fae8330ee94649a3551e31a30809793":[9,20,0,4], @@ -42,16 +44,16 @@ var NAVTREEINDEX4 = "structlws__process__html__state.html#adcafd17704775b4bbeea9561fb340968":[9,6,1,1,0], "structlws__process__html__state.html#af0732884ef891e24fe5fa237ebaa21a3":[9,6,1,1,4], "structlws__process__html__state.html#af21119890fdfebe28fb5c4dabfc1bdf5":[9,6,1,1,1], -"structlws__protocol__vhost__options.html":[9,4,2], "structlws__protocol__vhost__options.html":[9,4,0,0], -"structlws__protocol__vhost__options.html#a0640a92513c70ee6b9b295a9ad1658e7":[9,4,0,0,3], +"structlws__protocol__vhost__options.html":[9,4,2], "structlws__protocol__vhost__options.html#a0640a92513c70ee6b9b295a9ad1658e7":[9,4,2,3], -"structlws__protocol__vhost__options.html#abc714ddb4171756fc8196e9823a1e21c":[9,4,2,1], +"structlws__protocol__vhost__options.html#a0640a92513c70ee6b9b295a9ad1658e7":[9,4,0,0,3], "structlws__protocol__vhost__options.html#abc714ddb4171756fc8196e9823a1e21c":[9,4,0,0,1], -"structlws__protocol__vhost__options.html#acf9db77f8eb64cd4e314be9b43d8a8b9":[9,4,2,0], +"structlws__protocol__vhost__options.html#abc714ddb4171756fc8196e9823a1e21c":[9,4,2,1], "structlws__protocol__vhost__options.html#acf9db77f8eb64cd4e314be9b43d8a8b9":[9,4,0,0,0], -"structlws__protocol__vhost__options.html#afd99fbc90be51ea2465b550c2ec47822":[9,4,0,0,2], +"structlws__protocol__vhost__options.html#acf9db77f8eb64cd4e314be9b43d8a8b9":[9,4,2,0], "structlws__protocol__vhost__options.html#afd99fbc90be51ea2465b550c2ec47822":[9,4,2,2], +"structlws__protocol__vhost__options.html#afd99fbc90be51ea2465b550c2ec47822":[9,4,0,0,2], "structlws__protocols.html":[9,10,1], "structlws__protocols.html#a0d1d4996d81b2f5e125bcec981e461c5":[9,10,1,4], "structlws__protocols.html#a0e63edb457a613c3fa4271e0a8f19624":[9,10,1,2], @@ -67,8 +69,8 @@ var NAVTREEINDEX4 = "structlws__session__info.html#afb924864b70f40372920688a5c1c895e":[9,10,0,2,2], "structlws__token__limits.html":[9,6,4,1], "structlws__token__limits.html#a6ec712306cbf8585bce7a56758a3ceff":[9,6,4,1,0], -"structlws__tokens.html":[9,6,6], "structlws__tokens.html":[9,6,4,0], +"structlws__tokens.html":[9,6,6], "structlws__tokens.html#a855b7375d1d58516c0ecd4b60e9a7766":[9,6,6,1], "structlws__tokens.html#a855b7375d1d58516c0ecd4b60e9a7766":[9,6,4,0,1], "structlws__tokens.html#a9f3635412bc71a5cb78e9862b55f10cd":[9,6,6,0], diff --git a/lib/client-handshake.c b/lib/client-handshake.c index 254ccc19..278bb8d5 100644 --- a/lib/client-handshake.c +++ b/lib/client-handshake.c @@ -380,7 +380,7 @@ html_parser_cb(const hubbub_token *token, void *pw) switch (token->type) { case HUBBUB_TOKEN_DOCTYPE: - p += snprintf(p, end - p, "data.doctype.name.len, token->data.doctype.name.ptr, token->data.doctype.force_quirks ? @@ -389,20 +389,20 @@ html_parser_cb(const hubbub_token *token, void *pw) if (token->data.doctype.public_missing) printf("\tpublic: missing\n"); else - p += snprintf(p, end - p, "PUBLIC \"%.*s\"\n", + p += lws_snprintf(p, end - p, "PUBLIC \"%.*s\"\n", (int) token->data.doctype.public_id.len, token->data.doctype.public_id.ptr); if (token->data.doctype.system_missing) printf("\tsystem: missing\n"); else - p += snprintf(p, end - p, " \"%.*s\">\n", + p += lws_snprintf(p, end - p, " \"%.*s\">\n", (int) token->data.doctype.system_id.len, token->data.doctype.system_id.ptr); break; case HUBBUB_TOKEN_START_TAG: - p += snprintf(p, end - p, "<%.*s", (int)token->data.tag.name.len, + p += lws_snprintf(p, end - p, "<%.*s", (int)token->data.tag.name.len, token->data.tag.name.ptr); /* (token->data.tag.self_closing) ? @@ -422,23 +422,23 @@ html_parser_cb(const hubbub_token *token, void *pw) pp += r->from_len; plen -= r->from_len; } - p += snprintf(p, end - p, " %.*s=\"%s/%.*s\"", + p += lws_snprintf(p, end - p, " %.*s=\"%s/%.*s\"", (int) token->data.tag.attributes[i].name.len, token->data.tag.attributes[i].name.ptr, r->to, plen, pp); } else - p += snprintf(p, end - p, " %.*s=\"%.*s\"", + p += lws_snprintf(p, end - p, " %.*s=\"%.*s\"", (int) token->data.tag.attributes[i].name.len, token->data.tag.attributes[i].name.ptr, (int) token->data.tag.attributes[i].value.len, token->data.tag.attributes[i].value.ptr); } - p += snprintf(p, end - p, ">\n"); + p += lws_snprintf(p, end - p, ">\n"); break; case HUBBUB_TOKEN_END_TAG: - p += snprintf(p, end - p, "data.tag.name.len, + p += lws_snprintf(p, end - p, "data.tag.name.len, token->data.tag.name.ptr); /* (token->data.tag.self_closing) ? @@ -447,25 +447,25 @@ html_parser_cb(const hubbub_token *token, void *pw) "attributes:" : ""); */ for (i = 0; i < token->data.tag.n_attributes; i++) { - p += snprintf(p, end - p, " %.*s='%.*s'\n", + p += lws_snprintf(p, end - p, " %.*s='%.*s'\n", (int) token->data.tag.attributes[i].name.len, token->data.tag.attributes[i].name.ptr, (int) token->data.tag.attributes[i].value.len, token->data.tag.attributes[i].value.ptr); } - p += snprintf(p, end - p, ">\n"); + p += lws_snprintf(p, end - p, ">\n"); break; case HUBBUB_TOKEN_COMMENT: - p += snprintf(p, end - p, "\n", + p += lws_snprintf(p, end - p, "\n", (int) token->data.comment.len, token->data.comment.ptr); break; case HUBBUB_TOKEN_CHARACTER: - p += snprintf(p, end - p, "%.*s", (int) token->data.character.len, + p += lws_snprintf(p, end - p, "%.*s", (int) token->data.character.len, token->data.character.ptr); break; case HUBBUB_TOKEN_EOF: - p += snprintf(p, end - p, "\n"); + p += lws_snprintf(p, end - p, "\n"); break; } diff --git a/lib/lejp-conf.c b/lib/lejp-conf.c index 46866ee8..2b0a889c 100644 --- a/lib/lejp-conf.c +++ b/lib/lejp-conf.c @@ -247,7 +247,7 @@ lejp_globals_cb(struct lejp_ctx *ctx, char reason) return 0; } - a->p += snprintf(a->p, a->end - a->p, "%s", ctx->buf); + a->p += lws_snprintf(a->p, a->end - a->p, "%s", ctx->buf); *(a->p)++ = '\0'; return 0; @@ -613,11 +613,11 @@ dostring: n = a->end - a->p; strncpy(a->p, p, n); a->p += n; - a->p += snprintf(a->p, a->end - a->p, "%s", LWS_INSTALL_DATADIR); + a->p += lws_snprintf(a->p, a->end - a->p, "%s", LWS_INSTALL_DATADIR); p += n + strlen(ESC_INSTALL_DATADIR); } - a->p += snprintf(a->p, a->end - a->p, "%s", p); + a->p += lws_snprintf(a->p, a->end - a->p, "%s", p); *(a->p)++ = '\0'; return 0; @@ -684,7 +684,7 @@ lwsws_get_config_d(void *user, const char *d, const char * const *paths, } while (uv_fs_scandir_next(&req, &dent) != UV_EOF) { - snprintf(path, sizeof(path) - 1, "%s/%s", d, dent.name); + lws_snprintf(path, sizeof(path) - 1, "%s/%s", d, dent.name); ret = lwsws_get_config(user, path, paths, count_paths, cb); if (ret) goto bail; @@ -724,7 +724,7 @@ lwsws_get_config_d(void *user, const char *d, const char * const *paths, } for (i = 0; i < n; i++) { - snprintf(path, sizeof(path) - 1, "%s/%s", d, + lws_snprintf(path, sizeof(path) - 1, "%s/%s", d, namelist[i]->d_name); ret = lwsws_get_config(user, path, paths, count_paths, cb); if (ret) { @@ -773,11 +773,11 @@ lwsws_get_config_globals(struct lws_context_creation_info *info, const char *d, old++; } - snprintf(dd, sizeof(dd) - 1, "%s/conf", d); + lws_snprintf(dd, sizeof(dd) - 1, "%s/conf", d); if (lwsws_get_config(&a, dd, paths_global, ARRAY_SIZE(paths_global), lejp_globals_cb) > 1) return 1; - snprintf(dd, sizeof(dd) - 1, "%s/conf.d", d); + lws_snprintf(dd, sizeof(dd) - 1, "%s/conf.d", d); if (lwsws_get_config_d(&a, dd, paths_global, ARRAY_SIZE(paths_global), lejp_globals_cb) > 1) return 1; @@ -808,11 +808,11 @@ lwsws_get_config_vhosts(struct lws_context *context, a.protocols = info->protocols; a.extensions = info->extensions; - snprintf(dd, sizeof(dd) - 1, "%s/conf", d); + lws_snprintf(dd, sizeof(dd) - 1, "%s/conf", d); if (lwsws_get_config(&a, dd, paths_vhosts, ARRAY_SIZE(paths_vhosts), lejp_vhosts_cb) > 1) return 1; - snprintf(dd, sizeof(dd) - 1, "%s/conf.d", d); + lws_snprintf(dd, sizeof(dd) - 1, "%s/conf.d", d); if (lwsws_get_config_d(&a, dd, paths_vhosts, ARRAY_SIZE(paths_vhosts), lejp_vhosts_cb) > 1) return 1; diff --git a/lib/libuv.c b/lib/libuv.c index 44689dc8..c12353bf 100644 --- a/lib/libuv.c +++ b/lib/libuv.c @@ -492,7 +492,7 @@ lws_plat_plugins_init(struct lws_context * context, const char * const *d) lwsl_notice(" %s\n", dent.name); - snprintf(path, sizeof(path) - 1, "%s/%s", *d, dent.name); + lws_snprintf(path, sizeof(path) - 1, "%s/%s", *d, dent.name); if (uv_dlopen(path, &lib)) { uv_dlerror(&lib); lwsl_err("Error loading DSO: %s\n", lib.errmsg); @@ -500,11 +500,11 @@ lws_plat_plugins_init(struct lws_context * context, const char * const *d) } /* we could open it, can we get his init function? */ #if !defined(WIN32) - m = snprintf(path, sizeof(path) - 1, "init_%s", + m = lws_snprintf(path, sizeof(path) - 1, "init_%s", dent.name + 3 /* snip lib... */); path[m - 3] = '\0'; /* snip the .so */ #else - m = snprintf(path, sizeof(path) - 1, "init_%s", + m = lws_snprintf(path, sizeof(path) - 1, "init_%s", dent.name); path[m - 4] = '\0'; /* snip the .dll */ #endif @@ -569,10 +569,10 @@ lws_plat_plugins_destroy(struct lws_context * context) while (plugin) { p = plugin; #if !defined(WIN32) - m = snprintf(path, sizeof(path) - 1, "destroy_%s", plugin->name + 3); + m = lws_snprintf(path, sizeof(path) - 1, "destroy_%s", plugin->name + 3); path[m - 3] = '\0'; #else - m = snprintf(path, sizeof(path) - 1, "destroy_%s", plugin->name); + m = lws_snprintf(path, sizeof(path) - 1, "destroy_%s", plugin->name); path[m - 4] = '\0'; #endif diff --git a/lib/libwebsockets.c b/lib/libwebsockets.c index 79aee0ee..752fe345 100755 --- a/lib/libwebsockets.c +++ b/lib/libwebsockets.c @@ -1124,7 +1124,7 @@ lwsl_timestamp(int level, char *p, int len) continue; now = time_in_microseconds() / 100; if (ptm) - n = snprintf(p, len, + n = lws_snprintf(p, len, "[%04d/%02d/%02d %02d:%02d:%02d:%04d] %s: ", ptm->tm_year + 1900, ptm->tm_mon + 1, @@ -1134,7 +1134,7 @@ lwsl_timestamp(int level, char *p, int len) ptm->tm_sec, (int)(now % 10000), log_level_names[n]); else - n = snprintf(p, len, "[%llu:%04d] %s: ", + n = lws_snprintf(p, len, "[%llu:%04d] %s: ", (unsigned long long) now / 10000, (int)(now % 10000), log_level_names[n]); return n; @@ -1717,6 +1717,26 @@ lws_finalize_startup(struct lws_context *context) return 0; } +int +lws_snprintf(char *str, size_t size, const char *format, ...) +{ + va_list ap; + int n; + + if (!size) + return 0; + + va_start(ap, format); + n = vsnprintf(str, size, format, ap); + va_end(ap); + + if (n >= size) + return size; + + return n; +} + + LWS_VISIBLE LWS_EXTERN int lws_is_cgi(struct lws *wsi) { #ifdef LWS_WITH_CGI @@ -1910,18 +1930,18 @@ lws_cgi(struct lws *wsi, const char * const *exec_array, int script_uri_path_len if (uritok < 0) goto bail3; - snprintf(cgi_path, sizeof(cgi_path) - 1, "REQUEST_URI=%s", + lws_snprintf(cgi_path, sizeof(cgi_path) - 1, "REQUEST_URI=%s", lws_hdr_simple_ptr(wsi, uritok)); cgi_path[sizeof(cgi_path) - 1] = '\0'; env_array[n++] = cgi_path; env_array[n++] = p; - p += snprintf(p, end - p, "REQUEST_METHOD=%s", + p += lws_snprintf(p, end - p, "REQUEST_METHOD=%s", meth_names[m]); p++; env_array[n++] = p; - p += snprintf(p, end - p, "QUERY_STRING="); + p += lws_snprintf(p, end - p, "QUERY_STRING="); /* dump the individual URI Arg parameters */ m = 0; while (1) { @@ -1946,55 +1966,55 @@ lws_cgi(struct lws *wsi, const char * const *exec_array, int script_uri_path_len *p++ = '\0'; env_array[n++] = p; - p += snprintf(p, end - p, "PATH_INFO=%s", + p += lws_snprintf(p, end - p, "PATH_INFO=%s", lws_hdr_simple_ptr(wsi, uritok) + script_uri_path_len); p++; } if (lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_REFERER)) { env_array[n++] = p; - p += snprintf(p, end - p, "HTTP_REFERER=%s", + p += lws_snprintf(p, end - p, "HTTP_REFERER=%s", lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_REFERER)); p++; } if (lws_hdr_total_length(wsi, WSI_TOKEN_HOST)) { env_array[n++] = p; - p += snprintf(p, end - p, "HTTP_HOST=%s", + p += lws_snprintf(p, end - p, "HTTP_HOST=%s", lws_hdr_simple_ptr(wsi, WSI_TOKEN_HOST)); p++; } if (lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_COOKIE)) { env_array[n++] = p; - p += snprintf(p, end - p, "HTTP_COOKIE=%s", + p += lws_snprintf(p, end - p, "HTTP_COOKIE=%s", lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COOKIE)); p++; } if (lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_USER_AGENT)) { env_array[n++] = p; - p += snprintf(p, end - p, "USER_AGENT=%s", + p += lws_snprintf(p, end - p, "USER_AGENT=%s", lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_USER_AGENT)); p++; } if (uritok == WSI_TOKEN_POST_URI) { if (lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE)) { env_array[n++] = p; - p += snprintf(p, end - p, "CONTENT_TYPE=%s", + p += lws_snprintf(p, end - p, "CONTENT_TYPE=%s", lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE)); p++; } if (lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH)) { env_array[n++] = p; - p += snprintf(p, end - p, "CONTENT_LENGTH=%s", + p += lws_snprintf(p, end - p, "CONTENT_LENGTH=%s", lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH)); p++; } } env_array[n++] = p; - p += snprintf(p, end - p, "SCRIPT_PATH=%s", exec_array[0]) + 1; + p += lws_snprintf(p, end - p, "SCRIPT_PATH=%s", exec_array[0]) + 1; while (mp_cgienv) { env_array[n++] = p; - p += snprintf(p, end - p, "%s=%s", mp_cgienv->name, + p += lws_snprintf(p, end - p, "%s=%s", mp_cgienv->name, mp_cgienv->value); lwsl_debug(" Applying mount-specific cgi env '%s'\n", env_array[n - 1]); @@ -2431,7 +2451,7 @@ lws_access_log(struct lws *wsi) if (!p) p = ""; - l = snprintf(ass, sizeof(ass) - 1, "%s %d %lu %s\n", + l = lws_snprintf(ass, sizeof(ass) - 1, "%s %d %lu %s\n", wsi->access_log.header_log, wsi->access_log.response, wsi->access_log.sent, p); @@ -2475,7 +2495,7 @@ lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len) if (len < 100) return 0; - buf += snprintf(buf, end - buf, + buf += lws_snprintf(buf, end - buf, "{\n \"name\":\"%s\",\n" " \"port\":\"%d\",\n" " \"use_ssl\":\"%d\",\n" @@ -2501,11 +2521,11 @@ lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len) if (vh->mount_list) { const struct lws_http_mount *m = vh->mount_list; - buf += snprintf(buf, end - buf, ",\n \"mounts\":["); + buf += lws_snprintf(buf, end - buf, ",\n \"mounts\":["); while (m) { if (!first) - buf += snprintf(buf, end - buf, ","); - buf += snprintf(buf, end - buf, + buf += lws_snprintf(buf, end - buf, ","); + buf += lws_snprintf(buf, end - buf, "\n {\n \"mountpoint\":\"%s\",\n" " \"origin\":\"%s%s\",\n" " \"cache_max_age\":\"%d\",\n" @@ -2521,25 +2541,25 @@ lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len) m->cache_revalidate, m->cache_intermediaries); if (m->def) - buf += snprintf(buf, end - buf, + buf += lws_snprintf(buf, end - buf, ",\n \"default\":\"%s\"", m->def); - buf += snprintf(buf, end - buf, "\n }"); + buf += lws_snprintf(buf, end - buf, "\n }"); first = 0; m = m->mount_next; } - buf += snprintf(buf, end - buf, "\n ]"); + buf += lws_snprintf(buf, end - buf, "\n ]"); } if (vh->protocols) { n = 0; first = 1; - buf += snprintf(buf, end - buf, ",\n \"ws-protocols\":["); + buf += lws_snprintf(buf, end - buf, ",\n \"ws-protocols\":["); while (n < vh->count_protocols) { if (!first) - buf += snprintf(buf, end - buf, ","); - buf += snprintf(buf, end - buf, + buf += lws_snprintf(buf, end - buf, ","); + buf += lws_snprintf(buf, end - buf, "\n {\n \"%s\":{\n" " \"status\":\"ok\"\n }\n }" , @@ -2547,10 +2567,10 @@ lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len) first = 0; n++; } - buf += snprintf(buf, end - buf, "\n ]"); + buf += lws_snprintf(buf, end - buf, "\n ]"); } - buf += snprintf(buf, end - buf, "\n}"); + buf += lws_snprintf(buf, end - buf, "\n}"); return buf - orig; } @@ -2569,7 +2589,7 @@ lws_json_dump_context(const struct lws_context *context, char *buf, int len) time_t t = time(NULL); int listening = 0, cgi_count = 0, n; - buf += snprintf(buf, end - buf, "{ " + buf += lws_snprintf(buf, end - buf, "{ " "\"version\":\"%s\",\n" "\"uptime\":\"%ld\",\n" "\"cgi_spawned\":\"%d\",\n" @@ -2589,19 +2609,19 @@ lws_json_dump_context(const struct lws_context *context, char *buf, int len) m = getloadavg(d, 3); for (n = 0; n < m; n++) { - buf += snprintf(buf, end - buf, + buf += lws_snprintf(buf, end - buf, "\"l%d\":\"%.2f\",\n", n + 1, d[n]); } } #endif - buf += snprintf(buf, end - buf, "\"pt\":[\n "); + buf += lws_snprintf(buf, end - buf, "\"pt\":[\n "); for (n = 0; n < context->count_threads; n++) { pt = &context->pt[n]; if (n) - buf += snprintf(buf, end - buf, ","); - buf += snprintf(buf, end - buf, + buf += lws_snprintf(buf, end - buf, ","); + buf += lws_snprintf(buf, end - buf, "\n {\n" " \"fds_count\":\"%d\",\n" " \"ah_pool_inuse\":\"%d\",\n" @@ -2612,7 +2632,7 @@ lws_json_dump_context(const struct lws_context *context, char *buf, int len) pt->ah_wait_list_length); } - buf += snprintf(buf, end - buf, "], \"vhosts\":[\n "); + buf += lws_snprintf(buf, end - buf, "], \"vhosts\":[\n "); while (vh) { if (!first) @@ -2625,7 +2645,7 @@ lws_json_dump_context(const struct lws_context *context, char *buf, int len) vh = vh->vhost_next; } - buf += snprintf(buf, end - buf, "],\n\"listen_wsi\":\"%d\"", + buf += lws_snprintf(buf, end - buf, "],\n\"listen_wsi\":\"%d\"", listening); #ifdef LWS_WITH_CGI @@ -2640,10 +2660,10 @@ lws_json_dump_context(const struct lws_context *context, char *buf, int len) } } #endif - buf += snprintf(buf, end - buf, ",\n \"cgi_alive\":\"%d\"\n ", + buf += lws_snprintf(buf, end - buf, ",\n \"cgi_alive\":\"%d\"\n ", cgi_count); - buf += snprintf(buf, end - buf, "}\n "); + buf += lws_snprintf(buf, end - buf, "}\n "); return buf - orig; } diff --git a/lib/libwebsockets.h b/lib/libwebsockets.h index d19c899c..6a5f078a 100644 --- a/lib/libwebsockets.h +++ b/lib/libwebsockets.h @@ -149,7 +149,7 @@ struct sockaddr_in; #define LWS_O_RDONLY _O_RDONLY #if !defined(_MSC_VER) || _MSC_VER < 1900 /* Visual Studio 2015 already defines this in */ -#define snprintf _snprintf +#define lws_snprintf _snprintf #endif #ifndef __func__ @@ -3567,6 +3567,20 @@ lws_interface_to_sa(int ipv6, const char *ifname, struct sockaddr_in *addr, */ ///@{ +/** + * lws_snprintf(): snprintf that truncates the returned length too + * + * \param str: destination buffer + * \param size: bytes left in destination buffer + * \param format: format string + * \param ...: args for format + * + * This lets you correctly truncate buffers by concatenating lengths, if you + * reach the limit the reported length doesn't exceed the limit. + */ +LWS_VISIBLE LWS_EXTERN int +lws_snprintf(char *str, size_t size, const char *format, ...); + /** * lws_get_random(): fill a buffer with platform random data * diff --git a/lib/lws-plat-esp8266.c b/lib/lws-plat-esp8266.c index ba36e347..cb6c686d 100644 --- a/lib/lws-plat-esp8266.c +++ b/lib/lws-plat-esp8266.c @@ -249,7 +249,7 @@ lws_plat_get_peer_simple(struct lws *wsi, char *name, int namelen) { unsigned char *p = wsi->sock->proto.tcp->remote_ip; - snprintf(name, namelen, "%u.%u.%u.%u", p[0], p[1], p[2], p[3]); + lws_snprintf(name, namelen, "%u.%u.%u.%u", p[0], p[1], p[2], p[3]); return name; } diff --git a/lib/lws-plat-unix.c b/lib/lws-plat-unix.c index c3e58947..ee30d0f2 100644 --- a/lib/lws-plat-unix.c +++ b/lib/lws-plat-unix.c @@ -327,7 +327,7 @@ lws_plat_plugins_init(struct lws_context * context, const char * const *d) lwsl_notice(" %s\n", namelist[i]->d_name); - snprintf(path, sizeof(path) - 1, "%s/%s", *d, + lws_snprintf(path, sizeof(path) - 1, "%s/%s", *d, namelist[i]->d_name); l = dlopen(path, RTLD_NOW); if (!l) { @@ -337,7 +337,7 @@ lws_plat_plugins_init(struct lws_context * context, const char * const *d) goto bail; } /* we could open it, can we get his init function? */ - m = snprintf(path, sizeof(path) - 1, "init_%s", + m = lws_snprintf(path, sizeof(path) - 1, "init_%s", namelist[i]->d_name + 3 /* snip lib... */); path[m - 3] = '\0'; /* snip the .so */ initfunc = dlsym(l, path); @@ -402,7 +402,7 @@ lws_plat_plugins_destroy(struct lws_context * context) while (plugin) { p = plugin; - m = snprintf(path, sizeof(path) - 1, "destroy_%s", plugin->name + 3); + m = lws_snprintf(path, sizeof(path) - 1, "destroy_%s", plugin->name + 3); path[m - 3] = '\0'; func = dlsym(plugin->l, path); if (!func) { diff --git a/lib/private-libwebsockets.h b/lib/private-libwebsockets.h index 2d2e672d..f475a378 100644 --- a/lib/private-libwebsockets.h +++ b/lib/private-libwebsockets.h @@ -141,7 +141,7 @@ char *ets_strchr(const char *s, int c); #endif #ifdef LWS_HAVE__SNPRINTF -#define snprintf _snprintf +#define lws_snprintf _snprintf #endif #else /* not windows --> */ diff --git a/lib/server.c b/lib/server.c index 3dad2e27..c8a8b4cc 100644 --- a/lib/server.c +++ b/lib/server.c @@ -356,7 +356,7 @@ lws_http_serve(struct lws *wsi, char *uri, const char *origin, #endif int n; - snprintf(path, sizeof(path) - 1, "%s/%s", origin, uri); + lws_snprintf(path, sizeof(path) - 1, "%s/%s", origin, uri); #if !defined(_WIN32_WCE) && !defined(LWS_WITH_ESP8266) do { @@ -377,12 +377,12 @@ lws_http_serve(struct lws *wsi, char *uri, const char *origin, } sym[len] = '\0'; lwsl_debug("symlink %s -> %s\n", path, sym); - snprintf(path, sizeof(path) - 1, "%s", sym); + lws_snprintf(path, sizeof(path) - 1, "%s", sym); } #endif if ((S_IFMT & st.st_mode) == S_IFDIR) { lwsl_debug("default filename append to dir\n"); - snprintf(path, sizeof(path) - 1, "%s/%s/index.html", + lws_snprintf(path, sizeof(path) - 1, "%s/%s/index.html", origin, uri); } @@ -729,7 +729,7 @@ lws_http_action(struct lws *wsi) else me = "unknown"; - snprintf(wsi->access_log.header_log, l, + lws_snprintf(wsi->access_log.header_log, l, "%s - - [%s] \"%s %s %s\"", pa, da, me, uri_ptr, hver[wsi->u.http.request_version]); @@ -818,11 +818,11 @@ lws_http_action(struct lws *wsi) /* > at start indicates deal with by redirect */ if (hit->origin_protocol == LWSMPRO_REDIR_HTTP || hit->origin_protocol == LWSMPRO_REDIR_HTTPS) - n = snprintf((char *)end, 256, "%s%s", + n = lws_snprintf((char *)end, 256, "%s%s", oprot[hit->origin_protocol & 1], hit->origin); else - n = snprintf((char *)end, 256, + n = lws_snprintf((char *)end, 256, "%s%s%s/", oprot[lws_is_ssl(wsi)], lws_hdr_simple_ptr(wsi, WSI_TOKEN_HOST), uri_ptr); diff --git a/plugins/generic-sessions/handlers.c b/plugins/generic-sessions/handlers.c index 108983cc..ccea5446 100644 --- a/plugins/generic-sessions/handlers.c +++ b/plugins/generic-sessions/handlers.c @@ -39,7 +39,7 @@ lwsgs_handler_confirm(struct per_vhost_data__gs *vhd, struct lws *wsi, goto verf_fail; u.username[0] = '\0'; - snprintf(s, sizeof(s) - 1, + lws_snprintf(s, sizeof(s) - 1, "select username,email,verified from users where token = '%s';", lws_sql_purify(esc, &cookie[6], sizeof(esc) - 1)); if (sqlite3_exec(vhd->pdb, s, lwsgs_lookup_callback_user, &u, NULL) != @@ -55,7 +55,7 @@ lwsgs_handler_confirm(struct per_vhost_data__gs *vhd, struct lws *wsi, } lwsl_notice("Verifying %s\n", u.username); - snprintf(s, sizeof(s) - 1, + lws_snprintf(s, sizeof(s) - 1, "update users set verified=%d where username='%s';", LWSGS_VERIFIED_ACCEPTED, lws_sql_purify(esc, u.username, sizeof(esc) - 1)); @@ -74,7 +74,7 @@ lwsgs_handler_confirm(struct per_vhost_data__gs *vhd, struct lws *wsi, a.email = u.email; lws_callback_vhost_protocols(wsi, LWS_CALLBACK_GS_EVENT, &a, 0); - snprintf(pss->onward, sizeof(pss->onward), + lws_snprintf(pss->onward, sizeof(pss->onward), "%s/post-verify-ok.html", vhd->email_confirm_url); pss->login_expires = lws_now_secs() + vhd->timeout_absolute_secs; @@ -98,7 +98,7 @@ verf_fail: lwsgs_get_sid_from_wsi(wsi, &pss->delete_session); pss->login_expires = 0; - snprintf(pss->onward, sizeof(pss->onward), "%s/post-verify-fail.html", + lws_snprintf(pss->onward, sizeof(pss->onward), "%s/post-verify-fail.html", vhd->email_confirm_url); return 1; @@ -119,7 +119,7 @@ lwsgs_handler_forgot(struct per_vhost_data__gs *vhd, struct lws *wsi, goto forgot_fail; u.username[0] = '\0'; - snprintf(s, sizeof(s) - 1, + lws_snprintf(s, sizeof(s) - 1, "select username,verified from users where verified=%d and " "token = '%s' and token_time != 0;", LWSGS_VERIFIED_ACCEPTED, @@ -140,7 +140,7 @@ lwsgs_handler_forgot(struct per_vhost_data__gs *vhd, struct lws *wsi, /* mark user as having validated forgot flow just now */ - snprintf(s, sizeof(s) - 1, + lws_snprintf(s, sizeof(s) - 1, "update users set token_time=0,last_forgot_validated=%lu " "where username='%s';", (unsigned long)lws_now_secs(), @@ -157,7 +157,7 @@ lwsgs_handler_forgot(struct per_vhost_data__gs *vhd, struct lws *wsi, if (!a) a = "broken-forget-post-good-url"; - snprintf(pss->onward, sizeof(pss->onward), + lws_snprintf(pss->onward, sizeof(pss->onward), "%s/%s", vhd->email_confirm_url, a); pss->login_expires = lws_now_secs() + vhd->timeout_absolute_secs; @@ -185,7 +185,7 @@ forgot_fail: if (!a) a = "broken-forget-post-bad-url"; - snprintf(pss->onward, sizeof(pss->onward), "%s/%s", + lws_snprintf(pss->onward, sizeof(pss->onward), "%s/%s", vhd->email_confirm_url, a); return 1; @@ -227,7 +227,7 @@ lwsgs_handler_check(struct per_vhost_data__gs *vhd, goto reply; } - snprintf(s, sizeof(s) - 1, + lws_snprintf(s, sizeof(s) - 1, "select username, email from users where %s = '%s';", colname[n], lws_sql_purify(esc, pc, sizeof(esc) - 1)); if (sqlite3_exec(vhd->pdb, s, lwsgs_lookup_callback_user, &u, NULL) != @@ -320,7 +320,7 @@ lwsgs_handler_change_password(struct per_vhost_data__gs *vhd, struct lws *wsi, a.email = ""; lws_callback_vhost_protocols(wsi, LWS_CALLBACK_GS_EVENT, &a, 0); - snprintf(s, sizeof(s) - 1, + lws_snprintf(s, sizeof(s) - 1, "delete from users where username='%s';" "delete from sessions where username='%s';", lws_sql_purify(esc, u.username, sizeof(esc) - 1), @@ -333,7 +333,7 @@ lwsgs_handler_change_password(struct per_vhost_data__gs *vhd, struct lws *wsi, lwsl_notice("updating password hash\n"); - snprintf(s, sizeof(s) - 1, + lws_snprintf(s, sizeof(s) - 1, "update users set pwhash='%s', pwsalt='%s', " "last_forgot_validated=0 where username='%s';", u.pwhash.id, u.pwsalt.id, @@ -385,13 +385,13 @@ lwsgs_handler_forgot_pw_form(struct per_vhost_data__gs *vhd, u.username[0] = '\0'; if (lws_spa_get_string(pss->spa, FGS_USERNAME)) - snprintf(s, sizeof(s) - 1, + lws_snprintf(s, sizeof(s) - 1, "select username,email " "from users where username = '%s';", lws_sql_purify(esc, lws_spa_get_string(pss->spa, FGS_USERNAME), sizeof(esc) - 1)); else - snprintf(s, sizeof(s) - 1, + lws_snprintf(s, sizeof(s) - 1, "select username,email " "from users where email = '%s';", lws_sql_purify(esc, lws_spa_get_string(pss->spa, FGS_EMAIL), sizeof(esc) - 1)); @@ -414,7 +414,7 @@ lwsgs_handler_forgot_pw_form(struct per_vhost_data__gs *vhd, return 1; } sha1_to_lwsgw_hash(sid_rand, &hash); - n = snprintf(s, sizeof(s), + n = lws_snprintf(s, sizeof(s), "From: Forgot Password Assistant Noreply <%s>\n" "To: %s <%s>\n" "Subject: Password reset request\n" @@ -427,7 +427,7 @@ lwsgs_handler_forgot_pw_form(struct per_vhost_data__gs *vhd, lws_sql_purify(esc2, u.email, sizeof(esc2) - 1), lws_sql_purify(esc3, u.username, sizeof(esc3) - 1), lws_sql_purify(esc4, pss->ip, sizeof(esc4) - 1)); - snprintf(s + n, sizeof(s) -n, + lws_snprintf(s + n, sizeof(s) -n, "%s/lwsgs-forgot?token=%s" "&good=%s" "&bad=%s\n\n" @@ -446,7 +446,7 @@ lwsgs_handler_forgot_pw_form(struct per_vhost_data__gs *vhd, sizeof(esc3) - 1), vhd->email_contact_person); - snprintf((char *)buffer, sizeof(buffer) - 1, + lws_snprintf((char *)buffer, sizeof(buffer) - 1, "insert into email(username, content)" " values ('%s', '%s');", lws_sql_purify(esc, u.username, sizeof(esc) - 1), s); @@ -457,7 +457,7 @@ lwsgs_handler_forgot_pw_form(struct per_vhost_data__gs *vhd, return 1; } - snprintf(s, sizeof(s) - 1, + lws_snprintf(s, sizeof(s) - 1, "update users set token='%s',token_time='%ld' where username='%s';", hash.id, (long)lws_now_secs(), lws_sql_purify(esc, u.username, sizeof(esc) - 1)); @@ -513,7 +513,7 @@ lwsgs_handler_register_form(struct per_vhost_data__gs *vhd, } u.username[0] = '\0'; - snprintf(s, sizeof(s) - 1, "select username, email from users where email = '%s';", + lws_snprintf(s, sizeof(s) - 1, "select username, email from users where email = '%s';", lws_sql_purify(esc, lws_spa_get_string(pss->spa, FGS_EMAIL), sizeof(esc) - 1)); @@ -543,7 +543,7 @@ lwsgs_handler_register_form(struct per_vhost_data__gs *vhd, } sha1_to_lwsgw_hash(sid_rand, &hash); - snprintf((char *)buffer, sizeof(buffer) - 1, + lws_snprintf((char *)buffer, sizeof(buffer) - 1, "insert into users(username," " creation_time, ip, email, verified," " pwhash, pwsalt, token, last_forgot_validated)" @@ -561,7 +561,7 @@ lwsgs_handler_register_form(struct per_vhost_data__gs *vhd, return 1; } - snprintf(s, sizeof(s), + lws_snprintf(s, sizeof(s), "From: Noreply <%s>\n" "To: %s <%s>\n" "Subject: Registration verification\n" @@ -584,7 +584,7 @@ lwsgs_handler_register_form(struct per_vhost_data__gs *vhd, vhd->email_confirm_url, hash.id, vhd->email_contact_person); - snprintf((char *)buffer, sizeof(buffer) - 1, + lws_snprintf((char *)buffer, sizeof(buffer) - 1, "insert into email(username, content) values ('%s', '%s');", lws_sql_purify(esc, lws_spa_get_string(pss->spa, FGS_USERNAME), sizeof(esc) - 1), s); diff --git a/plugins/generic-sessions/protocol_generic_sessions.c b/plugins/generic-sessions/protocol_generic_sessions.c index 7dc31b28..a828c209 100644 --- a/plugins/generic-sessions/protocol_generic_sessions.c +++ b/plugins/generic-sessions/protocol_generic_sessions.c @@ -77,7 +77,7 @@ lwsgs_email_cb_get_body(struct lws_email *email, char *buf, int len) a.buf = buf; a.len = len; - snprintf(ss, sizeof(ss) - 1, + lws_snprintf(ss, sizeof(ss) - 1, "select content from email where username='%s';", lws_sql_purify(esc, vhd->u.username, sizeof(esc) - 1)); @@ -100,7 +100,7 @@ lwsgs_email_cb_sent(struct lws_email *email) char s[200], esc[50]; /* mark the user as having sent the verification email */ - snprintf(s, sizeof(s) - 1, + lws_snprintf(s, sizeof(s) - 1, "update users set verified=1 where username='%s' and verified==0;", lws_sql_purify(esc, vhd->u.username, sizeof(esc) - 1)); if (sqlite3_exec(vhd->pdb, s, NULL, NULL, NULL) != SQLITE_OK) { @@ -109,7 +109,7 @@ lwsgs_email_cb_sent(struct lws_email *email) return 1; } - snprintf(s, sizeof(s) - 1, + lws_snprintf(s, sizeof(s) - 1, "delete from email where username='%s';", lws_sql_purify(esc, vhd->u.username, sizeof(esc) - 1)); if (sqlite3_exec(vhd->pdb, s, NULL, NULL, NULL) != SQLITE_OK) { @@ -132,7 +132,7 @@ lwsgs_email_cb_on_next(struct lws_email *email) /* * users not verified in 24h get deleted */ - snprintf(s, sizeof(s) - 1, "delete from users where ((verified != %d)" + lws_snprintf(s, sizeof(s) - 1, "delete from users where ((verified != %d)" " and (creation_time <= %lu));", LWSGS_VERIFIED_ACCEPTED, (unsigned long)now - vhd->timeout_email_secs); if (sqlite3_exec(vhd->pdb, s, NULL, NULL, NULL) != SQLITE_OK) { @@ -141,7 +141,7 @@ lwsgs_email_cb_on_next(struct lws_email *email) return 1; } - snprintf(s, sizeof(s) - 1, "update users set token_time=0 where " + lws_snprintf(s, sizeof(s) - 1, "update users set token_time=0 where " "(token_time <= %lu);", (unsigned long)now - vhd->timeout_email_secs); if (sqlite3_exec(vhd->pdb, s, NULL, NULL, NULL) != SQLITE_OK) { @@ -151,14 +151,14 @@ lwsgs_email_cb_on_next(struct lws_email *email) } vhd->u.username[0] = '\0'; - snprintf(s, sizeof(s) - 1, "select username from email limit 1;"); + lws_snprintf(s, sizeof(s) - 1, "select username from email limit 1;"); if (sqlite3_exec(vhd->pdb, s, lwsgs_lookup_callback_user, &vhd->u, NULL) != SQLITE_OK) { lwsl_err("Unable to lookup user: %s\n", sqlite3_errmsg(vhd->pdb)); return 1; } - snprintf(s, sizeof(s) - 1, + lws_snprintf(s, sizeof(s) - 1, "select username, creation_time, email, ip, verified, token" " from users where username='%s' limit 1;", lws_sql_purify(esc, vhd->u.username, sizeof(esc) - 1)); @@ -207,7 +207,7 @@ lwsgs_subst(void *data, int index) a->pss->delete_session = sid; return NULL; } - snprintf(s, sizeof(s) - 1, "select username,email " + lws_snprintf(s, sizeof(s) - 1, "select username,email " "from users where username = '%s';", lws_sql_purify(esc, a->pss->result, sizeof(esc) - 1)); if (sqlite3_exec(a->vhd->pdb, s, lwsgs_lookup_callback_user, @@ -467,7 +467,7 @@ callback_generic_sessions(struct lws *wsi, enum lws_callback_reasons reason, if (lws_hdr_copy(wsi, cookie, sizeof(cookie) - 1, WSI_TOKEN_HOST) < 0) return 1; - snprintf(pss->onward, sizeof(pss->onward) - 1, + lws_snprintf(pss->onward, sizeof(pss->onward) - 1, "%s%s%s", oprot[lws_is_ssl(wsi)], cookie, args->p); lwsl_notice("redirecting to ourselves with cookie refresh\n"); @@ -504,7 +504,7 @@ callback_generic_sessions(struct lws *wsi, enum lws_callback_reasons reason, if (lwsgs_lookup_session(vhd, &sid, username, sizeof(username))) break; - snprintf(s, sizeof(s) - 1, + lws_snprintf(s, sizeof(s) - 1, "select username, email from users where username='%s';", username); if (sqlite3_exec(vhd->pdb, s, lwsgs_lookup_callback_user, &u, NULL) != diff --git a/plugins/generic-sessions/protocol_lws_messageboard.c b/plugins/generic-sessions/protocol_lws_messageboard.c index 0adfe8cb..472f3e1b 100644 --- a/plugins/generic-sessions/protocol_lws_messageboard.c +++ b/plugins/generic-sessions/protocol_lws_messageboard.c @@ -132,7 +132,7 @@ post_message(struct lws *wsi, struct per_vhost_data__gs_mb *vhd, vhd->gsp->callback(wsi, LWS_CALLBACK_SESSION_INFO, pss->pss_gs, &sinfo, 0); - snprintf((char *)s, sizeof(s) - 1, + lws_snprintf((char *)s, sizeof(s) - 1, "insert into msg(time, username, email, ip, content)" " values (%lu, '%s', '%s', '%s', '%s');", (unsigned long)lws_now_secs(), sinfo.username, sinfo.email, sinfo.ip, @@ -253,16 +253,16 @@ callback_messageboard(struct lws *wsi, enum lws_callback_reasons reason, } /* format in JSON */ - p += snprintf(p, end - p, + p += lws_snprintf(p, end - p, "{\"idx\":\"%lu\",\"time\":\"%lu\",", m.idx, m.time); - p += snprintf(p, end - p, " \"username\":\"%s\",", + p += lws_snprintf(p, end - p, " \"username\":\"%s\",", lws_json_purify(e, m.username, sizeof(e))); - p += snprintf(p, end - p, " \"email\":\"%s\",", + p += lws_snprintf(p, end - p, " \"email\":\"%s\",", lws_json_purify(e, m.email, sizeof(e))); - p += snprintf(p, end - p, " \"ip\":\"%s\",", + p += lws_snprintf(p, end - p, " \"ip\":\"%s\",", lws_json_purify(e, m.ip, sizeof(e))); - p += snprintf(p, end - p, " \"content\":\"%s\"}", + p += lws_snprintf(p, end - p, " \"content\":\"%s\"}", lws_json_purify(e, m.content, sizeof(e))); if (lws_write(wsi, (unsigned char *)start, p - start, diff --git a/plugins/generic-sessions/utils.c b/plugins/generic-sessions/utils.c index 98dfe318..f751f287 100644 --- a/plugins/generic-sessions/utils.c +++ b/plugins/generic-sessions/utils.c @@ -64,16 +64,16 @@ lwsgw_cookie_from_session(lwsgw_hash *sid, time_t expires, char **p, char *end) struct tm *tm = gmtime(&expires); time_t n = lws_now_secs(); - *p += snprintf(*p, end - *p, "id=%s;Expires=", sid->id); + *p += lws_snprintf(*p, end - *p, "id=%s;Expires=", sid->id); #ifdef WIN32 *p += strftime(*p, end - *p, "%Y %H:%M %Z", tm); #else *p += strftime(*p, end - *p, "%F %H:%M %Z", tm); #endif - *p += snprintf(*p, end - *p, ";path=/"); - *p += snprintf(*p, end - *p, ";Max-Age=%lu", (unsigned long)(expires - n)); -// *p += snprintf(*p, end - *p, ";secure"); - *p += snprintf(*p, end - *p, ";HttpOnly"); + *p += lws_snprintf(*p, end - *p, ";path=/"); + *p += lws_snprintf(*p, end - *p, ";Max-Age=%lu", (unsigned long)(expires - n)); +// *p += lws_snprintf(*p, end - *p, ";secure"); + *p += lws_snprintf(*p, end - *p, ";HttpOnly"); } int @@ -87,7 +87,7 @@ lwsgw_expire_old_sessions(struct per_vhost_data__gs *vhd) vhd->last_session_expire = n; - snprintf(s, sizeof(s) - 1, + lws_snprintf(s, sizeof(s) - 1, "delete from sessions where " "expire <= %lu;", (unsigned long)n); @@ -112,7 +112,7 @@ lwsgw_update_session(struct per_vhost_data__gs *vhd, else n += vhd->timeout_anon_absolute_secs; - snprintf(s, sizeof(s) - 1, + lws_snprintf(s, sizeof(s) - 1, "update sessions set expire=%lu,username='%s' where name='%s';", (unsigned long)n, lws_sql_purify(esc, user, sizeof(esc)), @@ -222,7 +222,7 @@ lwsgs_lookup_session(struct per_vhost_data__gs *vhd, lwsgw_expire_old_sessions(vhd); - snprintf(s, sizeof(s) - 1, + lws_snprintf(s, sizeof(s) - 1, "select username from sessions where name = '%s';", lws_sql_purify(esc, sid->id, sizeof(esc) - 1)); @@ -300,7 +300,7 @@ lwsgs_lookup_user(struct per_vhost_data__gs *vhd, char s[150], esc[50]; u->username[0] = '\0'; - snprintf(s, sizeof(s) - 1, + lws_snprintf(s, sizeof(s) - 1, "select username,creation_time,ip,email,verified,pwhash,pwsalt,last_forgot_validated " "from users where username = '%s';", lws_sql_purify(esc, username, sizeof(esc) - 1)); @@ -340,7 +340,7 @@ lwsgs_new_session_id(struct per_vhost_data__gs *vhd, sha1_to_lwsgw_hash(sid_rand, sid); - snprintf(s, sizeof(s) - 1, + lws_snprintf(s, sizeof(s) - 1, "insert into sessions(name, username, expire) " "values ('%s', '%s', %u);", lws_sql_purify(esc, sid->id, sizeof(esc) - 1), @@ -398,7 +398,7 @@ lwsgs_check_credentials(struct per_vhost_data__gs *vhd, lwsl_info("user %s found, salt '%s'\n", username, u.pwsalt.id); /* [password in ascii][salt] */ - n = snprintf((char *)buffer, sizeof(buffer) - 1, + n = lws_snprintf((char *)buffer, sizeof(buffer) - 1, "%s-%s-%s", password, vhd->confounder, u.pwsalt.id); /* sha1sum of password + salt */ @@ -439,7 +439,7 @@ lwsgs_hash_password(struct per_vhost_data__gs *vhd, sha1_to_lwsgw_hash(sid_rand, &hash); /* [password in ascii][salt] */ - n = snprintf((char *)buffer, sizeof(buffer) - 1, + n = lws_snprintf((char *)buffer, sizeof(buffer) - 1, "%s-%s-%s", password, vhd->confounder, u->pwsalt.id); /* sha1sum of password + salt */ diff --git a/plugins/generic-table/protocol_table_dirlisting.c b/plugins/generic-table/protocol_table_dirlisting.c index 8d673111..6c3fe443 100644 --- a/plugins/generic-table/protocol_table_dirlisting.c +++ b/plugins/generic-table/protocol_table_dirlisting.c @@ -95,7 +95,7 @@ scan_dir(struct lws *wsi, struct per_session_data__tbl_dir *pss) lws_protocol_dir_kill_monitor(pss); - snprintf(path, sizeof(path) - 1, "%s/%s", pss->dir, pss->reldir); + lws_snprintf(path, sizeof(path) - 1, "%s/%s", pss->dir, pss->reldir); //lwsl_notice("path = %s\n", path); pss->event_req = malloc(sizeof(*pss->event_req)); @@ -119,7 +119,7 @@ scan_dir(struct lws *wsi, struct per_session_data__tbl_dir *pss) pss->p = pss->strings; while (uv_fs_scandir_next(&req, &dent) != UV_EOF) { - snprintf(path, sizeof(path) - 1, "%s/%s/%s", pss->dir, pss->reldir, dent.name); + lws_snprintf(path, sizeof(path) - 1, "%s/%s/%s", pss->dir, pss->reldir, dent.name); if (stat(path, &st)) { lwsl_info("unable to stat %s\n", path); @@ -128,15 +128,15 @@ scan_dir(struct lws *wsi, struct per_session_data__tbl_dir *pss) f = malloc(sizeof(*f)); f->next = NULL; f->name = pss->p; - n = snprintf(pss->p, end - pss->p, "%s", dent.name); + n = lws_snprintf(pss->p, end - pss->p, "%s", dent.name); pss->p += n + 1; f->uri = NULL; if ((S_IFMT & st.st_mode) == S_IFDIR) { - n = snprintf(pss->p, end - pss->p, "=%s/%s", pss->reldir, dent.name); + n = lws_snprintf(pss->p, end - pss->p, "=%s/%s", pss->reldir, dent.name); f->uri = pss->p; } if (lws_get_mimetype(dent.name, NULL)) { - n = snprintf(pss->p, end - pss->p, "./serve/%s/%s", pss->reldir, dent.name); + n = lws_snprintf(pss->p, end - pss->p, "./serve/%s/%s", pss->reldir, dent.name); f->uri = pss->p; } if (f->uri) @@ -152,13 +152,13 @@ scan_dir(struct lws *wsi, struct per_session_data__tbl_dir *pss) icon = "📂"; f->icon = pss->p; - n = snprintf(pss->p, end - pss->p, "%s", icon); + n = lws_snprintf(pss->p, end - pss->p, "%s", icon); pss->p += n + 1; f->date = pss->p; tm = gmtime(&st.st_mtime); strftime(da, sizeof(da), "%Y-%b-%d %H:%M:%S %z", tm); - n = snprintf(pss->p, end - pss->p, "%s", da); + n = lws_snprintf(pss->p, end - pss->p, "%s", da); pss->p += n + 1; f->size = st.st_size; @@ -244,11 +244,11 @@ callback_lws_table_dirlisting(struct lws *wsi, enum lws_callback_reasons reason, if (scan_dir(wsi, pss)) return 1; - p += snprintf(p, end - p, "{\"breadcrumbs\":["); + p += lws_snprintf(p, end - p, "{\"breadcrumbs\":["); q = pss->reldir; if (!q[0]) - p += snprintf(p, end - p, "{\"name\":\"top\"}"); + p += lws_snprintf(p, end - p, "{\"name\":\"top\"}"); while (*q) { @@ -280,48 +280,48 @@ callback_lws_table_dirlisting(struct lws *wsi, enum lws_callback_reasons reason, q = q1 + 1; } if (!first) - p += snprintf(p, end - p, ","); + p += lws_snprintf(p, end - p, ","); else first = 0; - p += snprintf(p, end - p, "{\"name\":\"%s\"", + p += lws_snprintf(p, end - p, "{\"name\":\"%s\"", lws_json_purify(e, s, sizeof(e))); if (*q) { w = s1; while (w[0] == '/' && w[1] == '/') w++; - p += snprintf(p, end - p, ",\"url\":\"%s\"", + p += lws_snprintf(p, end - p, ",\"url\":\"%s\"", lws_json_purify(e, w, sizeof(e))); } - p += snprintf(p, end - p, "}"); + p += lws_snprintf(p, end - p, "}"); if (!q1) break; } - p += snprintf(p, end - p, "],\"data\":["); + p += lws_snprintf(p, end - p, "],\"data\":["); f = pss->base.next; while (f) { /* format in JSON */ - p += snprintf(p, end - p, "{\"Icon\":\"%s\",", + p += lws_snprintf(p, end - p, "{\"Icon\":\"%s\",", lws_json_purify(e, f->icon, sizeof(e))); - p += snprintf(p, end - p, " \"Date\":\"%s\",", + p += lws_snprintf(p, end - p, " \"Date\":\"%s\",", lws_json_purify(e, f->date, sizeof(e))); - p += snprintf(p, end - p, " \"Size\":\"%ld\",", + p += lws_snprintf(p, end - p, " \"Size\":\"%ld\",", f->size); if (f->uri) - p += snprintf(p, end - p, " \"uri\":\"%s\",", + p += lws_snprintf(p, end - p, " \"uri\":\"%s\",", lws_json_purify(e, f->uri, sizeof(e))); - p += snprintf(p, end - p, " \"Name\":\"%s\"}", + p += lws_snprintf(p, end - p, " \"Name\":\"%s\"}", lws_json_purify(e, f->name, sizeof(e))); f = f->next; if (f) - p += snprintf(p, end - p, ","); + p += lws_snprintf(p, end - p, ","); } - p += snprintf(p, end - p, "]}"); + p += lws_snprintf(p, end - p, "]}"); free_scan_dir(pss); diff --git a/plugins/protocol_dumb_increment.c b/plugins/protocol_dumb_increment.c index 51db911f..042c5dc9 100644 --- a/plugins/protocol_dumb_increment.c +++ b/plugins/protocol_dumb_increment.c @@ -96,7 +96,7 @@ callback_dumb_increment(struct lws *wsi, enum lws_callback_reasons reason, break; case LWS_CALLBACK_SERVER_WRITEABLE: - n = snprintf((char *)p, sizeof(buf) - LWS_PRE, "%d", pss->number++); + n = lws_snprintf((char *)p, sizeof(buf) - LWS_PRE, "%d", pss->number++); m = lws_write(wsi, p, n, LWS_WRITE_TEXT); if (m < n) { lwsl_err("ERROR %d writing to di socket\n", n); diff --git a/plugins/protocol_lws_status.c b/plugins/protocol_lws_status.c index 67b53980..49fa6b99 100644 --- a/plugins/protocol_lws_status.c +++ b/plugins/protocol_lws_status.c @@ -130,7 +130,7 @@ callback_lws_status(struct lws *wsi, enum lws_callback_reasons reason, switch (pss->walk) { case WALK_INITIAL: n = LWS_WRITE_TEXT | LWS_WRITE_NO_FIN;; - p += snprintf(p, end - p, + p += lws_snprintf(p, end - p, "{ \"version\":\"%s\"," " \"hostname\":\"%s\"," " \"wsi\":\"%d\", \"conns\":[", @@ -166,7 +166,7 @@ callback_lws_status(struct lws *wsi, enum lws_callback_reasons reason, } lws_get_peer_simple(pss->walk_next->wsi, ip, sizeof(ip)); - p += snprintf(p, end - p, + p += lws_snprintf(p, end - p, "{\"peer\":\"%s\",\"time\":\"%ld\"," "\"ua\":\"%s\"}", ip, (unsigned long)pss->walk_next->time_est, diff --git a/plugins/protocol_post_demo.c b/plugins/protocol_post_demo.c index 2b07d5e0..18b6b602 100644 --- a/plugins/protocol_post_demo.c +++ b/plugins/protocol_post_demo.c @@ -147,16 +147,16 @@ callback_post_demo(struct lws *wsi, enum lws_callback_reasons reason, ""); for (n = 0; n < ARRAY_SIZE(param_names); n++) - p += snprintf((char *)p, end - p, + p += lws_snprintf((char *)p, end - p, "", param_names[n], lws_spa_get_length(pss->spa, n), lws_spa_get_string(pss->spa, n)); - p += snprintf((char *)p, end - p, "
    NameLengthValue
    %s%d%s

    filename: %s, length %ld", + p += lws_snprintf((char *)p, end - p, "
    filename: %s, length %ld", pss->filename, pss->file_length); - p += snprintf((char *)p, end - p, ""); + p += lws_snprintf((char *)p, end - p, ""); pss->result_len = p - (unsigned char *)(pss->result + LWS_PRE); n = LWS_PRE + 1024; diff --git a/test-server/test-fraggle.c b/test-server/test-fraggle.c index 2137e7b5..80aaea58 100644 --- a/test-server/test-fraggle.c +++ b/test-server/test-fraggle.c @@ -349,7 +349,7 @@ int main(int argc, char **argv) struct lws_client_connect_info i; address = argv[optind]; - snprintf(ads_port, sizeof(ads_port), "%s:%u", + lws_snprintf(ads_port, sizeof(ads_port), "%s:%u", address, port & 65535); memset(&i, 0, sizeof(i)); i.context = context; diff --git a/test-server/test-ping.c b/test-server/test-ping.c index d10e20da..25b8a15c 100644 --- a/test-server/test-ping.c +++ b/test-server/test-ping.c @@ -457,7 +457,7 @@ int main(int argc, char **argv) /* create client websockets using dumb increment protocol */ address = argv[optind]; - snprintf(ads_port, sizeof(ads_port), "%s:%u", + lws_snprintf(ads_port, sizeof(ads_port), "%s:%u", address, port & 65535); lwsl_notice("Connecting to %s...\n", ads_port); memset(&i, 0, sizeof(i)); diff --git a/test-server/test-server-http.c b/test-server/test-server-http.c index e15cef98..60cf02a4 100644 --- a/test-server/test-server-http.c +++ b/test-server/test-server-http.c @@ -460,16 +460,16 @@ int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, ""); for (n = 0; n < ARRAY_SIZE(param_names); n++) - p += snprintf((char *)p, end - p, + p += lws_snprintf((char *)p, end - p, "", param_names[n], lws_spa_get_length(pss->spa, n), lws_spa_get_string(pss->spa, n)); - p += snprintf((char *)p, end - p, "
    NameLengthValue
    %s%d%s

    filename: %s, length %ld", + p += lws_snprintf((char *)p, end - p, "
    filename: %s, length %ld", pss->filename, pss->file_length); - p += snprintf((char *)p, end - p, ""); + p += lws_snprintf((char *)p, end - p, ""); pss->result_len = p - (unsigned char *)(pss->result + LWS_PRE); p = buffer + LWS_PRE; diff --git a/test-server/test-server-status.c b/test-server/test-server-status.c index d85897b8..50fe5bf9 100644 --- a/test-server/test-server-status.c +++ b/test-server/test-server-status.c @@ -42,7 +42,7 @@ update_status(struct lws *wsi, struct per_session_data__lws_status *pss) struct tm tm; #endif - p += snprintf(p, 512, " { %s, \"wsi\":\"%d\", \"conns\":[", + p += lws_snprintf(p, 512, " { %s, \"wsi\":\"%d\", \"conns\":[", server_info, live_wsi); /* render the list */ @@ -67,7 +67,7 @@ update_status(struct lws *wsi, struct per_session_data__lws_status *pss) if (subsequent) *p++ = ','; subsequent = 1; - p += snprintf(p, sizeof(cache) - (p - start) - 1, + p += lws_snprintf(p, sizeof(cache) - (p - start) - 1, "{\"peer\":\"%s\",\"time\":\"%s\"," "\"ua\":\"%s\"}", (*pp)->ip, date, (*pp)->user_agent);