diff --git a/doc/html/functions.html b/doc/html/functions.html
index 822d3ceb..5394803b 100644
--- a/doc/html/functions.html
+++ b/doc/html/functions.html
@@ -502,6 +502,9 @@ $(document).ready(function(){initNavTree('functions.html','');});
lws_close_reason()
: libwebsockets.h
diff --git a/doc/html/group__client.html b/doc/html/group__client.html
index 15d75f11..1e459d1b 100644
--- a/doc/html/group__client.html
+++ b/doc/html/group__client.html
@@ -76,8 +76,8 @@ Data Structures
|
-LWS_VISIBLE LWS_EXTERN struct lws *LWS_WARN_UNUSED_RESULT | lws_client_connect_via_info (struct lws_client_connect_info *ccinfo) |
- |
+LWS_VISIBLE LWS_EXTERN struct lws * | lws_client_connect_via_info (struct lws_client_connect_info *ccinfo) |
+ |
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 |
|
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 |
@@ -269,12 +269,12 @@ LWS_VISIBLE LWS_EXTERN int
-
+
- LWS_VISIBLE LWS_EXTERN struct lws* LWS_WARN_UNUSED_RESULT lws_client_connect_via_info |
+ LWS_VISIBLE LWS_EXTERN struct lws* lws_client_connect_via_info |
( |
struct lws_client_connect_info * |
ccinfo | ) |
@@ -284,9 +284,10 @@ LWS_VISIBLE LWS_EXTERN int
#include <lib/libwebsockets.h>
- lws_client_connect_via_info() - Connect to another websocket server - Parameters
-
+
lws_client_connect_via_info() - Connect to another websocket server - Parameters
-
- ccinfo | pointer to lws_client_connect_info struct This function creates a connection to a remote server |
+ ccinfo | pointer to lws_client_connect_info struct This function creates a connection to a remote server using the
+ information provided in ccinfo. |
diff --git a/doc/html/group__client.js b/doc/html/group__client.js
index 9d877f27..f35dce6f 100644
--- a/doc/html/group__client.js
+++ b/doc/html/group__client.js
@@ -13,6 +13,7 @@ var group__client =
[ "path", "structlws__client__connect__info.html#a76a8388733f114fb8fd3643874781185", null ],
[ "port", "structlws__client__connect__info.html#a1af124d81c3c22a46d39387c5bc3d6b9", null ],
[ "protocol", "structlws__client__connect__info.html#aba35adfb74845a5fd0c3dc141cbdddd2", null ],
+ [ "pwsi", "structlws__client__connect__info.html#a065063b5117ecd0a59567c97f04bda2e", null ],
[ "ssl_connection", "structlws__client__connect__info.html#a9862297827639238a7a0b4054c3ddf3d", null ],
[ "uri_replace_from", "structlws__client__connect__info.html#a03c305fdca809667b6a9a83b3edfd83a", null ],
[ "uri_replace_to", "structlws__client__connect__info.html#a9959ba103d3d2484e559a9f7879eebe3", null ],
@@ -21,6 +22,6 @@ var group__client =
] ],
[ "lws_client_connect", "group__client.html#ga4af0a20108a95e8b6d94dd4d80055ff3", null ],
[ "lws_client_connect_extended", "group__client.html#gac6a8558b4410961a880241c2ac1271e2", null ],
- [ "lws_client_connect_via_info", "group__client.html#gac30a7be106abd0cedfbb2e8b8fe3a2f5", null ],
+ [ "lws_client_connect_via_info", "group__client.html#ga0c966136905f467816307cfba6deb5fd", null ],
[ "lws_init_vhost_client_ssl", "group__client.html#ga4f44b8230e6732816ca5cd8d1aaaf340", null ]
];
\ No newline at end of file
diff --git a/doc/html/group__context-and-vhost.html b/doc/html/group__context-and-vhost.html
index 879d4dcd..cff21961 100644
--- a/doc/html/group__context-and-vhost.html
+++ b/doc/html/group__context-and-vhost.html
@@ -206,23 +206,23 @@ Functions
|
(VH) if set, only ipv6 allowed on the vhost
- Definition: libwebsockets.h:1348
- Definition: libwebsockets.h:1364
- Definition: libwebsockets.h:1376
- Definition: libwebsockets.h:1383
- Definition: libwebsockets.h:1353
- Definition: libwebsockets.h:1371
- Definition: libwebsockets.h:1355
- Definition: libwebsockets.h:1360
- Definition: libwebsockets.h:1381
- Definition: libwebsockets.h:1393
- Definition: libwebsockets.h:1362
- Definition: libwebsockets.h:1374
- Definition: libwebsockets.h:1386
- Definition: libwebsockets.h:1369
- Definition: libwebsockets.h:1367
- Definition: libwebsockets.h:1388
- Definition: libwebsockets.h:1391
+ Definition: libwebsockets.h:1388
+ Definition: libwebsockets.h:1404
+ Definition: libwebsockets.h:1416
+ Definition: libwebsockets.h:1423
+ Definition: libwebsockets.h:1393
+ Definition: libwebsockets.h:1411
+ Definition: libwebsockets.h:1395
+ Definition: libwebsockets.h:1400
+ Definition: libwebsockets.h:1421
+ Definition: libwebsockets.h:1433
+ Definition: libwebsockets.h:1402
+ Definition: libwebsockets.h:1414
+ Definition: libwebsockets.h:1426
+ Definition: libwebsockets.h:1409
+ Definition: libwebsockets.h:1407
+ Definition: libwebsockets.h:1428
+ Definition: libwebsockets.h:1431
diff --git a/doc/html/group__extensions.html b/doc/html/group__extensions.html
index eb15819f..aba469ad 100644
--- a/doc/html/group__extensions.html
+++ b/doc/html/group__extensions.html
@@ -242,9 +242,9 @@ Functions |
may have an optional decimal argument
-Definition: libwebsockets.h:952
-
Definition: libwebsockets.h:950
-
Definition: libwebsockets.h:951
+
Definition: libwebsockets.h:992
+
Definition: libwebsockets.h:990
+
Definition: libwebsockets.h:991
diff --git a/doc/html/group__form-parsing.html b/doc/html/group__form-parsing.html
index f40c0c6c..e7b1d7c1 100644
--- a/doc/html/group__form-parsing.html
+++ b/doc/html/group__form-parsing.html
@@ -156,9 +156,9 @@ Functions
a new file is starting to arrive
-
diff --git a/doc/html/group__generic-sessions.html b/doc/html/group__generic-sessions.html
index 0488d79e..91850ba3 100644
--- a/doc/html/group__generic-sessions.html
+++ b/doc/html/group__generic-sessions.html
@@ -117,8 +117,8 @@ Enumerations
an existing user was deleted
-Definition: libwebsockets.h:1313
-
Definition: libwebsockets.h:1312
+
Definition: libwebsockets.h:1353
+
Definition: libwebsockets.h:1352
@@ -148,10 +148,10 @@ Enumerations
he just completed "forgot password" flow
-Definition: libwebsockets.h:1296
-
Definition: libwebsockets.h:1297
-
Definition: libwebsockets.h:1295
-
Definition: libwebsockets.h:1294
+
Definition: libwebsockets.h:1336
+
Definition: libwebsockets.h:1337
+
Definition: libwebsockets.h:1335
+
Definition: libwebsockets.h:1334
diff --git a/doc/html/group__sending-data.html b/doc/html/group__sending-data.html
index 2e9d89e4..f7b92ea5 100644
--- a/doc/html/group__sending-data.html
+++ b/doc/html/group__sending-data.html
@@ -130,13 +130,13 @@ Functions
client packet payload goes out on wire unmunged only useful for security tests since normal servers cannot decode the content if used
- 2912 LWS_WRITE_HTTP_FINAL = 7,
Definition: libwebsockets.h:2904
-
Definition: libwebsockets.h:2927
-
Definition: libwebsockets.h:2894
-
Definition: libwebsockets.h:2898
-
Definition: libwebsockets.h:2930
-
Definition: libwebsockets.h:2901
-
Definition: libwebsockets.h:2916
+
2964 LWS_WRITE_HTTP_FINAL = 7,
Definition: libwebsockets.h:2956
+
Definition: libwebsockets.h:2979
+
Definition: libwebsockets.h:2946
+
Definition: libwebsockets.h:2950
+
Definition: libwebsockets.h:2982
+
Definition: libwebsockets.h:2953
+
Definition: libwebsockets.h:2968
diff --git a/doc/html/group__smtp.html b/doc/html/group__smtp.html
index 2592f3e2..e2dadc61 100644
--- a/doc/html/group__smtp.html
+++ b/doc/html/group__smtp.html
@@ -157,15 +157,15 @@ Functions
sent the session quit
-Definition: libwebsockets.h:3818
-
Definition: libwebsockets.h:3823
-
Definition: libwebsockets.h:3816
-
Definition: libwebsockets.h:3817
-
Definition: libwebsockets.h:3821
-
Definition: libwebsockets.h:3820
-
Definition: libwebsockets.h:3824
-
Definition: libwebsockets.h:3819
-
Definition: libwebsockets.h:3822
+
Definition: libwebsockets.h:3870
+
Definition: libwebsockets.h:3875
+
Definition: libwebsockets.h:3868
+
Definition: libwebsockets.h:3869
+
Definition: libwebsockets.h:3873
+
Definition: libwebsockets.h:3872
+
Definition: libwebsockets.h:3876
+
Definition: libwebsockets.h:3871
+
Definition: libwebsockets.h:3874
diff --git a/doc/html/group__usercb.html b/doc/html/group__usercb.html
index 76a46ffd..59c355c8 100644
--- a/doc/html/group__usercb.html
+++ b/doc/html/group__usercb.html
@@ -204,8 +204,43 @@ Enumerations
(VH) after the server completes a handshake with an incoming client. If you built the library with ssl support, in is a pointer to the ssl struct associated with the connection or NULL.
LWS_CALLBACK_CLIENT_CONNECTION_ERROR |
- the request client connection has been unable to complete a handshake with the remote server. If in is non-NULL, you can find an error string of length len where it points to.
- |
+the request client connection has been unable to complete a handshake with the remote server. If in is non-NULL, you can find an error string of length len where it points to
+Diagnostic strings that may be returned include
"getaddrinfo (ipv6) failed"
+ "unknown address family"
+ "getaddrinfo (ipv4) failed"
+ "set socket opts failed"
+ "insert wsi failed"
+ "lws_ssl_client_connect1 failed"
+ "lws_ssl_client_connect2 failed"
+ "Peer hung up"
+ "read failed"
+ "HS: URI missing"
+ "HS: Redirect code but no Location"
+ "HS: URI did not parse"
+ "HS: Redirect failed"
+ "HS: Server did not return 200"
+ "HS: OOM"
+ "HS: disallowed by client filter"
+ "HS: disallowed at ESTABLISHED"
+ "HS: ACCEPT missing"
+ "HS: ws upgrade response not 101"
+ "HS: UPGRADE missing"
+ "HS: Upgrade to something other than websocket"
+ "HS: CONNECTION missing"
+ "HS: UPGRADE malformed"
+ "HS: PROTOCOL malformed"
+ "HS: Cannot match protocol"
+ "HS: EXT: list too big"
+ "HS: EXT: failed setting defaults"
+ "HS: EXT: failed parsing defaults"
+ "HS: EXT: failed parsing options"
+ "HS: EXT: Rejects server options"
+ "HS: EXT: unknown ext"
+ "HS: Accept hash wrong"
+ "HS: Rejected by filter cb"
+ "HS: OOM"
+ "HS: SO_SNDBUF failed"
+ "HS: Rejected at CLIENT_ESTABLISHED"
LWS_CALLBACK_CLIENT_FILTER_PRE_ESTABLISH |
this is the last chance for the client user code to examine the http headers and decide to reject the connection. If the content in the headers is interesting to the client (url, etc) it needs to copy it out at this point since it will be destroyed before the CLIENT_ESTABLISHED call
|
@@ -335,46 +370,46 @@ Enumerations
user code can use any including / above without fear of clashes
- 836 LWS_CALLBACK_WS_EXT_DEFAULTS = 39,
839 LWS_CALLBACK_CGI = 40,
841 LWS_CALLBACK_CGI_TERMINATED = 41,
843 LWS_CALLBACK_CGI_STDIN_DATA = 42,
845 LWS_CALLBACK_CGI_STDIN_COMPLETED = 43,
847 LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP = 44,
849 LWS_CALLBACK_CLOSED_CLIENT_HTTP = 45,
851 LWS_CALLBACK_RECEIVE_CLIENT_HTTP = 46,
853 LWS_CALLBACK_COMPLETED_CLIENT_HTTP = 47,
855 LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ = 48,
857 LWS_CALLBACK_HTTP_BIND_PROTOCOL = 49,
859 LWS_CALLBACK_HTTP_DROP_PROTOCOL = 50,
861 LWS_CALLBACK_CHECK_ACCESS_RIGHTS = 51,
863 LWS_CALLBACK_PROCESS_HTML = 52,
865 LWS_CALLBACK_ADD_HEADERS = 53,
867 LWS_CALLBACK_SESSION_INFO = 54,
870 LWS_CALLBACK_GS_EVENT = 55,
Definition: libwebsockets.h:638
-
Definition: libwebsockets.h:766
-
Definition: libwebsockets.h:681
-
Definition: libwebsockets.h:764
-
Definition: libwebsockets.h:669
-
Definition: libwebsockets.h:615
-
Definition: libwebsockets.h:649
-
Definition: libwebsockets.h:790
-
Definition: libwebsockets.h:736
-
Definition: libwebsockets.h:629
-
Definition: libwebsockets.h:827
-
Definition: libwebsockets.h:819
-
Definition: libwebsockets.h:816
-
Definition: libwebsockets.h:747
-
Definition: libwebsockets.h:590
-
Definition: libwebsockets.h:768
-
Definition: libwebsockets.h:756
-
Definition: libwebsockets.h:587
-
Definition: libwebsockets.h:774
-
Definition: libwebsockets.h:580
-
Definition: libwebsockets.h:661
-
Definition: libwebsockets.h:759
-
Definition: libwebsockets.h:796
-
Definition: libwebsockets.h:636
-
Definition: libwebsockets.h:632
+
876 LWS_CALLBACK_WS_EXT_DEFAULTS = 39,
879 LWS_CALLBACK_CGI = 40,
881 LWS_CALLBACK_CGI_TERMINATED = 41,
883 LWS_CALLBACK_CGI_STDIN_DATA = 42,
885 LWS_CALLBACK_CGI_STDIN_COMPLETED = 43,
887 LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP = 44,
889 LWS_CALLBACK_CLOSED_CLIENT_HTTP = 45,
891 LWS_CALLBACK_RECEIVE_CLIENT_HTTP = 46,
893 LWS_CALLBACK_COMPLETED_CLIENT_HTTP = 47,
895 LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ = 48,
897 LWS_CALLBACK_HTTP_BIND_PROTOCOL = 49,
899 LWS_CALLBACK_HTTP_DROP_PROTOCOL = 50,
901 LWS_CALLBACK_CHECK_ACCESS_RIGHTS = 51,
903 LWS_CALLBACK_PROCESS_HTML = 52,
905 LWS_CALLBACK_ADD_HEADERS = 53,
907 LWS_CALLBACK_SESSION_INFO = 54,
910 LWS_CALLBACK_GS_EVENT = 55,
Definition: libwebsockets.h:678
+
Definition: libwebsockets.h:806
+
Definition: libwebsockets.h:721
+
Definition: libwebsockets.h:804
+
Definition: libwebsockets.h:709
+
Definition: libwebsockets.h:655
+
Definition: libwebsockets.h:689
+
Definition: libwebsockets.h:830
+
Definition: libwebsockets.h:776
+
Definition: libwebsockets.h:669
+
Definition: libwebsockets.h:867
+
Definition: libwebsockets.h:859
+
Definition: libwebsockets.h:856
+
Definition: libwebsockets.h:787
+
Definition: libwebsockets.h:630
+
Definition: libwebsockets.h:808
+
Definition: libwebsockets.h:796
+
Definition: libwebsockets.h:627
+
Definition: libwebsockets.h:814
+
Definition: libwebsockets.h:620
+
Definition: libwebsockets.h:701
+
Definition: libwebsockets.h:799
+
Definition: libwebsockets.h:836
+
Definition: libwebsockets.h:676
+
Definition: libwebsockets.h:672
Definition: libwebsockets.h:572
-
Definition: libwebsockets.h:694
-
Definition: libwebsockets.h:600
-
Definition: libwebsockets.h:634
-
Definition: libwebsockets.h:712
-
Definition: libwebsockets.h:598
-
Definition: libwebsockets.h:603
-
Definition: libwebsockets.h:688
+
Definition: libwebsockets.h:734
+
Definition: libwebsockets.h:640
+
Definition: libwebsockets.h:674
+
Definition: libwebsockets.h:752
+
Definition: libwebsockets.h:638
+
Definition: libwebsockets.h:643
+
Definition: libwebsockets.h:728
Definition: libwebsockets.h:576
-
Definition: libwebsockets.h:613
-
Definition: libwebsockets.h:875
-
Definition: libwebsockets.h:592
-
Definition: libwebsockets.h:594
-
Definition: libwebsockets.h:605
-
Definition: libwebsockets.h:804
+
Definition: libwebsockets.h:653
+
Definition: libwebsockets.h:915
+
Definition: libwebsockets.h:632
+
Definition: libwebsockets.h:634
+
Definition: libwebsockets.h:645
+
Definition: libwebsockets.h:844
diff --git a/doc/html/group__vhost-mounts.html b/doc/html/group__vhost-mounts.html
index 4143d018..dbbc999c 100644
--- a/doc/html/group__vhost-mounts.html
+++ b/doc/html/group__vhost-mounts.html
@@ -129,13 +129,13 @@ Enumerations
hand by named protocol's callback
-Definition: libwebsockets.h:1749
-
Definition: libwebsockets.h:1747
-
Definition: libwebsockets.h:1748
-
Definition: libwebsockets.h:1750
-
Definition: libwebsockets.h:1751
-
Definition: libwebsockets.h:1746
-
Definition: libwebsockets.h:1752
+
Definition: libwebsockets.h:1789
+
Definition: libwebsockets.h:1787
+
Definition: libwebsockets.h:1788
+
Definition: libwebsockets.h:1790
+
Definition: libwebsockets.h:1791
+
Definition: libwebsockets.h:1786
+
Definition: libwebsockets.h:1792
diff --git a/doc/html/libwebsockets_8h.html b/doc/html/libwebsockets_8h.html
index 532b2bfe..6cb14d37 100644
--- a/doc/html/libwebsockets_8h.html
+++ b/doc/html/libwebsockets_8h.html
@@ -679,8 +679,8 @@ void mbed3_tcp_stream_acce
|
LWS_VISIBLE LWS_EXTERN void * | lws_context_user (struct lws_context *context) |
|
-LWS_VISIBLE LWS_EXTERN struct lws *LWS_WARN_UNUSED_RESULT | lws_client_connect_via_info (struct lws_client_connect_info *ccinfo) |
- |
+LWS_VISIBLE LWS_EXTERN struct lws * | lws_client_connect_via_info (struct lws_client_connect_info *ccinfo) |
+ |
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 |
|
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 |
diff --git a/doc/html/libwebsockets_8h.js b/doc/html/libwebsockets_8h.js
index 5e899524..ebb58553 100644
--- a/doc/html/libwebsockets_8h.js
+++ b/doc/html/libwebsockets_8h.js
@@ -389,7 +389,7 @@ var libwebsockets_8h =
[ "lws_chunked_html_process", "group__html-chunked-substitution.html#ga643073f918c0a7016b690aae9793fd60", null ],
[ "lws_client_connect", "group__client.html#ga4af0a20108a95e8b6d94dd4d80055ff3", null ],
[ "lws_client_connect_extended", "group__client.html#gac6a8558b4410961a880241c2ac1271e2", null ],
- [ "lws_client_connect_via_info", "group__client.html#gac30a7be106abd0cedfbb2e8b8fe3a2f5", null ],
+ [ "lws_client_connect_via_info", "group__client.html#ga0c966136905f467816307cfba6deb5fd", null ],
[ "lws_close_reason", "group__wsclose.html#gaa1c863415d1783cd8de7938aa6efa262", null ],
[ "lws_context_destroy", "group__context-and-vhost.html#ga8ee0314028755f1ddfa9428e09b4fddb", null ],
[ "lws_context_user", "group__context-and-vhost.html#gaeb12f934bfd178bd2132a9e73fc641da", null ],
diff --git a/doc/html/libwebsockets_8h_source.html b/doc/html/libwebsockets_8h_source.html
index d96ac8c2..55b1b6a7 100644
--- a/doc/html/libwebsockets_8h_source.html
+++ b/doc/html/libwebsockets_8h_source.html
@@ -71,401 +71,402 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
libwebsockets.h
- Go to the documentation of this file. 24 #ifndef LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C 25 #define LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C 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" 50 awaiting_on_writeable(0) 55 void set_wsi( struct lws *_wsi) { wsi = _wsi; } 56 int actual_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); 69 char awaiting_on_writeable; 75 srv(SOCKET_STACK_LWIP_IPV4) 77 srv.setOnError(TCPStream::ErrorHandler_t( this, 81 void start( const uint16_t port); 85 void onError(Socket *s, socket_error_t err); 86 void onIncoming(TCPListener *s, void *impl); 87 void onDisconnect(TCPStream *s); 100 #ifdef MBED_OPERATORS 107 #include "lws_config.h" 109 #if defined(WIN32) || defined(_WIN32) 110 #ifndef WIN32_LEAN_AND_MEAN 111 #define WIN32_LEAN_AND_MEAN 114 #include <winsock2.h> 115 #include <ws2tcpip.h> 122 #define _O_RDONLY 0x0000 123 #define O_RDONLY _O_RDONLY 127 #if (defined(_MSC_VER) && _MSC_VER < 1900) || defined(_WIN32_WCE) 128 #define strcasecmp _stricmp 130 #define strcasecmp stricmp 132 #define getdtablesize() 30000 134 #define LWS_INLINE __inline 136 #define LWS_WARN_UNUSED_RESULT 137 #define LWS_WARN_DEPRECATED 141 #define LWS_EXTERN extern __declspec(dllexport) 143 #define LWS_EXTERN extern __declspec(dllimport) 149 #define LWS_INVALID_FILE INVALID_HANDLE_VALUE 150 #define LWS_O_RDONLY _O_RDONLY 152 #if !defined(_MSC_VER) || _MSC_VER < 1900 153 #define snprintf _snprintf 157 #define __func__ __FUNCTION__ 163 #if defined(__NetBSD__) || defined(__FreeBSD__) 164 #include <netinet/in.h> 167 #define LWS_INLINE inline 168 #define LWS_O_RDONLY O_RDONLY 170 #ifndef MBED_OPERATORS 173 #define LWS_INVALID_FILE -1 175 #define getdtablesize() (20) 176 #define LWS_INVALID_FILE NULL 179 #if defined(__GNUC__) 182 #if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) 183 #define LWS_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) 185 #define LWS_WARN_UNUSED_RESULT 188 #define LWS_VISIBLE __attribute__((visibility("default"))) 189 #define LWS_WARN_DEPRECATED __attribute__ ((deprecated)) 192 #define LWS_WARN_UNUSED_RESULT 193 #define LWS_WARN_DEPRECATED 196 #if defined(__ANDROID__) 198 #define getdtablesize() sysconf(_SC_OPEN_MAX) 211 #define LWS_EXTERN extern 217 #include <sys/time.h> 221 #ifdef LWS_OPENSSL_SUPPORT 224 #ifdef USE_OLD_CYASSL 225 #include <cyassl/openssl/ssl.h> 226 #include <cyassl/error-ssl.h> 228 #include <wolfssl/openssl/ssl.h> 229 #include <wolfssl/error-ssl.h> 232 #if defined(LWS_USE_POLARSSL) 233 #include <polarssl/ssl.h> 240 typedef ssl_context SSL; 242 #if defined(LWS_USE_MBEDTLS) 243 #include <mbedtls/ssl.h> 245 #include <openssl/ssl.h> 246 #include <openssl/err.h> 253 #define CONTEXT_PORT_NO_LISTEN -1 267 enum lws_log_levels { 277 LLL_LATENCY = 1 << 9, 282 LWS_VISIBLE LWS_EXTERN void _lws_log( int filter, const char *format, ...); 283 LWS_VISIBLE LWS_EXTERN void _lws_logv( int filter, const char *format, va_list vl); 293 LWS_VISIBLE LWS_EXTERN int 297 #define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__) 298 #define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__) 299 #define lwsl_err(...) _lws_log(LLL_ERR, __VA_ARGS__) 307 #define lwsl_info(...) _lws_log(LLL_INFO, __VA_ARGS__) 308 #define lwsl_debug(...) _lws_log(LLL_DEBUG, __VA_ARGS__) 309 #define lwsl_parser(...) _lws_log(LLL_PARSER, __VA_ARGS__) 310 #define lwsl_header(...) _lws_log(LLL_HEADER, __VA_ARGS__) 311 #define lwsl_ext(...) _lws_log(LLL_EXT, __VA_ARGS__) 312 #define lwsl_client(...) _lws_log(LLL_CLIENT, __VA_ARGS__) 313 #define lwsl_latency(...) _lws_log(LLL_LATENCY, __VA_ARGS__) 320 LWS_VISIBLE LWS_EXTERN void lwsl_hexdump( void *buf, size_t len); 324 #define lwsl_info(...) {} 325 #define lwsl_debug(...) {} 326 #define lwsl_parser(...) {} 327 #define lwsl_header(...) {} 328 #define lwsl_ext(...) {} 329 #define lwsl_client(...) {} 330 #define lwsl_latency(...) {} 331 #define lwsl_hexdump(a, b) 345 LWS_VISIBLE LWS_EXTERN void 347 void (*log_emit_function)( int level, const char *line)); 358 LWS_VISIBLE LWS_EXTERN void 366 #ifndef lws_container_of 367 #define lws_container_of(P,T,M) ((T *)((char *)(P) - offsetof(T, M))) 373 #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) 378 #define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_ARG 381 #define LWS_FEATURE_PROTOCOLS_HAS_ID_FIELD 384 #define LWS_FEATURE_PROTOCOLS_HAS_PEER_WRITE_ALLOWANCE 387 #define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_LEN 390 #define LWS_FEATURE_FOPS 394 typedef SOCKET lws_sockfd_type; 395 typedef HANDLE lws_filefd_type; 396 #define lws_sockfd_valid(sfd) (!!sfd) 404 #if defined(MBED_OPERATORS) 406 typedef void * lws_sockfd_type; 407 typedef void * lws_filefd_type; 408 #define lws_sockfd_valid(sfd) (!!sfd) 414 #define POLLIN 0x0001 415 #define POLLPRI 0x0002 416 #define POLLOUT 0x0004 417 #define POLLERR 0x0008 418 #define POLLHUP 0x0010 419 #define POLLNVAL 0x0020 423 void * mbed3_create_tcp_stream_socket( void); 424 void mbed3_delete_tcp_stream_socket( void *sockfd); 425 void mbed3_tcp_stream_bind( void *sock, int port, struct lws *); 426 void mbed3_tcp_stream_accept( void *sock, struct lws *); 428 typedef int lws_sockfd_type; 429 typedef int lws_filefd_type; 430 #define lws_sockfd_valid(sfd) (sfd >= 0) 433 #define lws_pollfd pollfd 462 LWS_CLOSE_STATUS_NOSTATUS = 0, 526 LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY = 9999, 541 LWS_VISIBLE LWS_EXTERN void 543 unsigned char *buf, size_t len); 836 LWS_CALLBACK_WS_EXT_DEFAULTS = 39, 839 LWS_CALLBACK_CGI = 40, 841 LWS_CALLBACK_CGI_TERMINATED = 41, 843 LWS_CALLBACK_CGI_STDIN_DATA = 42, 845 LWS_CALLBACK_CGI_STDIN_COMPLETED = 43, 847 LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP = 44, 849 LWS_CALLBACK_CLOSED_CLIENT_HTTP = 45, 851 LWS_CALLBACK_RECEIVE_CLIENT_HTTP = 46, 853 LWS_CALLBACK_COMPLETED_CLIENT_HTTP = 47, 855 LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ = 48, 857 LWS_CALLBACK_HTTP_BIND_PROTOCOL = 49, 859 LWS_CALLBACK_HTTP_DROP_PROTOCOL = 50, 861 LWS_CALLBACK_CHECK_ACCESS_RIGHTS = 51, 863 LWS_CALLBACK_PROCESS_HTML = 52, 865 LWS_CALLBACK_ADD_HEADERS = 53, 867 LWS_CALLBACK_SESSION_INFO = 54, 870 LWS_CALLBACK_GS_EVENT = 55, 898 void *user, void *in, size_t len); 916 enum lws_extension_callback_reasons { 917 LWS_EXT_CB_SERVER_CONTEXT_CONSTRUCT = 0, 918 LWS_EXT_CB_CLIENT_CONTEXT_CONSTRUCT = 1, 919 LWS_EXT_CB_SERVER_CONTEXT_DESTRUCT = 2, 920 LWS_EXT_CB_CLIENT_CONTEXT_DESTRUCT = 3, 921 LWS_EXT_CB_CONSTRUCT = 4, 922 LWS_EXT_CB_CLIENT_CONSTRUCT = 5, 923 LWS_EXT_CB_CHECK_OK_TO_REALLY_CLOSE = 6, 924 LWS_EXT_CB_CHECK_OK_TO_PROPOSE_EXTENSION = 7, 925 LWS_EXT_CB_DESTROY = 8, 926 LWS_EXT_CB_DESTROY_ANY_WSI_CLOSING = 9, 927 LWS_EXT_CB_ANY_WSI_ESTABLISHED = 10, 928 LWS_EXT_CB_PACKET_RX_PREPARSE = 11, 929 LWS_EXT_CB_PACKET_TX_PRESEND = 12, 930 LWS_EXT_CB_PACKET_TX_DO_SEND = 13, 931 LWS_EXT_CB_HANDSHAKE_REPLY_TX = 14, 932 LWS_EXT_CB_FLUSH_PENDING_TX = 15, 933 LWS_EXT_CB_EXTENDED_PAYLOAD_RX = 16, 934 LWS_EXT_CB_CAN_PROXY_CLIENT_CONNECTION = 17, 936 LWS_EXT_CB_REQUEST_ON_WRITEABLE = 19, 937 LWS_EXT_CB_IS_WRITEABLE = 20, 938 LWS_EXT_CB_PAYLOAD_TX = 21, 939 LWS_EXT_CB_PAYLOAD_RX = 22, 940 LWS_EXT_CB_OPTION_DEFAULT = 23, 941 LWS_EXT_CB_OPTION_SET = 24, 942 LWS_EXT_CB_OPTION_CONFIRM = 25, 943 LWS_EXT_CB_NAMED_OPTION_SET = 26, 1041 enum lws_extension_callback_reasons reason, 1042 void *user, void *in, size_t len); 1062 LWS_VISIBLE LWS_EXTERN int 1064 const char *opt_name, const char *opt_val); 1066 #ifndef LWS_NO_EXTENSIONS 1073 static LWS_INLINE LWS_WARN_DEPRECATED const struct lws_extension * 1074 lws_get_internal_extensions() { return NULL; } 1086 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT 1089 const char *o, int len); 1106 struct lws_context *context, const struct lws_extension *ext, 1107 struct lws *wsi, enum lws_extension_callback_reasons reason, 1108 void *user, void *in, size_t len); 1210 LWS_VISIBLE LWS_EXTERN void * 1223 LWS_VISIBLE LWS_EXTERN void * 1234 LWS_VISIBLE LWS_EXTERN int 1237 #ifdef LWS_WITH_PLUGINS 1241 #define LWS_PLUGIN_API_MAGIC 180 1252 typedef int (*lws_plugin_init_func)( struct lws_context *, 1254 typedef int (*lws_plugin_destroy_func)( struct lws_context *); 1259 #if (UV_VERSION_MAJOR > 0) 1283 #define LWSGS_EMAIL_CONTENT_SIZE 16384 1399 #define lws_check_opt(c, f) (((c) & (f)) == (f)) 1475 #ifdef LWS_OPENSSL_SUPPORT 1590 LWS_VISIBLE LWS_EXTERN struct lws_context * 1601 LWS_VISIBLE LWS_EXTERN void 1621 LWS_VISIBLE LWS_EXTERN int 1636 LWS_EXTERN LWS_VISIBLE struct lws_vhost * 1654 LWS_VISIBLE LWS_EXTERN int 1656 char **config_strings, int *len); 1673 LWS_VISIBLE LWS_EXTERN int 1676 char **config_strings, int *len); 1679 LWS_VISIBLE LWS_EXTERN struct lws_vhost * 1687 LWS_VISIBLE LWS_EXTERN struct lws_vhost * 1697 LWS_VISIBLE LWS_EXTERN int 1707 LWS_VISIBLE LWS_EXTERN int 1719 LWS_VISIBLE LWS_EXTERN void * 1787 unsigned int cache_reusable:1; 1788 unsigned int cache_revalidate:1; 1789 unsigned int cache_intermediaries:1; 1862 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT 1886 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT 1888 int port, int ssl_connection, const char *path, 1889 const char *host, const char *origin, const char *protocol, 1890 int ietf_version_or_minus_one) LWS_WARN_DEPRECATED; 1912 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT 1914 int port, int ssl_connection, const char *path, 1915 const char *host, const char *origin, 1916 const char *protocol, int ietf_version_or_minus_one, 1917 void *userdata) LWS_WARN_DEPRECATED; 1944 LWS_VISIBLE LWS_EXTERN int 1946 struct lws_vhost *vhost); 1948 LWS_VISIBLE LWS_EXTERN int 1949 lws_http_client_read( struct lws *wsi, char **buf, int *len); 1992 LWS_VISIBLE LWS_EXTERN int 1993 lws_service( struct lws_context *context, int timeout_ms); 2006 LWS_VISIBLE LWS_EXTERN int 2007 lws_service_tsi( struct lws_context *context, int timeout_ms, int tsi); 2024 LWS_VISIBLE LWS_EXTERN void 2038 LWS_VISIBLE LWS_EXTERN void 2063 LWS_VISIBLE LWS_EXTERN int 2075 LWS_VISIBLE LWS_EXTERN int 2112 LWS_VISIBLE LWS_EXTERN int 2114 const char *other_headers, int other_headers_len); 2115 LWS_VISIBLE LWS_EXTERN int 2116 lws_serve_http_file_fragment( struct lws *wsi); 2131 HTTP_STATUS_OK = 200, 2132 HTTP_STATUS_NO_CONTENT = 204, 2134 HTTP_STATUS_MOVED_PERMANENTLY = 301, 2135 HTTP_STATUS_FOUND = 302, 2136 HTTP_STATUS_SEE_OTHER = 303, 2138 HTTP_STATUS_BAD_REQUEST = 400, 2139 HTTP_STATUS_UNAUTHORIZED, 2140 HTTP_STATUS_PAYMENT_REQUIRED, 2141 HTTP_STATUS_FORBIDDEN, 2142 HTTP_STATUS_NOT_FOUND, 2143 HTTP_STATUS_METHOD_NOT_ALLOWED, 2144 HTTP_STATUS_NOT_ACCEPTABLE, 2145 HTTP_STATUS_PROXY_AUTH_REQUIRED, 2146 HTTP_STATUS_REQUEST_TIMEOUT, 2147 HTTP_STATUS_CONFLICT, 2149 HTTP_STATUS_LENGTH_REQUIRED, 2150 HTTP_STATUS_PRECONDITION_FAILED, 2151 HTTP_STATUS_REQ_ENTITY_TOO_LARGE, 2152 HTTP_STATUS_REQ_URI_TOO_LONG, 2153 HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE, 2154 HTTP_STATUS_REQ_RANGE_NOT_SATISFIABLE, 2155 HTTP_STATUS_EXPECTATION_FAILED, 2157 HTTP_STATUS_INTERNAL_SERVER_ERROR = 500, 2158 HTTP_STATUS_NOT_IMPLEMENTED, 2159 HTTP_STATUS_BAD_GATEWAY, 2160 HTTP_STATUS_SERVICE_UNAVAILABLE, 2161 HTTP_STATUS_GATEWAY_TIMEOUT, 2162 HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED, 2172 typedef const char *(*lws_process_html_state_cb)( void *data, int index); 2189 LWS_VISIBLE LWS_EXTERN int 2245 enum lws_token_indexes { 2246 WSI_TOKEN_GET_URI = 0, 2247 WSI_TOKEN_POST_URI = 1, 2248 WSI_TOKEN_OPTIONS_URI = 2, 2250 WSI_TOKEN_CONNECTION = 4, 2251 WSI_TOKEN_UPGRADE = 5, 2252 WSI_TOKEN_ORIGIN = 6, 2253 WSI_TOKEN_DRAFT = 7, 2254 WSI_TOKEN_CHALLENGE = 8, 2255 WSI_TOKEN_EXTENSIONS = 9, 2256 WSI_TOKEN_KEY1 = 10, 2257 WSI_TOKEN_KEY2 = 11, 2258 WSI_TOKEN_PROTOCOL = 12, 2259 WSI_TOKEN_ACCEPT = 13, 2260 WSI_TOKEN_NONCE = 14, 2261 WSI_TOKEN_HTTP = 15, 2262 WSI_TOKEN_HTTP2_SETTINGS = 16, 2263 WSI_TOKEN_HTTP_ACCEPT = 17, 2264 WSI_TOKEN_HTTP_AC_REQUEST_HEADERS = 18, 2265 WSI_TOKEN_HTTP_IF_MODIFIED_SINCE = 19, 2266 WSI_TOKEN_HTTP_IF_NONE_MATCH = 20, 2267 WSI_TOKEN_HTTP_ACCEPT_ENCODING = 21, 2268 WSI_TOKEN_HTTP_ACCEPT_LANGUAGE = 22, 2269 WSI_TOKEN_HTTP_PRAGMA = 23, 2270 WSI_TOKEN_HTTP_CACHE_CONTROL = 24, 2271 WSI_TOKEN_HTTP_AUTHORIZATION = 25, 2272 WSI_TOKEN_HTTP_COOKIE = 26, 2273 WSI_TOKEN_HTTP_CONTENT_LENGTH = 27, 2274 WSI_TOKEN_HTTP_CONTENT_TYPE = 28, 2275 WSI_TOKEN_HTTP_DATE = 29, 2276 WSI_TOKEN_HTTP_RANGE = 30, 2277 WSI_TOKEN_HTTP_REFERER = 31, 2279 WSI_TOKEN_VERSION = 33, 2280 WSI_TOKEN_SWORIGIN = 34, 2282 WSI_TOKEN_HTTP_COLON_AUTHORITY = 35, 2283 WSI_TOKEN_HTTP_COLON_METHOD = 36, 2284 WSI_TOKEN_HTTP_COLON_PATH = 37, 2285 WSI_TOKEN_HTTP_COLON_SCHEME = 38, 2286 WSI_TOKEN_HTTP_COLON_STATUS = 39, 2288 WSI_TOKEN_HTTP_ACCEPT_CHARSET = 40, 2289 WSI_TOKEN_HTTP_ACCEPT_RANGES = 41, 2290 WSI_TOKEN_HTTP_ACCESS_CONTROL_ALLOW_ORIGIN = 42, 2291 WSI_TOKEN_HTTP_AGE = 43, 2292 WSI_TOKEN_HTTP_ALLOW = 44, 2293 WSI_TOKEN_HTTP_CONTENT_DISPOSITION = 45, 2294 WSI_TOKEN_HTTP_CONTENT_ENCODING = 46, 2295 WSI_TOKEN_HTTP_CONTENT_LANGUAGE = 47, 2296 WSI_TOKEN_HTTP_CONTENT_LOCATION = 48, 2297 WSI_TOKEN_HTTP_CONTENT_RANGE = 49, 2298 WSI_TOKEN_HTTP_ETAG = 50, 2299 WSI_TOKEN_HTTP_EXPECT = 51, 2300 WSI_TOKEN_HTTP_EXPIRES = 52, 2301 WSI_TOKEN_HTTP_FROM = 53, 2302 WSI_TOKEN_HTTP_IF_MATCH = 54, 2303 WSI_TOKEN_HTTP_IF_RANGE = 55, 2304 WSI_TOKEN_HTTP_IF_UNMODIFIED_SINCE = 56, 2305 WSI_TOKEN_HTTP_LAST_MODIFIED = 57, 2306 WSI_TOKEN_HTTP_LINK = 58, 2307 WSI_TOKEN_HTTP_LOCATION = 59, 2308 WSI_TOKEN_HTTP_MAX_FORWARDS = 60, 2309 WSI_TOKEN_HTTP_PROXY_AUTHENTICATE = 61, 2310 WSI_TOKEN_HTTP_PROXY_AUTHORIZATION = 62, 2311 WSI_TOKEN_HTTP_REFRESH = 63, 2312 WSI_TOKEN_HTTP_RETRY_AFTER = 64, 2313 WSI_TOKEN_HTTP_SERVER = 65, 2314 WSI_TOKEN_HTTP_SET_COOKIE = 66, 2315 WSI_TOKEN_HTTP_STRICT_TRANSPORT_SECURITY = 67, 2316 WSI_TOKEN_HTTP_TRANSFER_ENCODING = 68, 2317 WSI_TOKEN_HTTP_USER_AGENT = 69, 2318 WSI_TOKEN_HTTP_VARY = 70, 2319 WSI_TOKEN_HTTP_VIA = 71, 2320 WSI_TOKEN_HTTP_WWW_AUTHENTICATE = 72, 2322 WSI_TOKEN_PATCH_URI = 73, 2323 WSI_TOKEN_PUT_URI = 74, 2324 WSI_TOKEN_DELETE_URI = 75, 2326 WSI_TOKEN_HTTP_URI_ARGS = 76, 2327 WSI_TOKEN_PROXY = 77, 2328 WSI_TOKEN_HTTP_X_REAL_IP = 78, 2329 WSI_TOKEN_HTTP1_0 = 79, 2336 _WSI_TOKEN_CLIENT_SENT_PROTOCOLS, 2337 _WSI_TOKEN_CLIENT_PEER_ADDRESS, 2338 _WSI_TOKEN_CLIENT_URI, 2339 _WSI_TOKEN_CLIENT_HOST, 2340 _WSI_TOKEN_CLIENT_ORIGIN, 2341 _WSI_TOKEN_CLIENT_METHOD, 2347 WSI_TOKEN_NAME_PART, 2349 WSI_TOKEN_SKIPPING_SAW_CR, 2350 WSI_PARSING_COMPLETE, 2351 WSI_INIT_TOKEN_MUXURL, 2355 unsigned short token_limit[WSI_TOKEN_COUNT]; 2363 LWS_VISIBLE LWS_EXTERN const unsigned char * 2375 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT 2387 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT 2403 LWS_VISIBLE LWS_EXTERN int 2404 lws_hdr_copy( struct lws *wsi, char *dest, int len, enum lws_token_indexes h); 2423 LWS_VISIBLE LWS_EXTERN int 2425 enum lws_token_indexes h, int frag_idx); 2437 LWS_VISIBLE LWS_EXTERN const char * 2466 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT 2468 unsigned int code, unsigned char **p, 2469 unsigned char *end); 2482 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT 2484 const unsigned char *value, int length, 2485 unsigned char **p, unsigned char *end); 2499 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT 2501 const unsigned char *value, int length, 2502 unsigned char **p, unsigned char *end); 2513 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT 2515 unsigned long content_length, 2516 unsigned char **p, unsigned char *end); 2526 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT 2528 unsigned char *end); 2575 const char *filename, char *buf, int len, 2600 LWS_VISIBLE LWS_EXTERN struct lws_spa * 2612 LWS_VISIBLE LWS_EXTERN int 2620 LWS_VISIBLE LWS_EXTERN int 2629 LWS_VISIBLE LWS_EXTERN int 2637 LWS_VISIBLE LWS_EXTERN const char * 2645 LWS_VISIBLE LWS_EXTERN int 2670 LWS_VISIBLE LWS_EXTERN const char * 2691 LWS_VISIBLE LWS_EXTERN int 2703 LWS_VISIBLE LWS_EXTERN int 2705 const char *html_body); 2717 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT 2719 unsigned char **p, unsigned char *end); 2729 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT 2751 LWS_VISIBLE LWS_EXTERN const char * 2764 LWS_VISIBLE LWS_EXTERN const char * 2776 #ifdef LWS_USE_LIBEV 2777 typedef void (lws_ev_signal_cb_t)(EV_P_ struct ev_signal *w, int revents); 2779 LWS_VISIBLE LWS_EXTERN int 2780 lws_ev_sigint_cfg( struct lws_context *context, int use_ev_sigint, 2781 lws_ev_signal_cb_t *cb); 2783 LWS_VISIBLE LWS_EXTERN int 2784 lws_ev_initloop( struct lws_context *context, struct ev_loop *loop, int tsi); 2786 LWS_VISIBLE LWS_EXTERN void 2787 lws_ev_sigint_cb( struct ev_loop *loop, struct ev_signal *watcher, int revents); 2798 #ifdef LWS_USE_LIBUV 2800 LWS_VISIBLE LWS_EXTERN int 2801 lws_uv_sigint_cfg( struct lws_context *context, int use_uv_sigint, 2804 LWS_VISIBLE LWS_EXTERN void 2805 lws_libuv_run( const struct lws_context *context, int tsi); 2807 LWS_VISIBLE LWS_EXTERN void 2808 lws_libuv_stop( struct lws_context *context); 2810 LWS_VISIBLE LWS_EXTERN int 2811 lws_uv_initloop( struct lws_context *context, uv_loop_t *loop, int tsi); 2813 LWS_VISIBLE LWS_EXTERN uv_loop_t * 2814 lws_uv_getloop( struct lws_context *context, int tsi); 2816 LWS_VISIBLE LWS_EXTERN void 2817 lws_uv_sigint_cb(uv_signal_t *watcher, int signum); 2831 enum pending_timeout { 2832 NO_PENDING_TIMEOUT = 0, 2833 PENDING_TIMEOUT_AWAITING_PROXY_RESPONSE = 1, 2834 PENDING_TIMEOUT_AWAITING_CONNECT_RESPONSE = 2, 2835 PENDING_TIMEOUT_ESTABLISH_WITH_SERVER = 3, 2836 PENDING_TIMEOUT_AWAITING_SERVER_RESPONSE = 4, 2837 PENDING_TIMEOUT_AWAITING_PING = 5, 2838 PENDING_TIMEOUT_CLOSE_ACK = 6, 2839 PENDING_TIMEOUT_AWAITING_EXTENSION_CONNECT_RESPONSE = 7, 2840 PENDING_TIMEOUT_SENT_CLIENT_HANDSHAKE = 8, 2841 PENDING_TIMEOUT_SSL_ACCEPT = 9, 2842 PENDING_TIMEOUT_HTTP_CONTENT = 10, 2843 PENDING_TIMEOUT_AWAITING_CLIENT_HS_SEND = 11, 2844 PENDING_FLUSH_STORED_SEND_BEFORE_CLOSE = 12, 2845 PENDING_TIMEOUT_SHUTDOWN_FLUSH = 13, 2846 PENDING_TIMEOUT_CGI = 14, 2847 PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE = 15, 2861 LWS_VISIBLE LWS_EXTERN void 2862 lws_set_timeout( struct lws *wsi, enum pending_timeout reason, int secs); 2870 #if !defined(LWS_SIZEOFPTR) 2871 #define LWS_SIZEOFPTR (sizeof (void *)) 2873 #if !defined(u_int64_t) 2874 #define u_int64_t unsigned long long 2877 #if defined(__x86_64__) 2878 #define _LWS_PAD_SIZE 16 2880 #define _LWS_PAD_SIZE LWS_SIZEOFPTR 2882 #define _LWS_PAD(n) (((n) % _LWS_PAD_SIZE) ? \ 2883 ((n) + (_LWS_PAD_SIZE - ((n) % _LWS_PAD_SIZE))) : (n)) 2884 #define LWS_PRE _LWS_PAD(4 + 10) 2886 #define LWS_SEND_BUFFER_PRE_PADDING LWS_PRE 2887 #define LWS_SEND_BUFFER_POST_PADDING 0 2912 LWS_WRITE_HTTP_FINAL = 7, 3008 LWS_VISIBLE LWS_EXTERN int 3009 lws_write( struct lws *wsi, unsigned char *buf, size_t len, 3013 #define lws_write_http(wsi, buf, len) \ 3014 lws_write(wsi, (unsigned char *)(buf), len, LWS_WRITE_HTTP) 3049 LWS_VISIBLE LWS_EXTERN int 3065 LWS_VISIBLE LWS_EXTERN int 3082 LWS_VISIBLE LWS_EXTERN int 3098 LWS_VISIBLE LWS_EXTERN int 3114 LWS_VISIBLE LWS_EXTERN int 3131 LWS_VISIBLE LWS_EXTERN int 3141 LWS_VISIBLE LWS_EXTERN int 3165 LWS_VISIBLE LWS_EXTERN size_t 3179 LWS_VISIBLE LWS_EXTERN int 3191 LWS_VISIBLE LWS_EXTERN void 3211 LWS_VISIBLE LWS_EXTERN size_t 3236 LWS_VISIBLE LWS_EXTERN struct lws * 3260 LWS_VISIBLE LWS_EXTERN struct lws * 3262 const char *readbuf, size_t len); 3281 LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT 3298 LWS_VISIBLE LWS_EXTERN void 3300 int name_len, char *rip, int rip_len); 3312 LWS_VISIBLE LWS_EXTERN const char * 3326 LWS_VISIBLE LWS_EXTERN int 3349 LWS_VISIBLE LWS_EXTERN int 3358 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT 3365 LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT 3374 LWS_VISIBLE LWS_EXTERN void * 3388 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT 3389 lws_parse_uri( char *p, const char **prot, const char **ads, int *port, 3395 LWS_VISIBLE LWS_EXTERN unsigned long 3407 LWS_VISIBLE LWS_EXTERN struct lws_context * LWS_WARN_UNUSED_RESULT 3419 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT 3429 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT 3438 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT 3447 LWS_VISIBLE LWS_EXTERN int 3448 lws_read( struct lws *wsi, unsigned char *buf, size_t len); 3457 LWS_VISIBLE LWS_EXTERN void 3473 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT 3480 LWS_VISIBLE LWS_EXTERN int 3487 LWS_VISIBLE LWS_EXTERN unsigned char 3506 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT 3518 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT 3529 LWS_VISIBLE LWS_EXTERN int 3535 LWS_VISIBLE LWS_EXTERN int 3545 #ifdef LWS_SHA1_USE_OPENSSL_NAME 3547 #define lws_SHA1 SHA1 3558 LWS_VISIBLE LWS_EXTERN unsigned char * 3559 lws_SHA1( const unsigned char *d, size_t n, unsigned char *md); 3571 LWS_VISIBLE LWS_EXTERN int 3582 LWS_VISIBLE LWS_EXTERN int 3597 enum lws_enum_stdinouterr { 3603 enum lws_cgi_hdr_state { 3615 enum lws_enum_stdinouterr ch; 3617 enum lws_cgi_hdr_state hdr_state; 3631 LWS_VISIBLE LWS_EXTERN int 3632 lws_cgi( struct lws *wsi, const char * const *exec_array, 3633 int script_uri_path_len, int timeout_secs, 3641 LWS_VISIBLE LWS_EXTERN int 3649 LWS_VISIBLE LWS_EXTERN int 3678 lws_filefd_type (*open)( struct lws *wsi, const char *filename, 3679 unsigned long *filelen, int flags); 3683 int (*close)( struct lws *wsi, lws_filefd_type fd); 3685 unsigned long (*seek_cur)( struct lws *wsi, lws_filefd_type fd, 3686 long offset_from_cur_pos); 3688 int (*read)( struct lws *wsi, lws_filefd_type fd, unsigned long *amount, 3689 unsigned char *buf, unsigned long len); 3691 int (*write)( struct lws *wsi, lws_filefd_type fd, unsigned long *amount, 3692 unsigned char *buf, unsigned long len); 3715 static LWS_INLINE lws_filefd_type LWS_WARN_UNUSED_RESULT 3716 lws_plat_file_open( struct lws *wsi, const char *filename, 3717 unsigned long *filelen, int flags) 3729 static LWS_INLINE int 3730 lws_plat_file_close( struct lws *wsi, lws_filefd_type fd) 3742 static LWS_INLINE unsigned long 3743 lws_plat_file_seek_cur( struct lws *wsi, lws_filefd_type fd, long offset) 3756 static LWS_INLINE int LWS_WARN_UNUSED_RESULT 3757 lws_plat_file_read( struct lws *wsi, lws_filefd_type fd, unsigned long *amount, 3758 unsigned char *buf, unsigned long len) 3772 static LWS_INLINE int LWS_WARN_UNUSED_RESULT 3773 lws_plat_file_write( struct lws *wsi, lws_filefd_type fd, unsigned long *amount, 3774 unsigned char *buf, unsigned long len) 3812 #ifdef LWS_WITH_SMTP 3834 char email_smtp_ip[32]; 3835 char email_helo[32]; 3836 char email_from[100]; 3879 LWS_VISIBLE LWS_EXTERN int 3890 LWS_VISIBLE LWS_EXTERN void 3899 LWS_VISIBLE LWS_EXTERN void
+ Go to the documentation of this file. 24 #ifndef LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C 25 #define LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C 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" 50 awaiting_on_writeable(0) 55 void set_wsi( struct lws *_wsi) { wsi = _wsi; } 56 int actual_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); 69 char awaiting_on_writeable; 75 srv(SOCKET_STACK_LWIP_IPV4) 77 srv.setOnError(TCPStream::ErrorHandler_t( this, 81 void start( const uint16_t port); 85 void onError(Socket *s, socket_error_t err); 86 void onIncoming(TCPListener *s, void *impl); 87 void onDisconnect(TCPStream *s); 100 #ifdef MBED_OPERATORS 107 #include "lws_config.h" 109 #if defined(WIN32) || defined(_WIN32) 110 #ifndef WIN32_LEAN_AND_MEAN 111 #define WIN32_LEAN_AND_MEAN 114 #include <winsock2.h> 115 #include <ws2tcpip.h> 122 #define _O_RDONLY 0x0000 123 #define O_RDONLY _O_RDONLY 127 #if (defined(_MSC_VER) && _MSC_VER < 1900) || defined(_WIN32_WCE) 128 #define strcasecmp _stricmp 130 #define strcasecmp stricmp 132 #define getdtablesize() 30000 134 #define LWS_INLINE __inline 136 #define LWS_WARN_UNUSED_RESULT 137 #define LWS_WARN_DEPRECATED 141 #define LWS_EXTERN extern __declspec(dllexport) 143 #define LWS_EXTERN extern __declspec(dllimport) 149 #define LWS_INVALID_FILE INVALID_HANDLE_VALUE 150 #define LWS_O_RDONLY _O_RDONLY 152 #if !defined(_MSC_VER) || _MSC_VER < 1900 153 #define snprintf _snprintf 157 #define __func__ __FUNCTION__ 163 #if defined(__NetBSD__) || defined(__FreeBSD__) 164 #include <netinet/in.h> 167 #define LWS_INLINE inline 168 #define LWS_O_RDONLY O_RDONLY 170 #ifndef MBED_OPERATORS 173 #define LWS_INVALID_FILE -1 175 #define getdtablesize() (20) 176 #define LWS_INVALID_FILE NULL 179 #if defined(__GNUC__) 182 #if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) 183 #define LWS_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) 185 #define LWS_WARN_UNUSED_RESULT 188 #define LWS_VISIBLE __attribute__((visibility("default"))) 189 #define LWS_WARN_DEPRECATED __attribute__ ((deprecated)) 192 #define LWS_WARN_UNUSED_RESULT 193 #define LWS_WARN_DEPRECATED 196 #if defined(__ANDROID__) 198 #define getdtablesize() sysconf(_SC_OPEN_MAX) 211 #define LWS_EXTERN extern 217 #include <sys/time.h> 221 #ifdef LWS_OPENSSL_SUPPORT 224 #ifdef USE_OLD_CYASSL 225 #include <cyassl/openssl/ssl.h> 226 #include <cyassl/error-ssl.h> 228 #include <wolfssl/openssl/ssl.h> 229 #include <wolfssl/error-ssl.h> 232 #if defined(LWS_USE_POLARSSL) 233 #include <polarssl/ssl.h> 240 typedef ssl_context SSL; 242 #if defined(LWS_USE_MBEDTLS) 243 #include <mbedtls/ssl.h> 245 #include <openssl/ssl.h> 246 #include <openssl/err.h> 253 #define CONTEXT_PORT_NO_LISTEN -1 267 enum lws_log_levels { 277 LLL_LATENCY = 1 << 9, 282 LWS_VISIBLE LWS_EXTERN void _lws_log( int filter, const char *format, ...); 283 LWS_VISIBLE LWS_EXTERN void _lws_logv( int filter, const char *format, va_list vl); 293 LWS_VISIBLE LWS_EXTERN int 297 #define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__) 298 #define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__) 299 #define lwsl_err(...) _lws_log(LLL_ERR, __VA_ARGS__) 307 #define lwsl_info(...) _lws_log(LLL_INFO, __VA_ARGS__) 308 #define lwsl_debug(...) _lws_log(LLL_DEBUG, __VA_ARGS__) 309 #define lwsl_parser(...) _lws_log(LLL_PARSER, __VA_ARGS__) 310 #define lwsl_header(...) _lws_log(LLL_HEADER, __VA_ARGS__) 311 #define lwsl_ext(...) _lws_log(LLL_EXT, __VA_ARGS__) 312 #define lwsl_client(...) _lws_log(LLL_CLIENT, __VA_ARGS__) 313 #define lwsl_latency(...) _lws_log(LLL_LATENCY, __VA_ARGS__) 320 LWS_VISIBLE LWS_EXTERN void lwsl_hexdump( void *buf, size_t len); 324 #define lwsl_info(...) {} 325 #define lwsl_debug(...) {} 326 #define lwsl_parser(...) {} 327 #define lwsl_header(...) {} 328 #define lwsl_ext(...) {} 329 #define lwsl_client(...) {} 330 #define lwsl_latency(...) {} 331 #define lwsl_hexdump(a, b) 345 LWS_VISIBLE LWS_EXTERN void 347 void (*log_emit_function)( int level, const char *line)); 358 LWS_VISIBLE LWS_EXTERN void 366 #ifndef lws_container_of 367 #define lws_container_of(P,T,M) ((T *)((char *)(P) - offsetof(T, M))) 373 #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) 378 #define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_ARG 381 #define LWS_FEATURE_PROTOCOLS_HAS_ID_FIELD 384 #define LWS_FEATURE_PROTOCOLS_HAS_PEER_WRITE_ALLOWANCE 387 #define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_LEN 390 #define LWS_FEATURE_FOPS 394 typedef SOCKET lws_sockfd_type; 395 typedef HANDLE lws_filefd_type; 396 #define lws_sockfd_valid(sfd) (!!sfd) 404 #if defined(MBED_OPERATORS) 406 typedef void * lws_sockfd_type; 407 typedef void * lws_filefd_type; 408 #define lws_sockfd_valid(sfd) (!!sfd) 414 #define POLLIN 0x0001 415 #define POLLPRI 0x0002 416 #define POLLOUT 0x0004 417 #define POLLERR 0x0008 418 #define POLLHUP 0x0010 419 #define POLLNVAL 0x0020 423 void * mbed3_create_tcp_stream_socket( void); 424 void mbed3_delete_tcp_stream_socket( void *sockfd); 425 void mbed3_tcp_stream_bind( void *sock, int port, struct lws *); 426 void mbed3_tcp_stream_accept( void *sock, struct lws *); 428 typedef int lws_sockfd_type; 429 typedef int lws_filefd_type; 430 #define lws_sockfd_valid(sfd) (sfd >= 0) 433 #define lws_pollfd pollfd 462 LWS_CLOSE_STATUS_NOSTATUS = 0, 526 LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY = 9999, 541 LWS_VISIBLE LWS_EXTERN void 543 unsigned char *buf, size_t len); 876 LWS_CALLBACK_WS_EXT_DEFAULTS = 39, 879 LWS_CALLBACK_CGI = 40, 881 LWS_CALLBACK_CGI_TERMINATED = 41, 883 LWS_CALLBACK_CGI_STDIN_DATA = 42, 885 LWS_CALLBACK_CGI_STDIN_COMPLETED = 43, 887 LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP = 44, 889 LWS_CALLBACK_CLOSED_CLIENT_HTTP = 45, 891 LWS_CALLBACK_RECEIVE_CLIENT_HTTP = 46, 893 LWS_CALLBACK_COMPLETED_CLIENT_HTTP = 47, 895 LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ = 48, 897 LWS_CALLBACK_HTTP_BIND_PROTOCOL = 49, 899 LWS_CALLBACK_HTTP_DROP_PROTOCOL = 50, 901 LWS_CALLBACK_CHECK_ACCESS_RIGHTS = 51, 903 LWS_CALLBACK_PROCESS_HTML = 52, 905 LWS_CALLBACK_ADD_HEADERS = 53, 907 LWS_CALLBACK_SESSION_INFO = 54, 910 LWS_CALLBACK_GS_EVENT = 55, 938 void *user, void *in, size_t len); 956 enum lws_extension_callback_reasons { 957 LWS_EXT_CB_SERVER_CONTEXT_CONSTRUCT = 0, 958 LWS_EXT_CB_CLIENT_CONTEXT_CONSTRUCT = 1, 959 LWS_EXT_CB_SERVER_CONTEXT_DESTRUCT = 2, 960 LWS_EXT_CB_CLIENT_CONTEXT_DESTRUCT = 3, 961 LWS_EXT_CB_CONSTRUCT = 4, 962 LWS_EXT_CB_CLIENT_CONSTRUCT = 5, 963 LWS_EXT_CB_CHECK_OK_TO_REALLY_CLOSE = 6, 964 LWS_EXT_CB_CHECK_OK_TO_PROPOSE_EXTENSION = 7, 965 LWS_EXT_CB_DESTROY = 8, 966 LWS_EXT_CB_DESTROY_ANY_WSI_CLOSING = 9, 967 LWS_EXT_CB_ANY_WSI_ESTABLISHED = 10, 968 LWS_EXT_CB_PACKET_RX_PREPARSE = 11, 969 LWS_EXT_CB_PACKET_TX_PRESEND = 12, 970 LWS_EXT_CB_PACKET_TX_DO_SEND = 13, 971 LWS_EXT_CB_HANDSHAKE_REPLY_TX = 14, 972 LWS_EXT_CB_FLUSH_PENDING_TX = 15, 973 LWS_EXT_CB_EXTENDED_PAYLOAD_RX = 16, 974 LWS_EXT_CB_CAN_PROXY_CLIENT_CONNECTION = 17, 976 LWS_EXT_CB_REQUEST_ON_WRITEABLE = 19, 977 LWS_EXT_CB_IS_WRITEABLE = 20, 978 LWS_EXT_CB_PAYLOAD_TX = 21, 979 LWS_EXT_CB_PAYLOAD_RX = 22, 980 LWS_EXT_CB_OPTION_DEFAULT = 23, 981 LWS_EXT_CB_OPTION_SET = 24, 982 LWS_EXT_CB_OPTION_CONFIRM = 25, 983 LWS_EXT_CB_NAMED_OPTION_SET = 26, 1081 enum lws_extension_callback_reasons reason, 1082 void *user, void *in, size_t len); 1102 LWS_VISIBLE LWS_EXTERN int 1104 const char *opt_name, const char *opt_val); 1106 #ifndef LWS_NO_EXTENSIONS 1113 static LWS_INLINE LWS_WARN_DEPRECATED const struct lws_extension * 1114 lws_get_internal_extensions() { return NULL; } 1126 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT 1129 const char *o, int len); 1146 struct lws_context *context, const struct lws_extension *ext, 1147 struct lws *wsi, enum lws_extension_callback_reasons reason, 1148 void *user, void *in, size_t len); 1250 LWS_VISIBLE LWS_EXTERN void * 1263 LWS_VISIBLE LWS_EXTERN void * 1274 LWS_VISIBLE LWS_EXTERN int 1277 #ifdef LWS_WITH_PLUGINS 1281 #define LWS_PLUGIN_API_MAGIC 180 1292 typedef int (*lws_plugin_init_func)( struct lws_context *, 1294 typedef int (*lws_plugin_destroy_func)( struct lws_context *); 1299 #if (UV_VERSION_MAJOR > 0) 1323 #define LWSGS_EMAIL_CONTENT_SIZE 16384 1439 #define lws_check_opt(c, f) (((c) & (f)) == (f)) 1515 #ifdef LWS_OPENSSL_SUPPORT 1630 LWS_VISIBLE LWS_EXTERN struct lws_context * 1641 LWS_VISIBLE LWS_EXTERN void 1661 LWS_VISIBLE LWS_EXTERN int 1676 LWS_EXTERN LWS_VISIBLE struct lws_vhost * 1694 LWS_VISIBLE LWS_EXTERN int 1696 char **config_strings, int *len); 1713 LWS_VISIBLE LWS_EXTERN int 1716 char **config_strings, int *len); 1719 LWS_VISIBLE LWS_EXTERN struct lws_vhost * 1727 LWS_VISIBLE LWS_EXTERN struct lws_vhost * 1737 LWS_VISIBLE LWS_EXTERN int 1747 LWS_VISIBLE LWS_EXTERN int 1759 LWS_VISIBLE LWS_EXTERN void * 1827 unsigned int cache_reusable:1; 1828 unsigned int cache_revalidate:1; 1829 unsigned int cache_intermediaries:1; 1914 LWS_VISIBLE LWS_EXTERN struct lws * 1938 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT 1940 int port, int ssl_connection, const char *path, 1941 const char *host, const char *origin, const char *protocol, 1942 int ietf_version_or_minus_one) LWS_WARN_DEPRECATED; 1964 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT 1966 int port, int ssl_connection, const char *path, 1967 const char *host, const char *origin, 1968 const char *protocol, int ietf_version_or_minus_one, 1969 void *userdata) LWS_WARN_DEPRECATED; 1996 LWS_VISIBLE LWS_EXTERN int 1998 struct lws_vhost *vhost); 2000 LWS_VISIBLE LWS_EXTERN int 2001 lws_http_client_read( struct lws *wsi, char **buf, int *len); 2044 LWS_VISIBLE LWS_EXTERN int 2045 lws_service( struct lws_context *context, int timeout_ms); 2058 LWS_VISIBLE LWS_EXTERN int 2059 lws_service_tsi( struct lws_context *context, int timeout_ms, int tsi); 2076 LWS_VISIBLE LWS_EXTERN void 2090 LWS_VISIBLE LWS_EXTERN void 2115 LWS_VISIBLE LWS_EXTERN int 2127 LWS_VISIBLE LWS_EXTERN int 2164 LWS_VISIBLE LWS_EXTERN int 2166 const char *other_headers, int other_headers_len); 2167 LWS_VISIBLE LWS_EXTERN int 2168 lws_serve_http_file_fragment( struct lws *wsi); 2183 HTTP_STATUS_OK = 200, 2184 HTTP_STATUS_NO_CONTENT = 204, 2186 HTTP_STATUS_MOVED_PERMANENTLY = 301, 2187 HTTP_STATUS_FOUND = 302, 2188 HTTP_STATUS_SEE_OTHER = 303, 2190 HTTP_STATUS_BAD_REQUEST = 400, 2191 HTTP_STATUS_UNAUTHORIZED, 2192 HTTP_STATUS_PAYMENT_REQUIRED, 2193 HTTP_STATUS_FORBIDDEN, 2194 HTTP_STATUS_NOT_FOUND, 2195 HTTP_STATUS_METHOD_NOT_ALLOWED, 2196 HTTP_STATUS_NOT_ACCEPTABLE, 2197 HTTP_STATUS_PROXY_AUTH_REQUIRED, 2198 HTTP_STATUS_REQUEST_TIMEOUT, 2199 HTTP_STATUS_CONFLICT, 2201 HTTP_STATUS_LENGTH_REQUIRED, 2202 HTTP_STATUS_PRECONDITION_FAILED, 2203 HTTP_STATUS_REQ_ENTITY_TOO_LARGE, 2204 HTTP_STATUS_REQ_URI_TOO_LONG, 2205 HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE, 2206 HTTP_STATUS_REQ_RANGE_NOT_SATISFIABLE, 2207 HTTP_STATUS_EXPECTATION_FAILED, 2209 HTTP_STATUS_INTERNAL_SERVER_ERROR = 500, 2210 HTTP_STATUS_NOT_IMPLEMENTED, 2211 HTTP_STATUS_BAD_GATEWAY, 2212 HTTP_STATUS_SERVICE_UNAVAILABLE, 2213 HTTP_STATUS_GATEWAY_TIMEOUT, 2214 HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED, 2224 typedef const char *(*lws_process_html_state_cb)( void *data, int index); 2241 LWS_VISIBLE LWS_EXTERN int 2297 enum lws_token_indexes { 2298 WSI_TOKEN_GET_URI = 0, 2299 WSI_TOKEN_POST_URI = 1, 2300 WSI_TOKEN_OPTIONS_URI = 2, 2302 WSI_TOKEN_CONNECTION = 4, 2303 WSI_TOKEN_UPGRADE = 5, 2304 WSI_TOKEN_ORIGIN = 6, 2305 WSI_TOKEN_DRAFT = 7, 2306 WSI_TOKEN_CHALLENGE = 8, 2307 WSI_TOKEN_EXTENSIONS = 9, 2308 WSI_TOKEN_KEY1 = 10, 2309 WSI_TOKEN_KEY2 = 11, 2310 WSI_TOKEN_PROTOCOL = 12, 2311 WSI_TOKEN_ACCEPT = 13, 2312 WSI_TOKEN_NONCE = 14, 2313 WSI_TOKEN_HTTP = 15, 2314 WSI_TOKEN_HTTP2_SETTINGS = 16, 2315 WSI_TOKEN_HTTP_ACCEPT = 17, 2316 WSI_TOKEN_HTTP_AC_REQUEST_HEADERS = 18, 2317 WSI_TOKEN_HTTP_IF_MODIFIED_SINCE = 19, 2318 WSI_TOKEN_HTTP_IF_NONE_MATCH = 20, 2319 WSI_TOKEN_HTTP_ACCEPT_ENCODING = 21, 2320 WSI_TOKEN_HTTP_ACCEPT_LANGUAGE = 22, 2321 WSI_TOKEN_HTTP_PRAGMA = 23, 2322 WSI_TOKEN_HTTP_CACHE_CONTROL = 24, 2323 WSI_TOKEN_HTTP_AUTHORIZATION = 25, 2324 WSI_TOKEN_HTTP_COOKIE = 26, 2325 WSI_TOKEN_HTTP_CONTENT_LENGTH = 27, 2326 WSI_TOKEN_HTTP_CONTENT_TYPE = 28, 2327 WSI_TOKEN_HTTP_DATE = 29, 2328 WSI_TOKEN_HTTP_RANGE = 30, 2329 WSI_TOKEN_HTTP_REFERER = 31, 2331 WSI_TOKEN_VERSION = 33, 2332 WSI_TOKEN_SWORIGIN = 34, 2334 WSI_TOKEN_HTTP_COLON_AUTHORITY = 35, 2335 WSI_TOKEN_HTTP_COLON_METHOD = 36, 2336 WSI_TOKEN_HTTP_COLON_PATH = 37, 2337 WSI_TOKEN_HTTP_COLON_SCHEME = 38, 2338 WSI_TOKEN_HTTP_COLON_STATUS = 39, 2340 WSI_TOKEN_HTTP_ACCEPT_CHARSET = 40, 2341 WSI_TOKEN_HTTP_ACCEPT_RANGES = 41, 2342 WSI_TOKEN_HTTP_ACCESS_CONTROL_ALLOW_ORIGIN = 42, 2343 WSI_TOKEN_HTTP_AGE = 43, 2344 WSI_TOKEN_HTTP_ALLOW = 44, 2345 WSI_TOKEN_HTTP_CONTENT_DISPOSITION = 45, 2346 WSI_TOKEN_HTTP_CONTENT_ENCODING = 46, 2347 WSI_TOKEN_HTTP_CONTENT_LANGUAGE = 47, 2348 WSI_TOKEN_HTTP_CONTENT_LOCATION = 48, 2349 WSI_TOKEN_HTTP_CONTENT_RANGE = 49, 2350 WSI_TOKEN_HTTP_ETAG = 50, 2351 WSI_TOKEN_HTTP_EXPECT = 51, 2352 WSI_TOKEN_HTTP_EXPIRES = 52, 2353 WSI_TOKEN_HTTP_FROM = 53, 2354 WSI_TOKEN_HTTP_IF_MATCH = 54, 2355 WSI_TOKEN_HTTP_IF_RANGE = 55, 2356 WSI_TOKEN_HTTP_IF_UNMODIFIED_SINCE = 56, 2357 WSI_TOKEN_HTTP_LAST_MODIFIED = 57, 2358 WSI_TOKEN_HTTP_LINK = 58, 2359 WSI_TOKEN_HTTP_LOCATION = 59, 2360 WSI_TOKEN_HTTP_MAX_FORWARDS = 60, 2361 WSI_TOKEN_HTTP_PROXY_AUTHENTICATE = 61, 2362 WSI_TOKEN_HTTP_PROXY_AUTHORIZATION = 62, 2363 WSI_TOKEN_HTTP_REFRESH = 63, 2364 WSI_TOKEN_HTTP_RETRY_AFTER = 64, 2365 WSI_TOKEN_HTTP_SERVER = 65, 2366 WSI_TOKEN_HTTP_SET_COOKIE = 66, 2367 WSI_TOKEN_HTTP_STRICT_TRANSPORT_SECURITY = 67, 2368 WSI_TOKEN_HTTP_TRANSFER_ENCODING = 68, 2369 WSI_TOKEN_HTTP_USER_AGENT = 69, 2370 WSI_TOKEN_HTTP_VARY = 70, 2371 WSI_TOKEN_HTTP_VIA = 71, 2372 WSI_TOKEN_HTTP_WWW_AUTHENTICATE = 72, 2374 WSI_TOKEN_PATCH_URI = 73, 2375 WSI_TOKEN_PUT_URI = 74, 2376 WSI_TOKEN_DELETE_URI = 75, 2378 WSI_TOKEN_HTTP_URI_ARGS = 76, 2379 WSI_TOKEN_PROXY = 77, 2380 WSI_TOKEN_HTTP_X_REAL_IP = 78, 2381 WSI_TOKEN_HTTP1_0 = 79, 2388 _WSI_TOKEN_CLIENT_SENT_PROTOCOLS, 2389 _WSI_TOKEN_CLIENT_PEER_ADDRESS, 2390 _WSI_TOKEN_CLIENT_URI, 2391 _WSI_TOKEN_CLIENT_HOST, 2392 _WSI_TOKEN_CLIENT_ORIGIN, 2393 _WSI_TOKEN_CLIENT_METHOD, 2399 WSI_TOKEN_NAME_PART, 2401 WSI_TOKEN_SKIPPING_SAW_CR, 2402 WSI_PARSING_COMPLETE, 2403 WSI_INIT_TOKEN_MUXURL, 2407 unsigned short token_limit[WSI_TOKEN_COUNT]; 2415 LWS_VISIBLE LWS_EXTERN const unsigned char * 2427 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT 2439 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT 2455 LWS_VISIBLE LWS_EXTERN int 2456 lws_hdr_copy( struct lws *wsi, char *dest, int len, enum lws_token_indexes h); 2475 LWS_VISIBLE LWS_EXTERN int 2477 enum lws_token_indexes h, int frag_idx); 2489 LWS_VISIBLE LWS_EXTERN const char * 2518 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT 2520 unsigned int code, unsigned char **p, 2521 unsigned char *end); 2534 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT 2536 const unsigned char *value, int length, 2537 unsigned char **p, unsigned char *end); 2551 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT 2553 const unsigned char *value, int length, 2554 unsigned char **p, unsigned char *end); 2565 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT 2567 unsigned long content_length, 2568 unsigned char **p, unsigned char *end); 2578 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT 2580 unsigned char *end); 2627 const char *filename, char *buf, int len, 2652 LWS_VISIBLE LWS_EXTERN struct lws_spa * 2664 LWS_VISIBLE LWS_EXTERN int 2672 LWS_VISIBLE LWS_EXTERN int 2681 LWS_VISIBLE LWS_EXTERN int 2689 LWS_VISIBLE LWS_EXTERN const char * 2697 LWS_VISIBLE LWS_EXTERN int 2722 LWS_VISIBLE LWS_EXTERN const char * 2743 LWS_VISIBLE LWS_EXTERN int 2755 LWS_VISIBLE LWS_EXTERN int 2757 const char *html_body); 2769 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT 2771 unsigned char **p, unsigned char *end); 2781 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT 2803 LWS_VISIBLE LWS_EXTERN const char * 2816 LWS_VISIBLE LWS_EXTERN const char * 2828 #ifdef LWS_USE_LIBEV 2829 typedef void (lws_ev_signal_cb_t)(EV_P_ struct ev_signal *w, int revents); 2831 LWS_VISIBLE LWS_EXTERN int 2832 lws_ev_sigint_cfg( struct lws_context *context, int use_ev_sigint, 2833 lws_ev_signal_cb_t *cb); 2835 LWS_VISIBLE LWS_EXTERN int 2836 lws_ev_initloop( struct lws_context *context, struct ev_loop *loop, int tsi); 2838 LWS_VISIBLE LWS_EXTERN void 2839 lws_ev_sigint_cb( struct ev_loop *loop, struct ev_signal *watcher, int revents); 2850 #ifdef LWS_USE_LIBUV 2852 LWS_VISIBLE LWS_EXTERN int 2853 lws_uv_sigint_cfg( struct lws_context *context, int use_uv_sigint, 2856 LWS_VISIBLE LWS_EXTERN void 2857 lws_libuv_run( const struct lws_context *context, int tsi); 2859 LWS_VISIBLE LWS_EXTERN void 2860 lws_libuv_stop( struct lws_context *context); 2862 LWS_VISIBLE LWS_EXTERN int 2863 lws_uv_initloop( struct lws_context *context, uv_loop_t *loop, int tsi); 2865 LWS_VISIBLE LWS_EXTERN uv_loop_t * 2866 lws_uv_getloop( struct lws_context *context, int tsi); 2868 LWS_VISIBLE LWS_EXTERN void 2869 lws_uv_sigint_cb(uv_signal_t *watcher, int signum); 2883 enum pending_timeout { 2884 NO_PENDING_TIMEOUT = 0, 2885 PENDING_TIMEOUT_AWAITING_PROXY_RESPONSE = 1, 2886 PENDING_TIMEOUT_AWAITING_CONNECT_RESPONSE = 2, 2887 PENDING_TIMEOUT_ESTABLISH_WITH_SERVER = 3, 2888 PENDING_TIMEOUT_AWAITING_SERVER_RESPONSE = 4, 2889 PENDING_TIMEOUT_AWAITING_PING = 5, 2890 PENDING_TIMEOUT_CLOSE_ACK = 6, 2891 PENDING_TIMEOUT_AWAITING_EXTENSION_CONNECT_RESPONSE = 7, 2892 PENDING_TIMEOUT_SENT_CLIENT_HANDSHAKE = 8, 2893 PENDING_TIMEOUT_SSL_ACCEPT = 9, 2894 PENDING_TIMEOUT_HTTP_CONTENT = 10, 2895 PENDING_TIMEOUT_AWAITING_CLIENT_HS_SEND = 11, 2896 PENDING_FLUSH_STORED_SEND_BEFORE_CLOSE = 12, 2897 PENDING_TIMEOUT_SHUTDOWN_FLUSH = 13, 2898 PENDING_TIMEOUT_CGI = 14, 2899 PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE = 15, 2913 LWS_VISIBLE LWS_EXTERN void 2914 lws_set_timeout( struct lws *wsi, enum pending_timeout reason, int secs); 2922 #if !defined(LWS_SIZEOFPTR) 2923 #define LWS_SIZEOFPTR (sizeof (void *)) 2925 #if !defined(u_int64_t) 2926 #define u_int64_t unsigned long long 2929 #if defined(__x86_64__) 2930 #define _LWS_PAD_SIZE 16 2932 #define _LWS_PAD_SIZE LWS_SIZEOFPTR 2934 #define _LWS_PAD(n) (((n) % _LWS_PAD_SIZE) ? \ 2935 ((n) + (_LWS_PAD_SIZE - ((n) % _LWS_PAD_SIZE))) : (n)) 2936 #define LWS_PRE _LWS_PAD(4 + 10) 2938 #define LWS_SEND_BUFFER_PRE_PADDING LWS_PRE 2939 #define LWS_SEND_BUFFER_POST_PADDING 0 2964 LWS_WRITE_HTTP_FINAL = 7, 3060 LWS_VISIBLE LWS_EXTERN int 3061 lws_write( struct lws *wsi, unsigned char *buf, size_t len, 3065 #define lws_write_http(wsi, buf, len) \ 3066 lws_write(wsi, (unsigned char *)(buf), len, LWS_WRITE_HTTP) 3101 LWS_VISIBLE LWS_EXTERN int 3117 LWS_VISIBLE LWS_EXTERN int 3134 LWS_VISIBLE LWS_EXTERN int 3150 LWS_VISIBLE LWS_EXTERN int 3166 LWS_VISIBLE LWS_EXTERN int 3183 LWS_VISIBLE LWS_EXTERN int 3193 LWS_VISIBLE LWS_EXTERN int 3217 LWS_VISIBLE LWS_EXTERN size_t 3231 LWS_VISIBLE LWS_EXTERN int 3243 LWS_VISIBLE LWS_EXTERN void 3263 LWS_VISIBLE LWS_EXTERN size_t 3288 LWS_VISIBLE LWS_EXTERN struct lws * 3312 LWS_VISIBLE LWS_EXTERN struct lws * 3314 const char *readbuf, size_t len); 3333 LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT 3350 LWS_VISIBLE LWS_EXTERN void 3352 int name_len, char *rip, int rip_len); 3364 LWS_VISIBLE LWS_EXTERN const char * 3378 LWS_VISIBLE LWS_EXTERN int 3401 LWS_VISIBLE LWS_EXTERN int 3410 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT 3417 LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT 3426 LWS_VISIBLE LWS_EXTERN void * 3440 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT 3441 lws_parse_uri( char *p, const char **prot, const char **ads, int *port, 3447 LWS_VISIBLE LWS_EXTERN unsigned long 3459 LWS_VISIBLE LWS_EXTERN struct lws_context * LWS_WARN_UNUSED_RESULT 3471 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT 3481 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT 3490 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT 3499 LWS_VISIBLE LWS_EXTERN int 3500 lws_read( struct lws *wsi, unsigned char *buf, size_t len); 3509 LWS_VISIBLE LWS_EXTERN void 3525 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT 3532 LWS_VISIBLE LWS_EXTERN int 3539 LWS_VISIBLE LWS_EXTERN unsigned char 3558 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT 3570 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT 3581 LWS_VISIBLE LWS_EXTERN int 3587 LWS_VISIBLE LWS_EXTERN int 3597 #ifdef LWS_SHA1_USE_OPENSSL_NAME 3599 #define lws_SHA1 SHA1 3610 LWS_VISIBLE LWS_EXTERN unsigned char * 3611 lws_SHA1( const unsigned char *d, size_t n, unsigned char *md); 3623 LWS_VISIBLE LWS_EXTERN int 3634 LWS_VISIBLE LWS_EXTERN int 3649 enum lws_enum_stdinouterr { 3655 enum lws_cgi_hdr_state { 3667 enum lws_enum_stdinouterr ch; 3669 enum lws_cgi_hdr_state hdr_state; 3683 LWS_VISIBLE LWS_EXTERN int 3684 lws_cgi( struct lws *wsi, const char * const *exec_array, 3685 int script_uri_path_len, int timeout_secs, 3693 LWS_VISIBLE LWS_EXTERN int 3701 LWS_VISIBLE LWS_EXTERN int 3730 lws_filefd_type (*open)( struct lws *wsi, const char *filename, 3731 unsigned long *filelen, int flags); 3735 int (*close)( struct lws *wsi, lws_filefd_type fd); 3737 unsigned long (*seek_cur)( struct lws *wsi, lws_filefd_type fd, 3738 long offset_from_cur_pos); 3740 int (*read)( struct lws *wsi, lws_filefd_type fd, unsigned long *amount, 3741 unsigned char *buf, unsigned long len); 3743 int (*write)( struct lws *wsi, lws_filefd_type fd, unsigned long *amount, 3744 unsigned char *buf, unsigned long len); 3767 static LWS_INLINE lws_filefd_type LWS_WARN_UNUSED_RESULT 3768 lws_plat_file_open( struct lws *wsi, const char *filename, 3769 unsigned long *filelen, int flags) 3781 static LWS_INLINE int 3782 lws_plat_file_close( struct lws *wsi, lws_filefd_type fd) 3794 static LWS_INLINE unsigned long 3795 lws_plat_file_seek_cur( struct lws *wsi, lws_filefd_type fd, long offset) 3808 static LWS_INLINE int LWS_WARN_UNUSED_RESULT 3809 lws_plat_file_read( struct lws *wsi, lws_filefd_type fd, unsigned long *amount, 3810 unsigned char *buf, unsigned long len) 3824 static LWS_INLINE int LWS_WARN_UNUSED_RESULT 3825 lws_plat_file_write( struct lws *wsi, lws_filefd_type fd, unsigned long *amount, 3826 unsigned char *buf, unsigned long len) 3864 #ifdef LWS_WITH_SMTP 3886 char email_smtp_ip[32]; 3887 char email_helo[32]; 3888 char email_from[100]; 3931 LWS_VISIBLE LWS_EXTERN int 3942 LWS_VISIBLE LWS_EXTERN void 3951 LWS_VISIBLE LWS_EXTERN void
LWS_VISIBLE LWS_EXTERN const char * lws_json_purify(char *escaped, const char *string, int len)
- Definition: libwebsockets.h:3613
- size_t rx_buffer_size Definition: libwebsockets.h:1148
+ Definition: libwebsockets.h:3665
+ size_t rx_buffer_size Definition: libwebsockets.h:1188
LWS_VISIBLE LWS_EXTERN struct lws_vhost * lws_vhost_get(struct lws *wsi) LWS_WARN_DEPRECATED
- Definition: libwebsockets.h:638
- Definition: libwebsockets.h:766
+ Definition: libwebsockets.h:678
+ Definition: libwebsockets.h:806
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_daemonize(const char *_lock_path)
- Definition: libwebsockets.h:1749
- Definition: libwebsockets.h:2904
- Definition: libwebsockets.h:3818
+ Definition: libwebsockets.h:1789
+ Definition: libwebsockets.h:2956
+ Definition: libwebsockets.h:3870
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)
- unsigned int auth_mask Definition: libwebsockets.h:1784
- Definition: libwebsockets.h:2927
- void * data Definition: libwebsockets.h:3829
- const char * uri_replace_from Definition: libwebsockets.h:1837
- int(* write)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len) Definition: libwebsockets.h:3691
+ unsigned int auth_mask Definition: libwebsockets.h:1824
+ Definition: libwebsockets.h:2979
+ void * data Definition: libwebsockets.h:3881
+ const char * uri_replace_from Definition: libwebsockets.h:1877
+ int(* write)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len) Definition: libwebsockets.h:3743
lws_callback_reasons Definition: libwebsockets.h:571
- Definition: libwebsockets.h:681
- lwsgs_auth_bits Definition: libwebsockets.h:1293
+ Definition: libwebsockets.h:721
+ lwsgs_auth_bits Definition: libwebsockets.h:1333
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:764
- Definition: libwebsockets.h:952
- unsigned int id Definition: libwebsockets.h:1157
+ Definition: libwebsockets.h:804
+ Definition: libwebsockets.h:992
+ unsigned int id Definition: libwebsockets.h:1197
- Definition: libwebsockets.h:950
- Definition: libwebsockets.h:669
+ Definition: libwebsockets.h:990
+ Definition: libwebsockets.h:709
LWS_VISIBLE LWS_EXTERN int lws_service_fd_tsi(struct lws_context *context, struct lws_pollfd *pollfd, 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)
- Definition: libwebsockets.h:615
+ Definition: libwebsockets.h:655
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:3849
- Definition: libwebsockets.h:1288
- Definition: libwebsockets.h:649
- const char * path Definition: libwebsockets.h:1816
+ int(* on_sent)(struct lws_email *email) Definition: libwebsockets.h:3901
+ Definition: libwebsockets.h:1328
+ struct lws ** pwsi Definition: libwebsockets.h:1884
+ Definition: libwebsockets.h:689
+ const char * path Definition: libwebsockets.h:1856
LWS_VISIBLE LWS_EXTERN size_t lws_remaining_packet_payload(struct lws *wsi)
Definition: libwebsockets.h:490
- Definition: libwebsockets.h:1244
+ Definition: libwebsockets.h:1284
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:3865
+ time_t email_connect_started Definition: libwebsockets.h:3917
lws_close_status Definition: libwebsockets.h:461
LWS_VISIBLE LWS_EXTERN int lws_callback_all_protocol(struct lws_context *context, const struct lws_protocols *protocol, int reason)
Definition: libwebsockets.h:501
- Definition: libwebsockets.h:1348
- int token_len Definition: libwebsockets.h:2236
- const struct lws_http_mount * mounts Definition: libwebsockets.h:1524
- Definition: libwebsockets.h:790
+ Definition: libwebsockets.h:1388
+ int token_len Definition: libwebsockets.h:2288
+ const struct lws_http_mount * mounts Definition: libwebsockets.h:1564
+ Definition: libwebsockets.h:830
LWS_VISIBLE LWS_EXTERN struct lws_context *LWS_WARN_UNUSED_RESULT lws_get_context(const struct lws *wsi)
- const char * value Definition: libwebsockets.h:1738
-
- Definition: libwebsockets.h:3823
- const char * username Definition: libwebsockets.h:1319
- const char * protocol Definition: libwebsockets.h:1768
- struct lws ** stdwsi Definition: libwebsockets.h:3614
+ const char * value Definition: libwebsockets.h:1778
+
+ Definition: libwebsockets.h:3875
+ const char * username Definition: libwebsockets.h:1359
+ LWS_VISIBLE LWS_EXTERN struct lws * lws_client_connect_via_info(struct lws_client_connect_info *ccinfo)
+ const char * protocol Definition: libwebsockets.h:1808
+ struct lws ** stdwsi Definition: libwebsockets.h:3666
LWS_VISIBLE LWS_EXTERN int lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len)
- Definition: libwebsockets.h:736
- Definition: libwebsockets.h:1290
- int cache_max_age Definition: libwebsockets.h:1782
- long ssl_options_clear Definition: libwebsockets.h:1542
- Definition: libwebsockets.h:629
- Definition: libwebsockets.h:1410
+ Definition: libwebsockets.h:776
+ Definition: libwebsockets.h:1330
+ int cache_max_age Definition: libwebsockets.h:1822
+ long ssl_options_clear Definition: libwebsockets.h:1582
+ Definition: libwebsockets.h:669
+ Definition: libwebsockets.h:1450
LWS_VISIBLE LWS_EXTERN void lws_context_destroy(struct lws_context *context)
Definition: libwebsockets.h:517
- char * start Definition: libwebsockets.h:2175
+ char * start Definition: libwebsockets.h:2227
LWS_VISIBLE LWS_EXTERN void lws_set_allocator(void *(*realloc)(void *ptr, size_t size))
- lws_callback_function * callback Definition: libwebsockets.h:1139
- Definition: libwebsockets.h:2894
+ lws_callback_function * callback Definition: libwebsockets.h:1179
+ Definition: libwebsockets.h:2946
LWS_VISIBLE LWS_EXTERN int lws_get_socket_fd(struct lws *wsi)
- Definition: libwebsockets.h:827
- Definition: libwebsockets.h:819
- const char * protocol Definition: libwebsockets.h:1822
- Definition: libwebsockets.h:816
- unsigned int pt_serv_buf_size Definition: libwebsockets.h:1529
+ Definition: libwebsockets.h:867
+ Definition: libwebsockets.h:859
+ const char * protocol Definition: libwebsockets.h:1862
+ Definition: libwebsockets.h:856
+ unsigned int pt_serv_buf_size Definition: libwebsockets.h:1569
LWS_VISIBLE LWS_EXTERN struct lws * lws_adopt_socket(struct lws_context *context, lws_sockfd_type accept_fd)
- int len Definition: libwebsockets.h:2167
- int ka_time Definition: libwebsockets.h:1465
- Definition: libwebsockets.h:1364
+ int len Definition: libwebsockets.h:2219
+ int ka_time Definition: libwebsockets.h:1505
+ Definition: libwebsockets.h:1404
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))
- int count_extensions Definition: libwebsockets.h:1249
- Definition: libwebsockets.h:2898
- int port Definition: libwebsockets.h:1812
- struct lws_context * context Definition: libwebsockets.h:1808
- Definition: libwebsockets.h:1296
- int ietf_version_or_minus_one Definition: libwebsockets.h:1824
+ int count_extensions Definition: libwebsockets.h:1289
+ Definition: libwebsockets.h:2950
+ int port Definition: libwebsockets.h:1852
+ struct lws_context * context Definition: libwebsockets.h:1848
+ Definition: libwebsockets.h:1336
+ int ietf_version_or_minus_one Definition: libwebsockets.h:1864
LWS_VISIBLE LWS_EXTERN int lws_callback_all_protocol_vhost(struct lws_vhost *vh, const struct lws_protocols *protocol, int reason)
- Definition: libwebsockets.h:3816
- Definition: libwebsockets.h:1734
+ Definition: libwebsockets.h:3868
+ Definition: libwebsockets.h:1774
LWS_VISIBLE LWS_EXTERN int lws_callback_on_writable(struct lws *wsi)
- const char *const * vars Definition: libwebsockets.h:2179
+ const char *const * vars Definition: libwebsockets.h:2231
Definition: libwebsockets.h:469
- Definition: libwebsockets.h:1807
- 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:1039
- Definition: libwebsockets.h:747
- int len Definition: libwebsockets.h:975
- Definition: libwebsockets.h:1759
- const char * def Definition: libwebsockets.h:1766
- Definition: libwebsockets.h:590
- Definition: libwebsockets.h:1376
- lws_context_options Definition: libwebsockets.h:1347
- Definition: libwebsockets.h:768
- Definition: libwebsockets.h:1313
- Definition: libwebsockets.h:1383
- Definition: libwebsockets.h:756
- const char * option_name Definition: libwebsockets.h:972
- Definition: libwebsockets.h:1747
+ Definition: libwebsockets.h:1847
+ 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:1079
+ Definition: libwebsockets.h:787
+ int len Definition: libwebsockets.h:1015
+ Definition: libwebsockets.h:1799
+ const char * def Definition: libwebsockets.h:1806
+ Definition: libwebsockets.h:630
+ Definition: libwebsockets.h:1416
+ lws_context_options Definition: libwebsockets.h:1387
+ Definition: libwebsockets.h:808
+ Definition: libwebsockets.h:1353
+ Definition: libwebsockets.h:1423
+ Definition: libwebsockets.h:796
+ const char * option_name Definition: libwebsockets.h:1012
+ Definition: libwebsockets.h:1787
lws_sockfd_type fd Definition: libwebsockets.h:439
- const char * ssl_private_key_password Definition: libwebsockets.h:1433
+ const char * ssl_private_key_password Definition: libwebsockets.h:1473
short events Definition: libwebsockets.h:411
- Definition: libwebsockets.h:1257
- const struct lws_extension * extensions Definition: libwebsockets.h:1248
+ Definition: libwebsockets.h:1297
+ const struct lws_extension * extensions Definition: libwebsockets.h:1288
LWS_VISIBLE LWS_EXTERN void lws_set_timeout(struct lws *wsi, enum pending_timeout reason, int secs)
- void * userdata Definition: libwebsockets.h:1826
- Definition: libwebsockets.h:587
- Definition: libwebsockets.h:774
+ void * userdata Definition: libwebsockets.h:1866
+ Definition: libwebsockets.h:627
+ Definition: libwebsockets.h:814
LWS_VISIBLE LWS_EXTERN int lws_service_tsi(struct lws_context *context, int timeout_ms, int tsi)
- unsigned char * data Definition: libwebsockets.h:3616
- const struct lws_protocol_vhost_options * extra_mimetypes Definition: libwebsockets.h:1775
+ unsigned char * data Definition: libwebsockets.h:3668
+ const struct lws_protocol_vhost_options * extra_mimetypes Definition: libwebsockets.h:1815
- Definition: libwebsockets.h:580
+ Definition: libwebsockets.h:620
LWS_VISIBLE LWS_EXTERN const char * lws_urlencode(char *escaped, const char *string, int len)
- Definition: libwebsockets.h:661
- uv_loop_t * loop Definition: libwebsockets.h:3831
- Definition: libwebsockets.h:759
+ Definition: libwebsockets.h:701
+ uv_loop_t * loop Definition: libwebsockets.h:3883
+ Definition: libwebsockets.h:799
Definition: libwebsockets.h:72
- Definition: libwebsockets.h:2930
- int pos Definition: libwebsockets.h:2177
- struct lws_plugin * list Definition: libwebsockets.h:1258
+ Definition: libwebsockets.h:2982
+ int pos Definition: libwebsockets.h:2229
+ struct lws_plugin * list Definition: libwebsockets.h:1298
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:1485
+ short max_http_header_data Definition: libwebsockets.h:1525
- void * provided_client_ssl_ctx Definition: libwebsockets.h:1482
+ void * provided_client_ssl_ctx Definition: libwebsockets.h:1522
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:1246
- Definition: libwebsockets.h:951
- int ka_probes Definition: libwebsockets.h:1468
+ const struct lws_protocols * protocols Definition: libwebsockets.h:1286
+ Definition: libwebsockets.h:991
+ int ka_probes Definition: libwebsockets.h:1508
void onError(Socket *s, socket_error_t err)
- const char * origin Definition: libwebsockets.h:1820
+ const char * origin Definition: libwebsockets.h:1860
SHORT revents Definition: libwebsockets.h:400
- const char * method Definition: libwebsockets.h:1830
+ const char * method Definition: libwebsockets.h:1870
- Definition: libwebsockets.h:1045
+ Definition: libwebsockets.h:1085
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:796
- const struct lws_extension * client_exts Definition: libwebsockets.h:1828
- unsigned char origin_protocol Definition: libwebsockets.h:1791
- const char * log_filepath Definition: libwebsockets.h:1521
- Definition: libwebsockets.h:636
- unsigned int max_content_size Definition: libwebsockets.h:3839
- int option_index Definition: libwebsockets.h:973
+ Definition: libwebsockets.h:836
+ const struct lws_extension * client_exts Definition: libwebsockets.h:1868
+ unsigned char origin_protocol Definition: libwebsockets.h:1831
+ const char * log_filepath Definition: libwebsockets.h:1561
+ Definition: libwebsockets.h:676
+ unsigned int max_content_size Definition: libwebsockets.h:3891
+ int option_index Definition: libwebsockets.h:1013
LWS_VISIBLE LWS_EXTERN struct lws *LWS_WARN_UNUSED_RESULT lws_get_child(const struct lws *wsi)
- Definition: libwebsockets.h:632
- const char * uri_replace_to Definition: libwebsockets.h:1840
- struct lws * parent_wsi Definition: libwebsockets.h:1833
+ Definition: libwebsockets.h:672
+ const char * uri_replace_to Definition: libwebsockets.h:1880
+ struct lws * parent_wsi Definition: libwebsockets.h:1873
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:3862
+ enum lwsgs_smtp_states estate Definition: libwebsockets.h:3914
Definition: libwebsockets.h:572
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:1512
- char name[64] Definition: libwebsockets.h:1264
+ const char *const * plugin_dirs Definition: libwebsockets.h:1552
+ char name[64] Definition: libwebsockets.h:1304
LWS_VISIBLE LWS_EXTERN int lws_cgi_kill(struct lws *wsi)
- char email_buf[256] Definition: libwebsockets.h:3866
+ char email_buf[256] Definition: libwebsockets.h:3918
LWS_VISIBLE LWS_EXTERN int lws_is_ssl(struct lws *wsi)
- Definition: libwebsockets.h:1353
- int(* close)(struct lws *wsi, lws_filefd_type fd) Definition: libwebsockets.h:3683
- uv_lib_t lib Definition: libwebsockets.h:1260
+ Definition: libwebsockets.h:1393
+ int(* close)(struct lws *wsi, lws_filefd_type fd) Definition: libwebsockets.h:3735
+ uv_lib_t lib Definition: libwebsockets.h:1300
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:3817
+ Definition: libwebsockets.h:3869
LWS_VISIBLE LWS_EXTERN int lws_is_cgi(struct lws *wsi)
- int ssl_connection Definition: libwebsockets.h:1814
- Definition: libwebsockets.h:1312
- SSL_CTX * provided_client_ssl_ctx Definition: libwebsockets.h:1476
+ int ssl_connection Definition: libwebsockets.h:1854
+ Definition: libwebsockets.h:1352
+ SSL_CTX * provided_client_ssl_ctx Definition: libwebsockets.h:1516
LWS_VISIBLE LWS_EXTERN int lws_rx_flow_control(struct lws *wsi, int enable)
- Definition: libwebsockets.h:2165
+ Definition: libwebsockets.h:2217
LWS_VISIBLE LWS_EXTERN struct lws_plat_file_ops *LWS_WARN_UNUSED_RESULT lws_get_fops(struct lws_context *context)
Definition: libwebsockets.h:438
- const struct lws_protocol_vhost_options * cgienv Definition: libwebsockets.h:1771
- const char * name Definition: libwebsockets.h:1737
- unsigned char mountpoint_len Definition: libwebsockets.h:1792
- Definition: libwebsockets.h:2901
- Definition: libwebsockets.h:1371
+ const struct lws_protocol_vhost_options * cgienv Definition: libwebsockets.h:1811
+ const char * name Definition: libwebsockets.h:1777
+ unsigned char mountpoint_len Definition: libwebsockets.h:1832
+ Definition: libwebsockets.h:2953
+ Definition: libwebsockets.h:1411
lws_sockfd_type fd Definition: libwebsockets.h:398
- Definition: libwebsockets.h:1748
+ Definition: libwebsockets.h:1788
LWS_VISIBLE LWS_EXTERN int lws_is_final_fragment(struct lws *wsi)
- const struct lws_extension * extensions Definition: libwebsockets.h:1427
- Definition: libwebsockets.h:1355
+ const struct lws_extension * extensions Definition: libwebsockets.h:1467
+ Definition: libwebsockets.h:1395
LWS_VISIBLE LWS_EXTERN void * lws_protocol_vh_priv_zalloc(struct lws_vhost *vhost, const struct lws_protocols *prot, int size)
- Definition: libwebsockets.h:1360
- lws_ext_options_types Definition: libwebsockets.h:949
- const struct lws_protocols * protocols Definition: libwebsockets.h:1423
+ Definition: libwebsockets.h:1400
+ lws_ext_options_types Definition: libwebsockets.h:989
+ const struct lws_protocols * protocols Definition: libwebsockets.h:1463
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:974
- const char * ssl_cipher_list Definition: libwebsockets.h:1447
+ const char * start Definition: libwebsockets.h:1014
+ const char * ssl_cipher_list Definition: libwebsockets.h:1487
- const char * mountpoint Definition: libwebsockets.h:1762
- const char * http_proxy_address Definition: libwebsockets.h:1451
- LWS_VISIBLE LWS_EXTERN struct lws *LWS_WARN_UNUSED_RESULT lws_client_connect_via_info(struct lws_client_connect_info *ccinfo)
- Definition: libwebsockets.h:694
+ const char * mountpoint Definition: libwebsockets.h:1802
+ const char * http_proxy_address Definition: libwebsockets.h:1491
+ Definition: libwebsockets.h:734
- const char * ssl_cert_filepath Definition: libwebsockets.h:1435
- const char * ecdh_curve Definition: libwebsockets.h:1506
- int cgi_timeout Definition: libwebsockets.h:1780
- Definition: libwebsockets.h:1750
- Definition: libwebsockets.h:1297
+ const char * ssl_cert_filepath Definition: libwebsockets.h:1475
+ const char * ecdh_curve Definition: libwebsockets.h:1546
+ int cgi_timeout Definition: libwebsockets.h:1820
+ Definition: libwebsockets.h:1790
+ Definition: libwebsockets.h:1337
Definition: libwebsockets.h:409
Definition: libwebsockets.h:495
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 int lws_set_extension_option(struct lws *wsi, const char *ext_name, const char *opt_name, const char *opt_val)
- Definition: libwebsockets.h:600
+ Definition: libwebsockets.h:640
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:634
+ Definition: libwebsockets.h:674
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:1381
+ Definition: libwebsockets.h:1421
LWS_VISIBLE LWS_EXTERN int lwsl_timestamp(int level, char *p, int len)
- Definition: libwebsockets.h:1393
- uv_timer_t timeout_email Definition: libwebsockets.h:3861
- Definition: libwebsockets.h:1362
- short max_http_header_pool Definition: libwebsockets.h:1488
+ Definition: libwebsockets.h:1433
+ uv_timer_t timeout_email Definition: libwebsockets.h:3913
+ Definition: libwebsockets.h:1402
+ short max_http_header_pool Definition: libwebsockets.h:1528
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:2166
+ char * p Definition: libwebsockets.h:2218
- size_t per_session_data_size Definition: libwebsockets.h:1143
+ size_t per_session_data_size Definition: libwebsockets.h:1183
Definition: libwebsockets.h:479
- lwsgs_smtp_states Definition: libwebsockets.h:3815
- Definition: libwebsockets.h:1374
- Definition: libwebsockets.h:712
- Definition: libwebsockets.h:598
- Definition: libwebsockets.h:1135
+ lwsgs_smtp_states Definition: libwebsockets.h:3867
+ Definition: libwebsockets.h:1414
+ Definition: libwebsockets.h:752
+ Definition: libwebsockets.h:638
+ Definition: libwebsockets.h:1175
Definition: libwebsockets.h:484
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:1495
- const char * email Definition: libwebsockets.h:1320
+ unsigned int count_threads Definition: libwebsockets.h:1535
+ const char * email Definition: libwebsockets.h:1360
LWS_VISIBLE LWS_EXTERN int lws_get_random(struct lws_context *context, void *buf, int len)
Definition: libwebsockets.h:466
- uv_connect_t email_connect_req Definition: libwebsockets.h:3863
- const char * server_string Definition: libwebsockets.h:1526
- Definition: libwebsockets.h:1386
+ uv_connect_t email_connect_req Definition: libwebsockets.h:3915
+ const char * server_string Definition: libwebsockets.h:1566
+ Definition: libwebsockets.h:1426
SHORT events Definition: libwebsockets.h:399
- Definition: libwebsockets.h:603
- Definition: libwebsockets.h:1369
- const char * vhost_name Definition: libwebsockets.h:1508
- Definition: libwebsockets.h:1751
+ Definition: libwebsockets.h:643
+ Definition: libwebsockets.h:1409
+ const char * vhost_name Definition: libwebsockets.h:1548
+ Definition: libwebsockets.h:1791
LWS_VISIBLE LWS_EXTERN const struct lws_protocols * lws_get_protocol(struct lws *wsi)
- Definition: libwebsockets.h:1295
- Definition: libwebsockets.h:1317
- unsigned int fd_limit_per_thread Definition: libwebsockets.h:1497
+ Definition: libwebsockets.h:1335
+ Definition: libwebsockets.h:1357
+ unsigned int fd_limit_per_thread Definition: libwebsockets.h:1537
LWS_VISIBLE LWS_EXTERN int lws_cgi_write_split_stdout_headers(struct lws *wsi)
- lws_gs_event Definition: libwebsockets.h:1311
+ lws_gs_event Definition: libwebsockets.h:1351
LWS_VISIBLE LWS_EXTERN int lws_finalize_startup(struct lws_context *context)
- int ka_interval Definition: libwebsockets.h:1472
- Definition: libwebsockets.h:1294
- int uid Definition: libwebsockets.h:1458
-
+ int ka_interval Definition: libwebsockets.h:1512
+ Definition: libwebsockets.h:1334
+ int uid Definition: libwebsockets.h:1498
+
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:1136
+ const char * name Definition: libwebsockets.h:1176
LWS_VISIBLE LWS_EXTERN int lws_init_vhost_client_ssl(const struct lws_context_creation_info *info, struct lws_vhost *vhost)
- Definition: libwebsockets.h:3821
- unsigned int http_proxy_port Definition: libwebsockets.h:1454
+ Definition: libwebsockets.h:3873
+ unsigned int http_proxy_port Definition: libwebsockets.h:1494
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_partial_buffered(struct lws *wsi)
- unsigned int timeout_secs Definition: libwebsockets.h:1501
- int port Definition: libwebsockets.h:1411
+ unsigned int timeout_secs Definition: libwebsockets.h:1541
+ int port Definition: libwebsockets.h:1451
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:1460
+ unsigned int options Definition: libwebsockets.h:1500
- const struct lws_protocol_vhost_options * options Definition: libwebsockets.h:1736
+ const struct lws_protocol_vhost_options * options Definition: libwebsockets.h:1776
int prev_events Definition: libwebsockets.h:441
- int keepalive_timeout Definition: libwebsockets.h:1518
- Definition: libwebsockets.h:1301
- Definition: libwebsockets.h:962
- Definition: libwebsockets.h:2354
+ int keepalive_timeout Definition: libwebsockets.h:1558
+ Definition: libwebsockets.h:1341
+ Definition: libwebsockets.h:1002
+ Definition: libwebsockets.h:2406
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:1515
- const char * host Definition: libwebsockets.h:1818
- Definition: libwebsockets.h:971
+ const struct lws_protocol_vhost_options * pvo Definition: libwebsockets.h:1555
+ const char * host Definition: libwebsockets.h:1858
+ Definition: libwebsockets.h:1011
Definition: libwebsockets.h:505
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:3618
- struct lws_http_mount * mount_next Definition: libwebsockets.h:1760
+ int len Definition: libwebsockets.h:3670
+ struct lws_http_mount * mount_next Definition: libwebsockets.h:1800
- const char * iface Definition: libwebsockets.h:1416
- Definition: libwebsockets.h:3677
+ const char * iface Definition: libwebsockets.h:1456
+ Definition: libwebsockets.h:3729
LWS_VISIBLE LWS_EXTERN void lwsl_hexdump(void *buf, size_t len)
-
+
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:688
+ Definition: libwebsockets.h:728
Definition: libwebsockets.h:463
Definition: libwebsockets.h:472
LWS_VISIBLE LWS_EXTERN const char * lws_sql_purify(char *escaped, const char *string, int len)
- uv_tcp_t email_client Definition: libwebsockets.h:3864
+ uv_tcp_t email_client Definition: libwebsockets.h:3916
LWS_VISIBLE LWS_EXTERN int lws_json_dump_context(const struct lws_context *context, char *buf, int len)
Definition: libwebsockets.h:397
Definition: libwebsockets.h:576
- lws_filefd_type(* open)(struct lws *wsi, const char *filename, unsigned long *filelen, int flags) Definition: libwebsockets.h:3678
- lws_write_protocol Definition: libwebsockets.h:2893
- const char * client_offer Definition: libwebsockets.h:1048
- int(* read)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len) Definition: libwebsockets.h:3688
+ lws_filefd_type(* open)(struct lws *wsi, const char *filename, unsigned long *filelen, int flags) Definition: libwebsockets.h:3730
+ lws_write_protocol Definition: libwebsockets.h:2945
+ const char * client_offer Definition: libwebsockets.h:1088
+ int(* read)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len) Definition: libwebsockets.h:3740
LWS_VISIBLE LWS_EXTERN void lws_cancel_service(struct lws_context *context)
-
+
Definition: libwebsockets.h:477
- const char * origin Definition: libwebsockets.h:1764
- const char * name Definition: libwebsockets.h:963
+ const char * origin Definition: libwebsockets.h:1804
+ const char * name Definition: libwebsockets.h:1003
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)
- Definition: libwebsockets.h:613
- const char * name Definition: libwebsockets.h:1046
- Definition: libwebsockets.h:3820
+ Definition: libwebsockets.h:653
+ const char * name Definition: libwebsockets.h:1086
+ Definition: libwebsockets.h:3872
short revents Definition: libwebsockets.h:412
- lws_extension_callback_function * callback Definition: libwebsockets.h:1047
- long ssl_options_set Definition: libwebsockets.h:1540
- Definition: libwebsockets.h:875
+ lws_extension_callback_function * callback Definition: libwebsockets.h:1087
+ long ssl_options_set Definition: libwebsockets.h:1580
+ Definition: libwebsockets.h:915
LWS_VISIBLE LWS_EXTERN const struct lws_protocols * lws_protocol_get(struct lws *wsi) LWS_WARN_DEPRECATED
- unsigned int mask Definition: libwebsockets.h:1305
+ unsigned int mask Definition: libwebsockets.h:1345
LWS_VISIBLE LWS_EXTERN int lws_email_init(struct lws_email *email, uv_loop_t *loop, int max_content)
- lws_mount_protocols Definition: libwebsockets.h:1745
+ lws_mount_protocols Definition: libwebsockets.h:1785
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_sockfd_type fd Definition: libwebsockets.h:410
- unsigned int max_http_header_data2 Definition: libwebsockets.h:1535
- Definition: libwebsockets.h:1746
+ unsigned int max_http_header_data2 Definition: libwebsockets.h:1575
+ Definition: libwebsockets.h:1786
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:1777
+ const struct lws_protocol_vhost_options * interpret Definition: libwebsockets.h:1817
LWS_VISIBLE LWS_EXTERN int lws_service(struct lws_context *context, int timeout_ms)
- Definition: libwebsockets.h:1367
+ Definition: libwebsockets.h:1407
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_http_transaction_completed(struct lws *wsi)
- int count_vars Definition: libwebsockets.h:2180
+ int count_vars Definition: libwebsockets.h:2232
- Definition: libwebsockets.h:2234
+ Definition: libwebsockets.h:2286
LWS_VISIBLE LWS_EXTERN struct lws_context * lws_create_context(struct lws_context_creation_info *info)
- Definition: libwebsockets.h:592
- void * data Definition: libwebsockets.h:2178
- char * content Definition: libwebsockets.h:3867
+ Definition: libwebsockets.h:632
+ void * data Definition: libwebsockets.h:2230
+ char * content Definition: libwebsockets.h:3919
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:1430
- lws_process_html_state_cb replace Definition: libwebsockets.h:2182
- Definition: libwebsockets.h:3828
- const char * address Definition: libwebsockets.h:1810
- unsigned long(* seek_cur)(struct lws *wsi, lws_filefd_type fd, long offset_from_cur_pos) Definition: libwebsockets.h:3685
- void * user Definition: libwebsockets.h:1164
+ const struct lws_token_limits * token_limits Definition: libwebsockets.h:1470
+ lws_process_html_state_cb replace Definition: libwebsockets.h:2234
+ Definition: libwebsockets.h:3880
+ const char * address Definition: libwebsockets.h:1850
+ unsigned long(* seek_cur)(struct lws *wsi, lws_filefd_type fd, long offset_from_cur_pos) Definition: libwebsockets.h:3737
+ void * user Definition: libwebsockets.h:1204
int events Definition: libwebsockets.h:440
- int(* on_get_body)(struct lws_email *email, char *buf, int len) Definition: libwebsockets.h:3854
- Definition: libwebsockets.h:1752
- void * user Definition: libwebsockets.h:1462
- Definition: libwebsockets.h:3824
- Definition: libwebsockets.h:2916
- char * token Definition: libwebsockets.h:2235
+ int(* on_get_body)(struct lws_email *email, char *buf, int len) Definition: libwebsockets.h:3906
+ Definition: libwebsockets.h:1792
+ void * user Definition: libwebsockets.h:1502
+ Definition: libwebsockets.h:3876
+ Definition: libwebsockets.h:2968
+ char * token Definition: libwebsockets.h:2287
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:1247
- void * l Definition: libwebsockets.h:1262
- const char * ssl_private_key_filepath Definition: libwebsockets.h:1439
- int max_len Definition: libwebsockets.h:2168
- Definition: libwebsockets.h:594
- const struct lws_protocol_vhost_options * next Definition: libwebsockets.h:1735
- Definition: libwebsockets.h:605
+ int count_protocols Definition: libwebsockets.h:1287
+ void * l Definition: libwebsockets.h:1302
+ const char * ssl_private_key_filepath Definition: libwebsockets.h:1479
+ int max_len Definition: libwebsockets.h:2220
+ Definition: libwebsockets.h:634
+ const struct lws_protocol_vhost_options * next Definition: libwebsockets.h:1775
+ Definition: libwebsockets.h:645
LWS_VISIBLE LWS_EXTERN void lws_rx_flow_allow_all_protocol(const struct lws_context *context, const struct lws_protocols *protocol)
- Definition: libwebsockets.h:2174
+ Definition: libwebsockets.h:2226
LWS_VISIBLE LWS_EXTERN const char *LWS_WARN_UNUSED_RESULT lws_canonical_hostname(struct lws_context *context)
- Definition: libwebsockets.h:804
- const char * ssl_ca_filepath Definition: libwebsockets.h:1445
- int gid Definition: libwebsockets.h:1456
- struct lws_vhost * vhost Definition: libwebsockets.h:1842
- int lws_callback_function(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) Definition: libwebsockets.h:897
+ Definition: libwebsockets.h:844
+ const char * ssl_ca_filepath Definition: libwebsockets.h:1485
+ int gid Definition: libwebsockets.h:1496
+ struct lws_vhost * vhost Definition: libwebsockets.h:1882
+ int lws_callback_function(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) Definition: libwebsockets.h:937
LWS_VISIBLE LWS_EXTERN void lws_cancel_service_pt(struct lws *wsi)
- Definition: libwebsockets.h:1388
+ Definition: libwebsockets.h:1428
Definition: libwebsockets.h:513
- Definition: libwebsockets.h:3819
- unsigned int api_magic Definition: libwebsockets.h:1245
- Definition: libwebsockets.h:1391
+ Definition: libwebsockets.h:3871
+ unsigned int api_magic Definition: libwebsockets.h:1285
+ Definition: libwebsockets.h:1431
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_send_pipe_choked(struct lws *wsi)
- Definition: libwebsockets.h:3822
-
+ Definition: libwebsockets.h:3874
+
diff --git a/doc/html/navtreeindex0.js b/doc/html/navtreeindex0.js
index ce87d947..fbd1f9e7 100644
--- a/doc/html/navtreeindex0.js
+++ b/doc/html/navtreeindex0.js
@@ -52,8 +52,8 @@ var NAVTREEINDEX0 =
"group__HTTP-headers-read.html#ga2c0597b2ef1d2cee35736c338bcbd17b":[9,0,0,0,141],
"group__HTTP-headers-read.html#ga594f3d0ece5b09c2ccf9f98ea533bb4e":[9,0,0,0,95],
"group__HTTP-headers-read.html#ga594f3d0ece5b09c2ccf9f98ea533bb4e":[7,6,4,5],
-"group__HTTP-headers-read.html#ga6ce6aa1c0155ea42b7708bed271d1c77":[7,6,4,3],
"group__HTTP-headers-read.html#ga6ce6aa1c0155ea42b7708bed271d1c77":[9,0,0,0,93],
+"group__HTTP-headers-read.html#ga6ce6aa1c0155ea42b7708bed271d1c77":[7,6,4,3],
"group__HTTP-headers-read.html#ga6e747906f9d76532ec118d6ef418b82e":[9,0,0,0,30],
"group__HTTP-headers-read.html#ga84e9ce5e71a77501a0998ac403a984c2":[9,0,0,0,91],
"group__HTTP-headers-read.html#ga84e9ce5e71a77501a0998ac403a984c2":[7,6,4,2],
@@ -187,15 +187,15 @@ var NAVTREEINDEX0 =
"group__callback-when-writeable.html#gacf04bbe089f47c971c6408c5efe2ac70":[9,0,0,0,45],
"group__cgi.html":[7,19],
"group__client.html":[7,2],
+"group__client.html#ga0c966136905f467816307cfba6deb5fd":[7,2,3],
+"group__client.html#ga0c966136905f467816307cfba6deb5fd":[9,0,0,0,60],
"group__client.html#ga4450c34200bf9dab3beb90ef23221870":[9,0,0,0,97],
"group__client.html#ga4af0a20108a95e8b6d94dd4d80055ff3":[7,2,1],
"group__client.html#ga4af0a20108a95e8b6d94dd4d80055ff3":[9,0,0,0,58],
"group__client.html#ga4f44b8230e6732816ca5cd8d1aaaf340":[7,2,4],
"group__client.html#ga4f44b8230e6732816ca5cd8d1aaaf340":[9,0,0,0,100],
-"group__client.html#gac30a7be106abd0cedfbb2e8b8fe3a2f5":[7,2,3],
-"group__client.html#gac30a7be106abd0cedfbb2e8b8fe3a2f5":[9,0,0,0,60],
-"group__client.html#gac6a8558b4410961a880241c2ac1271e2":[9,0,0,0,59],
"group__client.html#gac6a8558b4410961a880241c2ac1271e2":[7,2,2],
+"group__client.html#gac6a8558b4410961a880241c2ac1271e2":[9,0,0,0,59],
"group__context-and-vhost.html":[7,4],
"group__context-and-vhost.html#ga06e77ce2916f8bc9826ef8d9d68e3932":[7,4,8],
"group__context-and-vhost.html#ga06e77ce2916f8bc9826ef8d9d68e3932":[9,0,0,0,92],
diff --git a/doc/html/navtreeindex1.js b/doc/html/navtreeindex1.js
index 86fdf3e5..408efbc0 100644
--- a/doc/html/navtreeindex1.js
+++ b/doc/html/navtreeindex1.js
@@ -135,8 +135,8 @@ var NAVTREEINDEX1 =
"group__http.html":[7,6],
"group__http.html#ga8fbf01e473ac421fc33ad9f8da8b8a25":[9,0,0,0,98],
"group__http.html#ga8fbf01e473ac421fc33ad9f8da8b8a25":[7,6,7],
-"group__http.html#gac8a4a71240857dc6b2ed70456b6923f4":[7,6,9],
"group__http.html#gac8a4a71240857dc6b2ed70456b6923f4":[9,0,0,0,118],
+"group__http.html#gac8a4a71240857dc6b2ed70456b6923f4":[7,6,9],
"group__http.html#gad27aed6c66a41b2b89ffe4da2a309e8a":[9,0,0,0,99],
"group__http.html#gad27aed6c66a41b2b89ffe4da2a309e8a":[7,6,8],
"group__httpft.html":[7,6,2],
@@ -152,8 +152,8 @@ var NAVTREEINDEX1 =
"group__log.html#ga74eb146969f0595e12ea835851b4588e":[9,0,0,0,36],
"group__log.html#ga898b1f03872ad019f507d4e35bbefa90":[9,0,0,0,153],
"group__log.html#ga898b1f03872ad019f507d4e35bbefa90":[7,7,2],
-"group__log.html#gab7c0fc936cc9f1eb58e2bb234c15147c":[7,7,1],
"group__log.html#gab7c0fc936cc9f1eb58e2bb234c15147c":[9,0,0,0,152],
+"group__log.html#gab7c0fc936cc9f1eb58e2bb234c15147c":[7,7,1],
"group__log.html#gaf5f07837692b2f231a79da8a058288aa":[9,0,0,0,35],
"group__log.html#gga14542b84d2c76efa7814124bb10f9c5fa083a44e71966a0e768426e477e1bc358":[9,0,0,0,27,8],
"group__log.html#gga14542b84d2c76efa7814124bb10f9c5fa2be9c1d50d05756078e9abc72c9e50cc":[9,0,0,0,27,5],
@@ -191,8 +191,8 @@ var NAVTREEINDEX1 =
"group__misc.html#gace5171b1dbbc03ec89a98f8afdb5c9af":[9,0,0,0,66],
"group__misc.html#gace5171b1dbbc03ec89a98f8afdb5c9af":[7,8,0],
"group__net.html":[7,9],
-"group__net.html#ga092e5f473b3347f03ffeef8a950080f3":[9,0,0,0,84],
"group__net.html#ga092e5f473b3347f03ffeef8a950080f3":[7,9,1],
+"group__net.html#ga092e5f473b3347f03ffeef8a950080f3":[9,0,0,0,84],
"group__net.html#ga869d8bdffb0f2a7ce08e3ce10d6be3d8":[7,9,3],
"group__net.html#ga869d8bdffb0f2a7ce08e3ce10d6be3d8":[9,0,0,0,101],
"group__net.html#gad01014fed09759741b6d23afccfdaacc":[7,9,2],
diff --git a/doc/html/navtreeindex2.js b/doc/html/navtreeindex2.js
index cdbb2cc6..578f950d 100644
--- a/doc/html/navtreeindex2.js
+++ b/doc/html/navtreeindex2.js
@@ -1,8 +1,8 @@
var NAVTREEINDEX2 =
{
"group__smtp.html#ga25298a5afc1074e13b2d5711a86432b2":[9,0,0,0,68],
-"group__smtp.html#ga5e535e346d92a9daf00be33abf79d4eb":[7,14,2],
"group__smtp.html#ga5e535e346d92a9daf00be33abf79d4eb":[9,0,0,0,67],
+"group__smtp.html#ga5e535e346d92a9daf00be33abf79d4eb":[7,14,2],
"group__smtp.html#ga77fc9b56a1bb39484844981ec375fc29":[7,14,4],
"group__smtp.html#ga77fc9b56a1bb39484844981ec375fc29":[9,0,0,0,69],
"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad":[7,14,1,3],
@@ -17,15 +17,15 @@ var NAVTREEINDEX2 =
"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14":[9,0,0,0,33,6],
"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab":[7,14,1,4],
"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab":[9,0,0,0,33,4],
-"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83":[7,14,1,5],
"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83":[9,0,0,0,33,5],
-"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d":[9,0,0,0,33,2],
+"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83":[7,14,1,5],
"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d":[7,14,1,2],
+"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d":[9,0,0,0,33,2],
"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933":[7,14,1,1],
"group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933":[9,0,0,0,33,1],
"group__sock-adopt.html":[7,15],
-"group__sock-adopt.html#gab2d045df0f81afe00891aaed312d552b":[9,0,0,0,42],
"group__sock-adopt.html#gab2d045df0f81afe00891aaed312d552b":[7,15,1],
+"group__sock-adopt.html#gab2d045df0f81afe00891aaed312d552b":[9,0,0,0,42],
"group__sock-adopt.html#gabe71b7462afb21c767bdc67334f305af":[7,15,0],
"group__sock-adopt.html#gabe71b7462afb21c767bdc67334f305af":[9,0,0,0,41],
"group__timeout.html":[7,3],
@@ -65,8 +65,8 @@ var NAVTREEINDEX2 =
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a06006e98d27e1e884364d88317f83493":[7,16,1,22],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a0e9e3dd667c0c42cdbe1a3d921f4fd79":[9,0,0,0,19,36],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a0e9e3dd667c0c42cdbe1a3d921f4fd79":[7,16,1,36],
-"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a136a7cec11c3afd13245623bd84e76c9":[7,16,1,9],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a136a7cec11c3afd13245623bd84e76c9":[9,0,0,0,19,9],
+"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a136a7cec11c3afd13245623bd84e76c9":[7,16,1,9],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a182a4a14c3278784505cea6d516a8308":[9,0,0,0,19,47],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a1ce5b22039ca37ee224d00047596ea46":[9,0,0,0,19,26],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a1ce5b22039ca37ee224d00047596ea46":[7,16,1,26],
@@ -84,8 +84,8 @@ var NAVTREEINDEX2 =
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a45d538082dec32dbecfe9d9a05ddfecd":[9,0,0,0,19,50],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a48a9590e5e18c7920282e094a0bfd9d8":[9,0,0,0,19,4],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a48a9590e5e18c7920282e094a0bfd9d8":[7,16,1,4],
-"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a492c1b1c0ac0ed980042ee732fe2990c":[7,16,1,6],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a492c1b1c0ac0ed980042ee732fe2990c":[9,0,0,0,19,6],
+"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a492c1b1c0ac0ed980042ee732fe2990c":[7,16,1,6],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a54269ca88508e6efd3afdb9d360a9caa":[9,0,0,0,19,28],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a54269ca88508e6efd3afdb9d360a9caa":[7,16,1,28],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a659539cfa65c66e0d813113b09900d31":[9,0,0,0,19,42],
@@ -96,13 +96,13 @@ var NAVTREEINDEX2 =
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7e12418eec9bce85735e6460176ab604":[7,16,1,3],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7ec8e2e9557ee02a4fc9f7dec7e2babc":[9,0,0,0,19,11],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7ec8e2e9557ee02a4fc9f7dec7e2babc":[7,16,1,11],
-"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a838b18d255c1b94a533287ba302a2eba":[9,0,0,0,19,5],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a838b18d255c1b94a533287ba302a2eba":[7,16,1,5],
+"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a838b18d255c1b94a533287ba302a2eba":[9,0,0,0,19,5],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8909732521d379179003d97ab7a05428":[7,16,1,35],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8909732521d379179003d97ab7a05428":[9,0,0,0,19,35],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a89862929a72bff65257ca1d51a0fce4d":[9,0,0,0,19,52],
-"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8e8b2e6dbeac76d8d126947d2166a514":[7,16,1,10],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8e8b2e6dbeac76d8d126947d2166a514":[9,0,0,0,19,10],
+"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8e8b2e6dbeac76d8d126947d2166a514":[7,16,1,10],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a909cc2a7018864b0b71abacc4058fd8f":[9,0,0,0,19,24],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a909cc2a7018864b0b71abacc4058fd8f":[7,16,1,24],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a982579753e70e59a9ea13ce628ac891a":[9,0,0,0,19,56],
@@ -151,8 +151,8 @@ var NAVTREEINDEX2 =
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae9734e1d7af2abf291665ce9e4a728d3":[7,16,1,19],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7af6cf80e57aae8ba0a57a5c456b1fe026":[9,0,0,0,19,55],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afc4b2f72cc9e424a750b506ce0cc4310":[9,0,0,0,19,51],
-"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afd8fd77a1cc9405fcb4f26915d7f2d01":[9,0,0,0,19,29],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afd8fd77a1cc9405fcb4f26915d7f2d01":[7,16,1,29],
+"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afd8fd77a1cc9405fcb4f26915d7f2d01":[9,0,0,0,19,29],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afedadfb3cde37a8ea4c84ed535f26d09":[9,0,0,0,19,16],
"group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afedadfb3cde37a8ea4c84ed535f26d09":[7,16,1,16],
"group__uv.html":[7,22],
@@ -165,23 +165,23 @@ var NAVTREEINDEX2 =
"group__vhost-mounts.html":[7,4,0],
"group__vhost-mounts.html#ga31eca18e50cb4357480f2fcad36ff437":[7,4,0,2],
"group__vhost-mounts.html#ga31eca18e50cb4357480f2fcad36ff437":[9,0,0,0,28],
-"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69":[9,0,0,0,28,3],
"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69":[7,4,0,2,3],
+"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69":[9,0,0,0,28,3],
"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0":[7,4,0,2,0],
"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0":[9,0,0,0,28,0],
-"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2":[7,4,0,2,2],
"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2":[9,0,0,0,28,2],
+"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2":[7,4,0,2,2],
"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a8894d16316863077dfe530963ca59f67":[7,4,0,2,5],
"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a8894d16316863077dfe530963ca59f67":[9,0,0,0,28,5],
-"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da":[9,0,0,0,28,6],
"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da":[7,4,0,2,6],
-"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970":[9,0,0,0,28,4],
+"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da":[9,0,0,0,28,6],
"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970":[7,4,0,2,4],
-"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1":[7,4,0,2,1],
+"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970":[9,0,0,0,28,4],
"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1":[9,0,0,0,28,1],
+"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1":[7,4,0,2,1],
"group__wsclose.html":[7,17],
-"group__wsclose.html#gaa1c863415d1783cd8de7938aa6efa262":[7,17,1],
"group__wsclose.html#gaa1c863415d1783cd8de7938aa6efa262":[9,0,0,0,61],
+"group__wsclose.html#gaa1c863415d1783cd8de7938aa6efa262":[7,17,1],
"group__wsclose.html#gae399c571df32ba532c0ca67da9284985":[9,0,0,0,21],
"group__wsclose.html#gae399c571df32ba532c0ca67da9284985":[7,17,0],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a1bb501d212fa4d57053db681b1dfab98":[9,0,0,0,21,3],
@@ -195,14 +195,14 @@ var NAVTREEINDEX2 =
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a462c99b05459df700919cfd3f53c8276":[7,17,0,3],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a4b8a3b7ce6f731e5248e4b0fb64a5044":[9,0,0,0,21,6],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a4b8a3b7ce6f731e5248e4b0fb64a5044":[7,17,0,5],
-"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a68b3d34bebd88547dcfa5cadba0acd6c":[7,17,0,6],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a68b3d34bebd88547dcfa5cadba0acd6c":[9,0,0,0,21,7],
-"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050":[7,17,0,7],
+"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a68b3d34bebd88547dcfa5cadba0acd6c":[7,17,0,6],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050":[9,0,0,0,21,8],
+"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050":[7,17,0,7],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218":[7,17,0,1],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218":[9,0,0,0,21,2],
-"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e":[7,17,0,10],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e":[9,0,0,0,21,11],
+"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e":[7,17,0,10],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985acc9a317c70363dd88e823e066b2c73b7":[9,0,0,0,21,0],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad0869604d79e13700ae5d196a431b350":[9,0,0,0,21,12],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad0869604d79e13700ae5d196a431b350":[7,17,0,11],
@@ -210,26 +210,26 @@ var NAVTREEINDEX2 =
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad09e68295eabdddcba4e332fbea70ae5":[7,17,0,8],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad2b477a91c8445bf34ecd43977f9b390":[7,17,0,12],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad2b477a91c8445bf34ecd43977f9b390":[9,0,0,0,21,13],
-"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2":[9,0,0,0,21,5],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2":[7,17,0,4],
+"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2":[9,0,0,0,21,5],
"group__wsstatus.html":[7,18],
-"group__wsstatus.html#ga08e9ee165fca503fd9427d55cfecac37":[7,18,3],
"group__wsstatus.html#ga08e9ee165fca503fd9427d55cfecac37":[9,0,0,0,103],
-"group__wsstatus.html#ga26a140623d202dd2bf2004deb6994baa":[7,18,4],
+"group__wsstatus.html#ga08e9ee165fca503fd9427d55cfecac37":[7,18,3],
"group__wsstatus.html#ga26a140623d202dd2bf2004deb6994baa":[9,0,0,0,104],
+"group__wsstatus.html#ga26a140623d202dd2bf2004deb6994baa":[7,18,4],
"group__wsstatus.html#ga2bb3655329b4651cd06f79ee3a764421":[7,18,6],
"group__wsstatus.html#ga2bb3655329b4651cd06f79ee3a764421":[9,0,0,0,121],
"group__wsstatus.html#ga3df5045656dfb6b0e63a38de2dca79d2":[7,18,1],
"group__wsstatus.html#ga3df5045656dfb6b0e63a38de2dca79d2":[9,0,0,0,89],
"group__wsstatus.html#ga4ad226d5e01024b4046f4a5a37199aa1":[9,0,0,0,102],
"group__wsstatus.html#ga4ad226d5e01024b4046f4a5a37199aa1":[7,18,2],
-"group__wsstatus.html#gaccd9c59336efad8af0554f79cc5966fd":[9,0,0,0,77],
"group__wsstatus.html#gaccd9c59336efad8af0554f79cc5966fd":[7,18,0],
+"group__wsstatus.html#gaccd9c59336efad8af0554f79cc5966fd":[9,0,0,0,77],
"group__wsstatus.html#gaeca4afc94b1f026034f99cbba37e2f85":[9,0,0,0,112],
"group__wsstatus.html#gaeca4afc94b1f026034f99cbba37e2f85":[7,18,5],
"hierarchy.html":[8,2],
-"index.html":[0],
"index.html":[],
+"index.html":[0],
"libwebsockets_8h.html":[9,0,0,0],
"libwebsockets_8h.html#a0b056fdcf949a838ff82209b4a627dd9":[9,0,0,0,157],
"libwebsockets_8h.html#a2271141d8be8d72b47ba327130b4905f":[9,0,0,0,23],
diff --git a/doc/html/navtreeindex3.js b/doc/html/navtreeindex3.js
index 97fe48e6..572cfad4 100644
--- a/doc/html/navtreeindex3.js
+++ b/doc/html/navtreeindex3.js
@@ -22,17 +22,18 @@ var NAVTREEINDEX3 =
"structlws__cgi__args.html#a8ac842084688c02f3f94694ef700d8f7":[8,0,0,1],
"structlws__cgi__args.html#adeee220b29aeacc34632c38e50f0f5a5":[8,0,0,0],
"structlws__client__connect__info.html":[7,2,0],
-"structlws__client__connect__info.html#a03c305fdca809667b6a9a83b3edfd83a":[7,2,0,13],
+"structlws__client__connect__info.html#a03c305fdca809667b6a9a83b3edfd83a":[7,2,0,14],
+"structlws__client__connect__info.html#a065063b5117ecd0a59567c97f04bda2e":[7,2,0,12],
"structlws__client__connect__info.html#a1af124d81c3c22a46d39387c5bc3d6b9":[7,2,0,10],
-"structlws__client__connect__info.html#a3893181d728f326f9f5b47c1459cb8be":[7,2,0,16],
+"structlws__client__connect__info.html#a3893181d728f326f9f5b47c1459cb8be":[7,2,0,17],
"structlws__client__connect__info.html#a6843a60e1050b10db9d98d7eeb45f587":[7,2,0,8],
"structlws__client__connect__info.html#a69abb5aeed755750b9755e5c91db6895":[7,2,0,5],
"structlws__client__connect__info.html#a76a8388733f114fb8fd3643874781185":[7,2,0,9],
"structlws__client__connect__info.html#a7732b996e977393c3e1076be2a8ded6c":[7,2,0,2],
"structlws__client__connect__info.html#a8595f83e64147cb687b6418cf500dd4c":[7,2,0,7],
-"structlws__client__connect__info.html#a9831b9f9ab54a1aec4bb15324f1c3836":[7,2,0,15],
-"structlws__client__connect__info.html#a9862297827639238a7a0b4054c3ddf3d":[7,2,0,12],
-"structlws__client__connect__info.html#a9959ba103d3d2484e559a9f7879eebe3":[7,2,0,14],
+"structlws__client__connect__info.html#a9831b9f9ab54a1aec4bb15324f1c3836":[7,2,0,16],
+"structlws__client__connect__info.html#a9862297827639238a7a0b4054c3ddf3d":[7,2,0,13],
+"structlws__client__connect__info.html#a9959ba103d3d2484e559a9f7879eebe3":[7,2,0,15],
"structlws__client__connect__info.html#a9b36d47c3422329df32c21040a35ebc7":[7,2,0,4],
"structlws__client__connect__info.html#aa364094f94ef1bcaaabbd9161971d502":[7,2,0,1],
"structlws__client__connect__info.html#aa9e8e3da4e783a0651b0dea62c2dd1db":[7,2,0,6],
@@ -173,16 +174,16 @@ var NAVTREEINDEX3 =
"structlws__process__html__state.html#adcafd17704775b4bbeea9561fb340968":[7,6,1,1,0],
"structlws__process__html__state.html#af0732884ef891e24fe5fa237ebaa21a3":[7,6,1,1,4],
"structlws__process__html__state.html#af21119890fdfebe28fb5c4dabfc1bdf5":[7,6,1,1,1],
-"structlws__protocol__vhost__options.html":[7,4,2],
"structlws__protocol__vhost__options.html":[7,4,0,0],
-"structlws__protocol__vhost__options.html#a0640a92513c70ee6b9b295a9ad1658e7":[7,4,2,3],
+"structlws__protocol__vhost__options.html":[7,4,2],
"structlws__protocol__vhost__options.html#a0640a92513c70ee6b9b295a9ad1658e7":[7,4,0,0,3],
+"structlws__protocol__vhost__options.html#a0640a92513c70ee6b9b295a9ad1658e7":[7,4,2,3],
"structlws__protocol__vhost__options.html#abc714ddb4171756fc8196e9823a1e21c":[7,4,0,0,1],
"structlws__protocol__vhost__options.html#abc714ddb4171756fc8196e9823a1e21c":[7,4,2,1],
"structlws__protocol__vhost__options.html#acf9db77f8eb64cd4e314be9b43d8a8b9":[7,4,0,0,0],
"structlws__protocol__vhost__options.html#acf9db77f8eb64cd4e314be9b43d8a8b9":[7,4,2,0],
-"structlws__protocol__vhost__options.html#afd99fbc90be51ea2465b550c2ec47822":[7,4,2,2],
"structlws__protocol__vhost__options.html#afd99fbc90be51ea2465b550c2ec47822":[7,4,0,0,2],
+"structlws__protocol__vhost__options.html#afd99fbc90be51ea2465b550c2ec47822":[7,4,2,2],
"structlws__protocols.html":[7,10,1],
"structlws__protocols.html#a0d1d4996d81b2f5e125bcec981e461c5":[7,10,1,4],
"structlws__protocols.html#a0e63edb457a613c3fa4271e0a8f19624":[7,10,1,2],
@@ -200,10 +201,10 @@ var NAVTREEINDEX3 =
"structlws__token__limits.html#a6ec712306cbf8585bce7a56758a3ceff":[7,6,4,1,0],
"structlws__tokens.html":[7,6,4,0],
"structlws__tokens.html":[7,6,6],
-"structlws__tokens.html#a855b7375d1d58516c0ecd4b60e9a7766":[7,6,4,0,1],
"structlws__tokens.html#a855b7375d1d58516c0ecd4b60e9a7766":[7,6,6,1],
-"structlws__tokens.html#a9f3635412bc71a5cb78e9862b55f10cd":[7,6,4,0,0],
+"structlws__tokens.html#a855b7375d1d58516c0ecd4b60e9a7766":[7,6,4,0,1],
"structlws__tokens.html#a9f3635412bc71a5cb78e9862b55f10cd":[7,6,6,0],
+"structlws__tokens.html#a9f3635412bc71a5cb78e9862b55f10cd":[7,6,4,0,0],
"structlwsgw__hash.html":[7,10,0,1],
"structlwsgw__hash.html#a29435f5cf78747d4257695b0f141d164":[7,10,0,1,0],
"structlwsgw__hash__bin.html":[7,10,0,0],
diff --git a/doc/html/structlws__client__connect__info.html b/doc/html/structlws__client__connect__info.html
index 7da79a40..c673802a 100644
--- a/doc/html/structlws__client__connect__info.html
+++ b/doc/html/structlws__client__connect__info.html
@@ -112,11 +112,13 @@ Data Fields |
|
struct lws_vhost * | vhost |
|
+struct lws ** | pwsi |
+ |
void * | _unused [4] |
|
-struct lws_client_connect_info - parameters to connect with when using lws_client_connect_via_info()
+
@@ -272,6 +274,19 @@ Data Fields
list of ws protocols we could accept
+
+
+
+
+
+
+
+ struct lws** lws_client_connect_info::pwsi |
+
+
+
+
if not NULL, store the new wsi here early in the connection process. Although we return the new wsi, the call to create the client connection does progress the connection somewhat and may meet an error that will result in the connection being scrubbed and NULL returned. While the wsi exists though, he may process a callback like CLIENT_CONNECTION_ERROR with his wsi: this gives the user callback a way to identify which wsi it is that faced the error even before the new wsi is returned and even if ultimately no wsi is returned.
+
diff --git a/doc/html/structlws__client__connect__info.js b/doc/html/structlws__client__connect__info.js
index 49e32a0f..042b3d92 100644
--- a/doc/html/structlws__client__connect__info.js
+++ b/doc/html/structlws__client__connect__info.js
@@ -12,6 +12,7 @@ var structlws__client__connect__info =
[ "path", "structlws__client__connect__info.html#a76a8388733f114fb8fd3643874781185", null ],
[ "port", "structlws__client__connect__info.html#a1af124d81c3c22a46d39387c5bc3d6b9", null ],
[ "protocol", "structlws__client__connect__info.html#aba35adfb74845a5fd0c3dc141cbdddd2", null ],
+ [ "pwsi", "structlws__client__connect__info.html#a065063b5117ecd0a59567c97f04bda2e", null ],
[ "ssl_connection", "structlws__client__connect__info.html#a9862297827639238a7a0b4054c3ddf3d", null ],
[ "uri_replace_from", "structlws__client__connect__info.html#a03c305fdca809667b6a9a83b3edfd83a", null ],
[ "uri_replace_to", "structlws__client__connect__info.html#a9959ba103d3d2484e559a9f7879eebe3", null ],
diff --git a/doc/latex/group__client.tex b/doc/latex/group__client.tex
index 4ab28102..6ddc7a08 100644
--- a/doc/latex/group__client.tex
+++ b/doc/latex/group__client.tex
@@ -8,7 +8,7 @@ struct \hyperlink{structlws__client__connect__info}{lws\+\_\+client\+\_\+connect
\subsection*{Functions}
\begin{DoxyCompactItemize}
\item
-L\+W\+S\+\_\+\+V\+I\+S\+I\+B\+LE L\+W\+S\+\_\+\+E\+X\+T\+E\+RN struct lws $\ast$L\+W\+S\+\_\+\+W\+A\+R\+N\+\_\+\+U\+N\+U\+S\+E\+D\+\_\+\+R\+E\+S\+U\+LT \hyperlink{group__client_gac30a7be106abd0cedfbb2e8b8fe3a2f5}{lws\+\_\+client\+\_\+connect\+\_\+via\+\_\+info} (struct \hyperlink{structlws__client__connect__info}{lws\+\_\+client\+\_\+connect\+\_\+info} $\ast$ccinfo)
+L\+W\+S\+\_\+\+V\+I\+S\+I\+B\+LE L\+W\+S\+\_\+\+E\+X\+T\+E\+RN struct lws $\ast$ \hyperlink{group__client_ga0c966136905f467816307cfba6deb5fd}{lws\+\_\+client\+\_\+connect\+\_\+via\+\_\+info} (struct \hyperlink{structlws__client__connect__info}{lws\+\_\+client\+\_\+connect\+\_\+info} $\ast$ccinfo)
\item
L\+W\+S\+\_\+\+V\+I\+S\+I\+B\+LE L\+W\+S\+\_\+\+E\+X\+T\+E\+RN struct lws $\ast$L\+W\+S\+\_\+\+W\+A\+R\+N\+\_\+\+U\+N\+U\+S\+E\+D\+\_\+\+R\+E\+S\+U\+LT \hyperlink{group__client_ga4af0a20108a95e8b6d94dd4d80055ff3}{lws\+\_\+client\+\_\+connect} (struct lws\+\_\+context $\ast$clients, const char $\ast$address, int port, int ssl\+\_\+connection, const char $\ast$path, const char $\ast$host, const char $\ast$origin, const char $\ast$protocol, int ietf\+\_\+version\+\_\+or\+\_\+minus\+\_\+one) L\+W\+S\+\_\+\+W\+A\+R\+N\+\_\+\+D\+E\+P\+R\+E\+C\+A\+T\+ED
\item
@@ -115,18 +115,19 @@ This function creates a connection to a remote server \index{Client@{Client}!lws
\end{DoxyParams}
\index{Client@{Client}!lws\+\_\+client\+\_\+connect\+\_\+via\+\_\+info@{lws\+\_\+client\+\_\+connect\+\_\+via\+\_\+info}}
\index{lws\+\_\+client\+\_\+connect\+\_\+via\+\_\+info@{lws\+\_\+client\+\_\+connect\+\_\+via\+\_\+info}!Client@{Client}}
-\subsubsection[{\texorpdfstring{lws\+\_\+client\+\_\+connect\+\_\+via\+\_\+info(struct lws\+\_\+client\+\_\+connect\+\_\+info $\ast$ccinfo)}{lws\_client\_connect\_via\_info(struct lws\_client\_connect\_info *ccinfo)}}]{\setlength{\rightskip}{0pt plus 5cm}L\+W\+S\+\_\+\+V\+I\+S\+I\+B\+LE L\+W\+S\+\_\+\+E\+X\+T\+E\+RN struct lws$\ast$ L\+W\+S\+\_\+\+W\+A\+R\+N\+\_\+\+U\+N\+U\+S\+E\+D\+\_\+\+R\+E\+S\+U\+LT lws\+\_\+client\+\_\+connect\+\_\+via\+\_\+info (
+\subsubsection[{\texorpdfstring{lws\+\_\+client\+\_\+connect\+\_\+via\+\_\+info(struct lws\+\_\+client\+\_\+connect\+\_\+info $\ast$ccinfo)}{lws\_client\_connect\_via\_info(struct lws\_client\_connect\_info *ccinfo)}}]{\setlength{\rightskip}{0pt plus 5cm}L\+W\+S\+\_\+\+V\+I\+S\+I\+B\+LE L\+W\+S\+\_\+\+E\+X\+T\+E\+RN struct lws$\ast$ lws\+\_\+client\+\_\+connect\+\_\+via\+\_\+info (
\begin{DoxyParamCaption}
\item[{struct {\bf lws\+\_\+client\+\_\+connect\+\_\+info} $\ast$}]{ccinfo}
\end{DoxyParamCaption}
-)}\hypertarget{group__client_gac30a7be106abd0cedfbb2e8b8fe3a2f5}{}\label{group__client_gac30a7be106abd0cedfbb2e8b8fe3a2f5}
+)}\hypertarget{group__client_ga0c966136905f467816307cfba6deb5fd}{}\label{group__client_ga0c966136905f467816307cfba6deb5fd}
{\ttfamily \#include $<$\hyperlink{libwebsockets_8h}{lib/libwebsockets.\+h}$>$}
-\hyperlink{group__client_gac30a7be106abd0cedfbb2e8b8fe3a2f5}{lws\+\_\+client\+\_\+connect\+\_\+via\+\_\+info()} -\/ Connect to another websocket server
+\hyperlink{group__client_ga0c966136905f467816307cfba6deb5fd}{lws\+\_\+client\+\_\+connect\+\_\+via\+\_\+info()} -\/ Connect to another websocket server
\begin{DoxyParams}{Parameters}
-{\em ccinfo} & pointer to \hyperlink{structlws__client__connect__info}{lws\+\_\+client\+\_\+connect\+\_\+info} struct \begin{DoxyVerb} This function creates a connection to a remote server\end{DoxyVerb}
+{\em ccinfo} & pointer to \hyperlink{structlws__client__connect__info}{lws\+\_\+client\+\_\+connect\+\_\+info} struct \begin{DoxyVerb} This function creates a connection to a remote server using the
+ information provided in ccinfo.\end{DoxyVerb}
\\
\hline
\end{DoxyParams}
diff --git a/doc/latex/group__context-and-vhost.tex b/doc/latex/group__context-and-vhost.tex
index 94f1ef24..15a74574 100644
--- a/doc/latex/group__context-and-vhost.tex
+++ b/doc/latex/group__context-and-vhost.tex
@@ -122,41 +122,41 @@ L\+W\+S\+\_\+\+S\+E\+R\+V\+E\+R\+\_\+\+O\+P\+T\+I\+O\+N\+\_\+\+I\+P\+V6\+\_\+\+V
\end{Desc}
\begin{DoxyCode}
-1347 \{
-1348 \hyperlink{group__context-and-vhost_gga41c2d763f78cc248df3b9f8645dbd2a5a274ed462a1a9239eb6ddf9007f5b7092}{LWS\_SERVER\_OPTION\_REQUIRE\_VALID\_OPENSSL\_CLIENT\_CERT}
+1387 \{
+1388 \hyperlink{group__context-and-vhost_gga41c2d763f78cc248df3b9f8645dbd2a5a274ed462a1a9239eb6ddf9007f5b7092}{LWS\_SERVER\_OPTION\_REQUIRE\_VALID\_OPENSSL\_CLIENT\_CERT}
= (1 << 1) |
-1349 (1 << 12),
-1353 \hyperlink{group__context-and-vhost_gga41c2d763f78cc248df3b9f8645dbd2a5a6582c985ee0ceaadc1d277030eae2d7c}{LWS\_SERVER\_OPTION\_SKIP\_SERVER\_CANONICAL\_NAME}
+1389 (1 << 12),
+1393 \hyperlink{group__context-and-vhost_gga41c2d763f78cc248df3b9f8645dbd2a5a6582c985ee0ceaadc1d277030eae2d7c}{LWS\_SERVER\_OPTION\_SKIP\_SERVER\_CANONICAL\_NAME}
= (1 << 2),
-1355 \hyperlink{group__context-and-vhost_gga41c2d763f78cc248df3b9f8645dbd2a5a1cc4562d05cba52a6dfa0697a65ade0d}{LWS\_SERVER\_OPTION\_ALLOW\_NON\_SSL\_ON\_SSL\_PORT} = (
+1395 \hyperlink{group__context-and-vhost_gga41c2d763f78cc248df3b9f8645dbd2a5a1cc4562d05cba52a6dfa0697a65ade0d}{LWS\_SERVER\_OPTION\_ALLOW\_NON\_SSL\_ON\_SSL\_PORT} = (
1 << 3) |
-1356 (1 << 12),
-1360 \hyperlink{group__context-and-vhost_gga41c2d763f78cc248df3b9f8645dbd2a5a273d9975675130de0c6dc937dde7c8a6}{LWS\_SERVER\_OPTION\_LIBEV} = (1 << 4),
-1362 \hyperlink{group__context-and-vhost_gga41c2d763f78cc248df3b9f8645dbd2a5a34ab36e68c0d593b6f19b8d5ef1240a9}{LWS\_SERVER\_OPTION\_DISABLE\_IPV6} = (1 << 5),
-1364 \hyperlink{group__context-and-vhost_gga41c2d763f78cc248df3b9f8645dbd2a5a4933347a821e73c3f1e13fb6bfc7ad93}{LWS\_SERVER\_OPTION\_DISABLE\_OS\_CA\_CERTS} = (
+1396 (1 << 12),
+1400 \hyperlink{group__context-and-vhost_gga41c2d763f78cc248df3b9f8645dbd2a5a273d9975675130de0c6dc937dde7c8a6}{LWS\_SERVER\_OPTION\_LIBEV} = (1 << 4),
+1402 \hyperlink{group__context-and-vhost_gga41c2d763f78cc248df3b9f8645dbd2a5a34ab36e68c0d593b6f19b8d5ef1240a9}{LWS\_SERVER\_OPTION\_DISABLE\_IPV6} = (1 << 5),
+1404 \hyperlink{group__context-and-vhost_gga41c2d763f78cc248df3b9f8645dbd2a5a4933347a821e73c3f1e13fb6bfc7ad93}{LWS\_SERVER\_OPTION\_DISABLE\_OS\_CA\_CERTS} = (
1 << 6),
-1367 \hyperlink{group__context-and-vhost_gga41c2d763f78cc248df3b9f8645dbd2a5ac56a8a6590e74a8016d0fae09fb404fc}{LWS\_SERVER\_OPTION\_PEER\_CERT\_NOT\_REQUIRED} = (
+1407 \hyperlink{group__context-and-vhost_gga41c2d763f78cc248df3b9f8645dbd2a5ac56a8a6590e74a8016d0fae09fb404fc}{LWS\_SERVER\_OPTION\_PEER\_CERT\_NOT\_REQUIRED} = (
1 << 7),
-1369 \hyperlink{group__context-and-vhost_gga41c2d763f78cc248df3b9f8645dbd2a5aa0158b4e85420811e6b0f1378c6ded0f}{LWS\_SERVER\_OPTION\_VALIDATE\_UTF8} = (1 << 8),
-1371 \hyperlink{group__context-and-vhost_gga41c2d763f78cc248df3b9f8645dbd2a5a1b2f8bde0f62adc7ebe81b2043f34c0c}{LWS\_SERVER\_OPTION\_SSL\_ECDH} = (1 << 9) |
-1372 (1 << 12),
-1374 \hyperlink{group__context-and-vhost_gga41c2d763f78cc248df3b9f8645dbd2a5aff121db04a10cf8b2c5df9d4f2b89f1e}{LWS\_SERVER\_OPTION\_LIBUV} = (1 << 10),
-1376 \hyperlink{group__context-and-vhost_gga41c2d763f78cc248df3b9f8645dbd2a5a4832187186c4d130c68051214cd42ada}{LWS\_SERVER\_OPTION\_REDIRECT\_HTTP\_TO\_HTTPS} = (
+1409 \hyperlink{group__context-and-vhost_gga41c2d763f78cc248df3b9f8645dbd2a5aa0158b4e85420811e6b0f1378c6ded0f}{LWS\_SERVER\_OPTION\_VALIDATE\_UTF8} = (1 << 8),
+1411 \hyperlink{group__context-and-vhost_gga41c2d763f78cc248df3b9f8645dbd2a5a1b2f8bde0f62adc7ebe81b2043f34c0c}{LWS\_SERVER\_OPTION\_SSL\_ECDH} = (1 << 9) |
+1412 (1 << 12),
+1414 \hyperlink{group__context-and-vhost_gga41c2d763f78cc248df3b9f8645dbd2a5aff121db04a10cf8b2c5df9d4f2b89f1e}{LWS\_SERVER\_OPTION\_LIBUV} = (1 << 10),
+1416 \hyperlink{group__context-and-vhost_gga41c2d763f78cc248df3b9f8645dbd2a5a4832187186c4d130c68051214cd42ada}{LWS\_SERVER\_OPTION\_REDIRECT\_HTTP\_TO\_HTTPS} = (
1 << 11) |
-1377 (1 << 3) |
-1378 (1 << 12),
-1381 \hyperlink{group__context-and-vhost_gga41c2d763f78cc248df3b9f8645dbd2a5a7fed6a527c8d5e0acac1b4179644583a}{LWS\_SERVER\_OPTION\_DO\_SSL\_GLOBAL\_INIT} = (
+1417 (1 << 3) |
+1418 (1 << 12),
+1421 \hyperlink{group__context-and-vhost_gga41c2d763f78cc248df3b9f8645dbd2a5a7fed6a527c8d5e0acac1b4179644583a}{LWS\_SERVER\_OPTION\_DO\_SSL\_GLOBAL\_INIT} = (
1 << 12),
-1383 \hyperlink{group__context-and-vhost_gga41c2d763f78cc248df3b9f8645dbd2a5accc9d0d11d1124a21659586164b0962e}{LWS\_SERVER\_OPTION\_EXPLICIT\_VHOSTS} = (1 << 13)
+1423 \hyperlink{group__context-and-vhost_gga41c2d763f78cc248df3b9f8645dbd2a5accc9d0d11d1124a21659586164b0962e}{LWS\_SERVER\_OPTION\_EXPLICIT\_VHOSTS} = (1 << 13)
,
-1386 \hyperlink{group__context-and-vhost_gga41c2d763f78cc248df3b9f8645dbd2a5a9637e9001d8c8b2521086bcafbd8a941}{LWS\_SERVER\_OPTION\_UNIX\_SOCK} = (1 << 14),
-1388 \hyperlink{group__context-and-vhost_gga41c2d763f78cc248df3b9f8645dbd2a5ac962efd35abf6c402f9fb14aa14f5016}{LWS\_SERVER\_OPTION\_STS} = (1 << 15),
-1391 \hyperlink{group__context-and-vhost_gga41c2d763f78cc248df3b9f8645dbd2a5af62887536e25e053e68741006dba46d8}{LWS\_SERVER\_OPTION\_IPV6\_V6ONLY\_MODIFY} = (
+1426 \hyperlink{group__context-and-vhost_gga41c2d763f78cc248df3b9f8645dbd2a5a9637e9001d8c8b2521086bcafbd8a941}{LWS\_SERVER\_OPTION\_UNIX\_SOCK} = (1 << 14),
+1428 \hyperlink{group__context-and-vhost_gga41c2d763f78cc248df3b9f8645dbd2a5ac962efd35abf6c402f9fb14aa14f5016}{LWS\_SERVER\_OPTION\_STS} = (1 << 15),
+1431 \hyperlink{group__context-and-vhost_gga41c2d763f78cc248df3b9f8645dbd2a5af62887536e25e053e68741006dba46d8}{LWS\_SERVER\_OPTION\_IPV6\_V6ONLY\_MODIFY} = (
1 << 16),
-1393 \hyperlink{group__context-and-vhost_gga41c2d763f78cc248df3b9f8645dbd2a5aca5d42820b65eac5618ec3f0bd8a1160}{LWS\_SERVER\_OPTION\_IPV6\_V6ONLY\_VALUE} = (1 << 17)
+1433 \hyperlink{group__context-and-vhost_gga41c2d763f78cc248df3b9f8645dbd2a5aca5d42820b65eac5618ec3f0bd8a1160}{LWS\_SERVER\_OPTION\_IPV6\_V6ONLY\_VALUE} = (1 << 17)
,
-1396 \textcolor{comment}{/****** add new things just above ---^ ******/}
-1397 \};
+1436 \textcolor{comment}{/****** add new things just above ---^ ******/}
+1437 \};
\end{DoxyCode}
diff --git a/doc/latex/group__extensions.tex b/doc/latex/group__extensions.tex
index e8391c80..a9dfde6c 100644
--- a/doc/latex/group__extensions.tex
+++ b/doc/latex/group__extensions.tex
@@ -174,13 +174,13 @@ E\+X\+T\+A\+R\+G\+\_\+\+O\+P\+T\+\_\+\+D\+EC\hypertarget{group__extensions_ggacc
\end{Desc}
\begin{DoxyCode}
-949 \{
-950 \hyperlink{group__extensions_ggacc9f55936dc165257a2e1f7d47bce89eaabcf56c456c1ff6e81dc82586a16f14c}{EXTARG\_NONE},
-951 \hyperlink{group__extensions_ggacc9f55936dc165257a2e1f7d47bce89ea1c86adf924c8786a12bee9687094673e}{EXTARG\_DEC},
-952 \hyperlink{group__extensions_ggacc9f55936dc165257a2e1f7d47bce89ea5265abe3e1c3f64412f2affe7bffd880}{EXTARG\_OPT\_DEC}
-954 \textcolor{comment}{/* Add new things just above here ---^}
-955 \textcolor{comment}{ * This is part of the ABI, don't needlessly break compatibility */}
-956 \};
+989 \{
+990 \hyperlink{group__extensions_ggacc9f55936dc165257a2e1f7d47bce89eaabcf56c456c1ff6e81dc82586a16f14c}{EXTARG\_NONE},
+991 \hyperlink{group__extensions_ggacc9f55936dc165257a2e1f7d47bce89ea1c86adf924c8786a12bee9687094673e}{EXTARG\_DEC},
+992 \hyperlink{group__extensions_ggacc9f55936dc165257a2e1f7d47bce89ea5265abe3e1c3f64412f2affe7bffd880}{EXTARG\_OPT\_DEC}
+994 \textcolor{comment}{/* Add new things just above here ---^}
+995 \textcolor{comment}{ * This is part of the ABI, don't needlessly break compatibility */}
+996 \};
\end{DoxyCode}
diff --git a/doc/latex/group__form-parsing.tex b/doc/latex/group__form-parsing.tex
index f6f7ab86..dbbb54bf 100644
--- a/doc/latex/group__form-parsing.tex
+++ b/doc/latex/group__form-parsing.tex
@@ -89,11 +89,11 @@ L\+W\+S\+\_\+\+U\+F\+S\+\_\+\+O\+P\+EN\hypertarget{group__form-parsing_gga41a74a
\end{Desc}
\begin{DoxyCode}
-2552 \{
-2553 \hyperlink{group__form-parsing_gga41a74a822771d3dce89751aa3bce28aead3a958e7719ac273c3ba4f684f00c87f}{LWS\_UFS\_CONTENT},
-2555 \hyperlink{group__form-parsing_gga41a74a822771d3dce89751aa3bce28aea6ce2a55a4c3695cdb640c893d95bd3a7}{LWS\_UFS\_FINAL\_CONTENT},
-2557 \hyperlink{group__form-parsing_gga41a74a822771d3dce89751aa3bce28aea2d25de44865bd44e5a3903a2bab9ca83}{LWS\_UFS\_OPEN}
-2559 \};
+2604 \{
+2605 \hyperlink{group__form-parsing_gga41a74a822771d3dce89751aa3bce28aead3a958e7719ac273c3ba4f684f00c87f}{LWS\_UFS\_CONTENT},
+2607 \hyperlink{group__form-parsing_gga41a74a822771d3dce89751aa3bce28aea6ce2a55a4c3695cdb640c893d95bd3a7}{LWS\_UFS\_FINAL\_CONTENT},
+2609 \hyperlink{group__form-parsing_gga41a74a822771d3dce89751aa3bce28aea2d25de44865bd44e5a3903a2bab9ca83}{LWS\_UFS\_OPEN}
+2611 \};
\end{DoxyCode}
diff --git a/doc/latex/group__generic-sessions.tex b/doc/latex/group__generic-sessions.tex
index 7c582ce6..25faf39c 100644
--- a/doc/latex/group__generic-sessions.tex
+++ b/doc/latex/group__generic-sessions.tex
@@ -50,10 +50,10 @@ L\+W\+S\+G\+S\+E\+\_\+\+D\+E\+L\+E\+T\+ED\hypertarget{group__generic-sessions_gg
\end{Desc}
\begin{DoxyCode}
-1311 \{
-1312 \hyperlink{group__generic-sessions_ggaa93946b3d921072209d5cd8cdfa5332ea596010a165bf13473c5eea3a34cd4308}{LWSGSE\_CREATED},
-1313 \hyperlink{group__generic-sessions_ggaa93946b3d921072209d5cd8cdfa5332ead908cdc5689c5d22c9d3c8934e94dcde}{LWSGSE\_DELETED}
-1314 \};
+1351 \{
+1352 \hyperlink{group__generic-sessions_ggaa93946b3d921072209d5cd8cdfa5332ea596010a165bf13473c5eea3a34cd4308}{LWSGSE\_CREATED},
+1353 \hyperlink{group__generic-sessions_ggaa93946b3d921072209d5cd8cdfa5332ead908cdc5689c5d22c9d3c8934e94dcde}{LWSGSE\_DELETED}
+1354 \};
\end{DoxyCode}
\index{plugin\+: generic-\/sessions@{plugin\+: generic-\/sessions}!lwsgs\+\_\+auth\+\_\+bits@{lwsgs\+\_\+auth\+\_\+bits}}
\index{lwsgs\+\_\+auth\+\_\+bits@{lwsgs\+\_\+auth\+\_\+bits}!plugin\+: generic-\/sessions@{plugin\+: generic-\/sessions}}
@@ -77,10 +77,10 @@ L\+W\+S\+G\+S\+\_\+\+A\+U\+T\+H\+\_\+\+F\+O\+R\+G\+O\+T\+\_\+\+F\+L\+OW\hypertar
\end{Desc}
\begin{DoxyCode}
-1293 \{
-1294 \hyperlink{group__generic-sessions_gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a81e63075115dedd150265d81b8f7fa57}{LWSGS\_AUTH\_LOGGED\_IN} = 1,
-1295 \hyperlink{group__generic-sessions_gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a0657a9e846814781b128c397fe4b10bf}{LWSGS\_AUTH\_ADMIN} = 2,
-1296 \hyperlink{group__generic-sessions_gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a5a607e4668d20cadada62c4b8007f887}{LWSGS\_AUTH\_VERIFIED} = 4,
-1297 \hyperlink{group__generic-sessions_gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a2cd8fb86e3b85c106e7711c03f0ddd0a}{LWSGS\_AUTH\_FORGOT\_FLOW} = 8,
-1298 \};
+1333 \{
+1334 \hyperlink{group__generic-sessions_gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a81e63075115dedd150265d81b8f7fa57}{LWSGS\_AUTH\_LOGGED\_IN} = 1,
+1335 \hyperlink{group__generic-sessions_gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a0657a9e846814781b128c397fe4b10bf}{LWSGS\_AUTH\_ADMIN} = 2,
+1336 \hyperlink{group__generic-sessions_gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a5a607e4668d20cadada62c4b8007f887}{LWSGS\_AUTH\_VERIFIED} = 4,
+1337 \hyperlink{group__generic-sessions_gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a2cd8fb86e3b85c106e7711c03f0ddd0a}{LWSGS\_AUTH\_FORGOT\_FLOW} = 8,
+1338 \};
\end{DoxyCode}
diff --git a/doc/latex/group__sending-data.tex b/doc/latex/group__sending-data.tex
index eb24bb9d..2d90a8d3 100644
--- a/doc/latex/group__sending-data.tex
+++ b/doc/latex/group__sending-data.tex
@@ -57,28 +57,28 @@ L\+W\+S\+\_\+\+W\+R\+I\+T\+E\+\_\+\+C\+L\+I\+E\+N\+T\+\_\+\+I\+G\+N\+O\+R\+E\+\_
\end{Desc}
\begin{DoxyCode}
-2893 \{
-2894 \hyperlink{group__sending-data_gga98b099cf8c1c7e38ad78501f270e193da80e8f169fda236c56bfb795ed62903db}{LWS\_WRITE\_TEXT} = 0,
-2898 \hyperlink{group__sending-data_gga98b099cf8c1c7e38ad78501f270e193daf6486c0dba50c44198100717721d9ab2}{LWS\_WRITE\_BINARY} = 1,
-2901 \hyperlink{group__sending-data_gga98b099cf8c1c7e38ad78501f270e193da10047eb05b5e1c298151dc47a5b44826}{LWS\_WRITE\_CONTINUATION} = 2,
-2904 \hyperlink{group__sending-data_gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e}{LWS\_WRITE\_HTTP} = 3,
-2907 \textcolor{comment}{/* LWS\_WRITE\_CLOSE is handled by lws\_close\_reason() */}
-2908 LWS\_WRITE\_PING = 5,
-2909 LWS\_WRITE\_PONG = 6,
-2910
-2911 \textcolor{comment}{/* Same as write\_http but we know this write ends the transaction */}
-2912 LWS\_WRITE\_HTTP\_FINAL = 7,
-2913
-2914 \textcolor{comment}{/* HTTP2 */}
-2915
-2916 \hyperlink{group__sending-data_gga98b099cf8c1c7e38ad78501f270e193dafe5a38e940ce56708ac814627e9c0917}{LWS\_WRITE\_HTTP\_HEADERS} = 8,
-2923 \textcolor{comment}{/****** add new things just above ---^ ******/}
-2924
-2925 \textcolor{comment}{/* flags */}
-2926
-2927 \hyperlink{group__sending-data_gga98b099cf8c1c7e38ad78501f270e193da115440f272a5d55518adfc8099acfee3}{LWS\_WRITE\_NO\_FIN} = 0x40,
-2930 \hyperlink{group__sending-data_gga98b099cf8c1c7e38ad78501f270e193da220d8e8652d9b97fb66e476e2a60ffce}{LWS\_WRITE\_CLIENT\_IGNORE\_XOR\_MASK} = 0x80
-2934 \};
+2945 \{
+2946 \hyperlink{group__sending-data_gga98b099cf8c1c7e38ad78501f270e193da80e8f169fda236c56bfb795ed62903db}{LWS\_WRITE\_TEXT} = 0,
+2950 \hyperlink{group__sending-data_gga98b099cf8c1c7e38ad78501f270e193daf6486c0dba50c44198100717721d9ab2}{LWS\_WRITE\_BINARY} = 1,
+2953 \hyperlink{group__sending-data_gga98b099cf8c1c7e38ad78501f270e193da10047eb05b5e1c298151dc47a5b44826}{LWS\_WRITE\_CONTINUATION} = 2,
+2956 \hyperlink{group__sending-data_gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e}{LWS\_WRITE\_HTTP} = 3,
+2959 \textcolor{comment}{/* LWS\_WRITE\_CLOSE is handled by lws\_close\_reason() */}
+2960 LWS\_WRITE\_PING = 5,
+2961 LWS\_WRITE\_PONG = 6,
+2962
+2963 \textcolor{comment}{/* Same as write\_http but we know this write ends the transaction */}
+2964 LWS\_WRITE\_HTTP\_FINAL = 7,
+2965
+2966 \textcolor{comment}{/* HTTP2 */}
+2967
+2968 \hyperlink{group__sending-data_gga98b099cf8c1c7e38ad78501f270e193dafe5a38e940ce56708ac814627e9c0917}{LWS\_WRITE\_HTTP\_HEADERS} = 8,
+2975 \textcolor{comment}{/****** add new things just above ---^ ******/}
+2976
+2977 \textcolor{comment}{/* flags */}
+2978
+2979 \hyperlink{group__sending-data_gga98b099cf8c1c7e38ad78501f270e193da115440f272a5d55518adfc8099acfee3}{LWS\_WRITE\_NO\_FIN} = 0x40,
+2982 \hyperlink{group__sending-data_gga98b099cf8c1c7e38ad78501f270e193da220d8e8652d9b97fb66e476e2a60ffce}{LWS\_WRITE\_CLIENT\_IGNORE\_XOR\_MASK} = 0x80
+2986 \};
\end{DoxyCode}
diff --git a/doc/latex/group__smtp.tex b/doc/latex/group__smtp.tex
index 2ce915ad..5b2cc78d 100644
--- a/doc/latex/group__smtp.tex
+++ b/doc/latex/group__smtp.tex
@@ -88,17 +88,17 @@ L\+G\+S\+S\+M\+T\+P\+\_\+\+S\+E\+N\+T\+\_\+\+Q\+U\+IT\hypertarget{group__smtp_gg
\end{Desc}
\begin{DoxyCode}
-3815 \{
-3816 \hyperlink{group__smtp_gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c}{LGSSMTP\_IDLE},
-3817 \hyperlink{group__smtp_gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933}{LGSSMTP\_CONNECTING},
-3818 \hyperlink{group__smtp_gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d}{LGSSMTP\_CONNECTED},
-3819 \hyperlink{group__smtp_gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad}{LGSSMTP\_SENT\_HELO},
-3820 \hyperlink{group__smtp_gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab}{LGSSMTP\_SENT\_FROM},
-3821 \hyperlink{group__smtp_gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83}{LGSSMTP\_SENT\_TO},
-3822 \hyperlink{group__smtp_gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14}{LGSSMTP\_SENT\_DATA},
-3823 \hyperlink{group__smtp_gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69}{LGSSMTP\_SENT\_BODY},
-3824 \hyperlink{group__smtp_gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5}{LGSSMTP\_SENT\_QUIT},
-3825 \};
+3867 \{
+3868 \hyperlink{group__smtp_gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c}{LGSSMTP\_IDLE},
+3869 \hyperlink{group__smtp_gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933}{LGSSMTP\_CONNECTING},
+3870 \hyperlink{group__smtp_gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d}{LGSSMTP\_CONNECTED},
+3871 \hyperlink{group__smtp_gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad}{LGSSMTP\_SENT\_HELO},
+3872 \hyperlink{group__smtp_gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab}{LGSSMTP\_SENT\_FROM},
+3873 \hyperlink{group__smtp_gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83}{LGSSMTP\_SENT\_TO},
+3874 \hyperlink{group__smtp_gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14}{LGSSMTP\_SENT\_DATA},
+3875 \hyperlink{group__smtp_gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69}{LGSSMTP\_SENT\_BODY},
+3876 \hyperlink{group__smtp_gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5}{LGSSMTP\_SENT\_QUIT},
+3877 \};
\end{DoxyCode}
diff --git a/doc/latex/group__usercb.tex b/doc/latex/group__usercb.tex
index b765d4c4..568d77d9 100644
--- a/doc/latex/group__usercb.tex
+++ b/doc/latex/group__usercb.tex
@@ -135,7 +135,45 @@ enum lws\+\_\+callback\+\_\+reasons -\/ reason you\textquotesingle{}re getting a
L\+W\+S\+\_\+\+C\+A\+L\+L\+B\+A\+C\+K\+\_\+\+E\+S\+T\+A\+B\+L\+I\+S\+H\+ED\hypertarget{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a24d39bf1cfc0bad9d92da9ac1717e439}{}\label{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a24d39bf1cfc0bad9d92da9ac1717e439}
}](VH) after the server completes a handshake with an incoming client. If you built the library with ssl support, in is a pointer to the ssl struct associated with the connection or N\+U\+LL. \index{L\+W\+S\+\_\+\+C\+A\+L\+L\+B\+A\+C\+K\+\_\+\+C\+L\+I\+E\+N\+T\+\_\+\+C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+E\+R\+R\+OR@{L\+W\+S\+\_\+\+C\+A\+L\+L\+B\+A\+C\+K\+\_\+\+C\+L\+I\+E\+N\+T\+\_\+\+C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+E\+R\+R\+OR}!User Callback@{User Callback}}\index{User Callback@{User Callback}!L\+W\+S\+\_\+\+C\+A\+L\+L\+B\+A\+C\+K\+\_\+\+C\+L\+I\+E\+N\+T\+\_\+\+C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+E\+R\+R\+OR@{L\+W\+S\+\_\+\+C\+A\+L\+L\+B\+A\+C\+K\+\_\+\+C\+L\+I\+E\+N\+T\+\_\+\+C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+E\+R\+R\+OR}}\item[{\em
L\+W\+S\+\_\+\+C\+A\+L\+L\+B\+A\+C\+K\+\_\+\+C\+L\+I\+E\+N\+T\+\_\+\+C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+E\+R\+R\+OR\hypertarget{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7ad8c6207b0c4e732f3d507f0fb79370e8}{}\label{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7ad8c6207b0c4e732f3d507f0fb79370e8}
-}]the request client connection has been unable to complete a handshake with the remote server. If in is non-\/\+N\+U\+LL, you can find an error string of length len where it points to. \index{L\+W\+S\+\_\+\+C\+A\+L\+L\+B\+A\+C\+K\+\_\+\+C\+L\+I\+E\+N\+T\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+P\+R\+E\+\_\+\+E\+S\+T\+A\+B\+L\+I\+SH@{L\+W\+S\+\_\+\+C\+A\+L\+L\+B\+A\+C\+K\+\_\+\+C\+L\+I\+E\+N\+T\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+P\+R\+E\+\_\+\+E\+S\+T\+A\+B\+L\+I\+SH}!User Callback@{User Callback}}\index{User Callback@{User Callback}!L\+W\+S\+\_\+\+C\+A\+L\+L\+B\+A\+C\+K\+\_\+\+C\+L\+I\+E\+N\+T\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+P\+R\+E\+\_\+\+E\+S\+T\+A\+B\+L\+I\+SH@{L\+W\+S\+\_\+\+C\+A\+L\+L\+B\+A\+C\+K\+\_\+\+C\+L\+I\+E\+N\+T\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+P\+R\+E\+\_\+\+E\+S\+T\+A\+B\+L\+I\+SH}}\item[{\em
+}]the request client connection has been unable to complete a handshake with the remote server. If in is non-\/\+N\+U\+LL, you can find an error string of length len where it points to
+
+Diagnostic strings that may be returned include \begin{DoxyVerb} "getaddrinfo (ipv6) failed"
+ "unknown address family"
+ "getaddrinfo (ipv4) failed"
+ "set socket opts failed"
+ "insert wsi failed"
+ "lws_ssl_client_connect1 failed"
+ "lws_ssl_client_connect2 failed"
+ "Peer hung up"
+ "read failed"
+ "HS: URI missing"
+ "HS: Redirect code but no Location"
+ "HS: URI did not parse"
+ "HS: Redirect failed"
+ "HS: Server did not return 200"
+ "HS: OOM"
+ "HS: disallowed by client filter"
+ "HS: disallowed at ESTABLISHED"
+ "HS: ACCEPT missing"
+ "HS: ws upgrade response not 101"
+ "HS: UPGRADE missing"
+ "HS: Upgrade to something other than websocket"
+ "HS: CONNECTION missing"
+ "HS: UPGRADE malformed"
+ "HS: PROTOCOL malformed"
+ "HS: Cannot match protocol"
+ "HS: EXT: list too big"
+ "HS: EXT: failed setting defaults"
+ "HS: EXT: failed parsing defaults"
+ "HS: EXT: failed parsing options"
+ "HS: EXT: Rejects server options"
+ "HS: EXT: unknown ext"
+ "HS: Accept hash wrong"
+ "HS: Rejected by filter cb"
+ "HS: OOM"
+ "HS: SO_SNDBUF failed"
+ "HS: Rejected at CLIENT_ESTABLISHED"\end{DoxyVerb}
+ \index{L\+W\+S\+\_\+\+C\+A\+L\+L\+B\+A\+C\+K\+\_\+\+C\+L\+I\+E\+N\+T\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+P\+R\+E\+\_\+\+E\+S\+T\+A\+B\+L\+I\+SH@{L\+W\+S\+\_\+\+C\+A\+L\+L\+B\+A\+C\+K\+\_\+\+C\+L\+I\+E\+N\+T\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+P\+R\+E\+\_\+\+E\+S\+T\+A\+B\+L\+I\+SH}!User Callback@{User Callback}}\index{User Callback@{User Callback}!L\+W\+S\+\_\+\+C\+A\+L\+L\+B\+A\+C\+K\+\_\+\+C\+L\+I\+E\+N\+T\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+P\+R\+E\+\_\+\+E\+S\+T\+A\+B\+L\+I\+SH@{L\+W\+S\+\_\+\+C\+A\+L\+L\+B\+A\+C\+K\+\_\+\+C\+L\+I\+E\+N\+T\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+P\+R\+E\+\_\+\+E\+S\+T\+A\+B\+L\+I\+SH}}\item[{\em
L\+W\+S\+\_\+\+C\+A\+L\+L\+B\+A\+C\+K\+\_\+\+C\+L\+I\+E\+N\+T\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+P\+R\+E\+\_\+\+E\+S\+T\+A\+B\+L\+I\+SH\hypertarget{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7aa536e574a642ff3ab9e12bff7ba2c6a2}{}\label{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7aa536e574a642ff3ab9e12bff7ba2c6a2}
}]this is the last chance for the client user code to examine the http headers and decide to reject the connection. If the content in the headers is interesting to the client (url, etc) it needs to copy it out at this point since it will be destroyed before the C\+L\+I\+E\+N\+T\+\_\+\+E\+S\+T\+A\+B\+L\+I\+S\+H\+ED call \index{L\+W\+S\+\_\+\+C\+A\+L\+L\+B\+A\+C\+K\+\_\+\+C\+L\+I\+E\+N\+T\+\_\+\+E\+S\+T\+A\+B\+L\+I\+S\+H\+ED@{L\+W\+S\+\_\+\+C\+A\+L\+L\+B\+A\+C\+K\+\_\+\+C\+L\+I\+E\+N\+T\+\_\+\+E\+S\+T\+A\+B\+L\+I\+S\+H\+ED}!User Callback@{User Callback}}\index{User Callback@{User Callback}!L\+W\+S\+\_\+\+C\+A\+L\+L\+B\+A\+C\+K\+\_\+\+C\+L\+I\+E\+N\+T\+\_\+\+E\+S\+T\+A\+B\+L\+I\+S\+H\+ED@{L\+W\+S\+\_\+\+C\+A\+L\+L\+B\+A\+C\+K\+\_\+\+C\+L\+I\+E\+N\+T\+\_\+\+E\+S\+T\+A\+B\+L\+I\+S\+H\+ED}}\item[{\em
L\+W\+S\+\_\+\+C\+A\+L\+L\+B\+A\+C\+K\+\_\+\+C\+L\+I\+E\+N\+T\+\_\+\+E\+S\+T\+A\+B\+L\+I\+S\+H\+ED\hypertarget{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a7e12418eec9bce85735e6460176ab604}{}\label{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a7e12418eec9bce85735e6460176ab604}
@@ -239,74 +277,74 @@ L\+W\+S\+\_\+\+C\+A\+L\+L\+B\+A\+C\+K\+\_\+\+U\+S\+ER\hypertarget{group__usercb_
572 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a24d39bf1cfc0bad9d92da9ac1717e439}{LWS\_CALLBACK\_ESTABLISHED} = 0,
576 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7ad8c6207b0c4e732f3d507f0fb79370e8}{LWS\_CALLBACK\_CLIENT\_CONNECTION\_ERROR} =
1,
-580 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7aa536e574a642ff3ab9e12bff7ba2c6a2}{LWS\_CALLBACK\_CLIENT\_FILTER\_PRE\_ESTABLISH} =
+620 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7aa536e574a642ff3ab9e12bff7ba2c6a2}{LWS\_CALLBACK\_CLIENT\_FILTER\_PRE\_ESTABLISH} =
2,
-587 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a7e12418eec9bce85735e6460176ab604}{LWS\_CALLBACK\_CLIENT\_ESTABLISHED} = 3,
-590 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a48a9590e5e18c7920282e094a0bfd9d8}{LWS\_CALLBACK\_CLOSED} = 4,
-592 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a838b18d255c1b94a533287ba302a2eba}{LWS\_CALLBACK\_CLOSED\_HTTP} = 5,
-594 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a492c1b1c0ac0ed980042ee732fe2990c}{LWS\_CALLBACK\_RECEIVE} = 6,
-598 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a2db02fc6e1c17ab62b52109d1aa9d738}{LWS\_CALLBACK\_RECEIVE\_PONG} = 7,
-600 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7abbbe7a0a67c5866ca9109d46823fc5b1}{LWS\_CALLBACK\_CLIENT\_RECEIVE} = 8,
-603 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a136a7cec11c3afd13245623bd84e76c9}{LWS\_CALLBACK\_CLIENT\_RECEIVE\_PONG} = 9,
-605 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a8e8b2e6dbeac76d8d126947d2166a514}{LWS\_CALLBACK\_CLIENT\_WRITEABLE} = 10,
-613 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a7ec8e2e9557ee02a4fc9f7dec7e2babc}{LWS\_CALLBACK\_SERVER\_WRITEABLE} = 11,
-615 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7ae8d1de0bb56e03aa58cb4d44b18edd2e}{LWS\_CALLBACK\_HTTP} = 12,
-629 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7ac4c68e00efcf1ff7bda7ada462aff8ae}{LWS\_CALLBACK\_HTTP\_BODY} = 13,
-632 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a2fce9a8608220f32abbf1422a5498804}{LWS\_CALLBACK\_HTTP\_BODY\_COMPLETION} = 14,
-634 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7aa627548e1296e654fcfab463ec3c9587}{LWS\_CALLBACK\_HTTP\_FILE\_COMPLETION} = 15,
-636 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7afedadfb3cde37a8ea4c84ed535f26d09}{LWS\_CALLBACK\_HTTP\_WRITEABLE} = 16,
-638 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a026502768778b8d79d62dd0fe4375fc6}{LWS\_CALLBACK\_FILTER\_NETWORK\_CONNECTION} =
+627 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a7e12418eec9bce85735e6460176ab604}{LWS\_CALLBACK\_CLIENT\_ESTABLISHED} = 3,
+630 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a48a9590e5e18c7920282e094a0bfd9d8}{LWS\_CALLBACK\_CLOSED} = 4,
+632 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a838b18d255c1b94a533287ba302a2eba}{LWS\_CALLBACK\_CLOSED\_HTTP} = 5,
+634 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a492c1b1c0ac0ed980042ee732fe2990c}{LWS\_CALLBACK\_RECEIVE} = 6,
+638 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a2db02fc6e1c17ab62b52109d1aa9d738}{LWS\_CALLBACK\_RECEIVE\_PONG} = 7,
+640 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7abbbe7a0a67c5866ca9109d46823fc5b1}{LWS\_CALLBACK\_CLIENT\_RECEIVE} = 8,
+643 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a136a7cec11c3afd13245623bd84e76c9}{LWS\_CALLBACK\_CLIENT\_RECEIVE\_PONG} = 9,
+645 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a8e8b2e6dbeac76d8d126947d2166a514}{LWS\_CALLBACK\_CLIENT\_WRITEABLE} = 10,
+653 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a7ec8e2e9557ee02a4fc9f7dec7e2babc}{LWS\_CALLBACK\_SERVER\_WRITEABLE} = 11,
+655 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7ae8d1de0bb56e03aa58cb4d44b18edd2e}{LWS\_CALLBACK\_HTTP} = 12,
+669 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7ac4c68e00efcf1ff7bda7ada462aff8ae}{LWS\_CALLBACK\_HTTP\_BODY} = 13,
+672 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a2fce9a8608220f32abbf1422a5498804}{LWS\_CALLBACK\_HTTP\_BODY\_COMPLETION} = 14,
+674 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7aa627548e1296e654fcfab463ec3c9587}{LWS\_CALLBACK\_HTTP\_FILE\_COMPLETION} = 15,
+676 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7afedadfb3cde37a8ea4c84ed535f26d09}{LWS\_CALLBACK\_HTTP\_WRITEABLE} = 16,
+678 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a026502768778b8d79d62dd0fe4375fc6}{LWS\_CALLBACK\_FILTER\_NETWORK\_CONNECTION} =
17,
-649 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a75199176c82c1a56e4a6bbf1cc30c12c}{LWS\_CALLBACK\_FILTER\_HTTP\_CONNECTION} = 18,
-661 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7ae9734e1d7af2abf291665ce9e4a728d3}{LWS\_CALLBACK\_SERVER\_NEW\_CLIENT\_INSTANTIATED} =
+689 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a75199176c82c1a56e4a6bbf1cc30c12c}{LWS\_CALLBACK\_FILTER\_HTTP\_CONNECTION} = 18,
+701 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7ae9734e1d7af2abf291665ce9e4a728d3}{LWS\_CALLBACK\_SERVER\_NEW\_CLIENT\_INSTANTIATED} =
19,
-669 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7accd8753672d319a30b4b4c2fb775e84d}{LWS\_CALLBACK\_FILTER\_PROTOCOL\_CONNECTION} =
+709 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7accd8753672d319a30b4b4c2fb775e84d}{LWS\_CALLBACK\_FILTER\_PROTOCOL\_CONNECTION} =
20,
-681 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7ae4986291b7a810fe290851d73bebeb1c}{LWS\_CALLBACK\_OPENSSL\_LOAD\_EXTRA\_CLIENT\_VERIFY\_CERTS}
+721 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7ae4986291b7a810fe290851d73bebeb1c}{LWS\_CALLBACK\_OPENSSL\_LOAD\_EXTRA\_CLIENT\_VERIFY\_CERTS}
= 21,
-688 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a06006e98d27e1e884364d88317f83493}{LWS\_CALLBACK\_OPENSSL\_LOAD\_EXTRA\_SERVER\_VERIFY\_CERTS}
+728 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a06006e98d27e1e884364d88317f83493}{LWS\_CALLBACK\_OPENSSL\_LOAD\_EXTRA\_SERVER\_VERIFY\_CERTS}
= 22,
-694 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7ae5ad65d779b7eab32ab67ceff91a3bac}{LWS\_CALLBACK\_OPENSSL\_PERFORM\_CLIENT\_CERT\_VERIFICATION}
+734 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7ae5ad65d779b7eab32ab67ceff91a3bac}{LWS\_CALLBACK\_OPENSSL\_PERFORM\_CLIENT\_CERT\_VERIFICATION}
= 23,
-712 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a909cc2a7018864b0b71abacc4058fd8f}{LWS\_CALLBACK\_CLIENT\_APPEND\_HANDSHAKE\_HEADER} =
+752 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a909cc2a7018864b0b71abacc4058fd8f}{LWS\_CALLBACK\_CLIENT\_APPEND\_HANDSHAKE\_HEADER} =
24,
-736 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a390da3639296660a78cc1a5dcb19037e}{LWS\_CALLBACK\_CONFIRM\_EXTENSION\_OKAY} = 25,
-747 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a1ce5b22039ca37ee224d00047596ea46}{LWS\_CALLBACK\_CLIENT\_CONFIRM\_EXTENSION\_SUPPORTED}
+776 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a390da3639296660a78cc1a5dcb19037e}{LWS\_CALLBACK\_CONFIRM\_EXTENSION\_OKAY} = 25,
+787 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a1ce5b22039ca37ee224d00047596ea46}{LWS\_CALLBACK\_CLIENT\_CONFIRM\_EXTENSION\_SUPPORTED}
= 26,
-756 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7ad5d34583e3556e153eda91620b48cc49}{LWS\_CALLBACK\_PROTOCOL\_INIT} = 27,
-759 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a54269ca88508e6efd3afdb9d360a9caa}{LWS\_CALLBACK\_PROTOCOL\_DESTROY} = 28,
-764 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7afd8fd77a1cc9405fcb4f26915d7f2d01}{LWS\_CALLBACK\_WSI\_CREATE} = 29,
-766 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7aca834dc035b7f7486f9ce40fde54fe9e}{LWS\_CALLBACK\_WSI\_DESTROY} = 30,
-768 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7adfb41c92e2522712207ef7f2462b5e34}{LWS\_CALLBACK\_GET\_THREAD\_ID} = 31,
-773 \textcolor{comment}{/* external poll() management support */}
-774 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7ab69783a9fbf2ca71ad70706bda77b412}{LWS\_CALLBACK\_ADD\_POLL\_FD} = 32,
-790 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a1df60f314710236f9b53efbf468da768}{LWS\_CALLBACK\_DEL\_POLL\_FD} = 33,
-796 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7aa87d2e82fffa42c3680c7403ef94216e}{LWS\_CALLBACK\_CHANGE\_MODE\_POLL\_FD} = 34,
-804 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a8909732521d379179003d97ab7a05428}{LWS\_CALLBACK\_LOCK\_POLL} = 35,
-816 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a0e9e3dd667c0c42cdbe1a3d921f4fd79}{LWS\_CALLBACK\_UNLOCK\_POLL} = 36,
-819 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7aa46f705dcf97502e95627ffde614f98b}{LWS\_CALLBACK\_OPENSSL\_CONTEXT\_REQUIRES\_PRIVATE\_KEY}
+796 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7ad5d34583e3556e153eda91620b48cc49}{LWS\_CALLBACK\_PROTOCOL\_INIT} = 27,
+799 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a54269ca88508e6efd3afdb9d360a9caa}{LWS\_CALLBACK\_PROTOCOL\_DESTROY} = 28,
+804 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7afd8fd77a1cc9405fcb4f26915d7f2d01}{LWS\_CALLBACK\_WSI\_CREATE} = 29,
+806 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7aca834dc035b7f7486f9ce40fde54fe9e}{LWS\_CALLBACK\_WSI\_DESTROY} = 30,
+808 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7adfb41c92e2522712207ef7f2462b5e34}{LWS\_CALLBACK\_GET\_THREAD\_ID} = 31,
+813 \textcolor{comment}{/* external poll() management support */}
+814 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7ab69783a9fbf2ca71ad70706bda77b412}{LWS\_CALLBACK\_ADD\_POLL\_FD} = 32,
+830 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a1df60f314710236f9b53efbf468da768}{LWS\_CALLBACK\_DEL\_POLL\_FD} = 33,
+836 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7aa87d2e82fffa42c3680c7403ef94216e}{LWS\_CALLBACK\_CHANGE\_MODE\_POLL\_FD} = 34,
+844 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a8909732521d379179003d97ab7a05428}{LWS\_CALLBACK\_LOCK\_POLL} = 35,
+856 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a0e9e3dd667c0c42cdbe1a3d921f4fd79}{LWS\_CALLBACK\_UNLOCK\_POLL} = 36,
+859 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7aa46f705dcf97502e95627ffde614f98b}{LWS\_CALLBACK\_OPENSSL\_CONTEXT\_REQUIRES\_PRIVATE\_KEY}
= 37,
-827 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7ac3fc5bbb55e69f90396526287ee84a51}{LWS\_CALLBACK\_WS\_PEER\_INITIATED\_CLOSE} =
+867 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7ac3fc5bbb55e69f90396526287ee84a51}{LWS\_CALLBACK\_WS\_PEER\_INITIATED\_CLOSE} =
38,
-836 LWS\_CALLBACK\_WS\_EXT\_DEFAULTS = 39,
-839 LWS\_CALLBACK\_CGI = 40,
-841 LWS\_CALLBACK\_CGI\_TERMINATED = 41,
-843 LWS\_CALLBACK\_CGI\_STDIN\_DATA = 42,
-845 LWS\_CALLBACK\_CGI\_STDIN\_COMPLETED = 43,
-847 LWS\_CALLBACK\_ESTABLISHED\_CLIENT\_HTTP = 44,
-849 LWS\_CALLBACK\_CLOSED\_CLIENT\_HTTP = 45,
-851 LWS\_CALLBACK\_RECEIVE\_CLIENT\_HTTP = 46,
-853 LWS\_CALLBACK\_COMPLETED\_CLIENT\_HTTP = 47,
-855 LWS\_CALLBACK\_RECEIVE\_CLIENT\_HTTP\_READ = 48,
-857 LWS\_CALLBACK\_HTTP\_BIND\_PROTOCOL = 49,
-859 LWS\_CALLBACK\_HTTP\_DROP\_PROTOCOL = 50,
-861 LWS\_CALLBACK\_CHECK\_ACCESS\_RIGHTS = 51,
-863 LWS\_CALLBACK\_PROCESS\_HTML = 52,
-865 LWS\_CALLBACK\_ADD\_HEADERS = 53,
-867 LWS\_CALLBACK\_SESSION\_INFO = 54,
-870 LWS\_CALLBACK\_GS\_EVENT = 55,
-873 \textcolor{comment}{/****** add new things just above ---^ ******/}
-874
-875 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a982579753e70e59a9ea13ce628ac891a}{LWS\_CALLBACK\_USER} = 1000,
-877 \};
+876 LWS\_CALLBACK\_WS\_EXT\_DEFAULTS = 39,
+879 LWS\_CALLBACK\_CGI = 40,
+881 LWS\_CALLBACK\_CGI\_TERMINATED = 41,
+883 LWS\_CALLBACK\_CGI\_STDIN\_DATA = 42,
+885 LWS\_CALLBACK\_CGI\_STDIN\_COMPLETED = 43,
+887 LWS\_CALLBACK\_ESTABLISHED\_CLIENT\_HTTP = 44,
+889 LWS\_CALLBACK\_CLOSED\_CLIENT\_HTTP = 45,
+891 LWS\_CALLBACK\_RECEIVE\_CLIENT\_HTTP = 46,
+893 LWS\_CALLBACK\_COMPLETED\_CLIENT\_HTTP = 47,
+895 LWS\_CALLBACK\_RECEIVE\_CLIENT\_HTTP\_READ = 48,
+897 LWS\_CALLBACK\_HTTP\_BIND\_PROTOCOL = 49,
+899 LWS\_CALLBACK\_HTTP\_DROP\_PROTOCOL = 50,
+901 LWS\_CALLBACK\_CHECK\_ACCESS\_RIGHTS = 51,
+903 LWS\_CALLBACK\_PROCESS\_HTML = 52,
+905 LWS\_CALLBACK\_ADD\_HEADERS = 53,
+907 LWS\_CALLBACK\_SESSION\_INFO = 54,
+910 LWS\_CALLBACK\_GS\_EVENT = 55,
+913 \textcolor{comment}{/****** add new things just above ---^ ******/}
+914
+915 \hyperlink{group__usercb_ggad62860e19975ba4c4af401c3cdb6abf7a982579753e70e59a9ea13ce628ac891a}{LWS\_CALLBACK\_USER} = 1000,
+917 \};
\end{DoxyCode}
diff --git a/doc/latex/group__vhost-mounts.tex b/doc/latex/group__vhost-mounts.tex
index 053ca1ff..691a57ce 100644
--- a/doc/latex/group__vhost-mounts.tex
+++ b/doc/latex/group__vhost-mounts.tex
@@ -55,13 +55,13 @@ L\+W\+S\+M\+P\+R\+O\+\_\+\+C\+A\+L\+L\+B\+A\+CK\hypertarget{group__vhost-mounts_
\end{Desc}
\begin{DoxyCode}
-1745 \{
-1746 \hyperlink{group__vhost-mounts_gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0}{LWSMPRO\_HTTP} = 0,
-1747 \hyperlink{group__vhost-mounts_gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1}{LWSMPRO\_HTTPS} = 1,
-1748 \hyperlink{group__vhost-mounts_gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2}{LWSMPRO\_FILE} = 2,
-1749 \hyperlink{group__vhost-mounts_gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69}{LWSMPRO\_CGI} = 3,
-1750 \hyperlink{group__vhost-mounts_gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970}{LWSMPRO\_REDIR\_HTTP} = 4,
-1751 \hyperlink{group__vhost-mounts_gga31eca18e50cb4357480f2fcad36ff437a8894d16316863077dfe530963ca59f67}{LWSMPRO\_REDIR\_HTTPS} = 5,
-1752 \hyperlink{group__vhost-mounts_gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da}{LWSMPRO\_CALLBACK} = 6,
-1753 \};
+1785 \{
+1786 \hyperlink{group__vhost-mounts_gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0}{LWSMPRO\_HTTP} = 0,
+1787 \hyperlink{group__vhost-mounts_gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1}{LWSMPRO\_HTTPS} = 1,
+1788 \hyperlink{group__vhost-mounts_gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2}{LWSMPRO\_FILE} = 2,
+1789 \hyperlink{group__vhost-mounts_gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69}{LWSMPRO\_CGI} = 3,
+1790 \hyperlink{group__vhost-mounts_gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970}{LWSMPRO\_REDIR\_HTTP} = 4,
+1791 \hyperlink{group__vhost-mounts_gga31eca18e50cb4357480f2fcad36ff437a8894d16316863077dfe530963ca59f67}{LWSMPRO\_REDIR\_HTTPS} = 5,
+1792 \hyperlink{group__vhost-mounts_gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da}{LWSMPRO\_CALLBACK} = 6,
+1793 \};
\end{DoxyCode}
diff --git a/doc/latex/libwebsockets_8h.tex b/doc/latex/libwebsockets_8h.tex
index a4eb64f3..e3caff51 100644
--- a/doc/latex/libwebsockets_8h.tex
+++ b/doc/latex/libwebsockets_8h.tex
@@ -590,7 +590,7 @@ L\+W\+S\+\_\+\+V\+I\+S\+I\+B\+LE L\+W\+S\+\_\+\+E\+X\+T\+E\+RN int \hyperlink{gr
\item
L\+W\+S\+\_\+\+V\+I\+S\+I\+B\+LE L\+W\+S\+\_\+\+E\+X\+T\+E\+RN void $\ast$ \hyperlink{group__context-and-vhost_gaeb12f934bfd178bd2132a9e73fc641da}{lws\+\_\+context\+\_\+user} (struct lws\+\_\+context $\ast$context)
\item
-L\+W\+S\+\_\+\+V\+I\+S\+I\+B\+LE L\+W\+S\+\_\+\+E\+X\+T\+E\+RN struct lws $\ast$L\+W\+S\+\_\+\+W\+A\+R\+N\+\_\+\+U\+N\+U\+S\+E\+D\+\_\+\+R\+E\+S\+U\+LT \hyperlink{group__client_gac30a7be106abd0cedfbb2e8b8fe3a2f5}{lws\+\_\+client\+\_\+connect\+\_\+via\+\_\+info} (struct \hyperlink{structlws__client__connect__info}{lws\+\_\+client\+\_\+connect\+\_\+info} $\ast$ccinfo)
+L\+W\+S\+\_\+\+V\+I\+S\+I\+B\+LE L\+W\+S\+\_\+\+E\+X\+T\+E\+RN struct lws $\ast$ \hyperlink{group__client_ga0c966136905f467816307cfba6deb5fd}{lws\+\_\+client\+\_\+connect\+\_\+via\+\_\+info} (struct \hyperlink{structlws__client__connect__info}{lws\+\_\+client\+\_\+connect\+\_\+info} $\ast$ccinfo)
\item
L\+W\+S\+\_\+\+V\+I\+S\+I\+B\+LE L\+W\+S\+\_\+\+E\+X\+T\+E\+RN struct lws $\ast$L\+W\+S\+\_\+\+W\+A\+R\+N\+\_\+\+U\+N\+U\+S\+E\+D\+\_\+\+R\+E\+S\+U\+LT \hyperlink{group__client_ga4af0a20108a95e8b6d94dd4d80055ff3}{lws\+\_\+client\+\_\+connect} (struct lws\+\_\+context $\ast$clients, const char $\ast$address, int port, int ssl\+\_\+connection, const char $\ast$path, const char $\ast$host, const char $\ast$origin, const char $\ast$protocol, int ietf\+\_\+version\+\_\+or\+\_\+minus\+\_\+one) L\+W\+S\+\_\+\+W\+A\+R\+N\+\_\+\+D\+E\+P\+R\+E\+C\+A\+T\+ED
\item
diff --git a/doc/latex/structlws__client__connect__info.tex b/doc/latex/structlws__client__connect__info.tex
index 541a9806..4432cd9d 100644
--- a/doc/latex/structlws__client__connect__info.tex
+++ b/doc/latex/structlws__client__connect__info.tex
@@ -39,12 +39,14 @@ const char $\ast$ \hyperlink{structlws__client__connect__info_a9959ba103d3d2484e
\item
struct lws\+\_\+vhost $\ast$ \hyperlink{structlws__client__connect__info_a3893181d728f326f9f5b47c1459cb8be}{vhost}
\item
+struct lws $\ast$$\ast$ \hyperlink{structlws__client__connect__info_a065063b5117ecd0a59567c97f04bda2e}{pwsi}
+\item
void $\ast$ \hyperlink{structlws__client__connect__info_ad47f50d1633dc5df74548606c9a66d73}{\+\_\+unused} \mbox{[}4\mbox{]}
\end{DoxyCompactItemize}
\subsection{Detailed Description}
-struct \hyperlink{structlws__client__connect__info}{lws\+\_\+client\+\_\+connect\+\_\+info} -\/ parameters to connect with when using \hyperlink{group__client_gac30a7be106abd0cedfbb2e8b8fe3a2f5}{lws\+\_\+client\+\_\+connect\+\_\+via\+\_\+info()}
+struct \hyperlink{structlws__client__connect__info}{lws\+\_\+client\+\_\+connect\+\_\+info} -\/ parameters to connect with when using \hyperlink{group__client_ga0c966136905f467816307cfba6deb5fd}{lws\+\_\+client\+\_\+connect\+\_\+via\+\_\+info()}
\subsection{Field Documentation}
\index{lws\+\_\+client\+\_\+connect\+\_\+info@{lws\+\_\+client\+\_\+connect\+\_\+info}!\+\_\+unused@{\+\_\+unused}}
@@ -83,7 +85,10 @@ uri path \index{lws\+\_\+client\+\_\+connect\+\_\+info@{lws\+\_\+client\+\_\+con
remote port to connect to \index{lws\+\_\+client\+\_\+connect\+\_\+info@{lws\+\_\+client\+\_\+connect\+\_\+info}!protocol@{protocol}}
\index{protocol@{protocol}!lws\+\_\+client\+\_\+connect\+\_\+info@{lws\+\_\+client\+\_\+connect\+\_\+info}}
\subsubsection[{\texorpdfstring{protocol}{protocol}}]{\setlength{\rightskip}{0pt plus 5cm}const char$\ast$ lws\+\_\+client\+\_\+connect\+\_\+info\+::protocol}\hypertarget{structlws__client__connect__info_aba35adfb74845a5fd0c3dc141cbdddd2}{}\label{structlws__client__connect__info_aba35adfb74845a5fd0c3dc141cbdddd2}
-list of ws protocols we could accept \index{lws\+\_\+client\+\_\+connect\+\_\+info@{lws\+\_\+client\+\_\+connect\+\_\+info}!ssl\+\_\+connection@{ssl\+\_\+connection}}
+list of ws protocols we could accept \index{lws\+\_\+client\+\_\+connect\+\_\+info@{lws\+\_\+client\+\_\+connect\+\_\+info}!pwsi@{pwsi}}
+\index{pwsi@{pwsi}!lws\+\_\+client\+\_\+connect\+\_\+info@{lws\+\_\+client\+\_\+connect\+\_\+info}}
+\subsubsection[{\texorpdfstring{pwsi}{pwsi}}]{\setlength{\rightskip}{0pt plus 5cm}struct lws$\ast$$\ast$ lws\+\_\+client\+\_\+connect\+\_\+info\+::pwsi}\hypertarget{structlws__client__connect__info_a065063b5117ecd0a59567c97f04bda2e}{}\label{structlws__client__connect__info_a065063b5117ecd0a59567c97f04bda2e}
+if not N\+U\+LL, store the new wsi here early in the connection process. Although we return the new wsi, the call to create the client connection does progress the connection somewhat and may meet an error that will result in the connection being scrubbed and N\+U\+LL returned. While the wsi exists though, he may process a callback like C\+L\+I\+E\+N\+T\+\_\+\+C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+E\+R\+R\+OR with his wsi\+: this gives the user callback a way to identify which wsi it is that faced the error even before the new wsi is returned and even if ultimately no wsi is returned. \index{lws\+\_\+client\+\_\+connect\+\_\+info@{lws\+\_\+client\+\_\+connect\+\_\+info}!ssl\+\_\+connection@{ssl\+\_\+connection}}
\index{ssl\+\_\+connection@{ssl\+\_\+connection}!lws\+\_\+client\+\_\+connect\+\_\+info@{lws\+\_\+client\+\_\+connect\+\_\+info}}
\subsubsection[{\texorpdfstring{ssl\+\_\+connection}{ssl\_connection}}]{\setlength{\rightskip}{0pt plus 5cm}int lws\+\_\+client\+\_\+connect\+\_\+info\+::ssl\+\_\+connection}\hypertarget{structlws__client__connect__info_a9862297827639238a7a0b4054c3ddf3d}{}\label{structlws__client__connect__info_a9862297827639238a7a0b4054c3ddf3d}
nonzero for ssl \index{lws\+\_\+client\+\_\+connect\+\_\+info@{lws\+\_\+client\+\_\+connect\+\_\+info}!uri\+\_\+replace\+\_\+from@{uri\+\_\+replace\+\_\+from}}
diff --git a/lib/client-handshake.c b/lib/client-handshake.c
index 5c0d356b..678979fb 100644
--- a/lib/client-handshake.c
+++ b/lib/client-handshake.c
@@ -12,6 +12,7 @@ lws_client_connect_2(struct lws *wsi)
struct sockaddr_in server_addr4;
struct lws_pollfd pfd;
struct sockaddr *v;
+ const char *cce = NULL;
int n, plen = 0;
const char *ads;
@@ -72,6 +73,7 @@ lws_client_connect_2(struct lws *wsi)
#else
lwsl_err("getaddrinfo: %s\n", gai_strerror(n));
#endif
+ cce = "getaddrinfo (ipv6) failed";
goto oom4;
}
@@ -97,6 +99,7 @@ lws_client_connect_2(struct lws *wsi)
default:
lwsl_err("Unknown address family\n");
freeaddrinfo(result);
+ cce = "unknown address family";
goto oom4;
}
@@ -114,6 +117,7 @@ lws_client_connect_2(struct lws *wsi)
if (getaddrinfo(ads, NULL, &ai, &result)) {
lwsl_err("getaddrinfo failed\n");
+ cce = "getaddrinfo (ipv4) failed";
goto oom4;
}
@@ -157,6 +161,7 @@ lws_client_connect_2(struct lws *wsi)
if (lws_plat_set_socket_options(wsi->vhost, wsi->sock)) {
lwsl_err("Failed to set wsi socket options\n");
compatible_close(wsi->sock);
+ cce = "set socket opts failed";
goto oom4;
}
@@ -166,6 +171,7 @@ lws_client_connect_2(struct lws *wsi)
lws_libuv_accept(wsi, wsi->sock);
if (insert_wsi_socket_into_fds(context, wsi)) {
compatible_close(wsi->sock);
+ cce = "insert wsi failed";
goto oom4;
}
@@ -291,10 +297,12 @@ oom4:
/* we're closing, losing some rx is OK */
wsi->u.hdr.ah->rxpos = wsi->u.hdr.ah->rxlen;
//lwsl_err("%d\n", wsi->mode);
- if (wsi->mode == LWSCM_HTTP_CLIENT)
+ if (wsi->mode == LWSCM_HTTP_CLIENT) {
wsi->vhost->protocols[0].callback(wsi,
LWS_CALLBACK_CLIENT_CONNECTION_ERROR,
- wsi->user_space, NULL, 0);
+ wsi->user_space, (void *)cce, strlen(cce));
+ wsi->already_did_cce = 1;
+ }
/* take care that we might be inserted in fds already */
if (wsi->position_in_fds_table != -1)
goto failed;
@@ -566,12 +574,20 @@ lws_client_connect_via_info(struct lws_client_connect_info *i)
wsi->u.hdr.stash->protocol[sizeof(wsi->u.hdr.stash->protocol) - 1] = '\0';
wsi->u.hdr.stash->method[sizeof(wsi->u.hdr.stash->method) - 1] = '\0';
+ if (i->pwsi)
+ *i->pwsi = wsi;
+
/* if we went on the waiting list, no probs just return the wsi
* when we get the ah, now or later, he will call
* lws_client_connect_via_info2() below.
*/
- if (lws_header_table_attach(wsi, 0) < 0)
- return NULL;
+ if (lws_header_table_attach(wsi, 0) < 0) {
+ /*
+ * if we failed here, the connection is already closed
+ * and freed.
+ */
+ goto bail1;
+ }
if (i->parent_wsi) {
lwsl_info("%s: created child %p of parent %p\n", __func__,
@@ -592,6 +608,10 @@ lws_client_connect_via_info(struct lws_client_connect_info *i)
bail:
lws_free(wsi);
+bail1:
+ if (i->pwsi)
+ *i->pwsi = NULL;
+
return NULL;
}
diff --git a/lib/client.c b/lib/client.c
index 618f5bb9..11030792 100755
--- a/lib/client.c
+++ b/lib/client.c
@@ -72,8 +72,9 @@ lws_client_socket_service(struct lws_context *context, struct lws *wsi,
{
struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi];
char *p = (char *)&pt->serv_buf[0];
- char *sb = p;
+ const char *cce = NULL;
unsigned char c;
+ char *sb = p;
int n, len;
switch (wsi->mode) {
@@ -155,8 +156,10 @@ lws_client_socket_service(struct lws_context *context, struct lws *wsi,
n = lws_ssl_client_connect1(wsi);
if (!n)
return 0;
- if (n < 0)
+ if (n < 0) {
+ cce = "lws_ssl_client_connect1 failed";
goto bail3;
+ }
} else
wsi->ssl = NULL;
@@ -168,8 +171,10 @@ lws_client_socket_service(struct lws_context *context, struct lws *wsi,
n = lws_ssl_client_connect2(wsi);
if (!n)
return 0;
- if (n < 0)
+ if (n < 0) {
+ cce = "lws_ssl_client_connect2 failed";
goto bail3;
+ }
} else
wsi->ssl = NULL;
#endif
@@ -220,7 +225,7 @@ lws_client_socket_service(struct lws_context *context, struct lws *wsi,
lwsl_debug("Server connection %p (fd=%d) dead\n",
(void *)wsi, pollfd->fd);
-
+ cce = "Peer hung up";
goto bail3;
}
@@ -255,6 +260,7 @@ lws_client_socket_service(struct lws_context *context, struct lws *wsi,
switch (n) {
case 0:
case LWS_SSL_CAPABLE_ERROR:
+ cce = "read failed";
goto bail3;
case LWS_SSL_CAPABLE_MORE_SERVICE:
return 0;
@@ -287,7 +293,8 @@ bail3:
lwsl_info("closing conn at LWS_CONNMODE...SERVER_REPLY\n");
wsi->vhost->protocols[0].callback(wsi,
LWS_CALLBACK_CLIENT_CONNECTION_ERROR,
- wsi->user_space, NULL, 0);
+ wsi->user_space, (void *)cce, cce ? strlen(cce) : 0);
+ wsi->already_did_cce = 1;
lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS);
return -1;
@@ -357,10 +364,10 @@ lws_http_transaction_completed_client(struct lws *wsi)
int
lws_client_interpret_server_handshake(struct lws *wsi)
{
- int n, len, okay = 0, isErrorCodeReceived = 0, port = 0, ssl = 0;
+ int n, len, okay = 0, port = 0, ssl = 0;
int close_reason = LWS_CLOSE_STATUS_PROTOCOL_ERR;
struct lws_context *context = wsi->context;
- const char *pc, *prot, *ads = NULL, *path;
+ const char *pc, *prot, *ads = NULL, *path, *cce = NULL;
struct allocated_headers *ah;
char *p;
#ifndef LWS_NO_EXTENSIONS
@@ -404,6 +411,7 @@ lws_client_interpret_server_handshake(struct lws *wsi)
p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP);
if (wsi->do_ws && !p) {
lwsl_info("no URI\n");
+ cce = "HS: URI missing";
goto bail3;
}
if (!p) {
@@ -411,23 +419,29 @@ lws_client_interpret_server_handshake(struct lws *wsi)
wsi->u.http.connection_type = HTTP_CONNECTION_CLOSE;
}
if (!p) {
+ cce = "HS: URI missing";
lwsl_info("no URI\n");
goto bail3;
}
n = atoi(p);
if (n == 301 || n == 302 || n == 303 || n == 307 || n == 308) {
p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_LOCATION);
- if (!p)
+ if (!p) {
+ cce = "HS: Redirect code but no Location";
goto bail3;
+ }
- if (lws_parse_uri(p, &prot, &ads, &port, &path))
+ if (lws_parse_uri(p, &prot, &ads, &port, &path)) {
+ cce = "HS: URI did not parse";
goto bail3;
+ }
if (!strcmp(prot, "wss://") || !strcmp(prot, "https://"))
ssl = 1;
if (lws_client_reset(wsi, ssl, ads, port, path, ads)) {
lwsl_err("Redirect failed\n");
+ cce = "HS: Redirect failed";
goto bail3;
}
return 0;
@@ -436,6 +450,7 @@ lws_client_interpret_server_handshake(struct lws *wsi)
if (!wsi->do_ws) {
if (n != 200) {
lwsl_notice("Connection failed with code %d", n);
+ cce = "HS: Server did not return 200";
goto bail2;
}
@@ -451,6 +466,7 @@ lws_client_interpret_server_handshake(struct lws *wsi)
/* allocate the per-connection user memory (if any) */
if (lws_ensure_user_space(wsi)) {
lwsl_err("Problem allocating wsi user mem\n");
+ cce = "HS: OOM";
goto bail2;
}
@@ -481,8 +497,11 @@ lws_client_interpret_server_handshake(struct lws *wsi)
* headers and OK it
*/
if (wsi->protocol->callback(wsi, LWS_CALLBACK_CLIENT_FILTER_PRE_ESTABLISH,
- wsi->user_space, NULL, 0))
+ wsi->user_space, NULL, 0)) {
+
+ cce = "HS: disallowed by client filter";
goto bail2;
+ }
/* clear his proxy connection timeout */
lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0);
@@ -492,8 +511,10 @@ lws_client_interpret_server_handshake(struct lws *wsi)
/* call him back to inform him he is up */
if (wsi->protocol->callback(wsi,
LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP,
- wsi->user_space, NULL, 0))
+ wsi->user_space, NULL, 0)) {
+ cce = "HS: disallowed at ESTABLISHED";
goto bail3;
+ }
/* free up his parsing allocations */
lws_header_table_detach(wsi, 0);
@@ -505,36 +526,41 @@ lws_client_interpret_server_handshake(struct lws *wsi)
if (lws_hdr_total_length(wsi, WSI_TOKEN_ACCEPT) == 0) {
lwsl_info("no ACCEPT\n");
- isErrorCodeReceived = 1;
+ cce = "HS: ACCEPT missing";
goto bail3;
}
if (p && strncmp(p, "101", 3)) {
lwsl_warn(
"lws_client_handshake: got bad HTTP response '%s'\n", p);
+ cce = "HS: ws upgrade response not 101";
goto bail3;
}
p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_UPGRADE);
if (!p) {
lwsl_info("no UPGRADE\n");
+ cce = "HS: UPGRADE missing";
goto bail3;
}
strtolower(p);
if (strcmp(p, "websocket")) {
lwsl_warn(
"lws_client_handshake: got bad Upgrade header '%s'\n", p);
+ cce = "HS: Upgrade to something other than websocket";
goto bail3;
}
p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_CONNECTION);
if (!p) {
lwsl_info("no Connection hdr\n");
+ cce = "HS: CONNECTION missing";
goto bail3;
}
strtolower(p);
if (strcmp(p, "upgrade")) {
lwsl_warn("lws_client_int_s_hs: bad header %s\n", p);
+ cce = "HS: UPGRADE malformed";
goto bail3;
}
@@ -577,6 +603,7 @@ lws_client_interpret_server_handshake(struct lws *wsi)
if (!okay) {
lwsl_err("lws_client_int_s_hs: got bad protocol %s\n", p);
+ cce = "HS: PROTOCOL malformed";
goto bail2;
}
@@ -595,6 +622,7 @@ lws_client_interpret_server_handshake(struct lws *wsi)
if (wsi->protocol == NULL) {
lwsl_err("lws_client_int_s_hs: fail protocol %s\n", p);
+ cce = "HS: Cannot match protocol";
goto bail2;
}
@@ -615,6 +643,7 @@ check_extensions:
if (lws_hdr_copy(wsi, sb, context->pt_serv_buf_size, WSI_TOKEN_EXTENSIONS) < 0) {
lwsl_warn("ext list from server failed to copy\n");
+ cce = "HS: EXT: list too big";
goto bail2;
}
@@ -688,8 +717,10 @@ check_extensions:
if (user_callback_handle_rxflow(wsi->protocol->callback,
wsi, LWS_CALLBACK_WS_EXT_DEFAULTS,
(char *)ext->name, ext_name,
- sizeof(ext_name)))
+ sizeof(ext_name))) {
+ cce = "HS: EXT: failed setting defaults";
goto bail2;
+ }
if (ext_name[0] &&
lws_ext_parse_options(ext, wsi, wsi->act_ext_user[
@@ -697,6 +728,7 @@ check_extensions:
strlen(ext_name))) {
lwsl_err("%s: unable to parse user defaults '%s'",
__func__, ext_name);
+ cce = "HS: EXT: failed parsing defaults";
goto bail2;
}
@@ -708,6 +740,7 @@ check_extensions:
opts, a, c - a)) {
lwsl_err("%s: unable to parse remote def '%s'",
__func__, a);
+ cce = "HS: EXT: failed parsing options";
goto bail2;
}
@@ -717,6 +750,7 @@ check_extensions:
NULL, 0)) {
lwsl_err("%s: ext %s rejects server options %s",
ext->name, a);
+ cce = "HS: EXT: Rejects server options";
goto bail2;
}
@@ -727,6 +761,7 @@ check_extensions:
if (n == 0) {
lwsl_warn("Unknown ext '%s'!\n", ext_name);
+ cce = "HS: EXT: unknown ext";
goto bail2;
}
@@ -745,12 +780,14 @@ check_accept:
if (strcmp(p, wsi->u.hdr.ah->initial_handshake_hash_base64)) {
lwsl_warn("lws_client_int_s_hs: accept '%s' wrong vs '%s'\n", p,
wsi->u.hdr.ah->initial_handshake_hash_base64);
+ cce = "HS: Accept hash wrong";
goto bail2;
}
/* allocate the per-connection user memory (if any) */
if (lws_ensure_user_space(wsi)) {
lwsl_err("Problem allocating wsi user mem\n");
+ cce = "HS: OOM";
goto bail2;
}
@@ -759,8 +796,10 @@ check_accept:
* headers and OK it
*/
if (wsi->protocol->callback(wsi, LWS_CALLBACK_CLIENT_FILTER_PRE_ESTABLISH,
- wsi->user_space, NULL, 0))
+ wsi->user_space, NULL, 0)) {
+ cce = "HS: Rejected by filter cb";
goto bail2;
+ }
/* clear his proxy connection timeout */
lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0);
@@ -785,6 +824,7 @@ check_accept:
wsi->u.ws.rx_ubuf = lws_malloc(n + 4 /* 0x0000ffff zlib */);
if (!wsi->u.ws.rx_ubuf) {
lwsl_err("Out of Mem allocating rx buffer %d\n", n);
+ cce = "HS: OOM";
goto bail2;
}
wsi->u.ws.rx_ubuf_alloc = n;
@@ -793,6 +833,7 @@ check_accept:
if (setsockopt(wsi->sock, SOL_SOCKET, SO_SNDBUF, (const char *)&n,
sizeof n)) {
lwsl_warn("Failed to set SNDBUF to %d", n);
+ cce = "HS: SO_SNDBUF failed";
goto bail3;
}
@@ -801,8 +842,10 @@ check_accept:
/* call him back to inform him he is up */
if (wsi->protocol->callback(wsi, LWS_CALLBACK_CLIENT_ESTABLISHED,
- wsi->user_space, NULL, 0))
+ wsi->user_space, NULL, 0)) {
+ cce = "HS: Rejected at CLIENT_ESTABLISHED";
goto bail3;
+ }
#ifndef LWS_NO_EXTENSIONS
/*
* inform all extensions, not just active ones since they
@@ -828,18 +871,10 @@ bail3:
close_reason = LWS_CLOSE_STATUS_NOSTATUS;
bail2:
- if (wsi->protocol && wsi->state == LWSS_ESTABLISHED) {
- if (isErrorCodeReceived && p) {
- wsi->protocol->callback(wsi,
- LWS_CALLBACK_CLIENT_CONNECTION_ERROR,
- wsi->user_space, p,
- (unsigned int)strlen(p));
- } else {
- wsi->protocol->callback(wsi,
- LWS_CALLBACK_CLIENT_CONNECTION_ERROR,
- wsi->user_space, NULL, 0);
- }
- }
+ wsi->protocol->callback(wsi, LWS_CALLBACK_CLIENT_CONNECTION_ERROR,
+ wsi->user_space, (void *)cce,
+ (unsigned int) (cce ? strlen(cce): 0));
+ wsi->already_did_cce = 1;
lwsl_info("closing connection due to bail2 connection error\n");
diff --git a/lib/libwebsockets.c b/lib/libwebsockets.c
index df1e18a9..586dab3e 100755
--- a/lib/libwebsockets.c
+++ b/lib/libwebsockets.c
@@ -480,22 +480,12 @@ just_kill_connection:
lwsl_debug("calling back CLOSED_HTTP\n");
wsi->vhost->protocols->callback(wsi, LWS_CALLBACK_CLOSED_HTTP,
wsi->user_space, NULL, 0 );
- } else if (wsi->mode == LWSCM_WSCL_WAITING_SERVER_REPLY ||
- wsi->mode == LWSCM_WSCL_WAITING_CONNECT) {
- char* errorString;
-
- lwsl_debug("Connection closed before server reply\n");
- errorString = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP);
- if (errorString) {
- wsi->vhost->protocols[0].callback(wsi,
- LWS_CALLBACK_CLIENT_CONNECTION_ERROR,
- wsi->user_space, errorString,
- (unsigned int)strlen(errorString));
- } else {
+ } else if ((wsi->mode == LWSCM_WSCL_WAITING_SERVER_REPLY ||
+ wsi->mode == LWSCM_WSCL_WAITING_CONNECT) &&
+ !wsi->already_did_cce) {
wsi->vhost->protocols[0].callback(wsi,
LWS_CALLBACK_CLIENT_CONNECTION_ERROR,
wsi->user_space, NULL, 0);
- }
} else
lwsl_debug("not calling back closed mode=%d state=%d\n",
wsi->mode, wsi->state_pre_close);
diff --git a/lib/libwebsockets.h b/lib/libwebsockets.h
index 5b69136b..e927276e 100644
--- a/lib/libwebsockets.h
+++ b/lib/libwebsockets.h
@@ -576,7 +576,47 @@ enum lws_callback_reasons {
LWS_CALLBACK_CLIENT_CONNECTION_ERROR = 1,
/**< the request client connection has been unable to complete a
* handshake with the remote server. If in is non-NULL, you can
- * find an error string of length len where it points to. */
+ * find an error string of length len where it points to
+ *
+ * Diagnostic strings that may be returned include
+ *
+ * "getaddrinfo (ipv6) failed"
+ * "unknown address family"
+ * "getaddrinfo (ipv4) failed"
+ * "set socket opts failed"
+ * "insert wsi failed"
+ * "lws_ssl_client_connect1 failed"
+ * "lws_ssl_client_connect2 failed"
+ * "Peer hung up"
+ * "read failed"
+ * "HS: URI missing"
+ * "HS: Redirect code but no Location"
+ * "HS: URI did not parse"
+ * "HS: Redirect failed"
+ * "HS: Server did not return 200"
+ * "HS: OOM"
+ * "HS: disallowed by client filter"
+ * "HS: disallowed at ESTABLISHED"
+ * "HS: ACCEPT missing"
+ * "HS: ws upgrade response not 101"
+ * "HS: UPGRADE missing"
+ * "HS: Upgrade to something other than websocket"
+ * "HS: CONNECTION missing"
+ * "HS: UPGRADE malformed"
+ * "HS: PROTOCOL malformed"
+ * "HS: Cannot match protocol"
+ * "HS: EXT: list too big"
+ * "HS: EXT: failed setting defaults"
+ * "HS: EXT: failed parsing defaults"
+ * "HS: EXT: failed parsing options"
+ * "HS: EXT: Rejects server options"
+ * "HS: EXT: unknown ext"
+ * "HS: Accept hash wrong"
+ * "HS: Rejected by filter cb"
+ * "HS: OOM"
+ * "HS: SO_SNDBUF failed"
+ * "HS: Rejected at CLIENT_ESTABLISHED"
+ */
LWS_CALLBACK_CLIENT_FILTER_PRE_ESTABLISH = 2,
/**< this is the last chance for the client user code to examine the
* http headers and decide to reject the connection. If the
@@ -1841,6 +1881,17 @@ struct lws_client_connect_info {
/**< see uri_replace_from */
struct lws_vhost *vhost;
/**< vhost to bind to (used to determine related SSL_CTX) */
+ struct lws **pwsi;
+ /**< if not NULL, store the new wsi here early in the connection
+ * process. Although we return the new wsi, the call to create the
+ * client connection does progress the connection somewhat and may
+ * meet an error that will result in the connection being scrubbed and
+ * NULL returned. While the wsi exists though, he may process a
+ * callback like CLIENT_CONNECTION_ERROR with his wsi: this gives the
+ * user callback a way to identify which wsi it is that faced the error
+ * even before the new wsi is returned and even if ultimately no wsi
+ * is returned.
+ */
/* Add new things just above here ---^
* This is part of the ABI, don't needlessly break compatibility
@@ -1857,9 +1908,10 @@ struct lws_client_connect_info {
* lws_client_connect_via_info() - Connect to another websocket server
* \param ccinfo: pointer to lws_client_connect_info struct
*
- * This function creates a connection to a remote server
+ * This function creates a connection to a remote server using the
+ * information provided in ccinfo.
*/
-LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
+LWS_VISIBLE LWS_EXTERN struct lws *
lws_client_connect_via_info(struct lws_client_connect_info * ccinfo);
/**
diff --git a/lib/private-libwebsockets.h b/lib/private-libwebsockets.h
index b71b78d8..6cdfdd54 100644
--- a/lib/private-libwebsockets.h
+++ b/lib/private-libwebsockets.h
@@ -1259,6 +1259,7 @@ struct lws {
unsigned int cache_intermediaries:1;
unsigned int favoured_pollin:1;
unsigned int sending_chunked:1;
+ unsigned int already_did_cce:1;
#ifdef LWS_WITH_ACCESS_LOG
unsigned int access_log_pending:1;
#endif
diff --git a/lib/service.c b/lib/service.c
index e14709ee..8d1a9b3b 100644
--- a/lib/service.c
+++ b/lib/service.c
@@ -349,7 +349,7 @@ lws_service_timeout_check(struct lws *wsi, unsigned int sec)
if (wsi->mode == LWSCM_WSCL_WAITING_SSL)
wsi->vhost->protocols[0].callback(wsi,
LWS_CALLBACK_CLIENT_CONNECTION_ERROR,
- wsi->user_space, NULL, 0);
+ wsi->user_space, (void *)"Timed out waiting SSL", 21);
lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS);
diff --git a/test-server/test-client.c b/test-server/test-client.c
index 688c513e..828e2a21 100644
--- a/test-server/test-client.c
+++ b/test-server/test-client.c
@@ -85,6 +85,8 @@ static int
callback_dumb_increment(struct lws *wsi, enum lws_callback_reasons reason,
void *user, void *in, size_t len)
{
+ const char *which = "http";
+
switch (reason) {
case LWS_CALLBACK_CLIENT_ESTABLISHED:
@@ -104,14 +106,12 @@ callback_dumb_increment(struct lws *wsi, enum lws_callback_reasons reason,
/* because we are protocols[0] ... */
case LWS_CALLBACK_CLIENT_CONNECTION_ERROR:
- if (wsi == wsi_dumb) {
- lwsl_err("dumb: LWS_CALLBACK_CLIENT_CONNECTION_ERROR\n");
- wsi_dumb = NULL;
- }
- if (wsi == wsi_mirror) {
- lwsl_err("mirror: LWS_CALLBACK_CLIENT_CONNECTION_ERROR\n");
- wsi_mirror = NULL;
- }
+ if (wsi == wsi_dumb)
+ which = "dumb";
+ if (wsi == wsi_mirror)
+ which = "mirror";
+
+ lwsl_err("CLIENT_CONNECTION_ERROR: %s: %s %p\n", which, in);
break;
case LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED:
@@ -520,18 +520,21 @@ int main(int argc, char **argv)
if (!wsi_dumb && ratelimit_connects(&rl_dumb, 2u)) {
lwsl_notice("dumb: connecting\n");
i.protocol = protocols[PROTOCOL_DUMB_INCREMENT].name;
- wsi_dumb = lws_client_connect_via_info(&i);
+ i.pwsi = &wsi_dumb;
+ lws_client_connect_via_info(&i);
}
if (!wsi_mirror && ratelimit_connects(&rl_mirror, 2u)) {
lwsl_notice("mirror: connecting\n");
i.protocol = protocols[PROTOCOL_LWS_MIRROR].name;
+ i.pwsi = &wsi_mirror;
wsi_mirror = lws_client_connect_via_info(&i);
}
} else
if (!wsi_dumb && ratelimit_connects(&rl_dumb, 2u)) {
lwsl_notice("http: connecting\n");
- wsi_dumb = lws_client_connect_via_info(&i);
+ i.pwsi = &wsi_dumb;
+ lws_client_connect_via_info(&i);
}
lws_service(context, 500);