From: Andy Green Date: Thu, 15 Dec 2016 23:37:43 +0000 (+0800) Subject: context deprecation X-Git-Tag: accepted/tizen/4.0/unified/20171012.191640~287 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=be9fb919d145d662d7a2ed4ae8e6912f75937449;p=platform%2Fupstream%2Flibwebsockets.git context deprecation 1) This makes lwsws run a parent process with the original permissions. But this process is only able to respond to SIGHUP, it doesn't do anything else. 2) You can send this parent process a SIGHUP now to cause it to - close listening sockets in existing lwsws processes - mark those processes as to exit when the number of active connections on the falls to zero - spawn a fresh child process from scratch, using latest configuration file content, latest plugins, etc. It can now reopen listening sockets if it chooses to, or open different listen ports or whatever. Notes: 1) lws_context_destroy() has been split into two pieces... the reason for the split is the first part closes the per-vhost protocols, but since they may have created libuv objects in the per-vhost protocol storage, these cannot be freed until after the loop has been run. That's the purpose of the second part of the context destruction, lws_context_destroy2(). For compatibility, if you are not using libuv, the first part calls the second part. However if you are using libuv, you must now call the second part from your own main.c after the first part. --- diff --git a/README.lwsws.md b/README.lwsws.md index da790be..165ed60 100644 --- a/README.lwsws.md +++ b/README.lwsws.md @@ -451,7 +451,7 @@ Enable the protocol like this on a vhost's ws-protocols section "update-ms": "5000" } ``` -"update-ms" is used to control how often updated JSON is sent on a ws link. +`"update-ms"` is used to control how often updated JSON is sent on a ws link. And map the provided HTML into the vhost in the mounts section ``` @@ -462,23 +462,78 @@ And map the provided HTML into the vhost in the mounts section } ``` You might choose to put it on its own vhost which has "interface": "lo", so it's not -externally visible. +externally visible, or use the Basic Auth support to require authentication to +access it. +`"hide-vhosts": "{0 | 1}"` lets you control if information about your vhosts is included. +Since this includes mounts, you might not want to leak that information, mount names, +etc. + +`"filespath":"{path}"` lets you give a server filepath which is read and sent to the browser +on each refresh. For example, you can provide server temperature information on most +Linux systems by giving an appropriate path down /sys. + +This may be given multiple times. + + +@section lwswsreload Lwsws Configuration Reload + +You may send lwsws a `HUP` signal, by, eg + +``` +$ sudo killall -HUP lwsws +``` + +This causes lwsws to "deprecate" the existing lwsws process, and remove and close all of +its listen sockets, but otherwise allowing it to continue to run, until all +of its open connections close. + +When a deprecated lwsws process has no open connections left, it is destroyed +automatically. + +After sending the SIGHUP to the main lwsws process, a new lwsws process, which can +pick up the newly-available listen sockets, and use the current configuration +files, is automatically started. + +The new configuration may differ from the original one in arbitrary ways, the new +context is created from scratch each time without reference to the original one. + +Notes + +1) Protocols that provide a "shared world" like mirror will have as many "worlds" +as there are lwsws processes still active. People connected to a deprecated lwsws +process remain connected to the existing peers. + +But any new connections will apply to the new lwsws process, which does not share +per-vhost "shared world" data with the deprecated process. That means no new +connections on the deprecated context, ie a "shrinking world" for those guys, and a +"growing world" for people who connect after the SIGHUP. + +2) The new lwsws process owes nothing to the previous one. It starts with fresh +plugins, fresh configuration, fresh root privileges if that how you start it. + +The plugins may have been updated in arbitrary ways including struct size changes +etc, and lwsws or lws may also have been updated arbitrarily. + +3) A root parent process is left up that is not able to do anything except +respond to SIGHUP or SIGTERM. Actual serving and network listening etc happens +in child processes which use the privileges set in the lwsws config files. @section lwswssysd Lwsws Integration with Systemd lwsws needs a service file like this as `/usr/lib/systemd/system/lwsws.service` ``` - [Unit] - Description=Libwebsockets Web Server - After=syslog.target - - [Service] - ExecStart=/usr/local/bin/lwsws - StandardError=null - - [Install] - WantedBy=multi-user.target +[Unit] +Description=Libwebsockets Web Server +After=syslog.target + +[Service] +ExecStart=/usr/local/bin/lwsws +ExecReload=/usr/bin/killall -s SIGHUP lwsws ; sleep 1 ; /usr/local/bin/lwsws +StandardError=null + +[Install] +WantedBy=multi-user.target ``` You can find this prepared in `./lwsws/usr-lib-systemd-system-lwsws.service` diff --git a/doc/html/globals_func.html b/doc/html/globals_func.html index 3dfc3ec..7796fcc 100644 --- a/doc/html/globals_func.html +++ b/doc/html/globals_func.html @@ -138,6 +138,9 @@ $(document).ready(function(){initNavTree('globals_func.html','');});
  • lws_close_reason() : libwebsockets.h
  • +
  • lws_context_deprecate() +: libwebsockets.h +
  • lws_context_destroy() : libwebsockets.h
  • @@ -262,7 +265,7 @@ $(document).ready(function(){initNavTree('globals_func.html','');}); : libwebsockets.h
  • lws_json_dump_context() -: libwebsockets.h +: libwebsockets.h
  • lws_json_dump_vhost() : libwebsockets.h diff --git a/doc/html/globals_l.html b/doc/html/globals_l.html index d3ccacd..1f63a4d 100644 --- a/doc/html/globals_l.html +++ b/doc/html/globals_l.html @@ -342,6 +342,9 @@ $(document).ready(function(){initNavTree('globals_l.html','');});
  • LWS_CLOSE_STATUS_UNEXPECTED_CONDITION : libwebsockets.h
  • +
  • lws_context_deprecate() +: libwebsockets.h +
  • lws_context_destroy() : libwebsockets.h
  • @@ -478,7 +481,7 @@ $(document).ready(function(){initNavTree('globals_l.html','');}); : libwebsockets.h
  • lws_json_dump_context() -: libwebsockets.h +: libwebsockets.h
  • lws_json_dump_vhost() : libwebsockets.h diff --git a/doc/html/group__client.html b/doc/html/group__client.html index e726aef..c5b42ef 100644 --- a/doc/html/group__client.html +++ b/doc/html/group__client.html @@ -119,7 +119,7 @@ LWS_VISIBLE LWS_EXTERN void <

    #include <lib/libwebsockets.h>

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

    -
    2003  {
    2004  LCCSCF_USE_SSL = (1 << 0),
    2005  LCCSCF_ALLOW_SELFSIGNED = (1 << 1),
    2006  LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK = (1 << 2),
    2007  LCCSCF_ALLOW_EXPIRED = (1 << 3)
    2008 };
    +
    2039  {
    2040  LCCSCF_USE_SSL = (1 << 0),
    2041  LCCSCF_ALLOW_SELFSIGNED = (1 << 1),
    2042  LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK = (1 << 2),
    2043  LCCSCF_ALLOW_EXPIRED = (1 << 3)
    2044 };

    Function Documentation

    diff --git a/doc/html/group__context-and-vhost.html b/doc/html/group__context-and-vhost.html index a395c40..0ed92fb 100644 --- a/doc/html/group__context-and-vhost.html +++ b/doc/html/group__context-and-vhost.html @@ -63,6 +63,7 @@ $(document).ready(function(){initNavTree('group__context-and-vhost.html','');});
    @@ -82,6 +83,12 @@ Data Structures struct  lws_protocol_vhost_options   + + + +

    +Typedefs

    +typedef int(* lws_reload_func) (void)
     
    + + + + + + @@ -131,8 +146,8 @@ Functions - - + +

    Enumerations

    enum  lws_context_options {
    @@ -117,6 +124,14 @@ Functions
     
    LWS_VISIBLE LWS_EXTERN void lws_context_destroy (struct lws_context *context)
     
    +LWS_VISIBLE LWS_EXTERN void lws_context_destroy2 (struct lws_context *context)
     
    LWS_VISIBLE LWS_EXTERN void lws_context_deprecate (struct lws_context *context, lws_reload_func cb)
     
    +LWS_VISIBLE LWS_EXTERN int lws_context_is_deprecated (struct lws_context *context)
     
    LWS_VISIBLE LWS_EXTERN int lws_set_proxy (struct lws_vhost *vhost, const char *proxy)
     
    LWS_EXTERN LWS_VISIBLE struct lws_vhost * lws_create_vhost (struct lws_context *context, struct lws_context_creation_info *info)
     
    LWS_VISIBLE LWS_EXTERN int lws_json_dump_vhost (const struct lws_vhost *vh, char *buf, int len)
     
    LWS_VISIBLE LWS_EXTERN int lws_json_dump_context (const struct lws_context *context, char *buf, int len)
     
    LWS_VISIBLE LWS_EXTERN int lws_json_dump_context (const struct lws_context *context, char *buf, int len, int hide_vhosts)
     
    LWS_VISIBLE LWS_EXTERN void * lws_context_user (struct lws_context *context)
     
    @@ -215,6 +230,60 @@ Functions

    Function Documentation

    + +

    § lws_context_deprecate()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    LWS_VISIBLE LWS_EXTERN void lws_context_deprecate (struct lws_context * context,
    lws_reload_func cb 
    )
    +
    + +

    #include <lib/libwebsockets.h>

    +

    lws_context_deprecate() - Deprecate the websocket context

    Parameters
    + + +
    contextWebsocket context
     This function is used on an existing context before superceding it
    + with a new context.
    +
    + It closes any listen sockets in the context, so new connections are
    + not possible.
    +
    + And it marks the context to be deleted when the number of active
    + connections into it falls to zero.
    +
    + Otherwise if you attach the deprecated context to the replacement
    + context when it has been created using lws_context_attach_deprecated()
    + both any deprecated and the new context will service their connections.
    +
    + This is aimed at allowing seamless configuration reloads.
    +
    + The callback cb will be called after the listen sockets are actually
    + closed and may be reopened.  In the callback the new context should be
    + configured and created.  (With libuv, socket close happens async after
    + more loop events).
    +
    +
    + +
    +

    § lws_context_destroy()

    @@ -389,8 +458,8 @@ Functions - -

    § lws_json_dump_context()

    + +

    § lws_json_dump_context()

    @@ -411,7 +480,13 @@ Functions int  - len  + len, + + + + + int  + hide_vhosts  @@ -422,7 +497,7 @@ Functions

    #include <lib/libwebsockets.h>

    -

    lws_json_dump_context() - describe context state and stats in JSON

    +

    lws_json_dump_context() - describe context state and stats in JSON

    Parameters
    diff --git a/doc/html/group__context-and-vhost.js b/doc/html/group__context-and-vhost.js index 9a942a7..8e167d5 100644 --- a/doc/html/group__context-and-vhost.js +++ b/doc/html/group__context-and-vhost.js @@ -72,12 +72,13 @@ var group__context_and_vhost = [ "LWS_SERVER_OPTION_IPV6_V6ONLY_VALUE", "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aca5d42820b65eac5618ec3f0bd8a1160", null ], [ "LWS_SERVER_OPTION_UV_NO_SIGSEGV_SIGFPE_SPIN", "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a87a824b2e812f4c3e7f2c4a1ea4f8abd", null ] ] ], + [ "lws_context_deprecate", "group__context-and-vhost.html#ga1863f0a15ab9da0f07be7bd66230d232", null ], [ "lws_context_destroy", "group__context-and-vhost.html#ga8ee0314028755f1ddfa9428e09b4fddb", null ], [ "lws_context_user", "group__context-and-vhost.html#gaeb12f934bfd178bd2132a9e73fc641da", null ], [ "lws_create_context", "group__context-and-vhost.html#gaf2fff58562caab7510c41eeac85a8648", null ], [ "lws_create_vhost", "group__context-and-vhost.html#ga0c54c667ccd9b8b3dddcd123ca72f87c", null ], [ "lws_get_vhost", "group__context-and-vhost.html#ga06e77ce2916f8bc9826ef8d9d68e3932", null ], - [ "lws_json_dump_context", "group__context-and-vhost.html#gae2134657cdd2ea7a59e13ad314e4c50d", null ], + [ "lws_json_dump_context", "group__context-and-vhost.html#ga1dce5453d72a2037051aba5410e18135", null ], [ "lws_json_dump_vhost", "group__context-and-vhost.html#ga94e6cc2223c4eec316b13bcebc3628b6", null ], [ "lws_set_proxy", "group__context-and-vhost.html#ga7e9d5405547a457d86e0b4f0ae2bb1c4", null ], [ "lws_vhost_get", "group__context-and-vhost.html#ga8db03e19a372e34ac25cf21af894a02c", null ], diff --git a/doc/html/group__form-parsing.html b/doc/html/group__form-parsing.html index cf1eda9..4dd28ce 100644 --- a/doc/html/group__form-parsing.html +++ b/doc/html/group__form-parsing.html @@ -156,9 +156,9 @@ Functions
    contextthe context
    LWS_UFS_OPEN 

    a new file is starting to arrive

    -
    2847  {
    2852  LWS_UFS_OPEN
    2854 };
    Definition: libwebsockets.h:2850
    -
    Definition: libwebsockets.h:2852
    -
    Definition: libwebsockets.h:2848
    +
    2883  {
    2888  LWS_UFS_OPEN
    2890 };
    Definition: libwebsockets.h:2886
    +
    Definition: libwebsockets.h:2888
    +
    Definition: libwebsockets.h:2884
    diff --git a/doc/html/group__sending-data.html b/doc/html/group__sending-data.html index af930e6..ebd04f5 100644 --- a/doc/html/group__sending-data.html +++ b/doc/html/group__sending-data.html @@ -124,13 +124,13 @@ Functions LWS_WRITE_CLIENT_IGNORE_XOR_MASK 

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

    -
    3191  {
    3192  LWS_WRITE_TEXT = 0,
    3196  LWS_WRITE_BINARY = 1,
    3202  LWS_WRITE_HTTP = 3,
    3205  /* LWS_WRITE_CLOSE is handled by lws_close_reason() */
    3206  LWS_WRITE_PING = 5,
    3207  LWS_WRITE_PONG = 6,
    3208 
    3209  /* Same as write_http but we know this write ends the transaction */
    3210  LWS_WRITE_HTTP_FINAL = 7,
    3211 
    3212  /* HTTP2 */
    3213 
    3221  /****** add new things just above ---^ ******/
    3222 
    3223  /* flags */
    3224 
    3225  LWS_WRITE_NO_FIN = 0x40,
    3232 };
    Definition: libwebsockets.h:3202
    -
    Definition: libwebsockets.h:3225
    -
    Definition: libwebsockets.h:3192
    -
    Definition: libwebsockets.h:3196
    -
    Definition: libwebsockets.h:3228
    -
    Definition: libwebsockets.h:3199
    -
    Definition: libwebsockets.h:3214
    +
    3230  {
    3231  LWS_WRITE_TEXT = 0,
    3235  LWS_WRITE_BINARY = 1,
    3241  LWS_WRITE_HTTP = 3,
    3244  /* LWS_WRITE_CLOSE is handled by lws_close_reason() */
    3245  LWS_WRITE_PING = 5,
    3246  LWS_WRITE_PONG = 6,
    3247 
    3248  /* Same as write_http but we know this write ends the transaction */
    3249  LWS_WRITE_HTTP_FINAL = 7,
    3250 
    3251  /* HTTP2 */
    3252 
    3260  /****** add new things just above ---^ ******/
    3261 
    3262  /* flags */
    3263 
    3264  LWS_WRITE_NO_FIN = 0x40,
    3271 };
    Definition: libwebsockets.h:3241
    +
    Definition: libwebsockets.h:3264
    +
    Definition: libwebsockets.h:3231
    +
    Definition: libwebsockets.h:3235
    +
    Definition: libwebsockets.h:3267
    +
    Definition: libwebsockets.h:3238
    +
    Definition: libwebsockets.h:3253
    diff --git a/doc/html/group__smtp.html b/doc/html/group__smtp.html index 4a42dda..7eae8ec 100644 --- a/doc/html/group__smtp.html +++ b/doc/html/group__smtp.html @@ -149,15 +149,15 @@ Functions LGSSMTP_SENT_QUIT 

    sent the session quit

    -
    4146  {
    4147  LGSSMTP_IDLE,
    4152  LGSSMTP_SENT_TO,
    4156 };
    Definition: libwebsockets.h:4149
    -
    Definition: libwebsockets.h:4154
    -
    Definition: libwebsockets.h:4147
    -
    Definition: libwebsockets.h:4148
    -
    Definition: libwebsockets.h:4152
    -
    Definition: libwebsockets.h:4151
    -
    Definition: libwebsockets.h:4155
    -
    Definition: libwebsockets.h:4150
    -
    Definition: libwebsockets.h:4153
    +
    4185  {
    4186  LGSSMTP_IDLE,
    4191  LGSSMTP_SENT_TO,
    4195 };
    Definition: libwebsockets.h:4188
    +
    Definition: libwebsockets.h:4193
    +
    Definition: libwebsockets.h:4186
    +
    Definition: libwebsockets.h:4187
    +
    Definition: libwebsockets.h:4191
    +
    Definition: libwebsockets.h:4190
    +
    Definition: libwebsockets.h:4194
    +
    Definition: libwebsockets.h:4189
    +
    Definition: libwebsockets.h:4192
    diff --git a/doc/html/group__uv.html b/doc/html/group__uv.html index 78ab43b..93d426e 100644 --- a/doc/html/group__uv.html +++ b/doc/html/group__uv.html @@ -78,6 +78,9 @@ LWS_VISIBLE LWS_EXTERN void < LWS_VISIBLE LWS_EXTERN void lws_libuv_stop (struct lws_context *context)   + +LWS_VISIBLE LWS_EXTERN void lws_libuv_stop_without_kill (const struct lws_context *context, int tsi) +  LWS_VISIBLE LWS_EXTERN int lws_uv_initloop (struct lws_context *context, uv_loop_t *loop, int tsi)   diff --git a/doc/html/group__vhost-mounts.html b/doc/html/group__vhost-mounts.html index 05f38f6..41fd8b9 100644 --- a/doc/html/group__vhost-mounts.html +++ b/doc/html/group__vhost-mounts.html @@ -123,13 +123,13 @@ Enumerations LWSMPRO_CALLBACK 

    hand by named protocol's callback

    -
    1926  {
    1927  LWSMPRO_HTTP = 0,
    1928  LWSMPRO_HTTPS = 1,
    1929  LWSMPRO_FILE = 2,
    1930  LWSMPRO_CGI = 3,
    1931  LWSMPRO_REDIR_HTTP = 4,
    1932  LWSMPRO_REDIR_HTTPS = 5,
    1933  LWSMPRO_CALLBACK = 6,
    1934 };
    Definition: libwebsockets.h:1930
    -
    Definition: libwebsockets.h:1928
    -
    Definition: libwebsockets.h:1929
    -
    Definition: libwebsockets.h:1931
    -
    Definition: libwebsockets.h:1932
    -
    Definition: libwebsockets.h:1927
    -
    Definition: libwebsockets.h:1933
    +
    1962  {
    1963  LWSMPRO_HTTP = 0,
    1964  LWSMPRO_HTTPS = 1,
    1965  LWSMPRO_FILE = 2,
    1966  LWSMPRO_CGI = 3,
    1967  LWSMPRO_REDIR_HTTP = 4,
    1968  LWSMPRO_REDIR_HTTPS = 5,
    1969  LWSMPRO_CALLBACK = 6,
    1970 };
    Definition: libwebsockets.h:1966
    +
    Definition: libwebsockets.h:1964
    +
    Definition: libwebsockets.h:1965
    +
    Definition: libwebsockets.h:1967
    +
    Definition: libwebsockets.h:1968
    +
    Definition: libwebsockets.h:1963
    +
    Definition: libwebsockets.h:1969
    diff --git a/doc/html/index.html b/doc/html/index.html index 9413de8..06f0d03 100644 --- a/doc/html/index.html +++ b/doc/html/index.html @@ -74,7 +74,8 @@ $(document).ready(function(){initNavTree('index.html','');});
  • account management (including registration, email verification, lost pw etc)
  • strong ssl PFS support (A+ on SSLlabs test)
  • -

    You can browse by api category here.

    +

    You can browse by api category here

    +

    A collection of READMEs for build, coding, lwsws etc are here

    diff --git a/doc/html/libwebsockets_8h.html b/doc/html/libwebsockets_8h.html index a896a53..cac73ad 100644 --- a/doc/html/libwebsockets_8h.html +++ b/doc/html/libwebsockets_8h.html @@ -161,6 +161,9 @@ typedef int(* lws_plugin_i typedef int(* lws_plugin_destroy_func) (struct lws_context *)   + +typedef int(* lws_reload_func) (void) +  typedef const char *(* lws_process_html_state_cb) (void *data, int index)   @@ -696,6 +699,14 @@ void ets_timer_arm_new   LWS_VISIBLE LWS_EXTERN void lws_context_destroy (struct lws_context *context)   + +LWS_VISIBLE LWS_EXTERN void lws_context_destroy2 (struct lws_context *context) +  +LWS_VISIBLE LWS_EXTERN void lws_context_deprecate (struct lws_context *context, lws_reload_func cb) +  + +LWS_VISIBLE LWS_EXTERN int lws_context_is_deprecated (struct lws_context *context) +  LWS_VISIBLE LWS_EXTERN int lws_set_proxy (struct lws_vhost *vhost, const char *proxy)   LWS_EXTERN LWS_VISIBLE struct lws_vhost * lws_create_vhost (struct lws_context *context, struct lws_context_creation_info *info) @@ -710,8 +721,8 @@ void ets_timer_arm_new   LWS_VISIBLE LWS_EXTERN int lws_json_dump_vhost (const struct lws_vhost *vh, char *buf, int len)   -LWS_VISIBLE LWS_EXTERN int lws_json_dump_context (const struct lws_context *context, char *buf, int len) -  +LWS_VISIBLE LWS_EXTERN int lws_json_dump_context (const struct lws_context *context, char *buf, int len, int hide_vhosts) +  LWS_VISIBLE LWS_EXTERN void * lws_context_user (struct lws_context *context)   LWS_VISIBLE LWS_EXTERN struct lws * lws_client_connect_via_info (struct lws_client_connect_info *ccinfo) @@ -819,6 +830,9 @@ LWS_VISIBLE LWS_EXTERN void < LWS_VISIBLE LWS_EXTERN void lws_libuv_stop (struct lws_context *context)   + +LWS_VISIBLE LWS_EXTERN void lws_libuv_stop_without_kill (const struct lws_context *context, int tsi) +  LWS_VISIBLE LWS_EXTERN int lws_uv_initloop (struct lws_context *context, uv_loop_t *loop, int tsi)   diff --git a/doc/html/libwebsockets_8h.js b/doc/html/libwebsockets_8h.js index d02bab2..a0410b6 100644 --- a/doc/html/libwebsockets_8h.js +++ b/doc/html/libwebsockets_8h.js @@ -15,6 +15,7 @@ var libwebsockets_8h = [ "lws_plugin_destroy_func", "group__Protocols-and-Plugins.html#ga83f7a924ba790fa273476075a59f08b0", null ], [ "lws_plugin_init_func", "group__Protocols-and-Plugins.html#ga40994491e1567f91f579d2b444775266", null ], [ "lws_process_html_state_cb", "group__html-chunked-substitution.html#ga669d3d7ce2d5f193473f649a89b3e7ac", null ], + [ "lws_reload_func", "group__context-and-vhost.html#ga256a49a07d2dd5062d6cf7bdc3668096", null ], [ "lws_sockfd_type", "libwebsockets_8h.html#adedbc79528b71a5c7f27cde87100c9aa", null ], [ "lws_spa_fileupload_cb", "group__form-parsing.html#ga5a70527c0861c2ffa3d29333a6aa7f8e", null ], [ "SSL", "libwebsockets_8h.html#ac3abb8b7e6d29a0292797230e4031681", null ], @@ -414,7 +415,10 @@ var libwebsockets_8h = [ "lws_client_connect_via_info", "group__client.html#ga0c966136905f467816307cfba6deb5fd", null ], [ "lws_client_http_body_pending", "group__client.html#ga26588fb345083076c14169dd5859f57a", null ], [ "lws_close_reason", "group__wsclose.html#gaa1c863415d1783cd8de7938aa6efa262", null ], + [ "lws_context_deprecate", "group__context-and-vhost.html#ga1863f0a15ab9da0f07be7bd66230d232", null ], [ "lws_context_destroy", "group__context-and-vhost.html#ga8ee0314028755f1ddfa9428e09b4fddb", null ], + [ "lws_context_destroy2", "group__context-and-vhost.html#gaa327c9d543edaddf06765d2c6131065c", null ], + [ "lws_context_is_deprecated", "group__context-and-vhost.html#gaf023d1898a5f773288568f55b82d19e8", null ], [ "lws_context_user", "group__context-and-vhost.html#gaeb12f934bfd178bd2132a9e73fc641da", null ], [ "lws_create_context", "group__context-and-vhost.html#gaf2fff58562caab7510c41eeac85a8648", null ], [ "lws_create_vhost", "group__context-and-vhost.html#ga0c54c667ccd9b8b3dddcd123ca72f87c", null ], @@ -459,11 +463,12 @@ var libwebsockets_8h = [ "lws_is_cgi", "group__wsstatus.html#ga4ad226d5e01024b4046f4a5a37199aa1", null ], [ "lws_is_final_fragment", "group__wsstatus.html#ga08e9ee165fca503fd9427d55cfecac37", null ], [ "lws_is_ssl", "group__wsstatus.html#ga26a140623d202dd2bf2004deb6994baa", null ], - [ "lws_json_dump_context", "group__context-and-vhost.html#gae2134657cdd2ea7a59e13ad314e4c50d", null ], + [ "lws_json_dump_context", "group__context-and-vhost.html#ga1dce5453d72a2037051aba5410e18135", null ], [ "lws_json_dump_vhost", "group__context-and-vhost.html#ga94e6cc2223c4eec316b13bcebc3628b6", null ], [ "lws_json_purify", "group__pur.html#gab15187efcfa256b7c928562c182b92a3", null ], [ "lws_libuv_run", "group__uv.html#ga097c89497824d4de225a85a00661fc89", null ], [ "lws_libuv_stop", "group__uv.html#ga3c75cd6ec3f80fc0a0c8ead4c4e71a15", null ], + [ "lws_libuv_stop_without_kill", "group__uv.html#gaa17758e1f852017a2271d8fb3e9305aa", null ], [ "lws_now_secs", "group__misc.html#ga33bf2635033710b25f931b57ed663e1e", null ], [ "lws_parse_uri", "group__misc.html#ga1ec0d9faac5d3a5824d765c287c043aa", null ], [ "lws_partial_buffered", "group__wsstatus.html#gaeca4afc94b1f026034f99cbba37e2f85", null ], diff --git a/doc/html/libwebsockets_8h_source.html b/doc/html/libwebsockets_8h_source.html index 4b92013..4c89a91 100644 --- a/doc/html/libwebsockets_8h_source.html +++ b/doc/html/libwebsockets_8h_source.html @@ -64,9 +64,9 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    libwebsockets.h
    -Go to the documentation of this file.
    1 /*
    2  * libwebsockets - small server side websockets and web server implementation
    3  *
    4  * Copyright (C) 2010-2016 Andy Green <andy@warmcat.com>
    5  *
    6  * This library is free software; you can redistribute it and/or
    7  * modify it under the terms of the GNU Lesser General Public
    8  * License as published by the Free Software Foundation:
    9  * version 2.1 of the License.
    10  *
    11  * This library is distributed in the hope that it will be useful,
    12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    14  * Lesser General Public License for more details.
    15  *
    16  * You should have received a copy of the GNU Lesser General Public
    17  * License along with this library; if not, write to the Free Software
    18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
    19  * MA 02110-1301 USA
    20  */
    21 
    24 #ifndef LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C
    25 #define LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C
    26 
    27 #ifdef __cplusplus
    28 #include <cstddef>
    29 #include <cstdarg>
    30 #ifdef MBED_OPERATORS
    31 #include "mbed-drivers/mbed.h"
    32 #include "sal-iface-eth/EthernetInterface.h"
    33 #include "sockets/TCPListener.h"
    34 #include "sal-stack-lwip/lwipv4_init.h"
    35 
    36 namespace {
    37 }
    38 using namespace mbed::Sockets::v0;
    39 
    40 
    41 struct sockaddr_in;
    42 struct lws;
    43 
    44 class lws_conn {
    45  public:
    46  lws_conn():
    47  ts(NULL),
    48  wsi(NULL),
    49  writeable(1),
    50  awaiting_on_writeable(0)
    51  {
    52  }
    53 
    54 public:
    55  void set_wsi(struct lws *_wsi) { wsi = _wsi; }
    56  int actual_onRX(Socket *s);
    57  void onRX(Socket *s);
    58  void onError(Socket *s, socket_error_t err);
    59  void onDisconnect(TCPStream *s);
    60  void onSent(Socket *s, uint16_t len);
    61  void serialized_writeable(struct lws *wsi);
    62 
    63 public:
    64  TCPStream *ts;
    65 
    66 public:
    67  struct lws *wsi;
    68  char writeable;
    69  char awaiting_on_writeable;
    70 };
    71 
    73 public:
    75  srv(SOCKET_STACK_LWIP_IPV4)
    76  {
    77  srv.setOnError(TCPStream::ErrorHandler_t(this,
    79  }
    80 
    81  void start(const uint16_t port);
    83 protected:
    84  void onRX(Socket *s);
    85  void onError(Socket *s, socket_error_t err);
    86  void onIncoming(TCPListener *s, void *impl);
    87  void onDisconnect(TCPStream *s);
    89 public:
    90  TCPListener srv;
    91 };
    92 
    93 #endif
    94 
    95 extern "C" {
    96 #else
    97 #include <stdarg.h>
    98 #endif
    99 
    100 #if defined(MBED_OPERATORS) || defined(LWS_WITH_ESP8266)
    101 struct sockaddr_in;
    102 #define LWS_POSIX 0
    103 #else
    104 #define LWS_POSIX 1
    105 #endif
    106 
    107 #include "lws_config.h"
    108 
    109 #if defined(WIN32) || defined(_WIN32)
    110 #ifndef WIN32_LEAN_AND_MEAN
    111 #define WIN32_LEAN_AND_MEAN
    112 #endif
    113 
    114 #include <winsock2.h>
    115 #include <ws2tcpip.h>
    116 #include <stddef.h>
    117 #include <basetsd.h>
    118 #ifndef _WIN32_WCE
    119 #include <fcntl.h>
    120 #else
    121 #define _O_RDONLY 0x0000
    122 #define O_RDONLY _O_RDONLY
    123 #endif
    124 
    125 // Visual studio older than 2015 and WIN_CE has only _stricmp
    126 #if (defined(_MSC_VER) && _MSC_VER < 1900) || defined(_WIN32_WCE)
    127 #define strcasecmp _stricmp
    128 #elif !defined(__MINGW32__)
    129 #define strcasecmp stricmp
    130 #endif
    131 #define getdtablesize() 30000
    132 
    133 #define LWS_INLINE __inline
    134 #define LWS_VISIBLE
    135 #define LWS_WARN_UNUSED_RESULT
    136 #define LWS_WARN_DEPRECATED
    137 
    138 #ifdef LWS_DLL
    139 #ifdef LWS_INTERNAL
    140 #define LWS_EXTERN extern __declspec(dllexport)
    141 #else
    142 #define LWS_EXTERN extern __declspec(dllimport)
    143 #endif
    144 #else
    145 #define LWS_EXTERN
    146 #endif
    147 
    148 #define LWS_INVALID_FILE INVALID_HANDLE_VALUE
    149 #define LWS_O_RDONLY _O_RDONLY
    150 
    151 #if !defined(__MINGW32__) && (!defined(_MSC_VER) || _MSC_VER < 1900) /* Visual Studio 2015 already defines this in <stdio.h> */
    152 #define lws_snprintf _snprintf
    153 #endif
    154 
    155 #ifndef __func__
    156 #define __func__ __FUNCTION__
    157 #endif
    158 
    159 #else /* NOT WIN32 */
    160 #include <unistd.h>
    161 
    162 #if defined(__NetBSD__) || defined(__FreeBSD__)
    163 #include <netinet/in.h>
    164 #endif
    165 
    166 #define LWS_INLINE inline
    167 #define LWS_O_RDONLY O_RDONLY
    168 
    169 #if !defined(MBED_OPERATORS) && !defined(LWS_WITH_ESP8266)
    170 #include <poll.h>
    171 #include <netdb.h>
    172 #define LWS_INVALID_FILE -1
    173 #else
    174 #define getdtablesize() (20)
    175 #define LWS_INVALID_FILE NULL
    176 #endif
    177 
    178 #if defined(__GNUC__)
    179 
    180 /* warn_unused_result attribute only supported by GCC 3.4 or later */
    181 #if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
    182 #define LWS_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
    183 #else
    184 #define LWS_WARN_UNUSED_RESULT
    185 #endif
    186 
    187 #define LWS_VISIBLE __attribute__((visibility("default")))
    188 #define LWS_WARN_DEPRECATED __attribute__ ((deprecated))
    189 #else
    190 #define LWS_VISIBLE
    191 #define LWS_WARN_UNUSED_RESULT
    192 #define LWS_WARN_DEPRECATED
    193 #endif
    194 
    195 #if defined(__ANDROID__)
    196 #include <unistd.h>
    197 #define getdtablesize() sysconf(_SC_OPEN_MAX)
    198 #endif
    199 
    200 #endif
    201 
    202 #ifdef LWS_USE_LIBEV
    203 #include <ev.h>
    204 #endif /* LWS_USE_LIBEV */
    205 #ifdef LWS_USE_LIBUV
    206 #include <uv.h>
    207 #ifdef LWS_HAVE_UV_VERSION_H
    208 #include <uv-version.h>
    209 #endif
    210 #endif /* LWS_USE_LIBUV */
    211 
    212 #ifndef LWS_EXTERN
    213 #define LWS_EXTERN extern
    214 #endif
    215 
    216 #ifdef _WIN32
    217 #define random rand
    218 #else
    219 #include <sys/time.h>
    220 #include <unistd.h>
    221 #endif
    222 
    223 #ifdef LWS_OPENSSL_SUPPORT
    224 
    225 #ifdef USE_WOLFSSL
    226 #ifdef USE_OLD_CYASSL
    227 #include <cyassl/openssl/ssl.h>
    228 #include <cyassl/error-ssl.h>
    229 #else
    230 #include <wolfssl/openssl/ssl.h>
    231 #include <wolfssl/error-ssl.h>
    232 #endif /* not USE_OLD_CYASSL */
    233 #else
    234 #if defined(LWS_USE_POLARSSL)
    235 #include <polarssl/ssl.h>
    237  x509_crt ca;
    238  x509_crt certificate;
    239  rsa_context key;
    240 };
    241 typedef struct lws_polarssl_context SSL_CTX;
    242 typedef ssl_context SSL;
    243 #else
    244 #if defined(LWS_USE_MBEDTLS)
    245 #include <mbedtls/ssl.h>
    246 #else
    247 #include <openssl/ssl.h>
    248 #include <openssl/err.h>
    249 #endif /* not USE_MBEDTLS */
    250 #endif /* not USE_POLARSSL */
    251 #endif /* not USE_WOLFSSL */
    252 #endif
    253 
    254 
    255 #define CONTEXT_PORT_NO_LISTEN -1
    256 
    267 
    269 enum lws_log_levels {
    270  LLL_ERR = 1 << 0,
    271  LLL_WARN = 1 << 1,
    272  LLL_NOTICE = 1 << 2,
    273  LLL_INFO = 1 << 3,
    274  LLL_DEBUG = 1 << 4,
    275  LLL_PARSER = 1 << 5,
    276  LLL_HEADER = 1 << 6,
    277  LLL_EXT = 1 << 7,
    278  LLL_CLIENT = 1 << 8,
    279  LLL_LATENCY = 1 << 9,
    280 
    281  LLL_COUNT = 10 /* set to count of valid flags */
    282 };
    283 
    284 LWS_VISIBLE LWS_EXTERN void _lws_log(int filter, const char *format, ...);
    285 LWS_VISIBLE LWS_EXTERN void _lws_logv(int filter, const char *format, va_list vl);
    295 LWS_VISIBLE LWS_EXTERN int
    296 lwsl_timestamp(int level, char *p, int len);
    297 
    298 #define lwsl_err(...) _lws_log(LLL_ERR, __VA_ARGS__)
    299 
    300 #if !defined(LWS_WITH_NO_LOGS)
    301 /* notice, warn and log are always compiled in */
    302 #define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__)
    303 #define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__)
    304 #endif
    305 /*
    306  * weaker logging can be deselected at configure time using --disable-debug
    307  * that gets rid of the overhead of checking while keeping _warn and _err
    308  * active
    309  */
    310 
    311 #if defined(LWS_WITH_ESP8266)
    312 #undef _DEBUG
    313 #endif
    314 
    315 #ifdef _DEBUG
    316 #if defined(LWS_WITH_NO_LOGS)
    317 /* notice, warn and log are always compiled in */
    318 //#define lwsl_err(...) _lws_log(LLL_ERR, __VA_ARGS__)
    319 #define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__)
    320 #define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__)
    321 #endif
    322 #define lwsl_info(...) _lws_log(LLL_INFO, __VA_ARGS__)
    323 #define lwsl_debug(...) _lws_log(LLL_DEBUG, __VA_ARGS__)
    324 #define lwsl_parser(...) _lws_log(LLL_PARSER, __VA_ARGS__)
    325 #define lwsl_header(...) _lws_log(LLL_HEADER, __VA_ARGS__)
    326 #define lwsl_ext(...) _lws_log(LLL_EXT, __VA_ARGS__)
    327 #define lwsl_client(...) _lws_log(LLL_CLIENT, __VA_ARGS__)
    328 #define lwsl_latency(...) _lws_log(LLL_LATENCY, __VA_ARGS__)
    329 
    335 LWS_VISIBLE LWS_EXTERN void lwsl_hexdump(void *buf, size_t len);
    336 
    337 #else /* no debug */
    338 #if defined(LWS_WITH_NO_LOGS)
    339 //#define lwsl_err(...) do {} while(0)
    340 #define lwsl_warn(...) do {} while(0)
    341 #define lwsl_notice(...) do {} while(0)
    342 #endif
    343 #define lwsl_info(...) do {} while(0)
    344 #define lwsl_debug(...) do {} while(0)
    345 #define lwsl_parser(...) do {} while(0)
    346 #define lwsl_header(...) do {} while(0)
    347 #define lwsl_ext(...) do {} while(0)
    348 #define lwsl_client(...) do {} while(0)
    349 #define lwsl_latency(...) do {} while(0)
    350 #define lwsl_hexdump(a, b)
    351 
    352 #endif
    353 
    364 LWS_VISIBLE LWS_EXTERN void
    365 lws_set_log_level(int level,
    366  void (*log_emit_function)(int level, const char *line));
    367 
    377 LWS_VISIBLE LWS_EXTERN void
    378 lwsl_emit_syslog(int level, const char *line);
    379 
    381 
    382 
    383 #include <stddef.h>
    384 
    385 #ifndef lws_container_of
    386 #define lws_container_of(P,T,M) ((T *)((char *)(P) - offsetof(T, M)))
    387 #endif
    388 
    389 
    390 struct lws;
    391 #ifndef ARRAY_SIZE
    392 #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
    393 #endif
    394 
    395 /* api change list for user code to test against */
    396 
    397 #define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_ARG
    398 
    399 /* the struct lws_protocols has the id field present */
    400 #define LWS_FEATURE_PROTOCOLS_HAS_ID_FIELD
    401 
    402 /* you can call lws_get_peer_write_allowance */
    403 #define LWS_FEATURE_PROTOCOLS_HAS_PEER_WRITE_ALLOWANCE
    404 
    405 /* extra parameter introduced in 917f43ab821 */
    406 #define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_LEN
    407 
    408 /* File operations stuff exists */
    409 #define LWS_FEATURE_FOPS
    410 
    411 
    412 #if defined(_WIN32)
    413 typedef SOCKET lws_sockfd_type;
    414 typedef HANDLE lws_filefd_type;
    415 #define lws_sockfd_valid(sfd) (!!sfd)
    416 struct lws_pollfd {
    417  lws_sockfd_type fd;
    418  SHORT events;
    419  SHORT revents;
    420 };
    421 #define LWS_POLLHUP (FD_CLOSE)
    422 #define LWS_POLLIN (FD_READ | FD_ACCEPT)
    423 #define LWS_POLLOUT (FD_WRITE)
    424 #else
    425 
    426 #if defined(MBED_OPERATORS)
    427 /* it's a class lws_conn * */
    428 typedef void * lws_sockfd_type;
    429 typedef void * lws_filefd_type;
    430 #define lws_sockfd_valid(sfd) (!!sfd)
    431 struct pollfd {
    432  lws_sockfd_type fd;
    433  short events;
    434  short revents;
    435 };
    436 #define POLLIN 0x0001
    437 #define POLLPRI 0x0002
    438 #define POLLOUT 0x0004
    439 #define POLLERR 0x0008
    440 #define POLLHUP 0x0010
    441 #define POLLNVAL 0x0020
    442 
    443 struct lws;
    444 
    445 void * mbed3_create_tcp_stream_socket(void);
    446 void mbed3_delete_tcp_stream_socket(void *sockfd);
    447 void mbed3_tcp_stream_bind(void *sock, int port, struct lws *);
    448 void mbed3_tcp_stream_accept(void *sock, struct lws *);
    449 #else
    450 #if defined(LWS_WITH_ESP8266)
    451 
    452 #include <user_interface.h>
    453 #include <espconn.h>
    454 
    455 typedef struct espconn * lws_sockfd_type;
    456 typedef void * lws_filefd_type;
    457 #define lws_sockfd_valid(sfd) (!!sfd)
    458 struct pollfd {
    459  lws_sockfd_type fd;
    460  short events;
    461  short revents;
    462 };
    463 #define POLLIN 0x0001
    464 #define POLLPRI 0x0002
    465 #define POLLOUT 0x0004
    466 #define POLLERR 0x0008
    467 #define POLLHUP 0x0010
    468 #define POLLNVAL 0x0020
    469 
    470 struct lws_vhost;
    471 
    472 lws_sockfd_type esp8266_create_tcp_listen_socket(struct lws_vhost *vh);
    473 void esp8266_tcp_stream_accept(lws_sockfd_type fd, struct lws *wsi);
    474 
    475 #include <os_type.h>
    476 #include <osapi.h>
    477 #include "ets_sys.h"
    478 
    479 int ets_snprintf(char *str, size_t size, const char *format, ...);
    480 #define snprintf ets_snprintf
    481 
    482 typedef os_timer_t uv_timer_t;
    483 typedef void uv_cb_t(uv_timer_t *);
    484 
    485 void os_timer_disarm(void *);
    486 void os_timer_setfn(os_timer_t *, os_timer_func_t *, void *);
    487 
    488 void ets_timer_arm_new(os_timer_t *, int, int, int);
    489 
    490 //void os_timer_arm(os_timer_t *, int, int);
    491 
    492 #define UV_VERSION_MAJOR 1
    493 
    494 #define lws_uv_getloop(a, b) (NULL)
    495 
    496 static inline void uv_timer_init(void *l, uv_timer_t *t)
    497 {
    498  (void)l;
    499  memset(t, 0, sizeof(*t));
    500  os_timer_disarm(t);
    501 }
    502 
    503 static inline void uv_timer_start(uv_timer_t *t, uv_cb_t *cb, int first, int rep)
    504 {
    505  os_timer_setfn(t, (os_timer_func_t *)cb, t);
    506  /* ms, repeat */
    507  os_timer_arm(t, first, !!rep);
    508 }
    509 
    510 static inline void uv_timer_stop(uv_timer_t *t)
    511 {
    512  os_timer_disarm(t);
    513 }
    514 
    515 #else
    516 typedef int lws_sockfd_type;
    517 typedef int lws_filefd_type;
    518 #define lws_sockfd_valid(sfd) (sfd >= 0)
    519 #endif
    520 #endif
    521 
    522 #define lws_pollfd pollfd
    523 #define LWS_POLLHUP (POLLHUP|POLLERR)
    524 #define LWS_POLLIN (POLLIN)
    525 #define LWS_POLLOUT (POLLOUT)
    526 #endif
    527 
    530 struct lws_pollargs {
    531  lws_sockfd_type fd;
    532  int events;
    534 };
    535 
    536 struct lws_tokens;
    537 struct lws_token_limits;
    538 
    546 
    548 /*
    549  * NOTE: These public enums are part of the abi. If you want to add one,
    550  * add it at where specified so existing users are unaffected.
    551  */
    554  LWS_CLOSE_STATUS_NOSTATUS = 0,
    616  /****** add new things just above ---^ ******/
    617 
    618  LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY = 9999,
    619 };
    620 
    633 LWS_VISIBLE LWS_EXTERN void
    634 lws_close_reason(struct lws *wsi, enum lws_close_status status,
    635  unsigned char *buf, size_t len);
    636 
    638 
    639 struct lws;
    640 struct lws_context;
    641 /* needed even with extensions disabled for create context */
    642 struct lws_extension;
    643 
    655 
    657 
    658 /*
    659  * NOTE: These public enums are part of the abi. If you want to add one,
    660  * add it at where specified so existing users are unaffected.
    661  */
    905  /* external poll() management support */
    968  LWS_CALLBACK_WS_EXT_DEFAULTS = 39,
    971  LWS_CALLBACK_CGI = 40,
    973  LWS_CALLBACK_CGI_TERMINATED = 41,
    975  LWS_CALLBACK_CGI_STDIN_DATA = 42,
    977  LWS_CALLBACK_CGI_STDIN_COMPLETED = 43,
    979  LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP = 44,
    981  LWS_CALLBACK_CLOSED_CLIENT_HTTP = 45,
    983  LWS_CALLBACK_RECEIVE_CLIENT_HTTP = 46,
    985  LWS_CALLBACK_COMPLETED_CLIENT_HTTP = 47,
    987  LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ = 48,
    989  LWS_CALLBACK_HTTP_BIND_PROTOCOL = 49,
    991  LWS_CALLBACK_HTTP_DROP_PROTOCOL = 50,
    993  LWS_CALLBACK_CHECK_ACCESS_RIGHTS = 51,
    995  LWS_CALLBACK_PROCESS_HTML = 52,
    997  LWS_CALLBACK_ADD_HEADERS = 53,
    999  LWS_CALLBACK_SESSION_INFO = 54,
    1002  LWS_CALLBACK_GS_EVENT = 55,
    1019  /****** add new things just above ---^ ******/
    1020 
    1023 };
    1024 
    1025 
    1026 
    1042 typedef int
    1043 lws_callback_function(struct lws *wsi, enum lws_callback_reasons reason,
    1044  void *user, void *in, size_t len);
    1046 
    1056 
    1058 /*
    1059  * NOTE: These public enums are part of the abi. If you want to add one,
    1060  * add it at where specified so existing users are unaffected.
    1061  */
    1062 enum lws_extension_callback_reasons {
    1063  LWS_EXT_CB_SERVER_CONTEXT_CONSTRUCT = 0,
    1064  LWS_EXT_CB_CLIENT_CONTEXT_CONSTRUCT = 1,
    1065  LWS_EXT_CB_SERVER_CONTEXT_DESTRUCT = 2,
    1066  LWS_EXT_CB_CLIENT_CONTEXT_DESTRUCT = 3,
    1067  LWS_EXT_CB_CONSTRUCT = 4,
    1068  LWS_EXT_CB_CLIENT_CONSTRUCT = 5,
    1069  LWS_EXT_CB_CHECK_OK_TO_REALLY_CLOSE = 6,
    1070  LWS_EXT_CB_CHECK_OK_TO_PROPOSE_EXTENSION = 7,
    1071  LWS_EXT_CB_DESTROY = 8,
    1072  LWS_EXT_CB_DESTROY_ANY_WSI_CLOSING = 9,
    1073  LWS_EXT_CB_ANY_WSI_ESTABLISHED = 10,
    1074  LWS_EXT_CB_PACKET_RX_PREPARSE = 11,
    1075  LWS_EXT_CB_PACKET_TX_PRESEND = 12,
    1076  LWS_EXT_CB_PACKET_TX_DO_SEND = 13,
    1077  LWS_EXT_CB_HANDSHAKE_REPLY_TX = 14,
    1078  LWS_EXT_CB_FLUSH_PENDING_TX = 15,
    1079  LWS_EXT_CB_EXTENDED_PAYLOAD_RX = 16,
    1080  LWS_EXT_CB_CAN_PROXY_CLIENT_CONNECTION = 17,
    1081  LWS_EXT_CB_1HZ = 18,
    1082  LWS_EXT_CB_REQUEST_ON_WRITEABLE = 19,
    1083  LWS_EXT_CB_IS_WRITEABLE = 20,
    1084  LWS_EXT_CB_PAYLOAD_TX = 21,
    1085  LWS_EXT_CB_PAYLOAD_RX = 22,
    1086  LWS_EXT_CB_OPTION_DEFAULT = 23,
    1087  LWS_EXT_CB_OPTION_SET = 24,
    1088  LWS_EXT_CB_OPTION_CONFIRM = 25,
    1089  LWS_EXT_CB_NAMED_OPTION_SET = 26,
    1090 
    1091  /****** add new things just above ---^ ******/
    1092 };
    1093 
    1100  /* Add new things just above here ---^
    1101  * This is part of the ABI, don't needlessly break compatibility */
    1102 };
    1103 
    1109  const char *name;
    1112  /* Add new things just above here ---^
    1113  * This is part of the ABI, don't needlessly break compatibility */
    1114 };
    1115 
    1118  const char *option_name;
    1120  const char *start;
    1121  int len;
    1122 };
    1123 
    1184 typedef int
    1185 lws_extension_callback_function(struct lws_context *context,
    1186  const struct lws_extension *ext, struct lws *wsi,
    1187  enum lws_extension_callback_reasons reason,
    1188  void *user, void *in, size_t len);
    1189 
    1192  const char *name;
    1194  const char *client_offer;
    1196  /* Add new things just above here ---^
    1197  * This is part of the ABI, don't needlessly break compatibility */
    1198 };
    1199 
    1208 LWS_VISIBLE LWS_EXTERN int
    1209 lws_set_extension_option(struct lws *wsi, const char *ext_name,
    1210  const char *opt_name, const char *opt_val);
    1211 
    1212 #ifndef LWS_NO_EXTENSIONS
    1213 /* lws_get_internal_extensions() - DEPRECATED
    1214  *
    1215  * \Deprecated There is no longer a set internal extensions table. The table is provided
    1216  * by user code along with application-specific settings. See the test
    1217  * client and server for how to do.
    1218  */
    1219 static LWS_INLINE LWS_WARN_DEPRECATED const struct lws_extension *
    1220 lws_get_internal_extensions(void) { return NULL; }
    1221 
    1232 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    1233 lws_ext_parse_options(const struct lws_extension *ext, struct lws *wsi,
    1234  void *ext_user, const struct lws_ext_options *opts,
    1235  const char *o, int len);
    1236 #endif
    1237 
    1250 LWS_EXTERN
    1252  struct lws_context *context, const struct lws_extension *ext,
    1253  struct lws *wsi, enum lws_extension_callback_reasons reason,
    1254  void *user, void *in, size_t len);
    1255 
    1256 /*
    1257  * The internal exts are part of the public abi
    1258  * If we add more extensions, publish the callback here ------v
    1259  */
    1261 
    1277 
    1282  const char *name;
    1303  unsigned int id;
    1310  void *user;
    1313  /* Add new things just above here ---^
    1314  * This is part of the ABI, don't needlessly break compatibility */
    1315 };
    1316 
    1317 struct lws_vhost;
    1318 
    1327 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
    1328 lws_vhost_name_to_protocol(struct lws_vhost *vh, const char *name);
    1329 
    1339 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
    1340 lws_get_protocol(struct lws *wsi);
    1341 
    1343 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
    1344 lws_protocol_get(struct lws *wsi) LWS_WARN_DEPRECATED;
    1345 
    1356 LWS_VISIBLE LWS_EXTERN void *
    1357 lws_protocol_vh_priv_zalloc(struct lws_vhost *vhost, const struct lws_protocols *prot,
    1358  int size);
    1359 
    1369 LWS_VISIBLE LWS_EXTERN void *
    1370 lws_protocol_vh_priv_get(struct lws_vhost *vhost, const struct lws_protocols *prot);
    1371 
    1380 LWS_VISIBLE LWS_EXTERN int
    1381 lws_finalize_startup(struct lws_context *context);
    1382 
    1383 #ifdef LWS_WITH_PLUGINS
    1384 
    1385 /* PLUGINS implies LIBUV */
    1386 
    1387 #define LWS_PLUGIN_API_MAGIC 180
    1388 
    1391  unsigned int api_magic;
    1392  const struct lws_protocols *protocols;
    1394  const struct lws_extension *extensions;
    1396 };
    1397 
    1398 typedef int (*lws_plugin_init_func)(struct lws_context *,
    1399  struct lws_plugin_capability *);
    1400 typedef int (*lws_plugin_destroy_func)(struct lws_context *);
    1401 
    1403 struct lws_plugin {
    1404  struct lws_plugin *list;
    1405 #if (UV_VERSION_MAJOR > 0)
    1406  uv_lib_t lib;
    1407 #else
    1408  void *l;
    1409 #endif
    1410  char name[64];
    1412 };
    1413 
    1414 #endif
    1415 
    1417 
    1418 
    1427 
    1429 #define LWSGS_EMAIL_CONTENT_SIZE 16384
    1430 
    1432 /* SHA-1 binary and hexified versions */
    1434 typedef struct { unsigned char bin[20]; } lwsgw_hash_bin;
    1436 typedef struct { char id[41]; } lwsgw_hash;
    1437 
    1444 };
    1445 
    1448  char username[32];
    1449  char email[100];
    1450  char ip[72];
    1451  unsigned int mask;
    1453  char session[42];
    1454 };
    1455 
    1460 };
    1461 
    1464  enum lws_gs_event event;
    1465  const char *username;
    1466  const char *email;
    1467 };
    1468 
    1470 
    1471 
    1485 
    1487 /*
    1488  * NOTE: These public enums are part of the abi. If you want to add one,
    1489  * add it at where specified so existing users are unaffected.
    1490  */
    1491 
    1495  (1 << 12),
    1502  (1 << 12),
    1518  (1 << 12),
    1523  (1 << 12),
    1547  /****** add new things just above ---^ ******/
    1548 };
    1549 
    1550 #define lws_check_opt(c, f) (((c) & (f)) == (f))
    1551 
    1562  int port;
    1567  const char *iface;
    1574  const struct lws_protocols *protocols;
    1578  const struct lws_extension *extensions;
    1586  const char *ssl_cert_filepath;
    1596  const char *ssl_ca_filepath;
    1598  const char *ssl_cipher_list;
    1602  const char *http_proxy_address;
    1605  unsigned int http_proxy_port;
    1607  int gid;
    1609  int uid;
    1611  unsigned int options;
    1613  void *user;
    1616  int ka_time;
    1626 #ifdef LWS_OPENSSL_SUPPORT
    1632 #else /* maintain structure layout either way */
    1634 #endif
    1635 
    1646  unsigned int count_threads;
    1648  unsigned int fd_limit_per_thread;
    1652  unsigned int timeout_secs;
    1657  const char *ecdh_curve;
    1659  const char *vhost_name;
    1663  const char * const *plugin_dirs;
    1672  const char *log_filepath;
    1675  const struct lws_http_mount *mounts;
    1677  const char *server_string;
    1680  unsigned int pt_serv_buf_size;
    1695  unsigned short ws_ping_pong_interval;
    1726  /* Add new things just above here ---^
    1727  * This is part of the ABI, don't needlessly break compatibility
    1728  *
    1729  * The below is to ensure later library versions with new
    1730  * members added above will see 0 (default) even if the app
    1731  * was not built against the newer headers.
    1732  */
    1733 
    1734  void *_unused[8];
    1735 };
    1736 
    1771 LWS_VISIBLE LWS_EXTERN struct lws_context *
    1773 
    1782 LWS_VISIBLE LWS_EXTERN void
    1783 lws_context_destroy(struct lws_context *context);
    1784 
    1802 LWS_VISIBLE LWS_EXTERN int
    1803 lws_set_proxy(struct lws_vhost *vhost, const char *proxy);
    1804 
    1805 
    1806 struct lws_vhost;
    1807 
    1817 LWS_EXTERN LWS_VISIBLE struct lws_vhost *
    1818 lws_create_vhost(struct lws_context *context,
    1819  struct lws_context_creation_info *info);
    1820 
    1835 LWS_VISIBLE LWS_EXTERN int
    1836 lwsws_get_config_globals(struct lws_context_creation_info *info, const char *d,
    1837  char **config_strings, int *len);
    1838 
    1854 LWS_VISIBLE LWS_EXTERN int
    1855 lwsws_get_config_vhosts(struct lws_context *context,
    1856  struct lws_context_creation_info *info, const char *d,
    1857  char **config_strings, int *len);
    1858 
    1860 LWS_VISIBLE LWS_EXTERN struct lws_vhost *
    1861 lws_vhost_get(struct lws *wsi) LWS_WARN_DEPRECATED;
    1862 
    1868 LWS_VISIBLE LWS_EXTERN struct lws_vhost *
    1869 lws_get_vhost(struct lws *wsi);
    1870 
    1878 LWS_VISIBLE LWS_EXTERN int
    1879 lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len);
    1880 
    1888 LWS_VISIBLE LWS_EXTERN int
    1889 lws_json_dump_context(const struct lws_context *context, char *buf, int len);
    1890 
    1900 LWS_VISIBLE LWS_EXTERN void *
    1901 lws_context_user(struct lws_context *context);
    1902 
    1908 
    1918  const char *name;
    1919  const char *value;
    1920 };
    1921 
    1934 };
    1935 
    1943  const char *mountpoint;
    1945  const char *origin;
    1947  const char *def;
    1949  const char *protocol;
    1965  unsigned int auth_mask;
    1968  unsigned int cache_reusable:1;
    1969  unsigned int cache_revalidate:1;
    1970  unsigned int cache_intermediaries:1;
    1972  unsigned char origin_protocol;
    1973  unsigned char mountpoint_len;
    1978  /* Add new things just above here ---^
    1979  * This is part of the ABI, don't needlessly break compatibility
    1980  *
    1981  * The below is to ensure later library versions with new
    1982  * members added above will see 0 (default) even if the app
    1983  * was not built against the newer headers.
    1984  */
    1985 
    1986  void *_unused[2];
    1987 };
    1990 
    1996 
    2004  LCCSCF_USE_SSL = (1 << 0),
    2005  LCCSCF_ALLOW_SELFSIGNED = (1 << 1),
    2006  LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK = (1 << 2),
    2007  LCCSCF_ALLOW_EXPIRED = (1 << 3)
    2008 };
    2009 
    2014  struct lws_context *context;
    2016  const char *address;
    2018  int port;
    2022  const char *path;
    2024  const char *host;
    2026  const char *origin;
    2028  const char *protocol;
    2032  void *userdata;
    2036  const char *method;
    2039  struct lws *parent_wsi;
    2043  const char *uri_replace_from;
    2046  const char *uri_replace_to;
    2048  struct lws_vhost *vhost;
    2050  struct lws **pwsi;
    2062  /* Add new things just above here ---^
    2063  * This is part of the ABI, don't needlessly break compatibility
    2064  *
    2065  * The below is to ensure later library versions with new
    2066  * members added above will see 0 (default) even if the app
    2067  * was not built against the newer headers.
    2068  */
    2069 
    2070  void *_unused[4];
    2071 };
    2072 
    2080 LWS_VISIBLE LWS_EXTERN struct lws *
    2082 
    2103 /* deprecated, use lws_client_connect_via_info() */
    2104 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    2105 lws_client_connect(struct lws_context *clients, const char *address,
    2106  int port, int ssl_connection, const char *path,
    2107  const char *host, const char *origin, const char *protocol,
    2108  int ietf_version_or_minus_one) LWS_WARN_DEPRECATED;
    2109 /* deprecated, use lws_client_connect_via_info() */
    2130 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    2131 lws_client_connect_extended(struct lws_context *clients, const char *address,
    2132  int port, int ssl_connection, const char *path,
    2133  const char *host, const char *origin,
    2134  const char *protocol, int ietf_version_or_minus_one,
    2135  void *userdata) LWS_WARN_DEPRECATED;
    2136 
    2162 LWS_VISIBLE LWS_EXTERN int
    2164  struct lws_vhost *vhost);
    2165 
    2166 LWS_VISIBLE LWS_EXTERN int
    2167 lws_http_client_read(struct lws *wsi, char **buf, int *len);
    2168 
    2176 LWS_VISIBLE LWS_EXTERN unsigned int
    2177 lws_http_client_http_response(struct lws *wsi);
    2178 
    2179 LWS_VISIBLE LWS_EXTERN void
    2180 lws_client_http_body_pending(struct lws *wsi, int something_left_to_send);
    2181 
    2202 
    2211 
    2244 LWS_VISIBLE LWS_EXTERN int
    2245 lws_service(struct lws_context *context, int timeout_ms);
    2246 
    2258 LWS_VISIBLE LWS_EXTERN int
    2259 lws_service_tsi(struct lws_context *context, int timeout_ms, int tsi);
    2260 
    2276 LWS_VISIBLE LWS_EXTERN void
    2277 lws_cancel_service_pt(struct lws *wsi);
    2278 
    2290 LWS_VISIBLE LWS_EXTERN void
    2291 lws_cancel_service(struct lws_context *context);
    2292 
    2319 LWS_VISIBLE LWS_EXTERN int
    2320 lws_service_fd(struct lws_context *context, struct lws_pollfd *pollfd);
    2321 
    2331 LWS_VISIBLE LWS_EXTERN int
    2332 lws_service_fd_tsi(struct lws_context *context, struct lws_pollfd *pollfd,
    2333  int tsi);
    2334 
    2352 LWS_VISIBLE LWS_EXTERN int
    2353 lws_service_adjust_timeout(struct lws_context *context, int timeout_ms, int tsi);
    2354 
    2355 /* Backwards compatibility */
    2356 #define lws_plat_service_tsi lws_service_tsi
    2357 
    2359 
    2365 
    2372 
    2384 LWS_VISIBLE LWS_EXTERN const char *
    2385 lws_get_mimetype(const char *file, const struct lws_http_mount *m);
    2386 
    2405 LWS_VISIBLE LWS_EXTERN int
    2406 lws_serve_http_file(struct lws *wsi, const char *file, const char *content_type,
    2407  const char *other_headers, int other_headers_len);
    2408 LWS_VISIBLE LWS_EXTERN int
    2409 lws_serve_http_file_fragment(struct lws *wsi);
    2411 
    2422 
    2423 enum http_status {
    2424  HTTP_STATUS_OK = 200,
    2425  HTTP_STATUS_NO_CONTENT = 204,
    2426  HTTP_STATUS_PARTIAL_CONTENT = 206,
    2427 
    2428  HTTP_STATUS_MOVED_PERMANENTLY = 301,
    2429  HTTP_STATUS_FOUND = 302,
    2430  HTTP_STATUS_SEE_OTHER = 303,
    2431 
    2432  HTTP_STATUS_BAD_REQUEST = 400,
    2433  HTTP_STATUS_UNAUTHORIZED,
    2434  HTTP_STATUS_PAYMENT_REQUIRED,
    2435  HTTP_STATUS_FORBIDDEN,
    2436  HTTP_STATUS_NOT_FOUND,
    2437  HTTP_STATUS_METHOD_NOT_ALLOWED,
    2438  HTTP_STATUS_NOT_ACCEPTABLE,
    2439  HTTP_STATUS_PROXY_AUTH_REQUIRED,
    2440  HTTP_STATUS_REQUEST_TIMEOUT,
    2441  HTTP_STATUS_CONFLICT,
    2442  HTTP_STATUS_GONE,
    2443  HTTP_STATUS_LENGTH_REQUIRED,
    2444  HTTP_STATUS_PRECONDITION_FAILED,
    2445  HTTP_STATUS_REQ_ENTITY_TOO_LARGE,
    2446  HTTP_STATUS_REQ_URI_TOO_LONG,
    2447  HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE,
    2448  HTTP_STATUS_REQ_RANGE_NOT_SATISFIABLE,
    2449  HTTP_STATUS_EXPECTATION_FAILED,
    2450 
    2451  HTTP_STATUS_INTERNAL_SERVER_ERROR = 500,
    2452  HTTP_STATUS_NOT_IMPLEMENTED,
    2453  HTTP_STATUS_BAD_GATEWAY,
    2454  HTTP_STATUS_SERVICE_UNAVAILABLE,
    2455  HTTP_STATUS_GATEWAY_TIMEOUT,
    2456  HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED,
    2457 };
    2458 
    2460  char *p;
    2461  int len;
    2462  int max_len;
    2463  int final;
    2464 };
    2465 
    2466 typedef const char *(*lws_process_html_state_cb)(void *data, int index);
    2467 
    2469  char *start;
    2470  char swallow[16];
    2471  int pos;
    2472  void *data;
    2473  const char * const *vars;
    2476  lws_process_html_state_cb replace;
    2477 };
    2478 
    2483 LWS_VISIBLE LWS_EXTERN int
    2485  struct lws_process_html_state *s);
    2487 
    2520 
    2528 struct lws_tokens {
    2529  char *token;
    2531 };
    2532 
    2533 /* enum lws_token_indexes
    2534  * these have to be kept in sync with lextable.h / minilex.c
    2535  *
    2536  * NOTE: These public enums are part of the abi. If you want to add one,
    2537  * add it at where specified so existing users are unaffected.
    2538  */
    2539 enum lws_token_indexes {
    2540  WSI_TOKEN_GET_URI = 0,
    2541  WSI_TOKEN_POST_URI = 1,
    2542  WSI_TOKEN_OPTIONS_URI = 2,
    2543  WSI_TOKEN_HOST = 3,
    2544  WSI_TOKEN_CONNECTION = 4,
    2545  WSI_TOKEN_UPGRADE = 5,
    2546  WSI_TOKEN_ORIGIN = 6,
    2547  WSI_TOKEN_DRAFT = 7,
    2548  WSI_TOKEN_CHALLENGE = 8,
    2549  WSI_TOKEN_EXTENSIONS = 9,
    2550  WSI_TOKEN_KEY1 = 10,
    2551  WSI_TOKEN_KEY2 = 11,
    2552  WSI_TOKEN_PROTOCOL = 12,
    2553  WSI_TOKEN_ACCEPT = 13,
    2554  WSI_TOKEN_NONCE = 14,
    2555  WSI_TOKEN_HTTP = 15,
    2556  WSI_TOKEN_HTTP2_SETTINGS = 16,
    2557  WSI_TOKEN_HTTP_ACCEPT = 17,
    2558  WSI_TOKEN_HTTP_AC_REQUEST_HEADERS = 18,
    2559  WSI_TOKEN_HTTP_IF_MODIFIED_SINCE = 19,
    2560  WSI_TOKEN_HTTP_IF_NONE_MATCH = 20,
    2561  WSI_TOKEN_HTTP_ACCEPT_ENCODING = 21,
    2562  WSI_TOKEN_HTTP_ACCEPT_LANGUAGE = 22,
    2563  WSI_TOKEN_HTTP_PRAGMA = 23,
    2564  WSI_TOKEN_HTTP_CACHE_CONTROL = 24,
    2565  WSI_TOKEN_HTTP_AUTHORIZATION = 25,
    2566  WSI_TOKEN_HTTP_COOKIE = 26,
    2567  WSI_TOKEN_HTTP_CONTENT_LENGTH = 27,
    2568  WSI_TOKEN_HTTP_CONTENT_TYPE = 28,
    2569  WSI_TOKEN_HTTP_DATE = 29,
    2570  WSI_TOKEN_HTTP_RANGE = 30,
    2571  WSI_TOKEN_HTTP_REFERER = 31,
    2572  WSI_TOKEN_KEY = 32,
    2573  WSI_TOKEN_VERSION = 33,
    2574  WSI_TOKEN_SWORIGIN = 34,
    2575 
    2576  WSI_TOKEN_HTTP_COLON_AUTHORITY = 35,
    2577  WSI_TOKEN_HTTP_COLON_METHOD = 36,
    2578  WSI_TOKEN_HTTP_COLON_PATH = 37,
    2579  WSI_TOKEN_HTTP_COLON_SCHEME = 38,
    2580  WSI_TOKEN_HTTP_COLON_STATUS = 39,
    2581 
    2582  WSI_TOKEN_HTTP_ACCEPT_CHARSET = 40,
    2583  WSI_TOKEN_HTTP_ACCEPT_RANGES = 41,
    2584  WSI_TOKEN_HTTP_ACCESS_CONTROL_ALLOW_ORIGIN = 42,
    2585  WSI_TOKEN_HTTP_AGE = 43,
    2586  WSI_TOKEN_HTTP_ALLOW = 44,
    2587  WSI_TOKEN_HTTP_CONTENT_DISPOSITION = 45,
    2588  WSI_TOKEN_HTTP_CONTENT_ENCODING = 46,
    2589  WSI_TOKEN_HTTP_CONTENT_LANGUAGE = 47,
    2590  WSI_TOKEN_HTTP_CONTENT_LOCATION = 48,
    2591  WSI_TOKEN_HTTP_CONTENT_RANGE = 49,
    2592  WSI_TOKEN_HTTP_ETAG = 50,
    2593  WSI_TOKEN_HTTP_EXPECT = 51,
    2594  WSI_TOKEN_HTTP_EXPIRES = 52,
    2595  WSI_TOKEN_HTTP_FROM = 53,
    2596  WSI_TOKEN_HTTP_IF_MATCH = 54,
    2597  WSI_TOKEN_HTTP_IF_RANGE = 55,
    2598  WSI_TOKEN_HTTP_IF_UNMODIFIED_SINCE = 56,
    2599  WSI_TOKEN_HTTP_LAST_MODIFIED = 57,
    2600  WSI_TOKEN_HTTP_LINK = 58,
    2601  WSI_TOKEN_HTTP_LOCATION = 59,
    2602  WSI_TOKEN_HTTP_MAX_FORWARDS = 60,
    2603  WSI_TOKEN_HTTP_PROXY_AUTHENTICATE = 61,
    2604  WSI_TOKEN_HTTP_PROXY_AUTHORIZATION = 62,
    2605  WSI_TOKEN_HTTP_REFRESH = 63,
    2606  WSI_TOKEN_HTTP_RETRY_AFTER = 64,
    2607  WSI_TOKEN_HTTP_SERVER = 65,
    2608  WSI_TOKEN_HTTP_SET_COOKIE = 66,
    2609  WSI_TOKEN_HTTP_STRICT_TRANSPORT_SECURITY = 67,
    2610  WSI_TOKEN_HTTP_TRANSFER_ENCODING = 68,
    2611  WSI_TOKEN_HTTP_USER_AGENT = 69,
    2612  WSI_TOKEN_HTTP_VARY = 70,
    2613  WSI_TOKEN_HTTP_VIA = 71,
    2614  WSI_TOKEN_HTTP_WWW_AUTHENTICATE = 72,
    2615 
    2616  WSI_TOKEN_PATCH_URI = 73,
    2617  WSI_TOKEN_PUT_URI = 74,
    2618  WSI_TOKEN_DELETE_URI = 75,
    2619 
    2620  WSI_TOKEN_HTTP_URI_ARGS = 76,
    2621  WSI_TOKEN_PROXY = 77,
    2622  WSI_TOKEN_HTTP_X_REAL_IP = 78,
    2623  WSI_TOKEN_HTTP1_0 = 79,
    2624  WSI_TOKEN_X_FORWARDED_FOR = 80,
    2625 
    2626  /****** add new things just above ---^ ******/
    2627 
    2628  /* use token storage to stash these internally, not for
    2629  * user use */
    2630 
    2631  _WSI_TOKEN_CLIENT_SENT_PROTOCOLS,
    2632  _WSI_TOKEN_CLIENT_PEER_ADDRESS,
    2633  _WSI_TOKEN_CLIENT_URI,
    2634  _WSI_TOKEN_CLIENT_HOST,
    2635  _WSI_TOKEN_CLIENT_ORIGIN,
    2636  _WSI_TOKEN_CLIENT_METHOD,
    2637 
    2638  /* always last real token index*/
    2639  WSI_TOKEN_COUNT,
    2640 
    2641  /* parser state additions, no storage associated */
    2642  WSI_TOKEN_NAME_PART,
    2643  WSI_TOKEN_SKIPPING,
    2644  WSI_TOKEN_SKIPPING_SAW_CR,
    2645  WSI_PARSING_COMPLETE,
    2646  WSI_INIT_TOKEN_MUXURL,
    2647 };
    2648 
    2650  unsigned short token_limit[WSI_TOKEN_COUNT];
    2651 };
    2652 
    2658 LWS_VISIBLE LWS_EXTERN const unsigned char *
    2659 lws_token_to_string(enum lws_token_indexes token);
    2660 
    2661 
    2670 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2671 lws_hdr_total_length(struct lws *wsi, enum lws_token_indexes h);
    2672 
    2682 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2683 lws_hdr_fragment_length(struct lws *wsi, enum lws_token_indexes h, int frag_idx);
    2684 
    2698 LWS_VISIBLE LWS_EXTERN int
    2699 lws_hdr_copy(struct lws *wsi, char *dest, int len, enum lws_token_indexes h);
    2700 
    2718 LWS_VISIBLE LWS_EXTERN int
    2719 lws_hdr_copy_fragment(struct lws *wsi, char *dest, int len,
    2720  enum lws_token_indexes h, int frag_idx);
    2721 
    2732 LWS_VISIBLE LWS_EXTERN const char *
    2733 lws_get_urlarg_by_name(struct lws *wsi, const char *name, char *buf, int len);
    2735 
    2750 
    2761 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2762 lws_add_http_header_status(struct lws *wsi,
    2763  unsigned int code, unsigned char **p,
    2764  unsigned char *end);
    2777 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2778 lws_add_http_header_by_name(struct lws *wsi, const unsigned char *name,
    2779  const unsigned char *value, int length,
    2780  unsigned char **p, unsigned char *end);
    2794 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2795 lws_add_http_header_by_token(struct lws *wsi, enum lws_token_indexes token,
    2796  const unsigned char *value, int length,
    2797  unsigned char **p, unsigned char *end);
    2808 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2809 lws_add_http_header_content_length(struct lws *wsi,
    2810  unsigned long content_length,
    2811  unsigned char **p, unsigned char *end);
    2821 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2822 lws_finalize_http_header(struct lws *wsi, unsigned char **p,
    2823  unsigned char *end);
    2825 
    2844 
    2854 };
    2855 
    2869 typedef int (*lws_spa_fileupload_cb)(void *data, const char *name,
    2870  const char *filename, char *buf, int len,
    2871  enum lws_spa_fileupload_states state);
    2872 
    2875 struct lws_spa;
    2876 
    2895 LWS_VISIBLE LWS_EXTERN struct lws_spa *
    2896 lws_spa_create(struct lws *wsi, const char * const *param_names,
    2897  int count_params, int max_storage, lws_spa_fileupload_cb opt_cb,
    2898  void *opt_data);
    2899 
    2907 LWS_VISIBLE LWS_EXTERN int
    2908 lws_spa_process(struct lws_spa *spa, const char *in, int len);
    2909 
    2915 LWS_VISIBLE LWS_EXTERN int
    2916 lws_spa_finalize(struct lws_spa *spa);
    2917 
    2924 LWS_VISIBLE LWS_EXTERN int
    2925 lws_spa_get_length(struct lws_spa *spa, int n);
    2926 
    2932 LWS_VISIBLE LWS_EXTERN const char *
    2933 lws_spa_get_string(struct lws_spa *spa, int n);
    2934 
    2940 LWS_VISIBLE LWS_EXTERN int
    2941 lws_spa_destroy(struct lws_spa *spa);
    2943 
    2954 
    2965 LWS_VISIBLE LWS_EXTERN const char *
    2966 lws_urlencode(char *escaped, const char *string, int len);
    2967 
    2968 /*
    2969  * URLDECODE 1 / 2
    2970  *
    2971  * This simple urldecode only operates until the first '\0' and requires the
    2972  * data to exist all at once
    2973  */
    2986 LWS_VISIBLE LWS_EXTERN int
    2987 lws_urldecode(char *string, const char *escaped, int len);
    2989 
    2998 LWS_VISIBLE LWS_EXTERN int
    2999 lws_return_http_status(struct lws *wsi, unsigned int code,
    3000  const char *html_body);
    3001 
    3012 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3013 lws_http_redirect(struct lws *wsi, int code, const unsigned char *loc, int len,
    3014  unsigned char **p, unsigned char *end);
    3015 
    3024 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3025 lws_http_transaction_completed(struct lws *wsi);
    3027 
    3035 
    3046 LWS_VISIBLE LWS_EXTERN const char *
    3047 lws_sql_purify(char *escaped, const char *string, int len);
    3048 
    3059 LWS_VISIBLE LWS_EXTERN const char *
    3060 lws_json_purify(char *escaped, const char *string, int len);
    3062 
    3069 
    3071 #ifdef LWS_USE_LIBEV
    3072 typedef void (lws_ev_signal_cb_t)(EV_P_ struct ev_signal *w, int revents);
    3073 
    3074 LWS_VISIBLE LWS_EXTERN int
    3075 lws_ev_sigint_cfg(struct lws_context *context, int use_ev_sigint,
    3076  lws_ev_signal_cb_t *cb);
    3077 
    3078 LWS_VISIBLE LWS_EXTERN int
    3079 lws_ev_initloop(struct lws_context *context, struct ev_loop *loop, int tsi);
    3080 
    3081 LWS_VISIBLE LWS_EXTERN void
    3082 lws_ev_sigint_cb(struct ev_loop *loop, struct ev_signal *watcher, int revents);
    3083 #endif /* LWS_USE_LIBEV */
    3084 
    3086 
    3093 #ifdef LWS_USE_LIBUV
    3095 LWS_VISIBLE LWS_EXTERN int
    3096 lws_uv_sigint_cfg(struct lws_context *context, int use_uv_sigint,
    3097  uv_signal_cb cb);
    3098 
    3099 LWS_VISIBLE LWS_EXTERN void
    3100 lws_libuv_run(const struct lws_context *context, int tsi);
    3101 
    3102 LWS_VISIBLE LWS_EXTERN void
    3103 lws_libuv_stop(struct lws_context *context);
    3104 
    3105 LWS_VISIBLE LWS_EXTERN int
    3106 lws_uv_initloop(struct lws_context *context, uv_loop_t *loop, int tsi);
    3107 
    3108 LWS_VISIBLE LWS_EXTERN uv_loop_t *
    3109 lws_uv_getloop(struct lws_context *context, int tsi);
    3110 
    3111 LWS_VISIBLE LWS_EXTERN void
    3112 lws_uv_sigint_cb(uv_signal_t *watcher, int signum);
    3113 #endif /* LWS_USE_LIBUV */
    3114 
    3121 
    3122 /*
    3123  * NOTE: These public enums are part of the abi. If you want to add one,
    3124  * add it at where specified so existing users are unaffected.
    3125  */
    3126 enum pending_timeout {
    3127  NO_PENDING_TIMEOUT = 0,
    3128  PENDING_TIMEOUT_AWAITING_PROXY_RESPONSE = 1,
    3129  PENDING_TIMEOUT_AWAITING_CONNECT_RESPONSE = 2,
    3130  PENDING_TIMEOUT_ESTABLISH_WITH_SERVER = 3,
    3131  PENDING_TIMEOUT_AWAITING_SERVER_RESPONSE = 4,
    3132  PENDING_TIMEOUT_AWAITING_PING = 5,
    3133  PENDING_TIMEOUT_CLOSE_ACK = 6,
    3134  PENDING_TIMEOUT_AWAITING_EXTENSION_CONNECT_RESPONSE = 7,
    3135  PENDING_TIMEOUT_SENT_CLIENT_HANDSHAKE = 8,
    3136  PENDING_TIMEOUT_SSL_ACCEPT = 9,
    3137  PENDING_TIMEOUT_HTTP_CONTENT = 10,
    3138  PENDING_TIMEOUT_AWAITING_CLIENT_HS_SEND = 11,
    3139  PENDING_FLUSH_STORED_SEND_BEFORE_CLOSE = 12,
    3140  PENDING_TIMEOUT_SHUTDOWN_FLUSH = 13,
    3141  PENDING_TIMEOUT_CGI = 14,
    3142  PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE = 15,
    3143  PENDING_TIMEOUT_WS_PONG_CHECK_SEND_PING = 16,
    3144  PENDING_TIMEOUT_WS_PONG_CHECK_GET_PONG = 17,
    3145  PENDING_TIMEOUT_CLIENT_ISSUE_PAYLOAD = 18,
    3146 
    3147  /****** add new things just above ---^ ******/
    3148 };
    3149 
    3159 LWS_VISIBLE LWS_EXTERN void
    3160 lws_set_timeout(struct lws *wsi, enum pending_timeout reason, int secs);
    3162 
    3168 #if !defined(LWS_SIZEOFPTR)
    3169 #define LWS_SIZEOFPTR (sizeof (void *))
    3170 #endif
    3171 #if !defined(u_int64_t)
    3172 #define u_int64_t unsigned long long
    3173 #endif
    3174 
    3175 #if defined(__x86_64__)
    3176 #define _LWS_PAD_SIZE 16 /* Intel recommended for best performance */
    3177 #else
    3178 #define _LWS_PAD_SIZE LWS_SIZEOFPTR /* Size of a pointer on the target arch */
    3179 #endif
    3180 #define _LWS_PAD(n) (((n) % _LWS_PAD_SIZE) ? \
    3181  ((n) + (_LWS_PAD_SIZE - ((n) % _LWS_PAD_SIZE))) : (n))
    3182 #define LWS_PRE _LWS_PAD(4 + 10)
    3183 /* used prior to 1.7 and retained for backward compatibility */
    3184 #define LWS_SEND_BUFFER_PRE_PADDING LWS_PRE
    3185 #define LWS_SEND_BUFFER_POST_PADDING 0
    3186 
    3187 /*
    3188  * NOTE: These public enums are part of the abi. If you want to add one,
    3189  * add it at where specified so existing users are unaffected.
    3190  */
    3205  /* LWS_WRITE_CLOSE is handled by lws_close_reason() */
    3206  LWS_WRITE_PING = 5,
    3207  LWS_WRITE_PONG = 6,
    3208 
    3209  /* Same as write_http but we know this write ends the transaction */
    3210  LWS_WRITE_HTTP_FINAL = 7,
    3211 
    3212  /* HTTP2 */
    3213 
    3221  /****** add new things just above ---^ ******/
    3222 
    3223  /* flags */
    3224 
    3232 };
    3233 
    3234 
    3321 LWS_VISIBLE LWS_EXTERN int
    3322 lws_write(struct lws *wsi, unsigned char *buf, size_t len,
    3323  enum lws_write_protocol protocol);
    3324 
    3325 /* helper for case where buffer may be const */
    3326 #define lws_write_http(wsi, buf, len) \
    3327  lws_write(wsi, (unsigned char *)(buf), len, LWS_WRITE_HTTP)
    3328 
    3348 
    3361 LWS_VISIBLE LWS_EXTERN int
    3362 lws_callback_on_writable(struct lws *wsi);
    3363 
    3377 LWS_VISIBLE LWS_EXTERN int
    3378 lws_callback_on_writable_all_protocol(const struct lws_context *context,
    3379  const struct lws_protocols *protocol);
    3380 
    3394 LWS_VISIBLE LWS_EXTERN int
    3395 lws_callback_on_writable_all_protocol_vhost(const struct lws_vhost *vhost,
    3396  const struct lws_protocols *protocol);
    3397 
    3410 LWS_VISIBLE LWS_EXTERN int
    3411 lws_callback_all_protocol(struct lws_context *context,
    3412  const struct lws_protocols *protocol, int reason);
    3413 
    3426 LWS_VISIBLE LWS_EXTERN int
    3427 lws_callback_all_protocol_vhost(struct lws_vhost *vh,
    3428  const struct lws_protocols *protocol, int reason);
    3429 
    3443 LWS_VISIBLE LWS_EXTERN int
    3444 lws_callback_vhost_protocols(struct lws *wsi, int reason, void *in, int len);
    3445 
    3446 LWS_VISIBLE LWS_EXTERN int
    3447 lws_callback_http_dummy(struct lws *wsi, enum lws_callback_reasons reason,
    3448  void *user, void *in, size_t len);
    3449 
    3457 LWS_VISIBLE LWS_EXTERN int
    3458 lws_get_socket_fd(struct lws *wsi);
    3459 
    3481 LWS_VISIBLE LWS_EXTERN size_t
    3482 lws_get_peer_write_allowance(struct lws *wsi);
    3484 
    3495 LWS_VISIBLE LWS_EXTERN int
    3496 lws_rx_flow_control(struct lws *wsi, int enable);
    3497 
    3507 LWS_VISIBLE LWS_EXTERN void
    3508 lws_rx_flow_allow_all_protocol(const struct lws_context *context,
    3509  const struct lws_protocols *protocol);
    3510 
    3527 LWS_VISIBLE LWS_EXTERN size_t
    3528 lws_remaining_packet_payload(struct lws *wsi);
    3529 
    3530 
    3539 
    3552 LWS_VISIBLE LWS_EXTERN struct lws *
    3553 lws_adopt_socket(struct lws_context *context, lws_sockfd_type accept_fd);
    3576 LWS_VISIBLE LWS_EXTERN struct lws *
    3577 lws_adopt_socket_readbuf(struct lws_context *context, lws_sockfd_type accept_fd,
    3578  const char *readbuf, size_t len);
    3580 
    3586 
    3597 LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT
    3598 lws_canonical_hostname(struct lws_context *context);
    3599 
    3614 LWS_VISIBLE LWS_EXTERN void
    3615 lws_get_peer_addresses(struct lws *wsi, lws_sockfd_type fd, char *name,
    3616  int name_len, char *rip, int rip_len);
    3617 
    3628 LWS_VISIBLE LWS_EXTERN const char *
    3629 lws_get_peer_simple(struct lws *wsi, char *name, int namelen);
    3630 #ifndef LWS_WITH_ESP8266
    3631 
    3642 LWS_VISIBLE LWS_EXTERN int
    3643 lws_interface_to_sa(int ipv6, const char *ifname, struct sockaddr_in *addr,
    3644  size_t addrlen);
    3646 #endif
    3647 
    3653 
    3666 LWS_VISIBLE LWS_EXTERN int
    3667 lws_snprintf(char *str, size_t size, const char *format, ...);
    3668 
    3680 LWS_VISIBLE LWS_EXTERN int
    3681 lws_get_random(struct lws_context *context, void *buf, int len);
    3689 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3690 lws_daemonize(const char *_lock_path);
    3696 LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT
    3698 
    3705 LWS_VISIBLE LWS_EXTERN void *
    3706 lws_wsi_user(struct lws *wsi);
    3707 
    3719 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3720 lws_parse_uri(char *p, const char **prot, const char **ads, int *port,
    3721  const char **path);
    3722 
    3726 LWS_VISIBLE LWS_EXTERN unsigned long
    3727 lws_now_secs(void);
    3728 
    3738 LWS_VISIBLE LWS_EXTERN struct lws_context * LWS_WARN_UNUSED_RESULT
    3739 lws_get_context(const struct lws *wsi);
    3740 
    3750 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3751 lws_get_count_threads(struct lws_context *context);
    3752 
    3760 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    3761 lws_get_parent(const struct lws *wsi);
    3762 
    3769 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    3770 lws_get_child(const struct lws *wsi);
    3771 
    3772 
    3773 /*
    3774  * \deprecated DEPRECATED Note: this is not normally needed as a user api.
    3775  * It's provided in case it is
    3776  * useful when integrating with other app poll loop service code.
    3777  */
    3778 LWS_VISIBLE LWS_EXTERN int
    3779 lws_read(struct lws *wsi, unsigned char *buf, size_t len);
    3780 
    3788 LWS_VISIBLE LWS_EXTERN void
    3789 lws_set_allocator(void *(*realloc)(void *ptr, size_t size));
    3791 
    3797 
    3804 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3805 lws_send_pipe_choked(struct lws *wsi);
    3806 
    3811 LWS_VISIBLE LWS_EXTERN int
    3812 lws_is_final_fragment(struct lws *wsi);
    3813 
    3818 LWS_VISIBLE LWS_EXTERN unsigned char
    3819 lws_get_reserved_bits(struct lws *wsi);
    3820 
    3837 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3838 lws_partial_buffered(struct lws *wsi);
    3839 
    3849 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3850 lws_frame_is_binary(struct lws *wsi);
    3851 
    3860 LWS_VISIBLE LWS_EXTERN int
    3861 lws_is_ssl(struct lws *wsi);
    3866 LWS_VISIBLE LWS_EXTERN int
    3867 lws_is_cgi(struct lws *wsi);
    3869 
    3870 
    3876 #ifdef LWS_SHA1_USE_OPENSSL_NAME
    3878 #define lws_SHA1 SHA1
    3879 #else
    3880 
    3889 LWS_VISIBLE LWS_EXTERN unsigned char *
    3890 lws_SHA1(const unsigned char *d, size_t n, unsigned char *md);
    3891 #endif
    3892 
    3902 LWS_VISIBLE LWS_EXTERN int
    3903 lws_b64_encode_string(const char *in, int in_len, char *out, int out_size);
    3913 LWS_VISIBLE LWS_EXTERN int
    3914 lws_b64_decode_string(const char *in, char *out, int out_size);
    3916 
    3917 
    3927 #ifdef LWS_WITH_CGI
    3928 enum lws_enum_stdinouterr {
    3929  LWS_STDIN = 0,
    3930  LWS_STDOUT = 1,
    3931  LWS_STDERR = 2,
    3932 };
    3933 
    3934 enum lws_cgi_hdr_state {
    3935  LCHS_HEADER,
    3936  LCHS_CR1,
    3937  LCHS_LF1,
    3938  LCHS_CR2,
    3939  LCHS_LF2,
    3940  LHCS_PAYLOAD,
    3941  LCHS_SINGLE_0A,
    3942 };
    3943 
    3945  struct lws **stdwsi;
    3946  enum lws_enum_stdinouterr ch;
    3947  unsigned char *data;
    3948  enum lws_cgi_hdr_state hdr_state;
    3949  int len;
    3950 };
    3951 
    3952 
    3962 LWS_VISIBLE LWS_EXTERN int
    3963 lws_cgi(struct lws *wsi, const char * const *exec_array,
    3964  int script_uri_path_len, int timeout_secs,
    3965  const struct lws_protocol_vhost_options *mp_cgienv);
    3966 
    3972 LWS_VISIBLE LWS_EXTERN int
    3973 lws_cgi_write_split_stdout_headers(struct lws *wsi);
    3974 
    3980 LWS_VISIBLE LWS_EXTERN int
    3981 lws_cgi_kill(struct lws *wsi);
    3982 #endif
    3983 
    3985 
    4002 
    4009  lws_filefd_type (*open)(struct lws *wsi, const char *filename,
    4010  unsigned long *filelen, int flags);
    4014  int (*close)(struct lws *wsi, lws_filefd_type fd);
    4016  unsigned long (*seek_cur)(struct lws *wsi, lws_filefd_type fd,
    4017  long offset_from_cur_pos);
    4019  int (*read)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    4020  unsigned char *buf, unsigned long len);
    4022  int (*write)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    4023  unsigned char *buf, unsigned long len);
    4026  /* Add new things just above here ---^
    4027  * This is part of the ABI, don't needlessly break compatibility */
    4028 };
    4029 
    4035 LWS_VISIBLE LWS_EXTERN struct lws_plat_file_ops * LWS_WARN_UNUSED_RESULT
    4036 lws_get_fops(struct lws_context *context);
    4037 
    4046 static LWS_INLINE lws_filefd_type LWS_WARN_UNUSED_RESULT
    4047 lws_plat_file_open(struct lws *wsi, const char *filename,
    4048  unsigned long *filelen, int flags)
    4049 {
    4050  return lws_get_fops(lws_get_context(wsi))->open(wsi, filename,
    4051  filelen, flags);
    4052 }
    4053 
    4060 static LWS_INLINE int
    4061 lws_plat_file_close(struct lws *wsi, lws_filefd_type fd)
    4062 {
    4063  return lws_get_fops(lws_get_context(wsi))->close(wsi, fd);
    4064 }
    4065 
    4073 static LWS_INLINE unsigned long
    4074 lws_plat_file_seek_cur(struct lws *wsi, lws_filefd_type fd, long offset)
    4075 {
    4076  return lws_get_fops(lws_get_context(wsi))->seek_cur(wsi, fd, offset);
    4077 }
    4087 static LWS_INLINE int LWS_WARN_UNUSED_RESULT
    4088 lws_plat_file_read(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    4089  unsigned char *buf, unsigned long len)
    4090 {
    4091  return lws_get_fops(lws_get_context(wsi))->read(wsi, fd, amount, buf,
    4092  len);
    4093 }
    4103 static LWS_INLINE int LWS_WARN_UNUSED_RESULT
    4104 lws_plat_file_write(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    4105  unsigned char *buf, unsigned long len)
    4106 {
    4107  return lws_get_fops(lws_get_context(wsi))->write(wsi, fd, amount, buf,
    4108  len);
    4109 }
    4111 
    4143 #ifdef LWS_WITH_SMTP
    4144 
    4156 };
    4157 
    4159 struct lws_email {
    4160  void *data;
    4162  uv_loop_t *loop;
    4165  char email_smtp_ip[32];
    4166  char email_helo[32];
    4167  char email_from[100];
    4168  char email_to[100];
    4170  unsigned int max_content_size;
    4173  /* Fill all the callbacks before init */
    4174 
    4175  int (*on_next)(struct lws_email *email);
    4180  int (*on_sent)(struct lws_email *email);
    4185  int (*on_get_body)(struct lws_email *email, char *buf, int len);
    4191  /* private things */
    4192  uv_timer_t timeout_email;
    4194  uv_connect_t email_connect_req;
    4195  uv_tcp_t email_client;
    4197  char email_buf[256];
    4198  char *content;
    4199 };
    4200 
    4210 LWS_VISIBLE LWS_EXTERN int
    4211 lws_email_init(struct lws_email *email, uv_loop_t *loop, int max_content);
    4212 
    4221 LWS_VISIBLE LWS_EXTERN void
    4222 lws_email_check(struct lws_email *email);
    4230 LWS_VISIBLE LWS_EXTERN void
    4231 lws_email_destroy(struct lws_email *email);
    4232 
    4233 #endif
    4234 
    4235 
    4236 #ifdef __cplusplus
    4237 }
    4238 #endif
    4239 
    4240 #endif
    LWS_VISIBLE LWS_EXTERN int lws_spa_destroy(struct lws_spa *spa)
    +Go to the documentation of this file.
    1 /*
    2  * libwebsockets - small server side websockets and web server implementation
    3  *
    4  * Copyright (C) 2010-2016 Andy Green <andy@warmcat.com>
    5  *
    6  * This library is free software; you can redistribute it and/or
    7  * modify it under the terms of the GNU Lesser General Public
    8  * License as published by the Free Software Foundation:
    9  * version 2.1 of the License.
    10  *
    11  * This library is distributed in the hope that it will be useful,
    12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    14  * Lesser General Public License for more details.
    15  *
    16  * You should have received a copy of the GNU Lesser General Public
    17  * License along with this library; if not, write to the Free Software
    18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
    19  * MA 02110-1301 USA
    20  */
    21 
    24 #ifndef LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C
    25 #define LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C
    26 
    27 #ifdef __cplusplus
    28 #include <cstddef>
    29 #include <cstdarg>
    30 #ifdef MBED_OPERATORS
    31 #include "mbed-drivers/mbed.h"
    32 #include "sal-iface-eth/EthernetInterface.h"
    33 #include "sockets/TCPListener.h"
    34 #include "sal-stack-lwip/lwipv4_init.h"
    35 
    36 namespace {
    37 }
    38 using namespace mbed::Sockets::v0;
    39 
    40 
    41 struct sockaddr_in;
    42 struct lws;
    43 
    44 class lws_conn {
    45  public:
    46  lws_conn():
    47  ts(NULL),
    48  wsi(NULL),
    49  writeable(1),
    50  awaiting_on_writeable(0)
    51  {
    52  }
    53 
    54 public:
    55  void set_wsi(struct lws *_wsi) { wsi = _wsi; }
    56  int actual_onRX(Socket *s);
    57  void onRX(Socket *s);
    58  void onError(Socket *s, socket_error_t err);
    59  void onDisconnect(TCPStream *s);
    60  void onSent(Socket *s, uint16_t len);
    61  void serialized_writeable(struct lws *wsi);
    62 
    63 public:
    64  TCPStream *ts;
    65 
    66 public:
    67  struct lws *wsi;
    68  char writeable;
    69  char awaiting_on_writeable;
    70 };
    71 
    73 public:
    75  srv(SOCKET_STACK_LWIP_IPV4)
    76  {
    77  srv.setOnError(TCPStream::ErrorHandler_t(this,
    79  }
    80 
    81  void start(const uint16_t port);
    83 protected:
    84  void onRX(Socket *s);
    85  void onError(Socket *s, socket_error_t err);
    86  void onIncoming(TCPListener *s, void *impl);
    87  void onDisconnect(TCPStream *s);
    89 public:
    90  TCPListener srv;
    91 };
    92 
    93 #endif
    94 
    95 extern "C" {
    96 #else
    97 #include <stdarg.h>
    98 #endif
    99 
    100 #if defined(MBED_OPERATORS) || defined(LWS_WITH_ESP8266)
    101 struct sockaddr_in;
    102 #define LWS_POSIX 0
    103 #else
    104 #define LWS_POSIX 1
    105 #endif
    106 
    107 #include "lws_config.h"
    108 
    109 #if defined(WIN32) || defined(_WIN32)
    110 #ifndef WIN32_LEAN_AND_MEAN
    111 #define WIN32_LEAN_AND_MEAN
    112 #endif
    113 
    114 #include <winsock2.h>
    115 #include <ws2tcpip.h>
    116 #include <stddef.h>
    117 #include <basetsd.h>
    118 #ifndef _WIN32_WCE
    119 #include <fcntl.h>
    120 #else
    121 #define _O_RDONLY 0x0000
    122 #define O_RDONLY _O_RDONLY
    123 #endif
    124 
    125 // Visual studio older than 2015 and WIN_CE has only _stricmp
    126 #if (defined(_MSC_VER) && _MSC_VER < 1900) || defined(_WIN32_WCE)
    127 #define strcasecmp _stricmp
    128 #elif !defined(__MINGW32__)
    129 #define strcasecmp stricmp
    130 #endif
    131 #define getdtablesize() 30000
    132 
    133 #define LWS_INLINE __inline
    134 #define LWS_VISIBLE
    135 #define LWS_WARN_UNUSED_RESULT
    136 #define LWS_WARN_DEPRECATED
    137 
    138 #ifdef LWS_DLL
    139 #ifdef LWS_INTERNAL
    140 #define LWS_EXTERN extern __declspec(dllexport)
    141 #else
    142 #define LWS_EXTERN extern __declspec(dllimport)
    143 #endif
    144 #else
    145 #define LWS_EXTERN
    146 #endif
    147 
    148 #define LWS_INVALID_FILE INVALID_HANDLE_VALUE
    149 #define LWS_O_RDONLY _O_RDONLY
    150 
    151 #if !defined(__MINGW32__) && (!defined(_MSC_VER) || _MSC_VER < 1900) /* Visual Studio 2015 already defines this in <stdio.h> */
    152 #define lws_snprintf _snprintf
    153 #endif
    154 
    155 #ifndef __func__
    156 #define __func__ __FUNCTION__
    157 #endif
    158 
    159 #else /* NOT WIN32 */
    160 #include <unistd.h>
    161 
    162 #if defined(__NetBSD__) || defined(__FreeBSD__)
    163 #include <netinet/in.h>
    164 #endif
    165 
    166 #define LWS_INLINE inline
    167 #define LWS_O_RDONLY O_RDONLY
    168 
    169 #if !defined(MBED_OPERATORS) && !defined(LWS_WITH_ESP8266)
    170 #include <poll.h>
    171 #include <netdb.h>
    172 #define LWS_INVALID_FILE -1
    173 #else
    174 #define getdtablesize() (20)
    175 #define LWS_INVALID_FILE NULL
    176 #endif
    177 
    178 #if defined(__GNUC__)
    179 
    180 /* warn_unused_result attribute only supported by GCC 3.4 or later */
    181 #if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
    182 #define LWS_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
    183 #else
    184 #define LWS_WARN_UNUSED_RESULT
    185 #endif
    186 
    187 #define LWS_VISIBLE __attribute__((visibility("default")))
    188 #define LWS_WARN_DEPRECATED __attribute__ ((deprecated))
    189 #else
    190 #define LWS_VISIBLE
    191 #define LWS_WARN_UNUSED_RESULT
    192 #define LWS_WARN_DEPRECATED
    193 #endif
    194 
    195 #if defined(__ANDROID__)
    196 #include <unistd.h>
    197 #define getdtablesize() sysconf(_SC_OPEN_MAX)
    198 #endif
    199 
    200 #endif
    201 
    202 #ifdef LWS_USE_LIBEV
    203 #include <ev.h>
    204 #endif /* LWS_USE_LIBEV */
    205 #ifdef LWS_USE_LIBUV
    206 #include <uv.h>
    207 #ifdef LWS_HAVE_UV_VERSION_H
    208 #include <uv-version.h>
    209 #endif
    210 #endif /* LWS_USE_LIBUV */
    211 
    212 #ifndef LWS_EXTERN
    213 #define LWS_EXTERN extern
    214 #endif
    215 
    216 #ifdef _WIN32
    217 #define random rand
    218 #else
    219 #include <sys/time.h>
    220 #include <unistd.h>
    221 #endif
    222 
    223 #ifdef LWS_OPENSSL_SUPPORT
    224 
    225 #ifdef USE_WOLFSSL
    226 #ifdef USE_OLD_CYASSL
    227 #include <cyassl/openssl/ssl.h>
    228 #include <cyassl/error-ssl.h>
    229 #else
    230 #include <wolfssl/openssl/ssl.h>
    231 #include <wolfssl/error-ssl.h>
    232 #endif /* not USE_OLD_CYASSL */
    233 #else
    234 #if defined(LWS_USE_POLARSSL)
    235 #include <polarssl/ssl.h>
    237  x509_crt ca;
    238  x509_crt certificate;
    239  rsa_context key;
    240 };
    241 typedef struct lws_polarssl_context SSL_CTX;
    242 typedef ssl_context SSL;
    243 #else
    244 #if defined(LWS_USE_MBEDTLS)
    245 #include <mbedtls/ssl.h>
    246 #else
    247 #include <openssl/ssl.h>
    248 #include <openssl/err.h>
    249 #endif /* not USE_MBEDTLS */
    250 #endif /* not USE_POLARSSL */
    251 #endif /* not USE_WOLFSSL */
    252 #endif
    253 
    254 
    255 #define CONTEXT_PORT_NO_LISTEN -1
    256 
    267 
    269 enum lws_log_levels {
    270  LLL_ERR = 1 << 0,
    271  LLL_WARN = 1 << 1,
    272  LLL_NOTICE = 1 << 2,
    273  LLL_INFO = 1 << 3,
    274  LLL_DEBUG = 1 << 4,
    275  LLL_PARSER = 1 << 5,
    276  LLL_HEADER = 1 << 6,
    277  LLL_EXT = 1 << 7,
    278  LLL_CLIENT = 1 << 8,
    279  LLL_LATENCY = 1 << 9,
    280 
    281  LLL_COUNT = 10 /* set to count of valid flags */
    282 };
    283 
    284 LWS_VISIBLE LWS_EXTERN void _lws_log(int filter, const char *format, ...);
    285 LWS_VISIBLE LWS_EXTERN void _lws_logv(int filter, const char *format, va_list vl);
    295 LWS_VISIBLE LWS_EXTERN int
    296 lwsl_timestamp(int level, char *p, int len);
    297 
    298 #define lwsl_err(...) _lws_log(LLL_ERR, __VA_ARGS__)
    299 
    300 #if !defined(LWS_WITH_NO_LOGS)
    301 /* notice, warn and log are always compiled in */
    302 #define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__)
    303 #define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__)
    304 #endif
    305 /*
    306  * weaker logging can be deselected at configure time using --disable-debug
    307  * that gets rid of the overhead of checking while keeping _warn and _err
    308  * active
    309  */
    310 
    311 #if defined(LWS_WITH_ESP8266)
    312 #undef _DEBUG
    313 #endif
    314 
    315 #ifdef _DEBUG
    316 #if defined(LWS_WITH_NO_LOGS)
    317 /* notice, warn and log are always compiled in */
    318 //#define lwsl_err(...) _lws_log(LLL_ERR, __VA_ARGS__)
    319 #define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__)
    320 #define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__)
    321 #endif
    322 #define lwsl_info(...) _lws_log(LLL_INFO, __VA_ARGS__)
    323 #define lwsl_debug(...) _lws_log(LLL_DEBUG, __VA_ARGS__)
    324 #define lwsl_parser(...) _lws_log(LLL_PARSER, __VA_ARGS__)
    325 #define lwsl_header(...) _lws_log(LLL_HEADER, __VA_ARGS__)
    326 #define lwsl_ext(...) _lws_log(LLL_EXT, __VA_ARGS__)
    327 #define lwsl_client(...) _lws_log(LLL_CLIENT, __VA_ARGS__)
    328 #define lwsl_latency(...) _lws_log(LLL_LATENCY, __VA_ARGS__)
    329 
    335 LWS_VISIBLE LWS_EXTERN void lwsl_hexdump(void *buf, size_t len);
    336 
    337 #else /* no debug */
    338 #if defined(LWS_WITH_NO_LOGS)
    339 //#define lwsl_err(...) do {} while(0)
    340 #define lwsl_warn(...) do {} while(0)
    341 #define lwsl_notice(...) do {} while(0)
    342 #endif
    343 #define lwsl_info(...) do {} while(0)
    344 #define lwsl_debug(...) do {} while(0)
    345 #define lwsl_parser(...) do {} while(0)
    346 #define lwsl_header(...) do {} while(0)
    347 #define lwsl_ext(...) do {} while(0)
    348 #define lwsl_client(...) do {} while(0)
    349 #define lwsl_latency(...) do {} while(0)
    350 #define lwsl_hexdump(a, b)
    351 
    352 #endif
    353 
    364 LWS_VISIBLE LWS_EXTERN void
    365 lws_set_log_level(int level,
    366  void (*log_emit_function)(int level, const char *line));
    367 
    377 LWS_VISIBLE LWS_EXTERN void
    378 lwsl_emit_syslog(int level, const char *line);
    379 
    381 
    382 
    383 #include <stddef.h>
    384 
    385 #ifndef lws_container_of
    386 #define lws_container_of(P,T,M) ((T *)((char *)(P) - offsetof(T, M)))
    387 #endif
    388 
    389 
    390 struct lws;
    391 #ifndef ARRAY_SIZE
    392 #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
    393 #endif
    394 
    395 /* api change list for user code to test against */
    396 
    397 #define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_ARG
    398 
    399 /* the struct lws_protocols has the id field present */
    400 #define LWS_FEATURE_PROTOCOLS_HAS_ID_FIELD
    401 
    402 /* you can call lws_get_peer_write_allowance */
    403 #define LWS_FEATURE_PROTOCOLS_HAS_PEER_WRITE_ALLOWANCE
    404 
    405 /* extra parameter introduced in 917f43ab821 */
    406 #define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_LEN
    407 
    408 /* File operations stuff exists */
    409 #define LWS_FEATURE_FOPS
    410 
    411 
    412 #if defined(_WIN32)
    413 typedef SOCKET lws_sockfd_type;
    414 typedef HANDLE lws_filefd_type;
    415 #define lws_sockfd_valid(sfd) (!!sfd)
    416 struct lws_pollfd {
    417  lws_sockfd_type fd;
    418  SHORT events;
    419  SHORT revents;
    420 };
    421 #define LWS_POLLHUP (FD_CLOSE)
    422 #define LWS_POLLIN (FD_READ | FD_ACCEPT)
    423 #define LWS_POLLOUT (FD_WRITE)
    424 #else
    425 
    426 #if defined(MBED_OPERATORS)
    427 /* it's a class lws_conn * */
    428 typedef void * lws_sockfd_type;
    429 typedef void * lws_filefd_type;
    430 #define lws_sockfd_valid(sfd) (!!sfd)
    431 struct pollfd {
    432  lws_sockfd_type fd;
    433  short events;
    434  short revents;
    435 };
    436 #define POLLIN 0x0001
    437 #define POLLPRI 0x0002
    438 #define POLLOUT 0x0004
    439 #define POLLERR 0x0008
    440 #define POLLHUP 0x0010
    441 #define POLLNVAL 0x0020
    442 
    443 struct lws;
    444 
    445 void * mbed3_create_tcp_stream_socket(void);
    446 void mbed3_delete_tcp_stream_socket(void *sockfd);
    447 void mbed3_tcp_stream_bind(void *sock, int port, struct lws *);
    448 void mbed3_tcp_stream_accept(void *sock, struct lws *);
    449 #else
    450 #if defined(LWS_WITH_ESP8266)
    451 
    452 #include <user_interface.h>
    453 #include <espconn.h>
    454 
    455 typedef struct espconn * lws_sockfd_type;
    456 typedef void * lws_filefd_type;
    457 #define lws_sockfd_valid(sfd) (!!sfd)
    458 struct pollfd {
    459  lws_sockfd_type fd;
    460  short events;
    461  short revents;
    462 };
    463 #define POLLIN 0x0001
    464 #define POLLPRI 0x0002
    465 #define POLLOUT 0x0004
    466 #define POLLERR 0x0008
    467 #define POLLHUP 0x0010
    468 #define POLLNVAL 0x0020
    469 
    470 struct lws_vhost;
    471 
    472 lws_sockfd_type esp8266_create_tcp_listen_socket(struct lws_vhost *vh);
    473 void esp8266_tcp_stream_accept(lws_sockfd_type fd, struct lws *wsi);
    474 
    475 #include <os_type.h>
    476 #include <osapi.h>
    477 #include "ets_sys.h"
    478 
    479 int ets_snprintf(char *str, size_t size, const char *format, ...);
    480 #define snprintf ets_snprintf
    481 
    482 typedef os_timer_t uv_timer_t;
    483 typedef void uv_cb_t(uv_timer_t *);
    484 
    485 void os_timer_disarm(void *);
    486 void os_timer_setfn(os_timer_t *, os_timer_func_t *, void *);
    487 
    488 void ets_timer_arm_new(os_timer_t *, int, int, int);
    489 
    490 //void os_timer_arm(os_timer_t *, int, int);
    491 
    492 #define UV_VERSION_MAJOR 1
    493 
    494 #define lws_uv_getloop(a, b) (NULL)
    495 
    496 static inline void uv_timer_init(void *l, uv_timer_t *t)
    497 {
    498  (void)l;
    499  memset(t, 0, sizeof(*t));
    500  os_timer_disarm(t);
    501 }
    502 
    503 static inline void uv_timer_start(uv_timer_t *t, uv_cb_t *cb, int first, int rep)
    504 {
    505  os_timer_setfn(t, (os_timer_func_t *)cb, t);
    506  /* ms, repeat */
    507  os_timer_arm(t, first, !!rep);
    508 }
    509 
    510 static inline void uv_timer_stop(uv_timer_t *t)
    511 {
    512  os_timer_disarm(t);
    513 }
    514 
    515 #else
    516 typedef int lws_sockfd_type;
    517 typedef int lws_filefd_type;
    518 #define lws_sockfd_valid(sfd) (sfd >= 0)
    519 #endif
    520 #endif
    521 
    522 #define lws_pollfd pollfd
    523 #define LWS_POLLHUP (POLLHUP|POLLERR)
    524 #define LWS_POLLIN (POLLIN)
    525 #define LWS_POLLOUT (POLLOUT)
    526 #endif
    527 
    530 struct lws_pollargs {
    531  lws_sockfd_type fd;
    532  int events;
    534 };
    535 
    536 struct lws_tokens;
    537 struct lws_token_limits;
    538 
    546 
    548 /*
    549  * NOTE: These public enums are part of the abi. If you want to add one,
    550  * add it at where specified so existing users are unaffected.
    551  */
    554  LWS_CLOSE_STATUS_NOSTATUS = 0,
    616  /****** add new things just above ---^ ******/
    617 
    618  LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY = 9999,
    619 };
    620 
    633 LWS_VISIBLE LWS_EXTERN void
    634 lws_close_reason(struct lws *wsi, enum lws_close_status status,
    635  unsigned char *buf, size_t len);
    636 
    638 
    639 struct lws;
    640 struct lws_context;
    641 /* needed even with extensions disabled for create context */
    642 struct lws_extension;
    643 
    655 
    657 
    658 /*
    659  * NOTE: These public enums are part of the abi. If you want to add one,
    660  * add it at where specified so existing users are unaffected.
    661  */
    905  /* external poll() management support */
    968  LWS_CALLBACK_WS_EXT_DEFAULTS = 39,
    971  LWS_CALLBACK_CGI = 40,
    973  LWS_CALLBACK_CGI_TERMINATED = 41,
    975  LWS_CALLBACK_CGI_STDIN_DATA = 42,
    977  LWS_CALLBACK_CGI_STDIN_COMPLETED = 43,
    979  LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP = 44,
    981  LWS_CALLBACK_CLOSED_CLIENT_HTTP = 45,
    983  LWS_CALLBACK_RECEIVE_CLIENT_HTTP = 46,
    985  LWS_CALLBACK_COMPLETED_CLIENT_HTTP = 47,
    987  LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ = 48,
    989  LWS_CALLBACK_HTTP_BIND_PROTOCOL = 49,
    991  LWS_CALLBACK_HTTP_DROP_PROTOCOL = 50,
    993  LWS_CALLBACK_CHECK_ACCESS_RIGHTS = 51,
    995  LWS_CALLBACK_PROCESS_HTML = 52,
    997  LWS_CALLBACK_ADD_HEADERS = 53,
    999  LWS_CALLBACK_SESSION_INFO = 54,
    1002  LWS_CALLBACK_GS_EVENT = 55,
    1019  /****** add new things just above ---^ ******/
    1020 
    1023 };
    1024 
    1025 
    1026 
    1042 typedef int
    1043 lws_callback_function(struct lws *wsi, enum lws_callback_reasons reason,
    1044  void *user, void *in, size_t len);
    1046 
    1056 
    1058 /*
    1059  * NOTE: These public enums are part of the abi. If you want to add one,
    1060  * add it at where specified so existing users are unaffected.
    1061  */
    1062 enum lws_extension_callback_reasons {
    1063  LWS_EXT_CB_SERVER_CONTEXT_CONSTRUCT = 0,
    1064  LWS_EXT_CB_CLIENT_CONTEXT_CONSTRUCT = 1,
    1065  LWS_EXT_CB_SERVER_CONTEXT_DESTRUCT = 2,
    1066  LWS_EXT_CB_CLIENT_CONTEXT_DESTRUCT = 3,
    1067  LWS_EXT_CB_CONSTRUCT = 4,
    1068  LWS_EXT_CB_CLIENT_CONSTRUCT = 5,
    1069  LWS_EXT_CB_CHECK_OK_TO_REALLY_CLOSE = 6,
    1070  LWS_EXT_CB_CHECK_OK_TO_PROPOSE_EXTENSION = 7,
    1071  LWS_EXT_CB_DESTROY = 8,
    1072  LWS_EXT_CB_DESTROY_ANY_WSI_CLOSING = 9,
    1073  LWS_EXT_CB_ANY_WSI_ESTABLISHED = 10,
    1074  LWS_EXT_CB_PACKET_RX_PREPARSE = 11,
    1075  LWS_EXT_CB_PACKET_TX_PRESEND = 12,
    1076  LWS_EXT_CB_PACKET_TX_DO_SEND = 13,
    1077  LWS_EXT_CB_HANDSHAKE_REPLY_TX = 14,
    1078  LWS_EXT_CB_FLUSH_PENDING_TX = 15,
    1079  LWS_EXT_CB_EXTENDED_PAYLOAD_RX = 16,
    1080  LWS_EXT_CB_CAN_PROXY_CLIENT_CONNECTION = 17,
    1081  LWS_EXT_CB_1HZ = 18,
    1082  LWS_EXT_CB_REQUEST_ON_WRITEABLE = 19,
    1083  LWS_EXT_CB_IS_WRITEABLE = 20,
    1084  LWS_EXT_CB_PAYLOAD_TX = 21,
    1085  LWS_EXT_CB_PAYLOAD_RX = 22,
    1086  LWS_EXT_CB_OPTION_DEFAULT = 23,
    1087  LWS_EXT_CB_OPTION_SET = 24,
    1088  LWS_EXT_CB_OPTION_CONFIRM = 25,
    1089  LWS_EXT_CB_NAMED_OPTION_SET = 26,
    1090 
    1091  /****** add new things just above ---^ ******/
    1092 };
    1093 
    1100  /* Add new things just above here ---^
    1101  * This is part of the ABI, don't needlessly break compatibility */
    1102 };
    1103 
    1109  const char *name;
    1112  /* Add new things just above here ---^
    1113  * This is part of the ABI, don't needlessly break compatibility */
    1114 };
    1115 
    1118  const char *option_name;
    1120  const char *start;
    1121  int len;
    1122 };
    1123 
    1184 typedef int
    1185 lws_extension_callback_function(struct lws_context *context,
    1186  const struct lws_extension *ext, struct lws *wsi,
    1187  enum lws_extension_callback_reasons reason,
    1188  void *user, void *in, size_t len);
    1189 
    1192  const char *name;
    1194  const char *client_offer;
    1196  /* Add new things just above here ---^
    1197  * This is part of the ABI, don't needlessly break compatibility */
    1198 };
    1199 
    1208 LWS_VISIBLE LWS_EXTERN int
    1209 lws_set_extension_option(struct lws *wsi, const char *ext_name,
    1210  const char *opt_name, const char *opt_val);
    1211 
    1212 #ifndef LWS_NO_EXTENSIONS
    1213 /* lws_get_internal_extensions() - DEPRECATED
    1214  *
    1215  * \Deprecated There is no longer a set internal extensions table. The table is provided
    1216  * by user code along with application-specific settings. See the test
    1217  * client and server for how to do.
    1218  */
    1219 static LWS_INLINE LWS_WARN_DEPRECATED const struct lws_extension *
    1220 lws_get_internal_extensions(void) { return NULL; }
    1221 
    1232 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    1233 lws_ext_parse_options(const struct lws_extension *ext, struct lws *wsi,
    1234  void *ext_user, const struct lws_ext_options *opts,
    1235  const char *o, int len);
    1236 #endif
    1237 
    1250 LWS_EXTERN
    1252  struct lws_context *context, const struct lws_extension *ext,
    1253  struct lws *wsi, enum lws_extension_callback_reasons reason,
    1254  void *user, void *in, size_t len);
    1255 
    1256 /*
    1257  * The internal exts are part of the public abi
    1258  * If we add more extensions, publish the callback here ------v
    1259  */
    1261 
    1277 
    1282  const char *name;
    1303  unsigned int id;
    1310  void *user;
    1313  /* Add new things just above here ---^
    1314  * This is part of the ABI, don't needlessly break compatibility */
    1315 };
    1316 
    1317 struct lws_vhost;
    1318 
    1327 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
    1328 lws_vhost_name_to_protocol(struct lws_vhost *vh, const char *name);
    1329 
    1339 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
    1340 lws_get_protocol(struct lws *wsi);
    1341 
    1343 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
    1344 lws_protocol_get(struct lws *wsi) LWS_WARN_DEPRECATED;
    1345 
    1356 LWS_VISIBLE LWS_EXTERN void *
    1357 lws_protocol_vh_priv_zalloc(struct lws_vhost *vhost, const struct lws_protocols *prot,
    1358  int size);
    1359 
    1369 LWS_VISIBLE LWS_EXTERN void *
    1370 lws_protocol_vh_priv_get(struct lws_vhost *vhost, const struct lws_protocols *prot);
    1371 
    1380 LWS_VISIBLE LWS_EXTERN int
    1381 lws_finalize_startup(struct lws_context *context);
    1382 
    1383 #ifdef LWS_WITH_PLUGINS
    1384 
    1385 /* PLUGINS implies LIBUV */
    1386 
    1387 #define LWS_PLUGIN_API_MAGIC 180
    1388 
    1391  unsigned int api_magic;
    1392  const struct lws_protocols *protocols;
    1394  const struct lws_extension *extensions;
    1396 };
    1397 
    1398 typedef int (*lws_plugin_init_func)(struct lws_context *,
    1399  struct lws_plugin_capability *);
    1400 typedef int (*lws_plugin_destroy_func)(struct lws_context *);
    1401 
    1403 struct lws_plugin {
    1404  struct lws_plugin *list;
    1405 #if (UV_VERSION_MAJOR > 0)
    1406  uv_lib_t lib;
    1407 #else
    1408  void *l;
    1409 #endif
    1410  char name[64];
    1412 };
    1413 
    1414 #endif
    1415 
    1417 
    1418 
    1427 
    1429 #define LWSGS_EMAIL_CONTENT_SIZE 16384
    1430 
    1432 /* SHA-1 binary and hexified versions */
    1434 typedef struct { unsigned char bin[20]; } lwsgw_hash_bin;
    1436 typedef struct { char id[41]; } lwsgw_hash;
    1437 
    1444 };
    1445 
    1448  char username[32];
    1449  char email[100];
    1450  char ip[72];
    1451  unsigned int mask;
    1453  char session[42];
    1454 };
    1455 
    1460 };
    1461 
    1464  enum lws_gs_event event;
    1465  const char *username;
    1466  const char *email;
    1467 };
    1468 
    1470 
    1471 
    1485 
    1487 /*
    1488  * NOTE: These public enums are part of the abi. If you want to add one,
    1489  * add it at where specified so existing users are unaffected.
    1490  */
    1491 
    1495  (1 << 12),
    1502  (1 << 12),
    1518  (1 << 12),
    1523  (1 << 12),
    1547  /****** add new things just above ---^ ******/
    1548 };
    1549 
    1550 #define lws_check_opt(c, f) (((c) & (f)) == (f))
    1551 
    1562  int port;
    1567  const char *iface;
    1574  const struct lws_protocols *protocols;
    1578  const struct lws_extension *extensions;
    1586  const char *ssl_cert_filepath;
    1596  const char *ssl_ca_filepath;
    1598  const char *ssl_cipher_list;
    1602  const char *http_proxy_address;
    1605  unsigned int http_proxy_port;
    1607  int gid;
    1609  int uid;
    1611  unsigned int options;
    1613  void *user;
    1616  int ka_time;
    1626 #ifdef LWS_OPENSSL_SUPPORT
    1632 #else /* maintain structure layout either way */
    1634 #endif
    1635 
    1646  unsigned int count_threads;
    1648  unsigned int fd_limit_per_thread;
    1652  unsigned int timeout_secs;
    1657  const char *ecdh_curve;
    1659  const char *vhost_name;
    1663  const char * const *plugin_dirs;
    1672  const char *log_filepath;
    1675  const struct lws_http_mount *mounts;
    1677  const char *server_string;
    1680  unsigned int pt_serv_buf_size;
    1695  unsigned short ws_ping_pong_interval;
    1726  /* Add new things just above here ---^
    1727  * This is part of the ABI, don't needlessly break compatibility
    1728  *
    1729  * The below is to ensure later library versions with new
    1730  * members added above will see 0 (default) even if the app
    1731  * was not built against the newer headers.
    1732  */
    1733 
    1734  void *_unused[8];
    1735 };
    1736 
    1771 LWS_VISIBLE LWS_EXTERN struct lws_context *
    1773 
    1782 LWS_VISIBLE LWS_EXTERN void
    1783 lws_context_destroy(struct lws_context *context);
    1784 
    1785 LWS_VISIBLE LWS_EXTERN void
    1786 lws_context_destroy2(struct lws_context *context);
    1787 
    1788 typedef int (*lws_reload_func)(void);
    1789 
    1814 LWS_VISIBLE LWS_EXTERN void
    1815 lws_context_deprecate(struct lws_context *context, lws_reload_func cb);
    1816 
    1817 LWS_VISIBLE LWS_EXTERN int
    1818 lws_context_is_deprecated(struct lws_context *context);
    1819 
    1837 LWS_VISIBLE LWS_EXTERN int
    1838 lws_set_proxy(struct lws_vhost *vhost, const char *proxy);
    1839 
    1840 
    1841 struct lws_vhost;
    1842 
    1852 LWS_EXTERN LWS_VISIBLE struct lws_vhost *
    1853 lws_create_vhost(struct lws_context *context,
    1854  struct lws_context_creation_info *info);
    1855 
    1870 LWS_VISIBLE LWS_EXTERN int
    1871 lwsws_get_config_globals(struct lws_context_creation_info *info, const char *d,
    1872  char **config_strings, int *len);
    1873 
    1889 LWS_VISIBLE LWS_EXTERN int
    1890 lwsws_get_config_vhosts(struct lws_context *context,
    1891  struct lws_context_creation_info *info, const char *d,
    1892  char **config_strings, int *len);
    1893 
    1895 LWS_VISIBLE LWS_EXTERN struct lws_vhost *
    1896 lws_vhost_get(struct lws *wsi) LWS_WARN_DEPRECATED;
    1897 
    1903 LWS_VISIBLE LWS_EXTERN struct lws_vhost *
    1904 lws_get_vhost(struct lws *wsi);
    1905 
    1913 LWS_VISIBLE LWS_EXTERN int
    1914 lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len);
    1915 
    1923 LWS_VISIBLE LWS_EXTERN int
    1924 lws_json_dump_context(const struct lws_context *context, char *buf, int len,
    1925  int hide_vhosts);
    1926 
    1936 LWS_VISIBLE LWS_EXTERN void *
    1937 lws_context_user(struct lws_context *context);
    1938 
    1944 
    1954  const char *name;
    1955  const char *value;
    1956 };
    1957 
    1970 };
    1971 
    1979  const char *mountpoint;
    1981  const char *origin;
    1983  const char *def;
    1985  const char *protocol;
    2001  unsigned int auth_mask;
    2004  unsigned int cache_reusable:1;
    2005  unsigned int cache_revalidate:1;
    2006  unsigned int cache_intermediaries:1;
    2008  unsigned char origin_protocol;
    2009  unsigned char mountpoint_len;
    2014  /* Add new things just above here ---^
    2015  * This is part of the ABI, don't needlessly break compatibility
    2016  *
    2017  * The below is to ensure later library versions with new
    2018  * members added above will see 0 (default) even if the app
    2019  * was not built against the newer headers.
    2020  */
    2021 
    2022  void *_unused[2];
    2023 };
    2026 
    2032 
    2040  LCCSCF_USE_SSL = (1 << 0),
    2041  LCCSCF_ALLOW_SELFSIGNED = (1 << 1),
    2042  LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK = (1 << 2),
    2043  LCCSCF_ALLOW_EXPIRED = (1 << 3)
    2044 };
    2045 
    2050  struct lws_context *context;
    2052  const char *address;
    2054  int port;
    2058  const char *path;
    2060  const char *host;
    2062  const char *origin;
    2064  const char *protocol;
    2068  void *userdata;
    2072  const char *method;
    2075  struct lws *parent_wsi;
    2079  const char *uri_replace_from;
    2082  const char *uri_replace_to;
    2084  struct lws_vhost *vhost;
    2086  struct lws **pwsi;
    2098  /* Add new things just above here ---^
    2099  * This is part of the ABI, don't needlessly break compatibility
    2100  *
    2101  * The below is to ensure later library versions with new
    2102  * members added above will see 0 (default) even if the app
    2103  * was not built against the newer headers.
    2104  */
    2105 
    2106  void *_unused[4];
    2107 };
    2108 
    2116 LWS_VISIBLE LWS_EXTERN struct lws *
    2118 
    2139 /* deprecated, use lws_client_connect_via_info() */
    2140 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    2141 lws_client_connect(struct lws_context *clients, const char *address,
    2142  int port, int ssl_connection, const char *path,
    2143  const char *host, const char *origin, const char *protocol,
    2144  int ietf_version_or_minus_one) LWS_WARN_DEPRECATED;
    2145 /* deprecated, use lws_client_connect_via_info() */
    2166 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    2167 lws_client_connect_extended(struct lws_context *clients, const char *address,
    2168  int port, int ssl_connection, const char *path,
    2169  const char *host, const char *origin,
    2170  const char *protocol, int ietf_version_or_minus_one,
    2171  void *userdata) LWS_WARN_DEPRECATED;
    2172 
    2198 LWS_VISIBLE LWS_EXTERN int
    2200  struct lws_vhost *vhost);
    2201 
    2202 LWS_VISIBLE LWS_EXTERN int
    2203 lws_http_client_read(struct lws *wsi, char **buf, int *len);
    2204 
    2212 LWS_VISIBLE LWS_EXTERN unsigned int
    2213 lws_http_client_http_response(struct lws *wsi);
    2214 
    2215 LWS_VISIBLE LWS_EXTERN void
    2216 lws_client_http_body_pending(struct lws *wsi, int something_left_to_send);
    2217 
    2238 
    2247 
    2280 LWS_VISIBLE LWS_EXTERN int
    2281 lws_service(struct lws_context *context, int timeout_ms);
    2282 
    2294 LWS_VISIBLE LWS_EXTERN int
    2295 lws_service_tsi(struct lws_context *context, int timeout_ms, int tsi);
    2296 
    2312 LWS_VISIBLE LWS_EXTERN void
    2313 lws_cancel_service_pt(struct lws *wsi);
    2314 
    2326 LWS_VISIBLE LWS_EXTERN void
    2327 lws_cancel_service(struct lws_context *context);
    2328 
    2355 LWS_VISIBLE LWS_EXTERN int
    2356 lws_service_fd(struct lws_context *context, struct lws_pollfd *pollfd);
    2357 
    2367 LWS_VISIBLE LWS_EXTERN int
    2368 lws_service_fd_tsi(struct lws_context *context, struct lws_pollfd *pollfd,
    2369  int tsi);
    2370 
    2388 LWS_VISIBLE LWS_EXTERN int
    2389 lws_service_adjust_timeout(struct lws_context *context, int timeout_ms, int tsi);
    2390 
    2391 /* Backwards compatibility */
    2392 #define lws_plat_service_tsi lws_service_tsi
    2393 
    2395 
    2401 
    2408 
    2420 LWS_VISIBLE LWS_EXTERN const char *
    2421 lws_get_mimetype(const char *file, const struct lws_http_mount *m);
    2422 
    2441 LWS_VISIBLE LWS_EXTERN int
    2442 lws_serve_http_file(struct lws *wsi, const char *file, const char *content_type,
    2443  const char *other_headers, int other_headers_len);
    2444 LWS_VISIBLE LWS_EXTERN int
    2445 lws_serve_http_file_fragment(struct lws *wsi);
    2447 
    2458 
    2459 enum http_status {
    2460  HTTP_STATUS_OK = 200,
    2461  HTTP_STATUS_NO_CONTENT = 204,
    2462  HTTP_STATUS_PARTIAL_CONTENT = 206,
    2463 
    2464  HTTP_STATUS_MOVED_PERMANENTLY = 301,
    2465  HTTP_STATUS_FOUND = 302,
    2466  HTTP_STATUS_SEE_OTHER = 303,
    2467 
    2468  HTTP_STATUS_BAD_REQUEST = 400,
    2469  HTTP_STATUS_UNAUTHORIZED,
    2470  HTTP_STATUS_PAYMENT_REQUIRED,
    2471  HTTP_STATUS_FORBIDDEN,
    2472  HTTP_STATUS_NOT_FOUND,
    2473  HTTP_STATUS_METHOD_NOT_ALLOWED,
    2474  HTTP_STATUS_NOT_ACCEPTABLE,
    2475  HTTP_STATUS_PROXY_AUTH_REQUIRED,
    2476  HTTP_STATUS_REQUEST_TIMEOUT,
    2477  HTTP_STATUS_CONFLICT,
    2478  HTTP_STATUS_GONE,
    2479  HTTP_STATUS_LENGTH_REQUIRED,
    2480  HTTP_STATUS_PRECONDITION_FAILED,
    2481  HTTP_STATUS_REQ_ENTITY_TOO_LARGE,
    2482  HTTP_STATUS_REQ_URI_TOO_LONG,
    2483  HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE,
    2484  HTTP_STATUS_REQ_RANGE_NOT_SATISFIABLE,
    2485  HTTP_STATUS_EXPECTATION_FAILED,
    2486 
    2487  HTTP_STATUS_INTERNAL_SERVER_ERROR = 500,
    2488  HTTP_STATUS_NOT_IMPLEMENTED,
    2489  HTTP_STATUS_BAD_GATEWAY,
    2490  HTTP_STATUS_SERVICE_UNAVAILABLE,
    2491  HTTP_STATUS_GATEWAY_TIMEOUT,
    2492  HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED,
    2493 };
    2494 
    2496  char *p;
    2497  int len;
    2498  int max_len;
    2499  int final;
    2500 };
    2501 
    2502 typedef const char *(*lws_process_html_state_cb)(void *data, int index);
    2503 
    2505  char *start;
    2506  char swallow[16];
    2507  int pos;
    2508  void *data;
    2509  const char * const *vars;
    2512  lws_process_html_state_cb replace;
    2513 };
    2514 
    2519 LWS_VISIBLE LWS_EXTERN int
    2521  struct lws_process_html_state *s);
    2523 
    2556 
    2564 struct lws_tokens {
    2565  char *token;
    2567 };
    2568 
    2569 /* enum lws_token_indexes
    2570  * these have to be kept in sync with lextable.h / minilex.c
    2571  *
    2572  * NOTE: These public enums are part of the abi. If you want to add one,
    2573  * add it at where specified so existing users are unaffected.
    2574  */
    2575 enum lws_token_indexes {
    2576  WSI_TOKEN_GET_URI = 0,
    2577  WSI_TOKEN_POST_URI = 1,
    2578  WSI_TOKEN_OPTIONS_URI = 2,
    2579  WSI_TOKEN_HOST = 3,
    2580  WSI_TOKEN_CONNECTION = 4,
    2581  WSI_TOKEN_UPGRADE = 5,
    2582  WSI_TOKEN_ORIGIN = 6,
    2583  WSI_TOKEN_DRAFT = 7,
    2584  WSI_TOKEN_CHALLENGE = 8,
    2585  WSI_TOKEN_EXTENSIONS = 9,
    2586  WSI_TOKEN_KEY1 = 10,
    2587  WSI_TOKEN_KEY2 = 11,
    2588  WSI_TOKEN_PROTOCOL = 12,
    2589  WSI_TOKEN_ACCEPT = 13,
    2590  WSI_TOKEN_NONCE = 14,
    2591  WSI_TOKEN_HTTP = 15,
    2592  WSI_TOKEN_HTTP2_SETTINGS = 16,
    2593  WSI_TOKEN_HTTP_ACCEPT = 17,
    2594  WSI_TOKEN_HTTP_AC_REQUEST_HEADERS = 18,
    2595  WSI_TOKEN_HTTP_IF_MODIFIED_SINCE = 19,
    2596  WSI_TOKEN_HTTP_IF_NONE_MATCH = 20,
    2597  WSI_TOKEN_HTTP_ACCEPT_ENCODING = 21,
    2598  WSI_TOKEN_HTTP_ACCEPT_LANGUAGE = 22,
    2599  WSI_TOKEN_HTTP_PRAGMA = 23,
    2600  WSI_TOKEN_HTTP_CACHE_CONTROL = 24,
    2601  WSI_TOKEN_HTTP_AUTHORIZATION = 25,
    2602  WSI_TOKEN_HTTP_COOKIE = 26,
    2603  WSI_TOKEN_HTTP_CONTENT_LENGTH = 27,
    2604  WSI_TOKEN_HTTP_CONTENT_TYPE = 28,
    2605  WSI_TOKEN_HTTP_DATE = 29,
    2606  WSI_TOKEN_HTTP_RANGE = 30,
    2607  WSI_TOKEN_HTTP_REFERER = 31,
    2608  WSI_TOKEN_KEY = 32,
    2609  WSI_TOKEN_VERSION = 33,
    2610  WSI_TOKEN_SWORIGIN = 34,
    2611 
    2612  WSI_TOKEN_HTTP_COLON_AUTHORITY = 35,
    2613  WSI_TOKEN_HTTP_COLON_METHOD = 36,
    2614  WSI_TOKEN_HTTP_COLON_PATH = 37,
    2615  WSI_TOKEN_HTTP_COLON_SCHEME = 38,
    2616  WSI_TOKEN_HTTP_COLON_STATUS = 39,
    2617 
    2618  WSI_TOKEN_HTTP_ACCEPT_CHARSET = 40,
    2619  WSI_TOKEN_HTTP_ACCEPT_RANGES = 41,
    2620  WSI_TOKEN_HTTP_ACCESS_CONTROL_ALLOW_ORIGIN = 42,
    2621  WSI_TOKEN_HTTP_AGE = 43,
    2622  WSI_TOKEN_HTTP_ALLOW = 44,
    2623  WSI_TOKEN_HTTP_CONTENT_DISPOSITION = 45,
    2624  WSI_TOKEN_HTTP_CONTENT_ENCODING = 46,
    2625  WSI_TOKEN_HTTP_CONTENT_LANGUAGE = 47,
    2626  WSI_TOKEN_HTTP_CONTENT_LOCATION = 48,
    2627  WSI_TOKEN_HTTP_CONTENT_RANGE = 49,
    2628  WSI_TOKEN_HTTP_ETAG = 50,
    2629  WSI_TOKEN_HTTP_EXPECT = 51,
    2630  WSI_TOKEN_HTTP_EXPIRES = 52,
    2631  WSI_TOKEN_HTTP_FROM = 53,
    2632  WSI_TOKEN_HTTP_IF_MATCH = 54,
    2633  WSI_TOKEN_HTTP_IF_RANGE = 55,
    2634  WSI_TOKEN_HTTP_IF_UNMODIFIED_SINCE = 56,
    2635  WSI_TOKEN_HTTP_LAST_MODIFIED = 57,
    2636  WSI_TOKEN_HTTP_LINK = 58,
    2637  WSI_TOKEN_HTTP_LOCATION = 59,
    2638  WSI_TOKEN_HTTP_MAX_FORWARDS = 60,
    2639  WSI_TOKEN_HTTP_PROXY_AUTHENTICATE = 61,
    2640  WSI_TOKEN_HTTP_PROXY_AUTHORIZATION = 62,
    2641  WSI_TOKEN_HTTP_REFRESH = 63,
    2642  WSI_TOKEN_HTTP_RETRY_AFTER = 64,
    2643  WSI_TOKEN_HTTP_SERVER = 65,
    2644  WSI_TOKEN_HTTP_SET_COOKIE = 66,
    2645  WSI_TOKEN_HTTP_STRICT_TRANSPORT_SECURITY = 67,
    2646  WSI_TOKEN_HTTP_TRANSFER_ENCODING = 68,
    2647  WSI_TOKEN_HTTP_USER_AGENT = 69,
    2648  WSI_TOKEN_HTTP_VARY = 70,
    2649  WSI_TOKEN_HTTP_VIA = 71,
    2650  WSI_TOKEN_HTTP_WWW_AUTHENTICATE = 72,
    2651 
    2652  WSI_TOKEN_PATCH_URI = 73,
    2653  WSI_TOKEN_PUT_URI = 74,
    2654  WSI_TOKEN_DELETE_URI = 75,
    2655 
    2656  WSI_TOKEN_HTTP_URI_ARGS = 76,
    2657  WSI_TOKEN_PROXY = 77,
    2658  WSI_TOKEN_HTTP_X_REAL_IP = 78,
    2659  WSI_TOKEN_HTTP1_0 = 79,
    2660  WSI_TOKEN_X_FORWARDED_FOR = 80,
    2661 
    2662  /****** add new things just above ---^ ******/
    2663 
    2664  /* use token storage to stash these internally, not for
    2665  * user use */
    2666 
    2667  _WSI_TOKEN_CLIENT_SENT_PROTOCOLS,
    2668  _WSI_TOKEN_CLIENT_PEER_ADDRESS,
    2669  _WSI_TOKEN_CLIENT_URI,
    2670  _WSI_TOKEN_CLIENT_HOST,
    2671  _WSI_TOKEN_CLIENT_ORIGIN,
    2672  _WSI_TOKEN_CLIENT_METHOD,
    2673 
    2674  /* always last real token index*/
    2675  WSI_TOKEN_COUNT,
    2676 
    2677  /* parser state additions, no storage associated */
    2678  WSI_TOKEN_NAME_PART,
    2679  WSI_TOKEN_SKIPPING,
    2680  WSI_TOKEN_SKIPPING_SAW_CR,
    2681  WSI_PARSING_COMPLETE,
    2682  WSI_INIT_TOKEN_MUXURL,
    2683 };
    2684 
    2686  unsigned short token_limit[WSI_TOKEN_COUNT];
    2687 };
    2688 
    2694 LWS_VISIBLE LWS_EXTERN const unsigned char *
    2695 lws_token_to_string(enum lws_token_indexes token);
    2696 
    2697 
    2706 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2707 lws_hdr_total_length(struct lws *wsi, enum lws_token_indexes h);
    2708 
    2718 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2719 lws_hdr_fragment_length(struct lws *wsi, enum lws_token_indexes h, int frag_idx);
    2720 
    2734 LWS_VISIBLE LWS_EXTERN int
    2735 lws_hdr_copy(struct lws *wsi, char *dest, int len, enum lws_token_indexes h);
    2736 
    2754 LWS_VISIBLE LWS_EXTERN int
    2755 lws_hdr_copy_fragment(struct lws *wsi, char *dest, int len,
    2756  enum lws_token_indexes h, int frag_idx);
    2757 
    2768 LWS_VISIBLE LWS_EXTERN const char *
    2769 lws_get_urlarg_by_name(struct lws *wsi, const char *name, char *buf, int len);
    2771 
    2786 
    2797 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2798 lws_add_http_header_status(struct lws *wsi,
    2799  unsigned int code, unsigned char **p,
    2800  unsigned char *end);
    2813 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2814 lws_add_http_header_by_name(struct lws *wsi, const unsigned char *name,
    2815  const unsigned char *value, int length,
    2816  unsigned char **p, unsigned char *end);
    2830 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2831 lws_add_http_header_by_token(struct lws *wsi, enum lws_token_indexes token,
    2832  const unsigned char *value, int length,
    2833  unsigned char **p, unsigned char *end);
    2844 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2845 lws_add_http_header_content_length(struct lws *wsi,
    2846  unsigned long content_length,
    2847  unsigned char **p, unsigned char *end);
    2857 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2858 lws_finalize_http_header(struct lws *wsi, unsigned char **p,
    2859  unsigned char *end);
    2861 
    2880 
    2890 };
    2891 
    2905 typedef int (*lws_spa_fileupload_cb)(void *data, const char *name,
    2906  const char *filename, char *buf, int len,
    2907  enum lws_spa_fileupload_states state);
    2908 
    2911 struct lws_spa;
    2912 
    2931 LWS_VISIBLE LWS_EXTERN struct lws_spa *
    2932 lws_spa_create(struct lws *wsi, const char * const *param_names,
    2933  int count_params, int max_storage, lws_spa_fileupload_cb opt_cb,
    2934  void *opt_data);
    2935 
    2943 LWS_VISIBLE LWS_EXTERN int
    2944 lws_spa_process(struct lws_spa *spa, const char *in, int len);
    2945 
    2951 LWS_VISIBLE LWS_EXTERN int
    2952 lws_spa_finalize(struct lws_spa *spa);
    2953 
    2960 LWS_VISIBLE LWS_EXTERN int
    2961 lws_spa_get_length(struct lws_spa *spa, int n);
    2962 
    2968 LWS_VISIBLE LWS_EXTERN const char *
    2969 lws_spa_get_string(struct lws_spa *spa, int n);
    2970 
    2976 LWS_VISIBLE LWS_EXTERN int
    2977 lws_spa_destroy(struct lws_spa *spa);
    2979 
    2990 
    3001 LWS_VISIBLE LWS_EXTERN const char *
    3002 lws_urlencode(char *escaped, const char *string, int len);
    3003 
    3004 /*
    3005  * URLDECODE 1 / 2
    3006  *
    3007  * This simple urldecode only operates until the first '\0' and requires the
    3008  * data to exist all at once
    3009  */
    3022 LWS_VISIBLE LWS_EXTERN int
    3023 lws_urldecode(char *string, const char *escaped, int len);
    3025 
    3034 LWS_VISIBLE LWS_EXTERN int
    3035 lws_return_http_status(struct lws *wsi, unsigned int code,
    3036  const char *html_body);
    3037 
    3048 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3049 lws_http_redirect(struct lws *wsi, int code, const unsigned char *loc, int len,
    3050  unsigned char **p, unsigned char *end);
    3051 
    3060 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3061 lws_http_transaction_completed(struct lws *wsi);
    3063 
    3071 
    3082 LWS_VISIBLE LWS_EXTERN const char *
    3083 lws_sql_purify(char *escaped, const char *string, int len);
    3084 
    3095 LWS_VISIBLE LWS_EXTERN const char *
    3096 lws_json_purify(char *escaped, const char *string, int len);
    3098 
    3105 
    3107 #ifdef LWS_USE_LIBEV
    3108 typedef void (lws_ev_signal_cb_t)(EV_P_ struct ev_signal *w, int revents);
    3109 
    3110 LWS_VISIBLE LWS_EXTERN int
    3111 lws_ev_sigint_cfg(struct lws_context *context, int use_ev_sigint,
    3112  lws_ev_signal_cb_t *cb);
    3113 
    3114 LWS_VISIBLE LWS_EXTERN int
    3115 lws_ev_initloop(struct lws_context *context, struct ev_loop *loop, int tsi);
    3116 
    3117 LWS_VISIBLE LWS_EXTERN void
    3118 lws_ev_sigint_cb(struct ev_loop *loop, struct ev_signal *watcher, int revents);
    3119 #endif /* LWS_USE_LIBEV */
    3120 
    3122 
    3129 #ifdef LWS_USE_LIBUV
    3131 LWS_VISIBLE LWS_EXTERN int
    3132 lws_uv_sigint_cfg(struct lws_context *context, int use_uv_sigint,
    3133  uv_signal_cb cb);
    3134 
    3135 LWS_VISIBLE LWS_EXTERN void
    3136 lws_libuv_run(const struct lws_context *context, int tsi);
    3137 
    3138 LWS_VISIBLE LWS_EXTERN void
    3139 lws_libuv_stop(struct lws_context *context);
    3140 
    3141 LWS_VISIBLE LWS_EXTERN void
    3142 lws_libuv_stop_without_kill(const struct lws_context *context, int tsi);
    3143 
    3144 LWS_VISIBLE LWS_EXTERN int
    3145 lws_uv_initloop(struct lws_context *context, uv_loop_t *loop, int tsi);
    3146 
    3147 LWS_VISIBLE LWS_EXTERN uv_loop_t *
    3148 lws_uv_getloop(struct lws_context *context, int tsi);
    3149 
    3150 LWS_VISIBLE LWS_EXTERN void
    3151 lws_uv_sigint_cb(uv_signal_t *watcher, int signum);
    3152 #endif /* LWS_USE_LIBUV */
    3153 
    3160 
    3161 /*
    3162  * NOTE: These public enums are part of the abi. If you want to add one,
    3163  * add it at where specified so existing users are unaffected.
    3164  */
    3165 enum pending_timeout {
    3166  NO_PENDING_TIMEOUT = 0,
    3167  PENDING_TIMEOUT_AWAITING_PROXY_RESPONSE = 1,
    3168  PENDING_TIMEOUT_AWAITING_CONNECT_RESPONSE = 2,
    3169  PENDING_TIMEOUT_ESTABLISH_WITH_SERVER = 3,
    3170  PENDING_TIMEOUT_AWAITING_SERVER_RESPONSE = 4,
    3171  PENDING_TIMEOUT_AWAITING_PING = 5,
    3172  PENDING_TIMEOUT_CLOSE_ACK = 6,
    3173  PENDING_TIMEOUT_AWAITING_EXTENSION_CONNECT_RESPONSE = 7,
    3174  PENDING_TIMEOUT_SENT_CLIENT_HANDSHAKE = 8,
    3175  PENDING_TIMEOUT_SSL_ACCEPT = 9,
    3176  PENDING_TIMEOUT_HTTP_CONTENT = 10,
    3177  PENDING_TIMEOUT_AWAITING_CLIENT_HS_SEND = 11,
    3178  PENDING_FLUSH_STORED_SEND_BEFORE_CLOSE = 12,
    3179  PENDING_TIMEOUT_SHUTDOWN_FLUSH = 13,
    3180  PENDING_TIMEOUT_CGI = 14,
    3181  PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE = 15,
    3182  PENDING_TIMEOUT_WS_PONG_CHECK_SEND_PING = 16,
    3183  PENDING_TIMEOUT_WS_PONG_CHECK_GET_PONG = 17,
    3184  PENDING_TIMEOUT_CLIENT_ISSUE_PAYLOAD = 18,
    3185 
    3186  /****** add new things just above ---^ ******/
    3187 };
    3188 
    3198 LWS_VISIBLE LWS_EXTERN void
    3199 lws_set_timeout(struct lws *wsi, enum pending_timeout reason, int secs);
    3201 
    3207 #if !defined(LWS_SIZEOFPTR)
    3208 #define LWS_SIZEOFPTR (sizeof (void *))
    3209 #endif
    3210 #if !defined(u_int64_t)
    3211 #define u_int64_t unsigned long long
    3212 #endif
    3213 
    3214 #if defined(__x86_64__)
    3215 #define _LWS_PAD_SIZE 16 /* Intel recommended for best performance */
    3216 #else
    3217 #define _LWS_PAD_SIZE LWS_SIZEOFPTR /* Size of a pointer on the target arch */
    3218 #endif
    3219 #define _LWS_PAD(n) (((n) % _LWS_PAD_SIZE) ? \
    3220  ((n) + (_LWS_PAD_SIZE - ((n) % _LWS_PAD_SIZE))) : (n))
    3221 #define LWS_PRE _LWS_PAD(4 + 10)
    3222 /* used prior to 1.7 and retained for backward compatibility */
    3223 #define LWS_SEND_BUFFER_PRE_PADDING LWS_PRE
    3224 #define LWS_SEND_BUFFER_POST_PADDING 0
    3225 
    3226 /*
    3227  * NOTE: These public enums are part of the abi. If you want to add one,
    3228  * add it at where specified so existing users are unaffected.
    3229  */
    3244  /* LWS_WRITE_CLOSE is handled by lws_close_reason() */
    3245  LWS_WRITE_PING = 5,
    3246  LWS_WRITE_PONG = 6,
    3247 
    3248  /* Same as write_http but we know this write ends the transaction */
    3249  LWS_WRITE_HTTP_FINAL = 7,
    3250 
    3251  /* HTTP2 */
    3252 
    3260  /****** add new things just above ---^ ******/
    3261 
    3262  /* flags */
    3263 
    3271 };
    3272 
    3273 
    3360 LWS_VISIBLE LWS_EXTERN int
    3361 lws_write(struct lws *wsi, unsigned char *buf, size_t len,
    3362  enum lws_write_protocol protocol);
    3363 
    3364 /* helper for case where buffer may be const */
    3365 #define lws_write_http(wsi, buf, len) \
    3366  lws_write(wsi, (unsigned char *)(buf), len, LWS_WRITE_HTTP)
    3367 
    3387 
    3400 LWS_VISIBLE LWS_EXTERN int
    3401 lws_callback_on_writable(struct lws *wsi);
    3402 
    3416 LWS_VISIBLE LWS_EXTERN int
    3417 lws_callback_on_writable_all_protocol(const struct lws_context *context,
    3418  const struct lws_protocols *protocol);
    3419 
    3433 LWS_VISIBLE LWS_EXTERN int
    3434 lws_callback_on_writable_all_protocol_vhost(const struct lws_vhost *vhost,
    3435  const struct lws_protocols *protocol);
    3436 
    3449 LWS_VISIBLE LWS_EXTERN int
    3450 lws_callback_all_protocol(struct lws_context *context,
    3451  const struct lws_protocols *protocol, int reason);
    3452 
    3465 LWS_VISIBLE LWS_EXTERN int
    3466 lws_callback_all_protocol_vhost(struct lws_vhost *vh,
    3467  const struct lws_protocols *protocol, int reason);
    3468 
    3482 LWS_VISIBLE LWS_EXTERN int
    3483 lws_callback_vhost_protocols(struct lws *wsi, int reason, void *in, int len);
    3484 
    3485 LWS_VISIBLE LWS_EXTERN int
    3486 lws_callback_http_dummy(struct lws *wsi, enum lws_callback_reasons reason,
    3487  void *user, void *in, size_t len);
    3488 
    3496 LWS_VISIBLE LWS_EXTERN int
    3497 lws_get_socket_fd(struct lws *wsi);
    3498 
    3520 LWS_VISIBLE LWS_EXTERN size_t
    3521 lws_get_peer_write_allowance(struct lws *wsi);
    3523 
    3534 LWS_VISIBLE LWS_EXTERN int
    3535 lws_rx_flow_control(struct lws *wsi, int enable);
    3536 
    3546 LWS_VISIBLE LWS_EXTERN void
    3547 lws_rx_flow_allow_all_protocol(const struct lws_context *context,
    3548  const struct lws_protocols *protocol);
    3549 
    3566 LWS_VISIBLE LWS_EXTERN size_t
    3567 lws_remaining_packet_payload(struct lws *wsi);
    3568 
    3569 
    3578 
    3591 LWS_VISIBLE LWS_EXTERN struct lws *
    3592 lws_adopt_socket(struct lws_context *context, lws_sockfd_type accept_fd);
    3615 LWS_VISIBLE LWS_EXTERN struct lws *
    3616 lws_adopt_socket_readbuf(struct lws_context *context, lws_sockfd_type accept_fd,
    3617  const char *readbuf, size_t len);
    3619 
    3625 
    3636 LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT
    3637 lws_canonical_hostname(struct lws_context *context);
    3638 
    3653 LWS_VISIBLE LWS_EXTERN void
    3654 lws_get_peer_addresses(struct lws *wsi, lws_sockfd_type fd, char *name,
    3655  int name_len, char *rip, int rip_len);
    3656 
    3667 LWS_VISIBLE LWS_EXTERN const char *
    3668 lws_get_peer_simple(struct lws *wsi, char *name, int namelen);
    3669 #ifndef LWS_WITH_ESP8266
    3670 
    3681 LWS_VISIBLE LWS_EXTERN int
    3682 lws_interface_to_sa(int ipv6, const char *ifname, struct sockaddr_in *addr,
    3683  size_t addrlen);
    3685 #endif
    3686 
    3692 
    3705 LWS_VISIBLE LWS_EXTERN int
    3706 lws_snprintf(char *str, size_t size, const char *format, ...);
    3707 
    3719 LWS_VISIBLE LWS_EXTERN int
    3720 lws_get_random(struct lws_context *context, void *buf, int len);
    3728 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3729 lws_daemonize(const char *_lock_path);
    3735 LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT
    3737 
    3744 LWS_VISIBLE LWS_EXTERN void *
    3745 lws_wsi_user(struct lws *wsi);
    3746 
    3758 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3759 lws_parse_uri(char *p, const char **prot, const char **ads, int *port,
    3760  const char **path);
    3761 
    3765 LWS_VISIBLE LWS_EXTERN unsigned long
    3766 lws_now_secs(void);
    3767 
    3777 LWS_VISIBLE LWS_EXTERN struct lws_context * LWS_WARN_UNUSED_RESULT
    3778 lws_get_context(const struct lws *wsi);
    3779 
    3789 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3790 lws_get_count_threads(struct lws_context *context);
    3791 
    3799 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    3800 lws_get_parent(const struct lws *wsi);
    3801 
    3808 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    3809 lws_get_child(const struct lws *wsi);
    3810 
    3811 
    3812 /*
    3813  * \deprecated DEPRECATED Note: this is not normally needed as a user api.
    3814  * It's provided in case it is
    3815  * useful when integrating with other app poll loop service code.
    3816  */
    3817 LWS_VISIBLE LWS_EXTERN int
    3818 lws_read(struct lws *wsi, unsigned char *buf, size_t len);
    3819 
    3827 LWS_VISIBLE LWS_EXTERN void
    3828 lws_set_allocator(void *(*realloc)(void *ptr, size_t size));
    3830 
    3836 
    3843 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3844 lws_send_pipe_choked(struct lws *wsi);
    3845 
    3850 LWS_VISIBLE LWS_EXTERN int
    3851 lws_is_final_fragment(struct lws *wsi);
    3852 
    3857 LWS_VISIBLE LWS_EXTERN unsigned char
    3858 lws_get_reserved_bits(struct lws *wsi);
    3859 
    3876 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3877 lws_partial_buffered(struct lws *wsi);
    3878 
    3888 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3889 lws_frame_is_binary(struct lws *wsi);
    3890 
    3899 LWS_VISIBLE LWS_EXTERN int
    3900 lws_is_ssl(struct lws *wsi);
    3905 LWS_VISIBLE LWS_EXTERN int
    3906 lws_is_cgi(struct lws *wsi);
    3908 
    3909 
    3915 #ifdef LWS_SHA1_USE_OPENSSL_NAME
    3917 #define lws_SHA1 SHA1
    3918 #else
    3919 
    3928 LWS_VISIBLE LWS_EXTERN unsigned char *
    3929 lws_SHA1(const unsigned char *d, size_t n, unsigned char *md);
    3930 #endif
    3931 
    3941 LWS_VISIBLE LWS_EXTERN int
    3942 lws_b64_encode_string(const char *in, int in_len, char *out, int out_size);
    3952 LWS_VISIBLE LWS_EXTERN int
    3953 lws_b64_decode_string(const char *in, char *out, int out_size);
    3955 
    3956 
    3966 #ifdef LWS_WITH_CGI
    3967 enum lws_enum_stdinouterr {
    3968  LWS_STDIN = 0,
    3969  LWS_STDOUT = 1,
    3970  LWS_STDERR = 2,
    3971 };
    3972 
    3973 enum lws_cgi_hdr_state {
    3974  LCHS_HEADER,
    3975  LCHS_CR1,
    3976  LCHS_LF1,
    3977  LCHS_CR2,
    3978  LCHS_LF2,
    3979  LHCS_PAYLOAD,
    3980  LCHS_SINGLE_0A,
    3981 };
    3982 
    3984  struct lws **stdwsi;
    3985  enum lws_enum_stdinouterr ch;
    3986  unsigned char *data;
    3987  enum lws_cgi_hdr_state hdr_state;
    3988  int len;
    3989 };
    3990 
    3991 
    4001 LWS_VISIBLE LWS_EXTERN int
    4002 lws_cgi(struct lws *wsi, const char * const *exec_array,
    4003  int script_uri_path_len, int timeout_secs,
    4004  const struct lws_protocol_vhost_options *mp_cgienv);
    4005 
    4011 LWS_VISIBLE LWS_EXTERN int
    4012 lws_cgi_write_split_stdout_headers(struct lws *wsi);
    4013 
    4019 LWS_VISIBLE LWS_EXTERN int
    4020 lws_cgi_kill(struct lws *wsi);
    4021 #endif
    4022 
    4024 
    4041 
    4048  lws_filefd_type (*open)(struct lws *wsi, const char *filename,
    4049  unsigned long *filelen, int flags);
    4053  int (*close)(struct lws *wsi, lws_filefd_type fd);
    4055  unsigned long (*seek_cur)(struct lws *wsi, lws_filefd_type fd,
    4056  long offset_from_cur_pos);
    4058  int (*read)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    4059  unsigned char *buf, unsigned long len);
    4061  int (*write)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    4062  unsigned char *buf, unsigned long len);
    4065  /* Add new things just above here ---^
    4066  * This is part of the ABI, don't needlessly break compatibility */
    4067 };
    4068 
    4074 LWS_VISIBLE LWS_EXTERN struct lws_plat_file_ops * LWS_WARN_UNUSED_RESULT
    4075 lws_get_fops(struct lws_context *context);
    4076 
    4085 static LWS_INLINE lws_filefd_type LWS_WARN_UNUSED_RESULT
    4086 lws_plat_file_open(struct lws *wsi, const char *filename,
    4087  unsigned long *filelen, int flags)
    4088 {
    4089  return lws_get_fops(lws_get_context(wsi))->open(wsi, filename,
    4090  filelen, flags);
    4091 }
    4092 
    4099 static LWS_INLINE int
    4100 lws_plat_file_close(struct lws *wsi, lws_filefd_type fd)
    4101 {
    4102  return lws_get_fops(lws_get_context(wsi))->close(wsi, fd);
    4103 }
    4104 
    4112 static LWS_INLINE unsigned long
    4113 lws_plat_file_seek_cur(struct lws *wsi, lws_filefd_type fd, long offset)
    4114 {
    4115  return lws_get_fops(lws_get_context(wsi))->seek_cur(wsi, fd, offset);
    4116 }
    4126 static LWS_INLINE int LWS_WARN_UNUSED_RESULT
    4127 lws_plat_file_read(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    4128  unsigned char *buf, unsigned long len)
    4129 {
    4130  return lws_get_fops(lws_get_context(wsi))->read(wsi, fd, amount, buf,
    4131  len);
    4132 }
    4142 static LWS_INLINE int LWS_WARN_UNUSED_RESULT
    4143 lws_plat_file_write(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    4144  unsigned char *buf, unsigned long len)
    4145 {
    4146  return lws_get_fops(lws_get_context(wsi))->write(wsi, fd, amount, buf,
    4147  len);
    4148 }
    4150 
    4182 #ifdef LWS_WITH_SMTP
    4183 
    4195 };
    4196 
    4198 struct lws_email {
    4199  void *data;
    4201  uv_loop_t *loop;
    4204  char email_smtp_ip[32];
    4205  char email_helo[32];
    4206  char email_from[100];
    4207  char email_to[100];
    4209  unsigned int max_content_size;
    4212  /* Fill all the callbacks before init */
    4213 
    4214  int (*on_next)(struct lws_email *email);
    4219  int (*on_sent)(struct lws_email *email);
    4224  int (*on_get_body)(struct lws_email *email, char *buf, int len);
    4230  /* private things */
    4231  uv_timer_t timeout_email;
    4233  uv_connect_t email_connect_req;
    4234  uv_tcp_t email_client;
    4236  char email_buf[256];
    4237  char *content;
    4238 };
    4239 
    4249 LWS_VISIBLE LWS_EXTERN int
    4250 lws_email_init(struct lws_email *email, uv_loop_t *loop, int max_content);
    4251 
    4260 LWS_VISIBLE LWS_EXTERN void
    4261 lws_email_check(struct lws_email *email);
    4269 LWS_VISIBLE LWS_EXTERN void
    4270 lws_email_destroy(struct lws_email *email);
    4271 
    4272 #endif
    4273 
    4274 
    4275 #ifdef __cplusplus
    4276 }
    4277 #endif
    4278 
    4279 #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:3944
    +
    Definition: libwebsockets.h:3983
    size_t rx_buffer_size
    Definition: libwebsockets.h:1294
    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
    @@ -74,16 +74,16 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    Definition: libwebsockets.h:770
    Definition: libwebsockets.h:898
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_daemonize(const char *_lock_path)
    -
    Definition: libwebsockets.h:1930
    -
    Definition: libwebsockets.h:3202
    -
    Definition: libwebsockets.h:4149
    +
    Definition: libwebsockets.h:1966
    +
    Definition: libwebsockets.h:3241
    +
    Definition: libwebsockets.h:4188
    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:236
    -
    unsigned int auth_mask
    Definition: libwebsockets.h:1965
    -
    Definition: libwebsockets.h:3225
    -
    void * data
    Definition: libwebsockets.h:4160
    -
    const char * uri_replace_from
    Definition: libwebsockets.h:2043
    -
    int(* write)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)
    Definition: libwebsockets.h:4022
    +
    unsigned int auth_mask
    Definition: libwebsockets.h:2001
    +
    Definition: libwebsockets.h:3264
    +
    void * data
    Definition: libwebsockets.h:4199
    +
    const char * uri_replace_from
    Definition: libwebsockets.h:2079
    +
    int(* write)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)
    Definition: libwebsockets.h:4061
    lws_callback_reasons
    Definition: libwebsockets.h:663
    LWS_VISIBLE LWS_EXTERN int lws_hdr_copy_fragment(struct lws *wsi, char *dest, int len, enum lws_token_indexes h, int frag_idx)
    @@ -103,77 +103,78 @@ $(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:747
    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:4180
    +
    int(* on_sent)(struct lws_email *email)
    Definition: libwebsockets.h:4219
    Definition: libwebsockets.h:1434
    -
    struct lws ** pwsi
    Definition: libwebsockets.h:2050
    +
    struct lws ** pwsi
    Definition: libwebsockets.h:2086
    Definition: libwebsockets.h:781
    -
    const char * path
    Definition: libwebsockets.h:2022
    +
    const char * path
    Definition: libwebsockets.h:2058
    LWS_VISIBLE LWS_EXTERN size_t lws_remaining_packet_payload(struct lws *wsi)
    Definition: libwebsockets.h:582
    Definition: libwebsockets.h:1390
    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:4196
    +
    time_t email_connect_started
    Definition: libwebsockets.h:4235
    lws_close_status
    Definition: libwebsockets.h:553
    LWS_VISIBLE LWS_EXTERN int lws_callback_all_protocol(struct lws_context *context, const struct lws_protocols *protocol, int reason)
    Definition: libwebsockets.h:593
    -
    int token_len
    Definition: libwebsockets.h:2530
    +
    int token_len
    Definition: libwebsockets.h:2566
    const struct lws_http_mount * mounts
    Definition: libwebsockets.h:1675
    Definition: libwebsockets.h:922
    LWS_VISIBLE LWS_EXTERN struct lws_context *LWS_WARN_UNUSED_RESULT lws_get_context(const struct lws *wsi)
    -
    const char * value
    Definition: libwebsockets.h:1919
    -
    Definition: libwebsockets.h:2850
    -
    Definition: libwebsockets.h:4154
    +
    const char * value
    Definition: libwebsockets.h:1955
    +
    Definition: libwebsockets.h:2886
    +
    Definition: libwebsockets.h:4193
    const char * username
    Definition: libwebsockets.h:1465
    LWS_VISIBLE LWS_EXTERN struct lws * lws_client_connect_via_info(struct lws_client_connect_info *ccinfo)
    -
    const char * protocol
    Definition: libwebsockets.h:1949
    -
    struct lws ** stdwsi
    Definition: libwebsockets.h:3945
    +
    const char * protocol
    Definition: libwebsockets.h:1985
    +
    struct lws ** stdwsi
    Definition: libwebsockets.h:3984
    LWS_VISIBLE LWS_EXTERN int lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len)
    Definition: libwebsockets.h:868
    LWS_VISIBLE LWS_EXTERN const char * lws_get_mimetype(const char *file, const struct lws_http_mount *m)
    Definition: libwebsockets.h:1436
    -
    int cache_max_age
    Definition: libwebsockets.h:1963
    +
    int cache_max_age
    Definition: libwebsockets.h:1999
    long ssl_options_clear
    Definition: libwebsockets.h:1693
    Definition: libwebsockets.h:761
    Definition: libwebsockets.h:1561
    LWS_VISIBLE LWS_EXTERN void lws_context_destroy(struct lws_context *context)
    Definition: libwebsockets.h:609
    -
    char * start
    Definition: libwebsockets.h:2469
    +
    char * start
    Definition: libwebsockets.h:2505
    LWS_VISIBLE LWS_EXTERN void lws_set_allocator(void *(*realloc)(void *ptr, size_t size))
    lws_callback_function * callback
    Definition: libwebsockets.h:1285
    -
    Definition: libwebsockets.h:3192
    +
    Definition: libwebsockets.h:3231
    +
    LWS_VISIBLE LWS_EXTERN void lws_context_deprecate(struct lws_context *context, lws_reload_func cb)
    LWS_VISIBLE LWS_EXTERN int lws_get_socket_fd(struct lws *wsi)
    Definition: libwebsockets.h:959
    -
    const char * protocol
    Definition: libwebsockets.h:2028
    +
    const char * protocol
    Definition: libwebsockets.h:2064
    Definition: libwebsockets.h:948
    unsigned int pt_serv_buf_size
    Definition: libwebsockets.h:1680
    LWS_VISIBLE LWS_EXTERN struct lws * lws_adopt_socket(struct lws_context *context, lws_sockfd_type accept_fd)
    -
    int len
    Definition: libwebsockets.h:2461
    +
    int len
    Definition: libwebsockets.h:2497
    int ka_time
    Definition: libwebsockets.h:1616
    Definition: libwebsockets.h:1510
    LWS_VISIBLE LWS_EXTERN int lws_callback_on_writable_all_protocol(const struct lws_context *context, const struct lws_protocols *protocol)
    LWS_VISIBLE LWS_EXTERN void lws_set_log_level(int level, void(*log_emit_function)(int level, const char *line))
    unsigned short ws_ping_pong_interval
    Definition: libwebsockets.h:1695
    int count_extensions
    Definition: libwebsockets.h:1395
    -
    Definition: libwebsockets.h:3196
    -
    int port
    Definition: libwebsockets.h:2018
    -
    struct lws_context * context
    Definition: libwebsockets.h:2014
    +
    Definition: libwebsockets.h:3235
    +
    int port
    Definition: libwebsockets.h:2054
    +
    struct lws_context * context
    Definition: libwebsockets.h:2050
    Definition: libwebsockets.h:1442
    -
    int ietf_version_or_minus_one
    Definition: libwebsockets.h:2030
    +
    int ietf_version_or_minus_one
    Definition: libwebsockets.h:2066
    LWS_VISIBLE LWS_EXTERN int lws_callback_all_protocol_vhost(struct lws_vhost *vh, const struct lws_protocols *protocol, int reason)
    -
    Definition: libwebsockets.h:4147
    -
    Definition: libwebsockets.h:1915
    +
    Definition: libwebsockets.h:4186
    +
    Definition: libwebsockets.h:1951
    LWS_VISIBLE LWS_EXTERN int lws_callback_on_writable(struct lws *wsi)
    -
    const char *const * vars
    Definition: libwebsockets.h:2473
    +
    const char *const * vars
    Definition: libwebsockets.h:2509
    Definition: libwebsockets.h:561
    -
    Definition: libwebsockets.h:2013
    +
    Definition: libwebsockets.h:2049
    Definition: libwebsockets.h:1540
    int lws_extension_callback_function(struct lws_context *context, const struct lws_extension *ext, struct lws *wsi, enum lws_extension_callback_reasons reason, void *user, void *in, size_t len)
    Definition: libwebsockets.h:1185
    int len
    Definition: libwebsockets.h:1121
    -
    Definition: libwebsockets.h:1940
    -
    const char * def
    Definition: libwebsockets.h:1947
    +
    Definition: libwebsockets.h:1976
    +
    const char * def
    Definition: libwebsockets.h:1983
    Definition: libwebsockets.h:722
    Definition: libwebsockets.h:1522
    lws_context_options
    Definition: libwebsockets.h:1493
    @@ -182,29 +183,30 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    Definition: libwebsockets.h:1528
    Definition: libwebsockets.h:888
    const char * option_name
    Definition: libwebsockets.h:1118
    -
    Definition: libwebsockets.h:1928
    +
    Definition: libwebsockets.h:1964
    lws_sockfd_type fd
    Definition: libwebsockets.h:531
    +
    LWS_VISIBLE LWS_EXTERN int lws_json_dump_context(const struct lws_context *context, char *buf, int len, int hide_vhosts)
    const char * ssl_private_key_password
    Definition: libwebsockets.h:1584
    short events
    Definition: libwebsockets.h:433
    Definition: libwebsockets.h:1403
    const struct lws_extension * extensions
    Definition: libwebsockets.h:1394
    -
    const struct lws_http_mount * mount_next
    Definition: libwebsockets.h:1941
    +
    const struct lws_http_mount * mount_next
    Definition: libwebsockets.h:1977
    LWS_VISIBLE LWS_EXTERN void lws_set_timeout(struct lws *wsi, enum pending_timeout reason, int secs)
    -
    void * userdata
    Definition: libwebsockets.h:2032
    +
    void * userdata
    Definition: libwebsockets.h:2068
    Definition: libwebsockets.h:719
    Definition: libwebsockets.h:906
    LWS_VISIBLE LWS_EXTERN int lws_service_tsi(struct lws_context *context, int timeout_ms, int tsi)
    -
    unsigned char * data
    Definition: libwebsockets.h:3947
    -
    const struct lws_protocol_vhost_options * extra_mimetypes
    Definition: libwebsockets.h:1956
    +
    unsigned char * data
    Definition: libwebsockets.h:3986
    +
    const struct lws_protocol_vhost_options * extra_mimetypes
    Definition: libwebsockets.h:1992
    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:712
    LWS_VISIBLE LWS_EXTERN const char * lws_urlencode(char *escaped, const char *string, int len)
    Definition: libwebsockets.h:793
    -
    uv_loop_t * loop
    Definition: libwebsockets.h:4162
    +
    uv_loop_t * loop
    Definition: libwebsockets.h:4201
    Definition: libwebsockets.h:891
    Definition: libwebsockets.h:72
    -
    Definition: libwebsockets.h:3228
    -
    int pos
    Definition: libwebsockets.h:2471
    +
    Definition: libwebsockets.h:3267
    +
    int pos
    Definition: libwebsockets.h:2507
    struct lws_plugin * list
    Definition: libwebsockets.h:1404
    LWS_VISIBLE LWS_EXTERN struct lws *LWS_WARN_UNUSED_RESULT lws_client_connect_extended(struct lws_context *clients, const char *address, int port, int ssl_connection, const char *path, const char *host, const char *origin, const char *protocol, int ietf_version_or_minus_one, void *userdata) LWS_WARN_DEPRECATED
    short max_http_header_data
    Definition: libwebsockets.h:1636
    @@ -217,26 +219,26 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    Definition: libwebsockets.h:1097
    int ka_probes
    Definition: libwebsockets.h:1619
    void onError(Socket *s, socket_error_t err)
    -
    const char * origin
    Definition: libwebsockets.h:2026
    +
    const char * origin
    Definition: libwebsockets.h:2062
    SHORT revents
    Definition: libwebsockets.h:419
    -
    const char * method
    Definition: libwebsockets.h:2036
    +
    const char * method
    Definition: libwebsockets.h:2072
    LWS_VISIBLE LWS_EXTERN const char * lws_spa_get_string(struct lws_spa *spa, int n)
    Definition: libwebsockets.h:1191
    LWS_VISIBLE LWS_EXTERN int lws_callback_on_writable_all_protocol_vhost(const struct lws_vhost *vhost, const struct lws_protocols *protocol)
    Definition: libwebsockets.h:928
    -
    const struct lws_extension * client_exts
    Definition: libwebsockets.h:2034
    -
    unsigned char origin_protocol
    Definition: libwebsockets.h:1972
    +
    const struct lws_extension * client_exts
    Definition: libwebsockets.h:2070
    +
    unsigned char origin_protocol
    Definition: libwebsockets.h:2008
    const char * log_filepath
    Definition: libwebsockets.h:1672
    Definition: libwebsockets.h:768
    -
    unsigned int max_content_size
    Definition: libwebsockets.h:4170
    +
    unsigned int max_content_size
    Definition: libwebsockets.h:4209
    int option_index
    Definition: libwebsockets.h:1119
    LWS_VISIBLE LWS_EXTERN struct lws *LWS_WARN_UNUSED_RESULT lws_get_child(const struct lws *wsi)
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_header_by_token(struct lws *wsi, enum lws_token_indexes token, const unsigned char *value, int length, unsigned char **p, unsigned char *end)
    Definition: libwebsockets.h:764
    -
    const char * uri_replace_to
    Definition: libwebsockets.h:2046
    -
    struct lws * parent_wsi
    Definition: libwebsockets.h:2039
    +
    const char * uri_replace_to
    Definition: libwebsockets.h:2082
    +
    struct lws * parent_wsi
    Definition: libwebsockets.h:2075
    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:4193
    +
    enum lwsgs_smtp_states estate
    Definition: libwebsockets.h:4232
    LWS_VISIBLE LWS_EXTERN int lws_spa_finalize(struct lws_spa *spa)
    Definition: libwebsockets.h:664
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_get_count_threads(struct lws_context *context)
    @@ -244,29 +246,29 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    char name[64]
    Definition: libwebsockets.h:1410
    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:4197
    +
    char email_buf[256]
    Definition: libwebsockets.h:4236
    LWS_VISIBLE LWS_EXTERN int lws_is_ssl(struct lws *wsi)
    Definition: libwebsockets.h:1499
    -
    int(* close)(struct lws *wsi, lws_filefd_type fd)
    Definition: libwebsockets.h:4014
    +
    int(* close)(struct lws *wsi, lws_filefd_type fd)
    Definition: libwebsockets.h:4053
    uv_lib_t lib
    Definition: libwebsockets.h:1406
    x509_crt certificate
    Definition: libwebsockets.h:238
    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:4148
    +
    Definition: libwebsockets.h:4187
    LWS_VISIBLE LWS_EXTERN int lws_is_cgi(struct lws *wsi)
    -
    int ssl_connection
    Definition: libwebsockets.h:2020
    +
    int ssl_connection
    Definition: libwebsockets.h:2056
    Definition: libwebsockets.h:1458
    SSL_CTX * provided_client_ssl_ctx
    Definition: libwebsockets.h:1627
    LWS_VISIBLE LWS_EXTERN int lws_rx_flow_control(struct lws *wsi, int enable)
    -
    Definition: libwebsockets.h:2459
    +
    Definition: libwebsockets.h:2495
    LWS_VISIBLE LWS_EXTERN struct lws_plat_file_ops *LWS_WARN_UNUSED_RESULT lws_get_fops(struct lws_context *context)
    Definition: libwebsockets.h:530
    -
    const struct lws_protocol_vhost_options * cgienv
    Definition: libwebsockets.h:1952
    -
    const char * name
    Definition: libwebsockets.h:1918
    -
    unsigned char mountpoint_len
    Definition: libwebsockets.h:1973
    -
    Definition: libwebsockets.h:3199
    +
    const struct lws_protocol_vhost_options * cgienv
    Definition: libwebsockets.h:1988
    +
    const char * name
    Definition: libwebsockets.h:1954
    +
    unsigned char mountpoint_len
    Definition: libwebsockets.h:2009
    +
    Definition: libwebsockets.h:3238
    Definition: libwebsockets.h:1517
    lws_sockfd_type fd
    Definition: libwebsockets.h:417
    -
    Definition: libwebsockets.h:1929
    +
    Definition: libwebsockets.h:1965
    LWS_VISIBLE LWS_EXTERN int lws_is_final_fragment(struct lws *wsi)
    const struct lws_extension * extensions
    Definition: libwebsockets.h:1578
    Definition: libwebsockets.h:1501
    @@ -281,14 +283,14 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    const char * start
    Definition: libwebsockets.h:1120
    const char * ssl_cipher_list
    Definition: libwebsockets.h:1598
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_header_by_name(struct lws *wsi, const unsigned char *name, const unsigned char *value, int length, unsigned char **p, unsigned char *end)
    -
    const char * mountpoint
    Definition: libwebsockets.h:1943
    +
    const char * mountpoint
    Definition: libwebsockets.h:1979
    const char * http_proxy_address
    Definition: libwebsockets.h:1602
    rsa_context key
    Definition: libwebsockets.h:239
    const char * ssl_cert_filepath
    Definition: libwebsockets.h:1586
    const char * ecdh_curve
    Definition: libwebsockets.h:1657
    -
    int cgi_timeout
    Definition: libwebsockets.h:1961
    -
    Definition: libwebsockets.h:1931
    +
    int cgi_timeout
    Definition: libwebsockets.h:1997
    +
    Definition: libwebsockets.h:1967
    Definition: libwebsockets.h:1443
    Definition: libwebsockets.h:431
    Definition: libwebsockets.h:587
    @@ -305,16 +307,16 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    LWS_VISIBLE LWS_EXTERN int lwsl_timestamp(int level, char *p, int len)
    Definition: libwebsockets.h:1004
    Definition: libwebsockets.h:1538
    -
    uv_timer_t timeout_email
    Definition: libwebsockets.h:4192
    +
    uv_timer_t timeout_email
    Definition: libwebsockets.h:4231
    Definition: libwebsockets.h:1508
    short max_http_header_pool
    Definition: libwebsockets.h:1639
    LWS_VISIBLE LWS_EXTERN int lws_chunked_html_process(struct lws_process_html_args *args, struct lws_process_html_state *s)
    -
    char * p
    Definition: libwebsockets.h:2460
    +
    char * p
    Definition: libwebsockets.h:2496
    x509_crt ca
    Definition: libwebsockets.h:237
    size_t per_session_data_size
    Definition: libwebsockets.h:1289
    Definition: libwebsockets.h:571
    const struct lws_protocol_vhost_options * reject_service_keywords
    Definition: libwebsockets.h:1711
    -
    lwsgs_smtp_states
    Definition: libwebsockets.h:4146
    +
    lwsgs_smtp_states
    Definition: libwebsockets.h:4185
    Definition: libwebsockets.h:1520
    Definition: libwebsockets.h:844
    LWS_VISIBLE LWS_EXTERN int lws_snprintf(char *str, size_t size, const char *format,...)
    @@ -326,14 +328,14 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    const char * email
    Definition: libwebsockets.h:1466
    LWS_VISIBLE LWS_EXTERN int lws_get_random(struct lws_context *context, void *buf, int len)
    Definition: libwebsockets.h:558
    -
    uv_connect_t email_connect_req
    Definition: libwebsockets.h:4194
    +
    uv_connect_t email_connect_req
    Definition: libwebsockets.h:4233
    const char * server_string
    Definition: libwebsockets.h:1677
    Definition: libwebsockets.h:1531
    SHORT events
    Definition: libwebsockets.h:418
    Definition: libwebsockets.h:735
    Definition: libwebsockets.h:1515
    const char * vhost_name
    Definition: libwebsockets.h:1659
    -
    Definition: libwebsockets.h:1932
    +
    Definition: libwebsockets.h:1968
    LWS_VISIBLE LWS_EXTERN const struct lws_protocols * lws_get_protocol(struct lws *wsi)
    Definition: libwebsockets.h:1441
    Definition: libwebsockets.h:1463
    @@ -344,12 +346,12 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    int ka_interval
    Definition: libwebsockets.h:1623
    Definition: libwebsockets.h:1440
    int uid
    Definition: libwebsockets.h:1609
    -
    Definition: libwebsockets.h:2852
    +
    Definition: libwebsockets.h:2888
    LWS_VISIBLE LWS_EXTERN int lws_b64_encode_string(const char *in, int in_len, char *out, int out_size)
    LWS_VISIBLE LWS_EXTERN void * lws_context_user(struct lws_context *context)
    const char * name
    Definition: libwebsockets.h:1282
    LWS_VISIBLE LWS_EXTERN int lws_init_vhost_client_ssl(const struct lws_context_creation_info *info, struct lws_vhost *vhost)
    -
    Definition: libwebsockets.h:4152
    +
    Definition: libwebsockets.h:4191
    unsigned int http_proxy_port
    Definition: libwebsockets.h:1605
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_partial_buffered(struct lws *wsi)
    unsigned int timeout_secs
    Definition: libwebsockets.h:1652
    @@ -357,45 +359,44 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_parse_uri(char *p, const char **prot, const char **ads, int *port, const char **path)
    unsigned int options
    Definition: libwebsockets.h:1611
    LWS_VISIBLE LWS_EXTERN int lws_spa_get_length(struct lws_spa *spa, int n)
    -
    const struct lws_protocol_vhost_options * options
    Definition: libwebsockets.h:1917
    +
    const struct lws_protocol_vhost_options * options
    Definition: libwebsockets.h:1953
    int prev_events
    Definition: libwebsockets.h:533
    int keepalive_timeout
    Definition: libwebsockets.h:1669
    Definition: libwebsockets.h:1447
    Definition: libwebsockets.h:1108
    const struct lws_protocol_vhost_options * headers
    Definition: libwebsockets.h:1707
    -
    Definition: libwebsockets.h:2649
    +
    Definition: libwebsockets.h:2685
    LWS_VISIBLE LWS_EXTERN int lws_write(struct lws *wsi, unsigned char *buf, size_t len, enum lws_write_protocol protocol)
    const struct lws_protocol_vhost_options * pvo
    Definition: libwebsockets.h:1666
    -
    const char * basic_auth_login_file
    Definition: libwebsockets.h:1975
    -
    const char * host
    Definition: libwebsockets.h:2024
    +
    const char * basic_auth_login_file
    Definition: libwebsockets.h:2011
    +
    const char * host
    Definition: libwebsockets.h:2060
    Definition: libwebsockets.h:1117
    Definition: libwebsockets.h:597
    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:3949
    +
    int len
    Definition: libwebsockets.h:3988
    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:1567
    -
    Definition: libwebsockets.h:4008
    +
    Definition: libwebsockets.h:4047
    LWS_VISIBLE LWS_EXTERN void lwsl_hexdump(void *buf, size_t len)
    Definition: libwebsockets.h:1009
    -
    lws_spa_fileupload_states
    Definition: libwebsockets.h:2847
    +
    lws_spa_fileupload_states
    Definition: libwebsockets.h:2883
    LWS_VISIBLE LWS_EXTERN int lws_service_fd(struct lws_context *context, struct lws_pollfd *pollfd)
    LWS_VISIBLE LWS_EXTERN int lws_callback_vhost_protocols(struct lws *wsi, int reason, void *in, int len)
    Definition: libwebsockets.h:555
    Definition: libwebsockets.h:564
    LWS_VISIBLE LWS_EXTERN const char * lws_sql_purify(char *escaped, const char *string, int len)
    -
    uv_tcp_t email_client
    Definition: libwebsockets.h:4195
    -
    LWS_VISIBLE LWS_EXTERN int lws_json_dump_context(const struct lws_context *context, char *buf, int len)
    +
    uv_tcp_t email_client
    Definition: libwebsockets.h:4234
    Definition: libwebsockets.h:416
    Definition: libwebsockets.h:668
    -
    lws_filefd_type(* open)(struct lws *wsi, const char *filename, unsigned long *filelen, int flags)
    Definition: libwebsockets.h:4009
    -
    lws_write_protocol
    Definition: libwebsockets.h:3191
    +
    lws_filefd_type(* open)(struct lws *wsi, const char *filename, unsigned long *filelen, int flags)
    Definition: libwebsockets.h:4048
    +
    lws_write_protocol
    Definition: libwebsockets.h:3230
    const char * client_offer
    Definition: libwebsockets.h:1194
    -
    int(* read)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)
    Definition: libwebsockets.h:4019
    +
    int(* read)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)
    Definition: libwebsockets.h:4058
    LWS_VISIBLE LWS_EXTERN void lws_cancel_service(struct lws_context *context)
    -
    Definition: libwebsockets.h:2848
    +
    Definition: libwebsockets.h:2884
    Definition: libwebsockets.h:569
    -
    const char * origin
    Definition: libwebsockets.h:1945
    +
    const char * origin
    Definition: libwebsockets.h:1981
    const char * name
    Definition: libwebsockets.h:1109
    LWS_VISIBLE LWS_EXTERN int lws_serve_http_file(struct lws *wsi, const char *file, const char *content_type, const char *other_headers, int other_headers_len)
    LWS_VISIBLE LWS_EXTERN void lws_email_check(struct lws_email *email)
    @@ -404,7 +405,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:745
    const char * name
    Definition: libwebsockets.h:1192
    -
    Definition: libwebsockets.h:4151
    +
    Definition: libwebsockets.h:4190
    short revents
    Definition: libwebsockets.h:434
    lws_extension_callback_function * callback
    Definition: libwebsockets.h:1193
    long ssl_options_set
    Definition: libwebsockets.h:1691
    @@ -412,66 +413,66 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    LWS_VISIBLE LWS_EXTERN const struct lws_protocols * lws_protocol_get(struct lws *wsi) LWS_WARN_DEPRECATED
    unsigned int mask
    Definition: libwebsockets.h:1451
    LWS_VISIBLE LWS_EXTERN int lws_email_init(struct lws_email *email, uv_loop_t *loop, int max_content)
    -
    lws_mount_protocols
    Definition: libwebsockets.h:1926
    +
    lws_mount_protocols
    Definition: libwebsockets.h:1962
    LWS_EXTERN int lws_extension_callback_pm_deflate(struct lws_context *context, const struct lws_extension *ext, struct lws *wsi, enum lws_extension_callback_reasons reason, void *user, void *in, size_t len)
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_header_content_length(struct lws *wsi, unsigned long content_length, unsigned char **p, unsigned char *end)
    lws_sockfd_type fd
    Definition: libwebsockets.h:432
    unsigned int max_http_header_data2
    Definition: libwebsockets.h:1686
    -
    Definition: libwebsockets.h:1927
    +
    Definition: libwebsockets.h:1963
    LWS_VISIBLE LWS_EXTERN int lws_return_http_status(struct lws *wsi, unsigned int code, const char *html_body)
    LWS_EXTERN LWS_VISIBLE struct lws_vhost * lws_create_vhost(struct lws_context *context, struct lws_context_creation_info *info)
    -
    const struct lws_protocol_vhost_options * interpret
    Definition: libwebsockets.h:1958
    +
    const struct lws_protocol_vhost_options * interpret
    Definition: libwebsockets.h:1994
    void * external_baggage_free_on_destroy
    Definition: libwebsockets.h:1718
    LWS_VISIBLE LWS_EXTERN int lws_service(struct lws_context *context, int timeout_ms)
    Definition: libwebsockets.h:1513
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_http_transaction_completed(struct lws *wsi)
    -
    int count_vars
    Definition: libwebsockets.h:2474
    +
    int count_vars
    Definition: libwebsockets.h:2510
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_header_status(struct lws *wsi, unsigned int code, unsigned char **p, unsigned char *end)
    -
    Definition: libwebsockets.h:2528
    +
    Definition: libwebsockets.h:2564
    LWS_VISIBLE LWS_EXTERN struct lws_context * lws_create_context(struct lws_context_creation_info *info)
    Definition: libwebsockets.h:724
    -
    void * data
    Definition: libwebsockets.h:2472
    -
    char * content
    Definition: libwebsockets.h:4198
    +
    void * data
    Definition: libwebsockets.h:2508
    +
    char * content
    Definition: libwebsockets.h:4237
    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:1581
    -
    Definition: libwebsockets.h:4159
    -
    const char * address
    Definition: libwebsockets.h:2016
    -
    unsigned long(* seek_cur)(struct lws *wsi, lws_filefd_type fd, long offset_from_cur_pos)
    Definition: libwebsockets.h:4016
    +
    Definition: libwebsockets.h:4198
    +
    const char * address
    Definition: libwebsockets.h:2052
    +
    unsigned long(* seek_cur)(struct lws *wsi, lws_filefd_type fd, long offset_from_cur_pos)
    Definition: libwebsockets.h:4055
    void * user
    Definition: libwebsockets.h:1310
    int events
    Definition: libwebsockets.h:532
    LWS_VISIBLE LWS_EXTERN unsigned int lws_http_client_http_response(struct lws *wsi)
    -
    int(* on_get_body)(struct lws_email *email, char *buf, int len)
    Definition: libwebsockets.h:4185
    -
    Definition: libwebsockets.h:1933
    +
    int(* on_get_body)(struct lws_email *email, char *buf, int len)
    Definition: libwebsockets.h:4224
    +
    Definition: libwebsockets.h:1969
    void * user
    Definition: libwebsockets.h:1613
    -
    Definition: libwebsockets.h:4155
    -
    Definition: libwebsockets.h:3214
    -
    char * token
    Definition: libwebsockets.h:2529
    +
    Definition: libwebsockets.h:4194
    +
    Definition: libwebsockets.h:3253
    +
    char * token
    Definition: libwebsockets.h:2565
    LWS_VISIBLE LWS_EXTERN void * lws_protocol_vh_priv_get(struct lws_vhost *vhost, const struct lws_protocols *prot)
    int count_protocols
    Definition: libwebsockets.h:1393
    void * l
    Definition: libwebsockets.h:1408
    const char * ssl_private_key_filepath
    Definition: libwebsockets.h:1590
    -
    int max_len
    Definition: libwebsockets.h:2462
    +
    int max_len
    Definition: libwebsockets.h:2498
    Definition: libwebsockets.h:726
    -
    const struct lws_protocol_vhost_options * next
    Definition: libwebsockets.h:1916
    +
    const struct lws_protocol_vhost_options * next
    Definition: libwebsockets.h:1952
    Definition: libwebsockets.h:737
    LWS_VISIBLE LWS_EXTERN void lws_rx_flow_allow_all_protocol(const struct lws_context *context, const struct lws_protocols *protocol)
    -
    Definition: libwebsockets.h:2468
    +
    Definition: libwebsockets.h:2504
    LWS_VISIBLE LWS_EXTERN const char *LWS_WARN_UNUSED_RESULT lws_canonical_hostname(struct lws_context *context)
    Definition: libwebsockets.h:936
    const char * ssl_ca_filepath
    Definition: libwebsockets.h:1596
    -
    lws_client_connect_ssl_connection_flags
    Definition: libwebsockets.h:2003
    +
    lws_client_connect_ssl_connection_flags
    Definition: libwebsockets.h:2039
    int gid
    Definition: libwebsockets.h:1607
    -
    struct lws_vhost * vhost
    Definition: libwebsockets.h:2048
    +
    struct lws_vhost * vhost
    Definition: libwebsockets.h:2084
    int lws_callback_function(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len)
    Definition: libwebsockets.h:1043
    LWS_VISIBLE LWS_EXTERN void lws_cancel_service_pt(struct lws *wsi)
    Definition: libwebsockets.h:1533
    Definition: libwebsockets.h:605
    -
    Definition: libwebsockets.h:4150
    +
    Definition: libwebsockets.h:4189
    unsigned int api_magic
    Definition: libwebsockets.h:1391
    Definition: libwebsockets.h:1536
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_send_pipe_choked(struct lws *wsi)
    -
    Definition: libwebsockets.h:4153
    -
    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:2869
    +
    Definition: libwebsockets.h:4192
    +
    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:2905
    diff --git a/doc/html/md_README_8lwsws.html b/doc/html/md_README_8lwsws.html index 4fb46c7..8fe3dce 100644 --- a/doc/html/md_README_8lwsws.html +++ b/doc/html/md_README_8lwsws.html @@ -184,11 +184,27 @@ Additional plugin search paths

    Packages that have their own lws plugins can install them in their own preferred dir and ask lwsws to scan there by using a config fragment like this, in its own conf.d/ file managed by the other package

    {
    "global": {
    "plugin-dir": "/usr/local/share/coherent-timeline/plugins"
    }
    }

    lws-server-status plugin

    One provided protocol can be used to monitor the server status.

    -

    Enable the protocol like this on a vhost's ws-protocols section

    "lws-server-status": {
    "status": "ok",
    "update-ms": "5000"
    }

    "update-ms" is used to control how often updated JSON is sent on a ws link.

    -

    And map the provided HTML into the vhost in the mounts section

    {
    "mountpoint": "/server-status",
    "origin": "file:///usr/local/share/libwebsockets-test-server/server-status",
    "default": "server-status.html"
    }

    You might choose to put it on its own vhost which has "interface": "lo", so it's not externally visible.

    +

    Enable the protocol like this on a vhost's ws-protocols section

    "lws-server-status": {
    "status": "ok",
    "update-ms": "5000"
    }

    "update-ms" is used to control how often updated JSON is sent on a ws link.

    +

    And map the provided HTML into the vhost in the mounts section

    {
    "mountpoint": "/server-status",
    "origin": "file:///usr/local/share/libwebsockets-test-server/server-status",
    "default": "server-status.html"
    }

    You might choose to put it on its own vhost which has "interface": "lo", so it's not externally visible, or use the Basic Auth support to require authentication to access it.

    +

    "hide-vhosts": "{0 | 1}" lets you control if information about your vhosts is included. Since this includes mounts, you might not want to leak that information, mount names, etc.

    +

    "filespath":"{path}" lets you give a server filepath which is read and sent to the browser on each refresh. For example, you can provide server temperature information on most Linux systems by giving an appropriate path down /sys.

    +

    This may be given multiple times.

    +

    +Lwsws Configuration Reload

    +

    You may send lwsws a HUP signal, by, eg

    +
    $ sudo killall -HUP lwsws

    This causes lwsws to "deprecate" the existing lwsws process, and remove and close all of its listen sockets, but otherwise allowing it to continue to run, until all of its open connections close.

    +

    When a deprecated lwsws process has no open connections left, it is destroyed automatically.

    +

    After sending the SIGHUP to the main lwsws process, a new lwsws process, which can pick up the newly-available listen sockets, and use the current configuration files, is automatically started.

    +

    The new configuration may differ from the original one in arbitrary ways, the new context is created from scratch each time without reference to the original one.

    +

    Notes

    +

    1) Protocols that provide a "shared world" like mirror will have as many "worlds" as there are lwsws processes still active. People connected to a deprecated lwsws process remain connected to the existing peers.

    +

    But any new connections will apply to the new lwsws process, which does not share per-vhost "shared world" data with the deprecated process. That means no new connections on the deprecated context, ie a "shrinking world" for those guys, and a "growing world" for people who connect after the SIGHUP.

    +

    2) The new lwsws process owes nothing to the previous one. It starts with fresh plugins, fresh configuration, fresh root privileges if that how you start it.

    +

    The plugins may have been updated in arbitrary ways including struct size changes etc, and lwsws or lws may also have been updated arbitrarily.

    +

    3) A root parent process is left up that is not able to do anything except respond to SIGHUP or SIGTERM. Actual serving and network listening etc happens in child processes which use the privileges set in the lwsws config files.

    Lwsws Integration with Systemd

    -

    lwsws needs a service file like this as /usr/lib/systemd/system/lwsws.service

    [Unit]
    Description=Libwebsockets Web Server
    After=syslog.target
    [Service]
    ExecStart=/usr/local/bin/lwsws
    StandardError=null
    [Install]
    WantedBy=multi-user.target

    You can find this prepared in ./lwsws/usr-lib-systemd-system-lwsws.service

    +

    lwsws needs a service file like this as /usr/lib/systemd/system/lwsws.service

    [Unit]
    Description=Libwebsockets Web Server
    After=syslog.target
    [Service]
    ExecStart=/usr/local/bin/lwsws
    ExecReload=/usr/bin/killall -s SIGHUP lwsws ; sleep 1 ; /usr/local/bin/lwsws
    StandardError=null
    [Install]
    WantedBy=multi-user.target

    You can find this prepared in ./lwsws/usr-lib-systemd-system-lwsws.service

    Lwsws Integration with logrotate

    For correct operation with logrotate, /etc/logrotate.d/lwsws (if that's where we're putting the logs) should contain

    /var/log/lwsws/*log {
    copytruncate
    missingok
    notifempty
    delaycompress
    }

    You can find this prepared in /lwsws/etc-logrotate.d-lwsws

    diff --git a/doc/html/navtreedata.js b/doc/html/navtreedata.js index 2fac4aa..27dccad 100644 --- a/doc/html/navtreedata.js +++ b/doc/html/navtreedata.js @@ -38,6 +38,7 @@ var NAVTREE = [ "Lwsws Plugins", "md_README_8lwsws.html#lwswspl", null ], [ "Additional plugin search paths", "md_README_8lwsws.html#lwswsplaplp", null ], [ "lws-server-status plugin", "md_README_8lwsws.html#lwswsssp", null ], + [ "Lwsws Configuration Reload", "md_README_8lwsws.html#lwswsreload", null ], [ "Lwsws Integration with Systemd", "md_README_8lwsws.html#lwswssysd", null ], [ "Lwsws Integration with logrotate", "md_README_8lwsws.html#lwswslr", null ] ] ], @@ -133,10 +134,10 @@ var NAVTREE = var NAVTREEINDEX = [ "annotated.html", -"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a87a824b2e812f4c3e7f2c4a1ea4f8abd", -"group__service.html#ga53e3d0801dfda7960a7249dd559e68a2", -"group__wsstatus.html#gaccd9c59336efad8af0554f79cc5966fd", -"structlws__http__mount.html#a4283e30ea89d27ae7d061ad760d1d146" +"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a4933347a821e73c3f1e13fb6bfc7ad93", +"group__service.html#ga29c246707997ab7a466aa709aecd2d7b", +"group__wsstatus.html#ga2bb3655329b4651cd06f79ee3a764421", +"structlws__gs__event__args.html#acd17e4f9f91f7f9a8f0fbf0744a3a463" ]; var SYNCONMSG = 'click to disable panel synchronisation'; diff --git a/doc/html/navtreeindex0.js b/doc/html/navtreeindex0.js index 8d127de..2e8184d 100644 --- a/doc/html/navtreeindex0.js +++ b/doc/html/navtreeindex0.js @@ -38,216 +38,216 @@ var NAVTREEINDEX0 = "globals_type.html":[11,1,2], "group__HTTP-headers-create.html":[9,6,3], "group__HTTP-headers-create.html#ga29b7d6d2ddfdbaff3d8b607e7e3151b6":[9,6,3,3], -"group__HTTP-headers-create.html#ga29b7d6d2ddfdbaff3d8b607e7e3151b6":[11,0,0,0,48], +"group__HTTP-headers-create.html#ga29b7d6d2ddfdbaff3d8b607e7e3151b6":[11,0,0,0,49], "group__HTTP-headers-create.html#ga2b36bf44405755ff51c1939303b995a8":[9,6,3,0], -"group__HTTP-headers-create.html#ga2b36bf44405755ff51c1939303b995a8":[11,0,0,0,45], +"group__HTTP-headers-create.html#ga2b36bf44405755ff51c1939303b995a8":[11,0,0,0,46], "group__HTTP-headers-create.html#ga4887605ff2242a54db3a7fa01f6f864b":[9,6,3,4], -"group__HTTP-headers-create.html#ga4887605ff2242a54db3a7fa01f6f864b":[11,0,0,0,85], +"group__HTTP-headers-create.html#ga4887605ff2242a54db3a7fa01f6f864b":[11,0,0,0,89], "group__HTTP-headers-create.html#gacc76a5babcb4dce1b01b1955aa7a2faf":[9,6,3,2], -"group__HTTP-headers-create.html#gacc76a5babcb4dce1b01b1955aa7a2faf":[11,0,0,0,47], +"group__HTTP-headers-create.html#gacc76a5babcb4dce1b01b1955aa7a2faf":[11,0,0,0,48], "group__HTTP-headers-create.html#gaf74adb761b22566ad70004882712dce1":[9,6,3,1], -"group__HTTP-headers-create.html#gaf74adb761b22566ad70004882712dce1":[11,0,0,0,46], +"group__HTTP-headers-create.html#gaf74adb761b22566ad70004882712dce1":[11,0,0,0,47], "group__HTTP-headers-read.html":[9,6,4], -"group__HTTP-headers-read.html#ga2c0597b2ef1d2cee35736c338bcbd17b":[11,0,0,0,155], +"group__HTTP-headers-read.html#ga2c0597b2ef1d2cee35736c338bcbd17b":[11,0,0,0,160], "group__HTTP-headers-read.html#ga2c0597b2ef1d2cee35736c338bcbd17b":[9,6,4,7], +"group__HTTP-headers-read.html#ga594f3d0ece5b09c2ccf9f98ea533bb4e":[11,0,0,0,110], "group__HTTP-headers-read.html#ga594f3d0ece5b09c2ccf9f98ea533bb4e":[9,6,4,5], -"group__HTTP-headers-read.html#ga594f3d0ece5b09c2ccf9f98ea533bb4e":[11,0,0,0,106], "group__HTTP-headers-read.html#ga6ce6aa1c0155ea42b7708bed271d1c77":[9,6,4,3], -"group__HTTP-headers-read.html#ga6ce6aa1c0155ea42b7708bed271d1c77":[11,0,0,0,104], -"group__HTTP-headers-read.html#ga6e747906f9d76532ec118d6ef418b82e":[11,0,0,0,34], +"group__HTTP-headers-read.html#ga6ce6aa1c0155ea42b7708bed271d1c77":[11,0,0,0,108], +"group__HTTP-headers-read.html#ga6e747906f9d76532ec118d6ef418b82e":[11,0,0,0,35], "group__HTTP-headers-read.html#ga84e9ce5e71a77501a0998ac403a984c2":[9,6,4,2], -"group__HTTP-headers-read.html#ga84e9ce5e71a77501a0998ac403a984c2":[11,0,0,0,102], +"group__HTTP-headers-read.html#ga84e9ce5e71a77501a0998ac403a984c2":[11,0,0,0,106], +"group__HTTP-headers-read.html#ga8ade0e1ffb0da7e62b989d8d867bf6c8":[11,0,0,0,111], "group__HTTP-headers-read.html#ga8ade0e1ffb0da7e62b989d8d867bf6c8":[9,6,4,6], -"group__HTTP-headers-read.html#ga8ade0e1ffb0da7e62b989d8d867bf6c8":[11,0,0,0,107], "group__HTTP-headers-read.html#gaa427cad61a9a5e3004afd65c4527b5e9":[9,6,4,4], -"group__HTTP-headers-read.html#gaa427cad61a9a5e3004afd65c4527b5e9":[11,0,0,0,105], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea03293996964a8bb617215508908048d4":[11,0,0,0,34,42], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea05c73ad09f25570a50068de13333e41a":[11,0,0,0,34,57], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea0784fa0e5bdbacd1e14c2d6ba0c42992":[11,0,0,0,34,27], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea0830a0c1c62c444ade7cf15599e92345":[11,0,0,0,34,47], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea0a3c723f67cb6d95dba0c0ccc7d898f8":[11,0,0,0,34,69], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea0dd5ce6fa8932e0d378b86c393d8f726":[11,0,0,0,34,11], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea11ed9b0cc3b4525c830de7185fd8d7df":[11,0,0,0,34,62], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea1347e093d73e88489ba3ebda56a393a5":[11,0,0,0,34,32], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea138fedfdb81765272d22b0eca9aec22b":[11,0,0,0,34,9], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea157c1db7d8edd3cd3b649e7756a559c8":[11,0,0,0,34,81], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea166e60d6689436c1fb9169438d5db1b9":[11,0,0,0,34,13], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea1d41be78df2704c54b906f7f0abbaa30":[11,0,0,0,34,51], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea1ee866e12a483229599f4e3cfc358b36":[11,0,0,0,34,53], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea21ac48d2a499f6afa44cee92cebd8ae3":[11,0,0,0,34,83], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea220975eeb65cac57691adb3761a492bb":[11,0,0,0,34,50], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea228ece9e187ddbb80236851e9a09145c":[11,0,0,0,34,84], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea277d11b0d5e7fdfc6b5fb45470e6f63e":[11,0,0,0,34,39], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea2be8537e80387a88197d3ed62ac3b954":[11,0,0,0,34,45], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea2efae4ba6646ba040c371706f7f3a125":[11,0,0,0,34,56], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea3733863fb466c1df6b00c9384a53e544":[11,0,0,0,34,86], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea385f0e1933f81529307fff61eb08ff8d":[11,0,0,0,34,54], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea3ac4744411849aff89001ee0350aed75":[11,0,0,0,34,60], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea3cf47b821d473b717002b22619a9814e":[11,0,0,0,34,7], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea3ef26b531c1c2416850ebd539f08ba5e":[11,0,0,0,34,17], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea3fd7c7c9587953adc8f317a615df6b83":[11,0,0,0,34,14], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea400831fe4ba52d4c454364a81ea3bfe4":[11,0,0,0,34,92], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea428409a7aaea6446b660574e4097c0bd":[11,0,0,0,34,91], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea439ada24e20de209e08e7dd398ca61ac":[11,0,0,0,34,66], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea525ee6d2330fca0929df75ffb8dec68e":[11,0,0,0,34,33], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea52a30bd1a5ca619ab19bb8178138e42f":[11,0,0,0,34,58], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea549fcdd8300f0c7434289db6326ec06a":[11,0,0,0,34,22], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea56913c617d46273743bb187bcd8e90c2":[11,0,0,0,34,65], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea569588399651cdd6b81de40be4b73fd8":[11,0,0,0,34,46], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea57ff348ebbae88bf904bc64ef284d83b":[11,0,0,0,34,20], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea598578cda71fe6ca34320bbd6ba1e887":[11,0,0,0,34,55], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea5dcd48b2643d8a82a97b7abbc3928ea8":[11,0,0,0,34,82], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea5e005569744e3246ba40d524f9a84fe4":[11,0,0,0,34,44], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea6164d17e9598f89c822b4be55814de0a":[11,0,0,0,34,48], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea63e1e08da7555313caf632a819db27d4":[11,0,0,0,34,41], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea669e4eea57595f569f329bfba900a15d":[11,0,0,0,34,3], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea693a74f3cd695016120bfdae3d3ced1a":[11,0,0,0,34,68], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea70b452bb6ce670e32c30fa237bceb731":[11,0,0,0,34,15], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea7460d076c52a9fae65c9e00bac05ef19":[11,0,0,0,34,76], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea751322eb9f58fa33bf1f6e4923ff9abb":[11,0,0,0,34,1], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea7708c82134391d257d6c354ae7bf1429":[11,0,0,0,34,31], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea78834452a5833032294abe1aa42055c6":[11,0,0,0,34,64], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea7892390328672ed812b3b68bc3e0fe40":[11,0,0,0,34,52], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea78fbb32e1809d5767e55de3181d454b0":[11,0,0,0,34,19], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea7e80eff7eefa68741f0a776d6d8feeae":[11,0,0,0,34,78], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea832a110c8b9eb42890f252a756c81bde":[11,0,0,0,34,36], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea86b3c4cf71dc5c5b441243db99ca696a":[11,0,0,0,34,61], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea883a86db0c05266214affd78d37e871f":[11,0,0,0,34,87], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea8913c5b1378b1ffad7e2da975c454d15":[11,0,0,0,34,26], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea8d7393b324a076186bbde01a2cfe6b62":[11,0,0,0,34,49], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea8d9809cf381705f73af48d8f6809412b":[11,0,0,0,34,24], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea8f6a44a37c29cb5ade4c5989467a880b":[11,0,0,0,34,75], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea8ff0b2f6666e008de14d9b9721b87ead":[11,0,0,0,34,90], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea9004d6ff6b16b8877f760545a3c7be60":[11,0,0,0,34,63], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eaa0cad0c7a20ac23945a33dbc3d726718":[11,0,0,0,34,30], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eaa566f2c37d9a459ca95eee347cca68d0":[11,0,0,0,34,67], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eaa76ea751f1ee86567d27e9e30075d6db":[11,0,0,0,34,40], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eaa84e4902ebeb7ab468e3a4bd4acf4f90":[11,0,0,0,34,85], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eaa8c8eb9b32feb43ec214d8469655a0df":[11,0,0,0,34,88], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eaab4585e187936b4f2abf22e9138ee271":[11,0,0,0,34,5], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eaae70d627de34f9c881445f6fbcfcc2dd":[11,0,0,0,34,38], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eaafce2cb6a31235606d12fb65a32a41c5":[11,0,0,0,34,80], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eab0926aa28ea9bb73d2b0124c05c30a78":[11,0,0,0,34,89], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eab2339b9e75c79dae3547255d1fb046cd":[11,0,0,0,34,2], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eab460c34b18e1ae54219c3fb9e60544ef":[11,0,0,0,34,4], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eaba11ed0aa8c8c7bd71d971a234df0a72":[11,0,0,0,34,21], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eabfb2738a1148ec7c039f2af640b28430":[11,0,0,0,34,71], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eac7157acd472d24de05aee3de57b8dc8a":[11,0,0,0,34,12], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eac9a937e393da4c3a77cf82463265dcee":[11,0,0,0,34,6], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ead32022a286b9cc6fbe60b1a0411370a7":[11,0,0,0,34,28], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ead603502e2545c533c4c01ba39e35a2b0":[11,0,0,0,34,16], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eadb08a1c7b1f76e2962d44149bf488bf8":[11,0,0,0,34,34], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eadbb64ba8a29fee913ded2163a5d16615":[11,0,0,0,34,10], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eadff4760ab45fc182ab1e1fb68afa6714":[11,0,0,0,34,70], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eae215f7e72fea4458fd971cdcb45d8e04":[11,0,0,0,34,18], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eae24b2d70918c70e034ff574a516e0023":[11,0,0,0,34,59], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eae5d5ca0131fbea1df03d7ad6d69ebfbd":[11,0,0,0,34,25], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eae6286060884d4c80a88fa94fec58dda3":[11,0,0,0,34,0], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eae898ee2a1e374f7d98aa483940c91511":[11,0,0,0,34,73], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eae9d2323ce213a112ac90361f04a1ee5a":[11,0,0,0,34,43], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eaec69fb61493d1c67316c02259b86bdc2":[11,0,0,0,34,35], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eaec821397393facee38ddd4119473b992":[11,0,0,0,34,29], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eaee14b94fcd4ab788e313e0789bec0cdc":[11,0,0,0,34,77], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eaeef14469c992ebb09a43a8548db37401":[11,0,0,0,34,23], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eaf2b7eac7ff98aea6d9b240f6f51995c3":[11,0,0,0,34,72], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eaf48e3b9c89dba34054ea0833dbad4b57":[11,0,0,0,34,8], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eaf567d4d400062fab44f1b96c64cb93ac":[11,0,0,0,34,37], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eaf64cb8232e172aaa019c38b398d0a0bb":[11,0,0,0,34,74], -"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eafc1e8568187b2de76e2ddd5cc692908e":[11,0,0,0,34,79], +"group__HTTP-headers-read.html#gaa427cad61a9a5e3004afd65c4527b5e9":[11,0,0,0,109], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea03293996964a8bb617215508908048d4":[11,0,0,0,35,42], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea05c73ad09f25570a50068de13333e41a":[11,0,0,0,35,57], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea0784fa0e5bdbacd1e14c2d6ba0c42992":[11,0,0,0,35,27], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea0830a0c1c62c444ade7cf15599e92345":[11,0,0,0,35,47], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea0a3c723f67cb6d95dba0c0ccc7d898f8":[11,0,0,0,35,69], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea0dd5ce6fa8932e0d378b86c393d8f726":[11,0,0,0,35,11], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea11ed9b0cc3b4525c830de7185fd8d7df":[11,0,0,0,35,62], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea1347e093d73e88489ba3ebda56a393a5":[11,0,0,0,35,32], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea138fedfdb81765272d22b0eca9aec22b":[11,0,0,0,35,9], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea157c1db7d8edd3cd3b649e7756a559c8":[11,0,0,0,35,81], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea166e60d6689436c1fb9169438d5db1b9":[11,0,0,0,35,13], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea1d41be78df2704c54b906f7f0abbaa30":[11,0,0,0,35,51], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea1ee866e12a483229599f4e3cfc358b36":[11,0,0,0,35,53], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea21ac48d2a499f6afa44cee92cebd8ae3":[11,0,0,0,35,83], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea220975eeb65cac57691adb3761a492bb":[11,0,0,0,35,50], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea228ece9e187ddbb80236851e9a09145c":[11,0,0,0,35,84], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea277d11b0d5e7fdfc6b5fb45470e6f63e":[11,0,0,0,35,39], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea2be8537e80387a88197d3ed62ac3b954":[11,0,0,0,35,45], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea2efae4ba6646ba040c371706f7f3a125":[11,0,0,0,35,56], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea3733863fb466c1df6b00c9384a53e544":[11,0,0,0,35,86], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea385f0e1933f81529307fff61eb08ff8d":[11,0,0,0,35,54], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea3ac4744411849aff89001ee0350aed75":[11,0,0,0,35,60], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea3cf47b821d473b717002b22619a9814e":[11,0,0,0,35,7], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea3ef26b531c1c2416850ebd539f08ba5e":[11,0,0,0,35,17], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea3fd7c7c9587953adc8f317a615df6b83":[11,0,0,0,35,14], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea400831fe4ba52d4c454364a81ea3bfe4":[11,0,0,0,35,92], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea428409a7aaea6446b660574e4097c0bd":[11,0,0,0,35,91], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea439ada24e20de209e08e7dd398ca61ac":[11,0,0,0,35,66], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea525ee6d2330fca0929df75ffb8dec68e":[11,0,0,0,35,33], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea52a30bd1a5ca619ab19bb8178138e42f":[11,0,0,0,35,58], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea549fcdd8300f0c7434289db6326ec06a":[11,0,0,0,35,22], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea56913c617d46273743bb187bcd8e90c2":[11,0,0,0,35,65], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea569588399651cdd6b81de40be4b73fd8":[11,0,0,0,35,46], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea57ff348ebbae88bf904bc64ef284d83b":[11,0,0,0,35,20], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea598578cda71fe6ca34320bbd6ba1e887":[11,0,0,0,35,55], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea5dcd48b2643d8a82a97b7abbc3928ea8":[11,0,0,0,35,82], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea5e005569744e3246ba40d524f9a84fe4":[11,0,0,0,35,44], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea6164d17e9598f89c822b4be55814de0a":[11,0,0,0,35,48], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea63e1e08da7555313caf632a819db27d4":[11,0,0,0,35,41], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea669e4eea57595f569f329bfba900a15d":[11,0,0,0,35,3], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea693a74f3cd695016120bfdae3d3ced1a":[11,0,0,0,35,68], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea70b452bb6ce670e32c30fa237bceb731":[11,0,0,0,35,15], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea7460d076c52a9fae65c9e00bac05ef19":[11,0,0,0,35,76], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea751322eb9f58fa33bf1f6e4923ff9abb":[11,0,0,0,35,1], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea7708c82134391d257d6c354ae7bf1429":[11,0,0,0,35,31], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea78834452a5833032294abe1aa42055c6":[11,0,0,0,35,64], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea7892390328672ed812b3b68bc3e0fe40":[11,0,0,0,35,52], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea78fbb32e1809d5767e55de3181d454b0":[11,0,0,0,35,19], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea7e80eff7eefa68741f0a776d6d8feeae":[11,0,0,0,35,78], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea832a110c8b9eb42890f252a756c81bde":[11,0,0,0,35,36], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea86b3c4cf71dc5c5b441243db99ca696a":[11,0,0,0,35,61], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea883a86db0c05266214affd78d37e871f":[11,0,0,0,35,87], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea8913c5b1378b1ffad7e2da975c454d15":[11,0,0,0,35,26], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea8d7393b324a076186bbde01a2cfe6b62":[11,0,0,0,35,49], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea8d9809cf381705f73af48d8f6809412b":[11,0,0,0,35,24], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea8f6a44a37c29cb5ade4c5989467a880b":[11,0,0,0,35,75], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea8ff0b2f6666e008de14d9b9721b87ead":[11,0,0,0,35,90], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ea9004d6ff6b16b8877f760545a3c7be60":[11,0,0,0,35,63], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eaa0cad0c7a20ac23945a33dbc3d726718":[11,0,0,0,35,30], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eaa566f2c37d9a459ca95eee347cca68d0":[11,0,0,0,35,67], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eaa76ea751f1ee86567d27e9e30075d6db":[11,0,0,0,35,40], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eaa84e4902ebeb7ab468e3a4bd4acf4f90":[11,0,0,0,35,85], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eaa8c8eb9b32feb43ec214d8469655a0df":[11,0,0,0,35,88], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eaab4585e187936b4f2abf22e9138ee271":[11,0,0,0,35,5], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eaae70d627de34f9c881445f6fbcfcc2dd":[11,0,0,0,35,38], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eaafce2cb6a31235606d12fb65a32a41c5":[11,0,0,0,35,80], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eab0926aa28ea9bb73d2b0124c05c30a78":[11,0,0,0,35,89], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eab2339b9e75c79dae3547255d1fb046cd":[11,0,0,0,35,2], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eab460c34b18e1ae54219c3fb9e60544ef":[11,0,0,0,35,4], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eaba11ed0aa8c8c7bd71d971a234df0a72":[11,0,0,0,35,21], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eabfb2738a1148ec7c039f2af640b28430":[11,0,0,0,35,71], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eac7157acd472d24de05aee3de57b8dc8a":[11,0,0,0,35,12], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eac9a937e393da4c3a77cf82463265dcee":[11,0,0,0,35,6], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ead32022a286b9cc6fbe60b1a0411370a7":[11,0,0,0,35,28], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82ead603502e2545c533c4c01ba39e35a2b0":[11,0,0,0,35,16], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eadb08a1c7b1f76e2962d44149bf488bf8":[11,0,0,0,35,34], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eadbb64ba8a29fee913ded2163a5d16615":[11,0,0,0,35,10], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eadff4760ab45fc182ab1e1fb68afa6714":[11,0,0,0,35,70], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eae215f7e72fea4458fd971cdcb45d8e04":[11,0,0,0,35,18], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eae24b2d70918c70e034ff574a516e0023":[11,0,0,0,35,59], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eae5d5ca0131fbea1df03d7ad6d69ebfbd":[11,0,0,0,35,25], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eae6286060884d4c80a88fa94fec58dda3":[11,0,0,0,35,0], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eae898ee2a1e374f7d98aa483940c91511":[11,0,0,0,35,73], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eae9d2323ce213a112ac90361f04a1ee5a":[11,0,0,0,35,43], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eaec69fb61493d1c67316c02259b86bdc2":[11,0,0,0,35,35], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eaec821397393facee38ddd4119473b992":[11,0,0,0,35,29], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eaee14b94fcd4ab788e313e0789bec0cdc":[11,0,0,0,35,77], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eaeef14469c992ebb09a43a8548db37401":[11,0,0,0,35,23], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eaf2b7eac7ff98aea6d9b240f6f51995c3":[11,0,0,0,35,72], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eaf48e3b9c89dba34054ea0833dbad4b57":[11,0,0,0,35,8], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eaf567d4d400062fab44f1b96c64cb93ac":[11,0,0,0,35,37], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eaf64cb8232e172aaa019c38b398d0a0bb":[11,0,0,0,35,74], +"group__HTTP-headers-read.html#gga6e747906f9d76532ec118d6ef418b82eafc1e8568187b2de76e2ddd5cc692908e":[11,0,0,0,35,79], "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,163], +"group__Protocols-and-Plugins.html#ga106b37ae9c247e84d191ab09441adc43":[11,0,0,0,90], +"group__Protocols-and-Plugins.html#ga25754726d97c5f519d313e691a9fe29d":[11,0,0,0,168], "group__Protocols-and-Plugins.html#ga25754726d97c5f519d313e691a9fe29d":[9,10,9], "group__Protocols-and-Plugins.html#ga40994491e1567f91f579d2b444775266":[11,0,0,0,13], "group__Protocols-and-Plugins.html#ga72ad550786ca7976463589d347e62112":[9,10,5], -"group__Protocols-and-Plugins.html#ga72ad550786ca7976463589d347e62112":[11,0,0,0,98], +"group__Protocols-and-Plugins.html#ga72ad550786ca7976463589d347e62112":[11,0,0,0,102], "group__Protocols-and-Plugins.html#ga83f7a924ba790fa273476075a59f08b0":[11,0,0,0,12], -"group__Protocols-and-Plugins.html#ga8bbe5e65faca068845704bab911a5030":[11,0,0,0,125], +"group__Protocols-and-Plugins.html#ga8bbe5e65faca068845704bab911a5030":[11,0,0,0,130], "group__Protocols-and-Plugins.html#ga8bbe5e65faca068845704bab911a5030":[9,10,6], -"group__Protocols-and-Plugins.html#gaec0c0477288ff3f83aff38d357b883d1":[11,0,0,0,127], +"group__Protocols-and-Plugins.html#gaec0c0477288ff3f83aff38d357b883d1":[11,0,0,0,132], "group__Protocols-and-Plugins.html#gaec0c0477288ff3f83aff38d357b883d1":[9,10,8], -"group__Protocols-and-Plugins.html#gaf3be4243443baac0f8be1fcfb4d25129":[11,0,0,0,126], +"group__Protocols-and-Plugins.html#gaf3be4243443baac0f8be1fcfb4d25129":[11,0,0,0,131], "group__Protocols-and-Plugins.html#gaf3be4243443baac0f8be1fcfb4d25129":[9,10,7], "group__callback-when-writeable.html":[9,1], "group__callback-when-writeable.html#ga13c984d8c5a44a745fd02bc2fba36053":[9,1,1], -"group__callback-when-writeable.html#ga13c984d8c5a44a745fd02bc2fba36053":[11,0,0,0,54], +"group__callback-when-writeable.html#ga13c984d8c5a44a745fd02bc2fba36053":[11,0,0,0,55], "group__callback-when-writeable.html#ga60939cf0c073d933fde3d17f3591caf5":[9,1,5], -"group__callback-when-writeable.html#ga60939cf0c073d933fde3d17f3591caf5":[11,0,0,0,59], +"group__callback-when-writeable.html#ga60939cf0c073d933fde3d17f3591caf5":[11,0,0,0,60], "group__callback-when-writeable.html#ga8570860e191b62db264f2bac67354ea8":[9,1,4], -"group__callback-when-writeable.html#ga8570860e191b62db264f2bac67354ea8":[11,0,0,0,58], +"group__callback-when-writeable.html#ga8570860e191b62db264f2bac67354ea8":[11,0,0,0,59], "group__callback-when-writeable.html#ga941caaa468bc507b1cae52275f58800d":[9,1,2], -"group__callback-when-writeable.html#ga941caaa468bc507b1cae52275f58800d":[11,0,0,0,56], +"group__callback-when-writeable.html#ga941caaa468bc507b1cae52275f58800d":[11,0,0,0,57], "group__callback-when-writeable.html#gaa709e02a10558753c851e58f1e2c16ba":[9,1,7], -"group__callback-when-writeable.html#gaa709e02a10558753c851e58f1e2c16ba":[11,0,0,0,101], -"group__callback-when-writeable.html#gaad3d524a84d2be08ac85153bc158504b":[11,0,0,0,55], -"group__callback-when-writeable.html#gabbe4655c7eeb3eb1671b2323ec6b3107":[11,0,0,0,57], +"group__callback-when-writeable.html#gaa709e02a10558753c851e58f1e2c16ba":[11,0,0,0,105], +"group__callback-when-writeable.html#gaad3d524a84d2be08ac85153bc158504b":[11,0,0,0,56], "group__callback-when-writeable.html#gabbe4655c7eeb3eb1671b2323ec6b3107":[9,1,3], +"group__callback-when-writeable.html#gabbe4655c7eeb3eb1671b2323ec6b3107":[11,0,0,0,58], "group__callback-when-writeable.html#gac4643fe16b0940ae5b68b4ee6195cbde":[9,1,6], -"group__callback-when-writeable.html#gac4643fe16b0940ae5b68b4ee6195cbde":[11,0,0,0,97], +"group__callback-when-writeable.html#gac4643fe16b0940ae5b68b4ee6195cbde":[11,0,0,0,101], +"group__callback-when-writeable.html#gacf04bbe089f47c971c6408c5efe2ac70":[11,0,0,0,54], "group__callback-when-writeable.html#gacf04bbe089f47c971c6408c5efe2ac70":[9,1,0], -"group__callback-when-writeable.html#gacf04bbe089f47c971c6408c5efe2ac70":[11,0,0,0,53], "group__cgi.html":[9,19], "group__client.html":[9,2], "group__client.html#ga0c966136905f467816307cfba6deb5fd":[9,2,4], -"group__client.html#ga0c966136905f467816307cfba6deb5fd":[11,0,0,0,69], -"group__client.html#ga26588fb345083076c14169dd5859f57a":[11,0,0,0,70], -"group__client.html#ga4450c34200bf9dab3beb90ef23221870":[11,0,0,0,109], +"group__client.html#ga0c966136905f467816307cfba6deb5fd":[11,0,0,0,70], +"group__client.html#ga26588fb345083076c14169dd5859f57a":[11,0,0,0,71], +"group__client.html#ga4450c34200bf9dab3beb90ef23221870":[11,0,0,0,113], "group__client.html#ga4af0a20108a95e8b6d94dd4d80055ff3":[9,2,2], -"group__client.html#ga4af0a20108a95e8b6d94dd4d80055ff3":[11,0,0,0,67], -"group__client.html#ga4f44b8230e6732816ca5cd8d1aaaf340":[11,0,0,0,112], +"group__client.html#ga4af0a20108a95e8b6d94dd4d80055ff3":[11,0,0,0,68], +"group__client.html#ga4f44b8230e6732816ca5cd8d1aaaf340":[11,0,0,0,116], "group__client.html#ga4f44b8230e6732816ca5cd8d1aaaf340":[9,2,6], +"group__client.html#ga715efffc0c4e8fbf72a4293008eb2187":[11,0,0,0,112], "group__client.html#ga715efffc0c4e8fbf72a4293008eb2187":[9,2,5], -"group__client.html#ga715efffc0c4e8fbf72a4293008eb2187":[11,0,0,0,108], "group__client.html#ga96f3dbad54b2853969cfa933d66871ce":[9,2,1], -"group__client.html#ga96f3dbad54b2853969cfa933d66871ce":[11,0,0,0,24], +"group__client.html#ga96f3dbad54b2853969cfa933d66871ce":[11,0,0,0,25], "group__client.html#gac6a8558b4410961a880241c2ac1271e2":[9,2,3], -"group__client.html#gac6a8558b4410961a880241c2ac1271e2":[11,0,0,0,68], -"group__client.html#gga96f3dbad54b2853969cfa933d66871cea3e952d09a44cf5818d73e0cd89dded0a":[11,0,0,0,24,3], -"group__client.html#gga96f3dbad54b2853969cfa933d66871cea7051e79bb97b69862f2ff00ae5298ec7":[11,0,0,0,24,0], -"group__client.html#gga96f3dbad54b2853969cfa933d66871cea89866ab6a749aaa1684158c55f826b35":[11,0,0,0,24,2], -"group__client.html#gga96f3dbad54b2853969cfa933d66871ceafc72c0ffbc7462bdddd4ce7bd99ac092":[11,0,0,0,24,1], +"group__client.html#gac6a8558b4410961a880241c2ac1271e2":[11,0,0,0,69], +"group__client.html#gga96f3dbad54b2853969cfa933d66871cea3e952d09a44cf5818d73e0cd89dded0a":[11,0,0,0,25,3], +"group__client.html#gga96f3dbad54b2853969cfa933d66871cea7051e79bb97b69862f2ff00ae5298ec7":[11,0,0,0,25,0], +"group__client.html#gga96f3dbad54b2853969cfa933d66871cea89866ab6a749aaa1684158c55f826b35":[11,0,0,0,25,2], +"group__client.html#gga96f3dbad54b2853969cfa933d66871ceafc72c0ffbc7462bdddd4ce7bd99ac092":[11,0,0,0,25,1], "group__context-and-vhost.html":[9,4], -"group__context-and-vhost.html#ga06e77ce2916f8bc9826ef8d9d68e3932":[9,4,8], -"group__context-and-vhost.html#ga06e77ce2916f8bc9826ef8d9d68e3932":[11,0,0,0,103], -"group__context-and-vhost.html#ga0c54c667ccd9b8b3dddcd123ca72f87c":[11,0,0,0,75], -"group__context-and-vhost.html#ga0c54c667ccd9b8b3dddcd123ca72f87c":[9,4,7], -"group__context-and-vhost.html#ga341064721add2618ae1b29717493a212":[9,4,14], -"group__context-and-vhost.html#ga341064721add2618ae1b29717493a212":[11,0,0,0,170], -"group__context-and-vhost.html#ga41c2d763f78cc248df3b9f8645dbd2a5":[11,0,0,0,26], +"group__context-and-vhost.html#ga06e77ce2916f8bc9826ef8d9d68e3932":[9,4,9], +"group__context-and-vhost.html#ga06e77ce2916f8bc9826ef8d9d68e3932":[11,0,0,0,107], +"group__context-and-vhost.html#ga0c54c667ccd9b8b3dddcd123ca72f87c":[11,0,0,0,79], +"group__context-and-vhost.html#ga0c54c667ccd9b8b3dddcd123ca72f87c":[9,4,8], +"group__context-and-vhost.html#ga1863f0a15ab9da0f07be7bd66230d232":[11,0,0,0,73], +"group__context-and-vhost.html#ga1863f0a15ab9da0f07be7bd66230d232":[9,4,4], +"group__context-and-vhost.html#ga1dce5453d72a2037051aba5410e18135":[11,0,0,0,121], +"group__context-and-vhost.html#ga1dce5453d72a2037051aba5410e18135":[9,4,10], +"group__context-and-vhost.html#ga256a49a07d2dd5062d6cf7bdc3668096":[11,0,0,0,15], +"group__context-and-vhost.html#ga341064721add2618ae1b29717493a212":[9,4,15], +"group__context-and-vhost.html#ga341064721add2618ae1b29717493a212":[11,0,0,0,175], +"group__context-and-vhost.html#ga41c2d763f78cc248df3b9f8645dbd2a5":[11,0,0,0,27], "group__context-and-vhost.html#ga41c2d763f78cc248df3b9f8645dbd2a5":[9,4,3], -"group__context-and-vhost.html#ga7e9d5405547a457d86e0b4f0ae2bb1c4":[9,4,11], -"group__context-and-vhost.html#ga7e9d5405547a457d86e0b4f0ae2bb1c4":[11,0,0,0,144], -"group__context-and-vhost.html#ga8db03e19a372e34ac25cf21af894a02c":[9,4,12], -"group__context-and-vhost.html#ga8db03e19a372e34ac25cf21af894a02c":[11,0,0,0,162], -"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":[11,0,0,0,118], -"group__context-and-vhost.html#ga94e6cc2223c4eec316b13bcebc3628b6":[9,4,10], -"group__context-and-vhost.html#ga98d88c9080fd89c37114363a6474ea73":[9,4,13], -"group__context-and-vhost.html#ga98d88c9080fd89c37114363a6474ea73":[11,0,0,0,169], -"group__context-and-vhost.html#gae2134657cdd2ea7a59e13ad314e4c50d":[11,0,0,0,117], -"group__context-and-vhost.html#gae2134657cdd2ea7a59e13ad314e4c50d":[9,4,9], -"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#gga41c2d763f78cc248df3b9f8645dbd2a5a1b2f8bde0f62adc7ebe81b2043f34c0c":[11,0,0,0,26,8], +"group__context-and-vhost.html#ga7e9d5405547a457d86e0b4f0ae2bb1c4":[9,4,12], +"group__context-and-vhost.html#ga7e9d5405547a457d86e0b4f0ae2bb1c4":[11,0,0,0,149], +"group__context-and-vhost.html#ga8db03e19a372e34ac25cf21af894a02c":[11,0,0,0,167], +"group__context-and-vhost.html#ga8db03e19a372e34ac25cf21af894a02c":[9,4,13], +"group__context-and-vhost.html#ga8ee0314028755f1ddfa9428e09b4fddb":[11,0,0,0,74], +"group__context-and-vhost.html#ga8ee0314028755f1ddfa9428e09b4fddb":[9,4,5], +"group__context-and-vhost.html#ga94e6cc2223c4eec316b13bcebc3628b6":[9,4,11], +"group__context-and-vhost.html#ga94e6cc2223c4eec316b13bcebc3628b6":[11,0,0,0,122], +"group__context-and-vhost.html#ga98d88c9080fd89c37114363a6474ea73":[9,4,14], +"group__context-and-vhost.html#ga98d88c9080fd89c37114363a6474ea73":[11,0,0,0,174], +"group__context-and-vhost.html#gaa327c9d543edaddf06765d2c6131065c":[11,0,0,0,75], +"group__context-and-vhost.html#gaeb12f934bfd178bd2132a9e73fc641da":[11,0,0,0,77], +"group__context-and-vhost.html#gaeb12f934bfd178bd2132a9e73fc641da":[9,4,6], +"group__context-and-vhost.html#gaf023d1898a5f773288568f55b82d19e8":[11,0,0,0,76], +"group__context-and-vhost.html#gaf2fff58562caab7510c41eeac85a8648":[11,0,0,0,78], +"group__context-and-vhost.html#gaf2fff58562caab7510c41eeac85a8648":[9,4,7], +"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a1b2f8bde0f62adc7ebe81b2043f34c0c":[11,0,0,0,27,8], "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a1b2f8bde0f62adc7ebe81b2043f34c0c":[9,4,3,8], -"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a1cc4562d05cba52a6dfa0697a65ade0d":[11,0,0,0,26,2], +"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a1cc4562d05cba52a6dfa0697a65ade0d":[11,0,0,0,27,2], "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a1cc4562d05cba52a6dfa0697a65ade0d":[9,4,3,2], -"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a273d9975675130de0c6dc937dde7c8a6":[11,0,0,0,26,3], +"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a273d9975675130de0c6dc937dde7c8a6":[11,0,0,0,27,3], "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a273d9975675130de0c6dc937dde7c8a6":[9,4,3,3], -"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a274ed462a1a9239eb6ddf9007f5b7092":[11,0,0,0,26,0], +"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a274ed462a1a9239eb6ddf9007f5b7092":[11,0,0,0,27,0], "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a274ed462a1a9239eb6ddf9007f5b7092":[9,4,3,0], -"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a34ab36e68c0d593b6f19b8d5ef1240a9":[11,0,0,0,26,4], +"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a34ab36e68c0d593b6f19b8d5ef1240a9":[11,0,0,0,27,4], "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a34ab36e68c0d593b6f19b8d5ef1240a9":[9,4,3,4], -"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a4832187186c4d130c68051214cd42ada":[11,0,0,0,26,10], +"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a4832187186c4d130c68051214cd42ada":[11,0,0,0,27,10], "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a4832187186c4d130c68051214cd42ada":[9,4,3,10], -"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a4933347a821e73c3f1e13fb6bfc7ad93":[11,0,0,0,26,5], -"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a4933347a821e73c3f1e13fb6bfc7ad93":[9,4,3,5], -"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a6582c985ee0ceaadc1d277030eae2d7c":[11,0,0,0,26,1], -"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a6582c985ee0ceaadc1d277030eae2d7c":[9,4,3,1], -"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a7fed6a527c8d5e0acac1b4179644583a":[11,0,0,0,26,11], -"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a7fed6a527c8d5e0acac1b4179644583a":[9,4,3,11] +"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a4933347a821e73c3f1e13fb6bfc7ad93":[11,0,0,0,27,5] }; diff --git a/doc/html/navtreeindex1.js b/doc/html/navtreeindex1.js index 560d282..3af38e8 100644 --- a/doc/html/navtreeindex1.js +++ b/doc/html/navtreeindex1.js @@ -1,253 +1,253 @@ var NAVTREEINDEX1 = { -"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a87a824b2e812f4c3e7f2c4a1ea4f8abd":[11,0,0,0,26,17], +"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a4933347a821e73c3f1e13fb6bfc7ad93":[9,4,3,5], +"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a6582c985ee0ceaadc1d277030eae2d7c":[11,0,0,0,27,1], +"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a6582c985ee0ceaadc1d277030eae2d7c":[9,4,3,1], +"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a7fed6a527c8d5e0acac1b4179644583a":[11,0,0,0,27,11], +"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a7fed6a527c8d5e0acac1b4179644583a":[9,4,3,11], +"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a87a824b2e812f4c3e7f2c4a1ea4f8abd":[11,0,0,0,27,17], "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a87a824b2e812f4c3e7f2c4a1ea4f8abd":[9,4,3,17], -"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a9637e9001d8c8b2521086bcafbd8a941":[11,0,0,0,26,13], +"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a9637e9001d8c8b2521086bcafbd8a941":[11,0,0,0,27,13], "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a9637e9001d8c8b2521086bcafbd8a941":[9,4,3,13], -"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aa0158b4e85420811e6b0f1378c6ded0f":[11,0,0,0,26,7], +"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aa0158b4e85420811e6b0f1378c6ded0f":[11,0,0,0,27,7], "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aa0158b4e85420811e6b0f1378c6ded0f":[9,4,3,7], -"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5ac56a8a6590e74a8016d0fae09fb404fc":[11,0,0,0,26,6], +"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5ac56a8a6590e74a8016d0fae09fb404fc":[11,0,0,0,27,6], "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5ac56a8a6590e74a8016d0fae09fb404fc":[9,4,3,6], -"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5ac962efd35abf6c402f9fb14aa14f5016":[11,0,0,0,26,14], +"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5ac962efd35abf6c402f9fb14aa14f5016":[11,0,0,0,27,14], "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5ac962efd35abf6c402f9fb14aa14f5016":[9,4,3,14], -"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aca5d42820b65eac5618ec3f0bd8a1160":[11,0,0,0,26,16], +"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aca5d42820b65eac5618ec3f0bd8a1160":[11,0,0,0,27,16], "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aca5d42820b65eac5618ec3f0bd8a1160":[9,4,3,16], -"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5accc9d0d11d1124a21659586164b0962e":[11,0,0,0,26,12], +"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5accc9d0d11d1124a21659586164b0962e":[11,0,0,0,27,12], "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5accc9d0d11d1124a21659586164b0962e":[9,4,3,12], -"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5af62887536e25e053e68741006dba46d8":[11,0,0,0,26,15], +"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5af62887536e25e053e68741006dba46d8":[11,0,0,0,27,15], "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5af62887536e25e053e68741006dba46d8":[9,4,3,15], -"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aff121db04a10cf8b2c5df9d4f2b89f1e":[11,0,0,0,26,9], +"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aff121db04a10cf8b2c5df9d4f2b89f1e":[11,0,0,0,27,9], "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aff121db04a10cf8b2c5df9d4f2b89f1e":[9,4,3,9], "group__ev.html":[9,21], "group__ev.html#ga3b0ffd4d2b4fa791c0fd75353a330208":[11,0,0,0,9], -"group__ev.html#ga3fdd23ded693b21853356dc9eaef5ccc":[11,0,0,0,80], -"group__ev.html#ga5caf14a420a2a0bd687a1fc952f8d64e":[11,0,0,0,82], -"group__ev.html#gaabfc0880d6a98133550c61aa01ef3563":[11,0,0,0,81], +"group__ev.html#ga3fdd23ded693b21853356dc9eaef5ccc":[11,0,0,0,84], +"group__ev.html#ga5caf14a420a2a0bd687a1fc952f8d64e":[11,0,0,0,86], +"group__ev.html#gaabfc0880d6a98133550c61aa01ef3563":[11,0,0,0,85], "group__extensions.html":[9,5], "group__extensions.html#ga4cdbe42d872e21a448a947714d6c607e":[9,5,6], -"group__extensions.html#ga4cdbe42d872e21a448a947714d6c607e":[11,0,0,0,84], +"group__extensions.html#ga4cdbe42d872e21a448a947714d6c607e":[11,0,0,0,88], "group__extensions.html#ga6fb3e2c3dfb9d64dc87026a4e99c128b":[9,5,5], -"group__extensions.html#ga6fb3e2c3dfb9d64dc87026a4e99c128b":[11,0,0,0,83], +"group__extensions.html#ga6fb3e2c3dfb9d64dc87026a4e99c128b":[11,0,0,0,87], "group__extensions.html#gaae7169b2cd346b34fa33d0250db2afd0":[9,5,3], "group__extensions.html#gaae7169b2cd346b34fa33d0250db2afd0":[11,0,0,0,10], "group__extensions.html#gacc9f55936dc165257a2e1f7d47bce89e":[9,5,4], -"group__extensions.html#gacc9f55936dc165257a2e1f7d47bce89e":[11,0,0,0,28], -"group__extensions.html#gae0e24e1768f83a7fb07896ce975704b9":[11,0,0,0,142], +"group__extensions.html#gacc9f55936dc165257a2e1f7d47bce89e":[11,0,0,0,29], +"group__extensions.html#gae0e24e1768f83a7fb07896ce975704b9":[11,0,0,0,147], "group__extensions.html#gae0e24e1768f83a7fb07896ce975704b9":[9,5,7], -"group__extensions.html#gae9993815eee72c6070300a0ae2f022d7":[11,0,0,0,29], +"group__extensions.html#gae9993815eee72c6070300a0ae2f022d7":[11,0,0,0,30], "group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea1c86adf924c8786a12bee9687094673e":[9,5,4,1], -"group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea1c86adf924c8786a12bee9687094673e":[11,0,0,0,28,1], +"group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea1c86adf924c8786a12bee9687094673e":[11,0,0,0,29,1], "group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea5265abe3e1c3f64412f2affe7bffd880":[9,5,4,2], -"group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea5265abe3e1c3f64412f2affe7bffd880":[11,0,0,0,28,2], +"group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea5265abe3e1c3f64412f2affe7bffd880":[11,0,0,0,29,2], "group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89eaabcf56c456c1ff6e81dc82586a16f14c":[9,5,4,0], -"group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89eaabcf56c456c1ff6e81dc82586a16f14c":[11,0,0,0,28,0], -"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7a05b74161bfab0f815d7fd47b85e20bfc":[11,0,0,0,29,9], -"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7a0b220da55b7d7a9579175f1ec81579fb":[11,0,0,0,29,17], -"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7a22a8130d0db03d62154d0502b1737a48":[11,0,0,0,29,22], -"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7a246b82fadb41dc04cf4d40fd42987458":[11,0,0,0,29,19], -"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7a25ceebb1ee06c2f0963b44165065efb9":[11,0,0,0,29,26], -"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7a270b950562f97510ec06b02dbcbace11":[11,0,0,0,29,23], -"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7a5a4cacc86ebddc8cb5a3f4ec91ba3fba":[11,0,0,0,29,12], -"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7a648e8e3988ca8bdf20ddcfd2a14e3f10":[11,0,0,0,29,13], -"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7a6cbdd5cfd6d39e3cacd4ca02e2ae54e3":[11,0,0,0,29,8], -"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7a741d5d795895b192cbde6adbc851a822":[11,0,0,0,29,11], -"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7a7fe88715ded486af17228050a1d05e90":[11,0,0,0,29,2], -"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7a83dff5bb6cd4c6e0cc85cb12fb9c0178":[11,0,0,0,29,5], -"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7a862b122e8f17a50f5ab6e7b56087c09c":[11,0,0,0,29,20], -"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7a866a849e7d59a3a44c92ecdfb1393e4e":[11,0,0,0,29,0], -"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7a8e4e3c201d029c8d78457fb4fdddef4a":[11,0,0,0,29,7], -"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7aa2901960832871f606354d58e58b6453":[11,0,0,0,29,4], -"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7aa4eb48182ed8bd10d257df5a8b154cc2":[11,0,0,0,29,24], -"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7aa6d94d15f31176a4e1214c4c31edd5f8":[11,0,0,0,29,18], -"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7aaf81548db378fa156a7cf290abff87ad":[11,0,0,0,29,21], -"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7abb36b02569c81df4509f58f964a8155b":[11,0,0,0,29,3], -"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7abc92c2b16b0d54b3a9736e62a520a446":[11,0,0,0,29,10], -"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7ac2af19277affbbc731379ddfb38f820e":[11,0,0,0,29,16], -"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7ac5d7be02c676c836bb8ec448803dd606":[11,0,0,0,29,14], -"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7ad113e96df806fb20fd4f02dbe19e4f4b":[11,0,0,0,29,6], -"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7ad426ef79eec1b6e036118f64e6fa62f5":[11,0,0,0,29,25], -"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7ae57bedd24d5a29f5f381f8155c2ab3b8":[11,0,0,0,29,15], -"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7afa4a8739f6424c4dac3eead479628002":[11,0,0,0,29,1], +"group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89eaabcf56c456c1ff6e81dc82586a16f14c":[11,0,0,0,29,0], +"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7a05b74161bfab0f815d7fd47b85e20bfc":[11,0,0,0,30,9], +"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7a0b220da55b7d7a9579175f1ec81579fb":[11,0,0,0,30,17], +"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7a22a8130d0db03d62154d0502b1737a48":[11,0,0,0,30,22], +"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7a246b82fadb41dc04cf4d40fd42987458":[11,0,0,0,30,19], +"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7a25ceebb1ee06c2f0963b44165065efb9":[11,0,0,0,30,26], +"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7a270b950562f97510ec06b02dbcbace11":[11,0,0,0,30,23], +"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7a5a4cacc86ebddc8cb5a3f4ec91ba3fba":[11,0,0,0,30,12], +"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7a648e8e3988ca8bdf20ddcfd2a14e3f10":[11,0,0,0,30,13], +"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7a6cbdd5cfd6d39e3cacd4ca02e2ae54e3":[11,0,0,0,30,8], +"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7a741d5d795895b192cbde6adbc851a822":[11,0,0,0,30,11], +"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7a7fe88715ded486af17228050a1d05e90":[11,0,0,0,30,2], +"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7a83dff5bb6cd4c6e0cc85cb12fb9c0178":[11,0,0,0,30,5], +"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7a862b122e8f17a50f5ab6e7b56087c09c":[11,0,0,0,30,20], +"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7a866a849e7d59a3a44c92ecdfb1393e4e":[11,0,0,0,30,0], +"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7a8e4e3c201d029c8d78457fb4fdddef4a":[11,0,0,0,30,7], +"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7aa2901960832871f606354d58e58b6453":[11,0,0,0,30,4], +"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7aa4eb48182ed8bd10d257df5a8b154cc2":[11,0,0,0,30,24], +"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7aa6d94d15f31176a4e1214c4c31edd5f8":[11,0,0,0,30,18], +"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7aaf81548db378fa156a7cf290abff87ad":[11,0,0,0,30,21], +"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7abb36b02569c81df4509f58f964a8155b":[11,0,0,0,30,3], +"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7abc92c2b16b0d54b3a9736e62a520a446":[11,0,0,0,30,10], +"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7ac2af19277affbbc731379ddfb38f820e":[11,0,0,0,30,16], +"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7ac5d7be02c676c836bb8ec448803dd606":[11,0,0,0,30,14], +"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7ad113e96df806fb20fd4f02dbe19e4f4b":[11,0,0,0,30,6], +"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7ad426ef79eec1b6e036118f64e6fa62f5":[11,0,0,0,30,25], +"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7ae57bedd24d5a29f5f381f8155c2ab3b8":[11,0,0,0,30,15], +"group__extensions.html#ggae9993815eee72c6070300a0ae2f022d7afa4a8739f6424c4dac3eead479628002":[11,0,0,0,30,1], "group__fops.html":[9,20], "group__fops.html#gac08aef64c4c34647ed699b24759b6b0e":[9,20,1], -"group__fops.html#gac08aef64c4c34647ed699b24759b6b0e":[11,0,0,0,91], +"group__fops.html#gac08aef64c4c34647ed699b24759b6b0e":[11,0,0,0,95], "group__form-parsing.html":[9,6,0], -"group__form-parsing.html#ga162f86762173a2bc8c28497941d74815":[11,0,0,0,148], +"group__form-parsing.html#ga162f86762173a2bc8c28497941d74815":[11,0,0,0,153], "group__form-parsing.html#ga162f86762173a2bc8c28497941d74815":[9,6,0,2], -"group__form-parsing.html#ga2da476217166da02704b90d3a8d4f3cd":[11,0,0,0,152], +"group__form-parsing.html#ga2da476217166da02704b90d3a8d4f3cd":[11,0,0,0,157], "group__form-parsing.html#ga2da476217166da02704b90d3a8d4f3cd":[9,6,0,6], -"group__form-parsing.html#ga3fbe378632f85ec9a14cc2c1687bf05f":[11,0,0,0,151], +"group__form-parsing.html#ga3fbe378632f85ec9a14cc2c1687bf05f":[11,0,0,0,156], "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#ga41a74a822771d3dce89751aa3bce28ae":[11,0,0,0,34], "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,150], +"group__form-parsing.html#ga5a70527c0861c2ffa3d29333a6aa7f8e":[11,0,0,0,17], +"group__form-parsing.html#ga83835bf250ee3d4a60f36a182f2b8d24":[11,0,0,0,155], "group__form-parsing.html#ga83835bf250ee3d4a60f36a182f2b8d24":[9,6,0,4], -"group__form-parsing.html#ga9ad9ebf5ea1a7108415ed7e04cb231d2":[11,0,0,0,153], +"group__form-parsing.html#ga9ad9ebf5ea1a7108415ed7e04cb231d2":[11,0,0,0,158], "group__form-parsing.html#ga9ad9ebf5ea1a7108415ed7e04cb231d2":[9,6,0,7], -"group__form-parsing.html#gaaa482f07dad3f04b391cccf0a814e13b":[11,0,0,0,149], +"group__form-parsing.html#gaaa482f07dad3f04b391cccf0a814e13b":[11,0,0,0,154], "group__form-parsing.html#gaaa482f07dad3f04b391cccf0a814e13b":[9,6,0,3], "group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea2d25de44865bd44e5a3903a2bab9ca83":[9,6,0,1,2], -"group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea2d25de44865bd44e5a3903a2bab9ca83":[11,0,0,0,33,2], +"group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea2d25de44865bd44e5a3903a2bab9ca83":[11,0,0,0,34,2], "group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea6ce2a55a4c3695cdb640c893d95bd3a7":[9,6,0,1,1], -"group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea6ce2a55a4c3695cdb640c893d95bd3a7":[11,0,0,0,33,1], +"group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea6ce2a55a4c3695cdb640c893d95bd3a7":[11,0,0,0,34,1], "group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aead3a958e7719ac273c3ba4f684f00c87f":[9,6,0,1,0], -"group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aead3a958e7719ac273c3ba4f684f00c87f":[11,0,0,0,33,0], +"group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aead3a958e7719ac273c3ba4f684f00c87f":[11,0,0,0,34,0], "group__generic-sessions.html":[9,10,0], "group__generic-sessions.html#ga7c2dc7bfb4ccb91c5d771f9e9ea237e1":[9,10,0,5], -"group__generic-sessions.html#ga7c2dc7bfb4ccb91c5d771f9e9ea237e1":[11,0,0,0,36], +"group__generic-sessions.html#ga7c2dc7bfb4ccb91c5d771f9e9ea237e1":[11,0,0,0,37], "group__generic-sessions.html#gaa93946b3d921072209d5cd8cdfa5332e":[9,10,0,4], -"group__generic-sessions.html#gaa93946b3d921072209d5cd8cdfa5332e":[11,0,0,0,30], +"group__generic-sessions.html#gaa93946b3d921072209d5cd8cdfa5332e":[11,0,0,0,31], "group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a0657a9e846814781b128c397fe4b10bf":[9,10,0,5,1], -"group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a0657a9e846814781b128c397fe4b10bf":[11,0,0,0,36,1], +"group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a0657a9e846814781b128c397fe4b10bf":[11,0,0,0,37,1], "group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a2cd8fb86e3b85c106e7711c03f0ddd0a":[9,10,0,5,3], -"group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a2cd8fb86e3b85c106e7711c03f0ddd0a":[11,0,0,0,36,3], +"group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a2cd8fb86e3b85c106e7711c03f0ddd0a":[11,0,0,0,37,3], "group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a5a607e4668d20cadada62c4b8007f887":[9,10,0,5,2], -"group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a5a607e4668d20cadada62c4b8007f887":[11,0,0,0,36,2], +"group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a5a607e4668d20cadada62c4b8007f887":[11,0,0,0,37,2], "group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a81e63075115dedd150265d81b8f7fa57":[9,10,0,5,0], -"group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a81e63075115dedd150265d81b8f7fa57":[11,0,0,0,36,0], +"group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a81e63075115dedd150265d81b8f7fa57":[11,0,0,0,37,0], "group__generic-sessions.html#ggaa93946b3d921072209d5cd8cdfa5332ea596010a165bf13473c5eea3a34cd4308":[9,10,0,4,0], -"group__generic-sessions.html#ggaa93946b3d921072209d5cd8cdfa5332ea596010a165bf13473c5eea3a34cd4308":[11,0,0,0,30,0], +"group__generic-sessions.html#ggaa93946b3d921072209d5cd8cdfa5332ea596010a165bf13473c5eea3a34cd4308":[11,0,0,0,31,0], "group__generic-sessions.html#ggaa93946b3d921072209d5cd8cdfa5332ead908cdc5689c5d22c9d3c8934e94dcde":[9,10,0,4,1], -"group__generic-sessions.html#ggaa93946b3d921072209d5cd8cdfa5332ead908cdc5689c5d22c9d3c8934e94dcde":[11,0,0,0,30,1], +"group__generic-sessions.html#ggaa93946b3d921072209d5cd8cdfa5332ead908cdc5689c5d22c9d3c8934e94dcde":[11,0,0,0,31,1], "group__html-chunked-substitution.html":[9,6,1], "group__html-chunked-substitution.html#ga643073f918c0a7016b690aae9793fd60":[9,6,1,2], -"group__html-chunked-substitution.html#ga643073f918c0a7016b690aae9793fd60":[11,0,0,0,66], +"group__html-chunked-substitution.html#ga643073f918c0a7016b690aae9793fd60":[11,0,0,0,67], "group__html-chunked-substitution.html#ga669d3d7ce2d5f193473f649a89b3e7ac":[11,0,0,0,14], -"group__html-chunked-substitution.html#gabc3b93f68c8bdd857ad32913628dfa8d":[11,0,0,0,21], -"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8da08107f6b0e1d7c9e2ca100700cc7200f":[11,0,0,0,21,23], -"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8da145570ed1178d3d90ad9b7652fea83cf":[11,0,0,0,21,21], -"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8da1558c42d80f54def5f3277dc879d2844":[11,0,0,0,21,12], -"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8da2637ec8a704c0d7fcb7ff8ce5d871be0":[11,0,0,0,21,20], -"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8da299a2d262210540b593420fe89e01b32":[11,0,0,0,21,24], -"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8da2e57a633f7a2422f67bf207648519e30":[11,0,0,0,21,22], -"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8da36b5bcf2059ae3c84a47e080822239c7":[11,0,0,0,21,14], -"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8da40246e02220192ce8d7f86591ca1cfe4":[11,0,0,0,21,13], -"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8da419c919f74b88d18803358141ab9471c":[11,0,0,0,21,9], -"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8da49cf9c4c184f9e4d265ceae249e92477":[11,0,0,0,21,6], -"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8da53df069872b37830e4296f32e7ec20d8":[11,0,0,0,21,4], -"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8da63eb71a406e943d4634c357d60dd96df":[11,0,0,0,21,11], -"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8da67278d96cfa0eb507535b94338810d65":[11,0,0,0,21,16], -"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8da6964f9591ba7284dc4bd388d40c106a9":[11,0,0,0,21,15], -"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8da9632802fcd318d1676be7589e6004e96":[11,0,0,0,21,3], -"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8daa55ceddb5bb2104bfcfefb16995192a4":[11,0,0,0,21,2], -"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8daafd60e3a2073e04b8f2247f8f9ac9710":[11,0,0,0,21,19], -"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8dab355dd546e62b1478fe3ef94b554f75c":[11,0,0,0,21,27], -"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8dab42dfcbd67b4e66096e3a8e924b6d6c9":[11,0,0,0,21,17], -"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8dac3d4da4de851d5c8f95748145b59716a":[11,0,0,0,21,18], -"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8dac96829d2c2cb76feb1549f0fac72c69e":[11,0,0,0,21,26], -"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8dac9c5b4e80aa858cfe2763656db1f16e3":[11,0,0,0,21,25], -"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8dad000a2e30c534c201201dd74fac8d2f9":[11,0,0,0,21,1], -"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8dad34cd21de350cd4fa83b8099e3993b91":[11,0,0,0,21,0], -"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8dad771b2a0ab88db11b2719c8e5086fb48":[11,0,0,0,21,7], -"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8dadd02813da14cfdc7fe83029b8779ea4b":[11,0,0,0,21,29], -"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8dae301c12d0cf56920659cb7b947a95267":[11,0,0,0,21,5], -"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8daefdfc7b525c87b911d6e92a30e36cfec":[11,0,0,0,21,28], -"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8daf06c31278cb67d7eec4b2b8157b9ad25":[11,0,0,0,21,10], -"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8dafac24097912a70f224166528ce44b83b":[11,0,0,0,21,8], +"group__html-chunked-substitution.html#gabc3b93f68c8bdd857ad32913628dfa8d":[11,0,0,0,22], +"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8da08107f6b0e1d7c9e2ca100700cc7200f":[11,0,0,0,22,23], +"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8da145570ed1178d3d90ad9b7652fea83cf":[11,0,0,0,22,21], +"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8da1558c42d80f54def5f3277dc879d2844":[11,0,0,0,22,12], +"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8da2637ec8a704c0d7fcb7ff8ce5d871be0":[11,0,0,0,22,20], +"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8da299a2d262210540b593420fe89e01b32":[11,0,0,0,22,24], +"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8da2e57a633f7a2422f67bf207648519e30":[11,0,0,0,22,22], +"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8da36b5bcf2059ae3c84a47e080822239c7":[11,0,0,0,22,14], +"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8da40246e02220192ce8d7f86591ca1cfe4":[11,0,0,0,22,13], +"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8da419c919f74b88d18803358141ab9471c":[11,0,0,0,22,9], +"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8da49cf9c4c184f9e4d265ceae249e92477":[11,0,0,0,22,6], +"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8da53df069872b37830e4296f32e7ec20d8":[11,0,0,0,22,4], +"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8da63eb71a406e943d4634c357d60dd96df":[11,0,0,0,22,11], +"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8da67278d96cfa0eb507535b94338810d65":[11,0,0,0,22,16], +"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8da6964f9591ba7284dc4bd388d40c106a9":[11,0,0,0,22,15], +"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8da9632802fcd318d1676be7589e6004e96":[11,0,0,0,22,3], +"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8daa55ceddb5bb2104bfcfefb16995192a4":[11,0,0,0,22,2], +"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8daafd60e3a2073e04b8f2247f8f9ac9710":[11,0,0,0,22,19], +"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8dab355dd546e62b1478fe3ef94b554f75c":[11,0,0,0,22,27], +"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8dab42dfcbd67b4e66096e3a8e924b6d6c9":[11,0,0,0,22,17], +"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8dac3d4da4de851d5c8f95748145b59716a":[11,0,0,0,22,18], +"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8dac96829d2c2cb76feb1549f0fac72c69e":[11,0,0,0,22,26], +"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8dac9c5b4e80aa858cfe2763656db1f16e3":[11,0,0,0,22,25], +"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8dad000a2e30c534c201201dd74fac8d2f9":[11,0,0,0,22,1], +"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8dad34cd21de350cd4fa83b8099e3993b91":[11,0,0,0,22,0], +"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8dad771b2a0ab88db11b2719c8e5086fb48":[11,0,0,0,22,7], +"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8dadd02813da14cfdc7fe83029b8779ea4b":[11,0,0,0,22,29], +"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8dae301c12d0cf56920659cb7b947a95267":[11,0,0,0,22,5], +"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8daefdfc7b525c87b911d6e92a30e36cfec":[11,0,0,0,22,28], +"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8daf06c31278cb67d7eec4b2b8157b9ad25":[11,0,0,0,22,10], +"group__html-chunked-substitution.html#ggabc3b93f68c8bdd857ad32913628dfa8dafac24097912a70f224166528ce44b83b":[11,0,0,0,22,8], "group__http.html":[9,6], +"group__http.html#ga8fbf01e473ac421fc33ad9f8da8b8a25":[11,0,0,0,114], "group__http.html#ga8fbf01e473ac421fc33ad9f8da8b8a25":[9,6,7], -"group__http.html#ga8fbf01e473ac421fc33ad9f8da8b8a25":[11,0,0,0,110], -"group__http.html#gac8a4a71240857dc6b2ed70456b6923f4":[11,0,0,0,130], +"group__http.html#gac8a4a71240857dc6b2ed70456b6923f4":[11,0,0,0,135], "group__http.html#gac8a4a71240857dc6b2ed70456b6923f4":[9,6,9], +"group__http.html#gad27aed6c66a41b2b89ffe4da2a309e8a":[11,0,0,0,115], "group__http.html#gad27aed6c66a41b2b89ffe4da2a309e8a":[9,6,8], -"group__http.html#gad27aed6c66a41b2b89ffe4da2a309e8a":[11,0,0,0,111], "group__httpft.html":[9,6,2], -"group__httpft.html#ga29e1123f6d56cd777b3e5bf9ca40f9e5":[11,0,0,0,135], -"group__httpft.html#gab393a06d3d2722af4c3f8b06842c80d7":[11,0,0,0,134], +"group__httpft.html#ga29e1123f6d56cd777b3e5bf9ca40f9e5":[11,0,0,0,140], +"group__httpft.html#gab393a06d3d2722af4c3f8b06842c80d7":[11,0,0,0,139], "group__httpft.html#gab393a06d3d2722af4c3f8b06842c80d7":[9,6,2,1], "group__httpft.html#gab4da87a4800413f15e7aba649fb1d77c":[9,6,2,0], -"group__httpft.html#gab4da87a4800413f15e7aba649fb1d77c":[11,0,0,0,93], +"group__httpft.html#gab4da87a4800413f15e7aba649fb1d77c":[11,0,0,0,97], "group__log.html":[9,7], -"group__log.html#ga14542b84d2c76efa7814124bb10f9c5f":[11,0,0,0,31], -"group__log.html#ga244647f9e1bf0097ccdde66d74f41e26":[11,0,0,0,143], +"group__log.html#ga14542b84d2c76efa7814124bb10f9c5f":[11,0,0,0,32], +"group__log.html#ga244647f9e1bf0097ccdde66d74f41e26":[11,0,0,0,148], "group__log.html#ga244647f9e1bf0097ccdde66d74f41e26":[9,7,0], -"group__log.html#ga42e39775c6b69b7251bdbf5a2cdd5dcd":[11,0,0,0,168], +"group__log.html#ga42e39775c6b69b7251bdbf5a2cdd5dcd":[11,0,0,0,173], "group__log.html#ga42e39775c6b69b7251bdbf5a2cdd5dcd":[9,7,3], -"group__log.html#ga74eb146969f0595e12ea835851b4588e":[11,0,0,0,40], -"group__log.html#ga898b1f03872ad019f507d4e35bbefa90":[11,0,0,0,167], +"group__log.html#ga74eb146969f0595e12ea835851b4588e":[11,0,0,0,41], +"group__log.html#ga898b1f03872ad019f507d4e35bbefa90":[11,0,0,0,172], "group__log.html#ga898b1f03872ad019f507d4e35bbefa90":[9,7,2], -"group__log.html#gab7c0fc936cc9f1eb58e2bb234c15147c":[11,0,0,0,166], +"group__log.html#gab7c0fc936cc9f1eb58e2bb234c15147c":[11,0,0,0,171], "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], -"group__log.html#gga14542b84d2c76efa7814124bb10f9c5fa2be9c1d50d05756078e9abc72c9e50cc":[11,0,0,0,31,5], -"group__log.html#gga14542b84d2c76efa7814124bb10f9c5fa52e5cd60bbb85f30ec0078a2c4be0c59":[11,0,0,0,31,3], -"group__log.html#gga14542b84d2c76efa7814124bb10f9c5fa6353ac9650d35e8958981eebcb4b67a9":[11,0,0,0,31,7], -"group__log.html#gga14542b84d2c76efa7814124bb10f9c5faa12195bd6dd442763a8321c463a2c906":[11,0,0,0,31,1], -"group__log.html#gga14542b84d2c76efa7814124bb10f9c5faacc8fe5891eba3cf4537bee50eaaa8fa":[11,0,0,0,31,10], -"group__log.html#gga14542b84d2c76efa7814124bb10f9c5facef27c02b70f1bc9140685bdfafe0942":[11,0,0,0,31,6], -"group__log.html#gga14542b84d2c76efa7814124bb10f9c5fad0b18841adbb4792c39981ec05702744":[11,0,0,0,31,4], -"group__log.html#gga14542b84d2c76efa7814124bb10f9c5fad40a82f6c94e6408dd003cf3f0231212":[11,0,0,0,31,2], -"group__log.html#gga14542b84d2c76efa7814124bb10f9c5fae4235ca28326353e283bc7dd1b39bd86":[11,0,0,0,31,9], -"group__log.html#gga14542b84d2c76efa7814124bb10f9c5faff4895280366d59ef0c5e9f4578241af":[11,0,0,0,31,0], +"group__log.html#gaf5f07837692b2f231a79da8a058288aa":[11,0,0,0,40], +"group__log.html#gga14542b84d2c76efa7814124bb10f9c5fa083a44e71966a0e768426e477e1bc358":[11,0,0,0,32,8], +"group__log.html#gga14542b84d2c76efa7814124bb10f9c5fa2be9c1d50d05756078e9abc72c9e50cc":[11,0,0,0,32,5], +"group__log.html#gga14542b84d2c76efa7814124bb10f9c5fa52e5cd60bbb85f30ec0078a2c4be0c59":[11,0,0,0,32,3], +"group__log.html#gga14542b84d2c76efa7814124bb10f9c5fa6353ac9650d35e8958981eebcb4b67a9":[11,0,0,0,32,7], +"group__log.html#gga14542b84d2c76efa7814124bb10f9c5faa12195bd6dd442763a8321c463a2c906":[11,0,0,0,32,1], +"group__log.html#gga14542b84d2c76efa7814124bb10f9c5faacc8fe5891eba3cf4537bee50eaaa8fa":[11,0,0,0,32,10], +"group__log.html#gga14542b84d2c76efa7814124bb10f9c5facef27c02b70f1bc9140685bdfafe0942":[11,0,0,0,32,6], +"group__log.html#gga14542b84d2c76efa7814124bb10f9c5fad0b18841adbb4792c39981ec05702744":[11,0,0,0,32,4], +"group__log.html#gga14542b84d2c76efa7814124bb10f9c5fad40a82f6c94e6408dd003cf3f0231212":[11,0,0,0,32,2], +"group__log.html#gga14542b84d2c76efa7814124bb10f9c5fae4235ca28326353e283bc7dd1b39bd86":[11,0,0,0,32,9], +"group__log.html#gga14542b84d2c76efa7814124bb10f9c5faff4895280366d59ef0c5e9f4578241af":[11,0,0,0,32,0], "group__misc.html":[9,8], "group__misc.html#ga0af4f7d2dd375aeedcfa7eb0e1101c4b":[9,8,2], -"group__misc.html#ga0af4f7d2dd375aeedcfa7eb0e1101c4b":[11,0,0,0,89], -"group__misc.html#ga0e705d498e8c8500649a26ba30a1e106":[11,0,0,0,128], -"group__misc.html#ga1ec0d9faac5d3a5824d765c287c043aa":[11,0,0,0,123], +"group__misc.html#ga0af4f7d2dd375aeedcfa7eb0e1101c4b":[11,0,0,0,93], +"group__misc.html#ga0e705d498e8c8500649a26ba30a1e106":[11,0,0,0,133], +"group__misc.html#ga1ec0d9faac5d3a5824d765c287c043aa":[11,0,0,0,128], "group__misc.html#ga1ec0d9faac5d3a5824d765c287c043aa":[9,8,8], -"group__misc.html#ga33bf2635033710b25f931b57ed663e1e":[11,0,0,0,122], +"group__misc.html#ga33bf2635033710b25f931b57ed663e1e":[11,0,0,0,127], "group__misc.html#ga33bf2635033710b25f931b57ed663e1e":[9,8,7], "group__misc.html#ga58f906c6be0ca80efd813f694569dd4a":[9,8,6], -"group__misc.html#ga58f906c6be0ca80efd813f694569dd4a":[11,0,0,0,99], +"group__misc.html#ga58f906c6be0ca80efd813f694569dd4a":[11,0,0,0,103], "group__misc.html#ga629f48268fd1856b54b11172991b97d9":[9,8,3], -"group__misc.html#ga629f48268fd1856b54b11172991b97d9":[11,0,0,0,90], +"group__misc.html#ga629f48268fd1856b54b11172991b97d9":[11,0,0,0,94], "group__misc.html#ga8930fe36a3f3eefe4a6a4fd499d8e899":[9,8,5], -"group__misc.html#ga8930fe36a3f3eefe4a6a4fd499d8e899":[11,0,0,0,94], -"group__misc.html#ga9f37d0e357de2ab4170723fcdb665d21":[11,0,0,0,147], +"group__misc.html#ga8930fe36a3f3eefe4a6a4fd499d8e899":[11,0,0,0,98], +"group__misc.html#ga9f37d0e357de2ab4170723fcdb665d21":[11,0,0,0,152], "group__misc.html#ga9f37d0e357de2ab4170723fcdb665d21":[9,8,10], -"group__misc.html#gaa194584fff9698f3b280658f770ccd0f":[11,0,0,0,165], +"group__misc.html#gaa194584fff9698f3b280658f770ccd0f":[11,0,0,0,170], "group__misc.html#gaa194584fff9698f3b280658f770ccd0f":[9,8,11], -"group__misc.html#gab321ed812f46f6dc7ef9e3ca6f00cf1b":[11,0,0,0,141], "group__misc.html#gab321ed812f46f6dc7ef9e3ca6f00cf1b":[9,8,9], +"group__misc.html#gab321ed812f46f6dc7ef9e3ca6f00cf1b":[11,0,0,0,146], "group__misc.html#gac6abfc0b2bd5b2f09281a4432bb2f5f0":[9,8,4], -"group__misc.html#gac6abfc0b2bd5b2f09281a4432bb2f5f0":[11,0,0,0,92], +"group__misc.html#gac6abfc0b2bd5b2f09281a4432bb2f5f0":[11,0,0,0,96], "group__misc.html#gacae4d7b6a8d22e4c2d82ff8b12c1e234":[9,8,1], -"group__misc.html#gacae4d7b6a8d22e4c2d82ff8b12c1e234":[11,0,0,0,88], +"group__misc.html#gacae4d7b6a8d22e4c2d82ff8b12c1e234":[11,0,0,0,92], "group__misc.html#gace5171b1dbbc03ec89a98f8afdb5c9af":[9,8,0], -"group__misc.html#gace5171b1dbbc03ec89a98f8afdb5c9af":[11,0,0,0,76], +"group__misc.html#gace5171b1dbbc03ec89a98f8afdb5c9af":[11,0,0,0,80], "group__net.html":[9,9], "group__net.html#ga092e5f473b3347f03ffeef8a950080f3":[9,9,1], -"group__net.html#ga092e5f473b3347f03ffeef8a950080f3":[11,0,0,0,95], -"group__net.html#ga869d8bdffb0f2a7ce08e3ce10d6be3d8":[11,0,0,0,113], +"group__net.html#ga092e5f473b3347f03ffeef8a950080f3":[11,0,0,0,99], "group__net.html#ga869d8bdffb0f2a7ce08e3ce10d6be3d8":[9,9,3], +"group__net.html#ga869d8bdffb0f2a7ce08e3ce10d6be3d8":[11,0,0,0,117], "group__net.html#gad01014fed09759741b6d23afccfdaacc":[9,9,2], -"group__net.html#gad01014fed09759741b6d23afccfdaacc":[11,0,0,0,96], +"group__net.html#gad01014fed09759741b6d23afccfdaacc":[11,0,0,0,100], "group__net.html#gad0df22db2be9fc65a667a1e83f9a92a4":[9,9,0], -"group__net.html#gad0df22db2be9fc65a667a1e83f9a92a4":[11,0,0,0,62], +"group__net.html#gad0df22db2be9fc65a667a1e83f9a92a4":[11,0,0,0,63], "group__pur.html":[9,12], -"group__pur.html#ga9cc82f06e5ae7e71458626d7a39a5865":[11,0,0,0,154], +"group__pur.html#ga9cc82f06e5ae7e71458626d7a39a5865":[11,0,0,0,159], "group__pur.html#ga9cc82f06e5ae7e71458626d7a39a5865":[9,12,1], +"group__pur.html#gab15187efcfa256b7c928562c182b92a3":[11,0,0,0,123], "group__pur.html#gab15187efcfa256b7c928562c182b92a3":[9,12,0], -"group__pur.html#gab15187efcfa256b7c928562c182b92a3":[11,0,0,0,119], "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,164], +"group__sending-data.html#ga98b099cf8c1c7e38ad78501f270e193d":[11,0,0,0,36], +"group__sending-data.html#gafd5fdd285a0e25ba7e3e1051deec1001":[11,0,0,0,169], "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], +"group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da10047eb05b5e1c298151dc47a5b44826":[11,0,0,0,36,2], "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da115440f272a5d55518adfc8099acfee3":[9,13,0,5], -"group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da115440f272a5d55518adfc8099acfee3":[11,0,0,0,35,8], +"group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da115440f272a5d55518adfc8099acfee3":[11,0,0,0,36,8], "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da220d8e8652d9b97fb66e476e2a60ffce":[9,13,0,6], -"group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da220d8e8652d9b97fb66e476e2a60ffce":[11,0,0,0,35,9], -"group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da6e556322ff8f205bf311608f7f6e6559":[11,0,0,0,35,4], +"group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da220d8e8652d9b97fb66e476e2a60ffce":[11,0,0,0,36,9], +"group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da6e556322ff8f205bf311608f7f6e6559":[11,0,0,0,36,4], "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#gga98b099cf8c1c7e38ad78501f270e193da80e8f169fda236c56bfb795ed62903db":[11,0,0,0,36,0], +"group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dab7e7a62cf6f456c09c21dff24dad9039":[11,0,0,0,36,5], "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e":[9,13,0,3], -"group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e":[11,0,0,0,35,3], -"group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dae7d8a025a65524652fe9e24c2654c935":[11,0,0,0,35,6], +"group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e":[11,0,0,0,36,3], +"group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dae7d8a025a65524652fe9e24c2654c935":[11,0,0,0,36,6], "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193daf6486c0dba50c44198100717721d9ab2":[9,13,0,1], -"group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193daf6486c0dba50c44198100717721d9ab2":[11,0,0,0,35,1], +"group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193daf6486c0dba50c44198100717721d9ab2":[11,0,0,0,36,1], "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dafe5a38e940ce56708ac814627e9c0917":[9,13,0,4], -"group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dafe5a38e940ce56708ac814627e9c0917":[11,0,0,0,35,7], -"group__service.html":[9,0], -"group__service.html#ga29c246707997ab7a466aa709aecd2d7b":[9,0,1], -"group__service.html#ga29c246707997ab7a466aa709aecd2d7b":[11,0,0,0,61], -"group__service.html#ga4fd9d714434ca499e2b3f7dbba86f241":[11,0,0,0,137], -"group__service.html#ga4fd9d714434ca499e2b3f7dbba86f241":[9,0,3], -"group__service.html#ga53e3d0801dfda7960a7249dd559e68a2":[9,0,0] +"group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dafe5a38e940ce56708ac814627e9c0917":[11,0,0,0,36,7], +"group__service.html":[9,0] }; diff --git a/doc/html/navtreeindex2.js b/doc/html/navtreeindex2.js index e0505f2..96aea26 100644 --- a/doc/html/navtreeindex2.js +++ b/doc/html/navtreeindex2.js @@ -1,253 +1,253 @@ var NAVTREEINDEX2 = { -"group__service.html#ga53e3d0801dfda7960a7249dd559e68a2":[11,0,0,0,60], -"group__service.html#ga9b3cc4473fd8848e5bbee7f310712939":[11,0,0,0,140], +"group__service.html#ga29c246707997ab7a466aa709aecd2d7b":[9,0,1], +"group__service.html#ga29c246707997ab7a466aa709aecd2d7b":[11,0,0,0,62], +"group__service.html#ga4fd9d714434ca499e2b3f7dbba86f241":[11,0,0,0,142], +"group__service.html#ga4fd9d714434ca499e2b3f7dbba86f241":[9,0,3], +"group__service.html#ga53e3d0801dfda7960a7249dd559e68a2":[9,0,0], +"group__service.html#ga53e3d0801dfda7960a7249dd559e68a2":[11,0,0,0,61], +"group__service.html#ga9b3cc4473fd8848e5bbee7f310712939":[11,0,0,0,145], "group__service.html#ga9b3cc4473fd8848e5bbee7f310712939":[9,0,6], -"group__service.html#gad82efa5466d14a9f05aa06416375b28d":[11,0,0,0,138], +"group__service.html#gad82efa5466d14a9f05aa06416375b28d":[11,0,0,0,143], "group__service.html#gad82efa5466d14a9f05aa06416375b28d":[9,0,4], -"group__service.html#gaebf426eda371ba23642fc11d8e0ace6b":[11,0,0,0,139], "group__service.html#gaebf426eda371ba23642fc11d8e0ace6b":[9,0,5], -"group__service.html#gaf95bd0c663d6516a0c80047d9b1167a8":[11,0,0,0,136], +"group__service.html#gaebf426eda371ba23642fc11d8e0ace6b":[11,0,0,0,144], +"group__service.html#gaf95bd0c663d6516a0c80047d9b1167a8":[11,0,0,0,141], "group__service.html#gaf95bd0c663d6516a0c80047d9b1167a8":[9,0,2], "group__sha.html":[9,11], "group__sha.html#ga66316e6a5a0644a09d5a10e919dfdd8d":[9,11,0], -"group__sha.html#ga66316e6a5a0644a09d5a10e919dfdd8d":[11,0,0,0,51], -"group__sha.html#ga7b09ab74646266f0b555103b3bb8dfe5":[11,0,0,0,146], +"group__sha.html#ga66316e6a5a0644a09d5a10e919dfdd8d":[11,0,0,0,52], +"group__sha.html#ga7b09ab74646266f0b555103b3bb8dfe5":[11,0,0,0,151], "group__sha.html#ga7b09ab74646266f0b555103b3bb8dfe5":[9,11,2], "group__sha.html#gaf39765e4a3b413efb65e4698b2ec3575":[9,11,1], -"group__sha.html#gaf39765e4a3b413efb65e4698b2ec3575":[11,0,0,0,52], +"group__sha.html#gaf39765e4a3b413efb65e4698b2ec3575":[11,0,0,0,53], "group__smtp.html":[9,14], "group__smtp.html#ga116be79bf44f9dc2a97f46e051fe4dc0":[9,14,1], -"group__smtp.html#ga116be79bf44f9dc2a97f46e051fe4dc0":[11,0,0,0,37], +"group__smtp.html#ga116be79bf44f9dc2a97f46e051fe4dc0":[11,0,0,0,38], +"group__smtp.html#ga25298a5afc1074e13b2d5711a86432b2":[11,0,0,0,82], "group__smtp.html#ga25298a5afc1074e13b2d5711a86432b2":[9,14,3], -"group__smtp.html#ga25298a5afc1074e13b2d5711a86432b2":[11,0,0,0,78], -"group__smtp.html#ga5e535e346d92a9daf00be33abf79d4eb":[11,0,0,0,77], +"group__smtp.html#ga5e535e346d92a9daf00be33abf79d4eb":[11,0,0,0,81], "group__smtp.html#ga5e535e346d92a9daf00be33abf79d4eb":[9,14,2], -"group__smtp.html#ga77fc9b56a1bb39484844981ec375fc29":[11,0,0,0,79], "group__smtp.html#ga77fc9b56a1bb39484844981ec375fc29":[9,14,4], +"group__smtp.html#ga77fc9b56a1bb39484844981ec375fc29":[11,0,0,0,83], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad":[9,14,1,3], -"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad":[11,0,0,0,37,3], +"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad":[11,0,0,0,38,3], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c":[9,14,1,0], -"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c":[11,0,0,0,37,0], -"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5":[11,0,0,0,37,8], +"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c":[11,0,0,0,38,0], +"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5":[11,0,0,0,38,8], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5":[9,14,1,8], +"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69":[11,0,0,0,38,7], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69":[9,14,1,7], -"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69":[11,0,0,0,37,7], +"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14":[11,0,0,0,38,6], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14":[9,14,1,6], -"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14":[11,0,0,0,37,6], -"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab":[11,0,0,0,37,4], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab":[9,14,1,4], -"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83":[11,0,0,0,37,5], +"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab":[11,0,0,0,38,4], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83":[9,14,1,5], +"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83":[11,0,0,0,38,5], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d":[9,14,1,2], -"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d":[11,0,0,0,37,2], +"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d":[11,0,0,0,38,2], "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933":[9,14,1,1], -"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933":[11,0,0,0,37,1], +"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933":[11,0,0,0,38,1], "group__sock-adopt.html":[9,15], +"group__sock-adopt.html#gab2d045df0f81afe00891aaed312d552b":[11,0,0,0,51], "group__sock-adopt.html#gab2d045df0f81afe00891aaed312d552b":[9,15,1], -"group__sock-adopt.html#gab2d045df0f81afe00891aaed312d552b":[11,0,0,0,50], -"group__sock-adopt.html#gabe71b7462afb21c767bdc67334f305af":[11,0,0,0,49], "group__sock-adopt.html#gabe71b7462afb21c767bdc67334f305af":[9,15,0], +"group__sock-adopt.html#gabe71b7462afb21c767bdc67334f305af":[11,0,0,0,50], "group__timeout.html":[9,3], -"group__timeout.html#ga2c0aa4b9c3c55bae7b35cbfac3246c87":[11,0,0,0,38], +"group__timeout.html#ga2c0aa4b9c3c55bae7b35cbfac3246c87":[11,0,0,0,39], "group__timeout.html#gaced9f9237f6172fed9f730a2af51345a":[9,3,0], -"group__timeout.html#gaced9f9237f6172fed9f730a2af51345a":[11,0,0,0,145], -"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a0d6b956db11acb6d263af3ea054a914e":[11,0,0,0,38,12], -"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a0eef059426f37d00b75142d4dc3e25e3":[11,0,0,0,38,3], -"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a1104c39d0177378713a9332ab7a9d7fe":[11,0,0,0,38,4], -"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a11292263c9eccd090294e7e316200d7f":[11,0,0,0,38,13], -"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a13527b2b1f61d9b2709eb432acd0a248":[11,0,0,0,38,7], -"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a211dd9910c37aa3a3a45fd532c76bf6e":[11,0,0,0,38,5], -"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a44feda6cc9507a8613b9263b1acc8ce1":[11,0,0,0,38,8], -"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a52236b42ec5ffe65d4cdbadeb6c4fcb0":[11,0,0,0,38,2], -"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a5fe48ea6f3f5363cca55d39b78490b45":[11,0,0,0,38,15], -"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a62ae208399be1f872e14843fd15f9e06":[11,0,0,0,38,17], -"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a65785467c0b560bead865231fdd405d7":[11,0,0,0,38,0], -"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a73f61afae387e16f7ab8a4f299aca8d2":[11,0,0,0,38,14], -"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a7d5b3bcc88ccbddfa57674e174a78c2d":[11,0,0,0,38,9], -"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a8587dc22f946c45e2f38c4045479fda5":[11,0,0,0,38,18], -"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87aaac32d9ca2f7c31f5649ad4059d7b985":[11,0,0,0,38,16], -"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87aaf69f440c2e000787efae5ad6f39e74c":[11,0,0,0,38,11], -"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87ab20463ee983bcd68cd8a501319da56d3":[11,0,0,0,38,6], -"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87ad7ebebb506afd30c48e1e5e3a578cd30":[11,0,0,0,38,1], -"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87ae8b3de955cec5da5ea52fe040f914501":[11,0,0,0,38,10], +"group__timeout.html#gaced9f9237f6172fed9f730a2af51345a":[11,0,0,0,150], +"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a0d6b956db11acb6d263af3ea054a914e":[11,0,0,0,39,12], +"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a0eef059426f37d00b75142d4dc3e25e3":[11,0,0,0,39,3], +"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a1104c39d0177378713a9332ab7a9d7fe":[11,0,0,0,39,4], +"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a11292263c9eccd090294e7e316200d7f":[11,0,0,0,39,13], +"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a13527b2b1f61d9b2709eb432acd0a248":[11,0,0,0,39,7], +"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a211dd9910c37aa3a3a45fd532c76bf6e":[11,0,0,0,39,5], +"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a44feda6cc9507a8613b9263b1acc8ce1":[11,0,0,0,39,8], +"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a52236b42ec5ffe65d4cdbadeb6c4fcb0":[11,0,0,0,39,2], +"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a5fe48ea6f3f5363cca55d39b78490b45":[11,0,0,0,39,15], +"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a62ae208399be1f872e14843fd15f9e06":[11,0,0,0,39,17], +"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a65785467c0b560bead865231fdd405d7":[11,0,0,0,39,0], +"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a73f61afae387e16f7ab8a4f299aca8d2":[11,0,0,0,39,14], +"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a7d5b3bcc88ccbddfa57674e174a78c2d":[11,0,0,0,39,9], +"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a8587dc22f946c45e2f38c4045479fda5":[11,0,0,0,39,18], +"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87aaac32d9ca2f7c31f5649ad4059d7b985":[11,0,0,0,39,16], +"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87aaf69f440c2e000787efae5ad6f39e74c":[11,0,0,0,39,11], +"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87ab20463ee983bcd68cd8a501319da56d3":[11,0,0,0,39,6], +"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87ad7ebebb506afd30c48e1e5e3a578cd30":[11,0,0,0,39,1], +"group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87ae8b3de955cec5da5ea52fe040f914501":[11,0,0,0,39,10], "group__urlendec.html":[9,6,5], -"group__urlendec.html#gaa373a9c16acdd96c395af61ab915ece3":[11,0,0,0,156], +"group__urlendec.html#gaa373a9c16acdd96c395af61ab915ece3":[11,0,0,0,161], "group__urlendec.html#gaa373a9c16acdd96c395af61ab915ece3":[9,6,5,0], -"group__urlendec.html#gabc2888476e50e001c875c1a8abf455b7":[11,0,0,0,157], +"group__urlendec.html#gabc2888476e50e001c875c1a8abf455b7":[11,0,0,0,162], "group__urlendec.html#gabc2888476e50e001c875c1a8abf455b7":[9,6,5,1], "group__usercb.html":[9,16], "group__usercb.html#gad4fcb82e68d60ffacca61a3f783a0a2f":[11,0,0,0,8], "group__usercb.html#gad4fcb82e68d60ffacca61a3f783a0a2f":[9,16,0], -"group__usercb.html#gad62860e19975ba4c4af401c3cdb6abf7":[11,0,0,0,22], +"group__usercb.html#gad62860e19975ba4c4af401c3cdb6abf7":[11,0,0,0,23], "group__usercb.html#gad62860e19975ba4c4af401c3cdb6abf7":[9,16,1], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a026502768778b8d79d62dd0fe4375fc6":[11,0,0,0,22,17], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a026502768778b8d79d62dd0fe4375fc6":[11,0,0,0,23,17], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a026502768778b8d79d62dd0fe4375fc6":[9,16,1,17], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a0418587d5083bb4850faa438648496ba":[11,0,0,0,22,49], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a06006e98d27e1e884364d88317f83493":[11,0,0,0,22,22], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a0418587d5083bb4850faa438648496ba":[11,0,0,0,23,49], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a06006e98d27e1e884364d88317f83493":[11,0,0,0,23,22], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a06006e98d27e1e884364d88317f83493":[9,16,1,22], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a0e9e3dd667c0c42cdbe1a3d921f4fd79":[11,0,0,0,22,36], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a0e9e3dd667c0c42cdbe1a3d921f4fd79":[11,0,0,0,23,36], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a0e9e3dd667c0c42cdbe1a3d921f4fd79":[9,16,1,36], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a136a7cec11c3afd13245623bd84e76c9":[11,0,0,0,22,9], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a136a7cec11c3afd13245623bd84e76c9":[11,0,0,0,23,9], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a136a7cec11c3afd13245623bd84e76c9":[9,16,1,9], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a182a4a14c3278784505cea6d516a8308":[11,0,0,0,22,47], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a1ce5b22039ca37ee224d00047596ea46":[11,0,0,0,22,26], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a182a4a14c3278784505cea6d516a8308":[11,0,0,0,23,47], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a1ce5b22039ca37ee224d00047596ea46":[11,0,0,0,23,26], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a1ce5b22039ca37ee224d00047596ea46":[9,16,1,26], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a1df60f314710236f9b53efbf468da768":[11,0,0,0,22,33], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a1df60f314710236f9b53efbf468da768":[11,0,0,0,23,33], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a1df60f314710236f9b53efbf468da768":[9,16,1,33], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a23b90b5e5146e760bc3123ae1fd2a6e5":[11,0,0,0,22,40], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a24d39bf1cfc0bad9d92da9ac1717e439":[11,0,0,0,22,0], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a23b90b5e5146e760bc3123ae1fd2a6e5":[11,0,0,0,23,40], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a24d39bf1cfc0bad9d92da9ac1717e439":[11,0,0,0,23,0], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a24d39bf1cfc0bad9d92da9ac1717e439":[9,16,1,0], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2db02fc6e1c17ab62b52109d1aa9d738":[11,0,0,0,22,7], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2db02fc6e1c17ab62b52109d1aa9d738":[11,0,0,0,23,7], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2db02fc6e1c17ab62b52109d1aa9d738":[9,16,1,7], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2fce9a8608220f32abbf1422a5498804":[11,0,0,0,22,14], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2fce9a8608220f32abbf1422a5498804":[11,0,0,0,23,14], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2fce9a8608220f32abbf1422a5498804":[9,16,1,14], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a390da3639296660a78cc1a5dcb19037e":[11,0,0,0,22,25], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a390da3639296660a78cc1a5dcb19037e":[11,0,0,0,23,25], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a390da3639296660a78cc1a5dcb19037e":[9,16,1,25], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a45d538082dec32dbecfe9d9a05ddfecd":[11,0,0,0,22,50], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a48a9590e5e18c7920282e094a0bfd9d8":[11,0,0,0,22,4], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a45d538082dec32dbecfe9d9a05ddfecd":[11,0,0,0,23,50], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a48a9590e5e18c7920282e094a0bfd9d8":[11,0,0,0,23,4], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a48a9590e5e18c7920282e094a0bfd9d8":[9,16,1,4], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a492c1b1c0ac0ed980042ee732fe2990c":[11,0,0,0,22,6], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a492c1b1c0ac0ed980042ee732fe2990c":[11,0,0,0,23,6], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a492c1b1c0ac0ed980042ee732fe2990c":[9,16,1,6], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a54269ca88508e6efd3afdb9d360a9caa":[11,0,0,0,22,28], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a54269ca88508e6efd3afdb9d360a9caa":[11,0,0,0,23,28], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a54269ca88508e6efd3afdb9d360a9caa":[9,16,1,28], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a659539cfa65c66e0d813113b09900d31":[11,0,0,0,22,42], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a6a09ee9c01c4a233aedbe6697e29cc01":[11,0,0,0,22,44], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a75199176c82c1a56e4a6bbf1cc30c12c":[11,0,0,0,22,18], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a659539cfa65c66e0d813113b09900d31":[11,0,0,0,23,42], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a6a09ee9c01c4a233aedbe6697e29cc01":[11,0,0,0,23,44], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a75199176c82c1a56e4a6bbf1cc30c12c":[11,0,0,0,23,18], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a75199176c82c1a56e4a6bbf1cc30c12c":[9,16,1,18], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7e12418eec9bce85735e6460176ab604":[9,16,1,3], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7e12418eec9bce85735e6460176ab604":[11,0,0,0,22,3], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7ec8e2e9557ee02a4fc9f7dec7e2babc":[11,0,0,0,22,11], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7e12418eec9bce85735e6460176ab604":[11,0,0,0,23,3], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7ec8e2e9557ee02a4fc9f7dec7e2babc":[11,0,0,0,23,11], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7ec8e2e9557ee02a4fc9f7dec7e2babc":[9,16,1,11], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a838b18d255c1b94a533287ba302a2eba":[11,0,0,0,22,5], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a838b18d255c1b94a533287ba302a2eba":[11,0,0,0,23,5], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a838b18d255c1b94a533287ba302a2eba":[9,16,1,5], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8909732521d379179003d97ab7a05428":[11,0,0,0,22,35], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8909732521d379179003d97ab7a05428":[11,0,0,0,23,35], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8909732521d379179003d97ab7a05428":[9,16,1,35], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a89862929a72bff65257ca1d51a0fce4d":[11,0,0,0,22,52], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8e8b2e6dbeac76d8d126947d2166a514":[11,0,0,0,22,10], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a89862929a72bff65257ca1d51a0fce4d":[11,0,0,0,23,52], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8e8b2e6dbeac76d8d126947d2166a514":[9,16,1,10], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a909cc2a7018864b0b71abacc4058fd8f":[11,0,0,0,22,24], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8e8b2e6dbeac76d8d126947d2166a514":[11,0,0,0,23,10], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a909cc2a7018864b0b71abacc4058fd8f":[11,0,0,0,23,24], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a909cc2a7018864b0b71abacc4058fd8f":[9,16,1,24], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a982579753e70e59a9ea13ce628ac891a":[11,0,0,0,22,58], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a982579753e70e59a9ea13ce628ac891a":[11,0,0,0,23,58], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a982579753e70e59a9ea13ce628ac891a":[9,16,1,41], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa46f705dcf97502e95627ffde614f98b":[11,0,0,0,22,37], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa46f705dcf97502e95627ffde614f98b":[11,0,0,0,23,37], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa46f705dcf97502e95627ffde614f98b":[9,16,1,37], -"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#ggad62860e19975ba4c4af401c3cdb6abf7aa536e574a642ff3ab9e12bff7ba2c6a2":[11,0,0,0,23,2], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa5cc921b7697743017a533822a3d556a":[11,0,0,0,23,56], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa5cc921b7697743017a533822a3d556a":[9,16,1,39], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa627548e1296e654fcfab463ec3c9587":[11,0,0,0,22,15], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa627548e1296e654fcfab463ec3c9587":[11,0,0,0,23,15], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa627548e1296e654fcfab463ec3c9587":[9,16,1,15], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa87d2e82fffa42c3680c7403ef94216e":[11,0,0,0,22,34], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa87d2e82fffa42c3680c7403ef94216e":[11,0,0,0,23,34], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa87d2e82fffa42c3680c7403ef94216e":[9,16,1,34], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aaffd08a5cae791c9f3c38ee242203900":[11,0,0,0,22,46], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ab69783a9fbf2ca71ad70706bda77b412":[11,0,0,0,22,32], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aaffd08a5cae791c9f3c38ee242203900":[11,0,0,0,23,46], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ab69783a9fbf2ca71ad70706bda77b412":[11,0,0,0,23,32], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ab69783a9fbf2ca71ad70706bda77b412":[9,16,1,32], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ab884f3d5f8a6126a0d34c0172f5e3725":[11,0,0,0,22,53], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ab884f3d5f8a6126a0d34c0172f5e3725":[11,0,0,0,23,53], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7abbbe7a0a67c5866ca9109d46823fc5b1":[11,0,0,0,23,8], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7abbbe7a0a67c5866ca9109d46823fc5b1":[9,16,1,8], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7abbbe7a0a67c5866ca9109d46823fc5b1":[11,0,0,0,22,8], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7abcf9c720cd3d361a83d1ac65bf052a25":[11,0,0,0,22,39], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac11c336f7052abf3618962902a71ebc8":[11,0,0,0,22,54], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac3fc5bbb55e69f90396526287ee84a51":[11,0,0,0,22,38], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7abcf9c720cd3d361a83d1ac65bf052a25":[11,0,0,0,23,39], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac11c336f7052abf3618962902a71ebc8":[11,0,0,0,23,54], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac3fc5bbb55e69f90396526287ee84a51":[11,0,0,0,23,38], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac3fc5bbb55e69f90396526287ee84a51":[9,16,1,38], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac432e9f891c733ba8f968c1bf57c0ddc":[11,0,0,0,22,45], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac4c68e00efcf1ff7bda7ada462aff8ae":[11,0,0,0,22,13], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac432e9f891c733ba8f968c1bf57c0ddc":[11,0,0,0,23,45], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac4c68e00efcf1ff7bda7ada462aff8ae":[11,0,0,0,23,13], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac4c68e00efcf1ff7bda7ada462aff8ae":[9,16,1,13], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac8c0ae966ef1877e0020c0077ff2e4a4":[11,0,0,0,22,41], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aca834dc035b7f7486f9ce40fde54fe9e":[11,0,0,0,22,30], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac8c0ae966ef1877e0020c0077ff2e4a4":[11,0,0,0,23,41], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aca834dc035b7f7486f9ce40fde54fe9e":[11,0,0,0,23,30], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aca834dc035b7f7486f9ce40fde54fe9e":[9,16,1,30], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7accd8753672d319a30b4b4c2fb775e84d":[11,0,0,0,22,20], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7accd8753672d319a30b4b4c2fb775e84d":[11,0,0,0,23,20], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7accd8753672d319a30b4b4c2fb775e84d":[9,16,1,20], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ad5d34583e3556e153eda91620b48cc49":[11,0,0,0,22,27], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ad5d34583e3556e153eda91620b48cc49":[11,0,0,0,23,27], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ad5d34583e3556e153eda91620b48cc49":[9,16,1,27], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ad724974204d51d688f569c5d387b967d":[11,0,0,0,22,43], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ad87774f1c7784cf632e1e2f5b51036e1":[11,0,0,0,22,48], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ad724974204d51d688f569c5d387b967d":[11,0,0,0,23,43], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ad87774f1c7784cf632e1e2f5b51036e1":[11,0,0,0,23,48], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ad8c6207b0c4e732f3d507f0fb79370e8":[9,16,1,1], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ad8c6207b0c4e732f3d507f0fb79370e8":[11,0,0,0,22,1], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7adfb41c92e2522712207ef7f2462b5e34":[11,0,0,0,22,31], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ad8c6207b0c4e732f3d507f0fb79370e8":[11,0,0,0,23,1], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7adfb41c92e2522712207ef7f2462b5e34":[11,0,0,0,23,31], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7adfb41c92e2522712207ef7f2462b5e34":[9,16,1,31], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae4986291b7a810fe290851d73bebeb1c":[11,0,0,0,23,21], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae4986291b7a810fe290851d73bebeb1c":[9,16,1,21], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae4986291b7a810fe290851d73bebeb1c":[11,0,0,0,22,21], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae5ad65d779b7eab32ab67ceff91a3bac":[11,0,0,0,22,23], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae5ad65d779b7eab32ab67ceff91a3bac":[11,0,0,0,23,23], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae5ad65d779b7eab32ab67ceff91a3bac":[9,16,1,23], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae8d1de0bb56e03aa58cb4d44b18edd2e":[11,0,0,0,22,12], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae8d1de0bb56e03aa58cb4d44b18edd2e":[11,0,0,0,23,12], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae8d1de0bb56e03aa58cb4d44b18edd2e":[9,16,1,12], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae9734e1d7af2abf291665ce9e4a728d3":[11,0,0,0,22,19], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae9734e1d7af2abf291665ce9e4a728d3":[11,0,0,0,23,19], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae9734e1d7af2abf291665ce9e4a728d3":[9,16,1,19], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aeb0cec65ec82a713cd01e9ca9aeeb5e6":[11,0,0,0,22,57], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aeb0cec65ec82a713cd01e9ca9aeeb5e6":[11,0,0,0,23,57], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aeb0cec65ec82a713cd01e9ca9aeeb5e6":[9,16,1,40], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7af6cf80e57aae8ba0a57a5c456b1fe026":[11,0,0,0,22,55], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afc4b2f72cc9e424a750b506ce0cc4310":[11,0,0,0,22,51], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afd8fd77a1cc9405fcb4f26915d7f2d01":[11,0,0,0,22,29], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7af6cf80e57aae8ba0a57a5c456b1fe026":[11,0,0,0,23,55], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afc4b2f72cc9e424a750b506ce0cc4310":[11,0,0,0,23,51], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afd8fd77a1cc9405fcb4f26915d7f2d01":[11,0,0,0,23,29], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afd8fd77a1cc9405fcb4f26915d7f2d01":[9,16,1,29], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afedadfb3cde37a8ea4c84ed535f26d09":[11,0,0,0,22,16], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afedadfb3cde37a8ea4c84ed535f26d09":[11,0,0,0,23,16], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afedadfb3cde37a8ea4c84ed535f26d09":[9,16,1,16], "group__uv.html":[9,22], -"group__uv.html#ga097c89497824d4de225a85a00661fc89":[11,0,0,0,120], -"group__uv.html#ga3c75cd6ec3f80fc0a0c8ead4c4e71a15":[11,0,0,0,121], -"group__uv.html#ga99099e045993383f251a8026e1e40414":[11,0,0,0,161], -"group__uv.html#gaa5e3593c94f91910d9d928dfa0c18f6c":[11,0,0,0,158], -"group__uv.html#gac5f60dba13a45e5d554b4fb7df7b9610":[11,0,0,0,160], -"group__uv.html#gad85ce3bfc53ff754988d36bf5de39e21":[11,0,0,0,159], +"group__uv.html#ga097c89497824d4de225a85a00661fc89":[11,0,0,0,124], +"group__uv.html#ga3c75cd6ec3f80fc0a0c8ead4c4e71a15":[11,0,0,0,125], +"group__uv.html#ga99099e045993383f251a8026e1e40414":[11,0,0,0,166], +"group__uv.html#gaa17758e1f852017a2271d8fb3e9305aa":[11,0,0,0,126], +"group__uv.html#gaa5e3593c94f91910d9d928dfa0c18f6c":[11,0,0,0,163], +"group__uv.html#gac5f60dba13a45e5d554b4fb7df7b9610":[11,0,0,0,165], +"group__uv.html#gad85ce3bfc53ff754988d36bf5de39e21":[11,0,0,0,164], "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#ga31eca18e50cb4357480f2fcad36ff437":[11,0,0,0,33], "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#gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0":[11,0,0,0,32,0], +"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69":[11,0,0,0,33,3], "group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0":[9,4,0,2,0], +"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0":[11,0,0,0,33,0], "group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2":[9,4,0,2,2], -"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2":[11,0,0,0,32,2], +"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2":[11,0,0,0,33,2], "group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a8894d16316863077dfe530963ca59f67":[9,4,0,2,5], -"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a8894d16316863077dfe530963ca59f67":[11,0,0,0,32,5], +"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a8894d16316863077dfe530963ca59f67":[11,0,0,0,33,5], "group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da":[9,4,0,2,6], -"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da":[11,0,0,0,32,6], +"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da":[11,0,0,0,33,6], "group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970":[9,4,0,2,4], -"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970":[11,0,0,0,32,4], +"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970":[11,0,0,0,33,4], "group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1":[9,4,0,2,1], -"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1":[11,0,0,0,32,1], +"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1":[11,0,0,0,33,1], "group__wsclose.html":[9,17], "group__wsclose.html#gaa1c863415d1783cd8de7938aa6efa262":[9,17,1], -"group__wsclose.html#gaa1c863415d1783cd8de7938aa6efa262":[11,0,0,0,71], -"group__wsclose.html#gae399c571df32ba532c0ca67da9284985":[11,0,0,0,25], +"group__wsclose.html#gaa1c863415d1783cd8de7938aa6efa262":[11,0,0,0,72], +"group__wsclose.html#gae399c571df32ba532c0ca67da9284985":[11,0,0,0,26], "group__wsclose.html#gae399c571df32ba532c0ca67da9284985":[9,17,0], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a1bb501d212fa4d57053db681b1dfab98":[9,17,0,2], -"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a1bb501d212fa4d57053db681b1dfab98":[11,0,0,0,25,3], +"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a1bb501d212fa4d57053db681b1dfab98":[11,0,0,0,26,3], +"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8":[11,0,0,0,26,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#ggae399c571df32ba532c0ca67da9284985a32c38edab10d1379febac0c479ab2e9c":[11,0,0,0,26,14], +"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a3ffa38d5081b85fb739e02a747ccf2c4":[11,0,0,0,26,1], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a3ffa38d5081b85fb739e02a747ccf2c4":[9,17,0,0], -"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a462c99b05459df700919cfd3f53c8276":[11,0,0,0,25,4], +"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a462c99b05459df700919cfd3f53c8276":[11,0,0,0,26,4], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a462c99b05459df700919cfd3f53c8276":[9,17,0,3], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a4b8a3b7ce6f731e5248e4b0fb64a5044":[9,17,0,5], -"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a4b8a3b7ce6f731e5248e4b0fb64a5044":[11,0,0,0,25,6], -"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a68b3d34bebd88547dcfa5cadba0acd6c":[11,0,0,0,25,7], +"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a4b8a3b7ce6f731e5248e4b0fb64a5044":[11,0,0,0,26,6], +"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a68b3d34bebd88547dcfa5cadba0acd6c":[11,0,0,0,26,7], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a68b3d34bebd88547dcfa5cadba0acd6c":[9,17,0,6], -"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050":[11,0,0,0,25,8], +"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050":[11,0,0,0,26,8], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050":[9,17,0,7], -"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218":[11,0,0,0,25,2], +"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218":[11,0,0,0,26,2], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218":[9,17,0,1], -"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e":[11,0,0,0,25,11], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e":[9,17,0,10], -"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985acc9a317c70363dd88e823e066b2c73b7":[11,0,0,0,25,0], +"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e":[11,0,0,0,26,11], +"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985acc9a317c70363dd88e823e066b2c73b7":[11,0,0,0,26,0], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad0869604d79e13700ae5d196a431b350":[9,17,0,11], -"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad0869604d79e13700ae5d196a431b350":[11,0,0,0,25,12], -"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad09e68295eabdddcba4e332fbea70ae5":[11,0,0,0,25,9], +"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad0869604d79e13700ae5d196a431b350":[11,0,0,0,26,12], +"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad09e68295eabdddcba4e332fbea70ae5":[11,0,0,0,26,9], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad09e68295eabdddcba4e332fbea70ae5":[9,17,0,8], -"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#ggae399c571df32ba532c0ca67da9284985ad2b477a91c8445bf34ecd43977f9b390":[11,0,0,0,26,13], "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2":[9,17,0,4], +"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2":[11,0,0,0,26,5], "group__wsstatus.html":[9,18], +"group__wsstatus.html#ga08e9ee165fca503fd9427d55cfecac37":[11,0,0,0,119], "group__wsstatus.html#ga08e9ee165fca503fd9427d55cfecac37":[9,18,3], -"group__wsstatus.html#ga08e9ee165fca503fd9427d55cfecac37":[11,0,0,0,115], "group__wsstatus.html#ga26a140623d202dd2bf2004deb6994baa":[9,18,4], -"group__wsstatus.html#ga26a140623d202dd2bf2004deb6994baa":[11,0,0,0,116], -"group__wsstatus.html#ga2bb3655329b4651cd06f79ee3a764421":[11,0,0,0,133], -"group__wsstatus.html#ga2bb3655329b4651cd06f79ee3a764421":[9,18,6], -"group__wsstatus.html#ga3df5045656dfb6b0e63a38de2dca79d2":[11,0,0,0,100], -"group__wsstatus.html#ga3df5045656dfb6b0e63a38de2dca79d2":[9,18,1], -"group__wsstatus.html#ga4ad226d5e01024b4046f4a5a37199aa1":[9,18,2], -"group__wsstatus.html#ga4ad226d5e01024b4046f4a5a37199aa1":[11,0,0,0,114] +"group__wsstatus.html#ga26a140623d202dd2bf2004deb6994baa":[11,0,0,0,120] }; diff --git a/doc/html/navtreeindex3.js b/doc/html/navtreeindex3.js index 2f6fbe4..092ee0a 100644 --- a/doc/html/navtreeindex3.js +++ b/doc/html/navtreeindex3.js @@ -1,46 +1,52 @@ var NAVTREEINDEX3 = { +"group__wsstatus.html#ga2bb3655329b4651cd06f79ee3a764421":[11,0,0,0,138], +"group__wsstatus.html#ga2bb3655329b4651cd06f79ee3a764421":[9,18,6], +"group__wsstatus.html#ga3df5045656dfb6b0e63a38de2dca79d2":[9,18,1], +"group__wsstatus.html#ga3df5045656dfb6b0e63a38de2dca79d2":[11,0,0,0,104], +"group__wsstatus.html#ga4ad226d5e01024b4046f4a5a37199aa1":[9,18,2], +"group__wsstatus.html#ga4ad226d5e01024b4046f4a5a37199aa1":[11,0,0,0,118], "group__wsstatus.html#gaccd9c59336efad8af0554f79cc5966fd":[9,18,0], -"group__wsstatus.html#gaccd9c59336efad8af0554f79cc5966fd":[11,0,0,0,87], +"group__wsstatus.html#gaccd9c59336efad8af0554f79cc5966fd":[11,0,0,0,91], +"group__wsstatus.html#gaeca4afc94b1f026034f99cbba37e2f85":[11,0,0,0,129], "group__wsstatus.html#gaeca4afc94b1f026034f99cbba37e2f85":[9,18,5], -"group__wsstatus.html#gaeca4afc94b1f026034f99cbba37e2f85":[11,0,0,0,124], "hierarchy.html":[10,2], "index.html":[], "index.html":[0], "libwebsockets_8h.html":[11,0,0,0], -"libwebsockets_8h.html#a0b056fdcf949a838ff82209b4a627dd9":[11,0,0,0,171], -"libwebsockets_8h.html#a17f5fc891b31d2920bd18b0d66d6cb25":[11,0,0,0,176], -"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], -"libwebsockets_8h.html#a2271141d8be8d72b47ba327130b4905fa9ce9c65d4229d1d168fca3cc12e7f535":[11,0,0,0,27,2], -"libwebsockets_8h.html#a2271141d8be8d72b47ba327130b4905fafdb6cf2797a3ea957c690ad6edff25d6":[11,0,0,0,27,0], -"libwebsockets_8h.html#a27551d6899b1e4de4b2b5854e805c6eb":[11,0,0,0,19], -"libwebsockets_8h.html#a27bb0b3cdcd0af839c928c253b521ff4":[11,0,0,0,64], -"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedb":[11,0,0,0,23], -"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedba35cf2bed9944faa062d9310197489b2f":[11,0,0,0,23,4], -"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedba60ac587febc583475c185e1409a0210c":[11,0,0,0,23,1], -"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedbaa424646e067c6266bcb4f0190b026d66":[11,0,0,0,23,0], -"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedbac8f5f992c6615324108cdf931da903be":[11,0,0,0,23,2], -"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedbad655f0eecc9e94be37b8ed07348716ef":[11,0,0,0,23,6], -"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedbad9cdc12a796e6c7d912278834d9c7dde":[11,0,0,0,23,3], -"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedbada3dca91d96bcde5df08a67b5a66e972":[11,0,0,0,23,5], -"libwebsockets_8h.html#a4e877a4f0bb027d05d3a90c8e6a632de":[11,0,0,0,41], -"libwebsockets_8h.html#a5326d3402af8429a166dd991dc65c4a2":[11,0,0,0,65], -"libwebsockets_8h.html#a5e627dbf1db48170ef486edbaf268672":[11,0,0,0,131], -"libwebsockets_8h.html#a72fe65e83b8bb03f904a1a256c673536":[11,0,0,0,129], -"libwebsockets_8h.html#a75e9827318684877deb4189121a8cd2a":[11,0,0,0,43], -"libwebsockets_8h.html#a863bdd5bca33bcbaa424c42fb7b2fc96":[11,0,0,0,175], -"libwebsockets_8h.html#a9032a3062641d334161c29adcc4fa15d":[11,0,0,0,173], -"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,174], -"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,132], -"libwebsockets_8h.html#aefb2f20fe5bb29d79701a399838ef4ce":[11,0,0,0,172], -"libwebsockets_8h.html#af52923473c59e643a974d65e12290831":[11,0,0,0,63], +"libwebsockets_8h.html#a0b056fdcf949a838ff82209b4a627dd9":[11,0,0,0,176], +"libwebsockets_8h.html#a17f5fc891b31d2920bd18b0d66d6cb25":[11,0,0,0,181], +"libwebsockets_8h.html#a1b12016562c728eb306c7f954c804bef":[11,0,0,0,21], +"libwebsockets_8h.html#a2271141d8be8d72b47ba327130b4905f":[11,0,0,0,28], +"libwebsockets_8h.html#a2271141d8be8d72b47ba327130b4905fa7741c12fc97574fa73a810fedae2be76":[11,0,0,0,28,1], +"libwebsockets_8h.html#a2271141d8be8d72b47ba327130b4905fa9ce9c65d4229d1d168fca3cc12e7f535":[11,0,0,0,28,2], +"libwebsockets_8h.html#a2271141d8be8d72b47ba327130b4905fafdb6cf2797a3ea957c690ad6edff25d6":[11,0,0,0,28,0], +"libwebsockets_8h.html#a27551d6899b1e4de4b2b5854e805c6eb":[11,0,0,0,20], +"libwebsockets_8h.html#a27bb0b3cdcd0af839c928c253b521ff4":[11,0,0,0,65], +"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedb":[11,0,0,0,24], +"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedba35cf2bed9944faa062d9310197489b2f":[11,0,0,0,24,4], +"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedba60ac587febc583475c185e1409a0210c":[11,0,0,0,24,1], +"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedbaa424646e067c6266bcb4f0190b026d66":[11,0,0,0,24,0], +"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedbac8f5f992c6615324108cdf931da903be":[11,0,0,0,24,2], +"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedbad655f0eecc9e94be37b8ed07348716ef":[11,0,0,0,24,6], +"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedbad9cdc12a796e6c7d912278834d9c7dde":[11,0,0,0,24,3], +"libwebsockets_8h.html#a42394a38f08a97420c98127358cfeedbada3dca91d96bcde5df08a67b5a66e972":[11,0,0,0,24,5], +"libwebsockets_8h.html#a4e877a4f0bb027d05d3a90c8e6a632de":[11,0,0,0,42], +"libwebsockets_8h.html#a5326d3402af8429a166dd991dc65c4a2":[11,0,0,0,66], +"libwebsockets_8h.html#a5e627dbf1db48170ef486edbaf268672":[11,0,0,0,136], +"libwebsockets_8h.html#a72fe65e83b8bb03f904a1a256c673536":[11,0,0,0,134], +"libwebsockets_8h.html#a75e9827318684877deb4189121a8cd2a":[11,0,0,0,44], +"libwebsockets_8h.html#a863bdd5bca33bcbaa424c42fb7b2fc96":[11,0,0,0,180], +"libwebsockets_8h.html#a9032a3062641d334161c29adcc4fa15d":[11,0,0,0,178], +"libwebsockets_8h.html#a9b1bfc6f34319188d2aa40500d825bab":[11,0,0,0,43], +"libwebsockets_8h.html#a9b878fb94f4596226c982eef4f42a607":[11,0,0,0,45], +"libwebsockets_8h.html#a9f2a8506fd963db95a5103823c60fb0a":[11,0,0,0,179], +"libwebsockets_8h.html#abddb8d337fb2692586d892b494739003":[11,0,0,0,19], +"libwebsockets_8h.html#ac3abb8b7e6d29a0292797230e4031681":[11,0,0,0,18], +"libwebsockets_8h.html#adedbc79528b71a5c7f27cde87100c9aa":[11,0,0,0,16], +"libwebsockets_8h.html#adf4abd01e8c43f07c6e498ce13590c3e":[11,0,0,0,137], +"libwebsockets_8h.html#aefb2f20fe5bb29d79701a399838ef4ce":[11,0,0,0,177], +"libwebsockets_8h.html#af52923473c59e643a974d65e12290831":[11,0,0,0,64], "libwebsockets_8h.html#aff42d53861afdc1a6edfb999ba688ecb":[11,0,0,0,11], "libwebsockets_8h_source.html":[11,0,0,0], "md_README_8build.html":[1], @@ -111,15 +117,16 @@ var NAVTREEINDEX3 = "md_README_8lwsws.html#lwsws":[3,0], "md_README_8lwsws.html#lwswsb":[3,1], "md_README_8lwsws.html#lwswsc":[3,2], -"md_README_8lwsws.html#lwswslr":[3,14], +"md_README_8lwsws.html#lwswslr":[3,15], "md_README_8lwsws.html#lwswsm":[3,8], "md_README_8lwsws.html#lwswsomo":[3,9], "md_README_8lwsws.html#lwswsovo":[3,7], "md_README_8lwsws.html#lwswspl":[3,10], "md_README_8lwsws.html#lwswsplaplp":[3,11], "md_README_8lwsws.html#lwswspr":[3,6], +"md_README_8lwsws.html#lwswsreload":[3,13], "md_README_8lwsws.html#lwswsssp":[3,12], -"md_README_8lwsws.html#lwswssysd":[3,13], +"md_README_8lwsws.html#lwswssysd":[3,14], "md_README_8lwsws.html#lwswsv":[3,4], "md_README_8lwsws.html#lwswsvn":[3,5], "md_README_8problems.html":[2], @@ -242,12 +249,5 @@ var NAVTREEINDEX3 = "structlws__extension.html#afa21f3b3c8c2c9212a276c52b680c3af":[9,5,2,0], "structlws__gs__event__args.html":[9,10,0,3], "structlws__gs__event__args.html#a2bec693d8a43730d487004a44326178b":[9,10,0,3,2], -"structlws__gs__event__args.html#a477274f8ca22ba7411b9285b9dc8dd06":[9,10,0,3,1], -"structlws__gs__event__args.html#acd17e4f9f91f7f9a8f0fbf0744a3a463":[9,10,0,3,0], -"structlws__http__mount.html":[9,4,0,1], -"structlws__http__mount.html#a0109baf93f23c07c824c997c3533ee44":[9,4,0,1,12], -"structlws__http__mount.html#a05347d92c3d379809564bd4f3eab259b":[9,4,0,1,17], -"structlws__http__mount.html#a11ea62b952710d59733dbcf9794a5773":[9,4,0,1,11], -"structlws__http__mount.html#a21d86fd6043ec00e121ababbc29af39a":[9,4,0,1,15], -"structlws__http__mount.html#a2f6c7dbc2d714b7259c67b7744d4ff98":[9,4,0,1,2] +"structlws__gs__event__args.html#a477274f8ca22ba7411b9285b9dc8dd06":[9,10,0,3,1] }; diff --git a/doc/html/navtreeindex4.js b/doc/html/navtreeindex4.js index 6a12090..c3d14ee 100644 --- a/doc/html/navtreeindex4.js +++ b/doc/html/navtreeindex4.js @@ -1,5 +1,12 @@ var NAVTREEINDEX4 = { +"structlws__gs__event__args.html#acd17e4f9f91f7f9a8f0fbf0744a3a463":[9,10,0,3,0], +"structlws__http__mount.html":[9,4,0,1], +"structlws__http__mount.html#a0109baf93f23c07c824c997c3533ee44":[9,4,0,1,12], +"structlws__http__mount.html#a05347d92c3d379809564bd4f3eab259b":[9,4,0,1,17], +"structlws__http__mount.html#a11ea62b952710d59733dbcf9794a5773":[9,4,0,1,11], +"structlws__http__mount.html#a21d86fd6043ec00e121ababbc29af39a":[9,4,0,1,15], +"structlws__http__mount.html#a2f6c7dbc2d714b7259c67b7744d4ff98":[9,4,0,1,2], "structlws__http__mount.html#a4283e30ea89d27ae7d061ad760d1d146":[9,4,0,1,4], "structlws__http__mount.html#a4437423df85ee3dbcae0e15974c89ec7":[9,4,0,1,10], "structlws__http__mount.html#a4a7239d6d4c03986e6e1a72abb6c83aa":[9,4,0,1,7], @@ -56,16 +63,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,2,3], +"structlws__protocol__vhost__options.html":[9,4,2], "structlws__protocol__vhost__options.html#a0640a92513c70ee6b9b295a9ad1658e7":[9,4,0,0,3], -"structlws__protocol__vhost__options.html#abc714ddb4171756fc8196e9823a1e21c":[9,4,2,1], +"structlws__protocol__vhost__options.html#a0640a92513c70ee6b9b295a9ad1658e7":[9,4,2,3], "structlws__protocol__vhost__options.html#abc714ddb4171756fc8196e9823a1e21c":[9,4,0,0,1], +"structlws__protocol__vhost__options.html#abc714ddb4171756fc8196e9823a1e21c":[9,4,2,1], "structlws__protocol__vhost__options.html#acf9db77f8eb64cd4e314be9b43d8a8b9":[9,4,0,0,0], "structlws__protocol__vhost__options.html#acf9db77f8eb64cd4e314be9b43d8a8b9":[9,4,2,0], -"structlws__protocol__vhost__options.html#afd99fbc90be51ea2465b550c2ec47822":[9,4,2,2], "structlws__protocol__vhost__options.html#afd99fbc90be51ea2465b550c2ec47822":[9,4,0,0,2], +"structlws__protocol__vhost__options.html#afd99fbc90be51ea2465b550c2ec47822":[9,4,2,2], "structlws__protocols.html":[9,10,1], "structlws__protocols.html#a0d1d4996d81b2f5e125bcec981e461c5":[9,10,1,4], "structlws__protocols.html#a0e63edb457a613c3fa4271e0a8f19624":[9,10,1,2], @@ -81,10 +88,10 @@ 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#a855b7375d1d58516c0ecd4b60e9a7766":[9,6,4,0,1], +"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,4,0,0], "structlws__tokens.html#a9f3635412bc71a5cb78e9862b55f10cd":[9,6,6,0], "structlwsgw__hash.html":[9,10,0,1], diff --git a/lib/context.c b/lib/context.c index ba2a275..cab3351 100644 --- a/lib/context.c +++ b/lib/context.c @@ -610,6 +610,7 @@ lws_create_context(struct lws_context_creation_info *info) info->external_baggage_free_on_destroy; context->time_up = time(NULL); + #ifndef LWS_NO_DAEMONIZE if (pid_daemon) { context->started_with_parent = pid_daemon; @@ -824,22 +825,79 @@ bail: return NULL; } +LWS_VISIBLE LWS_EXTERN void +lws_context_deprecate(struct lws_context *context, lws_reload_func cb) +{ + struct lws_vhost *vh = context->vhost_list, *vh1; + struct lws *wsi; + + /* + * "deprecation" means disable the context from accepting any new + * connections and free up listen sockets to be used by a replacement + * context. + * + * Otherwise the deprecated context remains operational, until its + * number of connected sockets falls to zero, when it is deleted. + */ + + /* for each vhost, close his listen socket */ + + while (vh) { + wsi = vh->lserv_wsi; + if (wsi) { + wsi->socket_is_permanently_unusable = 1; + lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS); + wsi->context->deprecation_pending_listen_close_count++; + /* + * other vhosts can share the listen port, they + * point to the same wsi. So zap those too. + */ + vh1 = context->vhost_list; + while (vh1) { + if (vh1->lserv_wsi == wsi) + vh1->lserv_wsi = NULL; + vh1 = vh1->vhost_next; + } + } + vh = vh->vhost_next; + } + + context->deprecated = 1; + context->deprecation_cb = cb; +} + +LWS_VISIBLE LWS_EXTERN int +lws_context_is_deprecated(struct lws_context *context) +{ + return context->deprecated; +} + +LWS_VISIBLE void +lws_context_destroy2(struct lws_context *context); + LWS_VISIBLE void lws_context_destroy(struct lws_context *context) { const struct lws_protocols *protocol = NULL; struct lws_context_per_thread *pt; - struct lws_vhost *vh = NULL, *vh1; + struct lws_vhost *vh = NULL; struct lws wsi; int n, m; - lwsl_notice("%s\n", __func__); - - if (!context) + if (!context) { + lwsl_notice("%s: ctx %p\n", __func__, context); + return; + } + if (context->being_destroyed1) { + lwsl_notice("%s: ctx %p: already being destroyed\n", __func__, context); return; + } + + lwsl_notice("%s: ctx %p\n", __func__, context); m = context->count_threads; context->being_destroyed = 1; + context->being_destroyed1 = 1; memset(&wsi, 0, sizeof(wsi)); wsi.context = context; @@ -864,6 +922,7 @@ lws_context_destroy(struct lws_context *context) } lws_pt_mutex_destroy(pt); } + /* * give all extensions a chance to clean up any per-context * allocations they might have made @@ -913,12 +972,30 @@ lws_context_destroy(struct lws_context *context) lws_free(pt->http_header_data); } lws_plat_context_early_destroy(context); - lws_ssl_context_destroy(context); if (context->pt[0].fds) lws_free_set_NULL(context->pt[0].fds); - /* free all the vhost allocations */ + if (!LWS_LIBUV_ENABLED(context)) + lws_context_destroy2(context); +} + +/* + * call the second one after the event loop has been shut down cleanly + */ + +LWS_VISIBLE void +lws_context_destroy2(struct lws_context *context) +{ + const struct lws_protocols *protocol = NULL; + struct lws_vhost *vh = NULL, *vh1; + int n; + + lwsl_notice("%s: ctx %p\n", __func__, context); + + /* + * free all the per-vhost allocations + */ vh = context->vhost_list; while (vh) { @@ -928,6 +1005,7 @@ lws_context_destroy(struct lws_context *context) while (n < vh->count_protocols) { if (vh->protocol_vh_privs && vh->protocol_vh_privs[n]) { + // lwsl_notice(" %s: freeing per-vhost protocol data %p\n", __func__, vh->protocol_vh_privs[n]); lws_free(vh->protocol_vh_privs[n]); vh->protocol_vh_privs[n] = NULL; } @@ -957,10 +1035,12 @@ lws_context_destroy(struct lws_context *context) vh = vh1; } + lws_ssl_context_destroy(context); lws_plat_context_late_destroy(context); if (context->external_baggage_free_on_destroy) free(context->external_baggage_free_on_destroy); + lws_free(context); } diff --git a/lib/daemonize.c b/lib/daemonize.c index 73b2d58..8ec58a3 100644 --- a/lib/daemonize.c +++ b/lib/daemonize.c @@ -45,28 +45,31 @@ child_handler(int signum) break; case SIGUSR1: /* positive confirmation we daemonized well */ - /* Create the lock file as the current user */ - - fd = open(lock_path, O_TRUNC | O_RDWR | O_CREAT, 0640); - if (fd < 0) { - fprintf(stderr, - "unable to create lock file %s, code=%d (%s)\n", - lock_path, errno, strerror(errno)); - exit(5); + + if (lock_path) { + /* Create the lock file as the current user */ + + fd = open(lock_path, O_TRUNC | O_RDWR | O_CREAT, 0640); + if (fd < 0) { + fprintf(stderr, + "unable to create lock file %s, code=%d (%s)\n", + lock_path, errno, strerror(errno)); + exit(0); + } + len = sprintf(sz, "%u", pid_daemon); + sent = write(fd, sz, len); + if (sent != len) + fprintf(stderr, + "unable to write pid to lock file %s, code=%d (%s)\n", + lock_path, errno, strerror(errno)); + + close(fd); } - len = sprintf(sz, "%u", pid_daemon); - sent = write(fd, sz, len); - if (sent != len) - fprintf(stderr, - "unable to write pid to lock file %s, code=%d (%s)\n", - lock_path, errno, strerror(errno)); - - close(fd); exit(0); //!!(sent == len)); case SIGCHLD: /* daemonization failed */ - exit(6); + exit(0); break; } } @@ -102,32 +105,34 @@ lws_daemonize(const char *_lock_path) // if (getppid() == 1) // return 1; - fd = open(_lock_path, O_RDONLY); - if (fd >= 0) { - n = read(fd, buf, sizeof(buf)); - close(fd); - if (n) { - n = atoi(buf); - ret = kill(n, 0); - if (ret >= 0) { + if (_lock_path) { + fd = open(_lock_path, O_RDONLY); + if (fd >= 0) { + n = read(fd, buf, sizeof(buf)); + close(fd); + if (n) { + n = atoi(buf); + ret = kill(n, 0); + if (ret >= 0) { + fprintf(stderr, + "Daemon already running from pid %d\n", n); + exit(1); + } fprintf(stderr, - "Daemon already running from pid %d\n", n); - exit(1); + "Removing stale lock file %s from dead pid %d\n", + _lock_path, n); + unlink(lock_path); } - fprintf(stderr, - "Removing stale lock file %s from dead pid %d\n", - _lock_path, n); - unlink(lock_path); } - } - n = strlen(_lock_path) + 1; - lock_path = lws_malloc(n); - if (!lock_path) { - fprintf(stderr, "Out of mem in lws_daemonize\n"); - return 1; + n = strlen(_lock_path) + 1; + lock_path = lws_malloc(n); + if (!lock_path) { + fprintf(stderr, "Out of mem in lws_daemonize\n"); + return 1; + } + strcpy(lock_path, _lock_path); } - strcpy(lock_path, _lock_path); /* Trap signals that we expect to receive */ signal(SIGCHLD, child_handler); /* died */ diff --git a/lib/lejp-conf.c b/lib/lejp-conf.c index 699dfc6..39f6ca4 100644 --- a/lib/lejp-conf.c +++ b/lib/lejp-conf.c @@ -551,8 +551,8 @@ lejp_vhosts_cb(struct lejp_ctx *ctx, char reason) a->p += n; mp_cgienv->value = a->p; mp_cgienv->options = NULL; - lwsl_notice(" adding pmo / cgi-env '%s' = '%s'\n", mp_cgienv->name, - mp_cgienv->value); + //lwsl_notice(" adding pmo / cgi-env '%s' = '%s'\n", mp_cgienv->name, + // mp_cgienv->value); goto dostring; case LEJPVP_PROTOCOL_NAME_OPT: @@ -703,10 +703,13 @@ lwsws_get_config_d(void *user, const char *d, const char * const *paths, uv_dirent_t dent; uv_fs_t req; char path[256]; - int ret = 0; + int ret = 0, ir; uv_loop_t loop; - uv_loop_init(&loop); + ir = uv_loop_init(&loop); + if (ir) { + lwsl_err("%s: loop init failed %d\n", __func__, ir); + } if (!uv_fs_scandir(&loop, &req, d, 0, NULL)) { lwsl_err("Scandir on %s failed\n", d); diff --git a/lib/libuv.c b/lib/libuv.c index 805f71a..5572e0a 100644 --- a/lib/libuv.c +++ b/lib/libuv.c @@ -67,7 +67,7 @@ lws_io_cb(uv_poll_t *watcher, int status, int revents) struct lws_io_watcher *lws_io = lws_container_of(watcher, struct lws_io_watcher, uv_watcher); struct lws *wsi = lws_container_of(lws_io, struct lws, w_read); - struct lws_context *context = lws_io->context; + struct lws_context *context = wsi->context; struct lws_pollfd eventfd; #if defined(WIN32) || defined(_WIN32) @@ -141,7 +141,7 @@ lws_uv_timeout_cb(uv_timer_t *timer lws_service_fd_tsi(pt->context, NULL, pt->tid); } -static const int sigs[] = { SIGINT, SIGTERM, SIGSEGV, SIGFPE }; +static const int sigs[] = { SIGINT, SIGTERM, SIGSEGV, SIGFPE, SIGHUP }; int lws_uv_initvhost(struct lws_vhost* vh, struct lws* wsi) @@ -265,6 +265,7 @@ void lws_libuv_destroyloop(struct lws_context *context, int tsi) { struct lws_context_per_thread *pt = &context->pt[tsi]; +// struct lws_context *ctx; int m, budget = 100, ns; if (!lws_check_opt(context->options, LWS_SERVER_OPTION_LIBUV)) @@ -273,6 +274,8 @@ lws_libuv_destroyloop(struct lws_context *context, int tsi) if (!pt->io_loop_uv) return; + lwsl_notice("%s: closing signals + timers context %p\n", __func__, context); + if (context->use_ev_sigint) { uv_signal_stop(&pt->w_sigint.uv_watcher); @@ -292,11 +295,13 @@ lws_libuv_destroyloop(struct lws_context *context, int tsi) uv_idle_stop(&pt->uv_idle); uv_close((uv_handle_t *)&pt->uv_idle, lws_uv_close_cb); + if (pt->ev_loop_foreign) + return; + while (budget-- && uv_run(pt->io_loop_uv, UV_RUN_NOWAIT)) ; - if (pt->ev_loop_foreign) - return; + lwsl_notice("%s: closing all loop handles context %p\n", __func__, context); uv_stop(pt->io_loop_uv); @@ -404,15 +409,24 @@ lws_libuv_run(const struct lws_context *context, int tsi) uv_run(context->pt[tsi].io_loop_uv, 0); } +LWS_VISIBLE void +lws_libuv_stop_without_kill(const struct lws_context *context, int tsi) +{ + if (context->pt[tsi].io_loop_uv && LWS_LIBUV_ENABLED(context)) + uv_stop(context->pt[tsi].io_loop_uv); +} + static void lws_libuv_kill(const struct lws_context *context) { int n; + lwsl_notice("%s\n", __func__); + for (n = 0; n < context->count_threads; n++) if (context->pt[n].io_loop_uv && - LWS_LIBUV_ENABLED(context) && - !context->pt[n].ev_loop_foreign) + LWS_LIBUV_ENABLED(context) )//&& + //!context->pt[n].ev_loop_foreign) uv_stop(context->pt[n].io_loop_uv); } @@ -472,9 +486,25 @@ lws_libuv_closewsi(uv_handle_t* handle) struct lws *n = NULL, *wsi = (struct lws *)(((char *)handle) - (char *)(&n->w_read.uv_watcher)); struct lws_context *context = lws_get_context(wsi); + int lspd = 0; + + if (wsi->mode == LWSCM_SERVER_LISTENER && + wsi->context->deprecated) { + lspd = 1; + context->deprecation_pending_listen_close_count--; + if (!context->deprecation_pending_listen_close_count) + lspd = 2; + } lws_close_free_wsi_final(wsi); + if (lspd == 2 && context->deprecation_cb) { + lwsl_notice("calling deprecation callback\n"); + context->deprecation_cb(); + } + + //lwsl_notice("%s: ctx %p: wsi left %d\n", __func__, context, context->count_wsi_allocated); + if (context->requested_kill && context->count_wsi_allocated == 0) lws_libuv_kill(context); } @@ -495,7 +525,7 @@ lws_libuv_closehandle(struct lws *wsi) #if defined(LWS_WITH_PLUGINS) && (UV_VERSION_MAJOR > 0) LWS_VISIBLE int -lws_plat_plugins_init(struct lws_context * context, const char * const *d) +lws_plat_plugins_init(struct lws_context *context, const char * const *d) { struct lws_plugin_capability lcaps; struct lws_plugin *plugin; @@ -584,6 +614,7 @@ bail: d++; } + uv_run(&loop, UV_RUN_NOWAIT); uv_loop_close(&loop); return ret; @@ -591,7 +622,7 @@ bail: } LWS_VISIBLE int -lws_plat_plugins_destroy(struct lws_context * context) +lws_plat_plugins_destroy(struct lws_context *context) { struct lws_plugin *plugin = context->plugin_list, *p; lws_plugin_destroy_func func; diff --git a/lib/libwebsockets.c b/lib/libwebsockets.c index 36fb471..c2bc940 100755 --- a/lib/libwebsockets.c +++ b/lib/libwebsockets.c @@ -392,6 +392,21 @@ just_kill_connection: lwsl_err("%s: failed to detach from parent\n", __func__); } +#if 0 + /* manage the vhost same protocol list entry */ + + if (wsi->same_vh_protocol_prev) { // we are on the vh list + + // make guy who pointed to us, point to what our next was pointing to + *wsi->same_vh_protocol_prev = wsi->same_vh_protocol_next; + + // if we had a next guy... + if (wsi->same_vh_protocol_next) + // have him point back to our prev + wsi->same_vh_protocol_next->same_vh_protocol_prev = + wsi->same_vh_protocol_prev; + } +#endif #if LWS_POSIX /* @@ -583,9 +598,13 @@ lws_close_free_wsi_final(struct lws *wsi) #ifdef LWS_WITH_CGI if (wsi->cgi) { - for (n = 0; n < 6; n++) + for (n = 0; n < 6; n++) { + if (wsi->cgi->pipe_fds[n / 2][n & 1] == 0) + lwsl_err("ZERO FD IN CGI CLOSE"); + if (wsi->cgi->pipe_fds[n / 2][n & 1] >= 0) close(wsi->cgi->pipe_fds[n / 2][n & 1]); + } lws_free(wsi->cgi); } @@ -2516,6 +2535,25 @@ lws_access_log(struct lws *wsi) } #endif +void +lws_sum_stats(const struct lws_context *ctx, struct lws_conn_stats *cs) +{ + const struct lws_vhost *vh = ctx->vhost_list; + + while (vh) { + + cs->rx += vh->conn_stats.rx; + cs->tx += vh->conn_stats.tx; + cs->conn += vh->conn_stats.conn; + cs->trans += vh->conn_stats.trans; + cs->ws_upg += vh->conn_stats.ws_upg; + cs->http2_upg += vh->conn_stats.http2_upg; + cs->rejected += vh->conn_stats.rejected; + + vh = vh->vhost_next; + } +} + #ifdef LWS_WITH_SERVER_STATUS LWS_EXTERN int @@ -2546,6 +2584,7 @@ lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len) " \"conn\":\"%lu\",\n" " \"trans\":\"%lu\",\n" " \"ws_upg\":\"%lu\",\n" + " \"rejected\":\"%lu\",\n" " \"http2_upg\":\"%lu\"" , vh->name, vh->listen_port, @@ -2555,8 +2594,11 @@ lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len) 0, #endif !!(vh->options & LWS_SERVER_OPTION_STS), - vh->rx, vh->tx, vh->conn, vh->trans, vh->ws_upgrades, - vh->http2_upgrades + vh->conn_stats.rx, vh->conn_stats.tx, + vh->conn_stats.conn, vh->conn_stats.trans, + vh->conn_stats.ws_upg, + vh->conn_stats.rejected, + vh->conn_stats.http2_upg ); if (vh->mount_list) { @@ -2618,31 +2660,30 @@ lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len) LWS_EXTERN LWS_VISIBLE int -lws_json_dump_context(const struct lws_context *context, char *buf, int len) +lws_json_dump_context(const struct lws_context *context, char *buf, int len, + int hide_vhosts) { char *orig = buf, *end = buf + len - 1, first = 1; const struct lws_vhost *vh = context->vhost_list; - + const struct lws_context_per_thread *pt; + time_t t = time(NULL); + int n, cc = 0, listening = 0, cgi_count = 0; + struct lws_conn_stats cs; + double d = 0; #ifdef LWS_WITH_CGI struct lws_cgi * const *pcgi; #endif - const struct lws_context_per_thread *pt; - time_t t = time(NULL); - int listening = 0, cgi_count = 0, n; + +#ifdef LWS_USE_LIBUV + uv_uptime(&d); +#endif buf += lws_snprintf(buf, end - buf, "{ " - "\"version\":\"%s\",\n" - "\"uptime\":\"%ld\",\n" - "\"cgi_spawned\":\"%d\",\n" - "\"pt_fd_max\":\"%d\",\n" - "\"ah_pool_max\":\"%d\",\n" - "\"wsi_alive\":\"%d\",\n", - lws_get_library_version(), - (unsigned long)(t - context->time_up), - context->count_cgi_spawned, - context->fd_limit_per_thread, - context->max_http_header_pool, - context->count_wsi_allocated); + "\"version\":\"%s\",\n" + "\"uptime\":\"%ld\",\n", + lws_get_library_version(), + (long)d); + #ifdef LWS_HAVE_GETLOADAVG { double d[3]; @@ -2657,6 +2698,25 @@ lws_json_dump_context(const struct lws_context *context, char *buf, int len) } #endif + buf += lws_snprintf(buf, end - buf, "\"contexts\":[\n"); + + if (cc++) + buf += lws_snprintf(buf, end - buf, ","); + + buf += lws_snprintf(buf, end - buf, "{ " + "\"context_uptime\":\"%ld\",\n" + "\"cgi_spawned\":\"%d\",\n" + "\"pt_fd_max\":\"%d\",\n" + "\"ah_pool_max\":\"%d\",\n" + "\"deprecated\":\"%d\",\n" + "\"wsi_alive\":\"%d\",\n", + (unsigned long)(t - context->time_up), + context->count_cgi_spawned, + context->fd_limit_per_thread, + context->max_http_header_pool, + context->deprecated, + context->count_wsi_allocated); + buf += lws_snprintf(buf, end - buf, "\"pt\":[\n "); for (n = 0; n < context->count_threads; n++) { pt = &context->pt[n]; @@ -2673,21 +2733,41 @@ lws_json_dump_context(const struct lws_context *context, char *buf, int len) pt->ah_wait_list_length); } - buf += lws_snprintf(buf, end - buf, "], \"vhosts\":[\n "); + buf += lws_snprintf(buf, end - buf, "]"); + buf += lws_snprintf(buf, end - buf, ", \"vhosts\":[\n "); + + first = 1; + vh = context->vhost_list; + listening = 0; + cs = context->conn_stats; + lws_sum_stats(context, &cs); while (vh) { - if (!first) - if(buf != end) - *buf++ = ','; - buf += lws_json_dump_vhost(vh, buf, end - buf); - first = 0; + + if (!hide_vhosts) { + if (!first) + if(buf != end) + *buf++ = ','; + buf += lws_json_dump_vhost(vh, buf, end - buf); + first = 0; + } if (vh->lserv_wsi) listening++; vh = vh->vhost_next; } - buf += lws_snprintf(buf, end - buf, "],\n\"listen_wsi\":\"%d\"", - listening); + buf += lws_snprintf(buf, end - buf, + "],\n\"listen_wsi\":\"%d\",\n" + " \"rx\":\"%llu\",\n" + " \"tx\":\"%llu\",\n" + " \"conn\":\"%lu\",\n" + " \"trans\":\"%lu\",\n" + " \"ws_upg\":\"%lu\",\n" + " \"rejected\":\"%lu\",\n" + " \"http2_upg\":\"%lu\"", + listening, + cs.rx, cs.tx, cs.conn, cs.trans, + cs.ws_upg, cs.rejected, cs.http2_upg); #ifdef LWS_WITH_CGI for (n = 0; n < context->count_threads; n++) { @@ -2704,7 +2784,10 @@ lws_json_dump_context(const struct lws_context *context, char *buf, int len) buf += lws_snprintf(buf, end - buf, ",\n \"cgi_alive\":\"%d\"\n ", cgi_count); - buf += lws_snprintf(buf, end - buf, "}\n "); + buf += lws_snprintf(buf, end - buf, "}"); + + + buf += lws_snprintf(buf, end - buf, "]}\n "); return buf - orig; } diff --git a/lib/libwebsockets.h b/lib/libwebsockets.h index 361bc99..98debfd 100644 --- a/lib/libwebsockets.h +++ b/lib/libwebsockets.h @@ -1782,6 +1782,41 @@ lws_create_context(struct lws_context_creation_info *info); LWS_VISIBLE LWS_EXTERN void lws_context_destroy(struct lws_context *context); +LWS_VISIBLE LWS_EXTERN void +lws_context_destroy2(struct lws_context *context); + +typedef int (*lws_reload_func)(void); + +/** + * lws_context_deprecate() - Deprecate the websocket context + * \param context: Websocket context + * + * This function is used on an existing context before superceding it + * with a new context. + * + * It closes any listen sockets in the context, so new connections are + * not possible. + * + * And it marks the context to be deleted when the number of active + * connections into it falls to zero. + * + * Otherwise if you attach the deprecated context to the replacement + * context when it has been created using lws_context_attach_deprecated() + * both any deprecated and the new context will service their connections. + * + * This is aimed at allowing seamless configuration reloads. + * + * The callback cb will be called after the listen sockets are actually + * closed and may be reopened. In the callback the new context should be + * configured and created. (With libuv, socket close happens async after + * more loop events). + */ +LWS_VISIBLE LWS_EXTERN void +lws_context_deprecate(struct lws_context *context, lws_reload_func cb); + +LWS_VISIBLE LWS_EXTERN int +lws_context_is_deprecated(struct lws_context *context); + /** * lws_set_proxy() - Setups proxy to lws_context. * \param vhost: pointer to struct lws_vhost you want set proxy for @@ -1886,7 +1921,8 @@ lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len); * \param len: max length of buf */ LWS_VISIBLE LWS_EXTERN int -lws_json_dump_context(const struct lws_context *context, char *buf, int len); +lws_json_dump_context(const struct lws_context *context, char *buf, int len, + int hide_vhosts); /** * lws_context_user() - get the user data associated with the context @@ -3102,6 +3138,9 @@ lws_libuv_run(const struct lws_context *context, int tsi); LWS_VISIBLE LWS_EXTERN void lws_libuv_stop(struct lws_context *context); +LWS_VISIBLE LWS_EXTERN void +lws_libuv_stop_without_kill(const struct lws_context *context, int tsi); + LWS_VISIBLE LWS_EXTERN int lws_uv_initloop(struct lws_context *context, uv_loop_t *loop, int tsi); diff --git a/lib/lws-plat-unix.c b/lib/lws-plat-unix.c index b98c9b0..b48e10c 100644 --- a/lib/lws-plat-unix.c +++ b/lib/lws-plat-unix.c @@ -479,11 +479,16 @@ lws_plat_context_late_destroy(struct lws_context *context) lws_free(context->lws_lookup); while (m--) { - close(pt->dummy_pipe_fds[0]); - close(pt->dummy_pipe_fds[1]); + if (pt->dummy_pipe_fds[0]) + close(pt->dummy_pipe_fds[0]); + if (pt->dummy_pipe_fds[1]) + close(pt->dummy_pipe_fds[1]); pt++; } - close(context->fd_random); + if (!context->fd_random) + lwsl_err("ZERO RANDOM FD\n"); + if (context->fd_random != LWS_INVALID_FILE) + close(context->fd_random); } /* cast a struct sockaddr_in6 * into addr for ipv6 */ diff --git a/lib/lws-plat-win.c b/lib/lws-plat-win.c index 23d3480..7d3ebdd 100644 --- a/lib/lws-plat-win.c +++ b/lib/lws-plat-win.c @@ -635,3 +635,17 @@ lws_plat_init(struct lws_context *context, return 0; } + + +int kill(int pid, int sig) +{ + lwsl_err("Sorry Windows doesn't support kill()."); + exit(0); +} + +int fork(void) +{ + lwsl_err("Sorry Windows doesn't support fork()."); + exit(0); +} + diff --git a/lib/pollfd.c b/lib/pollfd.c index a56908b..2284269 100644 --- a/lib/pollfd.c +++ b/lib/pollfd.c @@ -107,15 +107,35 @@ bail: return ret; } +#ifndef LWS_NO_SERVER +static void +lws_accept_modulation(struct lws_context_per_thread *pt, int allow) +{ +// multithread listen seems broken +#if 0 + struct lws_vhost *vh = context->vhost_list; + struct lws_pollargs pa1; + + while (vh) { + if (allow) + _lws_change_pollfd(pt->wsi_listening, + 0, LWS_POLLIN, &pa1); + else + _lws_change_pollfd(pt->wsi_listening, + LWS_POLLIN, 0, &pa1); + vh = vh->vhost_next; + } +#endif +} +#endif + int insert_wsi_socket_into_fds(struct lws_context *context, struct lws *wsi) { struct lws_pollargs pa = { wsi->sock, LWS_POLLIN, 0 }; struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; int ret = 0; -#ifndef LWS_NO_SERVER - struct lws_pollargs pa1; -#endif + lwsl_debug("%s: %p: tsi=%d, sock=%d, pos-in-fds=%d\n", __func__, wsi, wsi->tsi, wsi->sock, pt->fds_count); @@ -169,7 +189,7 @@ insert_wsi_socket_into_fds(struct lws_context *context, struct lws *wsi) #ifndef LWS_NO_SERVER /* if no more room, defeat accepts on this thread */ if ((unsigned int)pt->fds_count == context->fd_limit_per_thread - 1) - _lws_change_pollfd(pt->wsi_listening, LWS_POLLIN, 0, &pa1); + lws_accept_modulation(pt, 0); #endif lws_pt_unlock(pt); @@ -186,9 +206,6 @@ remove_wsi_socket_from_fds(struct lws *wsi) struct lws_context *context = wsi->context; struct lws_pollargs pa = { wsi->sock, 0, 0 }; #if !defined(LWS_WITH_ESP8266) -#ifndef LWS_NO_SERVER - struct lws_pollargs pa1; -#endif struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; struct lws *end_wsi; int v; @@ -230,6 +247,9 @@ remove_wsi_socket_from_fds(struct lws *wsi) } //else //lwsl_err("null wsi->next\n"); + wsi->same_vh_protocol_prev = NULL; + wsi->same_vh_protocol_next = NULL; + /* the guy who is to be deleted's slot index in pt->fds */ m = wsi->position_in_fds_table; @@ -272,7 +292,7 @@ remove_wsi_socket_from_fds(struct lws *wsi) if (!context->being_destroyed) /* if this made some room, accept connects on this thread */ if ((unsigned int)pt->fds_count < context->fd_limit_per_thread - 1) - _lws_change_pollfd(pt->wsi_listening, 0, LWS_POLLIN, &pa1); + lws_accept_modulation(pt, 1); #endif lws_pt_unlock(pt); diff --git a/lib/private-libwebsockets.h b/lib/private-libwebsockets.h index a1abe45..5499ed8 100644 --- a/lib/private-libwebsockets.h +++ b/lib/private-libwebsockets.h @@ -144,6 +144,13 @@ char *ets_strchr(const char *s, int c); #define lws_snprintf _snprintf #endif +/* we don't have an implementation for this on windows... */ +int kill(int pid, int sig); +int fork(void); +#ifndef SIGINT +#define SIGINT 2 +#endif + #else /* not windows --> */ #include @@ -696,9 +703,6 @@ struct lws_context_per_thread { #ifdef LWS_OPENSSL_SUPPORT struct lws *pending_read_list; /* linked list */ #endif -#ifndef LWS_NO_SERVER - struct lws *wsi_listening; -#endif #if defined(LWS_USE_LIBEV) struct ev_loop *io_loop_ev; #endif @@ -735,6 +739,14 @@ struct lws_context_per_thread { unsigned char lock_depth; }; +struct lws_conn_stats { + unsigned long long rx, tx; + unsigned long conn, trans, ws_upg, http2_upg, rejected; +}; + +void +lws_sum_stats(const struct lws_context *ctx, struct lws_conn_stats *cs); + /* * virtual host -related context information * vhostwide SSL context @@ -762,6 +774,7 @@ struct lws_vhost { /* listen sockets need a place to hang their hat */ esp_tcp tcp; #endif + struct lws_conn_stats conn_stats; struct lws_context *context; struct lws_vhost *vhost_next; const struct lws_http_mount *mount_list; @@ -780,8 +793,6 @@ struct lws_vhost { #ifndef LWS_NO_EXTENSIONS const struct lws_extension *extensions; #endif - unsigned long long rx, tx; - unsigned long conn, trans, ws_upgrades, http2_upgrades; int listen_port; unsigned int http_proxy_port; @@ -819,6 +830,7 @@ struct lws_context { time_t time_up; struct lws_plat_file_ops fops; struct lws_context_per_thread pt[LWS_MAX_SMP]; + struct lws_conn_stats conn_stats; #ifdef _WIN32 /* different implementation between unix and windows */ struct lws_fd_hashtable fd_hashtable[FD_HASHTABLE_MODULUS]; @@ -834,11 +846,13 @@ struct lws_context { #endif struct lws_vhost *vhost_list; struct lws_plugin *plugin_list; + void *external_baggage_free_on_destroy; const struct lws_token_limits *token_limits; void *user_space; const char *server_string; const struct lws_protocol_vhost_options *reject_service_keywords; + lws_reload_func deprecation_cb; #if defined(LWS_USE_LIBEV) lws_ev_signal_cb_t * lws_ev_sigint_cb; @@ -879,6 +893,12 @@ struct lws_context { unsigned int pt_serv_buf_size; int max_http_header_data; + unsigned int deprecated:1; + unsigned int being_destroyed:1; + unsigned int being_destroyed1:1; + unsigned int requested_kill:1; + unsigned int protocol_init_done:1; + /* * set to the Thread ID that's doing the service loop just before entry * to poll indicates service thread likely idling in poll() @@ -894,10 +914,7 @@ struct lws_context { short plugin_extension_count; short server_string_len; unsigned short ws_ping_pong_interval; - - unsigned int being_destroyed:1; - unsigned int requested_kill:1; - unsigned int protocol_init_done:1; + unsigned short deprecation_pending_listen_close_count; }; #define lws_get_context_protocol(ctx, x) ctx->vhost_list->protocols[x] @@ -1445,6 +1462,7 @@ struct lws { unsigned int sending_chunked:1; unsigned int already_did_cce:1; unsigned int told_user_closed:1; + unsigned int :1; #if defined(LWS_WITH_ESP8266) unsigned int pending_send_completion:3; unsigned int close_is_pending_send_completion:1; @@ -1907,12 +1925,9 @@ lws_server_socket_service(struct lws_context *context, struct lws *wsi, struct lws_pollfd *pollfd); LWS_EXTERN int lws_handshake_server(struct lws *wsi, unsigned char **buf, size_t len); -LWS_EXTERN int -_lws_server_listen_accept_flow_control(struct lws *twsi, int on); #else #define lws_server_socket_service(_a, _b, _c) (0) #define lws_handshake_server(_a, _b, _c) (0) -#define _lws_server_listen_accept_flow_control(a, b) (0) #endif #ifdef LWS_WITH_ACCESS_LOG diff --git a/lib/server.c b/lib/server.c index 2c8cf7d..45f691b 100644 --- a/lib/server.c +++ b/lib/server.c @@ -152,8 +152,6 @@ lws_context_init_server(struct lws_context_creation_info *info, wsi->vhost = vhost; wsi->listener = 1; - vhost->context->pt[m].wsi_listening = wsi; - #ifdef LWS_USE_LIBUV if (LWS_LIBUV_ENABLED(vhost->context)) lws_uv_initvhost(vhost, wsi); @@ -192,27 +190,6 @@ bail: return 1; } -int -_lws_server_listen_accept_flow_control(struct lws *twsi, int on) -{ - struct lws_context_per_thread *pt = &twsi->context->pt[(int)twsi->tsi]; - struct lws *wsi = pt->wsi_listening; - int n; - - if (!wsi || twsi->context->being_destroyed) - return 0; - - lwsl_debug("%s: Thr %d: LISTEN wsi %p: state %d\n", - __func__, twsi->tsi, (void *)wsi, on); - - if (on) - n = lws_change_pollfd(wsi, 0, LWS_POLLIN); - else - n = lws_change_pollfd(wsi, LWS_POLLIN, 0); - - return n; -} - #if defined(LWS_WITH_ESP8266) #undef strchr #define strchr ets_strchr @@ -1208,6 +1185,8 @@ lws_handshake_server(struct lws *wsi, unsigned char **buf, size_t len) msg++; lws_return_http_status(wsi, atoi(rej->value), msg); + wsi->vhost->conn_stats.rejected++; + goto bail_nuke_ah; } rej = rej->next; @@ -1227,9 +1206,9 @@ lws_handshake_server(struct lws *wsi, unsigned char **buf, size_t len) } else lwsl_info("no host\n"); - wsi->vhost->trans++; + wsi->vhost->conn_stats.trans++; if (!wsi->conn_stat_done) { - wsi->vhost->conn++; + wsi->vhost->conn_stats.conn++; wsi->conn_stat_done = 1; } @@ -1241,14 +1220,14 @@ lws_handshake_server(struct lws *wsi, unsigned char **buf, size_t len) if (lws_hdr_total_length(wsi, WSI_TOKEN_UPGRADE)) { if (!strcasecmp(lws_hdr_simple_ptr(wsi, WSI_TOKEN_UPGRADE), "websocket")) { - wsi->vhost->ws_upgrades++; + wsi->vhost->conn_stats.ws_upg++; lwsl_info("Upgrade to ws\n"); goto upgrade_ws; } #ifdef LWS_USE_HTTP2 if (!strcasecmp(lws_hdr_simple_ptr(wsi, WSI_TOKEN_UPGRADE), "h2c")) { - wsi->vhost->http2_upgrades++; + wsi->vhost->conn_stats.http2_upg++; lwsl_info("Upgrade to h2c\n"); goto upgrade_h2c; } @@ -1591,7 +1570,8 @@ lws_create_new_server_wsi(struct lws_vhost *vhost) } new_wsi->tsi = n; - lwsl_info("Accepted %p to tsi %d\n", new_wsi, new_wsi->tsi); + lwsl_notice("Accepted wsi %p to context %p, tsi %d\n", new_wsi, + vhost->context, new_wsi->tsi); new_wsi->vhost = vhost; new_wsi->context = vhost->context; diff --git a/lib/service.c b/lib/service.c index d2b1e90..dc61c1d 100644 --- a/lib/service.c +++ b/lib/service.c @@ -695,6 +695,14 @@ lws_service_fd_tsi(struct lws_context *context, struct lws_pollfd *pollfd, int t lws_plat_service_periodic(context); + /* retire unused deprecated context */ + + if (context->deprecated && !context->count_wsi_allocated) { + lwsl_notice("%s: ending deprecated context\n", __func__); + kill(getpid(), SIGINT); + return 0; + } + /* global timeout check once per second */ if (pollfd) diff --git a/lib/smtp.c b/lib/smtp.c index 72480b0..5981880 100644 --- a/lib/smtp.c +++ b/lib/smtp.c @@ -211,6 +211,7 @@ lws_email_init(struct lws_email *email, uv_loop_t *loop, int max_content) email->content = lws_malloc(max_content); if (!email->content) return 1; + email->max_content_size = max_content; uv_timer_init(loop, &email->timeout_email); @@ -235,5 +236,6 @@ lws_email_destroy(struct lws_email *email) lws_free_set_NULL(email->content); uv_timer_stop(&email->timeout_email); + uv_close((uv_handle_t *)&email->timeout_email, NULL); } diff --git a/lib/ssl.c b/lib/ssl.c index 9cf07e4..36f25ac 100644 --- a/lib/ssl.c +++ b/lib/ssl.c @@ -35,6 +35,9 @@ static int urandom_bytes(void *ctx, unsigned char *dest, size_t len) int cur; int fd = open("/dev/urandom", O_RDONLY); + if (fd < 0) + return -1; + while (len) { cur = read(fd, dest, len); if (cur < 0) @@ -290,7 +293,7 @@ lws_ssl_capable_read(struct lws *wsi, unsigned char *buf, int len) } if (wsi->vhost) - wsi->vhost->rx += n; + wsi->vhost->conn_stats.rx += n; lws_restart_ws_ping_pong_timer(wsi); diff --git a/lwsws/main.c b/lwsws/main.c index f948878..d93742d 100644 --- a/lwsws/main.c +++ b/lwsws/main.c @@ -32,14 +32,28 @@ #include #include #include +#include #else #include #include "gettimeofday.h" + +int fork(void) +{ + fprintf(stderr, "Sorry Windows doesn't support fork()."); + exit(0); +} #endif #include "../lib/libwebsockets.h" +#include + static struct lws_context *context; +static char config_dir[128]; +static int opts = 0, do_reload = 1; +static uv_loop_t loop; +static uv_signal_t signal_outer; +static int pids[32]; #define LWSWS_CONFIG_STRING_SIZE (32 * 1024) @@ -61,59 +75,141 @@ static struct option options[] = { { "help", no_argument, NULL, 'h' }, { "debug", required_argument, NULL, 'd' }, { "configdir", required_argument, NULL, 'c' }, -#ifndef LWS_NO_DAEMONIZE - { "daemonize", no_argument, NULL, 'D' }, -#endif { NULL, 0, 0, 0 } }; void signal_cb(uv_signal_t *watcher, int signum) { - lwsl_err("Signal %d caught, exiting...\n", watcher->signum); switch (watcher->signum) { case SIGTERM: case SIGINT: break; + + case SIGHUP: + if (lws_context_is_deprecated(context)) + return; + lwsl_notice("Dropping listen sockets\n"); + lws_context_deprecate(context, NULL); + return; + default: signal(SIGABRT, SIG_DFL); abort(); break; } + lwsl_err("Signal %d caught\n", watcher->signum); lws_libuv_stop(context); } -int main(int argc, char **argv) +static int +context_creation(void) { + int cs_len = LWSWS_CONFIG_STRING_SIZE - 1; struct lws_context_creation_info info; - char *cs; - int opts = 0, cs_len = LWSWS_CONFIG_STRING_SIZE - 1; - int n = 0; + char *cs, *config_strings; + + cs = config_strings = malloc(LWSWS_CONFIG_STRING_SIZE); + if (!config_strings) { + lwsl_err("Unable to allocate config strings heap\n"); + return -1; + } + + memset(&info, 0, sizeof(info)); + + info.external_baggage_free_on_destroy = config_strings; + info.max_http_header_pool = 16; + info.options = opts | LWS_SERVER_OPTION_VALIDATE_UTF8 | + LWS_SERVER_OPTION_EXPLICIT_VHOSTS | + LWS_SERVER_OPTION_LIBUV; + + info.plugin_dirs = plugin_dirs; + lwsl_notice("Using config dir: \"%s\"\n", config_dir); + + /* + * first go through the config for creating the outer context + */ + if (lwsws_get_config_globals(&info, config_dir, &cs, &cs_len)) + goto init_failed; + + context = lws_create_context(&info); + if (context == NULL) { + lwsl_err("libwebsocket init failed\n"); + goto init_failed; + } + + lws_uv_sigint_cfg(context, 1, signal_cb); + lws_uv_initloop(context, &loop, 0); + + /* + * then create the vhosts... protocols are entirely coming from + * plugins, so we leave it NULL + */ + + info.extensions = exts; + + if (lwsws_get_config_vhosts(context, &info, config_dir, + &cs, &cs_len)) + return 1; + + return 0; + +init_failed: + free(config_strings); + + return 1; +} + + +/* + * root-level sighup handler + */ + +static void +reload_handler(int signum) +{ #ifndef _WIN32 - int syslog_options = LOG_PID | LOG_PERROR; + int m; + + switch (signum) { + + case SIGHUP: /* reload */ + fprintf(stderr, "root process receives reload\n"); + if (!do_reload) { + fprintf(stderr, "passing HUP to child processes\n"); + for (m = 0; m < ARRAY_SIZE(pids); m++) + if (pids[m]) + kill(pids[m], SIGHUP); + sleep(1); + } + do_reload = 1; + break; + case SIGINT: + case SIGTERM: + case SIGKILL: + fprintf(stderr, "killing service processes\n"); + for (m = 0; m < ARRAY_SIZE(pids); m++) + if (pids[m]) + kill(pids[m], SIGTERM); + exit(0); + } +#else + // kill() implementation needed for WIN32 #endif -#ifndef LWS_NO_DAEMONIZE - int daemonize = 0; +} + +int main(int argc, char **argv) +{ + int n = 0, m, debug_level = 7; +#ifndef _WIN32 + int status, syslog_options = LOG_PID | LOG_PERROR; #endif - int debug_level = 7; - char config_dir[128]; - char *config_strings; - memset(&info, 0, sizeof info); strcpy(config_dir, "/etc/lwsws"); while (n >= 0) { - n = getopt_long(argc, argv, "hd:c:D", options, NULL); + n = getopt_long(argc, argv, "hd:c:", options, NULL); if (n < 0) continue; switch (n) { -#ifndef LWS_NO_DAEMONIZE - case 'D': - daemonize = 1; - #ifndef _WIN32 - syslog_options &= ~LOG_PERROR; - #endif - printf("Daemonizing...\n"); - break; -#endif case 'd': debug_level = atoi(optarg); break; @@ -128,19 +224,51 @@ int main(int argc, char **argv) } } -#if !defined(LWS_NO_DAEMONIZE) && !defined(WIN32) /* - * normally lock path would be /var/lock/lwsts or similar, to - * simplify getting started without having to take care about - * permissions or running as root, set to /tmp/.lwsts-lock + * We leave our original process up permanently, because that + * suits systemd. + * + * Otherwise we get into problems when reload spawns new processes and + * the original one dies randomly. */ - if (daemonize && lws_daemonize("/tmp/.lwsts-lock")) { - fprintf(stderr, "Failed to daemonize\n"); - return 10; - } - if (daemonize) - lwsl_notice("Daemonized\n"); + + signal(SIGHUP, reload_handler); + signal(SIGINT, reload_handler); + + fprintf(stderr, "Root process is %u\n", getpid()); + + while (1) { + if (do_reload) { + do_reload = 0; + n = fork(); + if (n == 0) /* new */ + break; + /* old */ + if (n > 0) + for (m = 0; m < ARRAY_SIZE(pids); m++) + if (!pids[m]) { + // fprintf(stderr, "added child pid %d\n", n); + pids[m] = n; + break; + } + } +#ifndef _WIN32 + sleep(2); + + n = waitpid(-1, &status, WNOHANG); + if (n > 0) + for (m = 0; m < ARRAY_SIZE(pids); m++) + if (pids[m] == n) { + // fprintf(stderr, "reaped child pid %d\n", pids[m]); + pids[m] = 0; + break; + } +#else +// !!! implemenation needed #endif + } + + /* child process */ #ifndef _WIN32 /* we will only try to log things according to our debug_level */ @@ -153,54 +281,33 @@ int main(int argc, char **argv) lwsl_notice("lwsws libwebsockets web server - license CC0 + LGPL2.1\n"); lwsl_notice("(C) Copyright 2010-2016 Andy Green \n"); - cs = config_strings = malloc(LWSWS_CONFIG_STRING_SIZE); - if (!config_strings) { - lwsl_err("Unable to allocate config strings heap\n"); - return -1; - } - - memset(&info, 0, sizeof(info)); - - info.external_baggage_free_on_destroy = config_strings; - info.max_http_header_pool = 16; - info.options = opts | LWS_SERVER_OPTION_VALIDATE_UTF8 | - LWS_SERVER_OPTION_EXPLICIT_VHOSTS | - LWS_SERVER_OPTION_LIBUV; - - info.plugin_dirs = plugin_dirs; - lwsl_notice("Using config dir: \"%s\"\n", config_dir); - - /* - * first go through the config for creating the outer context - */ - if (lwsws_get_config_globals(&info, config_dir, &cs, &cs_len)) - goto init_failed; +#if (UV_VERSION_MAJOR > 0) // Travis... + uv_loop_init(&loop); +#else + fprintf(stderr, "Your libuv is too old!\n"); + return 0; +#endif + uv_signal_init(&loop, &signal_outer); + uv_signal_start(&signal_outer, signal_cb, SIGINT); + uv_signal_start(&signal_outer, signal_cb, SIGHUP); - context = lws_create_context(&info); - if (context == NULL) { - lwsl_err("libwebsocket init failed\n"); - goto init_failed; + if (context_creation()) { + lwsl_err("Context creation failed\n"); + return 1; } - /* - * then create the vhosts... protocols are entirely coming from - * plugins, so we leave it NULL - */ - - info.extensions = exts; + lws_libuv_run(context, 0); - if (!lwsws_get_config_vhosts(context, &info, config_dir, - &cs, &cs_len)) { - - /* run the server */ - - lws_uv_sigint_cfg(context, 1, signal_cb); - lws_uv_initloop(context, NULL, 0); + uv_signal_stop(&signal_outer); + lws_context_destroy(context); - lws_libuv_run(context, 0); - } +#if (UV_VERSION_MAJOR > 0) // Travis... + n = 0; + while (n++ < 1024 && uv_loop_close(&loop)) + uv_run(&loop, UV_RUN_NOWAIT); +#endif - lws_context_destroy(context); + lws_context_destroy2(context); fprintf(stderr, "lwsws exited cleanly\n"); @@ -209,9 +316,4 @@ int main(int argc, char **argv) #endif return 0; - -init_failed: - free(config_strings); - - return 1; } diff --git a/lwsws/usr-lib-systemd-system-lwsws.service b/lwsws/usr-lib-systemd-system-lwsws.service index dfa36de..13041a3 100644 --- a/lwsws/usr-lib-systemd-system-lwsws.service +++ b/lwsws/usr-lib-systemd-system-lwsws.service @@ -4,6 +4,8 @@ After=syslog.target [Service] ExecStart=/usr/local/bin/lwsws +ExecReload=/usr/bin/kill -HUP $MAINPID +ExecStop=/usr/bin/killall lwsws StandardError=null [Install] diff --git a/mainpage.md b/mainpage.md index 52b08d7..9a427b3 100644 --- a/mainpage.md +++ b/mainpage.md @@ -10,4 +10,7 @@ Libwebsockets covers a lot of interesting features for people making embedded se - account management (including registration, email verification, lost pw etc) - strong ssl PFS support (A+ on SSLlabs test) -You can browse by api category here. +You can browse by api category here + +A collection of READMEs for build, coding, lwsws etc are here + diff --git a/plugins/generic-sessions/private-lwsgs.h b/plugins/generic-sessions/private-lwsgs.h index cb408ae..8bdd513 100644 --- a/plugins/generic-sessions/private-lwsgs.h +++ b/plugins/generic-sessions/private-lwsgs.h @@ -63,6 +63,7 @@ struct lwsgs_user { struct per_vhost_data__gs { struct lws_email email; + struct lwsgs_user u; struct lws_context *context; char session_db[256]; char admin_user[32]; @@ -78,7 +79,7 @@ struct per_vhost_data__gs { int timeout_anon_absolute_secs; int timeout_email_secs; time_t last_session_expire; - struct lwsgs_user u; + char email_inited; }; struct per_session_data__gs { diff --git a/plugins/generic-sessions/protocol_generic_sessions.c b/plugins/generic-sessions/protocol_generic_sessions.c index a828c20..3c1bf8d 100644 --- a/plugins/generic-sessions/protocol_generic_sessions.c +++ b/plugins/generic-sessions/protocol_generic_sessions.c @@ -403,14 +403,20 @@ callback_generic_sessions(struct lws *wsi, enum lws_callback_reasons reason, lws_email_init(&vhd->email, lws_uv_getloop(vhd->context, 0), LWSGS_EMAIL_CONTENT_SIZE); + + vhd->email_inited = 1; break; case LWS_CALLBACK_PROTOCOL_DESTROY: + // lwsl_notice("gs: LWS_CALLBACK_PROTOCOL_DESTROY: v=%p, ctx=%p\n", vhd, vhd->context); if (vhd->pdb) { sqlite3_close(vhd->pdb); vhd->pdb = NULL; } - lws_email_destroy(&vhd->email); + if (vhd->email_inited) { + lws_email_destroy(&vhd->email); + vhd->email_inited = 0; + } break; case LWS_CALLBACK_HTTP: diff --git a/plugins/protocol_dumb_increment.c b/plugins/protocol_dumb_increment.c index 042c5dc..2157a86 100644 --- a/plugins/protocol_dumb_increment.c +++ b/plugins/protocol_dumb_increment.c @@ -88,7 +88,9 @@ callback_dumb_increment(struct lws *wsi, enum lws_callback_reasons reason, case LWS_CALLBACK_PROTOCOL_DESTROY: if (!vhd) break; + // lwsl_notice("di: LWS_CALLBACK_PROTOCOL_DESTROY: v=%p, ctx=%p\n", vhd, vhd->context); uv_timer_stop(&vhd->timeout_watcher); + uv_close((uv_handle_t *)&vhd->timeout_watcher, NULL); break; case LWS_CALLBACK_ESTABLISHED: diff --git a/plugins/protocol_lws_server_status.c b/plugins/protocol_lws_server_status.c index baaabaf..04f792d 100644 --- a/plugins/protocol_lws_server_status.c +++ b/plugins/protocol_lws_server_status.c @@ -29,6 +29,11 @@ struct lws_ss_load_sample { int load_x100; }; +struct lws_ss_filepath { + struct lws_ss_filepath *next; + char filepath[128]; +}; + struct lws_ss_dumps { char buf[32768]; int length; @@ -38,16 +43,20 @@ struct lws_ss_dumps { int load_tail; }; -static struct lws_ss_dumps d; -static uv_timer_t timeout_watcher; -static struct lws_context *context; -static int tow_flag; - struct per_session_data__server_status { int ver; int pos; }; +struct per_vhost_data__lws_server_status { + uv_timer_t timeout_watcher; + struct lws_context *context; + int hide_vhosts; + int tow_flag; + struct lws_ss_dumps d; + struct lws_ss_filepath *fp; +}; + static const struct lws_protocols protocols[1]; static void @@ -57,30 +66,58 @@ uv_timeout_cb_server_status(uv_timer_t *w #endif ) { - char *p = d.buf + LWS_PRE; - -#if 0 -#ifdef LWS_HAVE_GETLOADAVG - double l = 0.0; - - getloadavg(&l, 1); - d.load[d.load_head].load_x100 = (int)(l * 100); - d.load[d.load_head].t = lws_now_secs(); - d.load_head++; - if (d.load_head == ARRAY_SIZE(d.load)) - d.load_head = 0; - if (d.load_head == d.load_tail) { - d.load_tail++; - if (d.load_tail == ARRAY_SIZE(d.load)) - d.load_tail = 0; + struct per_vhost_data__lws_server_status *v = lws_container_of(w, + struct per_vhost_data__lws_server_status, + timeout_watcher); + struct lws_ss_filepath *fp; + char *p = v->d.buf + LWS_PRE, contents[256], pure[256]; + int n, l, first = 1, fd; + + l = sizeof(v->d.buf) - LWS_PRE; + + n = lws_snprintf(p, l, "{\"i\":"); + p += n; + l -= n; + + n = lws_json_dump_context(v->context, p, l, v->hide_vhosts); + p += n; + l -= n; + + n = lws_snprintf(p, l, ", \"files\": ["); + p += n; + l -= n; + + fp = v->fp; + while (fp) { + if (!first) { + n = lws_snprintf(p, l, ","); + p += n; + l -= n; + } + fd = open(fp->filepath, LWS_O_RDONLY); + if (fd != LWS_INVALID_FILE) { + n = read(fd, contents, sizeof(contents) - 1); + if (n >= 0) { + contents[n] = '\0'; + lws_json_purify(pure, contents, sizeof(pure)); + + n = lws_snprintf(p, l, "{\"path\":\"%s\",\"val\":\"%s\"}", + fp->filepath, pure); + p += n; + l -= n; + first = 0; + } + close(fd); + } + fp = fp->next; } -#endif -#endif + n = lws_snprintf(p, l, "]}"); + p += n; + l -= n; - d.length = lws_json_dump_context(context, p, - sizeof(d.buf) - LWS_PRE); + v->d.length = p - (v->d.buf + LWS_PRE); - lws_callback_on_writable_all_protocol(context, &protocols[0]); + lws_callback_on_writable_all_protocol(v->context, &protocols[0]); } static int @@ -89,6 +126,11 @@ callback_lws_server_status(struct lws *wsi, enum lws_callback_reasons reason, { const struct lws_protocol_vhost_options *pvo = (const struct lws_protocol_vhost_options *)in; + struct per_vhost_data__lws_server_status *v = + (struct per_vhost_data__lws_server_status *) + lws_protocol_vh_priv_get(lws_get_vhost(wsi), + lws_get_protocol(wsi)); + struct lws_ss_filepath *fp, *fp1, **fp_old; int m, period = 1000; switch (reason) { @@ -99,30 +141,55 @@ callback_lws_server_status(struct lws *wsi, enum lws_callback_reasons reason, break; case LWS_CALLBACK_PROTOCOL_INIT: /* per vhost */ - if (tow_flag) + if (v) break; + + lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), + lws_get_protocol(wsi), + sizeof(struct per_vhost_data__lws_server_status)); + v = (struct per_vhost_data__lws_server_status *) + lws_protocol_vh_priv_get(lws_get_vhost(wsi), + lws_get_protocol(wsi)); + + fp_old = &v->fp; + while (pvo) { + if (!strcmp(pvo->name, "hide-vhosts")) + v->hide_vhosts = atoi(pvo->value); if (!strcmp(pvo->name, "update-ms")) period = atoi(pvo->value); + if (!strcmp(pvo->name, "filepath")) { + fp = malloc(sizeof(*fp)); + fp->next = NULL; + lws_snprintf(&fp->filepath[0], sizeof(fp->filepath), "%s", pvo->value); + *fp_old = fp; + fp_old = &fp->next; + } pvo = pvo->next; } - context = lws_get_context(wsi); - uv_timer_init(lws_uv_getloop(context, 0), &timeout_watcher); - uv_timer_start(&timeout_watcher, + v->context = lws_get_context(wsi); + uv_timer_init(lws_uv_getloop(v->context, 0), &v->timeout_watcher); + uv_timer_start(&v->timeout_watcher, uv_timeout_cb_server_status, 2000, period); - tow_flag = 1; break; case LWS_CALLBACK_PROTOCOL_DESTROY: /* per vhost */ - if (!tow_flag) + // lwsl_notice("ss: LWS_CALLBACK_PROTOCOL_DESTROY: v=%p, ctx=%p\n", v, v->context); + if (!v) break; - uv_timer_stop(&timeout_watcher); - tow_flag = 0; + uv_timer_stop(&v->timeout_watcher); + uv_close((uv_handle_t *)&v->timeout_watcher, NULL); + fp = v->fp; + while (fp) { + fp1= fp->next; + free(fp); + fp = fp1; + } break; case LWS_CALLBACK_SERVER_WRITEABLE: - m = lws_write(wsi, (unsigned char *)d.buf + LWS_PRE, d.length, - LWS_WRITE_TEXT); + m = lws_write(wsi, (unsigned char *)v->d.buf + LWS_PRE, + v->d.length, LWS_WRITE_TEXT); if (m < 0) return -1; break; diff --git a/plugins/server-status.html b/plugins/server-status.html index 62d3545..a495132 100644 --- a/plugins/server-status.html +++ b/plugins/server-status.html @@ -48,6 +48,13 @@ -webkit-border-radius:3px; -moz-border-radius:3px; border-radius:3px; } + td.dl { vertical-align:middle; + text-align:center; + background:#c0c0c0; + padding:3px; + -webkit-border-radius:3px; + -moz-border-radius:3px; + border-radius:3px; } td.c { vertical-align:middle; text-align:center; background:#c0c0a0; @@ -55,6 +62,27 @@ -webkit-border-radius:3px; -moz-border-radius:3px; border-radius:3px; } + td.c0 { vertical-align:middle; + text-align:center; + background:#b0b090; + padding:3px; + -webkit-border-radius:3px; + -moz-border-radius:3px; + border-radius:3px; } + td.dc0 { vertical-align:middle; + text-align:center; + background:#a0a0a0; + padding:3px; + -webkit-border-radius:3px; + -moz-border-radius:3px; + border-radius:3px; } + td.c1 { vertical-align:middle; + text-align:center; + background:#c0c0c0; + padding:3px; + -webkit-border-radius:3px; + -moz-border-radius:3px; + border-radius:3px; } td.t { vertical-align:middle; text-align:center; background:#e0e0c0; @@ -113,6 +141,7 @@ Server status
    ...
    +
    @@ -200,89 +229,133 @@ function get_appropriate_ws_url() } socket_status.onmessage =function got_packet(msg) { - var u; - //document.getElementById("conninfo").innerHTML = "
    "+msg.data+"
    "; + var u, ci, n; + //document.getElementById("json").innerHTML = "
    "+msg.data+"
    "; jso = JSON.parse(msg.data); - u = parseInt(san(jso.uptime)); - s = "
    " + - "Context" + + u = parseInt(san(jso.i.uptime)); + + if (parseInt(jso.i.contexts[0].deprecated) == 0) + s = "
    "; + else + s = ""; - var n; - for (n = 0; n < jso.pt.length; n++) { - - s = s + ""; - + + for (n = 0; n < jso.files.length; n++) { + s += "
    " + san(jso.files[n].path) + ":
    " + san(jso.files[n].val); } - for (n = 0; n < jso.vhosts.length; n++) { - s = s + ""; + + for (ci = 0; ci < jso.i.contexts.length; ci++) { + + if (parseInt(jso.i.contexts[ci].deprecated) == 0) + s += ""; + + } // context s = s + "
    "; + s += + "Server" + "Version: " + - san(jso.version) + "
    " + + san(jso.i.version) + "
    " + "Uptime: " + ((u / (24 * 3600)) | 0) + "d " + (((u % (24 * 3600)) / 3600) | 0) + "h " + (((u % 3600) / 60) | 0) + "m"; - if (jso.l1) - s = s + ", Load: " + san(jso.l1) + " "; - if (jso.l2) - s = s + san(jso.l2) + " "; - if (jso.l3) - s = s + san(jso.l3); - if (jso.l1) + if (jso.i.l1) + s = s + ", Load: " + san(jso.i.l1) + " "; + if (jso.i.l2) + s = s + san(jso.i.l2) + " "; + if (jso.i.l3) + s = s + san(jso.i.l3); + if (jso.i.l1) s =s + ""; - s = s + - "
    " + - "Listening wsi: " + san(jso.listen_wsi) + ", " + - "Current wsi alive: " + (parseInt(san(jso.wsi_alive)) - - parseInt(san(jso.listen_wsi))) + "
    " + - "Current cgi alive: " + san(jso.cgi_alive) + ", " + - "Total CGI spawned: " + san(jso.cgi_spawned) + - "
    service thread " + (n + 1) + - "" + - "fds: " + san(jso.pt[n].fds_count) + " / " + - san(jso.pt_fd_max) + ", "; - s = s + "ah pool: " + san(jso.pt[n].ah_pool_inuse) + " / " + - san(jso.ah_pool_max) + ", " + - "ah waiting list: " + san(jso.pt[n].ah_wait_list); - - s = s + "
    vhost " + (n + 1) + - ""; - if (jso.vhosts[n].use_ssl == '1') - s = s + "https://"; + s += "
    " + + "Active Context"; else - s = s + "http://"; - s = s + san(jso.vhosts[n].name) + ":" + - san(jso.vhosts[n].port) + ""; - if (jso.vhosts[n].sts == '1') - s = s + " (STS)"; - s = s +"
    " + - "rx: " + humanize(san(jso.vhosts[n].rx)) + "B, " + - "tx " + humanize(san(jso.vhosts[n].tx)) + "B
    " + - "total connections " + san(jso.vhosts[n].conn) + ", " + - "total http transactions " + san(jso.vhosts[n].trans) + "
    " + - "Upgrades to ws: " + san(jso.vhosts[n].ws_upg) + ", " + - "to http/2: " + san(jso.vhosts[n].http2_upg) + "
    " + - ""; + s += ""; - } + for (n = 0; n < jso.i.contexts[ci].vhosts.length; n++) { + if (parseInt(jso.i.contexts[ci].deprecated) == 0) + s += ""; + } + + s += "
    MountpointOriginCache Policy
    " + + "Deprecated Context " + ci + ""; + + u = parseInt(san(jso.i.contexts[ci].context_uptime)); + s += "Uptime: " + + ((u / (24 * 3600)) | 0) + "d " + + (((u % (24 * 3600)) / 3600) | 0) + "h " + + (((u % 3600) / 60) | 0) + "m"; + + s = s + + "
    " + + "Listening wsi: " + san(jso.i.contexts[ci].listen_wsi) + ", " + + "Current wsi alive: " + (parseInt(san(jso.i.contexts[ci].wsi_alive)) - + parseInt(san(jso.i.contexts[ci].listen_wsi))) + "
    " + + "Total Rx: " + humanize(san(jso.i.contexts[ci].rx)) +", " + + "Total Tx: " + humanize(san(jso.i.contexts[ci].tx)) +"
    " + + "Total connections: " + san(jso.i.contexts[ci].conn) +", " + + "Total HTTP Transactions: " + san(jso.i.contexts[ci].trans) +"
    " + + "Total ws upgrades: " + san(jso.i.contexts[ci].ws_upg) +", " + + "Total h2 upgrades: " + san(jso.i.contexts[ci].http2_upg) +", " + + "Total Rejected: " + san(jso.i.contexts[ci].rejected) +"
    " + + "Current cgi alive: " + san(jso.i.contexts[ci].cgi_alive) + ", " + + "Total CGI spawned: " + san(jso.i.contexts[ci].cgi_spawned) + + ""; - var m; - for (m = 0; m < jso.vhosts[n].mounts.length; m++) { - s = s + "" + for (n = 0; n < jso.i.contexts[ci].pt.length; n++) { + + if (parseInt(jso.i.contexts[ci].deprecated) == 0) + s += ""; + } - s = s + "
    "; - s = s + "" + san(jso.vhosts[n].mounts[m].mountpoint) + - "" + - san(jso.vhosts[n].mounts[m].origin) + - ""; - if (parseInt(san(jso.vhosts[n].mounts[m].cache_max_age))) - s = s + "max-age: " + - san(jso.vhosts[n].mounts[m].cache_max_age) + - ", reuse: " + - san(jso.vhosts[n].mounts[m].cache_reuse) + - ", reval: " + - san(jso.vhosts[n].mounts[m].cache_revalidate) + - ", inter: " + - san(jso.vhosts[n].mounts[m].cache_intermediaries); - s = s + "
      service thread " + (n + 1); + else + s += "
      service thread " + (n + 1); + s += "" + + "fds: " + san(jso.i.contexts[ci].pt[n].fds_count) + " / " + + san(jso.i.contexts[ci].pt_fd_max) + ", "; + s = s + "ah pool: " + san(jso.i.contexts[ci].pt[n].ah_pool_inuse) + " / " + + san(jso.i.contexts[ci].ah_pool_max) + ", " + + "ah waiting list: " + san(jso.i.contexts[ci].pt[n].ah_wait_list); + + s = s + "
    "; - s = s + "
      vhost " + (n + 1); + else + s += "
      vhost " + (n + 1); + s += ""; + if (jso.i.contexts[ci].vhosts[n].use_ssl == '1') + s = s + "https://"; + else + s = s + "http://"; + s = s + san(jso.i.contexts[ci].vhosts[n].name) + ":" + + san(jso.i.contexts[ci].vhosts[n].port) + ""; + if (jso.i.contexts[ci].vhosts[n].sts == '1') + s = s + " (STS)"; + s = s +"
    " + + "rx: " + humanize(san(jso.i.contexts[ci].vhosts[n].rx)) + "B, " + + "tx " + humanize(san(jso.i.contexts[ci].vhosts[n].tx)) + "B
    " + + "vh connections " + san(jso.i.contexts[ci].vhosts[n].conn) + ", " + + "vh http transactions " + san(jso.i.contexts[ci].vhosts[n].trans) + "
    " + + "vh upgrades to ws: " + san(jso.i.contexts[ci].vhosts[n].ws_upg) + ", " + + "to http/2: " + san(jso.i.contexts[ci].vhosts[n].http2_upg) + ", " + + "rejected: " + san(jso.i.contexts[ci].vhosts[n].rejected) + "
    " + + ""; + + var m; + for (m = 0; m < jso.i.contexts[ci].vhosts[n].mounts.length; m++) { + s = s + "" + } + s = s + "
    MountpointOriginCache Policy
    "; + s = s + "" + san(jso.i.contexts[ci].vhosts[n].mounts[m].mountpoint) + + "" + + san(jso.i.contexts[ci].vhosts[n].mounts[m].origin) + + ""; + if (parseInt(san(jso.i.contexts[ci].vhosts[n].mounts[m].cache_max_age))) + s = s + "max-age: " + + san(jso.i.contexts[ci].vhosts[n].mounts[m].cache_max_age) + + ", reuse: " + + san(jso.i.contexts[ci].vhosts[n].mounts[m].cache_reuse) + + ", reval: " + + san(jso.i.contexts[ci].vhosts[n].mounts[m].cache_revalidate) + + ", inter: " + + san(jso.i.contexts[ci].vhosts[n].mounts[m].cache_intermediaries); + s = s + "
    "; + s = s + "
    "; document.getElementById("conninfo").innerHTML = s;