diff --git a/CMakeLists.txt b/CMakeLists.txt index 7567a19b..1df48fbc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -113,6 +113,7 @@ option(LWS_PLAT_OPTEE "Build for OPTEE" OFF) option(LWS_WITH_NO_LOGS "Disable all logging from being compiled in" OFF) option(LWS_STATIC_PIC "Build the static version of the library with position-independent code" OFF) option(LWS_WITH_RANGES "Support http ranges (RFC7233)" ON) +option(LWS_FALLBACK_GETHOSTBYNAME "Also try to do dns resolution using gethostbyname if getaddrinfo fails" OFF) if (LWS_WITH_LWSWS) message(STATUS "LWS_WITH_LWSWS --> Enabling LWS_WITH_PLUGINS and LWS_WITH_LIBUV") diff --git a/doc/html/globals_func.html b/doc/html/globals_func.html index dd691c97..a8d22194 100644 --- a/doc/html/globals_func.html +++ b/doc/html/globals_func.html @@ -352,7 +352,7 @@ $(document).ready(function(){initNavTree('globals_func.html','');}); : libwebsockets.h
  • lws_snprintf() -: libwebsockets.h +: libwebsockets.h
  • lws_spa_create() : libwebsockets.h diff --git a/doc/html/globals_l.html b/doc/html/globals_l.html index 2f149b84..828aa51d 100644 --- a/doc/html/globals_l.html +++ b/doc/html/globals_l.html @@ -631,7 +631,7 @@ $(document).ready(function(){initNavTree('globals_l.html','');}); : libwebsockets.h
  • lws_snprintf() -: libwebsockets.h +: libwebsockets.h
  • lws_spa_create() : libwebsockets.h diff --git a/doc/html/group__client.html b/doc/html/group__client.html index 49fcd7f2..4dd343b1 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

    -
    2081  {
    2082  LCCSCF_USE_SSL = (1 << 0),
    2083  LCCSCF_ALLOW_SELFSIGNED = (1 << 1),
    2084  LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK = (1 << 2),
    2085  LCCSCF_ALLOW_EXPIRED = (1 << 3)
    2086 };
    +
    2083  {
    2084  LCCSCF_USE_SSL = (1 << 0),
    2085  LCCSCF_ALLOW_SELFSIGNED = (1 << 1),
    2086  LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK = (1 << 2),
    2087  LCCSCF_ALLOW_EXPIRED = (1 << 3)
    2088 };

    Function Documentation

    diff --git a/doc/html/group__context-and-vhost.html b/doc/html/group__context-and-vhost.html index 2b08340d..36a83f39 100644 --- a/doc/html/group__context-and-vhost.html +++ b/doc/html/group__context-and-vhost.html @@ -211,25 +211,25 @@ LWS_VISIBLE LWS_EXTERN int LWS_SERVER_OPTION_JUST_USE_RAW_ORIGIN 

    For backwards-compatibility reasons, by default lws prepends "http://" to the origin you give in the client connection info struct. If you give this flag when you create the context, only the string you give in the client connect info for .origin (if any) will be used directly.

    -
    1528  {
    1530  (1 << 12),
    1537  (1 << 12),
    1541  LWS_SERVER_OPTION_LIBEV = (1 << 4),
    1543  LWS_SERVER_OPTION_DISABLE_IPV6 = (1 << 5),
    1552  LWS_SERVER_OPTION_SSL_ECDH = (1 << 9) |
    1553  (1 << 12),
    1555  LWS_SERVER_OPTION_LIBUV = (1 << 10),
    1558  (1 << 12),
    1566  LWS_SERVER_OPTION_UNIX_SOCK = (1 << 14),
    1568  LWS_SERVER_OPTION_STS = (1 << 15),
    1589  /****** add new things just above ---^ ******/
    1590 };
    -
    Definition: libwebsockets.h:1545
    -
    Definition: libwebsockets.h:1575
    -
    Definition: libwebsockets.h:1557
    -
    Definition: libwebsockets.h:1563
    -
    Definition: libwebsockets.h:1534
    -
    Definition: libwebsockets.h:1552
    -
    Definition: libwebsockets.h:1536
    -
    Definition: libwebsockets.h:1541
    -
    Definition: libwebsockets.h:1561
    -
    Definition: libwebsockets.h:1573
    -
    Definition: libwebsockets.h:1543
    -
    Definition: libwebsockets.h:1555
    -
    Definition: libwebsockets.h:1566
    -
    Definition: libwebsockets.h:1550
    -
    Definition: libwebsockets.h:1548
    -
    Definition: libwebsockets.h:1581
    -
    Definition: libwebsockets.h:1568
    -
    Definition: libwebsockets.h:1571
    +
    1530  {
    1532  (1 << 12),
    1539  (1 << 12),
    1543  LWS_SERVER_OPTION_LIBEV = (1 << 4),
    1545  LWS_SERVER_OPTION_DISABLE_IPV6 = (1 << 5),
    1554  LWS_SERVER_OPTION_SSL_ECDH = (1 << 9) |
    1555  (1 << 12),
    1557  LWS_SERVER_OPTION_LIBUV = (1 << 10),
    1560  (1 << 12),
    1568  LWS_SERVER_OPTION_UNIX_SOCK = (1 << 14),
    1570  LWS_SERVER_OPTION_STS = (1 << 15),
    1591  /****** add new things just above ---^ ******/
    1592 };
    +
    Definition: libwebsockets.h:1547
    +
    Definition: libwebsockets.h:1577
    +
    Definition: libwebsockets.h:1559
    +
    Definition: libwebsockets.h:1565
    +
    Definition: libwebsockets.h:1536
    +
    Definition: libwebsockets.h:1554
    +
    Definition: libwebsockets.h:1538
    +
    Definition: libwebsockets.h:1543
    +
    Definition: libwebsockets.h:1563
    +
    Definition: libwebsockets.h:1575
    +
    Definition: libwebsockets.h:1545
    +
    Definition: libwebsockets.h:1557
    +
    Definition: libwebsockets.h:1568
    +
    Definition: libwebsockets.h:1552
    +
    Definition: libwebsockets.h:1550
    +
    Definition: libwebsockets.h:1583
    +
    Definition: libwebsockets.h:1570
    +
    Definition: libwebsockets.h:1573
    diff --git a/doc/html/group__extensions.html b/doc/html/group__extensions.html index 2f45b193..8bad1ee9 100644 --- a/doc/html/group__extensions.html +++ b/doc/html/group__extensions.html @@ -242,9 +242,9 @@ Functions EXTARG_OPT_DEC 

    may have an optional decimal argument

    -
    1130  {
    1131  EXTARG_NONE,
    1132  EXTARG_DEC,
    1135  /* Add new things just above here ---^
    1136  * This is part of the ABI, don't needlessly break compatibility */
    1137 };
    Definition: libwebsockets.h:1133
    -
    Definition: libwebsockets.h:1131
    -
    Definition: libwebsockets.h:1132
    +
    1132  {
    1133  EXTARG_NONE,
    1134  EXTARG_DEC,
    1137  /* Add new things just above here ---^
    1138  * This is part of the ABI, don't needlessly break compatibility */
    1139 };
    Definition: libwebsockets.h:1135
    +
    Definition: libwebsockets.h:1133
    +
    Definition: libwebsockets.h:1134
    diff --git a/doc/html/group__form-parsing.html b/doc/html/group__form-parsing.html index a9e846d1..73ba6bd1 100644 --- a/doc/html/group__form-parsing.html +++ b/doc/html/group__form-parsing.html @@ -156,9 +156,9 @@ Functions LWS_UFS_OPEN 

    a new file is starting to arrive

    -
    2925  {
    2930  LWS_UFS_OPEN
    2932 };
    Definition: libwebsockets.h:2928
    -
    Definition: libwebsockets.h:2930
    -
    Definition: libwebsockets.h:2926
    +
    2927  {
    2932  LWS_UFS_OPEN
    2934 };
    Definition: libwebsockets.h:2930
    +
    Definition: libwebsockets.h:2932
    +
    Definition: libwebsockets.h:2928
    diff --git a/doc/html/group__generic-sessions.html b/doc/html/group__generic-sessions.html index 8e527417..35a22191 100644 --- a/doc/html/group__generic-sessions.html +++ b/doc/html/group__generic-sessions.html @@ -116,8 +116,8 @@ Enumerations LWSGSE_DELETED 

    an existing user was deleted

    -
    1492  {
    1493  LWSGSE_CREATED,
    1495 };
    Definition: libwebsockets.h:1494
    -
    Definition: libwebsockets.h:1493
    +
    1494  {
    1495  LWSGSE_CREATED,
    1497 };
    Definition: libwebsockets.h:1496
    +
    Definition: libwebsockets.h:1495
    @@ -145,10 +145,10 @@ Enumerations LWSGS_AUTH_FORGOT_FLOW 

    he just completed "forgot password" flow

    -
    1474  {
    1475  LWSGS_AUTH_LOGGED_IN = 1,
    1476  LWSGS_AUTH_ADMIN = 2,
    1477  LWSGS_AUTH_VERIFIED = 4,
    1479 };
    Definition: libwebsockets.h:1477
    -
    Definition: libwebsockets.h:1478
    -
    Definition: libwebsockets.h:1476
    -
    Definition: libwebsockets.h:1475
    +
    1476  {
    1477  LWSGS_AUTH_LOGGED_IN = 1,
    1478  LWSGS_AUTH_ADMIN = 2,
    1479  LWSGS_AUTH_VERIFIED = 4,
    1481 };
    Definition: libwebsockets.h:1479
    +
    Definition: libwebsockets.h:1480
    +
    Definition: libwebsockets.h:1478
    +
    Definition: libwebsockets.h:1477
    diff --git a/doc/html/group__log.html b/doc/html/group__log.html index 4bea9329..695c2a68 100644 --- a/doc/html/group__log.html +++ b/doc/html/group__log.html @@ -91,9 +91,9 @@ Enumerations - - + + diff --git a/doc/html/group__misc.html b/doc/html/group__misc.html index ebc23517..d58442cc 100644 --- a/doc/html/group__misc.html +++ b/doc/html/group__misc.html @@ -69,8 +69,8 @@ $(document).ready(function(){initNavTree('group__misc.html','');});

    Functions

    -LWS_VISIBLE LWS_EXTERN void _lws_log (int filter, const char *format,...)
     
    +LWS_VISIBLE LWS_EXTERN void _lws_log (int filter, const char *format,...) LWS_FORMAT(2)
     
    LWS_VISIBLE LWS_EXTERN void _lws_logv (int filter, const char *format, va_list vl)
     
    - - + + @@ -118,7 +118,7 @@ LWS_VISIBLE LWS_EXTERN int 

    Functions

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

    #include <lib/libwebsockets.h>

    -

    lws_daemonize(): fill a buffer with platform random data

    +

    lws_daemonize(): make current process run in the background

    Parameters
    @@ -414,8 +414,8 @@ LWS_VISIBLE LWS_EXTERN int 
    _lock_paththe filepath to write the lock file
    - -

    § lws_snprintf()

    + +

    § lws_snprintf()

    @@ -453,7 +453,7 @@ LWS_VISIBLE LWS_EXTERN int 

    #include <lib/libwebsockets.h>

    -

    lws_snprintf(): snprintf that truncates the returned length too

    +

    lws_snprintf(): snprintf that truncates the returned length too

    Parameters
    diff --git a/doc/html/group__misc.js b/doc/html/group__misc.js index c9fd40e1..1fac4c2c 100644 --- a/doc/html/group__misc.js +++ b/doc/html/group__misc.js @@ -10,6 +10,6 @@ var group__misc = [ "lws_now_secs", "group__misc.html#ga33bf2635033710b25f931b57ed663e1e", null ], [ "lws_parse_uri", "group__misc.html#ga1ec0d9faac5d3a5824d765c287c043aa", null ], [ "lws_set_allocator", "group__misc.html#gab321ed812f46f6dc7ef9e3ca6f00cf1b", null ], - [ "lws_snprintf", "group__misc.html#ga9f37d0e357de2ab4170723fcdb665d21", null ], + [ "lws_snprintf", "group__misc.html#ga2163492f17db959a36967adb73d823b4", null ], [ "lws_wsi_user", "group__misc.html#gaa194584fff9698f3b280658f770ccd0f", null ] ]; \ No newline at end of file diff --git a/doc/html/group__sending-data.html b/doc/html/group__sending-data.html index 3e917b0c..1d8c1dff 100644 --- a/doc/html/group__sending-data.html +++ b/doc/html/group__sending-data.html @@ -124,13 +124,13 @@ Functions
    strdestination buffer
    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

    -
    3272  {
    3273  LWS_WRITE_TEXT = 0,
    3277  LWS_WRITE_BINARY = 1,
    3283  LWS_WRITE_HTTP = 3,
    3286  /* LWS_WRITE_CLOSE is handled by lws_close_reason() */
    3287  LWS_WRITE_PING = 5,
    3288  LWS_WRITE_PONG = 6,
    3289 
    3290  /* Same as write_http but we know this write ends the transaction */
    3291  LWS_WRITE_HTTP_FINAL = 7,
    3292 
    3293  /* HTTP2 */
    3294 
    3302  /****** add new things just above ---^ ******/
    3303 
    3304  /* flags */
    3305 
    3306  LWS_WRITE_NO_FIN = 0x40,
    3313 };
    Definition: libwebsockets.h:3283
    -
    Definition: libwebsockets.h:3306
    -
    Definition: libwebsockets.h:3273
    -
    Definition: libwebsockets.h:3277
    -
    Definition: libwebsockets.h:3309
    -
    Definition: libwebsockets.h:3280
    -
    Definition: libwebsockets.h:3295
    +
    3274  {
    3275  LWS_WRITE_TEXT = 0,
    3279  LWS_WRITE_BINARY = 1,
    3285  LWS_WRITE_HTTP = 3,
    3288  /* LWS_WRITE_CLOSE is handled by lws_close_reason() */
    3289  LWS_WRITE_PING = 5,
    3290  LWS_WRITE_PONG = 6,
    3291 
    3292  /* Same as write_http but we know this write ends the transaction */
    3293  LWS_WRITE_HTTP_FINAL = 7,
    3294 
    3295  /* HTTP2 */
    3296 
    3304  /****** add new things just above ---^ ******/
    3305 
    3306  /* flags */
    3307 
    3308  LWS_WRITE_NO_FIN = 0x40,
    3315 };
    Definition: libwebsockets.h:3285
    +
    Definition: libwebsockets.h:3308
    +
    Definition: libwebsockets.h:3275
    +
    Definition: libwebsockets.h:3279
    +
    Definition: libwebsockets.h:3311
    +
    Definition: libwebsockets.h:3282
    +
    Definition: libwebsockets.h:3297
    diff --git a/doc/html/group__smtp.html b/doc/html/group__smtp.html index 57852b71..509d6e52 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

    -
    4280  {
    4281  LGSSMTP_IDLE,
    4286  LGSSMTP_SENT_TO,
    4290 };
    Definition: libwebsockets.h:4283
    -
    Definition: libwebsockets.h:4288
    -
    Definition: libwebsockets.h:4281
    -
    Definition: libwebsockets.h:4282
    -
    Definition: libwebsockets.h:4286
    -
    Definition: libwebsockets.h:4285
    -
    Definition: libwebsockets.h:4289
    -
    Definition: libwebsockets.h:4284
    -
    Definition: libwebsockets.h:4287
    +
    4282  {
    4283  LGSSMTP_IDLE,
    4288  LGSSMTP_SENT_TO,
    4292 };
    Definition: libwebsockets.h:4285
    +
    Definition: libwebsockets.h:4290
    +
    Definition: libwebsockets.h:4283
    +
    Definition: libwebsockets.h:4284
    +
    Definition: libwebsockets.h:4288
    +
    Definition: libwebsockets.h:4287
    +
    Definition: libwebsockets.h:4291
    +
    Definition: libwebsockets.h:4286
    +
    Definition: libwebsockets.h:4289
    diff --git a/doc/html/group__usercb.html b/doc/html/group__usercb.html index d4c20a4b..555425a6 100644 --- a/doc/html/group__usercb.html +++ b/doc/html/group__usercb.html @@ -348,49 +348,49 @@ Enumerations
    LWS_CALLBACK_USER 

    user code can use any including / above without fear of clashes

    -
    668  {
    752  LWS_CALLBACK_HTTP = 12,
    910  /* external poll() management support */
    973  LWS_CALLBACK_WS_EXT_DEFAULTS = 39,
    976  LWS_CALLBACK_CGI = 40,
    978  LWS_CALLBACK_CGI_TERMINATED = 41,
    980  LWS_CALLBACK_CGI_STDIN_DATA = 42,
    982  LWS_CALLBACK_CGI_STDIN_COMPLETED = 43,
    984  LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP = 44,
    986  LWS_CALLBACK_CLOSED_CLIENT_HTTP = 45,
    988  LWS_CALLBACK_RECEIVE_CLIENT_HTTP = 46,
    990  LWS_CALLBACK_COMPLETED_CLIENT_HTTP = 47,
    992  LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ = 48,
    994  LWS_CALLBACK_HTTP_BIND_PROTOCOL = 49,
    996  LWS_CALLBACK_HTTP_DROP_PROTOCOL = 50,
    998  LWS_CALLBACK_CHECK_ACCESS_RIGHTS = 51,
    1000  LWS_CALLBACK_PROCESS_HTML = 52,
    1002  LWS_CALLBACK_ADD_HEADERS = 53,
    1004  LWS_CALLBACK_SESSION_INFO = 54,
    1007  LWS_CALLBACK_GS_EVENT = 55,
    1009  LWS_CALLBACK_HTTP_PMO = 56,
    1054  /****** add new things just above ---^ ******/
    1055 
    1056  LWS_CALLBACK_USER = 1000,
    1058 };
    Definition: libwebsockets.h:775
    -
    Definition: libwebsockets.h:903
    - -
    Definition: libwebsockets.h:901
    -
    Definition: libwebsockets.h:806
    -
    Definition: libwebsockets.h:752
    -
    Definition: libwebsockets.h:786
    -
    Definition: libwebsockets.h:927
    -
    Definition: libwebsockets.h:873
    -
    Definition: libwebsockets.h:766
    -
    Definition: libwebsockets.h:964
    - -
    Definition: libwebsockets.h:953
    - -
    Definition: libwebsockets.h:727
    -
    Definition: libwebsockets.h:905
    -
    Definition: libwebsockets.h:893
    -
    Definition: libwebsockets.h:724
    -
    Definition: libwebsockets.h:911
    -
    Definition: libwebsockets.h:717
    -
    Definition: libwebsockets.h:798
    -
    Definition: libwebsockets.h:896
    -
    Definition: libwebsockets.h:933
    -
    Definition: libwebsockets.h:773
    -
    Definition: libwebsockets.h:769
    -
    Definition: libwebsockets.h:669
    - -
    Definition: libwebsockets.h:737
    -
    Definition: libwebsockets.h:771
    -
    Definition: libwebsockets.h:1009
    -
    Definition: libwebsockets.h:849
    -
    Definition: libwebsockets.h:735
    -
    Definition: libwebsockets.h:740
    -
    Definition: libwebsockets.h:1014
    - -
    Definition: libwebsockets.h:673
    -
    Definition: libwebsockets.h:750
    -
    Definition: libwebsockets.h:1056
    - -
    Definition: libwebsockets.h:729
    -
    Definition: libwebsockets.h:731
    -
    Definition: libwebsockets.h:742
    -
    Definition: libwebsockets.h:941
    +
    670  {
    754  LWS_CALLBACK_HTTP = 12,
    912  /* external poll() management support */
    975  LWS_CALLBACK_WS_EXT_DEFAULTS = 39,
    978  LWS_CALLBACK_CGI = 40,
    980  LWS_CALLBACK_CGI_TERMINATED = 41,
    982  LWS_CALLBACK_CGI_STDIN_DATA = 42,
    984  LWS_CALLBACK_CGI_STDIN_COMPLETED = 43,
    986  LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP = 44,
    988  LWS_CALLBACK_CLOSED_CLIENT_HTTP = 45,
    990  LWS_CALLBACK_RECEIVE_CLIENT_HTTP = 46,
    992  LWS_CALLBACK_COMPLETED_CLIENT_HTTP = 47,
    994  LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ = 48,
    996  LWS_CALLBACK_HTTP_BIND_PROTOCOL = 49,
    998  LWS_CALLBACK_HTTP_DROP_PROTOCOL = 50,
    1000  LWS_CALLBACK_CHECK_ACCESS_RIGHTS = 51,
    1002  LWS_CALLBACK_PROCESS_HTML = 52,
    1004  LWS_CALLBACK_ADD_HEADERS = 53,
    1006  LWS_CALLBACK_SESSION_INFO = 54,
    1009  LWS_CALLBACK_GS_EVENT = 55,
    1011  LWS_CALLBACK_HTTP_PMO = 56,
    1056  /****** add new things just above ---^ ******/
    1057 
    1058  LWS_CALLBACK_USER = 1000,
    1060 };
    Definition: libwebsockets.h:777
    +
    Definition: libwebsockets.h:905
    + +
    Definition: libwebsockets.h:903
    +
    Definition: libwebsockets.h:808
    +
    Definition: libwebsockets.h:754
    +
    Definition: libwebsockets.h:788
    +
    Definition: libwebsockets.h:929
    +
    Definition: libwebsockets.h:875
    +
    Definition: libwebsockets.h:768
    +
    Definition: libwebsockets.h:966
    + +
    Definition: libwebsockets.h:955
    + +
    Definition: libwebsockets.h:729
    +
    Definition: libwebsockets.h:907
    +
    Definition: libwebsockets.h:895
    +
    Definition: libwebsockets.h:726
    +
    Definition: libwebsockets.h:913
    +
    Definition: libwebsockets.h:719
    +
    Definition: libwebsockets.h:800
    +
    Definition: libwebsockets.h:898
    +
    Definition: libwebsockets.h:935
    +
    Definition: libwebsockets.h:775
    +
    Definition: libwebsockets.h:771
    +
    Definition: libwebsockets.h:671
    + +
    Definition: libwebsockets.h:739
    +
    Definition: libwebsockets.h:773
    +
    Definition: libwebsockets.h:1011
    +
    Definition: libwebsockets.h:851
    +
    Definition: libwebsockets.h:737
    +
    Definition: libwebsockets.h:742
    +
    Definition: libwebsockets.h:1016
    + +
    Definition: libwebsockets.h:675
    +
    Definition: libwebsockets.h:752
    +
    Definition: libwebsockets.h:1058
    + +
    Definition: libwebsockets.h:731
    +
    Definition: libwebsockets.h:733
    +
    Definition: libwebsockets.h:744
    +
    Definition: libwebsockets.h:943
    diff --git a/doc/html/group__vhost-mounts.html b/doc/html/group__vhost-mounts.html index da1a7ced..9d90c4ca 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

    -
    2004  {
    2005  LWSMPRO_HTTP = 0,
    2006  LWSMPRO_HTTPS = 1,
    2007  LWSMPRO_FILE = 2,
    2008  LWSMPRO_CGI = 3,
    2009  LWSMPRO_REDIR_HTTP = 4,
    2010  LWSMPRO_REDIR_HTTPS = 5,
    2011  LWSMPRO_CALLBACK = 6,
    2012 };
    Definition: libwebsockets.h:2008
    -
    Definition: libwebsockets.h:2006
    -
    Definition: libwebsockets.h:2007
    -
    Definition: libwebsockets.h:2009
    -
    Definition: libwebsockets.h:2010
    -
    Definition: libwebsockets.h:2005
    -
    Definition: libwebsockets.h:2011
    +
    2006  {
    2007  LWSMPRO_HTTP = 0,
    2008  LWSMPRO_HTTPS = 1,
    2009  LWSMPRO_FILE = 2,
    2010  LWSMPRO_CGI = 3,
    2011  LWSMPRO_REDIR_HTTP = 4,
    2012  LWSMPRO_REDIR_HTTPS = 5,
    2013  LWSMPRO_CALLBACK = 6,
    2014 };
    Definition: libwebsockets.h:2010
    +
    Definition: libwebsockets.h:2008
    +
    Definition: libwebsockets.h:2009
    +
    Definition: libwebsockets.h:2011
    +
    Definition: libwebsockets.h:2012
    +
    Definition: libwebsockets.h:2007
    +
    Definition: libwebsockets.h:2013
    diff --git a/doc/html/group__wsclose.html b/doc/html/group__wsclose.html index e415d46b..6d4782b1 100644 --- a/doc/html/group__wsclose.html +++ b/doc/html/group__wsclose.html @@ -144,19 +144,19 @@ Functions LWS_CLOSE_STATUS_TLS_FAILURE 

    1015 is a reserved value and MUST NOT be set as a status code in a Close control frame by an endpoint. It is designated for use in applications expecting a status code to indicate that the connection was closed due to a failure to perform a TLS handshake (e.g., the server certificate can't be verified).

    -
    558  {
    559  LWS_CLOSE_STATUS_NOSTATUS = 0,
    621  /****** add new things just above ---^ ******/
    622 
    623  LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY = 9999,
    624 };
    Definition: libwebsockets.h:587
    -
    Definition: libwebsockets.h:598
    -
    Definition: libwebsockets.h:614
    -
    Definition: libwebsockets.h:566
    -
    Definition: libwebsockets.h:592
    -
    Definition: libwebsockets.h:576
    -
    Definition: libwebsockets.h:581
    -
    Definition: libwebsockets.h:563
    -
    Definition: libwebsockets.h:602
    -
    Definition: libwebsockets.h:560
    -
    Definition: libwebsockets.h:569
    -
    Definition: libwebsockets.h:574
    -
    Definition: libwebsockets.h:610
    +
    560  {
    561  LWS_CLOSE_STATUS_NOSTATUS = 0,
    623  /****** add new things just above ---^ ******/
    624 
    625  LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY = 9999,
    626 };
    Definition: libwebsockets.h:589
    +
    Definition: libwebsockets.h:600
    +
    Definition: libwebsockets.h:616
    +
    Definition: libwebsockets.h:568
    +
    Definition: libwebsockets.h:594
    +
    Definition: libwebsockets.h:578
    +
    Definition: libwebsockets.h:583
    +
    Definition: libwebsockets.h:565
    +
    Definition: libwebsockets.h:604
    +
    Definition: libwebsockets.h:562
    +
    Definition: libwebsockets.h:571
    +
    Definition: libwebsockets.h:576
    +
    Definition: libwebsockets.h:612
    diff --git a/doc/html/libwebsockets_8h.html b/doc/html/libwebsockets_8h.html index f501bf0c..b519f34e 100644 --- a/doc/html/libwebsockets_8h.html +++ b/doc/html/libwebsockets_8h.html @@ -634,9 +634,9 @@ Enumerations - - + + @@ -666,9 +666,9 @@ lws_sockfd_type  - - + + @@ -890,8 +890,8 @@ LWS_VISIBLE LWS_EXTERN int  - - + + diff --git a/doc/html/libwebsockets_8h.js b/doc/html/libwebsockets_8h.js index 788f66df..40e25778 100644 --- a/doc/html/libwebsockets_8h.js +++ b/doc/html/libwebsockets_8h.js @@ -385,11 +385,11 @@ var libwebsockets_8h = [ "PENDING_TIMEOUT_WS_PONG_CHECK_GET_PONG", "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a62ae208399be1f872e14843fd15f9e06", null ], [ "PENDING_TIMEOUT_CLIENT_ISSUE_PAYLOAD", "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a8587dc22f946c45e2f38c4045479fda5", null ] ] ], - [ "_lws_log", "group__log.html#gaf5f07837692b2f231a79da8a058288aa", null ], + [ "_lws_log", "group__log.html#ga0cdc1065ae7f003d59a3c8525acf545e", null ], [ "_lws_logv", "group__log.html#ga74eb146969f0595e12ea835851b4588e", null ], [ "esp8266_create_tcp_listen_socket", "libwebsockets_8h.html#a4e877a4f0bb027d05d3a90c8e6a632de", null ], [ "esp8266_tcp_stream_accept", "libwebsockets_8h.html#a9b1bfc6f34319188d2aa40500d825bab", null ], - [ "ets_snprintf", "libwebsockets_8h.html#a75e9827318684877deb4189121a8cd2a", null ], + [ "ets_snprintf", "libwebsockets_8h.html#a71451ba21aadc2fa3e25674d04c31ab7", null ], [ "ets_timer_arm_new", "libwebsockets_8h.html#a9b878fb94f4596226c982eef4f42a607", null ], [ "lws_add_http_header_by_name", "group__HTTP-headers-create.html#ga2b36bf44405755ff51c1939303b995a8", null ], [ "lws_add_http_header_by_token", "group__HTTP-headers-create.html#gaf74adb761b22566ad70004882712dce1", null ], @@ -500,7 +500,7 @@ var libwebsockets_8h = [ "lws_set_proxy", "group__context-and-vhost.html#ga7e9d5405547a457d86e0b4f0ae2bb1c4", null ], [ "lws_set_timeout", "group__timeout.html#gaced9f9237f6172fed9f730a2af51345a", null ], [ "lws_SHA1", "group__sha.html#ga7b09ab74646266f0b555103b3bb8dfe5", null ], - [ "lws_snprintf", "group__misc.html#ga9f37d0e357de2ab4170723fcdb665d21", null ], + [ "lws_snprintf", "group__misc.html#ga2163492f17db959a36967adb73d823b4", null ], [ "lws_spa_create", "group__form-parsing.html#ga162f86762173a2bc8c28497941d74815", null ], [ "lws_spa_destroy", "group__form-parsing.html#gaaa482f07dad3f04b391cccf0a814e13b", null ], [ "lws_spa_finalize", "group__form-parsing.html#ga83835bf250ee3d4a60f36a182f2b8d24", null ], diff --git a/doc/html/libwebsockets_8h_source.html b/doc/html/libwebsockets_8h_source.html index b899c9ce..1cc65f0f 100644 --- a/doc/html/libwebsockets_8h_source.html +++ b/doc/html/libwebsockets_8h_source.html @@ -64,420 +64,420 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
    libwebsockets.h
    -Go to the documentation of this file.
    1 /*
    2  * libwebsockets - small server side websockets and web server implementation
    3  *
    4  * Copyright (C) 2010-2016 Andy Green <andy@warmcat.com>
    5  *
    6  * This library is free software; you can redistribute it and/or
    7  * modify it under the terms of the GNU Lesser General Public
    8  * License as published by the Free Software Foundation:
    9  * version 2.1 of the License.
    10  *
    11  * This library is distributed in the hope that it will be useful,
    12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    14  * Lesser General Public License for more details.
    15  *
    16  * You should have received a copy of the GNU Lesser General Public
    17  * License along with this library; if not, write to the Free Software
    18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
    19  * MA 02110-1301 USA
    20  */
    21 
    24 #ifndef LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C
    25 #define LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C
    26 
    27 #ifdef __cplusplus
    28 #include <cstddef>
    29 #include <cstdarg>
    30 #ifdef MBED_OPERATORS
    31 #include "mbed-drivers/mbed.h"
    32 #include "sal-iface-eth/EthernetInterface.h"
    33 #include "sockets/TCPListener.h"
    34 #include "sal-stack-lwip/lwipv4_init.h"
    35 
    36 namespace {
    37 }
    38 using namespace mbed::Sockets::v0;
    39 
    40 
    41 struct sockaddr_in;
    42 struct lws;
    43 
    44 class lws_conn {
    45  public:
    46  lws_conn():
    47  ts(NULL),
    48  wsi(NULL),
    49  writeable(1),
    50  awaiting_on_writeable(0)
    51  {
    52  }
    53 
    54 public:
    55  void set_wsi(struct lws *_wsi) { wsi = _wsi; }
    56  int actual_onRX(Socket *s);
    57  void onRX(Socket *s);
    58  void onError(Socket *s, socket_error_t err);
    59  void onDisconnect(TCPStream *s);
    60  void onSent(Socket *s, uint16_t len);
    61  void serialized_writeable(struct lws *wsi);
    62 
    63 public:
    64  TCPStream *ts;
    65 
    66 public:
    67  struct lws *wsi;
    68  char writeable;
    69  char awaiting_on_writeable;
    70 };
    71 
    73 public:
    75  srv(SOCKET_STACK_LWIP_IPV4)
    76  {
    77  srv.setOnError(TCPStream::ErrorHandler_t(this,
    79  }
    80 
    81  void start(const uint16_t port);
    83 protected:
    84  void onRX(Socket *s);
    85  void onError(Socket *s, socket_error_t err);
    86  void onIncoming(TCPListener *s, void *impl);
    87  void onDisconnect(TCPStream *s);
    89 public:
    90  TCPListener srv;
    91 };
    92 
    93 #endif
    94 
    95 extern "C" {
    96 #else
    97 #include <stdarg.h>
    98 #endif
    99 
    100 #if defined(MBED_OPERATORS) || defined(LWS_WITH_ESP8266)
    101 struct sockaddr_in;
    102 #define LWS_POSIX 0
    103 #else
    104 #define LWS_POSIX 1
    105 #endif
    106 
    107 #include "lws_config.h"
    108 
    109 #if defined(WIN32) || defined(_WIN32)
    110 #ifndef WIN32_LEAN_AND_MEAN
    111 #define WIN32_LEAN_AND_MEAN
    112 #endif
    113 
    114 #include <winsock2.h>
    115 #include <ws2tcpip.h>
    116 #include <stddef.h>
    117 #include <basetsd.h>
    118 #ifndef _WIN32_WCE
    119 #include <fcntl.h>
    120 #else
    121 #define _O_RDONLY 0x0000
    122 #define O_RDONLY _O_RDONLY
    123 #endif
    124 
    125 // Visual studio older than 2015 and WIN_CE has only _stricmp
    126 #if (defined(_MSC_VER) && _MSC_VER < 1900) || defined(_WIN32_WCE)
    127 #define strcasecmp _stricmp
    128 #elif !defined(__MINGW32__)
    129 #define strcasecmp stricmp
    130 #endif
    131 #define getdtablesize() 30000
    132 
    133 #define LWS_INLINE __inline
    134 #define LWS_VISIBLE
    135 #define LWS_WARN_UNUSED_RESULT
    136 #define LWS_WARN_DEPRECATED
    137 
    138 #ifdef LWS_DLL
    139 #ifdef LWS_INTERNAL
    140 #define LWS_EXTERN extern __declspec(dllexport)
    141 #else
    142 #define LWS_EXTERN extern __declspec(dllimport)
    143 #endif
    144 #else
    145 #define LWS_EXTERN
    146 #endif
    147 
    148 #define LWS_INVALID_FILE INVALID_HANDLE_VALUE
    149 #define LWS_O_RDONLY _O_RDONLY
    150 
    151 #if !defined(__MINGW32__) && (!defined(_MSC_VER) || _MSC_VER < 1900) /* Visual Studio 2015 already defines this in <stdio.h> */
    152 #define lws_snprintf _snprintf
    153 #endif
    154 
    155 #ifndef __func__
    156 #define __func__ __FUNCTION__
    157 #endif
    158 
    159 #else /* NOT WIN32 */
    160 #include <unistd.h>
    161 
    162 #if defined(__NetBSD__) || defined(__FreeBSD__)
    163 #include <netinet/in.h>
    164 #endif
    165 
    166 #define LWS_INLINE inline
    167 #define LWS_O_RDONLY O_RDONLY
    168 
    169 #if !defined(MBED_OPERATORS) && !defined(LWS_WITH_ESP8266) && !defined(OPTEE_TA)
    170 #include <poll.h>
    171 #include <netdb.h>
    172 #define LWS_INVALID_FILE -1
    173 #else
    174 #define getdtablesize() (20)
    175 #define LWS_INVALID_FILE NULL
    176 #endif
    177 
    178 #if defined(__GNUC__)
    179 
    180 /* warn_unused_result attribute only supported by GCC 3.4 or later */
    181 #if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
    182 #define LWS_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
    183 #else
    184 #define LWS_WARN_UNUSED_RESULT
    185 #endif
    186 
    187 #define LWS_VISIBLE __attribute__((visibility("default")))
    188 #define LWS_WARN_DEPRECATED __attribute__ ((deprecated))
    189 #else
    190 #define LWS_VISIBLE
    191 #define LWS_WARN_UNUSED_RESULT
    192 #define LWS_WARN_DEPRECATED
    193 #endif
    194 
    195 #if defined(__ANDROID__)
    196 #include <unistd.h>
    197 #define getdtablesize() sysconf(_SC_OPEN_MAX)
    198 #endif
    199 
    200 #endif
    201 
    202 #ifdef LWS_USE_LIBEV
    203 #include <ev.h>
    204 #endif /* LWS_USE_LIBEV */
    205 #ifdef LWS_USE_LIBUV
    206 #include <uv.h>
    207 #ifdef LWS_HAVE_UV_VERSION_H
    208 #include <uv-version.h>
    209 #endif
    210 #endif /* LWS_USE_LIBUV */
    211 
    212 #ifndef LWS_EXTERN
    213 #define LWS_EXTERN extern
    214 #endif
    215 
    216 #ifdef _WIN32
    217 #define random rand
    218 #else
    219 #if !defined(OPTEE_TA)
    220 #include <sys/time.h>
    221 #include <unistd.h>
    222 #endif
    223 #endif
    224 
    225 #ifdef LWS_OPENSSL_SUPPORT
    226 
    227 #ifdef USE_WOLFSSL
    228 #ifdef USE_OLD_CYASSL
    229 #include <cyassl/openssl/ssl.h>
    230 #include <cyassl/error-ssl.h>
    231 #else
    232 #include <wolfssl/openssl/ssl.h>
    233 #include <wolfssl/error-ssl.h>
    234 #endif /* not USE_OLD_CYASSL */
    235 #else
    236 #if defined(LWS_USE_POLARSSL)
    237 #include <polarssl/ssl.h>
    239  x509_crt ca;
    240  x509_crt certificate;
    241  rsa_context key;
    242 };
    243 typedef struct lws_polarssl_context SSL_CTX;
    244 typedef ssl_context SSL;
    245 #else
    246 #if defined(LWS_USE_MBEDTLS)
    247 #include <mbedtls/ssl.h>
    248 #else
    249 #include <openssl/ssl.h>
    250 #include <openssl/err.h>
    251 #endif /* not USE_MBEDTLS */
    252 #endif /* not USE_POLARSSL */
    253 #endif /* not USE_WOLFSSL */
    254 #endif
    255 
    256 
    257 #define CONTEXT_PORT_NO_LISTEN -1
    258 #define CONTEXT_PORT_NO_LISTEN_SERVER -2
    259 
    270 
    272 enum lws_log_levels {
    273  LLL_ERR = 1 << 0,
    274  LLL_WARN = 1 << 1,
    275  LLL_NOTICE = 1 << 2,
    276  LLL_INFO = 1 << 3,
    277  LLL_DEBUG = 1 << 4,
    278  LLL_PARSER = 1 << 5,
    279  LLL_HEADER = 1 << 6,
    280  LLL_EXT = 1 << 7,
    281  LLL_CLIENT = 1 << 8,
    282  LLL_LATENCY = 1 << 9,
    283  LLL_USER = 1 << 10,
    284 
    285  LLL_COUNT = 11 /* set to count of valid flags */
    286 };
    287 
    288 LWS_VISIBLE LWS_EXTERN void _lws_log(int filter, const char *format, ...);
    289 LWS_VISIBLE LWS_EXTERN void _lws_logv(int filter, const char *format, va_list vl);
    299 LWS_VISIBLE LWS_EXTERN int
    300 lwsl_timestamp(int level, char *p, int len);
    301 
    302 /* these guys are unconditionally included */
    303 
    304 #define lwsl_err(...) _lws_log(LLL_ERR, __VA_ARGS__)
    305 #define lwsl_user(...) _lws_log(LLL_USER, __VA_ARGS__)
    306 
    307 #if !defined(LWS_WITH_NO_LOGS)
    308 /* notice and warn are usually included by being compiled in */
    309 #define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__)
    310 #define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__)
    311 #endif
    312 /*
    313  * weaker logging can be deselected by telling CMake to build in RELEASE mode
    314  * that gets rid of the overhead of checking while keeping _warn and _err
    315  * active
    316  */
    317 
    318 #if defined(LWS_WITH_ESP8266)
    319 #undef _DEBUG
    320 #endif
    321 
    322 #ifdef _DEBUG
    323 #if defined(LWS_WITH_NO_LOGS)
    324 /* notice, warn and log are always compiled in */
    325 #define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__)
    326 #define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__)
    327 #endif
    328 #define lwsl_info(...) _lws_log(LLL_INFO, __VA_ARGS__)
    329 #define lwsl_debug(...) _lws_log(LLL_DEBUG, __VA_ARGS__)
    330 #define lwsl_parser(...) _lws_log(LLL_PARSER, __VA_ARGS__)
    331 #define lwsl_header(...) _lws_log(LLL_HEADER, __VA_ARGS__)
    332 #define lwsl_ext(...) _lws_log(LLL_EXT, __VA_ARGS__)
    333 #define lwsl_client(...) _lws_log(LLL_CLIENT, __VA_ARGS__)
    334 #define lwsl_latency(...) _lws_log(LLL_LATENCY, __VA_ARGS__)
    335 
    341 LWS_VISIBLE LWS_EXTERN void lwsl_hexdump(void *buf, size_t len);
    342 
    343 #else /* no debug */
    344 #if defined(LWS_WITH_NO_LOGS)
    345 #define lwsl_warn(...) do {} while(0)
    346 #define lwsl_notice(...) do {} while(0)
    347 #endif
    348 #define lwsl_info(...) do {} while(0)
    349 #define lwsl_debug(...) do {} while(0)
    350 #define lwsl_parser(...) do {} while(0)
    351 #define lwsl_header(...) do {} while(0)
    352 #define lwsl_ext(...) do {} while(0)
    353 #define lwsl_client(...) do {} while(0)
    354 #define lwsl_latency(...) do {} while(0)
    355 #define lwsl_hexdump(a, b)
    356 
    357 #endif
    358 
    369 LWS_VISIBLE LWS_EXTERN void
    370 lws_set_log_level(int level,
    371  void (*log_emit_function)(int level, const char *line));
    372 
    382 LWS_VISIBLE LWS_EXTERN void
    383 lwsl_emit_syslog(int level, const char *line);
    384 
    386 
    387 
    388 #include <stddef.h>
    389 
    390 #ifndef lws_container_of
    391 #define lws_container_of(P,T,M) ((T *)((char *)(P) - offsetof(T, M)))
    392 #endif
    393 
    394 
    395 struct lws;
    396 #ifndef ARRAY_SIZE
    397 #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
    398 #endif
    399 
    400 /* api change list for user code to test against */
    401 
    402 #define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_ARG
    403 
    404 /* the struct lws_protocols has the id field present */
    405 #define LWS_FEATURE_PROTOCOLS_HAS_ID_FIELD
    406 
    407 /* you can call lws_get_peer_write_allowance */
    408 #define LWS_FEATURE_PROTOCOLS_HAS_PEER_WRITE_ALLOWANCE
    409 
    410 /* extra parameter introduced in 917f43ab821 */
    411 #define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_LEN
    412 
    413 /* File operations stuff exists */
    414 #define LWS_FEATURE_FOPS
    415 
    416 
    417 #if defined(_WIN32)
    418 typedef SOCKET lws_sockfd_type;
    419 typedef HANDLE lws_filefd_type;
    420 #define lws_sockfd_valid(sfd) (!!sfd)
    421 struct lws_pollfd {
    422  lws_sockfd_type fd;
    423  SHORT events;
    424  SHORT revents;
    425 };
    426 #define LWS_POLLHUP (FD_CLOSE)
    427 #define LWS_POLLIN (FD_READ | FD_ACCEPT)
    428 #define LWS_POLLOUT (FD_WRITE)
    429 #else
    430 
    431 #if defined(MBED_OPERATORS)
    432 /* it's a class lws_conn * */
    433 typedef void * lws_sockfd_type;
    434 typedef void * lws_filefd_type;
    435 #define lws_sockfd_valid(sfd) (!!sfd)
    436 struct pollfd {
    437  lws_sockfd_type fd;
    438  short events;
    439  short revents;
    440 };
    441 #define POLLIN 0x0001
    442 #define POLLPRI 0x0002
    443 #define POLLOUT 0x0004
    444 #define POLLERR 0x0008
    445 #define POLLHUP 0x0010
    446 #define POLLNVAL 0x0020
    447 
    448 struct lws;
    449 
    450 void * mbed3_create_tcp_stream_socket(void);
    451 void mbed3_delete_tcp_stream_socket(void *sockfd);
    452 void mbed3_tcp_stream_bind(void *sock, int port, struct lws *);
    453 void mbed3_tcp_stream_accept(void *sock, struct lws *);
    454 #else
    455 #if defined(LWS_WITH_ESP8266)
    456 
    457 #include <user_interface.h>
    458 #include <espconn.h>
    459 
    460 typedef struct espconn * lws_sockfd_type;
    461 typedef void * lws_filefd_type;
    462 #define lws_sockfd_valid(sfd) (!!sfd)
    463 struct pollfd {
    464  lws_sockfd_type fd;
    465  short events;
    466  short revents;
    467 };
    468 #define POLLIN 0x0001
    469 #define POLLPRI 0x0002
    470 #define POLLOUT 0x0004
    471 #define POLLERR 0x0008
    472 #define POLLHUP 0x0010
    473 #define POLLNVAL 0x0020
    474 
    475 struct lws_vhost;
    476 
    477 lws_sockfd_type esp8266_create_tcp_listen_socket(struct lws_vhost *vh);
    478 void esp8266_tcp_stream_accept(lws_sockfd_type fd, struct lws *wsi);
    479 
    480 #include <os_type.h>
    481 #include <osapi.h>
    482 #include "ets_sys.h"
    483 
    484 int ets_snprintf(char *str, size_t size, const char *format, ...);
    485 #define snprintf ets_snprintf
    486 
    487 typedef os_timer_t uv_timer_t;
    488 typedef void uv_cb_t(uv_timer_t *);
    489 
    490 void os_timer_disarm(void *);
    491 void os_timer_setfn(os_timer_t *, os_timer_func_t *, void *);
    492 
    493 void ets_timer_arm_new(os_timer_t *, int, int, int);
    494 
    495 //void os_timer_arm(os_timer_t *, int, int);
    496 
    497 #define UV_VERSION_MAJOR 1
    498 
    499 #define lws_uv_getloop(a, b) (NULL)
    500 
    501 static inline void uv_timer_init(void *l, uv_timer_t *t)
    502 {
    503  (void)l;
    504  memset(t, 0, sizeof(*t));
    505  os_timer_disarm(t);
    506 }
    507 
    508 static inline void uv_timer_start(uv_timer_t *t, uv_cb_t *cb, int first, int rep)
    509 {
    510  os_timer_setfn(t, (os_timer_func_t *)cb, t);
    511  /* ms, repeat */
    512  os_timer_arm(t, first, !!rep);
    513 }
    514 
    515 static inline void uv_timer_stop(uv_timer_t *t)
    516 {
    517  os_timer_disarm(t);
    518 }
    519 
    520 #else
    521 typedef int lws_sockfd_type;
    522 typedef int lws_filefd_type;
    523 #define lws_sockfd_valid(sfd) (sfd >= 0)
    524 #endif
    525 #endif
    526 
    527 #define lws_pollfd pollfd
    528 #define LWS_POLLHUP (POLLHUP|POLLERR)
    529 #define LWS_POLLIN (POLLIN)
    530 #define LWS_POLLOUT (POLLOUT)
    531 #endif
    532 
    535 struct lws_pollargs {
    536  lws_sockfd_type fd;
    537  int events;
    539 };
    540 
    541 struct lws_tokens;
    542 struct lws_token_limits;
    543 
    551 
    553 /*
    554  * NOTE: These public enums are part of the abi. If you want to add one,
    555  * add it at where specified so existing users are unaffected.
    556  */
    559  LWS_CLOSE_STATUS_NOSTATUS = 0,
    621  /****** add new things just above ---^ ******/
    622 
    623  LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY = 9999,
    624 };
    625 
    638 LWS_VISIBLE LWS_EXTERN void
    639 lws_close_reason(struct lws *wsi, enum lws_close_status status,
    640  unsigned char *buf, size_t len);
    641 
    643 
    644 struct lws;
    645 struct lws_context;
    646 /* needed even with extensions disabled for create context */
    647 struct lws_extension;
    648 
    660 
    662 
    663 /*
    664  * NOTE: These public enums are part of the abi. If you want to add one,
    665  * add it at where specified so existing users are unaffected.
    666  */
    910  /* external poll() management support */
    973  LWS_CALLBACK_WS_EXT_DEFAULTS = 39,
    976  LWS_CALLBACK_CGI = 40,
    978  LWS_CALLBACK_CGI_TERMINATED = 41,
    980  LWS_CALLBACK_CGI_STDIN_DATA = 42,
    982  LWS_CALLBACK_CGI_STDIN_COMPLETED = 43,
    984  LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP = 44,
    986  LWS_CALLBACK_CLOSED_CLIENT_HTTP = 45,
    988  LWS_CALLBACK_RECEIVE_CLIENT_HTTP = 46,
    990  LWS_CALLBACK_COMPLETED_CLIENT_HTTP = 47,
    992  LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ = 48,
    994  LWS_CALLBACK_HTTP_BIND_PROTOCOL = 49,
    996  LWS_CALLBACK_HTTP_DROP_PROTOCOL = 50,
    998  LWS_CALLBACK_CHECK_ACCESS_RIGHTS = 51,
    1000  LWS_CALLBACK_PROCESS_HTML = 52,
    1002  LWS_CALLBACK_ADD_HEADERS = 53,
    1004  LWS_CALLBACK_SESSION_INFO = 54,
    1007  LWS_CALLBACK_GS_EVENT = 55,
    1054  /****** add new things just above ---^ ******/
    1055 
    1058 };
    1059 
    1060 
    1061 
    1077 typedef int
    1078 lws_callback_function(struct lws *wsi, enum lws_callback_reasons reason,
    1079  void *user, void *in, size_t len);
    1081 
    1091 
    1093 /*
    1094  * NOTE: These public enums are part of the abi. If you want to add one,
    1095  * add it at where specified so existing users are unaffected.
    1096  */
    1097 enum lws_extension_callback_reasons {
    1098  LWS_EXT_CB_SERVER_CONTEXT_CONSTRUCT = 0,
    1099  LWS_EXT_CB_CLIENT_CONTEXT_CONSTRUCT = 1,
    1100  LWS_EXT_CB_SERVER_CONTEXT_DESTRUCT = 2,
    1101  LWS_EXT_CB_CLIENT_CONTEXT_DESTRUCT = 3,
    1102  LWS_EXT_CB_CONSTRUCT = 4,
    1103  LWS_EXT_CB_CLIENT_CONSTRUCT = 5,
    1104  LWS_EXT_CB_CHECK_OK_TO_REALLY_CLOSE = 6,
    1105  LWS_EXT_CB_CHECK_OK_TO_PROPOSE_EXTENSION = 7,
    1106  LWS_EXT_CB_DESTROY = 8,
    1107  LWS_EXT_CB_DESTROY_ANY_WSI_CLOSING = 9,
    1108  LWS_EXT_CB_ANY_WSI_ESTABLISHED = 10,
    1109  LWS_EXT_CB_PACKET_RX_PREPARSE = 11,
    1110  LWS_EXT_CB_PACKET_TX_PRESEND = 12,
    1111  LWS_EXT_CB_PACKET_TX_DO_SEND = 13,
    1112  LWS_EXT_CB_HANDSHAKE_REPLY_TX = 14,
    1113  LWS_EXT_CB_FLUSH_PENDING_TX = 15,
    1114  LWS_EXT_CB_EXTENDED_PAYLOAD_RX = 16,
    1115  LWS_EXT_CB_CAN_PROXY_CLIENT_CONNECTION = 17,
    1116  LWS_EXT_CB_1HZ = 18,
    1117  LWS_EXT_CB_REQUEST_ON_WRITEABLE = 19,
    1118  LWS_EXT_CB_IS_WRITEABLE = 20,
    1119  LWS_EXT_CB_PAYLOAD_TX = 21,
    1120  LWS_EXT_CB_PAYLOAD_RX = 22,
    1121  LWS_EXT_CB_OPTION_DEFAULT = 23,
    1122  LWS_EXT_CB_OPTION_SET = 24,
    1123  LWS_EXT_CB_OPTION_CONFIRM = 25,
    1124  LWS_EXT_CB_NAMED_OPTION_SET = 26,
    1125 
    1126  /****** add new things just above ---^ ******/
    1127 };
    1128 
    1135  /* Add new things just above here ---^
    1136  * This is part of the ABI, don't needlessly break compatibility */
    1137 };
    1138 
    1144  const char *name;
    1147  /* Add new things just above here ---^
    1148  * This is part of the ABI, don't needlessly break compatibility */
    1149 };
    1150 
    1153  const char *option_name;
    1155  const char *start;
    1156  int len;
    1157 };
    1158 
    1219 typedef int
    1220 lws_extension_callback_function(struct lws_context *context,
    1221  const struct lws_extension *ext, struct lws *wsi,
    1222  enum lws_extension_callback_reasons reason,
    1223  void *user, void *in, size_t len);
    1224 
    1227  const char *name;
    1229  const char *client_offer;
    1231  /* Add new things just above here ---^
    1232  * This is part of the ABI, don't needlessly break compatibility */
    1233 };
    1234 
    1243 LWS_VISIBLE LWS_EXTERN int
    1244 lws_set_extension_option(struct lws *wsi, const char *ext_name,
    1245  const char *opt_name, const char *opt_val);
    1246 
    1247 #ifndef LWS_NO_EXTENSIONS
    1248 /* lws_get_internal_extensions() - DEPRECATED
    1249  *
    1250  * \Deprecated There is no longer a set internal extensions table. The table is provided
    1251  * by user code along with application-specific settings. See the test
    1252  * client and server for how to do.
    1253  */
    1254 static LWS_INLINE LWS_WARN_DEPRECATED const struct lws_extension *
    1255 lws_get_internal_extensions(void) { return NULL; }
    1256 
    1267 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    1268 lws_ext_parse_options(const struct lws_extension *ext, struct lws *wsi,
    1269  void *ext_user, const struct lws_ext_options *opts,
    1270  const char *o, int len);
    1271 #endif
    1272 
    1285 LWS_EXTERN
    1287  struct lws_context *context, const struct lws_extension *ext,
    1288  struct lws *wsi, enum lws_extension_callback_reasons reason,
    1289  void *user, void *in, size_t len);
    1290 
    1291 /*
    1292  * The internal exts are part of the public abi
    1293  * If we add more extensions, publish the callback here ------v
    1294  */
    1296 
    1312 
    1317  const char *name;
    1338  unsigned int id;
    1345  void *user;
    1348  /* Add new things just above here ---^
    1349  * This is part of the ABI, don't needlessly break compatibility */
    1350 };
    1351 
    1352 struct lws_vhost;
    1353 
    1362 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
    1363 lws_vhost_name_to_protocol(struct lws_vhost *vh, const char *name);
    1364 
    1374 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
    1375 lws_get_protocol(struct lws *wsi);
    1376 
    1378 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
    1379 lws_protocol_get(struct lws *wsi) LWS_WARN_DEPRECATED;
    1380 
    1391 LWS_VISIBLE LWS_EXTERN void *
    1392 lws_protocol_vh_priv_zalloc(struct lws_vhost *vhost, const struct lws_protocols *prot,
    1393  int size);
    1394 
    1404 LWS_VISIBLE LWS_EXTERN void *
    1405 lws_protocol_vh_priv_get(struct lws_vhost *vhost, const struct lws_protocols *prot);
    1406 
    1415 LWS_VISIBLE LWS_EXTERN int
    1416 lws_finalize_startup(struct lws_context *context);
    1417 
    1418 #ifdef LWS_WITH_PLUGINS
    1419 
    1420 /* PLUGINS implies LIBUV */
    1421 
    1422 #define LWS_PLUGIN_API_MAGIC 180
    1423 
    1426  unsigned int api_magic;
    1427  const struct lws_protocols *protocols;
    1429  const struct lws_extension *extensions;
    1431 };
    1432 
    1433 typedef int (*lws_plugin_init_func)(struct lws_context *,
    1434  struct lws_plugin_capability *);
    1435 typedef int (*lws_plugin_destroy_func)(struct lws_context *);
    1436 
    1438 struct lws_plugin {
    1439  struct lws_plugin *list;
    1440 #if (UV_VERSION_MAJOR > 0)
    1441  uv_lib_t lib;
    1442 #else
    1443  void *l;
    1444 #endif
    1445  char name[64];
    1447 };
    1448 
    1449 #endif
    1450 
    1452 
    1453 
    1462 
    1464 #define LWSGS_EMAIL_CONTENT_SIZE 16384
    1465 
    1467 /* SHA-1 binary and hexified versions */
    1469 typedef struct { unsigned char bin[20]; } lwsgw_hash_bin;
    1471 typedef struct { char id[41]; } lwsgw_hash;
    1472 
    1479 };
    1480 
    1483  char username[32];
    1484  char email[100];
    1485  char ip[72];
    1486  unsigned int mask;
    1488  char session[42];
    1489 };
    1490 
    1495 };
    1496 
    1499  enum lws_gs_event event;
    1500  const char *username;
    1501  const char *email;
    1502 };
    1503 
    1505 
    1506 
    1520 
    1522 /*
    1523  * NOTE: These public enums are part of the abi. If you want to add one,
    1524  * add it at where specified so existing users are unaffected.
    1525  */
    1526 
    1530  (1 << 12),
    1537  (1 << 12),
    1553  (1 << 12),
    1558  (1 << 12),
    1589  /****** add new things just above ---^ ******/
    1590 };
    1591 
    1592 #define lws_check_opt(c, f) (((c) & (f)) == (f))
    1593 
    1604  int port;
    1609  const char *iface;
    1616  const struct lws_protocols *protocols;
    1620  const struct lws_extension *extensions;
    1628  const char *ssl_cert_filepath;
    1638  const char *ssl_ca_filepath;
    1640  const char *ssl_cipher_list;
    1644  const char *http_proxy_address;
    1647  unsigned int http_proxy_port;
    1649  int gid;
    1651  int uid;
    1653  unsigned int options;
    1655  void *user;
    1658  int ka_time;
    1668 #ifdef LWS_OPENSSL_SUPPORT
    1674 #else /* maintain structure layout either way */
    1676 #endif
    1677 
    1688  unsigned int count_threads;
    1690  unsigned int fd_limit_per_thread;
    1694  unsigned int timeout_secs;
    1699  const char *ecdh_curve;
    1701  const char *vhost_name;
    1705  const char * const *plugin_dirs;
    1714  const char *log_filepath;
    1717  const struct lws_http_mount *mounts;
    1719  const char *server_string;
    1722  unsigned int pt_serv_buf_size;
    1737  unsigned short ws_ping_pong_interval;
    1768  /* Add new things just above here ---^
    1769  * This is part of the ABI, don't needlessly break compatibility
    1770  *
    1771  * The below is to ensure later library versions with new
    1772  * members added above will see 0 (default) even if the app
    1773  * was not built against the newer headers.
    1774  */
    1775 
    1776  void *_unused[8];
    1777 };
    1778 
    1813 LWS_VISIBLE LWS_EXTERN struct lws_context *
    1815 
    1824 LWS_VISIBLE LWS_EXTERN void
    1825 lws_context_destroy(struct lws_context *context);
    1826 
    1827 LWS_VISIBLE LWS_EXTERN void
    1828 lws_context_destroy2(struct lws_context *context);
    1829 
    1830 typedef int (*lws_reload_func)(void);
    1831 
    1856 LWS_VISIBLE LWS_EXTERN void
    1857 lws_context_deprecate(struct lws_context *context, lws_reload_func cb);
    1858 
    1859 LWS_VISIBLE LWS_EXTERN int
    1860 lws_context_is_deprecated(struct lws_context *context);
    1861 
    1879 LWS_VISIBLE LWS_EXTERN int
    1880 lws_set_proxy(struct lws_vhost *vhost, const char *proxy);
    1881 
    1882 
    1883 struct lws_vhost;
    1884 
    1894 LWS_EXTERN LWS_VISIBLE struct lws_vhost *
    1895 lws_create_vhost(struct lws_context *context,
    1896  struct lws_context_creation_info *info);
    1897 
    1912 LWS_VISIBLE LWS_EXTERN int
    1913 lwsws_get_config_globals(struct lws_context_creation_info *info, const char *d,
    1914  char **config_strings, int *len);
    1915 
    1931 LWS_VISIBLE LWS_EXTERN int
    1932 lwsws_get_config_vhosts(struct lws_context *context,
    1933  struct lws_context_creation_info *info, const char *d,
    1934  char **config_strings, int *len);
    1935 
    1937 LWS_VISIBLE LWS_EXTERN struct lws_vhost *
    1938 lws_vhost_get(struct lws *wsi) LWS_WARN_DEPRECATED;
    1939 
    1945 LWS_VISIBLE LWS_EXTERN struct lws_vhost *
    1946 lws_get_vhost(struct lws *wsi);
    1947 
    1955 LWS_VISIBLE LWS_EXTERN int
    1956 lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len);
    1957 
    1965 LWS_VISIBLE LWS_EXTERN int
    1966 lws_json_dump_context(const struct lws_context *context, char *buf, int len,
    1967  int hide_vhosts);
    1968 
    1978 LWS_VISIBLE LWS_EXTERN void *
    1979 lws_context_user(struct lws_context *context);
    1980 
    1986 
    1996  const char *name;
    1997  const char *value;
    1998 };
    1999 
    2012 };
    2013 
    2021  const char *mountpoint;
    2023  const char *origin;
    2025  const char *def;
    2027  const char *protocol;
    2043  unsigned int auth_mask;
    2046  unsigned int cache_reusable:1;
    2047  unsigned int cache_revalidate:1;
    2048  unsigned int cache_intermediaries:1;
    2050  unsigned char origin_protocol;
    2051  unsigned char mountpoint_len;
    2056  /* Add new things just above here ---^
    2057  * This is part of the ABI, don't needlessly break compatibility
    2058  *
    2059  * The below is to ensure later library versions with new
    2060  * members added above will see 0 (default) even if the app
    2061  * was not built against the newer headers.
    2062  */
    2063 
    2064  void *_unused[2];
    2065 };
    2068 
    2074 
    2082  LCCSCF_USE_SSL = (1 << 0),
    2083  LCCSCF_ALLOW_SELFSIGNED = (1 << 1),
    2084  LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK = (1 << 2),
    2085  LCCSCF_ALLOW_EXPIRED = (1 << 3)
    2086 };
    2087 
    2092  struct lws_context *context;
    2094  const char *address;
    2096  int port;
    2100  const char *path;
    2102  const char *host;
    2104  const char *origin;
    2106  const char *protocol;
    2110  void *userdata;
    2112  const void *client_exts;
    2114  const char *method;
    2117  struct lws *parent_wsi;
    2121  const char *uri_replace_from;
    2124  const char *uri_replace_to;
    2126  struct lws_vhost *vhost;
    2128  struct lws **pwsi;
    2140  /* Add new things just above here ---^
    2141  * This is part of the ABI, don't needlessly break compatibility
    2142  *
    2143  * The below is to ensure later library versions with new
    2144  * members added above will see 0 (default) even if the app
    2145  * was not built against the newer headers.
    2146  */
    2147 
    2148  void *_unused[4];
    2149 };
    2150 
    2158 LWS_VISIBLE LWS_EXTERN struct lws *
    2160 
    2181 /* deprecated, use lws_client_connect_via_info() */
    2182 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    2183 lws_client_connect(struct lws_context *clients, const char *address,
    2184  int port, int ssl_connection, const char *path,
    2185  const char *host, const char *origin, const char *protocol,
    2186  int ietf_version_or_minus_one) LWS_WARN_DEPRECATED;
    2187 /* deprecated, use lws_client_connect_via_info() */
    2208 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    2209 lws_client_connect_extended(struct lws_context *clients, const char *address,
    2210  int port, int ssl_connection, const char *path,
    2211  const char *host, const char *origin,
    2212  const char *protocol, int ietf_version_or_minus_one,
    2213  void *userdata) LWS_WARN_DEPRECATED;
    2214 
    2240 LWS_VISIBLE LWS_EXTERN int
    2242  struct lws_vhost *vhost);
    2243 
    2244 LWS_VISIBLE LWS_EXTERN int
    2245 lws_http_client_read(struct lws *wsi, char **buf, int *len);
    2246 
    2254 LWS_VISIBLE LWS_EXTERN unsigned int
    2255 lws_http_client_http_response(struct lws *wsi);
    2256 
    2257 LWS_VISIBLE LWS_EXTERN void
    2258 lws_client_http_body_pending(struct lws *wsi, int something_left_to_send);
    2259 
    2280 
    2289 
    2322 LWS_VISIBLE LWS_EXTERN int
    2323 lws_service(struct lws_context *context, int timeout_ms);
    2324 
    2336 LWS_VISIBLE LWS_EXTERN int
    2337 lws_service_tsi(struct lws_context *context, int timeout_ms, int tsi);
    2338 
    2354 LWS_VISIBLE LWS_EXTERN void
    2355 lws_cancel_service_pt(struct lws *wsi);
    2356 
    2368 LWS_VISIBLE LWS_EXTERN void
    2369 lws_cancel_service(struct lws_context *context);
    2370 
    2397 LWS_VISIBLE LWS_EXTERN int
    2398 lws_service_fd(struct lws_context *context, struct lws_pollfd *pollfd);
    2399 
    2409 LWS_VISIBLE LWS_EXTERN int
    2410 lws_service_fd_tsi(struct lws_context *context, struct lws_pollfd *pollfd,
    2411  int tsi);
    2412 
    2430 LWS_VISIBLE LWS_EXTERN int
    2431 lws_service_adjust_timeout(struct lws_context *context, int timeout_ms, int tsi);
    2432 
    2433 /* Backwards compatibility */
    2434 #define lws_plat_service_tsi lws_service_tsi
    2435 
    2437 
    2443 
    2450 
    2462 LWS_VISIBLE LWS_EXTERN const char *
    2463 lws_get_mimetype(const char *file, const struct lws_http_mount *m);
    2464 
    2483 LWS_VISIBLE LWS_EXTERN int
    2484 lws_serve_http_file(struct lws *wsi, const char *file, const char *content_type,
    2485  const char *other_headers, int other_headers_len);
    2486 LWS_VISIBLE LWS_EXTERN int
    2487 lws_serve_http_file_fragment(struct lws *wsi);
    2489 
    2500 
    2501 enum http_status {
    2502  HTTP_STATUS_OK = 200,
    2503  HTTP_STATUS_NO_CONTENT = 204,
    2504  HTTP_STATUS_PARTIAL_CONTENT = 206,
    2505 
    2506  HTTP_STATUS_MOVED_PERMANENTLY = 301,
    2507  HTTP_STATUS_FOUND = 302,
    2508  HTTP_STATUS_SEE_OTHER = 303,
    2509 
    2510  HTTP_STATUS_BAD_REQUEST = 400,
    2511  HTTP_STATUS_UNAUTHORIZED,
    2512  HTTP_STATUS_PAYMENT_REQUIRED,
    2513  HTTP_STATUS_FORBIDDEN,
    2514  HTTP_STATUS_NOT_FOUND,
    2515  HTTP_STATUS_METHOD_NOT_ALLOWED,
    2516  HTTP_STATUS_NOT_ACCEPTABLE,
    2517  HTTP_STATUS_PROXY_AUTH_REQUIRED,
    2518  HTTP_STATUS_REQUEST_TIMEOUT,
    2519  HTTP_STATUS_CONFLICT,
    2520  HTTP_STATUS_GONE,
    2521  HTTP_STATUS_LENGTH_REQUIRED,
    2522  HTTP_STATUS_PRECONDITION_FAILED,
    2523  HTTP_STATUS_REQ_ENTITY_TOO_LARGE,
    2524  HTTP_STATUS_REQ_URI_TOO_LONG,
    2525  HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE,
    2526  HTTP_STATUS_REQ_RANGE_NOT_SATISFIABLE,
    2527  HTTP_STATUS_EXPECTATION_FAILED,
    2528 
    2529  HTTP_STATUS_INTERNAL_SERVER_ERROR = 500,
    2530  HTTP_STATUS_NOT_IMPLEMENTED,
    2531  HTTP_STATUS_BAD_GATEWAY,
    2532  HTTP_STATUS_SERVICE_UNAVAILABLE,
    2533  HTTP_STATUS_GATEWAY_TIMEOUT,
    2534  HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED,
    2535 };
    2536 
    2538  char *p;
    2539  int len;
    2540  int max_len;
    2541  int final;
    2542 };
    2543 
    2544 typedef const char *(*lws_process_html_state_cb)(void *data, int index);
    2545 
    2547  char *start;
    2548  char swallow[16];
    2549  int pos;
    2550  void *data;
    2551  const char * const *vars;
    2554  lws_process_html_state_cb replace;
    2555 };
    2556 
    2561 LWS_VISIBLE LWS_EXTERN int
    2563  struct lws_process_html_state *s);
    2565 
    2598 
    2606 struct lws_tokens {
    2607  char *token;
    2609 };
    2610 
    2611 /* enum lws_token_indexes
    2612  * these have to be kept in sync with lextable.h / minilex.c
    2613  *
    2614  * NOTE: These public enums are part of the abi. If you want to add one,
    2615  * add it at where specified so existing users are unaffected.
    2616  */
    2617 enum lws_token_indexes {
    2618  WSI_TOKEN_GET_URI = 0,
    2619  WSI_TOKEN_POST_URI = 1,
    2620  WSI_TOKEN_OPTIONS_URI = 2,
    2621  WSI_TOKEN_HOST = 3,
    2622  WSI_TOKEN_CONNECTION = 4,
    2623  WSI_TOKEN_UPGRADE = 5,
    2624  WSI_TOKEN_ORIGIN = 6,
    2625  WSI_TOKEN_DRAFT = 7,
    2626  WSI_TOKEN_CHALLENGE = 8,
    2627  WSI_TOKEN_EXTENSIONS = 9,
    2628  WSI_TOKEN_KEY1 = 10,
    2629  WSI_TOKEN_KEY2 = 11,
    2630  WSI_TOKEN_PROTOCOL = 12,
    2631  WSI_TOKEN_ACCEPT = 13,
    2632  WSI_TOKEN_NONCE = 14,
    2633  WSI_TOKEN_HTTP = 15,
    2634  WSI_TOKEN_HTTP2_SETTINGS = 16,
    2635  WSI_TOKEN_HTTP_ACCEPT = 17,
    2636  WSI_TOKEN_HTTP_AC_REQUEST_HEADERS = 18,
    2637  WSI_TOKEN_HTTP_IF_MODIFIED_SINCE = 19,
    2638  WSI_TOKEN_HTTP_IF_NONE_MATCH = 20,
    2639  WSI_TOKEN_HTTP_ACCEPT_ENCODING = 21,
    2640  WSI_TOKEN_HTTP_ACCEPT_LANGUAGE = 22,
    2641  WSI_TOKEN_HTTP_PRAGMA = 23,
    2642  WSI_TOKEN_HTTP_CACHE_CONTROL = 24,
    2643  WSI_TOKEN_HTTP_AUTHORIZATION = 25,
    2644  WSI_TOKEN_HTTP_COOKIE = 26,
    2645  WSI_TOKEN_HTTP_CONTENT_LENGTH = 27,
    2646  WSI_TOKEN_HTTP_CONTENT_TYPE = 28,
    2647  WSI_TOKEN_HTTP_DATE = 29,
    2648  WSI_TOKEN_HTTP_RANGE = 30,
    2649  WSI_TOKEN_HTTP_REFERER = 31,
    2650  WSI_TOKEN_KEY = 32,
    2651  WSI_TOKEN_VERSION = 33,
    2652  WSI_TOKEN_SWORIGIN = 34,
    2653 
    2654  WSI_TOKEN_HTTP_COLON_AUTHORITY = 35,
    2655  WSI_TOKEN_HTTP_COLON_METHOD = 36,
    2656  WSI_TOKEN_HTTP_COLON_PATH = 37,
    2657  WSI_TOKEN_HTTP_COLON_SCHEME = 38,
    2658  WSI_TOKEN_HTTP_COLON_STATUS = 39,
    2659 
    2660  WSI_TOKEN_HTTP_ACCEPT_CHARSET = 40,
    2661  WSI_TOKEN_HTTP_ACCEPT_RANGES = 41,
    2662  WSI_TOKEN_HTTP_ACCESS_CONTROL_ALLOW_ORIGIN = 42,
    2663  WSI_TOKEN_HTTP_AGE = 43,
    2664  WSI_TOKEN_HTTP_ALLOW = 44,
    2665  WSI_TOKEN_HTTP_CONTENT_DISPOSITION = 45,
    2666  WSI_TOKEN_HTTP_CONTENT_ENCODING = 46,
    2667  WSI_TOKEN_HTTP_CONTENT_LANGUAGE = 47,
    2668  WSI_TOKEN_HTTP_CONTENT_LOCATION = 48,
    2669  WSI_TOKEN_HTTP_CONTENT_RANGE = 49,
    2670  WSI_TOKEN_HTTP_ETAG = 50,
    2671  WSI_TOKEN_HTTP_EXPECT = 51,
    2672  WSI_TOKEN_HTTP_EXPIRES = 52,
    2673  WSI_TOKEN_HTTP_FROM = 53,
    2674  WSI_TOKEN_HTTP_IF_MATCH = 54,
    2675  WSI_TOKEN_HTTP_IF_RANGE = 55,
    2676  WSI_TOKEN_HTTP_IF_UNMODIFIED_SINCE = 56,
    2677  WSI_TOKEN_HTTP_LAST_MODIFIED = 57,
    2678  WSI_TOKEN_HTTP_LINK = 58,
    2679  WSI_TOKEN_HTTP_LOCATION = 59,
    2680  WSI_TOKEN_HTTP_MAX_FORWARDS = 60,
    2681  WSI_TOKEN_HTTP_PROXY_AUTHENTICATE = 61,
    2682  WSI_TOKEN_HTTP_PROXY_AUTHORIZATION = 62,
    2683  WSI_TOKEN_HTTP_REFRESH = 63,
    2684  WSI_TOKEN_HTTP_RETRY_AFTER = 64,
    2685  WSI_TOKEN_HTTP_SERVER = 65,
    2686  WSI_TOKEN_HTTP_SET_COOKIE = 66,
    2687  WSI_TOKEN_HTTP_STRICT_TRANSPORT_SECURITY = 67,
    2688  WSI_TOKEN_HTTP_TRANSFER_ENCODING = 68,
    2689  WSI_TOKEN_HTTP_USER_AGENT = 69,
    2690  WSI_TOKEN_HTTP_VARY = 70,
    2691  WSI_TOKEN_HTTP_VIA = 71,
    2692  WSI_TOKEN_HTTP_WWW_AUTHENTICATE = 72,
    2693 
    2694  WSI_TOKEN_PATCH_URI = 73,
    2695  WSI_TOKEN_PUT_URI = 74,
    2696  WSI_TOKEN_DELETE_URI = 75,
    2697 
    2698  WSI_TOKEN_HTTP_URI_ARGS = 76,
    2699  WSI_TOKEN_PROXY = 77,
    2700  WSI_TOKEN_HTTP_X_REAL_IP = 78,
    2701  WSI_TOKEN_HTTP1_0 = 79,
    2702  WSI_TOKEN_X_FORWARDED_FOR = 80,
    2703 
    2704  /****** add new things just above ---^ ******/
    2705 
    2706  /* use token storage to stash these internally, not for
    2707  * user use */
    2708 
    2709  _WSI_TOKEN_CLIENT_SENT_PROTOCOLS,
    2710  _WSI_TOKEN_CLIENT_PEER_ADDRESS,
    2711  _WSI_TOKEN_CLIENT_URI,
    2712  _WSI_TOKEN_CLIENT_HOST,
    2713  _WSI_TOKEN_CLIENT_ORIGIN,
    2714  _WSI_TOKEN_CLIENT_METHOD,
    2715 
    2716  /* always last real token index*/
    2717  WSI_TOKEN_COUNT,
    2718 
    2719  /* parser state additions, no storage associated */
    2720  WSI_TOKEN_NAME_PART,
    2721  WSI_TOKEN_SKIPPING,
    2722  WSI_TOKEN_SKIPPING_SAW_CR,
    2723  WSI_PARSING_COMPLETE,
    2724  WSI_INIT_TOKEN_MUXURL,
    2725 };
    2726 
    2728  unsigned short token_limit[WSI_TOKEN_COUNT];
    2729 };
    2730 
    2736 LWS_VISIBLE LWS_EXTERN const unsigned char *
    2737 lws_token_to_string(enum lws_token_indexes token);
    2738 
    2739 
    2748 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2749 lws_hdr_total_length(struct lws *wsi, enum lws_token_indexes h);
    2750 
    2760 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2761 lws_hdr_fragment_length(struct lws *wsi, enum lws_token_indexes h, int frag_idx);
    2762 
    2776 LWS_VISIBLE LWS_EXTERN int
    2777 lws_hdr_copy(struct lws *wsi, char *dest, int len, enum lws_token_indexes h);
    2778 
    2796 LWS_VISIBLE LWS_EXTERN int
    2797 lws_hdr_copy_fragment(struct lws *wsi, char *dest, int len,
    2798  enum lws_token_indexes h, int frag_idx);
    2799 
    2810 LWS_VISIBLE LWS_EXTERN const char *
    2811 lws_get_urlarg_by_name(struct lws *wsi, const char *name, char *buf, int len);
    2813 
    2828 
    2839 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2840 lws_add_http_header_status(struct lws *wsi,
    2841  unsigned int code, unsigned char **p,
    2842  unsigned char *end);
    2855 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2856 lws_add_http_header_by_name(struct lws *wsi, const unsigned char *name,
    2857  const unsigned char *value, int length,
    2858  unsigned char **p, unsigned char *end);
    2872 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2873 lws_add_http_header_by_token(struct lws *wsi, enum lws_token_indexes token,
    2874  const unsigned char *value, int length,
    2875  unsigned char **p, unsigned char *end);
    2886 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2887 lws_add_http_header_content_length(struct lws *wsi,
    2888  unsigned long content_length,
    2889  unsigned char **p, unsigned char *end);
    2899 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2900 lws_finalize_http_header(struct lws *wsi, unsigned char **p,
    2901  unsigned char *end);
    2903 
    2922 
    2932 };
    2933 
    2947 typedef int (*lws_spa_fileupload_cb)(void *data, const char *name,
    2948  const char *filename, char *buf, int len,
    2949  enum lws_spa_fileupload_states state);
    2950 
    2953 struct lws_spa;
    2954 
    2973 LWS_VISIBLE LWS_EXTERN struct lws_spa *
    2974 lws_spa_create(struct lws *wsi, const char * const *param_names,
    2975  int count_params, int max_storage, lws_spa_fileupload_cb opt_cb,
    2976  void *opt_data);
    2977 
    2985 LWS_VISIBLE LWS_EXTERN int
    2986 lws_spa_process(struct lws_spa *spa, const char *in, int len);
    2987 
    2993 LWS_VISIBLE LWS_EXTERN int
    2994 lws_spa_finalize(struct lws_spa *spa);
    2995 
    3002 LWS_VISIBLE LWS_EXTERN int
    3003 lws_spa_get_length(struct lws_spa *spa, int n);
    3004 
    3010 LWS_VISIBLE LWS_EXTERN const char *
    3011 lws_spa_get_string(struct lws_spa *spa, int n);
    3012 
    3018 LWS_VISIBLE LWS_EXTERN int
    3019 lws_spa_destroy(struct lws_spa *spa);
    3021 
    3032 
    3043 LWS_VISIBLE LWS_EXTERN const char *
    3044 lws_urlencode(char *escaped, const char *string, int len);
    3045 
    3046 /*
    3047  * URLDECODE 1 / 2
    3048  *
    3049  * This simple urldecode only operates until the first '\0' and requires the
    3050  * data to exist all at once
    3051  */
    3064 LWS_VISIBLE LWS_EXTERN int
    3065 lws_urldecode(char *string, const char *escaped, int len);
    3067 
    3076 LWS_VISIBLE LWS_EXTERN int
    3077 lws_return_http_status(struct lws *wsi, unsigned int code,
    3078  const char *html_body);
    3079 
    3090 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3091 lws_http_redirect(struct lws *wsi, int code, const unsigned char *loc, int len,
    3092  unsigned char **p, unsigned char *end);
    3093 
    3102 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3103 lws_http_transaction_completed(struct lws *wsi);
    3105 
    3113 
    3124 LWS_VISIBLE LWS_EXTERN const char *
    3125 lws_sql_purify(char *escaped, const char *string, int len);
    3126 
    3137 LWS_VISIBLE LWS_EXTERN const char *
    3138 lws_json_purify(char *escaped, const char *string, int len);
    3140 
    3147 
    3149 #ifdef LWS_USE_LIBEV
    3150 typedef void (lws_ev_signal_cb_t)(EV_P_ struct ev_signal *w, int revents);
    3151 
    3152 LWS_VISIBLE LWS_EXTERN int
    3153 lws_ev_sigint_cfg(struct lws_context *context, int use_ev_sigint,
    3154  lws_ev_signal_cb_t *cb);
    3155 
    3156 LWS_VISIBLE LWS_EXTERN int
    3157 lws_ev_initloop(struct lws_context *context, struct ev_loop *loop, int tsi);
    3158 
    3159 LWS_VISIBLE LWS_EXTERN void
    3160 lws_ev_sigint_cb(struct ev_loop *loop, struct ev_signal *watcher, int revents);
    3161 #endif /* LWS_USE_LIBEV */
    3162 
    3164 
    3171 #ifdef LWS_USE_LIBUV
    3173 LWS_VISIBLE LWS_EXTERN int
    3174 lws_uv_sigint_cfg(struct lws_context *context, int use_uv_sigint,
    3175  uv_signal_cb cb);
    3176 
    3177 LWS_VISIBLE LWS_EXTERN void
    3178 lws_libuv_run(const struct lws_context *context, int tsi);
    3179 
    3180 LWS_VISIBLE LWS_EXTERN void
    3181 lws_libuv_stop(struct lws_context *context);
    3182 
    3183 LWS_VISIBLE LWS_EXTERN void
    3184 lws_libuv_stop_without_kill(const struct lws_context *context, int tsi);
    3185 
    3186 LWS_VISIBLE LWS_EXTERN int
    3187 lws_uv_initloop(struct lws_context *context, uv_loop_t *loop, int tsi);
    3188 
    3189 LWS_VISIBLE LWS_EXTERN uv_loop_t *
    3190 lws_uv_getloop(struct lws_context *context, int tsi);
    3191 
    3192 LWS_VISIBLE LWS_EXTERN void
    3193 lws_uv_sigint_cb(uv_signal_t *watcher, int signum);
    3194 #endif /* LWS_USE_LIBUV */
    3195 
    3202 
    3203 /*
    3204  * NOTE: These public enums are part of the abi. If you want to add one,
    3205  * add it at where specified so existing users are unaffected.
    3206  */
    3207 enum pending_timeout {
    3208  NO_PENDING_TIMEOUT = 0,
    3209  PENDING_TIMEOUT_AWAITING_PROXY_RESPONSE = 1,
    3210  PENDING_TIMEOUT_AWAITING_CONNECT_RESPONSE = 2,
    3211  PENDING_TIMEOUT_ESTABLISH_WITH_SERVER = 3,
    3212  PENDING_TIMEOUT_AWAITING_SERVER_RESPONSE = 4,
    3213  PENDING_TIMEOUT_AWAITING_PING = 5,
    3214  PENDING_TIMEOUT_CLOSE_ACK = 6,
    3215  PENDING_TIMEOUT_AWAITING_EXTENSION_CONNECT_RESPONSE = 7,
    3216  PENDING_TIMEOUT_SENT_CLIENT_HANDSHAKE = 8,
    3217  PENDING_TIMEOUT_SSL_ACCEPT = 9,
    3218  PENDING_TIMEOUT_HTTP_CONTENT = 10,
    3219  PENDING_TIMEOUT_AWAITING_CLIENT_HS_SEND = 11,
    3220  PENDING_FLUSH_STORED_SEND_BEFORE_CLOSE = 12,
    3221  PENDING_TIMEOUT_SHUTDOWN_FLUSH = 13,
    3222  PENDING_TIMEOUT_CGI = 14,
    3223  PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE = 15,
    3224  PENDING_TIMEOUT_WS_PONG_CHECK_SEND_PING = 16,
    3225  PENDING_TIMEOUT_WS_PONG_CHECK_GET_PONG = 17,
    3226  PENDING_TIMEOUT_CLIENT_ISSUE_PAYLOAD = 18,
    3227 
    3228  /****** add new things just above ---^ ******/
    3229 };
    3230 
    3240 LWS_VISIBLE LWS_EXTERN void
    3241 lws_set_timeout(struct lws *wsi, enum pending_timeout reason, int secs);
    3243 
    3249 #if !defined(LWS_SIZEOFPTR)
    3250 #define LWS_SIZEOFPTR (sizeof (void *))
    3251 #endif
    3252 #if !defined(u_int64_t)
    3253 #define u_int64_t unsigned long long
    3254 #endif
    3255 
    3256 #if defined(__x86_64__)
    3257 #define _LWS_PAD_SIZE 16 /* Intel recommended for best performance */
    3258 #else
    3259 #define _LWS_PAD_SIZE LWS_SIZEOFPTR /* Size of a pointer on the target arch */
    3260 #endif
    3261 #define _LWS_PAD(n) (((n) % _LWS_PAD_SIZE) ? \
    3262  ((n) + (_LWS_PAD_SIZE - ((n) % _LWS_PAD_SIZE))) : (n))
    3263 #define LWS_PRE _LWS_PAD(4 + 10)
    3264 /* used prior to 1.7 and retained for backward compatibility */
    3265 #define LWS_SEND_BUFFER_PRE_PADDING LWS_PRE
    3266 #define LWS_SEND_BUFFER_POST_PADDING 0
    3267 
    3268 /*
    3269  * NOTE: These public enums are part of the abi. If you want to add one,
    3270  * add it at where specified so existing users are unaffected.
    3271  */
    3286  /* LWS_WRITE_CLOSE is handled by lws_close_reason() */
    3287  LWS_WRITE_PING = 5,
    3288  LWS_WRITE_PONG = 6,
    3289 
    3290  /* Same as write_http but we know this write ends the transaction */
    3291  LWS_WRITE_HTTP_FINAL = 7,
    3292 
    3293  /* HTTP2 */
    3294 
    3302  /****** add new things just above ---^ ******/
    3303 
    3304  /* flags */
    3305 
    3313 };
    3314 
    3315 
    3402 LWS_VISIBLE LWS_EXTERN int
    3403 lws_write(struct lws *wsi, unsigned char *buf, size_t len,
    3404  enum lws_write_protocol protocol);
    3405 
    3406 /* helper for case where buffer may be const */
    3407 #define lws_write_http(wsi, buf, len) \
    3408  lws_write(wsi, (unsigned char *)(buf), len, LWS_WRITE_HTTP)
    3409 
    3429 
    3442 LWS_VISIBLE LWS_EXTERN int
    3443 lws_callback_on_writable(struct lws *wsi);
    3444 
    3458 LWS_VISIBLE LWS_EXTERN int
    3459 lws_callback_on_writable_all_protocol(const struct lws_context *context,
    3460  const struct lws_protocols *protocol);
    3461 
    3475 LWS_VISIBLE LWS_EXTERN int
    3476 lws_callback_on_writable_all_protocol_vhost(const struct lws_vhost *vhost,
    3477  const struct lws_protocols *protocol);
    3478 
    3491 LWS_VISIBLE LWS_EXTERN int
    3492 lws_callback_all_protocol(struct lws_context *context,
    3493  const struct lws_protocols *protocol, int reason);
    3494 
    3507 LWS_VISIBLE LWS_EXTERN int
    3508 lws_callback_all_protocol_vhost(struct lws_vhost *vh,
    3509  const struct lws_protocols *protocol, int reason);
    3510 
    3524 LWS_VISIBLE LWS_EXTERN int
    3525 lws_callback_vhost_protocols(struct lws *wsi, int reason, void *in, int len);
    3526 
    3527 LWS_VISIBLE LWS_EXTERN int
    3528 lws_callback_http_dummy(struct lws *wsi, enum lws_callback_reasons reason,
    3529  void *user, void *in, size_t len);
    3530 
    3538 LWS_VISIBLE LWS_EXTERN int
    3539 lws_get_socket_fd(struct lws *wsi);
    3540 
    3562 LWS_VISIBLE LWS_EXTERN size_t
    3563 lws_get_peer_write_allowance(struct lws *wsi);
    3565 
    3576 LWS_VISIBLE LWS_EXTERN int
    3577 lws_rx_flow_control(struct lws *wsi, int enable);
    3578 
    3588 LWS_VISIBLE LWS_EXTERN void
    3589 lws_rx_flow_allow_all_protocol(const struct lws_context *context,
    3590  const struct lws_protocols *protocol);
    3591 
    3608 LWS_VISIBLE LWS_EXTERN size_t
    3609 lws_remaining_packet_payload(struct lws *wsi);
    3610 
    3611 
    3620 
    3634 LWS_VISIBLE LWS_EXTERN struct lws *
    3635 lws_adopt_socket(struct lws_context *context, lws_sockfd_type accept_fd);
    3648 LWS_VISIBLE LWS_EXTERN struct lws *
    3649 lws_adopt_socket_vhost(struct lws_vhost *vh, lws_sockfd_type accept_fd);
    3673 LWS_VISIBLE LWS_EXTERN struct lws *
    3674 lws_adopt_socket_readbuf(struct lws_context *context, lws_sockfd_type accept_fd,
    3675  const char *readbuf, size_t len);
    3699 LWS_VISIBLE LWS_EXTERN struct lws *
    3700 lws_adopt_socket_vhost_readbuf(struct lws_vhost *vhost, lws_sockfd_type accept_fd,
    3701  const char *readbuf, size_t len);
    3703 
    3709 
    3720 LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT
    3721 lws_canonical_hostname(struct lws_context *context);
    3722 
    3737 LWS_VISIBLE LWS_EXTERN void
    3738 lws_get_peer_addresses(struct lws *wsi, lws_sockfd_type fd, char *name,
    3739  int name_len, char *rip, int rip_len);
    3740 
    3751 LWS_VISIBLE LWS_EXTERN const char *
    3752 lws_get_peer_simple(struct lws *wsi, char *name, int namelen);
    3753 #ifndef LWS_WITH_ESP8266
    3754 
    3765 LWS_VISIBLE LWS_EXTERN int
    3766 lws_interface_to_sa(int ipv6, const char *ifname, struct sockaddr_in *addr,
    3767  size_t addrlen);
    3769 #endif
    3770 
    3776 
    3789 LWS_VISIBLE LWS_EXTERN int
    3790 lws_snprintf(char *str, size_t size, const char *format, ...);
    3791 
    3803 LWS_VISIBLE LWS_EXTERN int
    3804 lws_get_random(struct lws_context *context, void *buf, int len);
    3812 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3813 lws_daemonize(const char *_lock_path);
    3819 LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT
    3821 
    3828 LWS_VISIBLE LWS_EXTERN void *
    3829 lws_wsi_user(struct lws *wsi);
    3830 
    3842 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3843 lws_parse_uri(char *p, const char **prot, const char **ads, int *port,
    3844  const char **path);
    3845 
    3849 LWS_VISIBLE LWS_EXTERN unsigned long
    3850 lws_now_secs(void);
    3851 
    3861 LWS_VISIBLE LWS_EXTERN struct lws_context * LWS_WARN_UNUSED_RESULT
    3862 lws_get_context(const struct lws *wsi);
    3863 
    3873 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3874 lws_get_count_threads(struct lws_context *context);
    3875 
    3883 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    3884 lws_get_parent(const struct lws *wsi);
    3885 
    3892 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    3893 lws_get_child(const struct lws *wsi);
    3894 
    3895 
    3896 /*
    3897  * \deprecated DEPRECATED Note: this is not normally needed as a user api.
    3898  * It's provided in case it is
    3899  * useful when integrating with other app poll loop service code.
    3900  */
    3901 LWS_VISIBLE LWS_EXTERN int
    3902 lws_read(struct lws *wsi, unsigned char *buf, size_t len);
    3903 
    3911 LWS_VISIBLE LWS_EXTERN void
    3912 lws_set_allocator(void *(*realloc)(void *ptr, size_t size));
    3914 
    3920 
    3927 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3928 lws_send_pipe_choked(struct lws *wsi);
    3929 
    3934 LWS_VISIBLE LWS_EXTERN int
    3935 lws_is_final_fragment(struct lws *wsi);
    3936 
    3941 LWS_VISIBLE LWS_EXTERN unsigned char
    3942 lws_get_reserved_bits(struct lws *wsi);
    3943 
    3960 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3961 lws_partial_buffered(struct lws *wsi);
    3962 
    3972 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3973 lws_frame_is_binary(struct lws *wsi);
    3974 
    3983 LWS_VISIBLE LWS_EXTERN int
    3984 lws_is_ssl(struct lws *wsi);
    3989 LWS_VISIBLE LWS_EXTERN int
    3990 lws_is_cgi(struct lws *wsi);
    3991 
    3992 #ifdef LWS_OPENSSL_SUPPORT
    3993 
    3999 LWS_VISIBLE LWS_EXTERN SSL*
    4000 lws_get_ssl(struct lws *wsi);
    4001 #endif
    4002 
    4004 
    4010 #ifdef LWS_SHA1_USE_OPENSSL_NAME
    4012 #define lws_SHA1 SHA1
    4013 #else
    4014 
    4023 LWS_VISIBLE LWS_EXTERN unsigned char *
    4024 lws_SHA1(const unsigned char *d, size_t n, unsigned char *md);
    4025 #endif
    4026 
    4036 LWS_VISIBLE LWS_EXTERN int
    4037 lws_b64_encode_string(const char *in, int in_len, char *out, int out_size);
    4047 LWS_VISIBLE LWS_EXTERN int
    4048 lws_b64_decode_string(const char *in, char *out, int out_size);
    4050 
    4051 
    4061 #ifdef LWS_WITH_CGI
    4062 enum lws_enum_stdinouterr {
    4063  LWS_STDIN = 0,
    4064  LWS_STDOUT = 1,
    4065  LWS_STDERR = 2,
    4066 };
    4067 
    4068 enum lws_cgi_hdr_state {
    4069  LCHS_HEADER,
    4070  LCHS_CR1,
    4071  LCHS_LF1,
    4072  LCHS_CR2,
    4073  LCHS_LF2,
    4074  LHCS_PAYLOAD,
    4075  LCHS_SINGLE_0A,
    4076 };
    4077 
    4079  struct lws **stdwsi;
    4080  enum lws_enum_stdinouterr ch;
    4081  unsigned char *data;
    4082  enum lws_cgi_hdr_state hdr_state;
    4083  int len;
    4084 };
    4085 
    4086 
    4096 LWS_VISIBLE LWS_EXTERN int
    4097 lws_cgi(struct lws *wsi, const char * const *exec_array,
    4098  int script_uri_path_len, int timeout_secs,
    4099  const struct lws_protocol_vhost_options *mp_cgienv);
    4100 
    4106 LWS_VISIBLE LWS_EXTERN int
    4107 lws_cgi_write_split_stdout_headers(struct lws *wsi);
    4108 
    4114 LWS_VISIBLE LWS_EXTERN int
    4115 lws_cgi_kill(struct lws *wsi);
    4116 #endif
    4117 
    4119 
    4136 
    4143  lws_filefd_type (*open)(struct lws *wsi, const char *filename,
    4144  unsigned long *filelen, int flags);
    4148  int (*close)(struct lws *wsi, lws_filefd_type fd);
    4150  unsigned long (*seek_cur)(struct lws *wsi, lws_filefd_type fd,
    4151  long offset_from_cur_pos);
    4153  int (*read)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    4154  unsigned char *buf, unsigned long len);
    4156  int (*write)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    4157  unsigned char *buf, unsigned long len);
    4160  /* Add new things just above here ---^
    4161  * This is part of the ABI, don't needlessly break compatibility */
    4162 };
    4163 
    4169 LWS_VISIBLE LWS_EXTERN struct lws_plat_file_ops * LWS_WARN_UNUSED_RESULT
    4170 lws_get_fops(struct lws_context *context);
    4171 
    4180 static LWS_INLINE lws_filefd_type LWS_WARN_UNUSED_RESULT
    4181 lws_plat_file_open(struct lws *wsi, const char *filename,
    4182  unsigned long *filelen, int flags)
    4183 {
    4184  return lws_get_fops(lws_get_context(wsi))->open(wsi, filename,
    4185  filelen, flags);
    4186 }
    4187 
    4194 static LWS_INLINE int
    4195 lws_plat_file_close(struct lws *wsi, lws_filefd_type fd)
    4196 {
    4197  return lws_get_fops(lws_get_context(wsi))->close(wsi, fd);
    4198 }
    4199 
    4207 static LWS_INLINE unsigned long
    4208 lws_plat_file_seek_cur(struct lws *wsi, lws_filefd_type fd, long offset)
    4209 {
    4210  return lws_get_fops(lws_get_context(wsi))->seek_cur(wsi, fd, offset);
    4211 }
    4221 static LWS_INLINE int LWS_WARN_UNUSED_RESULT
    4222 lws_plat_file_read(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    4223  unsigned char *buf, unsigned long len)
    4224 {
    4225  return lws_get_fops(lws_get_context(wsi))->read(wsi, fd, amount, buf,
    4226  len);
    4227 }
    4237 static LWS_INLINE int LWS_WARN_UNUSED_RESULT
    4238 lws_plat_file_write(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    4239  unsigned char *buf, unsigned long len)
    4240 {
    4241  return lws_get_fops(lws_get_context(wsi))->write(wsi, fd, amount, buf,
    4242  len);
    4243 }
    4245 
    4277 #ifdef LWS_WITH_SMTP
    4278 
    4290 };
    4291 
    4293 struct lws_email {
    4294  void *data;
    4296  uv_loop_t *loop;
    4299  char email_smtp_ip[32];
    4300  char email_helo[32];
    4301  char email_from[100];
    4302  char email_to[100];
    4304  unsigned int max_content_size;
    4307  /* Fill all the callbacks before init */
    4308 
    4309  int (*on_next)(struct lws_email *email);
    4314  int (*on_sent)(struct lws_email *email);
    4319  int (*on_get_body)(struct lws_email *email, char *buf, int len);
    4325  /* private things */
    4326  uv_timer_t timeout_email;
    4328  uv_connect_t email_connect_req;
    4329  uv_tcp_t email_client;
    4331  char email_buf[256];
    4332  char *content;
    4333 };
    4334 
    4344 LWS_VISIBLE LWS_EXTERN int
    4345 lws_email_init(struct lws_email *email, uv_loop_t *loop, int max_content);
    4346 
    4355 LWS_VISIBLE LWS_EXTERN void
    4356 lws_email_check(struct lws_email *email);
    4364 LWS_VISIBLE LWS_EXTERN void
    4365 lws_email_destroy(struct lws_email *email);
    4366 
    4367 #endif
    4368 
    4369 
    4370 #ifdef __cplusplus
    4371 }
    4372 #endif
    4373 
    4374 #endif
    LWS_VISIBLE LWS_EXTERN int lws_spa_destroy(struct lws_spa *spa)
    +Go to the documentation of this file.
    1 /*
    2  * libwebsockets - small server side websockets and web server implementation
    3  *
    4  * Copyright (C) 2010-2016 Andy Green <andy@warmcat.com>
    5  *
    6  * This library is free software; you can redistribute it and/or
    7  * modify it under the terms of the GNU Lesser General Public
    8  * License as published by the Free Software Foundation:
    9  * version 2.1 of the License.
    10  *
    11  * This library is distributed in the hope that it will be useful,
    12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    14  * Lesser General Public License for more details.
    15  *
    16  * You should have received a copy of the GNU Lesser General Public
    17  * License along with this library; if not, write to the Free Software
    18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
    19  * MA 02110-1301 USA
    20  */
    21 
    24 #ifndef LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C
    25 #define LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C
    26 
    27 #ifdef __cplusplus
    28 #include <cstddef>
    29 #include <cstdarg>
    30 #ifdef MBED_OPERATORS
    31 #include "mbed-drivers/mbed.h"
    32 #include "sal-iface-eth/EthernetInterface.h"
    33 #include "sockets/TCPListener.h"
    34 #include "sal-stack-lwip/lwipv4_init.h"
    35 
    36 namespace {
    37 }
    38 using namespace mbed::Sockets::v0;
    39 
    40 
    41 struct sockaddr_in;
    42 struct lws;
    43 
    44 class lws_conn {
    45  public:
    46  lws_conn():
    47  ts(NULL),
    48  wsi(NULL),
    49  writeable(1),
    50  awaiting_on_writeable(0)
    51  {
    52  }
    53 
    54 public:
    55  void set_wsi(struct lws *_wsi) { wsi = _wsi; }
    56  int actual_onRX(Socket *s);
    57  void onRX(Socket *s);
    58  void onError(Socket *s, socket_error_t err);
    59  void onDisconnect(TCPStream *s);
    60  void onSent(Socket *s, uint16_t len);
    61  void serialized_writeable(struct lws *wsi);
    62 
    63 public:
    64  TCPStream *ts;
    65 
    66 public:
    67  struct lws *wsi;
    68  char writeable;
    69  char awaiting_on_writeable;
    70 };
    71 
    73 public:
    75  srv(SOCKET_STACK_LWIP_IPV4)
    76  {
    77  srv.setOnError(TCPStream::ErrorHandler_t(this,
    79  }
    80 
    81  void start(const uint16_t port);
    83 protected:
    84  void onRX(Socket *s);
    85  void onError(Socket *s, socket_error_t err);
    86  void onIncoming(TCPListener *s, void *impl);
    87  void onDisconnect(TCPStream *s);
    89 public:
    90  TCPListener srv;
    91 };
    92 
    93 #endif
    94 
    95 extern "C" {
    96 #else
    97 #include <stdarg.h>
    98 #endif
    99 
    100 #if defined(MBED_OPERATORS) || defined(LWS_WITH_ESP8266)
    101 struct sockaddr_in;
    102 #define LWS_POSIX 0
    103 #else
    104 #define LWS_POSIX 1
    105 #endif
    106 
    107 #include "lws_config.h"
    108 
    109 #if defined(WIN32) || defined(_WIN32)
    110 #ifndef WIN32_LEAN_AND_MEAN
    111 #define WIN32_LEAN_AND_MEAN
    112 #endif
    113 
    114 #include <winsock2.h>
    115 #include <ws2tcpip.h>
    116 #include <stddef.h>
    117 #include <basetsd.h>
    118 #ifndef _WIN32_WCE
    119 #include <fcntl.h>
    120 #else
    121 #define _O_RDONLY 0x0000
    122 #define O_RDONLY _O_RDONLY
    123 #endif
    124 
    125 // Visual studio older than 2015 and WIN_CE has only _stricmp
    126 #if (defined(_MSC_VER) && _MSC_VER < 1900) || defined(_WIN32_WCE)
    127 #define strcasecmp _stricmp
    128 #elif !defined(__MINGW32__)
    129 #define strcasecmp stricmp
    130 #endif
    131 #define getdtablesize() 30000
    132 
    133 #define LWS_INLINE __inline
    134 #define LWS_VISIBLE
    135 #define LWS_WARN_UNUSED_RESULT
    136 #define LWS_WARN_DEPRECATED
    137 
    138 #ifdef LWS_DLL
    139 #ifdef LWS_INTERNAL
    140 #define LWS_EXTERN extern __declspec(dllexport)
    141 #else
    142 #define LWS_EXTERN extern __declspec(dllimport)
    143 #endif
    144 #else
    145 #define LWS_EXTERN
    146 #endif
    147 
    148 #define LWS_INVALID_FILE INVALID_HANDLE_VALUE
    149 #define LWS_O_RDONLY _O_RDONLY
    150 
    151 #if !defined(__MINGW32__) && (!defined(_MSC_VER) || _MSC_VER < 1900) /* Visual Studio 2015 already defines this in <stdio.h> */
    152 #define lws_snprintf _snprintf
    153 #endif
    154 
    155 #ifndef __func__
    156 #define __func__ __FUNCTION__
    157 #endif
    158 
    159 #else /* NOT WIN32 */
    160 #include <unistd.h>
    161 
    162 #if defined(__NetBSD__) || defined(__FreeBSD__)
    163 #include <netinet/in.h>
    164 #endif
    165 
    166 #define LWS_INLINE inline
    167 #define LWS_O_RDONLY O_RDONLY
    168 
    169 #if !defined(MBED_OPERATORS) && !defined(LWS_WITH_ESP8266) && !defined(OPTEE_TA)
    170 #include <poll.h>
    171 #include <netdb.h>
    172 #define LWS_INVALID_FILE -1
    173 #else
    174 #define getdtablesize() (20)
    175 #define LWS_INVALID_FILE NULL
    176 #endif
    177 
    178 #if defined(__GNUC__)
    179 
    180 /* warn_unused_result attribute only supported by GCC 3.4 or later */
    181 #if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
    182 #define LWS_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
    183 #else
    184 #define LWS_WARN_UNUSED_RESULT
    185 #endif
    186 
    187 #define LWS_VISIBLE __attribute__((visibility("default")))
    188 #define LWS_WARN_DEPRECATED __attribute__ ((deprecated))
    189 #define LWS_FORMAT(string_index) __attribute__ ((format(printf, string_index, string_index+1)))
    190 #else
    191 #define LWS_VISIBLE
    192 #define LWS_WARN_UNUSED_RESULT
    193 #define LWS_WARN_DEPRECATED
    194 #define LWS_FORMAT
    195 #endif
    196 
    197 #if defined(__ANDROID__)
    198 #include <unistd.h>
    199 #define getdtablesize() sysconf(_SC_OPEN_MAX)
    200 #endif
    201 
    202 #endif
    203 
    204 #ifdef LWS_USE_LIBEV
    205 #include <ev.h>
    206 #endif /* LWS_USE_LIBEV */
    207 #ifdef LWS_USE_LIBUV
    208 #include <uv.h>
    209 #ifdef LWS_HAVE_UV_VERSION_H
    210 #include <uv-version.h>
    211 #endif
    212 #endif /* LWS_USE_LIBUV */
    213 
    214 #ifndef LWS_EXTERN
    215 #define LWS_EXTERN extern
    216 #endif
    217 
    218 #ifdef _WIN32
    219 #define random rand
    220 #else
    221 #if !defined(OPTEE_TA)
    222 #include <sys/time.h>
    223 #include <unistd.h>
    224 #endif
    225 #endif
    226 
    227 #ifdef LWS_OPENSSL_SUPPORT
    228 
    229 #ifdef USE_WOLFSSL
    230 #ifdef USE_OLD_CYASSL
    231 #include <cyassl/openssl/ssl.h>
    232 #include <cyassl/error-ssl.h>
    233 #else
    234 #include <wolfssl/openssl/ssl.h>
    235 #include <wolfssl/error-ssl.h>
    236 #endif /* not USE_OLD_CYASSL */
    237 #else
    238 #if defined(LWS_USE_POLARSSL)
    239 #include <polarssl/ssl.h>
    241  x509_crt ca;
    242  x509_crt certificate;
    243  rsa_context key;
    244 };
    245 typedef struct lws_polarssl_context SSL_CTX;
    246 typedef ssl_context SSL;
    247 #else
    248 #if defined(LWS_USE_MBEDTLS)
    249 #include <mbedtls/ssl.h>
    250 #else
    251 #include <openssl/ssl.h>
    252 #include <openssl/err.h>
    253 #endif /* not USE_MBEDTLS */
    254 #endif /* not USE_POLARSSL */
    255 #endif /* not USE_WOLFSSL */
    256 #endif
    257 
    258 
    259 #define CONTEXT_PORT_NO_LISTEN -1
    260 #define CONTEXT_PORT_NO_LISTEN_SERVER -2
    261 
    272 
    274 enum lws_log_levels {
    275  LLL_ERR = 1 << 0,
    276  LLL_WARN = 1 << 1,
    277  LLL_NOTICE = 1 << 2,
    278  LLL_INFO = 1 << 3,
    279  LLL_DEBUG = 1 << 4,
    280  LLL_PARSER = 1 << 5,
    281  LLL_HEADER = 1 << 6,
    282  LLL_EXT = 1 << 7,
    283  LLL_CLIENT = 1 << 8,
    284  LLL_LATENCY = 1 << 9,
    285  LLL_USER = 1 << 10,
    286 
    287  LLL_COUNT = 11 /* set to count of valid flags */
    288 };
    289 
    290 LWS_VISIBLE LWS_EXTERN void _lws_log(int filter, const char *format, ...) LWS_FORMAT(2);
    291 LWS_VISIBLE LWS_EXTERN void _lws_logv(int filter, const char *format, va_list vl);
    301 LWS_VISIBLE LWS_EXTERN int
    302 lwsl_timestamp(int level, char *p, int len);
    303 
    304 /* these guys are unconditionally included */
    305 
    306 #define lwsl_err(...) _lws_log(LLL_ERR, __VA_ARGS__)
    307 #define lwsl_user(...) _lws_log(LLL_USER, __VA_ARGS__)
    308 
    309 #if !defined(LWS_WITH_NO_LOGS)
    310 /* notice and warn are usually included by being compiled in */
    311 #define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__)
    312 #define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__)
    313 #endif
    314 /*
    315  * weaker logging can be deselected by telling CMake to build in RELEASE mode
    316  * that gets rid of the overhead of checking while keeping _warn and _err
    317  * active
    318  */
    319 
    320 #if defined(LWS_WITH_ESP8266)
    321 #undef _DEBUG
    322 #endif
    323 
    324 #ifdef _DEBUG
    325 #if defined(LWS_WITH_NO_LOGS)
    326 /* notice, warn and log are always compiled in */
    327 #define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__)
    328 #define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__)
    329 #endif
    330 #define lwsl_info(...) _lws_log(LLL_INFO, __VA_ARGS__)
    331 #define lwsl_debug(...) _lws_log(LLL_DEBUG, __VA_ARGS__)
    332 #define lwsl_parser(...) _lws_log(LLL_PARSER, __VA_ARGS__)
    333 #define lwsl_header(...) _lws_log(LLL_HEADER, __VA_ARGS__)
    334 #define lwsl_ext(...) _lws_log(LLL_EXT, __VA_ARGS__)
    335 #define lwsl_client(...) _lws_log(LLL_CLIENT, __VA_ARGS__)
    336 #define lwsl_latency(...) _lws_log(LLL_LATENCY, __VA_ARGS__)
    337 
    343 LWS_VISIBLE LWS_EXTERN void lwsl_hexdump(void *buf, size_t len);
    344 
    345 #else /* no debug */
    346 #if defined(LWS_WITH_NO_LOGS)
    347 #define lwsl_warn(...) do {} while(0)
    348 #define lwsl_notice(...) do {} while(0)
    349 #endif
    350 #define lwsl_info(...) do {} while(0)
    351 #define lwsl_debug(...) do {} while(0)
    352 #define lwsl_parser(...) do {} while(0)
    353 #define lwsl_header(...) do {} while(0)
    354 #define lwsl_ext(...) do {} while(0)
    355 #define lwsl_client(...) do {} while(0)
    356 #define lwsl_latency(...) do {} while(0)
    357 #define lwsl_hexdump(a, b)
    358 
    359 #endif
    360 
    371 LWS_VISIBLE LWS_EXTERN void
    372 lws_set_log_level(int level,
    373  void (*log_emit_function)(int level, const char *line));
    374 
    384 LWS_VISIBLE LWS_EXTERN void
    385 lwsl_emit_syslog(int level, const char *line);
    386 
    388 
    389 
    390 #include <stddef.h>
    391 
    392 #ifndef lws_container_of
    393 #define lws_container_of(P,T,M) ((T *)((char *)(P) - offsetof(T, M)))
    394 #endif
    395 
    396 
    397 struct lws;
    398 #ifndef ARRAY_SIZE
    399 #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
    400 #endif
    401 
    402 /* api change list for user code to test against */
    403 
    404 #define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_ARG
    405 
    406 /* the struct lws_protocols has the id field present */
    407 #define LWS_FEATURE_PROTOCOLS_HAS_ID_FIELD
    408 
    409 /* you can call lws_get_peer_write_allowance */
    410 #define LWS_FEATURE_PROTOCOLS_HAS_PEER_WRITE_ALLOWANCE
    411 
    412 /* extra parameter introduced in 917f43ab821 */
    413 #define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_LEN
    414 
    415 /* File operations stuff exists */
    416 #define LWS_FEATURE_FOPS
    417 
    418 
    419 #if defined(_WIN32)
    420 typedef SOCKET lws_sockfd_type;
    421 typedef HANDLE lws_filefd_type;
    422 #define lws_sockfd_valid(sfd) (!!sfd)
    423 struct lws_pollfd {
    424  lws_sockfd_type fd;
    425  SHORT events;
    426  SHORT revents;
    427 };
    428 #define LWS_POLLHUP (FD_CLOSE)
    429 #define LWS_POLLIN (FD_READ | FD_ACCEPT)
    430 #define LWS_POLLOUT (FD_WRITE)
    431 #else
    432 
    433 #if defined(MBED_OPERATORS)
    434 /* it's a class lws_conn * */
    435 typedef void * lws_sockfd_type;
    436 typedef void * lws_filefd_type;
    437 #define lws_sockfd_valid(sfd) (!!sfd)
    438 struct pollfd {
    439  lws_sockfd_type fd;
    440  short events;
    441  short revents;
    442 };
    443 #define POLLIN 0x0001
    444 #define POLLPRI 0x0002
    445 #define POLLOUT 0x0004
    446 #define POLLERR 0x0008
    447 #define POLLHUP 0x0010
    448 #define POLLNVAL 0x0020
    449 
    450 struct lws;
    451 
    452 void * mbed3_create_tcp_stream_socket(void);
    453 void mbed3_delete_tcp_stream_socket(void *sockfd);
    454 void mbed3_tcp_stream_bind(void *sock, int port, struct lws *);
    455 void mbed3_tcp_stream_accept(void *sock, struct lws *);
    456 #else
    457 #if defined(LWS_WITH_ESP8266)
    458 
    459 #include <user_interface.h>
    460 #include <espconn.h>
    461 
    462 typedef struct espconn * lws_sockfd_type;
    463 typedef void * lws_filefd_type;
    464 #define lws_sockfd_valid(sfd) (!!sfd)
    465 struct pollfd {
    466  lws_sockfd_type fd;
    467  short events;
    468  short revents;
    469 };
    470 #define POLLIN 0x0001
    471 #define POLLPRI 0x0002
    472 #define POLLOUT 0x0004
    473 #define POLLERR 0x0008
    474 #define POLLHUP 0x0010
    475 #define POLLNVAL 0x0020
    476 
    477 struct lws_vhost;
    478 
    479 lws_sockfd_type esp8266_create_tcp_listen_socket(struct lws_vhost *vh);
    480 void esp8266_tcp_stream_accept(lws_sockfd_type fd, struct lws *wsi);
    481 
    482 #include <os_type.h>
    483 #include <osapi.h>
    484 #include "ets_sys.h"
    485 
    486 int ets_snprintf(char *str, size_t size, const char *format, ...) LWS_FORMAT(3);
    487 #define snprintf ets_snprintf
    488 
    489 typedef os_timer_t uv_timer_t;
    490 typedef void uv_cb_t(uv_timer_t *);
    491 
    492 void os_timer_disarm(void *);
    493 void os_timer_setfn(os_timer_t *, os_timer_func_t *, void *);
    494 
    495 void ets_timer_arm_new(os_timer_t *, int, int, int);
    496 
    497 //void os_timer_arm(os_timer_t *, int, int);
    498 
    499 #define UV_VERSION_MAJOR 1
    500 
    501 #define lws_uv_getloop(a, b) (NULL)
    502 
    503 static inline void uv_timer_init(void *l, uv_timer_t *t)
    504 {
    505  (void)l;
    506  memset(t, 0, sizeof(*t));
    507  os_timer_disarm(t);
    508 }
    509 
    510 static inline void uv_timer_start(uv_timer_t *t, uv_cb_t *cb, int first, int rep)
    511 {
    512  os_timer_setfn(t, (os_timer_func_t *)cb, t);
    513  /* ms, repeat */
    514  os_timer_arm(t, first, !!rep);
    515 }
    516 
    517 static inline void uv_timer_stop(uv_timer_t *t)
    518 {
    519  os_timer_disarm(t);
    520 }
    521 
    522 #else
    523 typedef int lws_sockfd_type;
    524 typedef int lws_filefd_type;
    525 #define lws_sockfd_valid(sfd) (sfd >= 0)
    526 #endif
    527 #endif
    528 
    529 #define lws_pollfd pollfd
    530 #define LWS_POLLHUP (POLLHUP|POLLERR)
    531 #define LWS_POLLIN (POLLIN)
    532 #define LWS_POLLOUT (POLLOUT)
    533 #endif
    534 
    537 struct lws_pollargs {
    538  lws_sockfd_type fd;
    539  int events;
    541 };
    542 
    543 struct lws_tokens;
    544 struct lws_token_limits;
    545 
    553 
    555 /*
    556  * NOTE: These public enums are part of the abi. If you want to add one,
    557  * add it at where specified so existing users are unaffected.
    558  */
    561  LWS_CLOSE_STATUS_NOSTATUS = 0,
    623  /****** add new things just above ---^ ******/
    624 
    625  LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY = 9999,
    626 };
    627 
    640 LWS_VISIBLE LWS_EXTERN void
    641 lws_close_reason(struct lws *wsi, enum lws_close_status status,
    642  unsigned char *buf, size_t len);
    643 
    645 
    646 struct lws;
    647 struct lws_context;
    648 /* needed even with extensions disabled for create context */
    649 struct lws_extension;
    650 
    662 
    664 
    665 /*
    666  * NOTE: These public enums are part of the abi. If you want to add one,
    667  * add it at where specified so existing users are unaffected.
    668  */
    912  /* external poll() management support */
    975  LWS_CALLBACK_WS_EXT_DEFAULTS = 39,
    978  LWS_CALLBACK_CGI = 40,
    980  LWS_CALLBACK_CGI_TERMINATED = 41,
    982  LWS_CALLBACK_CGI_STDIN_DATA = 42,
    984  LWS_CALLBACK_CGI_STDIN_COMPLETED = 43,
    986  LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP = 44,
    988  LWS_CALLBACK_CLOSED_CLIENT_HTTP = 45,
    990  LWS_CALLBACK_RECEIVE_CLIENT_HTTP = 46,
    992  LWS_CALLBACK_COMPLETED_CLIENT_HTTP = 47,
    994  LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ = 48,
    996  LWS_CALLBACK_HTTP_BIND_PROTOCOL = 49,
    998  LWS_CALLBACK_HTTP_DROP_PROTOCOL = 50,
    1000  LWS_CALLBACK_CHECK_ACCESS_RIGHTS = 51,
    1002  LWS_CALLBACK_PROCESS_HTML = 52,
    1004  LWS_CALLBACK_ADD_HEADERS = 53,
    1006  LWS_CALLBACK_SESSION_INFO = 54,
    1009  LWS_CALLBACK_GS_EVENT = 55,
    1056  /****** add new things just above ---^ ******/
    1057 
    1060 };
    1061 
    1062 
    1063 
    1079 typedef int
    1080 lws_callback_function(struct lws *wsi, enum lws_callback_reasons reason,
    1081  void *user, void *in, size_t len);
    1083 
    1093 
    1095 /*
    1096  * NOTE: These public enums are part of the abi. If you want to add one,
    1097  * add it at where specified so existing users are unaffected.
    1098  */
    1099 enum lws_extension_callback_reasons {
    1100  LWS_EXT_CB_SERVER_CONTEXT_CONSTRUCT = 0,
    1101  LWS_EXT_CB_CLIENT_CONTEXT_CONSTRUCT = 1,
    1102  LWS_EXT_CB_SERVER_CONTEXT_DESTRUCT = 2,
    1103  LWS_EXT_CB_CLIENT_CONTEXT_DESTRUCT = 3,
    1104  LWS_EXT_CB_CONSTRUCT = 4,
    1105  LWS_EXT_CB_CLIENT_CONSTRUCT = 5,
    1106  LWS_EXT_CB_CHECK_OK_TO_REALLY_CLOSE = 6,
    1107  LWS_EXT_CB_CHECK_OK_TO_PROPOSE_EXTENSION = 7,
    1108  LWS_EXT_CB_DESTROY = 8,
    1109  LWS_EXT_CB_DESTROY_ANY_WSI_CLOSING = 9,
    1110  LWS_EXT_CB_ANY_WSI_ESTABLISHED = 10,
    1111  LWS_EXT_CB_PACKET_RX_PREPARSE = 11,
    1112  LWS_EXT_CB_PACKET_TX_PRESEND = 12,
    1113  LWS_EXT_CB_PACKET_TX_DO_SEND = 13,
    1114  LWS_EXT_CB_HANDSHAKE_REPLY_TX = 14,
    1115  LWS_EXT_CB_FLUSH_PENDING_TX = 15,
    1116  LWS_EXT_CB_EXTENDED_PAYLOAD_RX = 16,
    1117  LWS_EXT_CB_CAN_PROXY_CLIENT_CONNECTION = 17,
    1118  LWS_EXT_CB_1HZ = 18,
    1119  LWS_EXT_CB_REQUEST_ON_WRITEABLE = 19,
    1120  LWS_EXT_CB_IS_WRITEABLE = 20,
    1121  LWS_EXT_CB_PAYLOAD_TX = 21,
    1122  LWS_EXT_CB_PAYLOAD_RX = 22,
    1123  LWS_EXT_CB_OPTION_DEFAULT = 23,
    1124  LWS_EXT_CB_OPTION_SET = 24,
    1125  LWS_EXT_CB_OPTION_CONFIRM = 25,
    1126  LWS_EXT_CB_NAMED_OPTION_SET = 26,
    1127 
    1128  /****** add new things just above ---^ ******/
    1129 };
    1130 
    1137  /* Add new things just above here ---^
    1138  * This is part of the ABI, don't needlessly break compatibility */
    1139 };
    1140 
    1146  const char *name;
    1149  /* Add new things just above here ---^
    1150  * This is part of the ABI, don't needlessly break compatibility */
    1151 };
    1152 
    1155  const char *option_name;
    1157  const char *start;
    1158  int len;
    1159 };
    1160 
    1221 typedef int
    1222 lws_extension_callback_function(struct lws_context *context,
    1223  const struct lws_extension *ext, struct lws *wsi,
    1224  enum lws_extension_callback_reasons reason,
    1225  void *user, void *in, size_t len);
    1226 
    1229  const char *name;
    1231  const char *client_offer;
    1233  /* Add new things just above here ---^
    1234  * This is part of the ABI, don't needlessly break compatibility */
    1235 };
    1236 
    1245 LWS_VISIBLE LWS_EXTERN int
    1246 lws_set_extension_option(struct lws *wsi, const char *ext_name,
    1247  const char *opt_name, const char *opt_val);
    1248 
    1249 #ifndef LWS_NO_EXTENSIONS
    1250 /* lws_get_internal_extensions() - DEPRECATED
    1251  *
    1252  * \Deprecated There is no longer a set internal extensions table. The table is provided
    1253  * by user code along with application-specific settings. See the test
    1254  * client and server for how to do.
    1255  */
    1256 static LWS_INLINE LWS_WARN_DEPRECATED const struct lws_extension *
    1257 lws_get_internal_extensions(void) { return NULL; }
    1258 
    1269 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    1270 lws_ext_parse_options(const struct lws_extension *ext, struct lws *wsi,
    1271  void *ext_user, const struct lws_ext_options *opts,
    1272  const char *o, int len);
    1273 #endif
    1274 
    1287 LWS_EXTERN
    1289  struct lws_context *context, const struct lws_extension *ext,
    1290  struct lws *wsi, enum lws_extension_callback_reasons reason,
    1291  void *user, void *in, size_t len);
    1292 
    1293 /*
    1294  * The internal exts are part of the public abi
    1295  * If we add more extensions, publish the callback here ------v
    1296  */
    1298 
    1314 
    1319  const char *name;
    1340  unsigned int id;
    1347  void *user;
    1350  /* Add new things just above here ---^
    1351  * This is part of the ABI, don't needlessly break compatibility */
    1352 };
    1353 
    1354 struct lws_vhost;
    1355 
    1364 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
    1365 lws_vhost_name_to_protocol(struct lws_vhost *vh, const char *name);
    1366 
    1376 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
    1377 lws_get_protocol(struct lws *wsi);
    1378 
    1380 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
    1381 lws_protocol_get(struct lws *wsi) LWS_WARN_DEPRECATED;
    1382 
    1393 LWS_VISIBLE LWS_EXTERN void *
    1394 lws_protocol_vh_priv_zalloc(struct lws_vhost *vhost, const struct lws_protocols *prot,
    1395  int size);
    1396 
    1406 LWS_VISIBLE LWS_EXTERN void *
    1407 lws_protocol_vh_priv_get(struct lws_vhost *vhost, const struct lws_protocols *prot);
    1408 
    1417 LWS_VISIBLE LWS_EXTERN int
    1418 lws_finalize_startup(struct lws_context *context);
    1419 
    1420 #ifdef LWS_WITH_PLUGINS
    1421 
    1422 /* PLUGINS implies LIBUV */
    1423 
    1424 #define LWS_PLUGIN_API_MAGIC 180
    1425 
    1428  unsigned int api_magic;
    1429  const struct lws_protocols *protocols;
    1431  const struct lws_extension *extensions;
    1433 };
    1434 
    1435 typedef int (*lws_plugin_init_func)(struct lws_context *,
    1436  struct lws_plugin_capability *);
    1437 typedef int (*lws_plugin_destroy_func)(struct lws_context *);
    1438 
    1440 struct lws_plugin {
    1441  struct lws_plugin *list;
    1442 #if (UV_VERSION_MAJOR > 0)
    1443  uv_lib_t lib;
    1444 #else
    1445  void *l;
    1446 #endif
    1447  char name[64];
    1449 };
    1450 
    1451 #endif
    1452 
    1454 
    1455 
    1464 
    1466 #define LWSGS_EMAIL_CONTENT_SIZE 16384
    1467 
    1469 /* SHA-1 binary and hexified versions */
    1471 typedef struct { unsigned char bin[20]; } lwsgw_hash_bin;
    1473 typedef struct { char id[41]; } lwsgw_hash;
    1474 
    1481 };
    1482 
    1485  char username[32];
    1486  char email[100];
    1487  char ip[72];
    1488  unsigned int mask;
    1490  char session[42];
    1491 };
    1492 
    1497 };
    1498 
    1501  enum lws_gs_event event;
    1502  const char *username;
    1503  const char *email;
    1504 };
    1505 
    1507 
    1508 
    1522 
    1524 /*
    1525  * NOTE: These public enums are part of the abi. If you want to add one,
    1526  * add it at where specified so existing users are unaffected.
    1527  */
    1528 
    1532  (1 << 12),
    1539  (1 << 12),
    1555  (1 << 12),
    1560  (1 << 12),
    1591  /****** add new things just above ---^ ******/
    1592 };
    1593 
    1594 #define lws_check_opt(c, f) (((c) & (f)) == (f))
    1595 
    1606  int port;
    1611  const char *iface;
    1618  const struct lws_protocols *protocols;
    1622  const struct lws_extension *extensions;
    1630  const char *ssl_cert_filepath;
    1640  const char *ssl_ca_filepath;
    1642  const char *ssl_cipher_list;
    1646  const char *http_proxy_address;
    1649  unsigned int http_proxy_port;
    1651  int gid;
    1653  int uid;
    1655  unsigned int options;
    1657  void *user;
    1660  int ka_time;
    1670 #ifdef LWS_OPENSSL_SUPPORT
    1676 #else /* maintain structure layout either way */
    1678 #endif
    1679 
    1690  unsigned int count_threads;
    1692  unsigned int fd_limit_per_thread;
    1696  unsigned int timeout_secs;
    1701  const char *ecdh_curve;
    1703  const char *vhost_name;
    1707  const char * const *plugin_dirs;
    1716  const char *log_filepath;
    1719  const struct lws_http_mount *mounts;
    1721  const char *server_string;
    1724  unsigned int pt_serv_buf_size;
    1739  unsigned short ws_ping_pong_interval;
    1770  /* Add new things just above here ---^
    1771  * This is part of the ABI, don't needlessly break compatibility
    1772  *
    1773  * The below is to ensure later library versions with new
    1774  * members added above will see 0 (default) even if the app
    1775  * was not built against the newer headers.
    1776  */
    1777 
    1778  void *_unused[8];
    1779 };
    1780 
    1815 LWS_VISIBLE LWS_EXTERN struct lws_context *
    1817 
    1826 LWS_VISIBLE LWS_EXTERN void
    1827 lws_context_destroy(struct lws_context *context);
    1828 
    1829 LWS_VISIBLE LWS_EXTERN void
    1830 lws_context_destroy2(struct lws_context *context);
    1831 
    1832 typedef int (*lws_reload_func)(void);
    1833 
    1858 LWS_VISIBLE LWS_EXTERN void
    1859 lws_context_deprecate(struct lws_context *context, lws_reload_func cb);
    1860 
    1861 LWS_VISIBLE LWS_EXTERN int
    1862 lws_context_is_deprecated(struct lws_context *context);
    1863 
    1881 LWS_VISIBLE LWS_EXTERN int
    1882 lws_set_proxy(struct lws_vhost *vhost, const char *proxy);
    1883 
    1884 
    1885 struct lws_vhost;
    1886 
    1896 LWS_EXTERN LWS_VISIBLE struct lws_vhost *
    1897 lws_create_vhost(struct lws_context *context,
    1898  struct lws_context_creation_info *info);
    1899 
    1914 LWS_VISIBLE LWS_EXTERN int
    1915 lwsws_get_config_globals(struct lws_context_creation_info *info, const char *d,
    1916  char **config_strings, int *len);
    1917 
    1933 LWS_VISIBLE LWS_EXTERN int
    1934 lwsws_get_config_vhosts(struct lws_context *context,
    1935  struct lws_context_creation_info *info, const char *d,
    1936  char **config_strings, int *len);
    1937 
    1939 LWS_VISIBLE LWS_EXTERN struct lws_vhost *
    1940 lws_vhost_get(struct lws *wsi) LWS_WARN_DEPRECATED;
    1941 
    1947 LWS_VISIBLE LWS_EXTERN struct lws_vhost *
    1948 lws_get_vhost(struct lws *wsi);
    1949 
    1957 LWS_VISIBLE LWS_EXTERN int
    1958 lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len);
    1959 
    1967 LWS_VISIBLE LWS_EXTERN int
    1968 lws_json_dump_context(const struct lws_context *context, char *buf, int len,
    1969  int hide_vhosts);
    1970 
    1980 LWS_VISIBLE LWS_EXTERN void *
    1981 lws_context_user(struct lws_context *context);
    1982 
    1988 
    1998  const char *name;
    1999  const char *value;
    2000 };
    2001 
    2014 };
    2015 
    2023  const char *mountpoint;
    2025  const char *origin;
    2027  const char *def;
    2029  const char *protocol;
    2045  unsigned int auth_mask;
    2048  unsigned int cache_reusable:1;
    2049  unsigned int cache_revalidate:1;
    2050  unsigned int cache_intermediaries:1;
    2052  unsigned char origin_protocol;
    2053  unsigned char mountpoint_len;
    2058  /* Add new things just above here ---^
    2059  * This is part of the ABI, don't needlessly break compatibility
    2060  *
    2061  * The below is to ensure later library versions with new
    2062  * members added above will see 0 (default) even if the app
    2063  * was not built against the newer headers.
    2064  */
    2065 
    2066  void *_unused[2];
    2067 };
    2070 
    2076 
    2084  LCCSCF_USE_SSL = (1 << 0),
    2085  LCCSCF_ALLOW_SELFSIGNED = (1 << 1),
    2086  LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK = (1 << 2),
    2087  LCCSCF_ALLOW_EXPIRED = (1 << 3)
    2088 };
    2089 
    2094  struct lws_context *context;
    2096  const char *address;
    2098  int port;
    2102  const char *path;
    2104  const char *host;
    2106  const char *origin;
    2108  const char *protocol;
    2112  void *userdata;
    2114  const void *client_exts;
    2116  const char *method;
    2119  struct lws *parent_wsi;
    2123  const char *uri_replace_from;
    2126  const char *uri_replace_to;
    2128  struct lws_vhost *vhost;
    2130  struct lws **pwsi;
    2142  /* Add new things just above here ---^
    2143  * This is part of the ABI, don't needlessly break compatibility
    2144  *
    2145  * The below is to ensure later library versions with new
    2146  * members added above will see 0 (default) even if the app
    2147  * was not built against the newer headers.
    2148  */
    2149 
    2150  void *_unused[4];
    2151 };
    2152 
    2160 LWS_VISIBLE LWS_EXTERN struct lws *
    2162 
    2183 /* deprecated, use lws_client_connect_via_info() */
    2184 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    2185 lws_client_connect(struct lws_context *clients, const char *address,
    2186  int port, int ssl_connection, const char *path,
    2187  const char *host, const char *origin, const char *protocol,
    2188  int ietf_version_or_minus_one) LWS_WARN_DEPRECATED;
    2189 /* deprecated, use lws_client_connect_via_info() */
    2210 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    2211 lws_client_connect_extended(struct lws_context *clients, const char *address,
    2212  int port, int ssl_connection, const char *path,
    2213  const char *host, const char *origin,
    2214  const char *protocol, int ietf_version_or_minus_one,
    2215  void *userdata) LWS_WARN_DEPRECATED;
    2216 
    2242 LWS_VISIBLE LWS_EXTERN int
    2244  struct lws_vhost *vhost);
    2245 
    2246 LWS_VISIBLE LWS_EXTERN int
    2247 lws_http_client_read(struct lws *wsi, char **buf, int *len);
    2248 
    2256 LWS_VISIBLE LWS_EXTERN unsigned int
    2257 lws_http_client_http_response(struct lws *wsi);
    2258 
    2259 LWS_VISIBLE LWS_EXTERN void
    2260 lws_client_http_body_pending(struct lws *wsi, int something_left_to_send);
    2261 
    2282 
    2291 
    2324 LWS_VISIBLE LWS_EXTERN int
    2325 lws_service(struct lws_context *context, int timeout_ms);
    2326 
    2338 LWS_VISIBLE LWS_EXTERN int
    2339 lws_service_tsi(struct lws_context *context, int timeout_ms, int tsi);
    2340 
    2356 LWS_VISIBLE LWS_EXTERN void
    2357 lws_cancel_service_pt(struct lws *wsi);
    2358 
    2370 LWS_VISIBLE LWS_EXTERN void
    2371 lws_cancel_service(struct lws_context *context);
    2372 
    2399 LWS_VISIBLE LWS_EXTERN int
    2400 lws_service_fd(struct lws_context *context, struct lws_pollfd *pollfd);
    2401 
    2411 LWS_VISIBLE LWS_EXTERN int
    2412 lws_service_fd_tsi(struct lws_context *context, struct lws_pollfd *pollfd,
    2413  int tsi);
    2414 
    2432 LWS_VISIBLE LWS_EXTERN int
    2433 lws_service_adjust_timeout(struct lws_context *context, int timeout_ms, int tsi);
    2434 
    2435 /* Backwards compatibility */
    2436 #define lws_plat_service_tsi lws_service_tsi
    2437 
    2439 
    2445 
    2452 
    2464 LWS_VISIBLE LWS_EXTERN const char *
    2465 lws_get_mimetype(const char *file, const struct lws_http_mount *m);
    2466 
    2485 LWS_VISIBLE LWS_EXTERN int
    2486 lws_serve_http_file(struct lws *wsi, const char *file, const char *content_type,
    2487  const char *other_headers, int other_headers_len);
    2488 LWS_VISIBLE LWS_EXTERN int
    2489 lws_serve_http_file_fragment(struct lws *wsi);
    2491 
    2502 
    2503 enum http_status {
    2504  HTTP_STATUS_OK = 200,
    2505  HTTP_STATUS_NO_CONTENT = 204,
    2506  HTTP_STATUS_PARTIAL_CONTENT = 206,
    2507 
    2508  HTTP_STATUS_MOVED_PERMANENTLY = 301,
    2509  HTTP_STATUS_FOUND = 302,
    2510  HTTP_STATUS_SEE_OTHER = 303,
    2511 
    2512  HTTP_STATUS_BAD_REQUEST = 400,
    2513  HTTP_STATUS_UNAUTHORIZED,
    2514  HTTP_STATUS_PAYMENT_REQUIRED,
    2515  HTTP_STATUS_FORBIDDEN,
    2516  HTTP_STATUS_NOT_FOUND,
    2517  HTTP_STATUS_METHOD_NOT_ALLOWED,
    2518  HTTP_STATUS_NOT_ACCEPTABLE,
    2519  HTTP_STATUS_PROXY_AUTH_REQUIRED,
    2520  HTTP_STATUS_REQUEST_TIMEOUT,
    2521  HTTP_STATUS_CONFLICT,
    2522  HTTP_STATUS_GONE,
    2523  HTTP_STATUS_LENGTH_REQUIRED,
    2524  HTTP_STATUS_PRECONDITION_FAILED,
    2525  HTTP_STATUS_REQ_ENTITY_TOO_LARGE,
    2526  HTTP_STATUS_REQ_URI_TOO_LONG,
    2527  HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE,
    2528  HTTP_STATUS_REQ_RANGE_NOT_SATISFIABLE,
    2529  HTTP_STATUS_EXPECTATION_FAILED,
    2530 
    2531  HTTP_STATUS_INTERNAL_SERVER_ERROR = 500,
    2532  HTTP_STATUS_NOT_IMPLEMENTED,
    2533  HTTP_STATUS_BAD_GATEWAY,
    2534  HTTP_STATUS_SERVICE_UNAVAILABLE,
    2535  HTTP_STATUS_GATEWAY_TIMEOUT,
    2536  HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED,
    2537 };
    2538 
    2540  char *p;
    2541  int len;
    2542  int max_len;
    2543  int final;
    2544 };
    2545 
    2546 typedef const char *(*lws_process_html_state_cb)(void *data, int index);
    2547 
    2549  char *start;
    2550  char swallow[16];
    2551  int pos;
    2552  void *data;
    2553  const char * const *vars;
    2556  lws_process_html_state_cb replace;
    2557 };
    2558 
    2563 LWS_VISIBLE LWS_EXTERN int
    2565  struct lws_process_html_state *s);
    2567 
    2600 
    2608 struct lws_tokens {
    2609  char *token;
    2611 };
    2612 
    2613 /* enum lws_token_indexes
    2614  * these have to be kept in sync with lextable.h / minilex.c
    2615  *
    2616  * NOTE: These public enums are part of the abi. If you want to add one,
    2617  * add it at where specified so existing users are unaffected.
    2618  */
    2619 enum lws_token_indexes {
    2620  WSI_TOKEN_GET_URI = 0,
    2621  WSI_TOKEN_POST_URI = 1,
    2622  WSI_TOKEN_OPTIONS_URI = 2,
    2623  WSI_TOKEN_HOST = 3,
    2624  WSI_TOKEN_CONNECTION = 4,
    2625  WSI_TOKEN_UPGRADE = 5,
    2626  WSI_TOKEN_ORIGIN = 6,
    2627  WSI_TOKEN_DRAFT = 7,
    2628  WSI_TOKEN_CHALLENGE = 8,
    2629  WSI_TOKEN_EXTENSIONS = 9,
    2630  WSI_TOKEN_KEY1 = 10,
    2631  WSI_TOKEN_KEY2 = 11,
    2632  WSI_TOKEN_PROTOCOL = 12,
    2633  WSI_TOKEN_ACCEPT = 13,
    2634  WSI_TOKEN_NONCE = 14,
    2635  WSI_TOKEN_HTTP = 15,
    2636  WSI_TOKEN_HTTP2_SETTINGS = 16,
    2637  WSI_TOKEN_HTTP_ACCEPT = 17,
    2638  WSI_TOKEN_HTTP_AC_REQUEST_HEADERS = 18,
    2639  WSI_TOKEN_HTTP_IF_MODIFIED_SINCE = 19,
    2640  WSI_TOKEN_HTTP_IF_NONE_MATCH = 20,
    2641  WSI_TOKEN_HTTP_ACCEPT_ENCODING = 21,
    2642  WSI_TOKEN_HTTP_ACCEPT_LANGUAGE = 22,
    2643  WSI_TOKEN_HTTP_PRAGMA = 23,
    2644  WSI_TOKEN_HTTP_CACHE_CONTROL = 24,
    2645  WSI_TOKEN_HTTP_AUTHORIZATION = 25,
    2646  WSI_TOKEN_HTTP_COOKIE = 26,
    2647  WSI_TOKEN_HTTP_CONTENT_LENGTH = 27,
    2648  WSI_TOKEN_HTTP_CONTENT_TYPE = 28,
    2649  WSI_TOKEN_HTTP_DATE = 29,
    2650  WSI_TOKEN_HTTP_RANGE = 30,
    2651  WSI_TOKEN_HTTP_REFERER = 31,
    2652  WSI_TOKEN_KEY = 32,
    2653  WSI_TOKEN_VERSION = 33,
    2654  WSI_TOKEN_SWORIGIN = 34,
    2655 
    2656  WSI_TOKEN_HTTP_COLON_AUTHORITY = 35,
    2657  WSI_TOKEN_HTTP_COLON_METHOD = 36,
    2658  WSI_TOKEN_HTTP_COLON_PATH = 37,
    2659  WSI_TOKEN_HTTP_COLON_SCHEME = 38,
    2660  WSI_TOKEN_HTTP_COLON_STATUS = 39,
    2661 
    2662  WSI_TOKEN_HTTP_ACCEPT_CHARSET = 40,
    2663  WSI_TOKEN_HTTP_ACCEPT_RANGES = 41,
    2664  WSI_TOKEN_HTTP_ACCESS_CONTROL_ALLOW_ORIGIN = 42,
    2665  WSI_TOKEN_HTTP_AGE = 43,
    2666  WSI_TOKEN_HTTP_ALLOW = 44,
    2667  WSI_TOKEN_HTTP_CONTENT_DISPOSITION = 45,
    2668  WSI_TOKEN_HTTP_CONTENT_ENCODING = 46,
    2669  WSI_TOKEN_HTTP_CONTENT_LANGUAGE = 47,
    2670  WSI_TOKEN_HTTP_CONTENT_LOCATION = 48,
    2671  WSI_TOKEN_HTTP_CONTENT_RANGE = 49,
    2672  WSI_TOKEN_HTTP_ETAG = 50,
    2673  WSI_TOKEN_HTTP_EXPECT = 51,
    2674  WSI_TOKEN_HTTP_EXPIRES = 52,
    2675  WSI_TOKEN_HTTP_FROM = 53,
    2676  WSI_TOKEN_HTTP_IF_MATCH = 54,
    2677  WSI_TOKEN_HTTP_IF_RANGE = 55,
    2678  WSI_TOKEN_HTTP_IF_UNMODIFIED_SINCE = 56,
    2679  WSI_TOKEN_HTTP_LAST_MODIFIED = 57,
    2680  WSI_TOKEN_HTTP_LINK = 58,
    2681  WSI_TOKEN_HTTP_LOCATION = 59,
    2682  WSI_TOKEN_HTTP_MAX_FORWARDS = 60,
    2683  WSI_TOKEN_HTTP_PROXY_AUTHENTICATE = 61,
    2684  WSI_TOKEN_HTTP_PROXY_AUTHORIZATION = 62,
    2685  WSI_TOKEN_HTTP_REFRESH = 63,
    2686  WSI_TOKEN_HTTP_RETRY_AFTER = 64,
    2687  WSI_TOKEN_HTTP_SERVER = 65,
    2688  WSI_TOKEN_HTTP_SET_COOKIE = 66,
    2689  WSI_TOKEN_HTTP_STRICT_TRANSPORT_SECURITY = 67,
    2690  WSI_TOKEN_HTTP_TRANSFER_ENCODING = 68,
    2691  WSI_TOKEN_HTTP_USER_AGENT = 69,
    2692  WSI_TOKEN_HTTP_VARY = 70,
    2693  WSI_TOKEN_HTTP_VIA = 71,
    2694  WSI_TOKEN_HTTP_WWW_AUTHENTICATE = 72,
    2695 
    2696  WSI_TOKEN_PATCH_URI = 73,
    2697  WSI_TOKEN_PUT_URI = 74,
    2698  WSI_TOKEN_DELETE_URI = 75,
    2699 
    2700  WSI_TOKEN_HTTP_URI_ARGS = 76,
    2701  WSI_TOKEN_PROXY = 77,
    2702  WSI_TOKEN_HTTP_X_REAL_IP = 78,
    2703  WSI_TOKEN_HTTP1_0 = 79,
    2704  WSI_TOKEN_X_FORWARDED_FOR = 80,
    2705 
    2706  /****** add new things just above ---^ ******/
    2707 
    2708  /* use token storage to stash these internally, not for
    2709  * user use */
    2710 
    2711  _WSI_TOKEN_CLIENT_SENT_PROTOCOLS,
    2712  _WSI_TOKEN_CLIENT_PEER_ADDRESS,
    2713  _WSI_TOKEN_CLIENT_URI,
    2714  _WSI_TOKEN_CLIENT_HOST,
    2715  _WSI_TOKEN_CLIENT_ORIGIN,
    2716  _WSI_TOKEN_CLIENT_METHOD,
    2717 
    2718  /* always last real token index*/
    2719  WSI_TOKEN_COUNT,
    2720 
    2721  /* parser state additions, no storage associated */
    2722  WSI_TOKEN_NAME_PART,
    2723  WSI_TOKEN_SKIPPING,
    2724  WSI_TOKEN_SKIPPING_SAW_CR,
    2725  WSI_PARSING_COMPLETE,
    2726  WSI_INIT_TOKEN_MUXURL,
    2727 };
    2728 
    2730  unsigned short token_limit[WSI_TOKEN_COUNT];
    2731 };
    2732 
    2738 LWS_VISIBLE LWS_EXTERN const unsigned char *
    2739 lws_token_to_string(enum lws_token_indexes token);
    2740 
    2741 
    2750 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2751 lws_hdr_total_length(struct lws *wsi, enum lws_token_indexes h);
    2752 
    2762 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2763 lws_hdr_fragment_length(struct lws *wsi, enum lws_token_indexes h, int frag_idx);
    2764 
    2778 LWS_VISIBLE LWS_EXTERN int
    2779 lws_hdr_copy(struct lws *wsi, char *dest, int len, enum lws_token_indexes h);
    2780 
    2798 LWS_VISIBLE LWS_EXTERN int
    2799 lws_hdr_copy_fragment(struct lws *wsi, char *dest, int len,
    2800  enum lws_token_indexes h, int frag_idx);
    2801 
    2812 LWS_VISIBLE LWS_EXTERN const char *
    2813 lws_get_urlarg_by_name(struct lws *wsi, const char *name, char *buf, int len);
    2815 
    2830 
    2841 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2842 lws_add_http_header_status(struct lws *wsi,
    2843  unsigned int code, unsigned char **p,
    2844  unsigned char *end);
    2857 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2858 lws_add_http_header_by_name(struct lws *wsi, const unsigned char *name,
    2859  const unsigned char *value, int length,
    2860  unsigned char **p, unsigned char *end);
    2874 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2875 lws_add_http_header_by_token(struct lws *wsi, enum lws_token_indexes token,
    2876  const unsigned char *value, int length,
    2877  unsigned char **p, unsigned char *end);
    2888 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2889 lws_add_http_header_content_length(struct lws *wsi,
    2890  unsigned long content_length,
    2891  unsigned char **p, unsigned char *end);
    2901 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    2902 lws_finalize_http_header(struct lws *wsi, unsigned char **p,
    2903  unsigned char *end);
    2905 
    2924 
    2934 };
    2935 
    2949 typedef int (*lws_spa_fileupload_cb)(void *data, const char *name,
    2950  const char *filename, char *buf, int len,
    2951  enum lws_spa_fileupload_states state);
    2952 
    2955 struct lws_spa;
    2956 
    2975 LWS_VISIBLE LWS_EXTERN struct lws_spa *
    2976 lws_spa_create(struct lws *wsi, const char * const *param_names,
    2977  int count_params, int max_storage, lws_spa_fileupload_cb opt_cb,
    2978  void *opt_data);
    2979 
    2987 LWS_VISIBLE LWS_EXTERN int
    2988 lws_spa_process(struct lws_spa *spa, const char *in, int len);
    2989 
    2995 LWS_VISIBLE LWS_EXTERN int
    2996 lws_spa_finalize(struct lws_spa *spa);
    2997 
    3004 LWS_VISIBLE LWS_EXTERN int
    3005 lws_spa_get_length(struct lws_spa *spa, int n);
    3006 
    3012 LWS_VISIBLE LWS_EXTERN const char *
    3013 lws_spa_get_string(struct lws_spa *spa, int n);
    3014 
    3020 LWS_VISIBLE LWS_EXTERN int
    3021 lws_spa_destroy(struct lws_spa *spa);
    3023 
    3034 
    3045 LWS_VISIBLE LWS_EXTERN const char *
    3046 lws_urlencode(char *escaped, const char *string, int len);
    3047 
    3048 /*
    3049  * URLDECODE 1 / 2
    3050  *
    3051  * This simple urldecode only operates until the first '\0' and requires the
    3052  * data to exist all at once
    3053  */
    3066 LWS_VISIBLE LWS_EXTERN int
    3067 lws_urldecode(char *string, const char *escaped, int len);
    3069 
    3078 LWS_VISIBLE LWS_EXTERN int
    3079 lws_return_http_status(struct lws *wsi, unsigned int code,
    3080  const char *html_body);
    3081 
    3092 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3093 lws_http_redirect(struct lws *wsi, int code, const unsigned char *loc, int len,
    3094  unsigned char **p, unsigned char *end);
    3095 
    3104 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3105 lws_http_transaction_completed(struct lws *wsi);
    3107 
    3115 
    3126 LWS_VISIBLE LWS_EXTERN const char *
    3127 lws_sql_purify(char *escaped, const char *string, int len);
    3128 
    3139 LWS_VISIBLE LWS_EXTERN const char *
    3140 lws_json_purify(char *escaped, const char *string, int len);
    3142 
    3149 
    3151 #ifdef LWS_USE_LIBEV
    3152 typedef void (lws_ev_signal_cb_t)(EV_P_ struct ev_signal *w, int revents);
    3153 
    3154 LWS_VISIBLE LWS_EXTERN int
    3155 lws_ev_sigint_cfg(struct lws_context *context, int use_ev_sigint,
    3156  lws_ev_signal_cb_t *cb);
    3157 
    3158 LWS_VISIBLE LWS_EXTERN int
    3159 lws_ev_initloop(struct lws_context *context, struct ev_loop *loop, int tsi);
    3160 
    3161 LWS_VISIBLE LWS_EXTERN void
    3162 lws_ev_sigint_cb(struct ev_loop *loop, struct ev_signal *watcher, int revents);
    3163 #endif /* LWS_USE_LIBEV */
    3164 
    3166 
    3173 #ifdef LWS_USE_LIBUV
    3175 LWS_VISIBLE LWS_EXTERN int
    3176 lws_uv_sigint_cfg(struct lws_context *context, int use_uv_sigint,
    3177  uv_signal_cb cb);
    3178 
    3179 LWS_VISIBLE LWS_EXTERN void
    3180 lws_libuv_run(const struct lws_context *context, int tsi);
    3181 
    3182 LWS_VISIBLE LWS_EXTERN void
    3183 lws_libuv_stop(struct lws_context *context);
    3184 
    3185 LWS_VISIBLE LWS_EXTERN void
    3186 lws_libuv_stop_without_kill(const struct lws_context *context, int tsi);
    3187 
    3188 LWS_VISIBLE LWS_EXTERN int
    3189 lws_uv_initloop(struct lws_context *context, uv_loop_t *loop, int tsi);
    3190 
    3191 LWS_VISIBLE LWS_EXTERN uv_loop_t *
    3192 lws_uv_getloop(struct lws_context *context, int tsi);
    3193 
    3194 LWS_VISIBLE LWS_EXTERN void
    3195 lws_uv_sigint_cb(uv_signal_t *watcher, int signum);
    3196 #endif /* LWS_USE_LIBUV */
    3197 
    3204 
    3205 /*
    3206  * NOTE: These public enums are part of the abi. If you want to add one,
    3207  * add it at where specified so existing users are unaffected.
    3208  */
    3209 enum pending_timeout {
    3210  NO_PENDING_TIMEOUT = 0,
    3211  PENDING_TIMEOUT_AWAITING_PROXY_RESPONSE = 1,
    3212  PENDING_TIMEOUT_AWAITING_CONNECT_RESPONSE = 2,
    3213  PENDING_TIMEOUT_ESTABLISH_WITH_SERVER = 3,
    3214  PENDING_TIMEOUT_AWAITING_SERVER_RESPONSE = 4,
    3215  PENDING_TIMEOUT_AWAITING_PING = 5,
    3216  PENDING_TIMEOUT_CLOSE_ACK = 6,
    3217  PENDING_TIMEOUT_AWAITING_EXTENSION_CONNECT_RESPONSE = 7,
    3218  PENDING_TIMEOUT_SENT_CLIENT_HANDSHAKE = 8,
    3219  PENDING_TIMEOUT_SSL_ACCEPT = 9,
    3220  PENDING_TIMEOUT_HTTP_CONTENT = 10,
    3221  PENDING_TIMEOUT_AWAITING_CLIENT_HS_SEND = 11,
    3222  PENDING_FLUSH_STORED_SEND_BEFORE_CLOSE = 12,
    3223  PENDING_TIMEOUT_SHUTDOWN_FLUSH = 13,
    3224  PENDING_TIMEOUT_CGI = 14,
    3225  PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE = 15,
    3226  PENDING_TIMEOUT_WS_PONG_CHECK_SEND_PING = 16,
    3227  PENDING_TIMEOUT_WS_PONG_CHECK_GET_PONG = 17,
    3228  PENDING_TIMEOUT_CLIENT_ISSUE_PAYLOAD = 18,
    3229 
    3230  /****** add new things just above ---^ ******/
    3231 };
    3232 
    3242 LWS_VISIBLE LWS_EXTERN void
    3243 lws_set_timeout(struct lws *wsi, enum pending_timeout reason, int secs);
    3245 
    3251 #if !defined(LWS_SIZEOFPTR)
    3252 #define LWS_SIZEOFPTR (sizeof (void *))
    3253 #endif
    3254 #if !defined(u_int64_t)
    3255 #define u_int64_t unsigned long long
    3256 #endif
    3257 
    3258 #if defined(__x86_64__)
    3259 #define _LWS_PAD_SIZE 16 /* Intel recommended for best performance */
    3260 #else
    3261 #define _LWS_PAD_SIZE LWS_SIZEOFPTR /* Size of a pointer on the target arch */
    3262 #endif
    3263 #define _LWS_PAD(n) (((n) % _LWS_PAD_SIZE) ? \
    3264  ((n) + (_LWS_PAD_SIZE - ((n) % _LWS_PAD_SIZE))) : (n))
    3265 #define LWS_PRE _LWS_PAD(4 + 10)
    3266 /* used prior to 1.7 and retained for backward compatibility */
    3267 #define LWS_SEND_BUFFER_PRE_PADDING LWS_PRE
    3268 #define LWS_SEND_BUFFER_POST_PADDING 0
    3269 
    3270 /*
    3271  * NOTE: These public enums are part of the abi. If you want to add one,
    3272  * add it at where specified so existing users are unaffected.
    3273  */
    3288  /* LWS_WRITE_CLOSE is handled by lws_close_reason() */
    3289  LWS_WRITE_PING = 5,
    3290  LWS_WRITE_PONG = 6,
    3291 
    3292  /* Same as write_http but we know this write ends the transaction */
    3293  LWS_WRITE_HTTP_FINAL = 7,
    3294 
    3295  /* HTTP2 */
    3296 
    3304  /****** add new things just above ---^ ******/
    3305 
    3306  /* flags */
    3307 
    3315 };
    3316 
    3317 
    3404 LWS_VISIBLE LWS_EXTERN int
    3405 lws_write(struct lws *wsi, unsigned char *buf, size_t len,
    3406  enum lws_write_protocol protocol);
    3407 
    3408 /* helper for case where buffer may be const */
    3409 #define lws_write_http(wsi, buf, len) \
    3410  lws_write(wsi, (unsigned char *)(buf), len, LWS_WRITE_HTTP)
    3411 
    3431 
    3444 LWS_VISIBLE LWS_EXTERN int
    3445 lws_callback_on_writable(struct lws *wsi);
    3446 
    3460 LWS_VISIBLE LWS_EXTERN int
    3461 lws_callback_on_writable_all_protocol(const struct lws_context *context,
    3462  const struct lws_protocols *protocol);
    3463 
    3477 LWS_VISIBLE LWS_EXTERN int
    3478 lws_callback_on_writable_all_protocol_vhost(const struct lws_vhost *vhost,
    3479  const struct lws_protocols *protocol);
    3480 
    3493 LWS_VISIBLE LWS_EXTERN int
    3494 lws_callback_all_protocol(struct lws_context *context,
    3495  const struct lws_protocols *protocol, int reason);
    3496 
    3509 LWS_VISIBLE LWS_EXTERN int
    3510 lws_callback_all_protocol_vhost(struct lws_vhost *vh,
    3511  const struct lws_protocols *protocol, int reason);
    3512 
    3526 LWS_VISIBLE LWS_EXTERN int
    3527 lws_callback_vhost_protocols(struct lws *wsi, int reason, void *in, int len);
    3528 
    3529 LWS_VISIBLE LWS_EXTERN int
    3530 lws_callback_http_dummy(struct lws *wsi, enum lws_callback_reasons reason,
    3531  void *user, void *in, size_t len);
    3532 
    3540 LWS_VISIBLE LWS_EXTERN int
    3541 lws_get_socket_fd(struct lws *wsi);
    3542 
    3564 LWS_VISIBLE LWS_EXTERN size_t
    3565 lws_get_peer_write_allowance(struct lws *wsi);
    3567 
    3578 LWS_VISIBLE LWS_EXTERN int
    3579 lws_rx_flow_control(struct lws *wsi, int enable);
    3580 
    3590 LWS_VISIBLE LWS_EXTERN void
    3591 lws_rx_flow_allow_all_protocol(const struct lws_context *context,
    3592  const struct lws_protocols *protocol);
    3593 
    3610 LWS_VISIBLE LWS_EXTERN size_t
    3611 lws_remaining_packet_payload(struct lws *wsi);
    3612 
    3613 
    3622 
    3636 LWS_VISIBLE LWS_EXTERN struct lws *
    3637 lws_adopt_socket(struct lws_context *context, lws_sockfd_type accept_fd);
    3650 LWS_VISIBLE LWS_EXTERN struct lws *
    3651 lws_adopt_socket_vhost(struct lws_vhost *vh, lws_sockfd_type accept_fd);
    3675 LWS_VISIBLE LWS_EXTERN struct lws *
    3676 lws_adopt_socket_readbuf(struct lws_context *context, lws_sockfd_type accept_fd,
    3677  const char *readbuf, size_t len);
    3701 LWS_VISIBLE LWS_EXTERN struct lws *
    3702 lws_adopt_socket_vhost_readbuf(struct lws_vhost *vhost, lws_sockfd_type accept_fd,
    3703  const char *readbuf, size_t len);
    3705 
    3711 
    3722 LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT
    3723 lws_canonical_hostname(struct lws_context *context);
    3724 
    3739 LWS_VISIBLE LWS_EXTERN void
    3740 lws_get_peer_addresses(struct lws *wsi, lws_sockfd_type fd, char *name,
    3741  int name_len, char *rip, int rip_len);
    3742 
    3753 LWS_VISIBLE LWS_EXTERN const char *
    3754 lws_get_peer_simple(struct lws *wsi, char *name, int namelen);
    3755 #ifndef LWS_WITH_ESP8266
    3756 
    3767 LWS_VISIBLE LWS_EXTERN int
    3768 lws_interface_to_sa(int ipv6, const char *ifname, struct sockaddr_in *addr,
    3769  size_t addrlen);
    3771 #endif
    3772 
    3778 
    3791 LWS_VISIBLE LWS_EXTERN int
    3792 lws_snprintf(char *str, size_t size, const char *format, ...) LWS_FORMAT(3);
    3793 
    3805 LWS_VISIBLE LWS_EXTERN int
    3806 lws_get_random(struct lws_context *context, void *buf, int len);
    3814 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3815 lws_daemonize(const char *_lock_path);
    3821 LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT
    3823 
    3830 LWS_VISIBLE LWS_EXTERN void *
    3831 lws_wsi_user(struct lws *wsi);
    3832 
    3844 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3845 lws_parse_uri(char *p, const char **prot, const char **ads, int *port,
    3846  const char **path);
    3847 
    3851 LWS_VISIBLE LWS_EXTERN unsigned long
    3852 lws_now_secs(void);
    3853 
    3863 LWS_VISIBLE LWS_EXTERN struct lws_context * LWS_WARN_UNUSED_RESULT
    3864 lws_get_context(const struct lws *wsi);
    3865 
    3875 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3876 lws_get_count_threads(struct lws_context *context);
    3877 
    3885 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    3886 lws_get_parent(const struct lws *wsi);
    3887 
    3894 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
    3895 lws_get_child(const struct lws *wsi);
    3896 
    3897 
    3898 /*
    3899  * \deprecated DEPRECATED Note: this is not normally needed as a user api.
    3900  * It's provided in case it is
    3901  * useful when integrating with other app poll loop service code.
    3902  */
    3903 LWS_VISIBLE LWS_EXTERN int
    3904 lws_read(struct lws *wsi, unsigned char *buf, size_t len);
    3905 
    3913 LWS_VISIBLE LWS_EXTERN void
    3914 lws_set_allocator(void *(*realloc)(void *ptr, size_t size));
    3916 
    3922 
    3929 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3930 lws_send_pipe_choked(struct lws *wsi);
    3931 
    3936 LWS_VISIBLE LWS_EXTERN int
    3937 lws_is_final_fragment(struct lws *wsi);
    3938 
    3943 LWS_VISIBLE LWS_EXTERN unsigned char
    3944 lws_get_reserved_bits(struct lws *wsi);
    3945 
    3962 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3963 lws_partial_buffered(struct lws *wsi);
    3964 
    3974 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
    3975 lws_frame_is_binary(struct lws *wsi);
    3976 
    3985 LWS_VISIBLE LWS_EXTERN int
    3986 lws_is_ssl(struct lws *wsi);
    3991 LWS_VISIBLE LWS_EXTERN int
    3992 lws_is_cgi(struct lws *wsi);
    3993 
    3994 #ifdef LWS_OPENSSL_SUPPORT
    3995 
    4001 LWS_VISIBLE LWS_EXTERN SSL*
    4002 lws_get_ssl(struct lws *wsi);
    4003 #endif
    4004 
    4006 
    4012 #ifdef LWS_SHA1_USE_OPENSSL_NAME
    4014 #define lws_SHA1 SHA1
    4015 #else
    4016 
    4025 LWS_VISIBLE LWS_EXTERN unsigned char *
    4026 lws_SHA1(const unsigned char *d, size_t n, unsigned char *md);
    4027 #endif
    4028 
    4038 LWS_VISIBLE LWS_EXTERN int
    4039 lws_b64_encode_string(const char *in, int in_len, char *out, int out_size);
    4049 LWS_VISIBLE LWS_EXTERN int
    4050 lws_b64_decode_string(const char *in, char *out, int out_size);
    4052 
    4053 
    4063 #ifdef LWS_WITH_CGI
    4064 enum lws_enum_stdinouterr {
    4065  LWS_STDIN = 0,
    4066  LWS_STDOUT = 1,
    4067  LWS_STDERR = 2,
    4068 };
    4069 
    4070 enum lws_cgi_hdr_state {
    4071  LCHS_HEADER,
    4072  LCHS_CR1,
    4073  LCHS_LF1,
    4074  LCHS_CR2,
    4075  LCHS_LF2,
    4076  LHCS_PAYLOAD,
    4077  LCHS_SINGLE_0A,
    4078 };
    4079 
    4081  struct lws **stdwsi;
    4082  enum lws_enum_stdinouterr ch;
    4083  unsigned char *data;
    4084  enum lws_cgi_hdr_state hdr_state;
    4085  int len;
    4086 };
    4087 
    4088 
    4098 LWS_VISIBLE LWS_EXTERN int
    4099 lws_cgi(struct lws *wsi, const char * const *exec_array,
    4100  int script_uri_path_len, int timeout_secs,
    4101  const struct lws_protocol_vhost_options *mp_cgienv);
    4102 
    4108 LWS_VISIBLE LWS_EXTERN int
    4109 lws_cgi_write_split_stdout_headers(struct lws *wsi);
    4110 
    4116 LWS_VISIBLE LWS_EXTERN int
    4117 lws_cgi_kill(struct lws *wsi);
    4118 #endif
    4119 
    4121 
    4138 
    4145  lws_filefd_type (*open)(struct lws *wsi, const char *filename,
    4146  unsigned long *filelen, int flags);
    4150  int (*close)(struct lws *wsi, lws_filefd_type fd);
    4152  unsigned long (*seek_cur)(struct lws *wsi, lws_filefd_type fd,
    4153  long offset_from_cur_pos);
    4155  int (*read)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    4156  unsigned char *buf, unsigned long len);
    4158  int (*write)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    4159  unsigned char *buf, unsigned long len);
    4162  /* Add new things just above here ---^
    4163  * This is part of the ABI, don't needlessly break compatibility */
    4164 };
    4165 
    4171 LWS_VISIBLE LWS_EXTERN struct lws_plat_file_ops * LWS_WARN_UNUSED_RESULT
    4172 lws_get_fops(struct lws_context *context);
    4173 
    4182 static LWS_INLINE lws_filefd_type LWS_WARN_UNUSED_RESULT
    4183 lws_plat_file_open(struct lws *wsi, const char *filename,
    4184  unsigned long *filelen, int flags)
    4185 {
    4186  return lws_get_fops(lws_get_context(wsi))->open(wsi, filename,
    4187  filelen, flags);
    4188 }
    4189 
    4196 static LWS_INLINE int
    4197 lws_plat_file_close(struct lws *wsi, lws_filefd_type fd)
    4198 {
    4199  return lws_get_fops(lws_get_context(wsi))->close(wsi, fd);
    4200 }
    4201 
    4209 static LWS_INLINE unsigned long
    4210 lws_plat_file_seek_cur(struct lws *wsi, lws_filefd_type fd, long offset)
    4211 {
    4212  return lws_get_fops(lws_get_context(wsi))->seek_cur(wsi, fd, offset);
    4213 }
    4223 static LWS_INLINE int LWS_WARN_UNUSED_RESULT
    4224 lws_plat_file_read(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    4225  unsigned char *buf, unsigned long len)
    4226 {
    4227  return lws_get_fops(lws_get_context(wsi))->read(wsi, fd, amount, buf,
    4228  len);
    4229 }
    4239 static LWS_INLINE int LWS_WARN_UNUSED_RESULT
    4240 lws_plat_file_write(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
    4241  unsigned char *buf, unsigned long len)
    4242 {
    4243  return lws_get_fops(lws_get_context(wsi))->write(wsi, fd, amount, buf,
    4244  len);
    4245 }
    4247 
    4279 #ifdef LWS_WITH_SMTP
    4280 
    4292 };
    4293 
    4295 struct lws_email {
    4296  void *data;
    4298  uv_loop_t *loop;
    4301  char email_smtp_ip[32];
    4302  char email_helo[32];
    4303  char email_from[100];
    4304  char email_to[100];
    4306  unsigned int max_content_size;
    4309  /* Fill all the callbacks before init */
    4310 
    4311  int (*on_next)(struct lws_email *email);
    4316  int (*on_sent)(struct lws_email *email);
    4321  int (*on_get_body)(struct lws_email *email, char *buf, int len);
    4327  /* private things */
    4328  uv_timer_t timeout_email;
    4330  uv_connect_t email_connect_req;
    4331  uv_tcp_t email_client;
    4333  char email_buf[256];
    4334  char *content;
    4335 };
    4336 
    4346 LWS_VISIBLE LWS_EXTERN int
    4347 lws_email_init(struct lws_email *email, uv_loop_t *loop, int max_content);
    4348 
    4357 LWS_VISIBLE LWS_EXTERN void
    4358 lws_email_check(struct lws_email *email);
    4366 LWS_VISIBLE LWS_EXTERN void
    4367 lws_email_destroy(struct lws_email *email);
    4368 
    4369 #endif
    4370 
    4371 
    4372 #ifdef __cplusplus
    4373 }
    4374 #endif
    4375 
    4376 #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:4078
    -
    size_t rx_buffer_size
    Definition: libwebsockets.h:1329
    +
    Definition: libwebsockets.h:4080
    +
    size_t rx_buffer_size
    Definition: libwebsockets.h:1331
    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
    -
    Definition: libwebsockets.h:775
    -
    Definition: libwebsockets.h:903
    +
    Definition: libwebsockets.h:777
    +
    Definition: libwebsockets.h:905
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_daemonize(const char *_lock_path)
    -
    Definition: libwebsockets.h:2008
    -
    Definition: libwebsockets.h:3283
    -
    Definition: libwebsockets.h:4283
    +
    Definition: libwebsockets.h:2010
    +
    Definition: libwebsockets.h:3285
    +
    Definition: libwebsockets.h:4285
    LWS_VISIBLE LWS_EXTERN struct lws * lws_adopt_socket_readbuf(struct lws_context *context, lws_sockfd_type accept_fd, const char *readbuf, size_t len)
    -
    Definition: libwebsockets.h:238
    -
    unsigned int auth_mask
    Definition: libwebsockets.h:2043
    -
    Definition: libwebsockets.h:3306
    -
    void * data
    Definition: libwebsockets.h:4294
    -
    const char * uri_replace_from
    Definition: libwebsockets.h:2121
    -
    int(* write)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)
    Definition: libwebsockets.h:4156
    -
    lws_callback_reasons
    Definition: libwebsockets.h:668
    +
    Definition: libwebsockets.h:240
    +
    unsigned int auth_mask
    Definition: libwebsockets.h:2045
    +
    Definition: libwebsockets.h:3308
    +
    void * data
    Definition: libwebsockets.h:4296
    +
    const char * uri_replace_from
    Definition: libwebsockets.h:2123
    +
    int(* write)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)
    Definition: libwebsockets.h:4158
    +
    lws_callback_reasons
    Definition: libwebsockets.h:670
    LWS_VISIBLE LWS_EXTERN int lws_hdr_copy_fragment(struct lws *wsi, char *dest, int len, enum lws_token_indexes h, int frag_idx)
    - -
    lwsgs_auth_bits
    Definition: libwebsockets.h:1474
    + +
    lwsgs_auth_bits
    Definition: libwebsockets.h:1476
    LWS_VISIBLE LWS_EXTERN void lws_close_reason(struct lws *wsi, enum lws_close_status status, unsigned char *buf, size_t len)
    LWS_VISIBLE LWS_EXTERN void lws_email_destroy(struct lws_email *email)
    LWS_VISIBLE LWS_EXTERN int lws_urldecode(char *string, const char *escaped, int len)
    -
    Definition: libwebsockets.h:901
    -
    Definition: libwebsockets.h:1133
    -
    unsigned int id
    Definition: libwebsockets.h:1338
    +
    Definition: libwebsockets.h:903
    +
    Definition: libwebsockets.h:1135
    +
    unsigned int id
    Definition: libwebsockets.h:1340
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_hdr_total_length(struct lws *wsi, enum lws_token_indexes h)
    -
    Definition: libwebsockets.h:1131
    -
    Definition: libwebsockets.h:806
    +
    Definition: libwebsockets.h:1133
    +
    Definition: libwebsockets.h:808
    LWS_VISIBLE LWS_EXTERN int lws_service_fd_tsi(struct lws_context *context, struct lws_pollfd *pollfd, int tsi)
    LWS_VISIBLE LWS_EXTERN int lws_service_adjust_timeout(struct lws_context *context, int timeout_ms, int tsi)
    LWS_VISIBLE LWS_EXTERN struct lws *LWS_WARN_UNUSED_RESULT lws_get_parent(const struct lws *wsi)
    LWS_VISIBLE LWS_EXTERN size_t lws_get_peer_write_allowance(struct lws *wsi)
    LWS_VISIBLE LWS_EXTERN struct lws * lws_adopt_socket_vhost(struct lws_vhost *vh, lws_sockfd_type accept_fd)
    -
    Definition: libwebsockets.h:752
    +
    Definition: libwebsockets.h:754
    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:4314
    -
    Definition: libwebsockets.h:1469
    -
    struct lws ** pwsi
    Definition: libwebsockets.h:2128
    -
    Definition: libwebsockets.h:786
    -
    const char * path
    Definition: libwebsockets.h:2100
    +
    int(* on_sent)(struct lws_email *email)
    Definition: libwebsockets.h:4316
    +
    Definition: libwebsockets.h:1471
    +
    struct lws ** pwsi
    Definition: libwebsockets.h:2130
    +
    Definition: libwebsockets.h:788
    +
    const char * path
    Definition: libwebsockets.h:2102
    LWS_VISIBLE LWS_EXTERN size_t lws_remaining_packet_payload(struct lws *wsi)
    -
    Definition: libwebsockets.h:587
    -
    Definition: libwebsockets.h:1425
    +
    Definition: libwebsockets.h:589
    +
    Definition: libwebsockets.h:1427
    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:4330
    -
    lws_close_status
    Definition: libwebsockets.h:558
    +
    time_t email_connect_started
    Definition: libwebsockets.h:4332
    +
    lws_close_status
    Definition: libwebsockets.h:560
    LWS_VISIBLE LWS_EXTERN int lws_callback_all_protocol(struct lws_context *context, const struct lws_protocols *protocol, int reason)
    -
    Definition: libwebsockets.h:598
    - -
    int token_len
    Definition: libwebsockets.h:2608
    -
    const struct lws_http_mount * mounts
    Definition: libwebsockets.h:1717
    -
    Definition: libwebsockets.h:927
    +
    Definition: libwebsockets.h:600
    + +
    int token_len
    Definition: libwebsockets.h:2610
    +
    const struct lws_http_mount * mounts
    Definition: libwebsockets.h:1719
    +
    Definition: libwebsockets.h:929
    LWS_VISIBLE LWS_EXTERN struct lws_context *LWS_WARN_UNUSED_RESULT lws_get_context(const struct lws *wsi)
    -
    const char * value
    Definition: libwebsockets.h:1997
    -
    Definition: libwebsockets.h:2928
    -
    Definition: libwebsockets.h:4288
    -
    const char * username
    Definition: libwebsockets.h:1500
    +
    const char * value
    Definition: libwebsockets.h:1999
    +
    Definition: libwebsockets.h:2930
    +
    Definition: libwebsockets.h:4290
    +
    const char * username
    Definition: libwebsockets.h:1502
    LWS_VISIBLE LWS_EXTERN struct lws * lws_client_connect_via_info(struct lws_client_connect_info *ccinfo)
    -
    const char * protocol
    Definition: libwebsockets.h:2027
    -
    struct lws ** stdwsi
    Definition: libwebsockets.h:4079
    +
    const char * protocol
    Definition: libwebsockets.h:2029
    +
    struct lws ** stdwsi
    Definition: libwebsockets.h:4081
    LWS_VISIBLE LWS_EXTERN int lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len)
    -
    Definition: libwebsockets.h:873
    +
    Definition: libwebsockets.h:875
    LWS_VISIBLE LWS_EXTERN const char * lws_get_mimetype(const char *file, const struct lws_http_mount *m)
    -
    Definition: libwebsockets.h:1471
    -
    int cache_max_age
    Definition: libwebsockets.h:2041
    -
    long ssl_options_clear
    Definition: libwebsockets.h:1735
    -
    Definition: libwebsockets.h:766
    -
    Definition: libwebsockets.h:1603
    +
    Definition: libwebsockets.h:1473
    +
    int cache_max_age
    Definition: libwebsockets.h:2043
    +
    long ssl_options_clear
    Definition: libwebsockets.h:1737
    +
    Definition: libwebsockets.h:768
    +
    Definition: libwebsockets.h:1605
    LWS_VISIBLE LWS_EXTERN void lws_context_destroy(struct lws_context *context)
    -
    Definition: libwebsockets.h:614
    -
    char * start
    Definition: libwebsockets.h:2547
    +
    Definition: libwebsockets.h:616
    +
    char * start
    Definition: libwebsockets.h:2549
    +
    LWS_VISIBLE LWS_EXTERN int lws_snprintf(char *str, size_t size, const char *format,...) LWS_FORMAT(3)
    LWS_VISIBLE LWS_EXTERN void lws_set_allocator(void *(*realloc)(void *ptr, size_t size))
    -
    lws_callback_function * callback
    Definition: libwebsockets.h:1320
    -
    Definition: libwebsockets.h:3273
    +
    lws_callback_function * callback
    Definition: libwebsockets.h:1322
    +
    Definition: libwebsockets.h:3275
    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:964
    - -
    const char * protocol
    Definition: libwebsockets.h:2106
    -
    Definition: libwebsockets.h:953
    -
    unsigned int pt_serv_buf_size
    Definition: libwebsockets.h:1722
    +
    Definition: libwebsockets.h:966
    + +
    const char * protocol
    Definition: libwebsockets.h:2108
    +
    Definition: libwebsockets.h:955
    +
    unsigned int pt_serv_buf_size
    Definition: libwebsockets.h:1724
    LWS_VISIBLE LWS_EXTERN struct lws * lws_adopt_socket(struct lws_context *context, lws_sockfd_type accept_fd)
    -
    int len
    Definition: libwebsockets.h:2539
    -
    int ka_time
    Definition: libwebsockets.h:1658
    -
    Definition: libwebsockets.h:1545
    +
    int len
    Definition: libwebsockets.h:2541
    +
    int ka_time
    Definition: libwebsockets.h:1660
    +
    Definition: libwebsockets.h:1547
    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:1737
    -
    int count_extensions
    Definition: libwebsockets.h:1430
    -
    Definition: libwebsockets.h:3277
    -
    int port
    Definition: libwebsockets.h:2096
    -
    struct lws_context * context
    Definition: libwebsockets.h:2092
    -
    Definition: libwebsockets.h:1477
    -
    int ietf_version_or_minus_one
    Definition: libwebsockets.h:2108
    +
    unsigned short ws_ping_pong_interval
    Definition: libwebsockets.h:1739
    +
    int count_extensions
    Definition: libwebsockets.h:1432
    +
    Definition: libwebsockets.h:3279
    +
    int port
    Definition: libwebsockets.h:2098
    +
    struct lws_context * context
    Definition: libwebsockets.h:2094
    +
    Definition: libwebsockets.h:1479
    +
    int ietf_version_or_minus_one
    Definition: libwebsockets.h:2110
    LWS_VISIBLE LWS_EXTERN int lws_callback_all_protocol_vhost(struct lws_vhost *vh, const struct lws_protocols *protocol, int reason)
    -
    Definition: libwebsockets.h:4281
    -
    Definition: libwebsockets.h:1993
    +
    Definition: libwebsockets.h:4283
    +
    Definition: libwebsockets.h:1995
    LWS_VISIBLE LWS_EXTERN int lws_callback_on_writable(struct lws *wsi)
    -
    const char *const * vars
    Definition: libwebsockets.h:2551
    +
    const char *const * vars
    Definition: libwebsockets.h:2553
    LWS_VISIBLE LWS_EXTERN SSL * lws_get_ssl(struct lws *wsi)
    -
    Definition: libwebsockets.h:566
    -
    Definition: libwebsockets.h:2091
    -
    Definition: libwebsockets.h:1575
    -
    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:1220
    - -
    int len
    Definition: libwebsockets.h:1156
    -
    Definition: libwebsockets.h:2018
    -
    const char * def
    Definition: libwebsockets.h:2025
    -
    Definition: libwebsockets.h:727
    -
    Definition: libwebsockets.h:1557
    -
    lws_context_options
    Definition: libwebsockets.h:1528
    -
    Definition: libwebsockets.h:905
    -
    Definition: libwebsockets.h:1494
    -
    Definition: libwebsockets.h:1563
    -
    Definition: libwebsockets.h:893
    -
    const char * option_name
    Definition: libwebsockets.h:1153
    -
    Definition: libwebsockets.h:2006
    -
    lws_sockfd_type fd
    Definition: libwebsockets.h:536
    +
    Definition: libwebsockets.h:568
    +
    Definition: libwebsockets.h:2093
    +
    Definition: libwebsockets.h:1577
    +
    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:1222
    + +
    int len
    Definition: libwebsockets.h:1158
    +
    Definition: libwebsockets.h:2020
    +
    const char * def
    Definition: libwebsockets.h:2027
    +
    Definition: libwebsockets.h:729
    +
    Definition: libwebsockets.h:1559
    +
    lws_context_options
    Definition: libwebsockets.h:1530
    +
    Definition: libwebsockets.h:907
    +
    Definition: libwebsockets.h:1496
    +
    Definition: libwebsockets.h:1565
    +
    Definition: libwebsockets.h:895
    +
    const char * option_name
    Definition: libwebsockets.h:1155
    +
    Definition: libwebsockets.h:2008
    +
    lws_sockfd_type fd
    Definition: libwebsockets.h:538
    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:1626
    -
    short events
    Definition: libwebsockets.h:438
    -
    Definition: libwebsockets.h:1438
    -
    const struct lws_extension * extensions
    Definition: libwebsockets.h:1429
    -
    const struct lws_http_mount * mount_next
    Definition: libwebsockets.h:2019
    +
    const char * ssl_private_key_password
    Definition: libwebsockets.h:1628
    +
    short events
    Definition: libwebsockets.h:440
    +
    Definition: libwebsockets.h:1440
    +
    const struct lws_extension * extensions
    Definition: libwebsockets.h:1431
    +
    const struct lws_http_mount * mount_next
    Definition: libwebsockets.h:2021
    LWS_VISIBLE LWS_EXTERN void lws_set_timeout(struct lws *wsi, enum pending_timeout reason, int secs)
    -
    void * userdata
    Definition: libwebsockets.h:2110
    -
    Definition: libwebsockets.h:724
    -
    Definition: libwebsockets.h:911
    +
    void * userdata
    Definition: libwebsockets.h:2112
    +
    Definition: libwebsockets.h:726
    +
    Definition: libwebsockets.h:913
    LWS_VISIBLE LWS_EXTERN int lws_service_tsi(struct lws_context *context, int timeout_ms, int tsi)
    -
    unsigned char * data
    Definition: libwebsockets.h:4081
    -
    const struct lws_protocol_vhost_options * extra_mimetypes
    Definition: libwebsockets.h:2034
    +
    unsigned char * data
    Definition: libwebsockets.h:4083
    +
    const struct lws_protocol_vhost_options * extra_mimetypes
    Definition: libwebsockets.h:2036
    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:717
    +
    Definition: libwebsockets.h:719
    LWS_VISIBLE LWS_EXTERN const char * lws_urlencode(char *escaped, const char *string, int len)
    -
    Definition: libwebsockets.h:798
    -
    uv_loop_t * loop
    Definition: libwebsockets.h:4296
    -
    Definition: libwebsockets.h:896
    +
    Definition: libwebsockets.h:800
    +
    uv_loop_t * loop
    Definition: libwebsockets.h:4298
    +
    Definition: libwebsockets.h:898
    Definition: libwebsockets.h:72
    -
    Definition: libwebsockets.h:3309
    -
    int pos
    Definition: libwebsockets.h:2549
    -
    struct lws_plugin * list
    Definition: libwebsockets.h:1439
    +
    Definition: libwebsockets.h:3311
    +
    int pos
    Definition: libwebsockets.h:2551
    +
    struct lws_plugin * list
    Definition: libwebsockets.h:1441
    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:1678
    +
    short max_http_header_data
    Definition: libwebsockets.h:1680
    LWS_VISIBLE LWS_EXTERN int lws_spa_process(struct lws_spa *spa, const char *in, int len)
    -
    void * provided_client_ssl_ctx
    Definition: libwebsockets.h:1675
    +
    void * provided_client_ssl_ctx
    Definition: libwebsockets.h:1677
    LWS_VISIBLE LWS_EXTERN struct lws_vhost * lws_get_vhost(struct lws *wsi)
    Definition: libwebsockets.h:44
    LWS_VISIBLE LWS_EXTERN void lwsl_emit_syslog(int level, const char *line)
    -
    const struct lws_protocols * protocols
    Definition: libwebsockets.h:1427
    -
    Definition: libwebsockets.h:1132
    -
    int ka_probes
    Definition: libwebsockets.h:1661
    +
    const struct lws_protocols * protocols
    Definition: libwebsockets.h:1429
    +
    Definition: libwebsockets.h:1134
    +
    int ka_probes
    Definition: libwebsockets.h:1663
    void onError(Socket *s, socket_error_t err)
    -
    const char * origin
    Definition: libwebsockets.h:2104
    -
    SHORT revents
    Definition: libwebsockets.h:424
    -
    const char * method
    Definition: libwebsockets.h:2114
    +
    const char * origin
    Definition: libwebsockets.h:2106
    +
    SHORT revents
    Definition: libwebsockets.h:426
    +
    const char * method
    Definition: libwebsockets.h:2116
    LWS_VISIBLE LWS_EXTERN const char * lws_spa_get_string(struct lws_spa *spa, int n)
    -
    Definition: libwebsockets.h:1226
    +
    Definition: libwebsockets.h:1228
    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:933
    -
    unsigned char origin_protocol
    Definition: libwebsockets.h:2050
    -
    const char * log_filepath
    Definition: libwebsockets.h:1714
    -
    Definition: libwebsockets.h:773
    -
    unsigned int max_content_size
    Definition: libwebsockets.h:4304
    -
    int option_index
    Definition: libwebsockets.h:1154
    +
    Definition: libwebsockets.h:935
    +
    unsigned char origin_protocol
    Definition: libwebsockets.h:2052
    +
    const char * log_filepath
    Definition: libwebsockets.h:1716
    +
    Definition: libwebsockets.h:775
    +
    unsigned int max_content_size
    Definition: libwebsockets.h:4306
    +
    int option_index
    Definition: libwebsockets.h:1156
    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:769
    -
    const char * uri_replace_to
    Definition: libwebsockets.h:2124
    -
    struct lws * parent_wsi
    Definition: libwebsockets.h:2117
    +
    Definition: libwebsockets.h:771
    +
    const char * uri_replace_to
    Definition: libwebsockets.h:2126
    +
    struct lws * parent_wsi
    Definition: libwebsockets.h:2119
    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:4327
    +
    enum lwsgs_smtp_states estate
    Definition: libwebsockets.h:4329
    LWS_VISIBLE LWS_EXTERN int lws_spa_finalize(struct lws_spa *spa)
    -
    Definition: libwebsockets.h:669
    +
    Definition: libwebsockets.h:671
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_get_count_threads(struct lws_context *context)
    -
    const char *const * plugin_dirs
    Definition: libwebsockets.h:1705
    -
    char name[64]
    Definition: libwebsockets.h:1445
    +
    const char *const * plugin_dirs
    Definition: libwebsockets.h:1707
    +
    char name[64]
    Definition: libwebsockets.h:1447
    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:4331
    +
    char email_buf[256]
    Definition: libwebsockets.h:4333
    LWS_VISIBLE LWS_EXTERN int lws_is_ssl(struct lws *wsi)
    -
    Definition: libwebsockets.h:1534
    -
    int(* close)(struct lws *wsi, lws_filefd_type fd)
    Definition: libwebsockets.h:4148
    -
    uv_lib_t lib
    Definition: libwebsockets.h:1441
    -
    x509_crt certificate
    Definition: libwebsockets.h:240
    +
    Definition: libwebsockets.h:1536
    +
    int(* close)(struct lws *wsi, lws_filefd_type fd)
    Definition: libwebsockets.h:4150
    +
    uv_lib_t lib
    Definition: libwebsockets.h:1443
    +
    x509_crt certificate
    Definition: libwebsockets.h:242
    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:4282
    +
    Definition: libwebsockets.h:4284
    LWS_VISIBLE LWS_EXTERN int lws_is_cgi(struct lws *wsi)
    -
    int ssl_connection
    Definition: libwebsockets.h:2098
    -
    Definition: libwebsockets.h:1493
    -
    SSL_CTX * provided_client_ssl_ctx
    Definition: libwebsockets.h:1669
    +
    int ssl_connection
    Definition: libwebsockets.h:2100
    +
    Definition: libwebsockets.h:1495
    +
    SSL_CTX * provided_client_ssl_ctx
    Definition: libwebsockets.h:1671
    LWS_VISIBLE LWS_EXTERN int lws_rx_flow_control(struct lws *wsi, int enable)
    -
    Definition: libwebsockets.h:2537
    +
    Definition: libwebsockets.h:2539
    LWS_VISIBLE LWS_EXTERN struct lws_plat_file_ops *LWS_WARN_UNUSED_RESULT lws_get_fops(struct lws_context *context)
    -
    Definition: libwebsockets.h:535
    -
    const struct lws_protocol_vhost_options * cgienv
    Definition: libwebsockets.h:2030
    -
    const char * name
    Definition: libwebsockets.h:1996
    -
    unsigned char mountpoint_len
    Definition: libwebsockets.h:2051
    -
    Definition: libwebsockets.h:3280
    -
    Definition: libwebsockets.h:1552
    -
    lws_sockfd_type fd
    Definition: libwebsockets.h:422
    -
    Definition: libwebsockets.h:2007
    +
    Definition: libwebsockets.h:537
    +
    const struct lws_protocol_vhost_options * cgienv
    Definition: libwebsockets.h:2032
    +
    const char * name
    Definition: libwebsockets.h:1998
    +
    unsigned char mountpoint_len
    Definition: libwebsockets.h:2053
    +
    Definition: libwebsockets.h:3282
    +
    Definition: libwebsockets.h:1554
    +
    lws_sockfd_type fd
    Definition: libwebsockets.h:424
    +
    Definition: libwebsockets.h:2009
    LWS_VISIBLE LWS_EXTERN int lws_is_final_fragment(struct lws *wsi)
    -
    const struct lws_extension * extensions
    Definition: libwebsockets.h:1620
    -
    Definition: libwebsockets.h:1536
    +
    const struct lws_extension * extensions
    Definition: libwebsockets.h:1622
    +
    Definition: libwebsockets.h:1538
    LWS_VISIBLE LWS_EXTERN void * lws_protocol_vh_priv_zalloc(struct lws_vhost *vhost, const struct lws_protocols *prot, int size)
    -
    Definition: libwebsockets.h:1541
    -
    lws_ext_options_types
    Definition: libwebsockets.h:1130
    -
    const struct lws_protocols * protocols
    Definition: libwebsockets.h:1616
    +
    Definition: libwebsockets.h:1543
    +
    lws_ext_options_types
    Definition: libwebsockets.h:1132
    +
    const struct lws_protocols * protocols
    Definition: libwebsockets.h:1618
    LWS_VISIBLE LWS_EXTERN int lwsws_get_config_globals(struct lws_context_creation_info *info, const char *d, char **config_strings, int *len)
    LWS_VISIBLE LWS_EXTERN void * lws_wsi_user(struct lws *wsi)
    LWS_VISIBLE LWS_EXTERN unsigned long lws_now_secs(void)
    LWS_VISIBLE LWS_EXTERN const char * lws_get_peer_simple(struct lws *wsi, char *name, int namelen)
    -
    const char * start
    Definition: libwebsockets.h:1155
    -
    const char * ssl_cipher_list
    Definition: libwebsockets.h:1640
    +
    const char * start
    Definition: libwebsockets.h:1157
    +
    const char * ssl_cipher_list
    Definition: libwebsockets.h:1642
    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:2021
    -
    const char * http_proxy_address
    Definition: libwebsockets.h:1644
    - -
    rsa_context key
    Definition: libwebsockets.h:241
    -
    const char * ssl_cert_filepath
    Definition: libwebsockets.h:1628
    -
    const char * ecdh_curve
    Definition: libwebsockets.h:1699
    -
    int cgi_timeout
    Definition: libwebsockets.h:2039
    -
    Definition: libwebsockets.h:2009
    -
    Definition: libwebsockets.h:1478
    -
    Definition: libwebsockets.h:436
    -
    Definition: libwebsockets.h:592
    +
    const char * mountpoint
    Definition: libwebsockets.h:2023
    +
    const char * http_proxy_address
    Definition: libwebsockets.h:1646
    + +
    rsa_context key
    Definition: libwebsockets.h:243
    +
    const char * ssl_cert_filepath
    Definition: libwebsockets.h:1630
    +
    const char * ecdh_curve
    Definition: libwebsockets.h:1701
    +
    int cgi_timeout
    Definition: libwebsockets.h:2041
    +
    Definition: libwebsockets.h:2011
    +
    Definition: libwebsockets.h:1480
    +
    Definition: libwebsockets.h:438
    +
    Definition: libwebsockets.h:594
    LWS_VISIBLE LWS_EXTERN unsigned char lws_get_reserved_bits(struct lws *wsi)
    LWS_VISIBLE LWS_EXTERN unsigned char * lws_SHA1(const unsigned char *d, size_t n, unsigned char *md)
    LWS_VISIBLE LWS_EXTERN const unsigned char * lws_token_to_string(enum lws_token_indexes token)
    LWS_VISIBLE LWS_EXTERN int lws_set_extension_option(struct lws *wsi, const char *ext_name, const char *opt_name, const char *opt_val)
    -
    Definition: libwebsockets.h:737
    +
    Definition: libwebsockets.h:739
    LWS_VISIBLE LWS_EXTERN int lws_cgi(struct lws *wsi, const char *const *exec_array, int script_uri_path_len, int timeout_secs, const struct lws_protocol_vhost_options *mp_cgienv)
    LWS_VISIBLE LWS_EXTERN struct lws *LWS_WARN_UNUSED_RESULT lws_client_connect(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) LWS_WARN_DEPRECATED
    -
    Definition: libwebsockets.h:771
    +
    Definition: libwebsockets.h:773
    LWS_VISIBLE LWS_EXTERN int lwsws_get_config_vhosts(struct lws_context *context, struct lws_context_creation_info *info, const char *d, char **config_strings, int *len)
    -
    Definition: libwebsockets.h:1561
    +
    Definition: libwebsockets.h:1563
    LWS_VISIBLE LWS_EXTERN int lwsl_timestamp(int level, char *p, int len)
    -
    Definition: libwebsockets.h:1009
    -
    Definition: libwebsockets.h:1573
    -
    uv_timer_t timeout_email
    Definition: libwebsockets.h:4326
    -
    Definition: libwebsockets.h:1543
    -
    short max_http_header_pool
    Definition: libwebsockets.h:1681
    +
    Definition: libwebsockets.h:1011
    +
    Definition: libwebsockets.h:1575
    +
    uv_timer_t timeout_email
    Definition: libwebsockets.h:4328
    +
    Definition: libwebsockets.h:1545
    +
    short max_http_header_pool
    Definition: libwebsockets.h:1683
    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:2538
    -
    x509_crt ca
    Definition: libwebsockets.h:239
    -
    size_t per_session_data_size
    Definition: libwebsockets.h:1324
    -
    Definition: libwebsockets.h:576
    -
    const struct lws_protocol_vhost_options * reject_service_keywords
    Definition: libwebsockets.h:1753
    -
    lwsgs_smtp_states
    Definition: libwebsockets.h:4280
    -
    Definition: libwebsockets.h:1555
    -
    Definition: libwebsockets.h:849
    -
    LWS_VISIBLE LWS_EXTERN int lws_snprintf(char *str, size_t size, const char *format,...)
    +
    char * p
    Definition: libwebsockets.h:2540
    +
    x509_crt ca
    Definition: libwebsockets.h:241
    +
    size_t per_session_data_size
    Definition: libwebsockets.h:1326
    +
    Definition: libwebsockets.h:578
    +
    const struct lws_protocol_vhost_options * reject_service_keywords
    Definition: libwebsockets.h:1755
    +
    lwsgs_smtp_states
    Definition: libwebsockets.h:4282
    +
    Definition: libwebsockets.h:1557
    +
    Definition: libwebsockets.h:851
    LWS_VISIBLE LWS_EXTERN struct lws * lws_adopt_socket_vhost_readbuf(struct lws_vhost *vhost, lws_sockfd_type accept_fd, const char *readbuf, size_t len)
    -
    Definition: libwebsockets.h:735
    -
    Definition: libwebsockets.h:1316
    -
    Definition: libwebsockets.h:581
    +
    Definition: libwebsockets.h:737
    +
    Definition: libwebsockets.h:1318
    +
    Definition: libwebsockets.h:583
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_http_redirect(struct lws *wsi, int code, const unsigned char *loc, int len, unsigned char **p, unsigned char *end)
    -
    unsigned int count_threads
    Definition: libwebsockets.h:1688
    -
    const char * email
    Definition: libwebsockets.h:1501
    +
    unsigned int count_threads
    Definition: libwebsockets.h:1690
    +
    const char * email
    Definition: libwebsockets.h:1503
    LWS_VISIBLE LWS_EXTERN int lws_get_random(struct lws_context *context, void *buf, int len)
    -
    Definition: libwebsockets.h:563
    -
    uv_connect_t email_connect_req
    Definition: libwebsockets.h:4328
    -
    const char * server_string
    Definition: libwebsockets.h:1719
    -
    Definition: libwebsockets.h:1566
    -
    SHORT events
    Definition: libwebsockets.h:423
    -
    Definition: libwebsockets.h:740
    -
    Definition: libwebsockets.h:1550
    -
    const char * vhost_name
    Definition: libwebsockets.h:1701
    -
    Definition: libwebsockets.h:2010
    +
    Definition: libwebsockets.h:565
    +
    uv_connect_t email_connect_req
    Definition: libwebsockets.h:4330
    +
    const char * server_string
    Definition: libwebsockets.h:1721
    +
    Definition: libwebsockets.h:1568
    +
    SHORT events
    Definition: libwebsockets.h:425
    +
    Definition: libwebsockets.h:742
    +
    Definition: libwebsockets.h:1552
    +
    const char * vhost_name
    Definition: libwebsockets.h:1703
    +
    Definition: libwebsockets.h:2012
    LWS_VISIBLE LWS_EXTERN const struct lws_protocols * lws_get_protocol(struct lws *wsi)
    -
    Definition: libwebsockets.h:1476
    -
    Definition: libwebsockets.h:1498
    -
    unsigned int fd_limit_per_thread
    Definition: libwebsockets.h:1690
    +
    Definition: libwebsockets.h:1478
    +
    Definition: libwebsockets.h:1500
    +
    unsigned int fd_limit_per_thread
    Definition: libwebsockets.h:1692
    LWS_VISIBLE LWS_EXTERN int lws_cgi_write_split_stdout_headers(struct lws *wsi)
    -
    lws_gs_event
    Definition: libwebsockets.h:1492
    +
    lws_gs_event
    Definition: libwebsockets.h:1494
    LWS_VISIBLE LWS_EXTERN int lws_finalize_startup(struct lws_context *context)
    -
    int ka_interval
    Definition: libwebsockets.h:1665
    -
    Definition: libwebsockets.h:1475
    -
    int uid
    Definition: libwebsockets.h:1651
    -
    Definition: libwebsockets.h:2930
    +
    int ka_interval
    Definition: libwebsockets.h:1667
    +
    Definition: libwebsockets.h:1477
    +
    int uid
    Definition: libwebsockets.h:1653
    +
    Definition: libwebsockets.h:2932
    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:1317
    +
    const char * name
    Definition: libwebsockets.h:1319
    LWS_VISIBLE LWS_EXTERN int lws_init_vhost_client_ssl(const struct lws_context_creation_info *info, struct lws_vhost *vhost)
    -
    Definition: libwebsockets.h:4286
    -
    unsigned int http_proxy_port
    Definition: libwebsockets.h:1647
    +
    Definition: libwebsockets.h:4288
    +
    unsigned int http_proxy_port
    Definition: libwebsockets.h:1649
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_partial_buffered(struct lws *wsi)
    -
    unsigned int timeout_secs
    Definition: libwebsockets.h:1694
    -
    int port
    Definition: libwebsockets.h:1604
    +
    unsigned int timeout_secs
    Definition: libwebsockets.h:1696
    +
    int port
    Definition: libwebsockets.h:1606
    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:1653
    +
    unsigned int options
    Definition: libwebsockets.h:1655
    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:1995
    -
    int prev_events
    Definition: libwebsockets.h:538
    -
    int keepalive_timeout
    Definition: libwebsockets.h:1711
    -
    Definition: libwebsockets.h:1482
    -
    Definition: libwebsockets.h:1143
    -
    const struct lws_protocol_vhost_options * headers
    Definition: libwebsockets.h:1749
    -
    Definition: libwebsockets.h:2727
    +
    const struct lws_protocol_vhost_options * options
    Definition: libwebsockets.h:1997
    +
    int prev_events
    Definition: libwebsockets.h:540
    +
    int keepalive_timeout
    Definition: libwebsockets.h:1713
    +
    Definition: libwebsockets.h:1484
    +
    Definition: libwebsockets.h:1145
    +
    const struct lws_protocol_vhost_options * headers
    Definition: libwebsockets.h:1751
    +
    Definition: libwebsockets.h:2729
    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:1708
    -
    const char * basic_auth_login_file
    Definition: libwebsockets.h:2053
    -
    const char * host
    Definition: libwebsockets.h:2102
    -
    Definition: libwebsockets.h:1152
    -
    Definition: libwebsockets.h:602
    +
    const struct lws_protocol_vhost_options * pvo
    Definition: libwebsockets.h:1710
    +
    const char * basic_auth_login_file
    Definition: libwebsockets.h:2055
    +
    const char * host
    Definition: libwebsockets.h:2104
    +
    Definition: libwebsockets.h:1154
    +
    Definition: libwebsockets.h:604
    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:4083
    +
    int len
    Definition: libwebsockets.h:4085
    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:1609
    -
    Definition: libwebsockets.h:4142
    +
    const char * iface
    Definition: libwebsockets.h:1611
    +
    Definition: libwebsockets.h:4144
    LWS_VISIBLE LWS_EXTERN void lwsl_hexdump(void *buf, size_t len)
    -
    Definition: libwebsockets.h:1014
    -
    lws_spa_fileupload_states
    Definition: libwebsockets.h:2925
    +
    Definition: libwebsockets.h:1016
    +
    lws_spa_fileupload_states
    Definition: libwebsockets.h:2927
    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:560
    -
    Definition: libwebsockets.h:569
    + +
    Definition: libwebsockets.h:562
    +
    Definition: libwebsockets.h:571
    LWS_VISIBLE LWS_EXTERN const char * lws_sql_purify(char *escaped, const char *string, int len)
    -
    uv_tcp_t email_client
    Definition: libwebsockets.h:4329
    -
    Definition: libwebsockets.h:421
    -
    Definition: libwebsockets.h:673
    -
    lws_filefd_type(* open)(struct lws *wsi, const char *filename, unsigned long *filelen, int flags)
    Definition: libwebsockets.h:4143
    -
    lws_write_protocol
    Definition: libwebsockets.h:3272
    -
    const char * client_offer
    Definition: libwebsockets.h:1229
    -
    int(* read)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)
    Definition: libwebsockets.h:4153
    +
    uv_tcp_t email_client
    Definition: libwebsockets.h:4331
    +
    Definition: libwebsockets.h:423
    +
    Definition: libwebsockets.h:675
    +
    lws_filefd_type(* open)(struct lws *wsi, const char *filename, unsigned long *filelen, int flags)
    Definition: libwebsockets.h:4145
    +
    lws_write_protocol
    Definition: libwebsockets.h:3274
    +
    const char * client_offer
    Definition: libwebsockets.h:1231
    +
    int(* read)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)
    Definition: libwebsockets.h:4155
    LWS_VISIBLE LWS_EXTERN void lws_cancel_service(struct lws_context *context)
    -
    Definition: libwebsockets.h:2926
    -
    Definition: libwebsockets.h:574
    -
    const char * origin
    Definition: libwebsockets.h:2023
    -
    const char * name
    Definition: libwebsockets.h:1144
    +
    Definition: libwebsockets.h:2928
    +
    Definition: libwebsockets.h:576
    +
    const char * origin
    Definition: libwebsockets.h:2025
    +
    const char * name
    Definition: libwebsockets.h:1146
    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)
    LWS_VISIBLE LWS_EXTERN int lws_set_proxy(struct lws_vhost *vhost, const char *proxy)
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_frame_is_binary(struct lws *wsi)
    LWS_VISIBLE LWS_EXTERN int lws_hdr_copy(struct lws *wsi, char *dest, int len, enum lws_token_indexes h)
    -
    Definition: libwebsockets.h:750
    -
    const char * name
    Definition: libwebsockets.h:1227
    -
    Definition: libwebsockets.h:4285
    -
    short revents
    Definition: libwebsockets.h:439
    -
    lws_extension_callback_function * callback
    Definition: libwebsockets.h:1228
    -
    long ssl_options_set
    Definition: libwebsockets.h:1733
    -
    Definition: libwebsockets.h:1056
    +
    Definition: libwebsockets.h:752
    +
    const char * name
    Definition: libwebsockets.h:1229
    +
    Definition: libwebsockets.h:4287
    +
    short revents
    Definition: libwebsockets.h:441
    +
    lws_extension_callback_function * callback
    Definition: libwebsockets.h:1230
    +
    long ssl_options_set
    Definition: libwebsockets.h:1735
    +
    Definition: libwebsockets.h:1058
    LWS_VISIBLE LWS_EXTERN const struct lws_protocols * lws_protocol_get(struct lws *wsi) LWS_WARN_DEPRECATED
    -
    unsigned int mask
    Definition: libwebsockets.h:1486
    +
    unsigned int mask
    Definition: libwebsockets.h:1488
    LWS_VISIBLE LWS_EXTERN int lws_email_init(struct lws_email *email, uv_loop_t *loop, int max_content)
    -
    const void * client_exts
    Definition: libwebsockets.h:2112
    -
    lws_mount_protocols
    Definition: libwebsockets.h:2004
    +
    const void * client_exts
    Definition: libwebsockets.h:2114
    +
    lws_mount_protocols
    Definition: libwebsockets.h:2006
    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:437
    -
    unsigned int max_http_header_data2
    Definition: libwebsockets.h:1728
    -
    Definition: libwebsockets.h:2005
    +
    lws_sockfd_type fd
    Definition: libwebsockets.h:439
    +
    unsigned int max_http_header_data2
    Definition: libwebsockets.h:1730
    +
    Definition: libwebsockets.h:2007
    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:2036
    -
    void * external_baggage_free_on_destroy
    Definition: libwebsockets.h:1760
    +
    const struct lws_protocol_vhost_options * interpret
    Definition: libwebsockets.h:2038
    +
    void * external_baggage_free_on_destroy
    Definition: libwebsockets.h:1762
    LWS_VISIBLE LWS_EXTERN int lws_service(struct lws_context *context, int timeout_ms)
    - -
    Definition: libwebsockets.h:1548
    + +
    Definition: libwebsockets.h:1550
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_http_transaction_completed(struct lws *wsi)
    -
    int count_vars
    Definition: libwebsockets.h:2552
    +
    int count_vars
    Definition: libwebsockets.h:2554
    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:2606
    +
    Definition: libwebsockets.h:2608
    LWS_VISIBLE LWS_EXTERN struct lws_context * lws_create_context(struct lws_context_creation_info *info)
    -
    Definition: libwebsockets.h:729
    -
    void * data
    Definition: libwebsockets.h:2550
    -
    char * content
    Definition: libwebsockets.h:4332
    +
    Definition: libwebsockets.h:731
    +
    void * data
    Definition: libwebsockets.h:2552
    +
    char * content
    Definition: libwebsockets.h:4334
    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:1623
    -
    Definition: libwebsockets.h:4293
    -
    const char * address
    Definition: libwebsockets.h:2094
    -
    unsigned long(* seek_cur)(struct lws *wsi, lws_filefd_type fd, long offset_from_cur_pos)
    Definition: libwebsockets.h:4150
    -
    void * user
    Definition: libwebsockets.h:1345
    -
    int events
    Definition: libwebsockets.h:537
    +
    const struct lws_token_limits * token_limits
    Definition: libwebsockets.h:1625
    +
    Definition: libwebsockets.h:4295
    +
    const char * address
    Definition: libwebsockets.h:2096
    +
    unsigned long(* seek_cur)(struct lws *wsi, lws_filefd_type fd, long offset_from_cur_pos)
    Definition: libwebsockets.h:4152
    +
    void * user
    Definition: libwebsockets.h:1347
    +
    int events
    Definition: libwebsockets.h:539
    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:4319
    -
    Definition: libwebsockets.h:2011
    -
    void * user
    Definition: libwebsockets.h:1655
    -
    Definition: libwebsockets.h:4289
    -
    Definition: libwebsockets.h:3295
    -
    char * token
    Definition: libwebsockets.h:2607
    +
    int(* on_get_body)(struct lws_email *email, char *buf, int len)
    Definition: libwebsockets.h:4321
    +
    Definition: libwebsockets.h:2013
    +
    void * user
    Definition: libwebsockets.h:1657
    +
    Definition: libwebsockets.h:4291
    +
    Definition: libwebsockets.h:3297
    +
    char * token
    Definition: libwebsockets.h:2609
    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:1428
    -
    void * l
    Definition: libwebsockets.h:1443
    -
    const char * ssl_private_key_filepath
    Definition: libwebsockets.h:1632
    -
    Definition: libwebsockets.h:1581
    -
    int max_len
    Definition: libwebsockets.h:2540
    -
    Definition: libwebsockets.h:731
    -
    const struct lws_protocol_vhost_options * next
    Definition: libwebsockets.h:1994
    -
    Definition: libwebsockets.h:742
    +
    int count_protocols
    Definition: libwebsockets.h:1430
    +
    void * l
    Definition: libwebsockets.h:1445
    +
    const char * ssl_private_key_filepath
    Definition: libwebsockets.h:1634
    +
    Definition: libwebsockets.h:1583
    +
    int max_len
    Definition: libwebsockets.h:2542
    +
    Definition: libwebsockets.h:733
    +
    const struct lws_protocol_vhost_options * next
    Definition: libwebsockets.h:1996
    +
    Definition: libwebsockets.h:744
    LWS_VISIBLE LWS_EXTERN void lws_rx_flow_allow_all_protocol(const struct lws_context *context, const struct lws_protocols *protocol)
    -
    Definition: libwebsockets.h:2546
    +
    Definition: libwebsockets.h:2548
    LWS_VISIBLE LWS_EXTERN const char *LWS_WARN_UNUSED_RESULT lws_canonical_hostname(struct lws_context *context)
    -
    Definition: libwebsockets.h:941
    -
    const char * ssl_ca_filepath
    Definition: libwebsockets.h:1638
    -
    lws_client_connect_ssl_connection_flags
    Definition: libwebsockets.h:2081
    -
    int gid
    Definition: libwebsockets.h:1649
    -
    struct lws_vhost * vhost
    Definition: libwebsockets.h:2126
    -
    int lws_callback_function(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len)
    Definition: libwebsockets.h:1078
    +
    Definition: libwebsockets.h:943
    +
    const char * ssl_ca_filepath
    Definition: libwebsockets.h:1640
    +
    lws_client_connect_ssl_connection_flags
    Definition: libwebsockets.h:2083
    +
    int gid
    Definition: libwebsockets.h:1651
    +
    struct lws_vhost * vhost
    Definition: libwebsockets.h:2128
    +
    int lws_callback_function(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len)
    Definition: libwebsockets.h:1080
    LWS_VISIBLE LWS_EXTERN void lws_cancel_service_pt(struct lws *wsi)
    -
    Definition: libwebsockets.h:1568
    -
    Definition: libwebsockets.h:610
    -
    Definition: libwebsockets.h:4284
    -
    unsigned int api_magic
    Definition: libwebsockets.h:1426
    -
    Definition: libwebsockets.h:1571
    +
    Definition: libwebsockets.h:1570
    +
    Definition: libwebsockets.h:612
    +
    Definition: libwebsockets.h:4286
    +
    unsigned int api_magic
    Definition: libwebsockets.h:1428
    +
    Definition: libwebsockets.h:1573
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_send_pipe_choked(struct lws *wsi)
    -
    Definition: libwebsockets.h:4287
    -
    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:2947
    +
    Definition: libwebsockets.h:4289
    +
    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:2949
    diff --git a/doc/html/navtreeindex1.js b/doc/html/navtreeindex1.js index 3542cf06..df397950 100644 --- a/doc/html/navtreeindex1.js +++ b/doc/html/navtreeindex1.js @@ -167,6 +167,7 @@ var NAVTREEINDEX1 = "group__httpft.html#gab4da87a4800413f15e7aba649fb1d77c":[9,6,2,0], "group__httpft.html#gab4da87a4800413f15e7aba649fb1d77c":[11,0,0,0,99], "group__log.html":[9,7], +"group__log.html#ga0cdc1065ae7f003d59a3c8525acf545e":[11,0,0,0,40], "group__log.html#ga14542b84d2c76efa7814124bb10f9c5f":[11,0,0,0,32], "group__log.html#ga244647f9e1bf0097ccdde66d74f41e26":[11,0,0,0,151], "group__log.html#ga244647f9e1bf0097ccdde66d74f41e26":[9,7,0], @@ -177,7 +178,6 @@ var NAVTREEINDEX1 = "group__log.html#ga898b1f03872ad019f507d4e35bbefa90":[9,7,2], "group__log.html#gab7c0fc936cc9f1eb58e2bb234c15147c":[11,0,0,0,174], "group__log.html#gab7c0fc936cc9f1eb58e2bb234c15147c":[9,7,1], -"group__log.html#gaf5f07837692b2f231a79da8a058288aa":[11,0,0,0,40], "group__log.html#gga14542b84d2c76efa7814124bb10f9c5fa083a44e71966a0e768426e477e1bc358":[11,0,0,0,32,8], "group__log.html#gga14542b84d2c76efa7814124bb10f9c5fa2be9c1d50d05756078e9abc72c9e50cc":[11,0,0,0,32,5], "group__log.html#gga14542b84d2c76efa7814124bb10f9c5fa52e5cd60bbb85f30ec0078a2c4be0c59":[11,0,0,0,32,3], @@ -196,6 +196,8 @@ var NAVTREEINDEX1 = "group__misc.html#ga0e705d498e8c8500649a26ba30a1e106":[11,0,0,0,136], "group__misc.html#ga1ec0d9faac5d3a5824d765c287c043aa":[11,0,0,0,131], "group__misc.html#ga1ec0d9faac5d3a5824d765c287c043aa":[9,8,8], +"group__misc.html#ga2163492f17db959a36967adb73d823b4":[11,0,0,0,155], +"group__misc.html#ga2163492f17db959a36967adb73d823b4":[9,8,10], "group__misc.html#ga33bf2635033710b25f931b57ed663e1e":[11,0,0,0,130], "group__misc.html#ga33bf2635033710b25f931b57ed663e1e":[9,8,7], "group__misc.html#ga58f906c6be0ca80efd813f694569dd4a":[11,0,0,0,105], @@ -204,8 +206,6 @@ var NAVTREEINDEX1 = "group__misc.html#ga629f48268fd1856b54b11172991b97d9":[11,0,0,0,96], "group__misc.html#ga8930fe36a3f3eefe4a6a4fd499d8e899":[9,8,5], "group__misc.html#ga8930fe36a3f3eefe4a6a4fd499d8e899":[11,0,0,0,100], -"group__misc.html#ga9f37d0e357de2ab4170723fcdb665d21":[11,0,0,0,155], -"group__misc.html#ga9f37d0e357de2ab4170723fcdb665d21":[9,8,10], "group__misc.html#gaa194584fff9698f3b280658f770ccd0f":[11,0,0,0,173], "group__misc.html#gaa194584fff9698f3b280658f770ccd0f":[9,8,11], "group__misc.html#gab321ed812f46f6dc7ef9e3ca6f00cf1b":[9,8,9], diff --git a/doc/html/navtreeindex2.js b/doc/html/navtreeindex2.js index ebc0708f..ff0e3fe4 100644 --- a/doc/html/navtreeindex2.js +++ b/doc/html/navtreeindex2.js @@ -188,8 +188,8 @@ var NAVTREEINDEX2 = "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae8d1de0bb56e03aa58cb4d44b18edd2e":[11,0,0,0,23,12], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae9734e1d7af2abf291665ce9e4a728d3":[11,0,0,0,23,19], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae9734e1d7af2abf291665ce9e4a728d3":[9,16,1,19], -"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aeb0cec65ec82a713cd01e9ca9aeeb5e6":[9,16,1,40], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aeb0cec65ec82a713cd01e9ca9aeeb5e6":[11,0,0,0,23,57], +"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aeb0cec65ec82a713cd01e9ca9aeeb5e6":[9,16,1,40], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7af6cf80e57aae8ba0a57a5c456b1fe026":[11,0,0,0,23,55], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afc4b2f72cc9e424a750b506ce0cc4310":[11,0,0,0,23,51], "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afd8fd77a1cc9405fcb4f26915d7f2d01":[11,0,0,0,23,29], diff --git a/doc/html/navtreeindex3.js b/doc/html/navtreeindex3.js index 773beb7e..6103626a 100644 --- a/doc/html/navtreeindex3.js +++ b/doc/html/navtreeindex3.js @@ -11,8 +11,8 @@ var NAVTREEINDEX3 = "group__wsstatus.html#ga26a140623d202dd2bf2004deb6994baa":[11,0,0,0,123], "group__wsstatus.html#ga2bb3655329b4651cd06f79ee3a764421":[11,0,0,0,141], "group__wsstatus.html#ga2bb3655329b4651cd06f79ee3a764421":[9,18,7], -"group__wsstatus.html#ga3df5045656dfb6b0e63a38de2dca79d2":[11,0,0,0,106], "group__wsstatus.html#ga3df5045656dfb6b0e63a38de2dca79d2":[9,18,1], +"group__wsstatus.html#ga3df5045656dfb6b0e63a38de2dca79d2":[11,0,0,0,106], "group__wsstatus.html#ga42152ffb385f9b19f4e7b04f998425de":[9,18,2], "group__wsstatus.html#ga42152ffb385f9b19f4e7b04f998425de":[11,0,0,0,108], "group__wsstatus.html#ga4ad226d5e01024b4046f4a5a37199aa1":[9,18,3], @@ -45,8 +45,8 @@ var NAVTREEINDEX3 = "libwebsockets_8h.html#a4e877a4f0bb027d05d3a90c8e6a632de":[11,0,0,0,42], "libwebsockets_8h.html#a5326d3402af8429a166dd991dc65c4a2":[11,0,0,0,68], "libwebsockets_8h.html#a5e627dbf1db48170ef486edbaf268672":[11,0,0,0,139], +"libwebsockets_8h.html#a71451ba21aadc2fa3e25674d04c31ab7":[11,0,0,0,44], "libwebsockets_8h.html#a72fe65e83b8bb03f904a1a256c673536":[11,0,0,0,137], -"libwebsockets_8h.html#a75e9827318684877deb4189121a8cd2a":[11,0,0,0,44], "libwebsockets_8h.html#a863bdd5bca33bcbaa424c42fb7b2fc96":[11,0,0,0,183], "libwebsockets_8h.html#a9032a3062641d334161c29adcc4fa15d":[11,0,0,0,181], "libwebsockets_8h.html#a9b1bfc6f34319188d2aa40500d825bab":[11,0,0,0,43], diff --git a/doc/html/navtreeindex4.js b/doc/html/navtreeindex4.js index 769d9d22..4e8a961e 100644 --- a/doc/html/navtreeindex4.js +++ b/doc/html/navtreeindex4.js @@ -77,12 +77,12 @@ var NAVTREEINDEX4 = "structlws__process__html__state.html#af21119890fdfebe28fb5c4dabfc1bdf5":[9,6,1,1,1], "structlws__protocol__vhost__options.html":[9,4,0,0], "structlws__protocol__vhost__options.html":[9,4,2], -"structlws__protocol__vhost__options.html#a0640a92513c70ee6b9b295a9ad1658e7":[9,4,2,3], "structlws__protocol__vhost__options.html#a0640a92513c70ee6b9b295a9ad1658e7":[9,4,0,0,3], +"structlws__protocol__vhost__options.html#a0640a92513c70ee6b9b295a9ad1658e7":[9,4,2,3], "structlws__protocol__vhost__options.html#abc714ddb4171756fc8196e9823a1e21c":[9,4,2,1], "structlws__protocol__vhost__options.html#abc714ddb4171756fc8196e9823a1e21c":[9,4,0,0,1], -"structlws__protocol__vhost__options.html#acf9db77f8eb64cd4e314be9b43d8a8b9":[9,4,2,0], "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__protocols.html":[9,10,1], @@ -100,10 +100,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,4,0], "structlws__tokens.html":[9,6,6], -"structlws__tokens.html#a855b7375d1d58516c0ecd4b60e9a7766":[9,6,6,1], +"structlws__tokens.html":[9,6,4,0], "structlws__tokens.html#a855b7375d1d58516c0ecd4b60e9a7766":[9,6,4,0,1], +"structlws__tokens.html#a855b7375d1d58516c0ecd4b60e9a7766":[9,6,6,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/client-handshake.c b/lib/client-handshake.c index 2825be07..a407d9c1 100644 --- a/lib/client-handshake.c +++ b/lib/client-handshake.c @@ -115,31 +115,49 @@ lws_client_connect_2(struct lws *wsi) { struct addrinfo ai, *res, *result = NULL; void *p = NULL; + int addr_rv; memset (&ai, 0, sizeof ai); ai.ai_family = PF_UNSPEC; ai.ai_socktype = SOCK_STREAM; ai.ai_flags = AI_CANONNAME; - if (getaddrinfo(ads, NULL, &ai, &result)) { + addr_rv = getaddrinfo(ads, NULL, &ai, &result); + if (!addr_rv) { + res = result; + while (!p && res) { + switch (res->ai_family) { + case AF_INET: + p = &((struct sockaddr_in *)res->ai_addr)->sin_addr; + break; + } + + res = res->ai_next; + } +#if defined(LWS_FALLBACK_GETHOSTBYNAME) + } else if (addr_rv == EAI_SYSTEM) { + struct hostent *host; + + lwsl_info("getaddrinfo (ipv4) failed, trying gethostbyname\n"); + host = gethostbyname(ads); + if (host) { + p = host->h_addr; + } else { + lwsl_err("gethostbyname failed\n"); + cce = "gethostbyname (ipv4) failed"; + goto oom4; + } +#endif + } else { lwsl_err("getaddrinfo failed\n"); cce = "getaddrinfo (ipv4) failed"; goto oom4; } - res = result; - while (!p && res) { - switch (res->ai_family) { - case AF_INET: - p = &((struct sockaddr_in *)res->ai_addr)->sin_addr; - break; - } - res = res->ai_next; - } - if (!p) { + if (result) + freeaddrinfo(result); lwsl_err("Couldn't identify address\n"); - freeaddrinfo(result); cce = "unable to lookup address"; goto oom4; } @@ -147,7 +165,8 @@ lws_client_connect_2(struct lws *wsi) server_addr4.sin_family = AF_INET; server_addr4.sin_addr = *((struct in_addr *)p); bzero(&server_addr4.sin_zero, 8); - freeaddrinfo(result); + if (result) + freeaddrinfo(result); } if (!lws_socket_is_valid(wsi->sock)) { diff --git a/lws_config.h.in b/lws_config.h.in index 97fec5cd..b98a74af 100644 --- a/lws_config.h.in +++ b/lws_config.h.in @@ -121,5 +121,5 @@ /* OPTEE */ #cmakedefine LWS_PLAT_OPTEE - +#cmakedefine LWS_FALLBACK_GETHOSTBYNAME ${LWS_SIZEOFPTR_CODE}

    Functions

    -LWS_VISIBLE LWS_EXTERN void _lws_log (int filter, const char *format,...)
     
    +LWS_VISIBLE LWS_EXTERN void _lws_log (int filter, const char *format,...) LWS_FORMAT(2)
     
    LWS_VISIBLE LWS_EXTERN void _lws_logv (int filter, const char *format, va_list vl)
     
    esp8266_cr
    void esp8266_tcp_stream_accept (lws_sockfd_type fd, struct lws *wsi)
     
    -int ets_snprintf (char *str, size_t size, const char *format,...)
     
    +int ets_snprintf (char *str, size_t size, const char *format,...) LWS_FORMAT(3)
     
    void os_timer_disarm (void *)
     
     
    LWS_VISIBLE LWS_EXTERN int lws_interface_to_sa (int ipv6, const char *ifname, struct sockaddr_in *addr, size_t addrlen)
     
    LWS_VISIBLE LWS_EXTERN int lws_snprintf (char *str, size_t size, const char *format,...)
     
    LWS_VISIBLE LWS_EXTERN int lws_snprintf (char *str, size_t size, const char *format,...) LWS_FORMAT(3)
     
    LWS_VISIBLE LWS_EXTERN int lws_get_random (struct lws_context *context, void *buf, int len)
     
    LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_daemonize (const char *_lock_path)