diff --git a/doc/html/group__client.html b/doc/html/group__client.html index 4dd343b1..5a3313fe 100644 --- a/doc/html/group__client.html +++ b/doc/html/group__client.html @@ -119,7 +119,7 @@ LWS_VISIBLE LWS_EXTERN void <

#include <lib/libwebsockets.h>

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

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

Function Documentation

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

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

-
1530  {
1532  (1 << 12),
1539  (1 << 12),
1543  LWS_SERVER_OPTION_LIBEV = (1 << 4),
1545  LWS_SERVER_OPTION_DISABLE_IPV6 = (1 << 5),
1554  LWS_SERVER_OPTION_SSL_ECDH = (1 << 9) |
1555  (1 << 12),
1557  LWS_SERVER_OPTION_LIBUV = (1 << 10),
1560  (1 << 12),
1568  LWS_SERVER_OPTION_UNIX_SOCK = (1 << 14),
1570  LWS_SERVER_OPTION_STS = (1 << 15),
1591  /****** add new things just above ---^ ******/
1592 };
-
Definition: libwebsockets.h:1547
-
Definition: libwebsockets.h:1577
-
Definition: libwebsockets.h:1559
-
Definition: libwebsockets.h:1565
-
Definition: libwebsockets.h:1536
-
Definition: libwebsockets.h:1554
-
Definition: libwebsockets.h:1538
-
Definition: libwebsockets.h:1543
-
Definition: libwebsockets.h:1563
-
Definition: libwebsockets.h:1575
-
Definition: libwebsockets.h:1545
-
Definition: libwebsockets.h:1557
-
Definition: libwebsockets.h:1568
-
Definition: libwebsockets.h:1552
-
Definition: libwebsockets.h:1550
-
Definition: libwebsockets.h:1583
-
Definition: libwebsockets.h:1570
-
Definition: libwebsockets.h:1573
+
1531  {
1533  (1 << 12),
1540  (1 << 12),
1544  LWS_SERVER_OPTION_LIBEV = (1 << 4),
1546  LWS_SERVER_OPTION_DISABLE_IPV6 = (1 << 5),
1555  LWS_SERVER_OPTION_SSL_ECDH = (1 << 9) |
1556  (1 << 12),
1558  LWS_SERVER_OPTION_LIBUV = (1 << 10),
1561  (1 << 12),
1569  LWS_SERVER_OPTION_UNIX_SOCK = (1 << 14),
1571  LWS_SERVER_OPTION_STS = (1 << 15),
1592  /****** add new things just above ---^ ******/
1593 };
+
Definition: libwebsockets.h:1548
+
Definition: libwebsockets.h:1578
+
Definition: libwebsockets.h:1560
+
Definition: libwebsockets.h:1566
+
Definition: libwebsockets.h:1537
+
Definition: libwebsockets.h:1555
+
Definition: libwebsockets.h:1539
+
Definition: libwebsockets.h:1544
+
Definition: libwebsockets.h:1564
+
Definition: libwebsockets.h:1576
+
Definition: libwebsockets.h:1546
+
Definition: libwebsockets.h:1558
+
Definition: libwebsockets.h:1569
+
Definition: libwebsockets.h:1553
+
Definition: libwebsockets.h:1551
+
Definition: libwebsockets.h:1584
+
Definition: libwebsockets.h:1571
+
Definition: libwebsockets.h:1574
diff --git a/doc/html/group__extensions.html b/doc/html/group__extensions.html index 8bad1ee9..d3436093 100644 --- a/doc/html/group__extensions.html +++ b/doc/html/group__extensions.html @@ -242,9 +242,9 @@ Functions EXTARG_OPT_DEC 

may have an optional decimal argument

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

a new file is starting to arrive

-
2927  {
2932  LWS_UFS_OPEN
2934 };
Definition: libwebsockets.h:2930
-
Definition: libwebsockets.h:2932
-
Definition: libwebsockets.h:2928
+
2928  {
2933  LWS_UFS_OPEN
2935 };
Definition: libwebsockets.h:2931
+
Definition: libwebsockets.h:2933
+
Definition: libwebsockets.h:2929
diff --git a/doc/html/group__generic-sessions.html b/doc/html/group__generic-sessions.html index 35a22191..0c47071c 100644 --- a/doc/html/group__generic-sessions.html +++ b/doc/html/group__generic-sessions.html @@ -116,8 +116,8 @@ Enumerations LWSGSE_DELETED 

an existing user was deleted

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

he just completed "forgot password" flow

-
1476  {
1477  LWSGS_AUTH_LOGGED_IN = 1,
1478  LWSGS_AUTH_ADMIN = 2,
1479  LWSGS_AUTH_VERIFIED = 4,
1481 };
Definition: libwebsockets.h:1479
-
Definition: libwebsockets.h:1480
-
Definition: libwebsockets.h:1478
-
Definition: libwebsockets.h:1477
+
1477  {
1478  LWSGS_AUTH_LOGGED_IN = 1,
1479  LWSGS_AUTH_ADMIN = 2,
1480  LWSGS_AUTH_VERIFIED = 4,
1482 };
Definition: libwebsockets.h:1480
+
Definition: libwebsockets.h:1481
+
Definition: libwebsockets.h:1479
+
Definition: libwebsockets.h:1478
diff --git a/doc/html/group__sending-data.html b/doc/html/group__sending-data.html index 1d8c1dff..b58ba8df 100644 --- a/doc/html/group__sending-data.html +++ b/doc/html/group__sending-data.html @@ -124,13 +124,13 @@ Functions LWS_WRITE_CLIENT_IGNORE_XOR_MASK 

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

-
3274  {
3275  LWS_WRITE_TEXT = 0,
3279  LWS_WRITE_BINARY = 1,
3285  LWS_WRITE_HTTP = 3,
3288  /* LWS_WRITE_CLOSE is handled by lws_close_reason() */
3289  LWS_WRITE_PING = 5,
3290  LWS_WRITE_PONG = 6,
3291 
3292  /* Same as write_http but we know this write ends the transaction */
3293  LWS_WRITE_HTTP_FINAL = 7,
3294 
3295  /* HTTP2 */
3296 
3304  /****** add new things just above ---^ ******/
3305 
3306  /* flags */
3307 
3308  LWS_WRITE_NO_FIN = 0x40,
3315 };
Definition: libwebsockets.h:3285
-
Definition: libwebsockets.h:3308
-
Definition: libwebsockets.h:3275
-
Definition: libwebsockets.h:3279
-
Definition: libwebsockets.h:3311
-
Definition: libwebsockets.h:3282
-
Definition: libwebsockets.h:3297
+
3275  {
3276  LWS_WRITE_TEXT = 0,
3280  LWS_WRITE_BINARY = 1,
3286  LWS_WRITE_HTTP = 3,
3289  /* LWS_WRITE_CLOSE is handled by lws_close_reason() */
3290  LWS_WRITE_PING = 5,
3291  LWS_WRITE_PONG = 6,
3292 
3293  /* Same as write_http but we know this write ends the transaction */
3294  LWS_WRITE_HTTP_FINAL = 7,
3295 
3296  /* HTTP2 */
3297 
3305  /****** add new things just above ---^ ******/
3306 
3307  /* flags */
3308 
3309  LWS_WRITE_NO_FIN = 0x40,
3316 };
Definition: libwebsockets.h:3286
+
Definition: libwebsockets.h:3309
+
Definition: libwebsockets.h:3276
+
Definition: libwebsockets.h:3280
+
Definition: libwebsockets.h:3312
+
Definition: libwebsockets.h:3283
+
Definition: libwebsockets.h:3298
diff --git a/doc/html/group__smtp.html b/doc/html/group__smtp.html index 509d6e52..7e2f9ac7 100644 --- a/doc/html/group__smtp.html +++ b/doc/html/group__smtp.html @@ -149,15 +149,15 @@ Functions LGSSMTP_SENT_QUIT 

sent the session quit

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

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

-
670  {
754  LWS_CALLBACK_HTTP = 12,
912  /* external poll() management support */
975  LWS_CALLBACK_WS_EXT_DEFAULTS = 39,
978  LWS_CALLBACK_CGI = 40,
980  LWS_CALLBACK_CGI_TERMINATED = 41,
982  LWS_CALLBACK_CGI_STDIN_DATA = 42,
984  LWS_CALLBACK_CGI_STDIN_COMPLETED = 43,
986  LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP = 44,
988  LWS_CALLBACK_CLOSED_CLIENT_HTTP = 45,
990  LWS_CALLBACK_RECEIVE_CLIENT_HTTP = 46,
992  LWS_CALLBACK_COMPLETED_CLIENT_HTTP = 47,
994  LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ = 48,
996  LWS_CALLBACK_HTTP_BIND_PROTOCOL = 49,
998  LWS_CALLBACK_HTTP_DROP_PROTOCOL = 50,
1000  LWS_CALLBACK_CHECK_ACCESS_RIGHTS = 51,
1002  LWS_CALLBACK_PROCESS_HTML = 52,
1004  LWS_CALLBACK_ADD_HEADERS = 53,
1006  LWS_CALLBACK_SESSION_INFO = 54,
1009  LWS_CALLBACK_GS_EVENT = 55,
1011  LWS_CALLBACK_HTTP_PMO = 56,
1056  /****** add new things just above ---^ ******/
1057 
1058  LWS_CALLBACK_USER = 1000,
1060 };
Definition: libwebsockets.h:777
-
Definition: libwebsockets.h:905
- -
Definition: libwebsockets.h:903
-
Definition: libwebsockets.h:808
-
Definition: libwebsockets.h:754
-
Definition: libwebsockets.h:788
-
Definition: libwebsockets.h:929
-
Definition: libwebsockets.h:875
-
Definition: libwebsockets.h:768
-
Definition: libwebsockets.h:966
- -
Definition: libwebsockets.h:955
- -
Definition: libwebsockets.h:729
-
Definition: libwebsockets.h:907
-
Definition: libwebsockets.h:895
-
Definition: libwebsockets.h:726
-
Definition: libwebsockets.h:913
-
Definition: libwebsockets.h:719
-
Definition: libwebsockets.h:800
-
Definition: libwebsockets.h:898
-
Definition: libwebsockets.h:935
-
Definition: libwebsockets.h:775
-
Definition: libwebsockets.h:771
-
Definition: libwebsockets.h:671
- -
Definition: libwebsockets.h:739
-
Definition: libwebsockets.h:773
-
Definition: libwebsockets.h:1011
-
Definition: libwebsockets.h:851
-
Definition: libwebsockets.h:737
-
Definition: libwebsockets.h:742
-
Definition: libwebsockets.h:1016
- -
Definition: libwebsockets.h:675
-
Definition: libwebsockets.h:752
-
Definition: libwebsockets.h:1058
- -
Definition: libwebsockets.h:731
-
Definition: libwebsockets.h:733
-
Definition: libwebsockets.h:744
-
Definition: libwebsockets.h:943
+
671  {
755  LWS_CALLBACK_HTTP = 12,
913  /* external poll() management support */
976  LWS_CALLBACK_WS_EXT_DEFAULTS = 39,
979  LWS_CALLBACK_CGI = 40,
981  LWS_CALLBACK_CGI_TERMINATED = 41,
983  LWS_CALLBACK_CGI_STDIN_DATA = 42,
985  LWS_CALLBACK_CGI_STDIN_COMPLETED = 43,
987  LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP = 44,
989  LWS_CALLBACK_CLOSED_CLIENT_HTTP = 45,
991  LWS_CALLBACK_RECEIVE_CLIENT_HTTP = 46,
993  LWS_CALLBACK_COMPLETED_CLIENT_HTTP = 47,
995  LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ = 48,
997  LWS_CALLBACK_HTTP_BIND_PROTOCOL = 49,
999  LWS_CALLBACK_HTTP_DROP_PROTOCOL = 50,
1001  LWS_CALLBACK_CHECK_ACCESS_RIGHTS = 51,
1003  LWS_CALLBACK_PROCESS_HTML = 52,
1005  LWS_CALLBACK_ADD_HEADERS = 53,
1007  LWS_CALLBACK_SESSION_INFO = 54,
1010  LWS_CALLBACK_GS_EVENT = 55,
1012  LWS_CALLBACK_HTTP_PMO = 56,
1057  /****** add new things just above ---^ ******/
1058 
1059  LWS_CALLBACK_USER = 1000,
1061 };
Definition: libwebsockets.h:778
+
Definition: libwebsockets.h:906
+ +
Definition: libwebsockets.h:904
+
Definition: libwebsockets.h:809
+
Definition: libwebsockets.h:755
+
Definition: libwebsockets.h:789
+
Definition: libwebsockets.h:930
+
Definition: libwebsockets.h:876
+
Definition: libwebsockets.h:769
+
Definition: libwebsockets.h:967
+ +
Definition: libwebsockets.h:956
+ +
Definition: libwebsockets.h:730
+
Definition: libwebsockets.h:908
+
Definition: libwebsockets.h:896
+
Definition: libwebsockets.h:727
+
Definition: libwebsockets.h:914
+
Definition: libwebsockets.h:720
+
Definition: libwebsockets.h:801
+
Definition: libwebsockets.h:899
+
Definition: libwebsockets.h:936
+
Definition: libwebsockets.h:776
+
Definition: libwebsockets.h:772
+
Definition: libwebsockets.h:672
+ +
Definition: libwebsockets.h:740
+
Definition: libwebsockets.h:774
+
Definition: libwebsockets.h:1012
+
Definition: libwebsockets.h:852
+
Definition: libwebsockets.h:738
+
Definition: libwebsockets.h:743
+
Definition: libwebsockets.h:1017
+ +
Definition: libwebsockets.h:676
+
Definition: libwebsockets.h:753
+
Definition: libwebsockets.h:1059
+ +
Definition: libwebsockets.h:732
+
Definition: libwebsockets.h:734
+
Definition: libwebsockets.h:745
+
Definition: libwebsockets.h:944
diff --git a/doc/html/group__vhost-mounts.html b/doc/html/group__vhost-mounts.html index 9d90c4ca..e499fe7c 100644 --- a/doc/html/group__vhost-mounts.html +++ b/doc/html/group__vhost-mounts.html @@ -123,13 +123,13 @@ Enumerations LWSMPRO_CALLBACK 

hand by named protocol's callback

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

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

-
560  {
561  LWS_CLOSE_STATUS_NOSTATUS = 0,
623  /****** add new things just above ---^ ******/
624 
625  LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY = 9999,
626 };
Definition: libwebsockets.h:589
-
Definition: libwebsockets.h:600
-
Definition: libwebsockets.h:616
-
Definition: libwebsockets.h:568
-
Definition: libwebsockets.h:594
-
Definition: libwebsockets.h:578
-
Definition: libwebsockets.h:583
-
Definition: libwebsockets.h:565
-
Definition: libwebsockets.h:604
-
Definition: libwebsockets.h:562
-
Definition: libwebsockets.h:571
-
Definition: libwebsockets.h:576
-
Definition: libwebsockets.h:612
+
561  {
562  LWS_CLOSE_STATUS_NOSTATUS = 0,
624  /****** add new things just above ---^ ******/
625 
626  LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY = 9999,
627 };
Definition: libwebsockets.h:590
+
Definition: libwebsockets.h:601
+
Definition: libwebsockets.h:617
+
Definition: libwebsockets.h:569
+
Definition: libwebsockets.h:595
+
Definition: libwebsockets.h:579
+
Definition: libwebsockets.h:584
+
Definition: libwebsockets.h:566
+
Definition: libwebsockets.h:605
+
Definition: libwebsockets.h:563
+
Definition: libwebsockets.h:572
+
Definition: libwebsockets.h:577
+
Definition: libwebsockets.h:613
diff --git a/doc/html/libwebsockets_8h_source.html b/doc/html/libwebsockets_8h_source.html index 1cc65f0f..674a71b5 100644 --- a/doc/html/libwebsockets_8h_source.html +++ b/doc/html/libwebsockets_8h_source.html @@ -64,420 +64,420 @@ $(document).ready(function(){initNavTree('libwebsockets_8h_source.html','');});
libwebsockets.h
-Go to the documentation of this file.
1 /*
2  * libwebsockets - small server side websockets and web server implementation
3  *
4  * Copyright (C) 2010-2016 Andy Green <andy@warmcat.com>
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation:
9  * version 2.1 of the License.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19  * MA 02110-1301 USA
20  */
21 
24 #ifndef LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C
25 #define LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C
26 
27 #ifdef __cplusplus
28 #include <cstddef>
29 #include <cstdarg>
30 #ifdef MBED_OPERATORS
31 #include "mbed-drivers/mbed.h"
32 #include "sal-iface-eth/EthernetInterface.h"
33 #include "sockets/TCPListener.h"
34 #include "sal-stack-lwip/lwipv4_init.h"
35 
36 namespace {
37 }
38 using namespace mbed::Sockets::v0;
39 
40 
41 struct sockaddr_in;
42 struct lws;
43 
44 class lws_conn {
45  public:
46  lws_conn():
47  ts(NULL),
48  wsi(NULL),
49  writeable(1),
50  awaiting_on_writeable(0)
51  {
52  }
53 
54 public:
55  void set_wsi(struct lws *_wsi) { wsi = _wsi; }
56  int actual_onRX(Socket *s);
57  void onRX(Socket *s);
58  void onError(Socket *s, socket_error_t err);
59  void onDisconnect(TCPStream *s);
60  void onSent(Socket *s, uint16_t len);
61  void serialized_writeable(struct lws *wsi);
62 
63 public:
64  TCPStream *ts;
65 
66 public:
67  struct lws *wsi;
68  char writeable;
69  char awaiting_on_writeable;
70 };
71 
73 public:
75  srv(SOCKET_STACK_LWIP_IPV4)
76  {
77  srv.setOnError(TCPStream::ErrorHandler_t(this,
79  }
80 
81  void start(const uint16_t port);
83 protected:
84  void onRX(Socket *s);
85  void onError(Socket *s, socket_error_t err);
86  void onIncoming(TCPListener *s, void *impl);
87  void onDisconnect(TCPStream *s);
89 public:
90  TCPListener srv;
91 };
92 
93 #endif
94 
95 extern "C" {
96 #else
97 #include <stdarg.h>
98 #endif
99 
100 #if defined(MBED_OPERATORS) || defined(LWS_WITH_ESP8266)
101 struct sockaddr_in;
102 #define LWS_POSIX 0
103 #else
104 #define LWS_POSIX 1
105 #endif
106 
107 #include "lws_config.h"
108 
109 #if defined(WIN32) || defined(_WIN32)
110 #ifndef WIN32_LEAN_AND_MEAN
111 #define WIN32_LEAN_AND_MEAN
112 #endif
113 
114 #include <winsock2.h>
115 #include <ws2tcpip.h>
116 #include <stddef.h>
117 #include <basetsd.h>
118 #ifndef _WIN32_WCE
119 #include <fcntl.h>
120 #else
121 #define _O_RDONLY 0x0000
122 #define O_RDONLY _O_RDONLY
123 #endif
124 
125 // Visual studio older than 2015 and WIN_CE has only _stricmp
126 #if (defined(_MSC_VER) && _MSC_VER < 1900) || defined(_WIN32_WCE)
127 #define strcasecmp _stricmp
128 #elif !defined(__MINGW32__)
129 #define strcasecmp stricmp
130 #endif
131 #define getdtablesize() 30000
132 
133 #define LWS_INLINE __inline
134 #define LWS_VISIBLE
135 #define LWS_WARN_UNUSED_RESULT
136 #define LWS_WARN_DEPRECATED
137 
138 #ifdef LWS_DLL
139 #ifdef LWS_INTERNAL
140 #define LWS_EXTERN extern __declspec(dllexport)
141 #else
142 #define LWS_EXTERN extern __declspec(dllimport)
143 #endif
144 #else
145 #define LWS_EXTERN
146 #endif
147 
148 #define LWS_INVALID_FILE INVALID_HANDLE_VALUE
149 #define LWS_O_RDONLY _O_RDONLY
150 
151 #if !defined(__MINGW32__) && (!defined(_MSC_VER) || _MSC_VER < 1900) /* Visual Studio 2015 already defines this in <stdio.h> */
152 #define lws_snprintf _snprintf
153 #endif
154 
155 #ifndef __func__
156 #define __func__ __FUNCTION__
157 #endif
158 
159 #else /* NOT WIN32 */
160 #include <unistd.h>
161 
162 #if defined(__NetBSD__) || defined(__FreeBSD__)
163 #include <netinet/in.h>
164 #endif
165 
166 #define LWS_INLINE inline
167 #define LWS_O_RDONLY O_RDONLY
168 
169 #if !defined(MBED_OPERATORS) && !defined(LWS_WITH_ESP8266) && !defined(OPTEE_TA)
170 #include <poll.h>
171 #include <netdb.h>
172 #define LWS_INVALID_FILE -1
173 #else
174 #define getdtablesize() (20)
175 #define LWS_INVALID_FILE NULL
176 #endif
177 
178 #if defined(__GNUC__)
179 
180 /* warn_unused_result attribute only supported by GCC 3.4 or later */
181 #if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
182 #define LWS_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
183 #else
184 #define LWS_WARN_UNUSED_RESULT
185 #endif
186 
187 #define LWS_VISIBLE __attribute__((visibility("default")))
188 #define LWS_WARN_DEPRECATED __attribute__ ((deprecated))
189 #define LWS_FORMAT(string_index) __attribute__ ((format(printf, string_index, string_index+1)))
190 #else
191 #define LWS_VISIBLE
192 #define LWS_WARN_UNUSED_RESULT
193 #define LWS_WARN_DEPRECATED
194 #define LWS_FORMAT
195 #endif
196 
197 #if defined(__ANDROID__)
198 #include <unistd.h>
199 #define getdtablesize() sysconf(_SC_OPEN_MAX)
200 #endif
201 
202 #endif
203 
204 #ifdef LWS_USE_LIBEV
205 #include <ev.h>
206 #endif /* LWS_USE_LIBEV */
207 #ifdef LWS_USE_LIBUV
208 #include <uv.h>
209 #ifdef LWS_HAVE_UV_VERSION_H
210 #include <uv-version.h>
211 #endif
212 #endif /* LWS_USE_LIBUV */
213 
214 #ifndef LWS_EXTERN
215 #define LWS_EXTERN extern
216 #endif
217 
218 #ifdef _WIN32
219 #define random rand
220 #else
221 #if !defined(OPTEE_TA)
222 #include <sys/time.h>
223 #include <unistd.h>
224 #endif
225 #endif
226 
227 #ifdef LWS_OPENSSL_SUPPORT
228 
229 #ifdef USE_WOLFSSL
230 #ifdef USE_OLD_CYASSL
231 #include <cyassl/openssl/ssl.h>
232 #include <cyassl/error-ssl.h>
233 #else
234 #include <wolfssl/openssl/ssl.h>
235 #include <wolfssl/error-ssl.h>
236 #endif /* not USE_OLD_CYASSL */
237 #else
238 #if defined(LWS_USE_POLARSSL)
239 #include <polarssl/ssl.h>
241  x509_crt ca;
242  x509_crt certificate;
243  rsa_context key;
244 };
245 typedef struct lws_polarssl_context SSL_CTX;
246 typedef ssl_context SSL;
247 #else
248 #if defined(LWS_USE_MBEDTLS)
249 #include <mbedtls/ssl.h>
250 #else
251 #include <openssl/ssl.h>
252 #include <openssl/err.h>
253 #endif /* not USE_MBEDTLS */
254 #endif /* not USE_POLARSSL */
255 #endif /* not USE_WOLFSSL */
256 #endif
257 
258 
259 #define CONTEXT_PORT_NO_LISTEN -1
260 #define CONTEXT_PORT_NO_LISTEN_SERVER -2
261 
272 
274 enum lws_log_levels {
275  LLL_ERR = 1 << 0,
276  LLL_WARN = 1 << 1,
277  LLL_NOTICE = 1 << 2,
278  LLL_INFO = 1 << 3,
279  LLL_DEBUG = 1 << 4,
280  LLL_PARSER = 1 << 5,
281  LLL_HEADER = 1 << 6,
282  LLL_EXT = 1 << 7,
283  LLL_CLIENT = 1 << 8,
284  LLL_LATENCY = 1 << 9,
285  LLL_USER = 1 << 10,
286 
287  LLL_COUNT = 11 /* set to count of valid flags */
288 };
289 
290 LWS_VISIBLE LWS_EXTERN void _lws_log(int filter, const char *format, ...) LWS_FORMAT(2);
291 LWS_VISIBLE LWS_EXTERN void _lws_logv(int filter, const char *format, va_list vl);
301 LWS_VISIBLE LWS_EXTERN int
302 lwsl_timestamp(int level, char *p, int len);
303 
304 /* these guys are unconditionally included */
305 
306 #define lwsl_err(...) _lws_log(LLL_ERR, __VA_ARGS__)
307 #define lwsl_user(...) _lws_log(LLL_USER, __VA_ARGS__)
308 
309 #if !defined(LWS_WITH_NO_LOGS)
310 /* notice and warn are usually included by being compiled in */
311 #define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__)
312 #define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__)
313 #endif
314 /*
315  * weaker logging can be deselected by telling CMake to build in RELEASE mode
316  * that gets rid of the overhead of checking while keeping _warn and _err
317  * active
318  */
319 
320 #if defined(LWS_WITH_ESP8266)
321 #undef _DEBUG
322 #endif
323 
324 #ifdef _DEBUG
325 #if defined(LWS_WITH_NO_LOGS)
326 /* notice, warn and log are always compiled in */
327 #define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__)
328 #define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__)
329 #endif
330 #define lwsl_info(...) _lws_log(LLL_INFO, __VA_ARGS__)
331 #define lwsl_debug(...) _lws_log(LLL_DEBUG, __VA_ARGS__)
332 #define lwsl_parser(...) _lws_log(LLL_PARSER, __VA_ARGS__)
333 #define lwsl_header(...) _lws_log(LLL_HEADER, __VA_ARGS__)
334 #define lwsl_ext(...) _lws_log(LLL_EXT, __VA_ARGS__)
335 #define lwsl_client(...) _lws_log(LLL_CLIENT, __VA_ARGS__)
336 #define lwsl_latency(...) _lws_log(LLL_LATENCY, __VA_ARGS__)
337 
343 LWS_VISIBLE LWS_EXTERN void lwsl_hexdump(void *buf, size_t len);
344 
345 #else /* no debug */
346 #if defined(LWS_WITH_NO_LOGS)
347 #define lwsl_warn(...) do {} while(0)
348 #define lwsl_notice(...) do {} while(0)
349 #endif
350 #define lwsl_info(...) do {} while(0)
351 #define lwsl_debug(...) do {} while(0)
352 #define lwsl_parser(...) do {} while(0)
353 #define lwsl_header(...) do {} while(0)
354 #define lwsl_ext(...) do {} while(0)
355 #define lwsl_client(...) do {} while(0)
356 #define lwsl_latency(...) do {} while(0)
357 #define lwsl_hexdump(a, b)
358 
359 #endif
360 
371 LWS_VISIBLE LWS_EXTERN void
372 lws_set_log_level(int level,
373  void (*log_emit_function)(int level, const char *line));
374 
384 LWS_VISIBLE LWS_EXTERN void
385 lwsl_emit_syslog(int level, const char *line);
386 
388 
389 
390 #include <stddef.h>
391 
392 #ifndef lws_container_of
393 #define lws_container_of(P,T,M) ((T *)((char *)(P) - offsetof(T, M)))
394 #endif
395 
396 
397 struct lws;
398 #ifndef ARRAY_SIZE
399 #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
400 #endif
401 
402 /* api change list for user code to test against */
403 
404 #define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_ARG
405 
406 /* the struct lws_protocols has the id field present */
407 #define LWS_FEATURE_PROTOCOLS_HAS_ID_FIELD
408 
409 /* you can call lws_get_peer_write_allowance */
410 #define LWS_FEATURE_PROTOCOLS_HAS_PEER_WRITE_ALLOWANCE
411 
412 /* extra parameter introduced in 917f43ab821 */
413 #define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_LEN
414 
415 /* File operations stuff exists */
416 #define LWS_FEATURE_FOPS
417 
418 
419 #if defined(_WIN32)
420 typedef SOCKET lws_sockfd_type;
421 typedef HANDLE lws_filefd_type;
422 #define lws_sockfd_valid(sfd) (!!sfd)
423 struct lws_pollfd {
424  lws_sockfd_type fd;
425  SHORT events;
426  SHORT revents;
427 };
428 #define LWS_POLLHUP (FD_CLOSE)
429 #define LWS_POLLIN (FD_READ | FD_ACCEPT)
430 #define LWS_POLLOUT (FD_WRITE)
431 #else
432 
433 #if defined(MBED_OPERATORS)
434 /* it's a class lws_conn * */
435 typedef void * lws_sockfd_type;
436 typedef void * lws_filefd_type;
437 #define lws_sockfd_valid(sfd) (!!sfd)
438 struct pollfd {
439  lws_sockfd_type fd;
440  short events;
441  short revents;
442 };
443 #define POLLIN 0x0001
444 #define POLLPRI 0x0002
445 #define POLLOUT 0x0004
446 #define POLLERR 0x0008
447 #define POLLHUP 0x0010
448 #define POLLNVAL 0x0020
449 
450 struct lws;
451 
452 void * mbed3_create_tcp_stream_socket(void);
453 void mbed3_delete_tcp_stream_socket(void *sockfd);
454 void mbed3_tcp_stream_bind(void *sock, int port, struct lws *);
455 void mbed3_tcp_stream_accept(void *sock, struct lws *);
456 #else
457 #if defined(LWS_WITH_ESP8266)
458 
459 #include <user_interface.h>
460 #include <espconn.h>
461 
462 typedef struct espconn * lws_sockfd_type;
463 typedef void * lws_filefd_type;
464 #define lws_sockfd_valid(sfd) (!!sfd)
465 struct pollfd {
466  lws_sockfd_type fd;
467  short events;
468  short revents;
469 };
470 #define POLLIN 0x0001
471 #define POLLPRI 0x0002
472 #define POLLOUT 0x0004
473 #define POLLERR 0x0008
474 #define POLLHUP 0x0010
475 #define POLLNVAL 0x0020
476 
477 struct lws_vhost;
478 
479 lws_sockfd_type esp8266_create_tcp_listen_socket(struct lws_vhost *vh);
480 void esp8266_tcp_stream_accept(lws_sockfd_type fd, struct lws *wsi);
481 
482 #include <os_type.h>
483 #include <osapi.h>
484 #include "ets_sys.h"
485 
486 int ets_snprintf(char *str, size_t size, const char *format, ...) LWS_FORMAT(3);
487 #define snprintf ets_snprintf
488 
489 typedef os_timer_t uv_timer_t;
490 typedef void uv_cb_t(uv_timer_t *);
491 
492 void os_timer_disarm(void *);
493 void os_timer_setfn(os_timer_t *, os_timer_func_t *, void *);
494 
495 void ets_timer_arm_new(os_timer_t *, int, int, int);
496 
497 //void os_timer_arm(os_timer_t *, int, int);
498 
499 #define UV_VERSION_MAJOR 1
500 
501 #define lws_uv_getloop(a, b) (NULL)
502 
503 static inline void uv_timer_init(void *l, uv_timer_t *t)
504 {
505  (void)l;
506  memset(t, 0, sizeof(*t));
507  os_timer_disarm(t);
508 }
509 
510 static inline void uv_timer_start(uv_timer_t *t, uv_cb_t *cb, int first, int rep)
511 {
512  os_timer_setfn(t, (os_timer_func_t *)cb, t);
513  /* ms, repeat */
514  os_timer_arm(t, first, !!rep);
515 }
516 
517 static inline void uv_timer_stop(uv_timer_t *t)
518 {
519  os_timer_disarm(t);
520 }
521 
522 #else
523 typedef int lws_sockfd_type;
524 typedef int lws_filefd_type;
525 #define lws_sockfd_valid(sfd) (sfd >= 0)
526 #endif
527 #endif
528 
529 #define lws_pollfd pollfd
530 #define LWS_POLLHUP (POLLHUP|POLLERR)
531 #define LWS_POLLIN (POLLIN)
532 #define LWS_POLLOUT (POLLOUT)
533 #endif
534 
537 struct lws_pollargs {
538  lws_sockfd_type fd;
539  int events;
541 };
542 
543 struct lws_tokens;
544 struct lws_token_limits;
545 
553 
555 /*
556  * NOTE: These public enums are part of the abi. If you want to add one,
557  * add it at where specified so existing users are unaffected.
558  */
561  LWS_CLOSE_STATUS_NOSTATUS = 0,
623  /****** add new things just above ---^ ******/
624 
625  LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY = 9999,
626 };
627 
640 LWS_VISIBLE LWS_EXTERN void
641 lws_close_reason(struct lws *wsi, enum lws_close_status status,
642  unsigned char *buf, size_t len);
643 
645 
646 struct lws;
647 struct lws_context;
648 /* needed even with extensions disabled for create context */
649 struct lws_extension;
650 
662 
664 
665 /*
666  * NOTE: These public enums are part of the abi. If you want to add one,
667  * add it at where specified so existing users are unaffected.
668  */
912  /* external poll() management support */
975  LWS_CALLBACK_WS_EXT_DEFAULTS = 39,
978  LWS_CALLBACK_CGI = 40,
980  LWS_CALLBACK_CGI_TERMINATED = 41,
982  LWS_CALLBACK_CGI_STDIN_DATA = 42,
984  LWS_CALLBACK_CGI_STDIN_COMPLETED = 43,
986  LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP = 44,
988  LWS_CALLBACK_CLOSED_CLIENT_HTTP = 45,
990  LWS_CALLBACK_RECEIVE_CLIENT_HTTP = 46,
992  LWS_CALLBACK_COMPLETED_CLIENT_HTTP = 47,
994  LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ = 48,
996  LWS_CALLBACK_HTTP_BIND_PROTOCOL = 49,
998  LWS_CALLBACK_HTTP_DROP_PROTOCOL = 50,
1000  LWS_CALLBACK_CHECK_ACCESS_RIGHTS = 51,
1002  LWS_CALLBACK_PROCESS_HTML = 52,
1004  LWS_CALLBACK_ADD_HEADERS = 53,
1006  LWS_CALLBACK_SESSION_INFO = 54,
1009  LWS_CALLBACK_GS_EVENT = 55,
1056  /****** add new things just above ---^ ******/
1057 
1060 };
1061 
1062 
1063 
1079 typedef int
1080 lws_callback_function(struct lws *wsi, enum lws_callback_reasons reason,
1081  void *user, void *in, size_t len);
1083 
1093 
1095 /*
1096  * NOTE: These public enums are part of the abi. If you want to add one,
1097  * add it at where specified so existing users are unaffected.
1098  */
1099 enum lws_extension_callback_reasons {
1100  LWS_EXT_CB_SERVER_CONTEXT_CONSTRUCT = 0,
1101  LWS_EXT_CB_CLIENT_CONTEXT_CONSTRUCT = 1,
1102  LWS_EXT_CB_SERVER_CONTEXT_DESTRUCT = 2,
1103  LWS_EXT_CB_CLIENT_CONTEXT_DESTRUCT = 3,
1104  LWS_EXT_CB_CONSTRUCT = 4,
1105  LWS_EXT_CB_CLIENT_CONSTRUCT = 5,
1106  LWS_EXT_CB_CHECK_OK_TO_REALLY_CLOSE = 6,
1107  LWS_EXT_CB_CHECK_OK_TO_PROPOSE_EXTENSION = 7,
1108  LWS_EXT_CB_DESTROY = 8,
1109  LWS_EXT_CB_DESTROY_ANY_WSI_CLOSING = 9,
1110  LWS_EXT_CB_ANY_WSI_ESTABLISHED = 10,
1111  LWS_EXT_CB_PACKET_RX_PREPARSE = 11,
1112  LWS_EXT_CB_PACKET_TX_PRESEND = 12,
1113  LWS_EXT_CB_PACKET_TX_DO_SEND = 13,
1114  LWS_EXT_CB_HANDSHAKE_REPLY_TX = 14,
1115  LWS_EXT_CB_FLUSH_PENDING_TX = 15,
1116  LWS_EXT_CB_EXTENDED_PAYLOAD_RX = 16,
1117  LWS_EXT_CB_CAN_PROXY_CLIENT_CONNECTION = 17,
1118  LWS_EXT_CB_1HZ = 18,
1119  LWS_EXT_CB_REQUEST_ON_WRITEABLE = 19,
1120  LWS_EXT_CB_IS_WRITEABLE = 20,
1121  LWS_EXT_CB_PAYLOAD_TX = 21,
1122  LWS_EXT_CB_PAYLOAD_RX = 22,
1123  LWS_EXT_CB_OPTION_DEFAULT = 23,
1124  LWS_EXT_CB_OPTION_SET = 24,
1125  LWS_EXT_CB_OPTION_CONFIRM = 25,
1126  LWS_EXT_CB_NAMED_OPTION_SET = 26,
1127 
1128  /****** add new things just above ---^ ******/
1129 };
1130 
1137  /* Add new things just above here ---^
1138  * This is part of the ABI, don't needlessly break compatibility */
1139 };
1140 
1146  const char *name;
1149  /* Add new things just above here ---^
1150  * This is part of the ABI, don't needlessly break compatibility */
1151 };
1152 
1155  const char *option_name;
1157  const char *start;
1158  int len;
1159 };
1160 
1221 typedef int
1222 lws_extension_callback_function(struct lws_context *context,
1223  const struct lws_extension *ext, struct lws *wsi,
1224  enum lws_extension_callback_reasons reason,
1225  void *user, void *in, size_t len);
1226 
1229  const char *name;
1231  const char *client_offer;
1233  /* Add new things just above here ---^
1234  * This is part of the ABI, don't needlessly break compatibility */
1235 };
1236 
1245 LWS_VISIBLE LWS_EXTERN int
1246 lws_set_extension_option(struct lws *wsi, const char *ext_name,
1247  const char *opt_name, const char *opt_val);
1248 
1249 #ifndef LWS_NO_EXTENSIONS
1250 /* lws_get_internal_extensions() - DEPRECATED
1251  *
1252  * \Deprecated There is no longer a set internal extensions table. The table is provided
1253  * by user code along with application-specific settings. See the test
1254  * client and server for how to do.
1255  */
1256 static LWS_INLINE LWS_WARN_DEPRECATED const struct lws_extension *
1257 lws_get_internal_extensions(void) { return NULL; }
1258 
1269 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
1270 lws_ext_parse_options(const struct lws_extension *ext, struct lws *wsi,
1271  void *ext_user, const struct lws_ext_options *opts,
1272  const char *o, int len);
1273 #endif
1274 
1287 LWS_EXTERN
1289  struct lws_context *context, const struct lws_extension *ext,
1290  struct lws *wsi, enum lws_extension_callback_reasons reason,
1291  void *user, void *in, size_t len);
1292 
1293 /*
1294  * The internal exts are part of the public abi
1295  * If we add more extensions, publish the callback here ------v
1296  */
1298 
1314 
1319  const char *name;
1340  unsigned int id;
1347  void *user;
1350  /* Add new things just above here ---^
1351  * This is part of the ABI, don't needlessly break compatibility */
1352 };
1353 
1354 struct lws_vhost;
1355 
1364 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
1365 lws_vhost_name_to_protocol(struct lws_vhost *vh, const char *name);
1366 
1376 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
1377 lws_get_protocol(struct lws *wsi);
1378 
1380 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
1381 lws_protocol_get(struct lws *wsi) LWS_WARN_DEPRECATED;
1382 
1393 LWS_VISIBLE LWS_EXTERN void *
1394 lws_protocol_vh_priv_zalloc(struct lws_vhost *vhost, const struct lws_protocols *prot,
1395  int size);
1396 
1406 LWS_VISIBLE LWS_EXTERN void *
1407 lws_protocol_vh_priv_get(struct lws_vhost *vhost, const struct lws_protocols *prot);
1408 
1417 LWS_VISIBLE LWS_EXTERN int
1418 lws_finalize_startup(struct lws_context *context);
1419 
1420 #ifdef LWS_WITH_PLUGINS
1421 
1422 /* PLUGINS implies LIBUV */
1423 
1424 #define LWS_PLUGIN_API_MAGIC 180
1425 
1428  unsigned int api_magic;
1429  const struct lws_protocols *protocols;
1431  const struct lws_extension *extensions;
1433 };
1434 
1435 typedef int (*lws_plugin_init_func)(struct lws_context *,
1436  struct lws_plugin_capability *);
1437 typedef int (*lws_plugin_destroy_func)(struct lws_context *);
1438 
1440 struct lws_plugin {
1441  struct lws_plugin *list;
1442 #if (UV_VERSION_MAJOR > 0)
1443  uv_lib_t lib;
1444 #else
1445  void *l;
1446 #endif
1447  char name[64];
1449 };
1450 
1451 #endif
1452 
1454 
1455 
1464 
1466 #define LWSGS_EMAIL_CONTENT_SIZE 16384
1467 
1469 /* SHA-1 binary and hexified versions */
1471 typedef struct { unsigned char bin[20]; } lwsgw_hash_bin;
1473 typedef struct { char id[41]; } lwsgw_hash;
1474 
1481 };
1482 
1485  char username[32];
1486  char email[100];
1487  char ip[72];
1488  unsigned int mask;
1490  char session[42];
1491 };
1492 
1497 };
1498 
1501  enum lws_gs_event event;
1502  const char *username;
1503  const char *email;
1504 };
1505 
1507 
1508 
1522 
1524 /*
1525  * NOTE: These public enums are part of the abi. If you want to add one,
1526  * add it at where specified so existing users are unaffected.
1527  */
1528 
1532  (1 << 12),
1539  (1 << 12),
1555  (1 << 12),
1560  (1 << 12),
1591  /****** add new things just above ---^ ******/
1592 };
1593 
1594 #define lws_check_opt(c, f) (((c) & (f)) == (f))
1595 
1606  int port;
1611  const char *iface;
1618  const struct lws_protocols *protocols;
1622  const struct lws_extension *extensions;
1630  const char *ssl_cert_filepath;
1640  const char *ssl_ca_filepath;
1642  const char *ssl_cipher_list;
1646  const char *http_proxy_address;
1649  unsigned int http_proxy_port;
1651  int gid;
1653  int uid;
1655  unsigned int options;
1657  void *user;
1660  int ka_time;
1670 #ifdef LWS_OPENSSL_SUPPORT
1676 #else /* maintain structure layout either way */
1678 #endif
1679 
1690  unsigned int count_threads;
1692  unsigned int fd_limit_per_thread;
1696  unsigned int timeout_secs;
1701  const char *ecdh_curve;
1703  const char *vhost_name;
1707  const char * const *plugin_dirs;
1716  const char *log_filepath;
1719  const struct lws_http_mount *mounts;
1721  const char *server_string;
1724  unsigned int pt_serv_buf_size;
1739  unsigned short ws_ping_pong_interval;
1770  /* Add new things just above here ---^
1771  * This is part of the ABI, don't needlessly break compatibility
1772  *
1773  * The below is to ensure later library versions with new
1774  * members added above will see 0 (default) even if the app
1775  * was not built against the newer headers.
1776  */
1777 
1778  void *_unused[8];
1779 };
1780 
1815 LWS_VISIBLE LWS_EXTERN struct lws_context *
1817 
1826 LWS_VISIBLE LWS_EXTERN void
1827 lws_context_destroy(struct lws_context *context);
1828 
1829 LWS_VISIBLE LWS_EXTERN void
1830 lws_context_destroy2(struct lws_context *context);
1831 
1832 typedef int (*lws_reload_func)(void);
1833 
1858 LWS_VISIBLE LWS_EXTERN void
1859 lws_context_deprecate(struct lws_context *context, lws_reload_func cb);
1860 
1861 LWS_VISIBLE LWS_EXTERN int
1862 lws_context_is_deprecated(struct lws_context *context);
1863 
1881 LWS_VISIBLE LWS_EXTERN int
1882 lws_set_proxy(struct lws_vhost *vhost, const char *proxy);
1883 
1884 
1885 struct lws_vhost;
1886 
1896 LWS_EXTERN LWS_VISIBLE struct lws_vhost *
1897 lws_create_vhost(struct lws_context *context,
1898  struct lws_context_creation_info *info);
1899 
1914 LWS_VISIBLE LWS_EXTERN int
1915 lwsws_get_config_globals(struct lws_context_creation_info *info, const char *d,
1916  char **config_strings, int *len);
1917 
1933 LWS_VISIBLE LWS_EXTERN int
1934 lwsws_get_config_vhosts(struct lws_context *context,
1935  struct lws_context_creation_info *info, const char *d,
1936  char **config_strings, int *len);
1937 
1939 LWS_VISIBLE LWS_EXTERN struct lws_vhost *
1940 lws_vhost_get(struct lws *wsi) LWS_WARN_DEPRECATED;
1941 
1947 LWS_VISIBLE LWS_EXTERN struct lws_vhost *
1948 lws_get_vhost(struct lws *wsi);
1949 
1957 LWS_VISIBLE LWS_EXTERN int
1958 lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len);
1959 
1967 LWS_VISIBLE LWS_EXTERN int
1968 lws_json_dump_context(const struct lws_context *context, char *buf, int len,
1969  int hide_vhosts);
1970 
1980 LWS_VISIBLE LWS_EXTERN void *
1981 lws_context_user(struct lws_context *context);
1982 
1988 
1998  const char *name;
1999  const char *value;
2000 };
2001 
2014 };
2015 
2023  const char *mountpoint;
2025  const char *origin;
2027  const char *def;
2029  const char *protocol;
2045  unsigned int auth_mask;
2048  unsigned int cache_reusable:1;
2049  unsigned int cache_revalidate:1;
2050  unsigned int cache_intermediaries:1;
2052  unsigned char origin_protocol;
2053  unsigned char mountpoint_len;
2058  /* Add new things just above here ---^
2059  * This is part of the ABI, don't needlessly break compatibility
2060  *
2061  * The below is to ensure later library versions with new
2062  * members added above will see 0 (default) even if the app
2063  * was not built against the newer headers.
2064  */
2065 
2066  void *_unused[2];
2067 };
2070 
2076 
2084  LCCSCF_USE_SSL = (1 << 0),
2085  LCCSCF_ALLOW_SELFSIGNED = (1 << 1),
2086  LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK = (1 << 2),
2087  LCCSCF_ALLOW_EXPIRED = (1 << 3)
2088 };
2089 
2094  struct lws_context *context;
2096  const char *address;
2098  int port;
2102  const char *path;
2104  const char *host;
2106  const char *origin;
2108  const char *protocol;
2112  void *userdata;
2114  const void *client_exts;
2116  const char *method;
2119  struct lws *parent_wsi;
2123  const char *uri_replace_from;
2126  const char *uri_replace_to;
2128  struct lws_vhost *vhost;
2130  struct lws **pwsi;
2142  /* Add new things just above here ---^
2143  * This is part of the ABI, don't needlessly break compatibility
2144  *
2145  * The below is to ensure later library versions with new
2146  * members added above will see 0 (default) even if the app
2147  * was not built against the newer headers.
2148  */
2149 
2150  void *_unused[4];
2151 };
2152 
2160 LWS_VISIBLE LWS_EXTERN struct lws *
2162 
2183 /* deprecated, use lws_client_connect_via_info() */
2184 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
2185 lws_client_connect(struct lws_context *clients, const char *address,
2186  int port, int ssl_connection, const char *path,
2187  const char *host, const char *origin, const char *protocol,
2188  int ietf_version_or_minus_one) LWS_WARN_DEPRECATED;
2189 /* deprecated, use lws_client_connect_via_info() */
2210 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
2211 lws_client_connect_extended(struct lws_context *clients, const char *address,
2212  int port, int ssl_connection, const char *path,
2213  const char *host, const char *origin,
2214  const char *protocol, int ietf_version_or_minus_one,
2215  void *userdata) LWS_WARN_DEPRECATED;
2216 
2242 LWS_VISIBLE LWS_EXTERN int
2244  struct lws_vhost *vhost);
2245 
2246 LWS_VISIBLE LWS_EXTERN int
2247 lws_http_client_read(struct lws *wsi, char **buf, int *len);
2248 
2256 LWS_VISIBLE LWS_EXTERN unsigned int
2257 lws_http_client_http_response(struct lws *wsi);
2258 
2259 LWS_VISIBLE LWS_EXTERN void
2260 lws_client_http_body_pending(struct lws *wsi, int something_left_to_send);
2261 
2282 
2291 
2324 LWS_VISIBLE LWS_EXTERN int
2325 lws_service(struct lws_context *context, int timeout_ms);
2326 
2338 LWS_VISIBLE LWS_EXTERN int
2339 lws_service_tsi(struct lws_context *context, int timeout_ms, int tsi);
2340 
2356 LWS_VISIBLE LWS_EXTERN void
2357 lws_cancel_service_pt(struct lws *wsi);
2358 
2370 LWS_VISIBLE LWS_EXTERN void
2371 lws_cancel_service(struct lws_context *context);
2372 
2399 LWS_VISIBLE LWS_EXTERN int
2400 lws_service_fd(struct lws_context *context, struct lws_pollfd *pollfd);
2401 
2411 LWS_VISIBLE LWS_EXTERN int
2412 lws_service_fd_tsi(struct lws_context *context, struct lws_pollfd *pollfd,
2413  int tsi);
2414 
2432 LWS_VISIBLE LWS_EXTERN int
2433 lws_service_adjust_timeout(struct lws_context *context, int timeout_ms, int tsi);
2434 
2435 /* Backwards compatibility */
2436 #define lws_plat_service_tsi lws_service_tsi
2437 
2439 
2445 
2452 
2464 LWS_VISIBLE LWS_EXTERN const char *
2465 lws_get_mimetype(const char *file, const struct lws_http_mount *m);
2466 
2485 LWS_VISIBLE LWS_EXTERN int
2486 lws_serve_http_file(struct lws *wsi, const char *file, const char *content_type,
2487  const char *other_headers, int other_headers_len);
2488 LWS_VISIBLE LWS_EXTERN int
2489 lws_serve_http_file_fragment(struct lws *wsi);
2491 
2502 
2503 enum http_status {
2504  HTTP_STATUS_OK = 200,
2505  HTTP_STATUS_NO_CONTENT = 204,
2506  HTTP_STATUS_PARTIAL_CONTENT = 206,
2507 
2508  HTTP_STATUS_MOVED_PERMANENTLY = 301,
2509  HTTP_STATUS_FOUND = 302,
2510  HTTP_STATUS_SEE_OTHER = 303,
2511 
2512  HTTP_STATUS_BAD_REQUEST = 400,
2513  HTTP_STATUS_UNAUTHORIZED,
2514  HTTP_STATUS_PAYMENT_REQUIRED,
2515  HTTP_STATUS_FORBIDDEN,
2516  HTTP_STATUS_NOT_FOUND,
2517  HTTP_STATUS_METHOD_NOT_ALLOWED,
2518  HTTP_STATUS_NOT_ACCEPTABLE,
2519  HTTP_STATUS_PROXY_AUTH_REQUIRED,
2520  HTTP_STATUS_REQUEST_TIMEOUT,
2521  HTTP_STATUS_CONFLICT,
2522  HTTP_STATUS_GONE,
2523  HTTP_STATUS_LENGTH_REQUIRED,
2524  HTTP_STATUS_PRECONDITION_FAILED,
2525  HTTP_STATUS_REQ_ENTITY_TOO_LARGE,
2526  HTTP_STATUS_REQ_URI_TOO_LONG,
2527  HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE,
2528  HTTP_STATUS_REQ_RANGE_NOT_SATISFIABLE,
2529  HTTP_STATUS_EXPECTATION_FAILED,
2530 
2531  HTTP_STATUS_INTERNAL_SERVER_ERROR = 500,
2532  HTTP_STATUS_NOT_IMPLEMENTED,
2533  HTTP_STATUS_BAD_GATEWAY,
2534  HTTP_STATUS_SERVICE_UNAVAILABLE,
2535  HTTP_STATUS_GATEWAY_TIMEOUT,
2536  HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED,
2537 };
2538 
2540  char *p;
2541  int len;
2542  int max_len;
2543  int final;
2544 };
2545 
2546 typedef const char *(*lws_process_html_state_cb)(void *data, int index);
2547 
2549  char *start;
2550  char swallow[16];
2551  int pos;
2552  void *data;
2553  const char * const *vars;
2556  lws_process_html_state_cb replace;
2557 };
2558 
2563 LWS_VISIBLE LWS_EXTERN int
2565  struct lws_process_html_state *s);
2567 
2600 
2608 struct lws_tokens {
2609  char *token;
2611 };
2612 
2613 /* enum lws_token_indexes
2614  * these have to be kept in sync with lextable.h / minilex.c
2615  *
2616  * NOTE: These public enums are part of the abi. If you want to add one,
2617  * add it at where specified so existing users are unaffected.
2618  */
2619 enum lws_token_indexes {
2620  WSI_TOKEN_GET_URI = 0,
2621  WSI_TOKEN_POST_URI = 1,
2622  WSI_TOKEN_OPTIONS_URI = 2,
2623  WSI_TOKEN_HOST = 3,
2624  WSI_TOKEN_CONNECTION = 4,
2625  WSI_TOKEN_UPGRADE = 5,
2626  WSI_TOKEN_ORIGIN = 6,
2627  WSI_TOKEN_DRAFT = 7,
2628  WSI_TOKEN_CHALLENGE = 8,
2629  WSI_TOKEN_EXTENSIONS = 9,
2630  WSI_TOKEN_KEY1 = 10,
2631  WSI_TOKEN_KEY2 = 11,
2632  WSI_TOKEN_PROTOCOL = 12,
2633  WSI_TOKEN_ACCEPT = 13,
2634  WSI_TOKEN_NONCE = 14,
2635  WSI_TOKEN_HTTP = 15,
2636  WSI_TOKEN_HTTP2_SETTINGS = 16,
2637  WSI_TOKEN_HTTP_ACCEPT = 17,
2638  WSI_TOKEN_HTTP_AC_REQUEST_HEADERS = 18,
2639  WSI_TOKEN_HTTP_IF_MODIFIED_SINCE = 19,
2640  WSI_TOKEN_HTTP_IF_NONE_MATCH = 20,
2641  WSI_TOKEN_HTTP_ACCEPT_ENCODING = 21,
2642  WSI_TOKEN_HTTP_ACCEPT_LANGUAGE = 22,
2643  WSI_TOKEN_HTTP_PRAGMA = 23,
2644  WSI_TOKEN_HTTP_CACHE_CONTROL = 24,
2645  WSI_TOKEN_HTTP_AUTHORIZATION = 25,
2646  WSI_TOKEN_HTTP_COOKIE = 26,
2647  WSI_TOKEN_HTTP_CONTENT_LENGTH = 27,
2648  WSI_TOKEN_HTTP_CONTENT_TYPE = 28,
2649  WSI_TOKEN_HTTP_DATE = 29,
2650  WSI_TOKEN_HTTP_RANGE = 30,
2651  WSI_TOKEN_HTTP_REFERER = 31,
2652  WSI_TOKEN_KEY = 32,
2653  WSI_TOKEN_VERSION = 33,
2654  WSI_TOKEN_SWORIGIN = 34,
2655 
2656  WSI_TOKEN_HTTP_COLON_AUTHORITY = 35,
2657  WSI_TOKEN_HTTP_COLON_METHOD = 36,
2658  WSI_TOKEN_HTTP_COLON_PATH = 37,
2659  WSI_TOKEN_HTTP_COLON_SCHEME = 38,
2660  WSI_TOKEN_HTTP_COLON_STATUS = 39,
2661 
2662  WSI_TOKEN_HTTP_ACCEPT_CHARSET = 40,
2663  WSI_TOKEN_HTTP_ACCEPT_RANGES = 41,
2664  WSI_TOKEN_HTTP_ACCESS_CONTROL_ALLOW_ORIGIN = 42,
2665  WSI_TOKEN_HTTP_AGE = 43,
2666  WSI_TOKEN_HTTP_ALLOW = 44,
2667  WSI_TOKEN_HTTP_CONTENT_DISPOSITION = 45,
2668  WSI_TOKEN_HTTP_CONTENT_ENCODING = 46,
2669  WSI_TOKEN_HTTP_CONTENT_LANGUAGE = 47,
2670  WSI_TOKEN_HTTP_CONTENT_LOCATION = 48,
2671  WSI_TOKEN_HTTP_CONTENT_RANGE = 49,
2672  WSI_TOKEN_HTTP_ETAG = 50,
2673  WSI_TOKEN_HTTP_EXPECT = 51,
2674  WSI_TOKEN_HTTP_EXPIRES = 52,
2675  WSI_TOKEN_HTTP_FROM = 53,
2676  WSI_TOKEN_HTTP_IF_MATCH = 54,
2677  WSI_TOKEN_HTTP_IF_RANGE = 55,
2678  WSI_TOKEN_HTTP_IF_UNMODIFIED_SINCE = 56,
2679  WSI_TOKEN_HTTP_LAST_MODIFIED = 57,
2680  WSI_TOKEN_HTTP_LINK = 58,
2681  WSI_TOKEN_HTTP_LOCATION = 59,
2682  WSI_TOKEN_HTTP_MAX_FORWARDS = 60,
2683  WSI_TOKEN_HTTP_PROXY_AUTHENTICATE = 61,
2684  WSI_TOKEN_HTTP_PROXY_AUTHORIZATION = 62,
2685  WSI_TOKEN_HTTP_REFRESH = 63,
2686  WSI_TOKEN_HTTP_RETRY_AFTER = 64,
2687  WSI_TOKEN_HTTP_SERVER = 65,
2688  WSI_TOKEN_HTTP_SET_COOKIE = 66,
2689  WSI_TOKEN_HTTP_STRICT_TRANSPORT_SECURITY = 67,
2690  WSI_TOKEN_HTTP_TRANSFER_ENCODING = 68,
2691  WSI_TOKEN_HTTP_USER_AGENT = 69,
2692  WSI_TOKEN_HTTP_VARY = 70,
2693  WSI_TOKEN_HTTP_VIA = 71,
2694  WSI_TOKEN_HTTP_WWW_AUTHENTICATE = 72,
2695 
2696  WSI_TOKEN_PATCH_URI = 73,
2697  WSI_TOKEN_PUT_URI = 74,
2698  WSI_TOKEN_DELETE_URI = 75,
2699 
2700  WSI_TOKEN_HTTP_URI_ARGS = 76,
2701  WSI_TOKEN_PROXY = 77,
2702  WSI_TOKEN_HTTP_X_REAL_IP = 78,
2703  WSI_TOKEN_HTTP1_0 = 79,
2704  WSI_TOKEN_X_FORWARDED_FOR = 80,
2705 
2706  /****** add new things just above ---^ ******/
2707 
2708  /* use token storage to stash these internally, not for
2709  * user use */
2710 
2711  _WSI_TOKEN_CLIENT_SENT_PROTOCOLS,
2712  _WSI_TOKEN_CLIENT_PEER_ADDRESS,
2713  _WSI_TOKEN_CLIENT_URI,
2714  _WSI_TOKEN_CLIENT_HOST,
2715  _WSI_TOKEN_CLIENT_ORIGIN,
2716  _WSI_TOKEN_CLIENT_METHOD,
2717 
2718  /* always last real token index*/
2719  WSI_TOKEN_COUNT,
2720 
2721  /* parser state additions, no storage associated */
2722  WSI_TOKEN_NAME_PART,
2723  WSI_TOKEN_SKIPPING,
2724  WSI_TOKEN_SKIPPING_SAW_CR,
2725  WSI_PARSING_COMPLETE,
2726  WSI_INIT_TOKEN_MUXURL,
2727 };
2728 
2730  unsigned short token_limit[WSI_TOKEN_COUNT];
2731 };
2732 
2738 LWS_VISIBLE LWS_EXTERN const unsigned char *
2739 lws_token_to_string(enum lws_token_indexes token);
2740 
2741 
2750 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
2751 lws_hdr_total_length(struct lws *wsi, enum lws_token_indexes h);
2752 
2762 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
2763 lws_hdr_fragment_length(struct lws *wsi, enum lws_token_indexes h, int frag_idx);
2764 
2778 LWS_VISIBLE LWS_EXTERN int
2779 lws_hdr_copy(struct lws *wsi, char *dest, int len, enum lws_token_indexes h);
2780 
2798 LWS_VISIBLE LWS_EXTERN int
2799 lws_hdr_copy_fragment(struct lws *wsi, char *dest, int len,
2800  enum lws_token_indexes h, int frag_idx);
2801 
2812 LWS_VISIBLE LWS_EXTERN const char *
2813 lws_get_urlarg_by_name(struct lws *wsi, const char *name, char *buf, int len);
2815 
2830 
2841 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
2842 lws_add_http_header_status(struct lws *wsi,
2843  unsigned int code, unsigned char **p,
2844  unsigned char *end);
2857 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
2858 lws_add_http_header_by_name(struct lws *wsi, const unsigned char *name,
2859  const unsigned char *value, int length,
2860  unsigned char **p, unsigned char *end);
2874 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
2875 lws_add_http_header_by_token(struct lws *wsi, enum lws_token_indexes token,
2876  const unsigned char *value, int length,
2877  unsigned char **p, unsigned char *end);
2888 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
2889 lws_add_http_header_content_length(struct lws *wsi,
2890  unsigned long content_length,
2891  unsigned char **p, unsigned char *end);
2901 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
2902 lws_finalize_http_header(struct lws *wsi, unsigned char **p,
2903  unsigned char *end);
2905 
2924 
2934 };
2935 
2949 typedef int (*lws_spa_fileupload_cb)(void *data, const char *name,
2950  const char *filename, char *buf, int len,
2951  enum lws_spa_fileupload_states state);
2952 
2955 struct lws_spa;
2956 
2975 LWS_VISIBLE LWS_EXTERN struct lws_spa *
2976 lws_spa_create(struct lws *wsi, const char * const *param_names,
2977  int count_params, int max_storage, lws_spa_fileupload_cb opt_cb,
2978  void *opt_data);
2979 
2987 LWS_VISIBLE LWS_EXTERN int
2988 lws_spa_process(struct lws_spa *spa, const char *in, int len);
2989 
2995 LWS_VISIBLE LWS_EXTERN int
2996 lws_spa_finalize(struct lws_spa *spa);
2997 
3004 LWS_VISIBLE LWS_EXTERN int
3005 lws_spa_get_length(struct lws_spa *spa, int n);
3006 
3012 LWS_VISIBLE LWS_EXTERN const char *
3013 lws_spa_get_string(struct lws_spa *spa, int n);
3014 
3020 LWS_VISIBLE LWS_EXTERN int
3021 lws_spa_destroy(struct lws_spa *spa);
3023 
3034 
3045 LWS_VISIBLE LWS_EXTERN const char *
3046 lws_urlencode(char *escaped, const char *string, int len);
3047 
3048 /*
3049  * URLDECODE 1 / 2
3050  *
3051  * This simple urldecode only operates until the first '\0' and requires the
3052  * data to exist all at once
3053  */
3066 LWS_VISIBLE LWS_EXTERN int
3067 lws_urldecode(char *string, const char *escaped, int len);
3069 
3078 LWS_VISIBLE LWS_EXTERN int
3079 lws_return_http_status(struct lws *wsi, unsigned int code,
3080  const char *html_body);
3081 
3092 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
3093 lws_http_redirect(struct lws *wsi, int code, const unsigned char *loc, int len,
3094  unsigned char **p, unsigned char *end);
3095 
3104 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
3105 lws_http_transaction_completed(struct lws *wsi);
3107 
3115 
3126 LWS_VISIBLE LWS_EXTERN const char *
3127 lws_sql_purify(char *escaped, const char *string, int len);
3128 
3139 LWS_VISIBLE LWS_EXTERN const char *
3140 lws_json_purify(char *escaped, const char *string, int len);
3142 
3149 
3151 #ifdef LWS_USE_LIBEV
3152 typedef void (lws_ev_signal_cb_t)(EV_P_ struct ev_signal *w, int revents);
3153 
3154 LWS_VISIBLE LWS_EXTERN int
3155 lws_ev_sigint_cfg(struct lws_context *context, int use_ev_sigint,
3156  lws_ev_signal_cb_t *cb);
3157 
3158 LWS_VISIBLE LWS_EXTERN int
3159 lws_ev_initloop(struct lws_context *context, struct ev_loop *loop, int tsi);
3160 
3161 LWS_VISIBLE LWS_EXTERN void
3162 lws_ev_sigint_cb(struct ev_loop *loop, struct ev_signal *watcher, int revents);
3163 #endif /* LWS_USE_LIBEV */
3164 
3166 
3173 #ifdef LWS_USE_LIBUV
3175 LWS_VISIBLE LWS_EXTERN int
3176 lws_uv_sigint_cfg(struct lws_context *context, int use_uv_sigint,
3177  uv_signal_cb cb);
3178 
3179 LWS_VISIBLE LWS_EXTERN void
3180 lws_libuv_run(const struct lws_context *context, int tsi);
3181 
3182 LWS_VISIBLE LWS_EXTERN void
3183 lws_libuv_stop(struct lws_context *context);
3184 
3185 LWS_VISIBLE LWS_EXTERN void
3186 lws_libuv_stop_without_kill(const struct lws_context *context, int tsi);
3187 
3188 LWS_VISIBLE LWS_EXTERN int
3189 lws_uv_initloop(struct lws_context *context, uv_loop_t *loop, int tsi);
3190 
3191 LWS_VISIBLE LWS_EXTERN uv_loop_t *
3192 lws_uv_getloop(struct lws_context *context, int tsi);
3193 
3194 LWS_VISIBLE LWS_EXTERN void
3195 lws_uv_sigint_cb(uv_signal_t *watcher, int signum);
3196 #endif /* LWS_USE_LIBUV */
3197 
3204 
3205 /*
3206  * NOTE: These public enums are part of the abi. If you want to add one,
3207  * add it at where specified so existing users are unaffected.
3208  */
3209 enum pending_timeout {
3210  NO_PENDING_TIMEOUT = 0,
3211  PENDING_TIMEOUT_AWAITING_PROXY_RESPONSE = 1,
3212  PENDING_TIMEOUT_AWAITING_CONNECT_RESPONSE = 2,
3213  PENDING_TIMEOUT_ESTABLISH_WITH_SERVER = 3,
3214  PENDING_TIMEOUT_AWAITING_SERVER_RESPONSE = 4,
3215  PENDING_TIMEOUT_AWAITING_PING = 5,
3216  PENDING_TIMEOUT_CLOSE_ACK = 6,
3217  PENDING_TIMEOUT_AWAITING_EXTENSION_CONNECT_RESPONSE = 7,
3218  PENDING_TIMEOUT_SENT_CLIENT_HANDSHAKE = 8,
3219  PENDING_TIMEOUT_SSL_ACCEPT = 9,
3220  PENDING_TIMEOUT_HTTP_CONTENT = 10,
3221  PENDING_TIMEOUT_AWAITING_CLIENT_HS_SEND = 11,
3222  PENDING_FLUSH_STORED_SEND_BEFORE_CLOSE = 12,
3223  PENDING_TIMEOUT_SHUTDOWN_FLUSH = 13,
3224  PENDING_TIMEOUT_CGI = 14,
3225  PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE = 15,
3226  PENDING_TIMEOUT_WS_PONG_CHECK_SEND_PING = 16,
3227  PENDING_TIMEOUT_WS_PONG_CHECK_GET_PONG = 17,
3228  PENDING_TIMEOUT_CLIENT_ISSUE_PAYLOAD = 18,
3229 
3230  /****** add new things just above ---^ ******/
3231 };
3232 
3242 LWS_VISIBLE LWS_EXTERN void
3243 lws_set_timeout(struct lws *wsi, enum pending_timeout reason, int secs);
3245 
3251 #if !defined(LWS_SIZEOFPTR)
3252 #define LWS_SIZEOFPTR (sizeof (void *))
3253 #endif
3254 #if !defined(u_int64_t)
3255 #define u_int64_t unsigned long long
3256 #endif
3257 
3258 #if defined(__x86_64__)
3259 #define _LWS_PAD_SIZE 16 /* Intel recommended for best performance */
3260 #else
3261 #define _LWS_PAD_SIZE LWS_SIZEOFPTR /* Size of a pointer on the target arch */
3262 #endif
3263 #define _LWS_PAD(n) (((n) % _LWS_PAD_SIZE) ? \
3264  ((n) + (_LWS_PAD_SIZE - ((n) % _LWS_PAD_SIZE))) : (n))
3265 #define LWS_PRE _LWS_PAD(4 + 10)
3266 /* used prior to 1.7 and retained for backward compatibility */
3267 #define LWS_SEND_BUFFER_PRE_PADDING LWS_PRE
3268 #define LWS_SEND_BUFFER_POST_PADDING 0
3269 
3270 /*
3271  * NOTE: These public enums are part of the abi. If you want to add one,
3272  * add it at where specified so existing users are unaffected.
3273  */
3288  /* LWS_WRITE_CLOSE is handled by lws_close_reason() */
3289  LWS_WRITE_PING = 5,
3290  LWS_WRITE_PONG = 6,
3291 
3292  /* Same as write_http but we know this write ends the transaction */
3293  LWS_WRITE_HTTP_FINAL = 7,
3294 
3295  /* HTTP2 */
3296 
3304  /****** add new things just above ---^ ******/
3305 
3306  /* flags */
3307 
3315 };
3316 
3317 
3404 LWS_VISIBLE LWS_EXTERN int
3405 lws_write(struct lws *wsi, unsigned char *buf, size_t len,
3406  enum lws_write_protocol protocol);
3407 
3408 /* helper for case where buffer may be const */
3409 #define lws_write_http(wsi, buf, len) \
3410  lws_write(wsi, (unsigned char *)(buf), len, LWS_WRITE_HTTP)
3411 
3431 
3444 LWS_VISIBLE LWS_EXTERN int
3445 lws_callback_on_writable(struct lws *wsi);
3446 
3460 LWS_VISIBLE LWS_EXTERN int
3461 lws_callback_on_writable_all_protocol(const struct lws_context *context,
3462  const struct lws_protocols *protocol);
3463 
3477 LWS_VISIBLE LWS_EXTERN int
3478 lws_callback_on_writable_all_protocol_vhost(const struct lws_vhost *vhost,
3479  const struct lws_protocols *protocol);
3480 
3493 LWS_VISIBLE LWS_EXTERN int
3494 lws_callback_all_protocol(struct lws_context *context,
3495  const struct lws_protocols *protocol, int reason);
3496 
3509 LWS_VISIBLE LWS_EXTERN int
3510 lws_callback_all_protocol_vhost(struct lws_vhost *vh,
3511  const struct lws_protocols *protocol, int reason);
3512 
3526 LWS_VISIBLE LWS_EXTERN int
3527 lws_callback_vhost_protocols(struct lws *wsi, int reason, void *in, int len);
3528 
3529 LWS_VISIBLE LWS_EXTERN int
3530 lws_callback_http_dummy(struct lws *wsi, enum lws_callback_reasons reason,
3531  void *user, void *in, size_t len);
3532 
3540 LWS_VISIBLE LWS_EXTERN int
3541 lws_get_socket_fd(struct lws *wsi);
3542 
3564 LWS_VISIBLE LWS_EXTERN size_t
3565 lws_get_peer_write_allowance(struct lws *wsi);
3567 
3578 LWS_VISIBLE LWS_EXTERN int
3579 lws_rx_flow_control(struct lws *wsi, int enable);
3580 
3590 LWS_VISIBLE LWS_EXTERN void
3591 lws_rx_flow_allow_all_protocol(const struct lws_context *context,
3592  const struct lws_protocols *protocol);
3593 
3610 LWS_VISIBLE LWS_EXTERN size_t
3611 lws_remaining_packet_payload(struct lws *wsi);
3612 
3613 
3622 
3636 LWS_VISIBLE LWS_EXTERN struct lws *
3637 lws_adopt_socket(struct lws_context *context, lws_sockfd_type accept_fd);
3650 LWS_VISIBLE LWS_EXTERN struct lws *
3651 lws_adopt_socket_vhost(struct lws_vhost *vh, lws_sockfd_type accept_fd);
3675 LWS_VISIBLE LWS_EXTERN struct lws *
3676 lws_adopt_socket_readbuf(struct lws_context *context, lws_sockfd_type accept_fd,
3677  const char *readbuf, size_t len);
3701 LWS_VISIBLE LWS_EXTERN struct lws *
3702 lws_adopt_socket_vhost_readbuf(struct lws_vhost *vhost, lws_sockfd_type accept_fd,
3703  const char *readbuf, size_t len);
3705 
3711 
3722 LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT
3723 lws_canonical_hostname(struct lws_context *context);
3724 
3739 LWS_VISIBLE LWS_EXTERN void
3740 lws_get_peer_addresses(struct lws *wsi, lws_sockfd_type fd, char *name,
3741  int name_len, char *rip, int rip_len);
3742 
3753 LWS_VISIBLE LWS_EXTERN const char *
3754 lws_get_peer_simple(struct lws *wsi, char *name, int namelen);
3755 #ifndef LWS_WITH_ESP8266
3756 
3767 LWS_VISIBLE LWS_EXTERN int
3768 lws_interface_to_sa(int ipv6, const char *ifname, struct sockaddr_in *addr,
3769  size_t addrlen);
3771 #endif
3772 
3778 
3791 LWS_VISIBLE LWS_EXTERN int
3792 lws_snprintf(char *str, size_t size, const char *format, ...) LWS_FORMAT(3);
3793 
3805 LWS_VISIBLE LWS_EXTERN int
3806 lws_get_random(struct lws_context *context, void *buf, int len);
3814 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
3815 lws_daemonize(const char *_lock_path);
3821 LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT
3823 
3830 LWS_VISIBLE LWS_EXTERN void *
3831 lws_wsi_user(struct lws *wsi);
3832 
3844 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
3845 lws_parse_uri(char *p, const char **prot, const char **ads, int *port,
3846  const char **path);
3847 
3851 LWS_VISIBLE LWS_EXTERN unsigned long
3852 lws_now_secs(void);
3853 
3863 LWS_VISIBLE LWS_EXTERN struct lws_context * LWS_WARN_UNUSED_RESULT
3864 lws_get_context(const struct lws *wsi);
3865 
3875 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
3876 lws_get_count_threads(struct lws_context *context);
3877 
3885 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
3886 lws_get_parent(const struct lws *wsi);
3887 
3894 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
3895 lws_get_child(const struct lws *wsi);
3896 
3897 
3898 /*
3899  * \deprecated DEPRECATED Note: this is not normally needed as a user api.
3900  * It's provided in case it is
3901  * useful when integrating with other app poll loop service code.
3902  */
3903 LWS_VISIBLE LWS_EXTERN int
3904 lws_read(struct lws *wsi, unsigned char *buf, size_t len);
3905 
3913 LWS_VISIBLE LWS_EXTERN void
3914 lws_set_allocator(void *(*realloc)(void *ptr, size_t size));
3916 
3922 
3929 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
3930 lws_send_pipe_choked(struct lws *wsi);
3931 
3936 LWS_VISIBLE LWS_EXTERN int
3937 lws_is_final_fragment(struct lws *wsi);
3938 
3943 LWS_VISIBLE LWS_EXTERN unsigned char
3944 lws_get_reserved_bits(struct lws *wsi);
3945 
3962 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
3963 lws_partial_buffered(struct lws *wsi);
3964 
3974 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
3975 lws_frame_is_binary(struct lws *wsi);
3976 
3985 LWS_VISIBLE LWS_EXTERN int
3986 lws_is_ssl(struct lws *wsi);
3991 LWS_VISIBLE LWS_EXTERN int
3992 lws_is_cgi(struct lws *wsi);
3993 
3994 #ifdef LWS_OPENSSL_SUPPORT
3995 
4001 LWS_VISIBLE LWS_EXTERN SSL*
4002 lws_get_ssl(struct lws *wsi);
4003 #endif
4004 
4006 
4012 #ifdef LWS_SHA1_USE_OPENSSL_NAME
4014 #define lws_SHA1 SHA1
4015 #else
4016 
4025 LWS_VISIBLE LWS_EXTERN unsigned char *
4026 lws_SHA1(const unsigned char *d, size_t n, unsigned char *md);
4027 #endif
4028 
4038 LWS_VISIBLE LWS_EXTERN int
4039 lws_b64_encode_string(const char *in, int in_len, char *out, int out_size);
4049 LWS_VISIBLE LWS_EXTERN int
4050 lws_b64_decode_string(const char *in, char *out, int out_size);
4052 
4053 
4063 #ifdef LWS_WITH_CGI
4064 enum lws_enum_stdinouterr {
4065  LWS_STDIN = 0,
4066  LWS_STDOUT = 1,
4067  LWS_STDERR = 2,
4068 };
4069 
4070 enum lws_cgi_hdr_state {
4071  LCHS_HEADER,
4072  LCHS_CR1,
4073  LCHS_LF1,
4074  LCHS_CR2,
4075  LCHS_LF2,
4076  LHCS_PAYLOAD,
4077  LCHS_SINGLE_0A,
4078 };
4079 
4081  struct lws **stdwsi;
4082  enum lws_enum_stdinouterr ch;
4083  unsigned char *data;
4084  enum lws_cgi_hdr_state hdr_state;
4085  int len;
4086 };
4087 
4088 
4098 LWS_VISIBLE LWS_EXTERN int
4099 lws_cgi(struct lws *wsi, const char * const *exec_array,
4100  int script_uri_path_len, int timeout_secs,
4101  const struct lws_protocol_vhost_options *mp_cgienv);
4102 
4108 LWS_VISIBLE LWS_EXTERN int
4109 lws_cgi_write_split_stdout_headers(struct lws *wsi);
4110 
4116 LWS_VISIBLE LWS_EXTERN int
4117 lws_cgi_kill(struct lws *wsi);
4118 #endif
4119 
4121 
4138 
4145  lws_filefd_type (*open)(struct lws *wsi, const char *filename,
4146  unsigned long *filelen, int flags);
4150  int (*close)(struct lws *wsi, lws_filefd_type fd);
4152  unsigned long (*seek_cur)(struct lws *wsi, lws_filefd_type fd,
4153  long offset_from_cur_pos);
4155  int (*read)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
4156  unsigned char *buf, unsigned long len);
4158  int (*write)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
4159  unsigned char *buf, unsigned long len);
4162  /* Add new things just above here ---^
4163  * This is part of the ABI, don't needlessly break compatibility */
4164 };
4165 
4171 LWS_VISIBLE LWS_EXTERN struct lws_plat_file_ops * LWS_WARN_UNUSED_RESULT
4172 lws_get_fops(struct lws_context *context);
4173 
4182 static LWS_INLINE lws_filefd_type LWS_WARN_UNUSED_RESULT
4183 lws_plat_file_open(struct lws *wsi, const char *filename,
4184  unsigned long *filelen, int flags)
4185 {
4186  return lws_get_fops(lws_get_context(wsi))->open(wsi, filename,
4187  filelen, flags);
4188 }
4189 
4196 static LWS_INLINE int
4197 lws_plat_file_close(struct lws *wsi, lws_filefd_type fd)
4198 {
4199  return lws_get_fops(lws_get_context(wsi))->close(wsi, fd);
4200 }
4201 
4209 static LWS_INLINE unsigned long
4210 lws_plat_file_seek_cur(struct lws *wsi, lws_filefd_type fd, long offset)
4211 {
4212  return lws_get_fops(lws_get_context(wsi))->seek_cur(wsi, fd, offset);
4213 }
4223 static LWS_INLINE int LWS_WARN_UNUSED_RESULT
4224 lws_plat_file_read(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
4225  unsigned char *buf, unsigned long len)
4226 {
4227  return lws_get_fops(lws_get_context(wsi))->read(wsi, fd, amount, buf,
4228  len);
4229 }
4239 static LWS_INLINE int LWS_WARN_UNUSED_RESULT
4240 lws_plat_file_write(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
4241  unsigned char *buf, unsigned long len)
4242 {
4243  return lws_get_fops(lws_get_context(wsi))->write(wsi, fd, amount, buf,
4244  len);
4245 }
4247 
4279 #ifdef LWS_WITH_SMTP
4280 
4292 };
4293 
4295 struct lws_email {
4296  void *data;
4298  uv_loop_t *loop;
4301  char email_smtp_ip[32];
4302  char email_helo[32];
4303  char email_from[100];
4304  char email_to[100];
4306  unsigned int max_content_size;
4309  /* Fill all the callbacks before init */
4310 
4311  int (*on_next)(struct lws_email *email);
4316  int (*on_sent)(struct lws_email *email);
4321  int (*on_get_body)(struct lws_email *email, char *buf, int len);
4327  /* private things */
4328  uv_timer_t timeout_email;
4330  uv_connect_t email_connect_req;
4331  uv_tcp_t email_client;
4333  char email_buf[256];
4334  char *content;
4335 };
4336 
4346 LWS_VISIBLE LWS_EXTERN int
4347 lws_email_init(struct lws_email *email, uv_loop_t *loop, int max_content);
4348 
4357 LWS_VISIBLE LWS_EXTERN void
4358 lws_email_check(struct lws_email *email);
4366 LWS_VISIBLE LWS_EXTERN void
4367 lws_email_destroy(struct lws_email *email);
4368 
4369 #endif
4370 
4371 
4372 #ifdef __cplusplus
4373 }
4374 #endif
4375 
4376 #endif
LWS_VISIBLE LWS_EXTERN int lws_spa_destroy(struct lws_spa *spa)
+Go to the documentation of this file.
1 /*
2  * libwebsockets - small server side websockets and web server implementation
3  *
4  * Copyright (C) 2010-2016 Andy Green <andy@warmcat.com>
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation:
9  * version 2.1 of the License.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19  * MA 02110-1301 USA
20  */
21 
24 #ifndef LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C
25 #define LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C
26 
27 #ifdef __cplusplus
28 #include <cstddef>
29 #include <cstdarg>
30 #ifdef MBED_OPERATORS
31 #include "mbed-drivers/mbed.h"
32 #include "sal-iface-eth/EthernetInterface.h"
33 #include "sockets/TCPListener.h"
34 #include "sal-stack-lwip/lwipv4_init.h"
35 
36 namespace {
37 }
38 using namespace mbed::Sockets::v0;
39 
40 
41 struct sockaddr_in;
42 struct lws;
43 
44 class lws_conn {
45  public:
46  lws_conn():
47  ts(NULL),
48  wsi(NULL),
49  writeable(1),
50  awaiting_on_writeable(0)
51  {
52  }
53 
54 public:
55  void set_wsi(struct lws *_wsi) { wsi = _wsi; }
56  int actual_onRX(Socket *s);
57  void onRX(Socket *s);
58  void onError(Socket *s, socket_error_t err);
59  void onDisconnect(TCPStream *s);
60  void onSent(Socket *s, uint16_t len);
61  void serialized_writeable(struct lws *wsi);
62 
63 public:
64  TCPStream *ts;
65 
66 public:
67  struct lws *wsi;
68  char writeable;
69  char awaiting_on_writeable;
70 };
71 
73 public:
75  srv(SOCKET_STACK_LWIP_IPV4)
76  {
77  srv.setOnError(TCPStream::ErrorHandler_t(this,
79  }
80 
81  void start(const uint16_t port);
83 protected:
84  void onRX(Socket *s);
85  void onError(Socket *s, socket_error_t err);
86  void onIncoming(TCPListener *s, void *impl);
87  void onDisconnect(TCPStream *s);
89 public:
90  TCPListener srv;
91 };
92 
93 #endif
94 
95 extern "C" {
96 #else
97 #include <stdarg.h>
98 #endif
99 
100 #if defined(MBED_OPERATORS) || defined(LWS_WITH_ESP8266)
101 struct sockaddr_in;
102 #define LWS_POSIX 0
103 #else
104 #define LWS_POSIX 1
105 #endif
106 
107 #include "lws_config.h"
108 
109 #if defined(WIN32) || defined(_WIN32)
110 #ifndef WIN32_LEAN_AND_MEAN
111 #define WIN32_LEAN_AND_MEAN
112 #endif
113 
114 #include <winsock2.h>
115 #include <ws2tcpip.h>
116 #include <stddef.h>
117 #include <basetsd.h>
118 #ifndef _WIN32_WCE
119 #include <fcntl.h>
120 #else
121 #define _O_RDONLY 0x0000
122 #define O_RDONLY _O_RDONLY
123 #endif
124 
125 // Visual studio older than 2015 and WIN_CE has only _stricmp
126 #if (defined(_MSC_VER) && _MSC_VER < 1900) || defined(_WIN32_WCE)
127 #define strcasecmp _stricmp
128 #elif !defined(__MINGW32__)
129 #define strcasecmp stricmp
130 #endif
131 #define getdtablesize() 30000
132 
133 #define LWS_INLINE __inline
134 #define LWS_VISIBLE
135 #define LWS_WARN_UNUSED_RESULT
136 #define LWS_WARN_DEPRECATED
137 #define LWS_FORMAT(string_index)
138 
139 #ifdef LWS_DLL
140 #ifdef LWS_INTERNAL
141 #define LWS_EXTERN extern __declspec(dllexport)
142 #else
143 #define LWS_EXTERN extern __declspec(dllimport)
144 #endif
145 #else
146 #define LWS_EXTERN
147 #endif
148 
149 #define LWS_INVALID_FILE INVALID_HANDLE_VALUE
150 #define LWS_O_RDONLY _O_RDONLY
151 
152 #if !defined(__MINGW32__) && (!defined(_MSC_VER) || _MSC_VER < 1900) /* Visual Studio 2015 already defines this in <stdio.h> */
153 #define lws_snprintf _snprintf
154 #endif
155 
156 #ifndef __func__
157 #define __func__ __FUNCTION__
158 #endif
159 
160 #else /* NOT WIN32 */
161 #include <unistd.h>
162 
163 #if defined(__NetBSD__) || defined(__FreeBSD__)
164 #include <netinet/in.h>
165 #endif
166 
167 #define LWS_INLINE inline
168 #define LWS_O_RDONLY O_RDONLY
169 
170 #if !defined(MBED_OPERATORS) && !defined(LWS_WITH_ESP8266) && !defined(OPTEE_TA)
171 #include <poll.h>
172 #include <netdb.h>
173 #define LWS_INVALID_FILE -1
174 #else
175 #define getdtablesize() (20)
176 #define LWS_INVALID_FILE NULL
177 #endif
178 
179 #if defined(__GNUC__)
180 
181 /* warn_unused_result attribute only supported by GCC 3.4 or later */
182 #if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
183 #define LWS_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
184 #else
185 #define LWS_WARN_UNUSED_RESULT
186 #endif
187 
188 #define LWS_VISIBLE __attribute__((visibility("default")))
189 #define LWS_WARN_DEPRECATED __attribute__ ((deprecated))
190 #define LWS_FORMAT(string_index) __attribute__ ((format(printf, string_index, string_index+1)))
191 #else
192 #define LWS_VISIBLE
193 #define LWS_WARN_UNUSED_RESULT
194 #define LWS_WARN_DEPRECATED
195 #define LWS_FORMAT(string_index)
196 #endif
197 
198 #if defined(__ANDROID__)
199 #include <unistd.h>
200 #define getdtablesize() sysconf(_SC_OPEN_MAX)
201 #endif
202 
203 #endif
204 
205 #ifdef LWS_USE_LIBEV
206 #include <ev.h>
207 #endif /* LWS_USE_LIBEV */
208 #ifdef LWS_USE_LIBUV
209 #include <uv.h>
210 #ifdef LWS_HAVE_UV_VERSION_H
211 #include <uv-version.h>
212 #endif
213 #endif /* LWS_USE_LIBUV */
214 
215 #ifndef LWS_EXTERN
216 #define LWS_EXTERN extern
217 #endif
218 
219 #ifdef _WIN32
220 #define random rand
221 #else
222 #if !defined(OPTEE_TA)
223 #include <sys/time.h>
224 #include <unistd.h>
225 #endif
226 #endif
227 
228 #ifdef LWS_OPENSSL_SUPPORT
229 
230 #ifdef USE_WOLFSSL
231 #ifdef USE_OLD_CYASSL
232 #include <cyassl/openssl/ssl.h>
233 #include <cyassl/error-ssl.h>
234 #else
235 #include <wolfssl/openssl/ssl.h>
236 #include <wolfssl/error-ssl.h>
237 #endif /* not USE_OLD_CYASSL */
238 #else
239 #if defined(LWS_USE_POLARSSL)
240 #include <polarssl/ssl.h>
242  x509_crt ca;
243  x509_crt certificate;
244  rsa_context key;
245 };
246 typedef struct lws_polarssl_context SSL_CTX;
247 typedef ssl_context SSL;
248 #else
249 #if defined(LWS_USE_MBEDTLS)
250 #include <mbedtls/ssl.h>
251 #else
252 #include <openssl/ssl.h>
253 #include <openssl/err.h>
254 #endif /* not USE_MBEDTLS */
255 #endif /* not USE_POLARSSL */
256 #endif /* not USE_WOLFSSL */
257 #endif
258 
259 
260 #define CONTEXT_PORT_NO_LISTEN -1
261 #define CONTEXT_PORT_NO_LISTEN_SERVER -2
262 
273 
275 enum lws_log_levels {
276  LLL_ERR = 1 << 0,
277  LLL_WARN = 1 << 1,
278  LLL_NOTICE = 1 << 2,
279  LLL_INFO = 1 << 3,
280  LLL_DEBUG = 1 << 4,
281  LLL_PARSER = 1 << 5,
282  LLL_HEADER = 1 << 6,
283  LLL_EXT = 1 << 7,
284  LLL_CLIENT = 1 << 8,
285  LLL_LATENCY = 1 << 9,
286  LLL_USER = 1 << 10,
287 
288  LLL_COUNT = 11 /* set to count of valid flags */
289 };
290 
291 LWS_VISIBLE LWS_EXTERN void _lws_log(int filter, const char *format, ...) LWS_FORMAT(2);
292 LWS_VISIBLE LWS_EXTERN void _lws_logv(int filter, const char *format, va_list vl);
302 LWS_VISIBLE LWS_EXTERN int
303 lwsl_timestamp(int level, char *p, int len);
304 
305 /* these guys are unconditionally included */
306 
307 #define lwsl_err(...) _lws_log(LLL_ERR, __VA_ARGS__)
308 #define lwsl_user(...) _lws_log(LLL_USER, __VA_ARGS__)
309 
310 #if !defined(LWS_WITH_NO_LOGS)
311 /* notice and warn are usually included by being compiled in */
312 #define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__)
313 #define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__)
314 #endif
315 /*
316  * weaker logging can be deselected by telling CMake to build in RELEASE mode
317  * that gets rid of the overhead of checking while keeping _warn and _err
318  * active
319  */
320 
321 #if defined(LWS_WITH_ESP8266)
322 #undef _DEBUG
323 #endif
324 
325 #ifdef _DEBUG
326 #if defined(LWS_WITH_NO_LOGS)
327 /* notice, warn and log are always compiled in */
328 #define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__)
329 #define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__)
330 #endif
331 #define lwsl_info(...) _lws_log(LLL_INFO, __VA_ARGS__)
332 #define lwsl_debug(...) _lws_log(LLL_DEBUG, __VA_ARGS__)
333 #define lwsl_parser(...) _lws_log(LLL_PARSER, __VA_ARGS__)
334 #define lwsl_header(...) _lws_log(LLL_HEADER, __VA_ARGS__)
335 #define lwsl_ext(...) _lws_log(LLL_EXT, __VA_ARGS__)
336 #define lwsl_client(...) _lws_log(LLL_CLIENT, __VA_ARGS__)
337 #define lwsl_latency(...) _lws_log(LLL_LATENCY, __VA_ARGS__)
338 
344 LWS_VISIBLE LWS_EXTERN void lwsl_hexdump(void *buf, size_t len);
345 
346 #else /* no debug */
347 #if defined(LWS_WITH_NO_LOGS)
348 #define lwsl_warn(...) do {} while(0)
349 #define lwsl_notice(...) do {} while(0)
350 #endif
351 #define lwsl_info(...) do {} while(0)
352 #define lwsl_debug(...) do {} while(0)
353 #define lwsl_parser(...) do {} while(0)
354 #define lwsl_header(...) do {} while(0)
355 #define lwsl_ext(...) do {} while(0)
356 #define lwsl_client(...) do {} while(0)
357 #define lwsl_latency(...) do {} while(0)
358 #define lwsl_hexdump(a, b)
359 
360 #endif
361 
372 LWS_VISIBLE LWS_EXTERN void
373 lws_set_log_level(int level,
374  void (*log_emit_function)(int level, const char *line));
375 
385 LWS_VISIBLE LWS_EXTERN void
386 lwsl_emit_syslog(int level, const char *line);
387 
389 
390 
391 #include <stddef.h>
392 
393 #ifndef lws_container_of
394 #define lws_container_of(P,T,M) ((T *)((char *)(P) - offsetof(T, M)))
395 #endif
396 
397 
398 struct lws;
399 #ifndef ARRAY_SIZE
400 #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
401 #endif
402 
403 /* api change list for user code to test against */
404 
405 #define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_ARG
406 
407 /* the struct lws_protocols has the id field present */
408 #define LWS_FEATURE_PROTOCOLS_HAS_ID_FIELD
409 
410 /* you can call lws_get_peer_write_allowance */
411 #define LWS_FEATURE_PROTOCOLS_HAS_PEER_WRITE_ALLOWANCE
412 
413 /* extra parameter introduced in 917f43ab821 */
414 #define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_LEN
415 
416 /* File operations stuff exists */
417 #define LWS_FEATURE_FOPS
418 
419 
420 #if defined(_WIN32)
421 typedef SOCKET lws_sockfd_type;
422 typedef HANDLE lws_filefd_type;
423 #define lws_sockfd_valid(sfd) (!!sfd)
424 struct lws_pollfd {
425  lws_sockfd_type fd;
426  SHORT events;
427  SHORT revents;
428 };
429 #define LWS_POLLHUP (FD_CLOSE)
430 #define LWS_POLLIN (FD_READ | FD_ACCEPT)
431 #define LWS_POLLOUT (FD_WRITE)
432 #else
433 
434 #if defined(MBED_OPERATORS)
435 /* it's a class lws_conn * */
436 typedef void * lws_sockfd_type;
437 typedef void * lws_filefd_type;
438 #define lws_sockfd_valid(sfd) (!!sfd)
439 struct pollfd {
440  lws_sockfd_type fd;
441  short events;
442  short revents;
443 };
444 #define POLLIN 0x0001
445 #define POLLPRI 0x0002
446 #define POLLOUT 0x0004
447 #define POLLERR 0x0008
448 #define POLLHUP 0x0010
449 #define POLLNVAL 0x0020
450 
451 struct lws;
452 
453 void * mbed3_create_tcp_stream_socket(void);
454 void mbed3_delete_tcp_stream_socket(void *sockfd);
455 void mbed3_tcp_stream_bind(void *sock, int port, struct lws *);
456 void mbed3_tcp_stream_accept(void *sock, struct lws *);
457 #else
458 #if defined(LWS_WITH_ESP8266)
459 
460 #include <user_interface.h>
461 #include <espconn.h>
462 
463 typedef struct espconn * lws_sockfd_type;
464 typedef void * lws_filefd_type;
465 #define lws_sockfd_valid(sfd) (!!sfd)
466 struct pollfd {
467  lws_sockfd_type fd;
468  short events;
469  short revents;
470 };
471 #define POLLIN 0x0001
472 #define POLLPRI 0x0002
473 #define POLLOUT 0x0004
474 #define POLLERR 0x0008
475 #define POLLHUP 0x0010
476 #define POLLNVAL 0x0020
477 
478 struct lws_vhost;
479 
480 lws_sockfd_type esp8266_create_tcp_listen_socket(struct lws_vhost *vh);
481 void esp8266_tcp_stream_accept(lws_sockfd_type fd, struct lws *wsi);
482 
483 #include <os_type.h>
484 #include <osapi.h>
485 #include "ets_sys.h"
486 
487 int ets_snprintf(char *str, size_t size, const char *format, ...) LWS_FORMAT(3);
488 #define snprintf ets_snprintf
489 
490 typedef os_timer_t uv_timer_t;
491 typedef void uv_cb_t(uv_timer_t *);
492 
493 void os_timer_disarm(void *);
494 void os_timer_setfn(os_timer_t *, os_timer_func_t *, void *);
495 
496 void ets_timer_arm_new(os_timer_t *, int, int, int);
497 
498 //void os_timer_arm(os_timer_t *, int, int);
499 
500 #define UV_VERSION_MAJOR 1
501 
502 #define lws_uv_getloop(a, b) (NULL)
503 
504 static inline void uv_timer_init(void *l, uv_timer_t *t)
505 {
506  (void)l;
507  memset(t, 0, sizeof(*t));
508  os_timer_disarm(t);
509 }
510 
511 static inline void uv_timer_start(uv_timer_t *t, uv_cb_t *cb, int first, int rep)
512 {
513  os_timer_setfn(t, (os_timer_func_t *)cb, t);
514  /* ms, repeat */
515  os_timer_arm(t, first, !!rep);
516 }
517 
518 static inline void uv_timer_stop(uv_timer_t *t)
519 {
520  os_timer_disarm(t);
521 }
522 
523 #else
524 typedef int lws_sockfd_type;
525 typedef int lws_filefd_type;
526 #define lws_sockfd_valid(sfd) (sfd >= 0)
527 #endif
528 #endif
529 
530 #define lws_pollfd pollfd
531 #define LWS_POLLHUP (POLLHUP|POLLERR)
532 #define LWS_POLLIN (POLLIN)
533 #define LWS_POLLOUT (POLLOUT)
534 #endif
535 
538 struct lws_pollargs {
539  lws_sockfd_type fd;
540  int events;
542 };
543 
544 struct lws_tokens;
545 struct lws_token_limits;
546 
554 
556 /*
557  * NOTE: These public enums are part of the abi. If you want to add one,
558  * add it at where specified so existing users are unaffected.
559  */
562  LWS_CLOSE_STATUS_NOSTATUS = 0,
624  /****** add new things just above ---^ ******/
625 
626  LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY = 9999,
627 };
628 
641 LWS_VISIBLE LWS_EXTERN void
642 lws_close_reason(struct lws *wsi, enum lws_close_status status,
643  unsigned char *buf, size_t len);
644 
646 
647 struct lws;
648 struct lws_context;
649 /* needed even with extensions disabled for create context */
650 struct lws_extension;
651 
663 
665 
666 /*
667  * NOTE: These public enums are part of the abi. If you want to add one,
668  * add it at where specified so existing users are unaffected.
669  */
913  /* external poll() management support */
976  LWS_CALLBACK_WS_EXT_DEFAULTS = 39,
979  LWS_CALLBACK_CGI = 40,
981  LWS_CALLBACK_CGI_TERMINATED = 41,
983  LWS_CALLBACK_CGI_STDIN_DATA = 42,
985  LWS_CALLBACK_CGI_STDIN_COMPLETED = 43,
987  LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP = 44,
989  LWS_CALLBACK_CLOSED_CLIENT_HTTP = 45,
991  LWS_CALLBACK_RECEIVE_CLIENT_HTTP = 46,
993  LWS_CALLBACK_COMPLETED_CLIENT_HTTP = 47,
995  LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ = 48,
997  LWS_CALLBACK_HTTP_BIND_PROTOCOL = 49,
999  LWS_CALLBACK_HTTP_DROP_PROTOCOL = 50,
1001  LWS_CALLBACK_CHECK_ACCESS_RIGHTS = 51,
1003  LWS_CALLBACK_PROCESS_HTML = 52,
1005  LWS_CALLBACK_ADD_HEADERS = 53,
1007  LWS_CALLBACK_SESSION_INFO = 54,
1010  LWS_CALLBACK_GS_EVENT = 55,
1057  /****** add new things just above ---^ ******/
1058 
1061 };
1062 
1063 
1064 
1080 typedef int
1081 lws_callback_function(struct lws *wsi, enum lws_callback_reasons reason,
1082  void *user, void *in, size_t len);
1084 
1094 
1096 /*
1097  * NOTE: These public enums are part of the abi. If you want to add one,
1098  * add it at where specified so existing users are unaffected.
1099  */
1100 enum lws_extension_callback_reasons {
1101  LWS_EXT_CB_SERVER_CONTEXT_CONSTRUCT = 0,
1102  LWS_EXT_CB_CLIENT_CONTEXT_CONSTRUCT = 1,
1103  LWS_EXT_CB_SERVER_CONTEXT_DESTRUCT = 2,
1104  LWS_EXT_CB_CLIENT_CONTEXT_DESTRUCT = 3,
1105  LWS_EXT_CB_CONSTRUCT = 4,
1106  LWS_EXT_CB_CLIENT_CONSTRUCT = 5,
1107  LWS_EXT_CB_CHECK_OK_TO_REALLY_CLOSE = 6,
1108  LWS_EXT_CB_CHECK_OK_TO_PROPOSE_EXTENSION = 7,
1109  LWS_EXT_CB_DESTROY = 8,
1110  LWS_EXT_CB_DESTROY_ANY_WSI_CLOSING = 9,
1111  LWS_EXT_CB_ANY_WSI_ESTABLISHED = 10,
1112  LWS_EXT_CB_PACKET_RX_PREPARSE = 11,
1113  LWS_EXT_CB_PACKET_TX_PRESEND = 12,
1114  LWS_EXT_CB_PACKET_TX_DO_SEND = 13,
1115  LWS_EXT_CB_HANDSHAKE_REPLY_TX = 14,
1116  LWS_EXT_CB_FLUSH_PENDING_TX = 15,
1117  LWS_EXT_CB_EXTENDED_PAYLOAD_RX = 16,
1118  LWS_EXT_CB_CAN_PROXY_CLIENT_CONNECTION = 17,
1119  LWS_EXT_CB_1HZ = 18,
1120  LWS_EXT_CB_REQUEST_ON_WRITEABLE = 19,
1121  LWS_EXT_CB_IS_WRITEABLE = 20,
1122  LWS_EXT_CB_PAYLOAD_TX = 21,
1123  LWS_EXT_CB_PAYLOAD_RX = 22,
1124  LWS_EXT_CB_OPTION_DEFAULT = 23,
1125  LWS_EXT_CB_OPTION_SET = 24,
1126  LWS_EXT_CB_OPTION_CONFIRM = 25,
1127  LWS_EXT_CB_NAMED_OPTION_SET = 26,
1128 
1129  /****** add new things just above ---^ ******/
1130 };
1131 
1138  /* Add new things just above here ---^
1139  * This is part of the ABI, don't needlessly break compatibility */
1140 };
1141 
1147  const char *name;
1150  /* Add new things just above here ---^
1151  * This is part of the ABI, don't needlessly break compatibility */
1152 };
1153 
1156  const char *option_name;
1158  const char *start;
1159  int len;
1160 };
1161 
1222 typedef int
1223 lws_extension_callback_function(struct lws_context *context,
1224  const struct lws_extension *ext, struct lws *wsi,
1225  enum lws_extension_callback_reasons reason,
1226  void *user, void *in, size_t len);
1227 
1230  const char *name;
1232  const char *client_offer;
1234  /* Add new things just above here ---^
1235  * This is part of the ABI, don't needlessly break compatibility */
1236 };
1237 
1246 LWS_VISIBLE LWS_EXTERN int
1247 lws_set_extension_option(struct lws *wsi, const char *ext_name,
1248  const char *opt_name, const char *opt_val);
1249 
1250 #ifndef LWS_NO_EXTENSIONS
1251 /* lws_get_internal_extensions() - DEPRECATED
1252  *
1253  * \Deprecated There is no longer a set internal extensions table. The table is provided
1254  * by user code along with application-specific settings. See the test
1255  * client and server for how to do.
1256  */
1257 static LWS_INLINE LWS_WARN_DEPRECATED const struct lws_extension *
1258 lws_get_internal_extensions(void) { return NULL; }
1259 
1270 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
1271 lws_ext_parse_options(const struct lws_extension *ext, struct lws *wsi,
1272  void *ext_user, const struct lws_ext_options *opts,
1273  const char *o, int len);
1274 #endif
1275 
1288 LWS_EXTERN
1290  struct lws_context *context, const struct lws_extension *ext,
1291  struct lws *wsi, enum lws_extension_callback_reasons reason,
1292  void *user, void *in, size_t len);
1293 
1294 /*
1295  * The internal exts are part of the public abi
1296  * If we add more extensions, publish the callback here ------v
1297  */
1299 
1315 
1320  const char *name;
1341  unsigned int id;
1348  void *user;
1351  /* Add new things just above here ---^
1352  * This is part of the ABI, don't needlessly break compatibility */
1353 };
1354 
1355 struct lws_vhost;
1356 
1365 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
1366 lws_vhost_name_to_protocol(struct lws_vhost *vh, const char *name);
1367 
1377 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
1378 lws_get_protocol(struct lws *wsi);
1379 
1381 LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
1382 lws_protocol_get(struct lws *wsi) LWS_WARN_DEPRECATED;
1383 
1394 LWS_VISIBLE LWS_EXTERN void *
1395 lws_protocol_vh_priv_zalloc(struct lws_vhost *vhost, const struct lws_protocols *prot,
1396  int size);
1397 
1407 LWS_VISIBLE LWS_EXTERN void *
1408 lws_protocol_vh_priv_get(struct lws_vhost *vhost, const struct lws_protocols *prot);
1409 
1418 LWS_VISIBLE LWS_EXTERN int
1419 lws_finalize_startup(struct lws_context *context);
1420 
1421 #ifdef LWS_WITH_PLUGINS
1422 
1423 /* PLUGINS implies LIBUV */
1424 
1425 #define LWS_PLUGIN_API_MAGIC 180
1426 
1429  unsigned int api_magic;
1430  const struct lws_protocols *protocols;
1432  const struct lws_extension *extensions;
1434 };
1435 
1436 typedef int (*lws_plugin_init_func)(struct lws_context *,
1437  struct lws_plugin_capability *);
1438 typedef int (*lws_plugin_destroy_func)(struct lws_context *);
1439 
1441 struct lws_plugin {
1442  struct lws_plugin *list;
1443 #if (UV_VERSION_MAJOR > 0)
1444  uv_lib_t lib;
1445 #else
1446  void *l;
1447 #endif
1448  char name[64];
1450 };
1451 
1452 #endif
1453 
1455 
1456 
1465 
1467 #define LWSGS_EMAIL_CONTENT_SIZE 16384
1468 
1470 /* SHA-1 binary and hexified versions */
1472 typedef struct { unsigned char bin[20]; } lwsgw_hash_bin;
1474 typedef struct { char id[41]; } lwsgw_hash;
1475 
1482 };
1483 
1486  char username[32];
1487  char email[100];
1488  char ip[72];
1489  unsigned int mask;
1491  char session[42];
1492 };
1493 
1498 };
1499 
1502  enum lws_gs_event event;
1503  const char *username;
1504  const char *email;
1505 };
1506 
1508 
1509 
1523 
1525 /*
1526  * NOTE: These public enums are part of the abi. If you want to add one,
1527  * add it at where specified so existing users are unaffected.
1528  */
1529 
1533  (1 << 12),
1540  (1 << 12),
1556  (1 << 12),
1561  (1 << 12),
1592  /****** add new things just above ---^ ******/
1593 };
1594 
1595 #define lws_check_opt(c, f) (((c) & (f)) == (f))
1596 
1607  int port;
1612  const char *iface;
1619  const struct lws_protocols *protocols;
1623  const struct lws_extension *extensions;
1631  const char *ssl_cert_filepath;
1641  const char *ssl_ca_filepath;
1643  const char *ssl_cipher_list;
1647  const char *http_proxy_address;
1650  unsigned int http_proxy_port;
1652  int gid;
1654  int uid;
1656  unsigned int options;
1658  void *user;
1661  int ka_time;
1671 #ifdef LWS_OPENSSL_SUPPORT
1677 #else /* maintain structure layout either way */
1679 #endif
1680 
1691  unsigned int count_threads;
1693  unsigned int fd_limit_per_thread;
1697  unsigned int timeout_secs;
1702  const char *ecdh_curve;
1704  const char *vhost_name;
1708  const char * const *plugin_dirs;
1717  const char *log_filepath;
1720  const struct lws_http_mount *mounts;
1722  const char *server_string;
1725  unsigned int pt_serv_buf_size;
1740  unsigned short ws_ping_pong_interval;
1771  /* Add new things just above here ---^
1772  * This is part of the ABI, don't needlessly break compatibility
1773  *
1774  * The below is to ensure later library versions with new
1775  * members added above will see 0 (default) even if the app
1776  * was not built against the newer headers.
1777  */
1778 
1779  void *_unused[8];
1780 };
1781 
1816 LWS_VISIBLE LWS_EXTERN struct lws_context *
1818 
1827 LWS_VISIBLE LWS_EXTERN void
1828 lws_context_destroy(struct lws_context *context);
1829 
1830 LWS_VISIBLE LWS_EXTERN void
1831 lws_context_destroy2(struct lws_context *context);
1832 
1833 typedef int (*lws_reload_func)(void);
1834 
1859 LWS_VISIBLE LWS_EXTERN void
1860 lws_context_deprecate(struct lws_context *context, lws_reload_func cb);
1861 
1862 LWS_VISIBLE LWS_EXTERN int
1863 lws_context_is_deprecated(struct lws_context *context);
1864 
1882 LWS_VISIBLE LWS_EXTERN int
1883 lws_set_proxy(struct lws_vhost *vhost, const char *proxy);
1884 
1885 
1886 struct lws_vhost;
1887 
1897 LWS_EXTERN LWS_VISIBLE struct lws_vhost *
1898 lws_create_vhost(struct lws_context *context,
1899  struct lws_context_creation_info *info);
1900 
1915 LWS_VISIBLE LWS_EXTERN int
1916 lwsws_get_config_globals(struct lws_context_creation_info *info, const char *d,
1917  char **config_strings, int *len);
1918 
1934 LWS_VISIBLE LWS_EXTERN int
1935 lwsws_get_config_vhosts(struct lws_context *context,
1936  struct lws_context_creation_info *info, const char *d,
1937  char **config_strings, int *len);
1938 
1940 LWS_VISIBLE LWS_EXTERN struct lws_vhost *
1941 lws_vhost_get(struct lws *wsi) LWS_WARN_DEPRECATED;
1942 
1948 LWS_VISIBLE LWS_EXTERN struct lws_vhost *
1949 lws_get_vhost(struct lws *wsi);
1950 
1958 LWS_VISIBLE LWS_EXTERN int
1959 lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len);
1960 
1968 LWS_VISIBLE LWS_EXTERN int
1969 lws_json_dump_context(const struct lws_context *context, char *buf, int len,
1970  int hide_vhosts);
1971 
1981 LWS_VISIBLE LWS_EXTERN void *
1982 lws_context_user(struct lws_context *context);
1983 
1989 
1999  const char *name;
2000  const char *value;
2001 };
2002 
2015 };
2016 
2024  const char *mountpoint;
2026  const char *origin;
2028  const char *def;
2030  const char *protocol;
2046  unsigned int auth_mask;
2049  unsigned int cache_reusable:1;
2050  unsigned int cache_revalidate:1;
2051  unsigned int cache_intermediaries:1;
2053  unsigned char origin_protocol;
2054  unsigned char mountpoint_len;
2059  /* Add new things just above here ---^
2060  * This is part of the ABI, don't needlessly break compatibility
2061  *
2062  * The below is to ensure later library versions with new
2063  * members added above will see 0 (default) even if the app
2064  * was not built against the newer headers.
2065  */
2066 
2067  void *_unused[2];
2068 };
2071 
2077 
2085  LCCSCF_USE_SSL = (1 << 0),
2086  LCCSCF_ALLOW_SELFSIGNED = (1 << 1),
2087  LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK = (1 << 2),
2088  LCCSCF_ALLOW_EXPIRED = (1 << 3)
2089 };
2090 
2095  struct lws_context *context;
2097  const char *address;
2099  int port;
2103  const char *path;
2105  const char *host;
2107  const char *origin;
2109  const char *protocol;
2113  void *userdata;
2115  const void *client_exts;
2117  const char *method;
2120  struct lws *parent_wsi;
2124  const char *uri_replace_from;
2127  const char *uri_replace_to;
2129  struct lws_vhost *vhost;
2131  struct lws **pwsi;
2143  /* Add new things just above here ---^
2144  * This is part of the ABI, don't needlessly break compatibility
2145  *
2146  * The below is to ensure later library versions with new
2147  * members added above will see 0 (default) even if the app
2148  * was not built against the newer headers.
2149  */
2150 
2151  void *_unused[4];
2152 };
2153 
2161 LWS_VISIBLE LWS_EXTERN struct lws *
2163 
2184 /* deprecated, use lws_client_connect_via_info() */
2185 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
2186 lws_client_connect(struct lws_context *clients, const char *address,
2187  int port, int ssl_connection, const char *path,
2188  const char *host, const char *origin, const char *protocol,
2189  int ietf_version_or_minus_one) LWS_WARN_DEPRECATED;
2190 /* deprecated, use lws_client_connect_via_info() */
2211 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
2212 lws_client_connect_extended(struct lws_context *clients, const char *address,
2213  int port, int ssl_connection, const char *path,
2214  const char *host, const char *origin,
2215  const char *protocol, int ietf_version_or_minus_one,
2216  void *userdata) LWS_WARN_DEPRECATED;
2217 
2243 LWS_VISIBLE LWS_EXTERN int
2245  struct lws_vhost *vhost);
2246 
2247 LWS_VISIBLE LWS_EXTERN int
2248 lws_http_client_read(struct lws *wsi, char **buf, int *len);
2249 
2257 LWS_VISIBLE LWS_EXTERN unsigned int
2258 lws_http_client_http_response(struct lws *wsi);
2259 
2260 LWS_VISIBLE LWS_EXTERN void
2261 lws_client_http_body_pending(struct lws *wsi, int something_left_to_send);
2262 
2283 
2292 
2325 LWS_VISIBLE LWS_EXTERN int
2326 lws_service(struct lws_context *context, int timeout_ms);
2327 
2339 LWS_VISIBLE LWS_EXTERN int
2340 lws_service_tsi(struct lws_context *context, int timeout_ms, int tsi);
2341 
2357 LWS_VISIBLE LWS_EXTERN void
2358 lws_cancel_service_pt(struct lws *wsi);
2359 
2371 LWS_VISIBLE LWS_EXTERN void
2372 lws_cancel_service(struct lws_context *context);
2373 
2400 LWS_VISIBLE LWS_EXTERN int
2401 lws_service_fd(struct lws_context *context, struct lws_pollfd *pollfd);
2402 
2412 LWS_VISIBLE LWS_EXTERN int
2413 lws_service_fd_tsi(struct lws_context *context, struct lws_pollfd *pollfd,
2414  int tsi);
2415 
2433 LWS_VISIBLE LWS_EXTERN int
2434 lws_service_adjust_timeout(struct lws_context *context, int timeout_ms, int tsi);
2435 
2436 /* Backwards compatibility */
2437 #define lws_plat_service_tsi lws_service_tsi
2438 
2440 
2446 
2453 
2465 LWS_VISIBLE LWS_EXTERN const char *
2466 lws_get_mimetype(const char *file, const struct lws_http_mount *m);
2467 
2486 LWS_VISIBLE LWS_EXTERN int
2487 lws_serve_http_file(struct lws *wsi, const char *file, const char *content_type,
2488  const char *other_headers, int other_headers_len);
2489 LWS_VISIBLE LWS_EXTERN int
2490 lws_serve_http_file_fragment(struct lws *wsi);
2492 
2503 
2504 enum http_status {
2505  HTTP_STATUS_OK = 200,
2506  HTTP_STATUS_NO_CONTENT = 204,
2507  HTTP_STATUS_PARTIAL_CONTENT = 206,
2508 
2509  HTTP_STATUS_MOVED_PERMANENTLY = 301,
2510  HTTP_STATUS_FOUND = 302,
2511  HTTP_STATUS_SEE_OTHER = 303,
2512 
2513  HTTP_STATUS_BAD_REQUEST = 400,
2514  HTTP_STATUS_UNAUTHORIZED,
2515  HTTP_STATUS_PAYMENT_REQUIRED,
2516  HTTP_STATUS_FORBIDDEN,
2517  HTTP_STATUS_NOT_FOUND,
2518  HTTP_STATUS_METHOD_NOT_ALLOWED,
2519  HTTP_STATUS_NOT_ACCEPTABLE,
2520  HTTP_STATUS_PROXY_AUTH_REQUIRED,
2521  HTTP_STATUS_REQUEST_TIMEOUT,
2522  HTTP_STATUS_CONFLICT,
2523  HTTP_STATUS_GONE,
2524  HTTP_STATUS_LENGTH_REQUIRED,
2525  HTTP_STATUS_PRECONDITION_FAILED,
2526  HTTP_STATUS_REQ_ENTITY_TOO_LARGE,
2527  HTTP_STATUS_REQ_URI_TOO_LONG,
2528  HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE,
2529  HTTP_STATUS_REQ_RANGE_NOT_SATISFIABLE,
2530  HTTP_STATUS_EXPECTATION_FAILED,
2531 
2532  HTTP_STATUS_INTERNAL_SERVER_ERROR = 500,
2533  HTTP_STATUS_NOT_IMPLEMENTED,
2534  HTTP_STATUS_BAD_GATEWAY,
2535  HTTP_STATUS_SERVICE_UNAVAILABLE,
2536  HTTP_STATUS_GATEWAY_TIMEOUT,
2537  HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED,
2538 };
2539 
2541  char *p;
2542  int len;
2543  int max_len;
2544  int final;
2545 };
2546 
2547 typedef const char *(*lws_process_html_state_cb)(void *data, int index);
2548 
2550  char *start;
2551  char swallow[16];
2552  int pos;
2553  void *data;
2554  const char * const *vars;
2557  lws_process_html_state_cb replace;
2558 };
2559 
2564 LWS_VISIBLE LWS_EXTERN int
2566  struct lws_process_html_state *s);
2568 
2601 
2609 struct lws_tokens {
2610  char *token;
2612 };
2613 
2614 /* enum lws_token_indexes
2615  * these have to be kept in sync with lextable.h / minilex.c
2616  *
2617  * NOTE: These public enums are part of the abi. If you want to add one,
2618  * add it at where specified so existing users are unaffected.
2619  */
2620 enum lws_token_indexes {
2621  WSI_TOKEN_GET_URI = 0,
2622  WSI_TOKEN_POST_URI = 1,
2623  WSI_TOKEN_OPTIONS_URI = 2,
2624  WSI_TOKEN_HOST = 3,
2625  WSI_TOKEN_CONNECTION = 4,
2626  WSI_TOKEN_UPGRADE = 5,
2627  WSI_TOKEN_ORIGIN = 6,
2628  WSI_TOKEN_DRAFT = 7,
2629  WSI_TOKEN_CHALLENGE = 8,
2630  WSI_TOKEN_EXTENSIONS = 9,
2631  WSI_TOKEN_KEY1 = 10,
2632  WSI_TOKEN_KEY2 = 11,
2633  WSI_TOKEN_PROTOCOL = 12,
2634  WSI_TOKEN_ACCEPT = 13,
2635  WSI_TOKEN_NONCE = 14,
2636  WSI_TOKEN_HTTP = 15,
2637  WSI_TOKEN_HTTP2_SETTINGS = 16,
2638  WSI_TOKEN_HTTP_ACCEPT = 17,
2639  WSI_TOKEN_HTTP_AC_REQUEST_HEADERS = 18,
2640  WSI_TOKEN_HTTP_IF_MODIFIED_SINCE = 19,
2641  WSI_TOKEN_HTTP_IF_NONE_MATCH = 20,
2642  WSI_TOKEN_HTTP_ACCEPT_ENCODING = 21,
2643  WSI_TOKEN_HTTP_ACCEPT_LANGUAGE = 22,
2644  WSI_TOKEN_HTTP_PRAGMA = 23,
2645  WSI_TOKEN_HTTP_CACHE_CONTROL = 24,
2646  WSI_TOKEN_HTTP_AUTHORIZATION = 25,
2647  WSI_TOKEN_HTTP_COOKIE = 26,
2648  WSI_TOKEN_HTTP_CONTENT_LENGTH = 27,
2649  WSI_TOKEN_HTTP_CONTENT_TYPE = 28,
2650  WSI_TOKEN_HTTP_DATE = 29,
2651  WSI_TOKEN_HTTP_RANGE = 30,
2652  WSI_TOKEN_HTTP_REFERER = 31,
2653  WSI_TOKEN_KEY = 32,
2654  WSI_TOKEN_VERSION = 33,
2655  WSI_TOKEN_SWORIGIN = 34,
2656 
2657  WSI_TOKEN_HTTP_COLON_AUTHORITY = 35,
2658  WSI_TOKEN_HTTP_COLON_METHOD = 36,
2659  WSI_TOKEN_HTTP_COLON_PATH = 37,
2660  WSI_TOKEN_HTTP_COLON_SCHEME = 38,
2661  WSI_TOKEN_HTTP_COLON_STATUS = 39,
2662 
2663  WSI_TOKEN_HTTP_ACCEPT_CHARSET = 40,
2664  WSI_TOKEN_HTTP_ACCEPT_RANGES = 41,
2665  WSI_TOKEN_HTTP_ACCESS_CONTROL_ALLOW_ORIGIN = 42,
2666  WSI_TOKEN_HTTP_AGE = 43,
2667  WSI_TOKEN_HTTP_ALLOW = 44,
2668  WSI_TOKEN_HTTP_CONTENT_DISPOSITION = 45,
2669  WSI_TOKEN_HTTP_CONTENT_ENCODING = 46,
2670  WSI_TOKEN_HTTP_CONTENT_LANGUAGE = 47,
2671  WSI_TOKEN_HTTP_CONTENT_LOCATION = 48,
2672  WSI_TOKEN_HTTP_CONTENT_RANGE = 49,
2673  WSI_TOKEN_HTTP_ETAG = 50,
2674  WSI_TOKEN_HTTP_EXPECT = 51,
2675  WSI_TOKEN_HTTP_EXPIRES = 52,
2676  WSI_TOKEN_HTTP_FROM = 53,
2677  WSI_TOKEN_HTTP_IF_MATCH = 54,
2678  WSI_TOKEN_HTTP_IF_RANGE = 55,
2679  WSI_TOKEN_HTTP_IF_UNMODIFIED_SINCE = 56,
2680  WSI_TOKEN_HTTP_LAST_MODIFIED = 57,
2681  WSI_TOKEN_HTTP_LINK = 58,
2682  WSI_TOKEN_HTTP_LOCATION = 59,
2683  WSI_TOKEN_HTTP_MAX_FORWARDS = 60,
2684  WSI_TOKEN_HTTP_PROXY_AUTHENTICATE = 61,
2685  WSI_TOKEN_HTTP_PROXY_AUTHORIZATION = 62,
2686  WSI_TOKEN_HTTP_REFRESH = 63,
2687  WSI_TOKEN_HTTP_RETRY_AFTER = 64,
2688  WSI_TOKEN_HTTP_SERVER = 65,
2689  WSI_TOKEN_HTTP_SET_COOKIE = 66,
2690  WSI_TOKEN_HTTP_STRICT_TRANSPORT_SECURITY = 67,
2691  WSI_TOKEN_HTTP_TRANSFER_ENCODING = 68,
2692  WSI_TOKEN_HTTP_USER_AGENT = 69,
2693  WSI_TOKEN_HTTP_VARY = 70,
2694  WSI_TOKEN_HTTP_VIA = 71,
2695  WSI_TOKEN_HTTP_WWW_AUTHENTICATE = 72,
2696 
2697  WSI_TOKEN_PATCH_URI = 73,
2698  WSI_TOKEN_PUT_URI = 74,
2699  WSI_TOKEN_DELETE_URI = 75,
2700 
2701  WSI_TOKEN_HTTP_URI_ARGS = 76,
2702  WSI_TOKEN_PROXY = 77,
2703  WSI_TOKEN_HTTP_X_REAL_IP = 78,
2704  WSI_TOKEN_HTTP1_0 = 79,
2705  WSI_TOKEN_X_FORWARDED_FOR = 80,
2706 
2707  /****** add new things just above ---^ ******/
2708 
2709  /* use token storage to stash these internally, not for
2710  * user use */
2711 
2712  _WSI_TOKEN_CLIENT_SENT_PROTOCOLS,
2713  _WSI_TOKEN_CLIENT_PEER_ADDRESS,
2714  _WSI_TOKEN_CLIENT_URI,
2715  _WSI_TOKEN_CLIENT_HOST,
2716  _WSI_TOKEN_CLIENT_ORIGIN,
2717  _WSI_TOKEN_CLIENT_METHOD,
2718 
2719  /* always last real token index*/
2720  WSI_TOKEN_COUNT,
2721 
2722  /* parser state additions, no storage associated */
2723  WSI_TOKEN_NAME_PART,
2724  WSI_TOKEN_SKIPPING,
2725  WSI_TOKEN_SKIPPING_SAW_CR,
2726  WSI_PARSING_COMPLETE,
2727  WSI_INIT_TOKEN_MUXURL,
2728 };
2729 
2731  unsigned short token_limit[WSI_TOKEN_COUNT];
2732 };
2733 
2739 LWS_VISIBLE LWS_EXTERN const unsigned char *
2740 lws_token_to_string(enum lws_token_indexes token);
2741 
2742 
2751 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
2752 lws_hdr_total_length(struct lws *wsi, enum lws_token_indexes h);
2753 
2763 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
2764 lws_hdr_fragment_length(struct lws *wsi, enum lws_token_indexes h, int frag_idx);
2765 
2779 LWS_VISIBLE LWS_EXTERN int
2780 lws_hdr_copy(struct lws *wsi, char *dest, int len, enum lws_token_indexes h);
2781 
2799 LWS_VISIBLE LWS_EXTERN int
2800 lws_hdr_copy_fragment(struct lws *wsi, char *dest, int len,
2801  enum lws_token_indexes h, int frag_idx);
2802 
2813 LWS_VISIBLE LWS_EXTERN const char *
2814 lws_get_urlarg_by_name(struct lws *wsi, const char *name, char *buf, int len);
2816 
2831 
2842 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
2843 lws_add_http_header_status(struct lws *wsi,
2844  unsigned int code, unsigned char **p,
2845  unsigned char *end);
2858 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
2859 lws_add_http_header_by_name(struct lws *wsi, const unsigned char *name,
2860  const unsigned char *value, int length,
2861  unsigned char **p, unsigned char *end);
2875 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
2876 lws_add_http_header_by_token(struct lws *wsi, enum lws_token_indexes token,
2877  const unsigned char *value, int length,
2878  unsigned char **p, unsigned char *end);
2889 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
2890 lws_add_http_header_content_length(struct lws *wsi,
2891  unsigned long content_length,
2892  unsigned char **p, unsigned char *end);
2902 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
2903 lws_finalize_http_header(struct lws *wsi, unsigned char **p,
2904  unsigned char *end);
2906 
2925 
2935 };
2936 
2950 typedef int (*lws_spa_fileupload_cb)(void *data, const char *name,
2951  const char *filename, char *buf, int len,
2952  enum lws_spa_fileupload_states state);
2953 
2956 struct lws_spa;
2957 
2976 LWS_VISIBLE LWS_EXTERN struct lws_spa *
2977 lws_spa_create(struct lws *wsi, const char * const *param_names,
2978  int count_params, int max_storage, lws_spa_fileupload_cb opt_cb,
2979  void *opt_data);
2980 
2988 LWS_VISIBLE LWS_EXTERN int
2989 lws_spa_process(struct lws_spa *spa, const char *in, int len);
2990 
2996 LWS_VISIBLE LWS_EXTERN int
2997 lws_spa_finalize(struct lws_spa *spa);
2998 
3005 LWS_VISIBLE LWS_EXTERN int
3006 lws_spa_get_length(struct lws_spa *spa, int n);
3007 
3013 LWS_VISIBLE LWS_EXTERN const char *
3014 lws_spa_get_string(struct lws_spa *spa, int n);
3015 
3021 LWS_VISIBLE LWS_EXTERN int
3022 lws_spa_destroy(struct lws_spa *spa);
3024 
3035 
3046 LWS_VISIBLE LWS_EXTERN const char *
3047 lws_urlencode(char *escaped, const char *string, int len);
3048 
3049 /*
3050  * URLDECODE 1 / 2
3051  *
3052  * This simple urldecode only operates until the first '\0' and requires the
3053  * data to exist all at once
3054  */
3067 LWS_VISIBLE LWS_EXTERN int
3068 lws_urldecode(char *string, const char *escaped, int len);
3070 
3079 LWS_VISIBLE LWS_EXTERN int
3080 lws_return_http_status(struct lws *wsi, unsigned int code,
3081  const char *html_body);
3082 
3093 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
3094 lws_http_redirect(struct lws *wsi, int code, const unsigned char *loc, int len,
3095  unsigned char **p, unsigned char *end);
3096 
3105 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
3106 lws_http_transaction_completed(struct lws *wsi);
3108 
3116 
3127 LWS_VISIBLE LWS_EXTERN const char *
3128 lws_sql_purify(char *escaped, const char *string, int len);
3129 
3140 LWS_VISIBLE LWS_EXTERN const char *
3141 lws_json_purify(char *escaped, const char *string, int len);
3143 
3150 
3152 #ifdef LWS_USE_LIBEV
3153 typedef void (lws_ev_signal_cb_t)(EV_P_ struct ev_signal *w, int revents);
3154 
3155 LWS_VISIBLE LWS_EXTERN int
3156 lws_ev_sigint_cfg(struct lws_context *context, int use_ev_sigint,
3157  lws_ev_signal_cb_t *cb);
3158 
3159 LWS_VISIBLE LWS_EXTERN int
3160 lws_ev_initloop(struct lws_context *context, struct ev_loop *loop, int tsi);
3161 
3162 LWS_VISIBLE LWS_EXTERN void
3163 lws_ev_sigint_cb(struct ev_loop *loop, struct ev_signal *watcher, int revents);
3164 #endif /* LWS_USE_LIBEV */
3165 
3167 
3174 #ifdef LWS_USE_LIBUV
3176 LWS_VISIBLE LWS_EXTERN int
3177 lws_uv_sigint_cfg(struct lws_context *context, int use_uv_sigint,
3178  uv_signal_cb cb);
3179 
3180 LWS_VISIBLE LWS_EXTERN void
3181 lws_libuv_run(const struct lws_context *context, int tsi);
3182 
3183 LWS_VISIBLE LWS_EXTERN void
3184 lws_libuv_stop(struct lws_context *context);
3185 
3186 LWS_VISIBLE LWS_EXTERN void
3187 lws_libuv_stop_without_kill(const struct lws_context *context, int tsi);
3188 
3189 LWS_VISIBLE LWS_EXTERN int
3190 lws_uv_initloop(struct lws_context *context, uv_loop_t *loop, int tsi);
3191 
3192 LWS_VISIBLE LWS_EXTERN uv_loop_t *
3193 lws_uv_getloop(struct lws_context *context, int tsi);
3194 
3195 LWS_VISIBLE LWS_EXTERN void
3196 lws_uv_sigint_cb(uv_signal_t *watcher, int signum);
3197 #endif /* LWS_USE_LIBUV */
3198 
3205 
3206 /*
3207  * NOTE: These public enums are part of the abi. If you want to add one,
3208  * add it at where specified so existing users are unaffected.
3209  */
3210 enum pending_timeout {
3211  NO_PENDING_TIMEOUT = 0,
3212  PENDING_TIMEOUT_AWAITING_PROXY_RESPONSE = 1,
3213  PENDING_TIMEOUT_AWAITING_CONNECT_RESPONSE = 2,
3214  PENDING_TIMEOUT_ESTABLISH_WITH_SERVER = 3,
3215  PENDING_TIMEOUT_AWAITING_SERVER_RESPONSE = 4,
3216  PENDING_TIMEOUT_AWAITING_PING = 5,
3217  PENDING_TIMEOUT_CLOSE_ACK = 6,
3218  PENDING_TIMEOUT_AWAITING_EXTENSION_CONNECT_RESPONSE = 7,
3219  PENDING_TIMEOUT_SENT_CLIENT_HANDSHAKE = 8,
3220  PENDING_TIMEOUT_SSL_ACCEPT = 9,
3221  PENDING_TIMEOUT_HTTP_CONTENT = 10,
3222  PENDING_TIMEOUT_AWAITING_CLIENT_HS_SEND = 11,
3223  PENDING_FLUSH_STORED_SEND_BEFORE_CLOSE = 12,
3224  PENDING_TIMEOUT_SHUTDOWN_FLUSH = 13,
3225  PENDING_TIMEOUT_CGI = 14,
3226  PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE = 15,
3227  PENDING_TIMEOUT_WS_PONG_CHECK_SEND_PING = 16,
3228  PENDING_TIMEOUT_WS_PONG_CHECK_GET_PONG = 17,
3229  PENDING_TIMEOUT_CLIENT_ISSUE_PAYLOAD = 18,
3230 
3231  /****** add new things just above ---^ ******/
3232 };
3233 
3243 LWS_VISIBLE LWS_EXTERN void
3244 lws_set_timeout(struct lws *wsi, enum pending_timeout reason, int secs);
3246 
3252 #if !defined(LWS_SIZEOFPTR)
3253 #define LWS_SIZEOFPTR (sizeof (void *))
3254 #endif
3255 #if !defined(u_int64_t)
3256 #define u_int64_t unsigned long long
3257 #endif
3258 
3259 #if defined(__x86_64__)
3260 #define _LWS_PAD_SIZE 16 /* Intel recommended for best performance */
3261 #else
3262 #define _LWS_PAD_SIZE LWS_SIZEOFPTR /* Size of a pointer on the target arch */
3263 #endif
3264 #define _LWS_PAD(n) (((n) % _LWS_PAD_SIZE) ? \
3265  ((n) + (_LWS_PAD_SIZE - ((n) % _LWS_PAD_SIZE))) : (n))
3266 #define LWS_PRE _LWS_PAD(4 + 10)
3267 /* used prior to 1.7 and retained for backward compatibility */
3268 #define LWS_SEND_BUFFER_PRE_PADDING LWS_PRE
3269 #define LWS_SEND_BUFFER_POST_PADDING 0
3270 
3271 /*
3272  * NOTE: These public enums are part of the abi. If you want to add one,
3273  * add it at where specified so existing users are unaffected.
3274  */
3289  /* LWS_WRITE_CLOSE is handled by lws_close_reason() */
3290  LWS_WRITE_PING = 5,
3291  LWS_WRITE_PONG = 6,
3292 
3293  /* Same as write_http but we know this write ends the transaction */
3294  LWS_WRITE_HTTP_FINAL = 7,
3295 
3296  /* HTTP2 */
3297 
3305  /****** add new things just above ---^ ******/
3306 
3307  /* flags */
3308 
3316 };
3317 
3318 
3405 LWS_VISIBLE LWS_EXTERN int
3406 lws_write(struct lws *wsi, unsigned char *buf, size_t len,
3407  enum lws_write_protocol protocol);
3408 
3409 /* helper for case where buffer may be const */
3410 #define lws_write_http(wsi, buf, len) \
3411  lws_write(wsi, (unsigned char *)(buf), len, LWS_WRITE_HTTP)
3412 
3432 
3445 LWS_VISIBLE LWS_EXTERN int
3446 lws_callback_on_writable(struct lws *wsi);
3447 
3461 LWS_VISIBLE LWS_EXTERN int
3462 lws_callback_on_writable_all_protocol(const struct lws_context *context,
3463  const struct lws_protocols *protocol);
3464 
3478 LWS_VISIBLE LWS_EXTERN int
3479 lws_callback_on_writable_all_protocol_vhost(const struct lws_vhost *vhost,
3480  const struct lws_protocols *protocol);
3481 
3494 LWS_VISIBLE LWS_EXTERN int
3495 lws_callback_all_protocol(struct lws_context *context,
3496  const struct lws_protocols *protocol, int reason);
3497 
3510 LWS_VISIBLE LWS_EXTERN int
3511 lws_callback_all_protocol_vhost(struct lws_vhost *vh,
3512  const struct lws_protocols *protocol, int reason);
3513 
3527 LWS_VISIBLE LWS_EXTERN int
3528 lws_callback_vhost_protocols(struct lws *wsi, int reason, void *in, int len);
3529 
3530 LWS_VISIBLE LWS_EXTERN int
3531 lws_callback_http_dummy(struct lws *wsi, enum lws_callback_reasons reason,
3532  void *user, void *in, size_t len);
3533 
3541 LWS_VISIBLE LWS_EXTERN int
3542 lws_get_socket_fd(struct lws *wsi);
3543 
3565 LWS_VISIBLE LWS_EXTERN size_t
3566 lws_get_peer_write_allowance(struct lws *wsi);
3568 
3579 LWS_VISIBLE LWS_EXTERN int
3580 lws_rx_flow_control(struct lws *wsi, int enable);
3581 
3591 LWS_VISIBLE LWS_EXTERN void
3592 lws_rx_flow_allow_all_protocol(const struct lws_context *context,
3593  const struct lws_protocols *protocol);
3594 
3611 LWS_VISIBLE LWS_EXTERN size_t
3612 lws_remaining_packet_payload(struct lws *wsi);
3613 
3614 
3623 
3637 LWS_VISIBLE LWS_EXTERN struct lws *
3638 lws_adopt_socket(struct lws_context *context, lws_sockfd_type accept_fd);
3651 LWS_VISIBLE LWS_EXTERN struct lws *
3652 lws_adopt_socket_vhost(struct lws_vhost *vh, lws_sockfd_type accept_fd);
3676 LWS_VISIBLE LWS_EXTERN struct lws *
3677 lws_adopt_socket_readbuf(struct lws_context *context, lws_sockfd_type accept_fd,
3678  const char *readbuf, size_t len);
3702 LWS_VISIBLE LWS_EXTERN struct lws *
3703 lws_adopt_socket_vhost_readbuf(struct lws_vhost *vhost, lws_sockfd_type accept_fd,
3704  const char *readbuf, size_t len);
3706 
3712 
3723 LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT
3724 lws_canonical_hostname(struct lws_context *context);
3725 
3740 LWS_VISIBLE LWS_EXTERN void
3741 lws_get_peer_addresses(struct lws *wsi, lws_sockfd_type fd, char *name,
3742  int name_len, char *rip, int rip_len);
3743 
3754 LWS_VISIBLE LWS_EXTERN const char *
3755 lws_get_peer_simple(struct lws *wsi, char *name, int namelen);
3756 #ifndef LWS_WITH_ESP8266
3757 
3768 LWS_VISIBLE LWS_EXTERN int
3769 lws_interface_to_sa(int ipv6, const char *ifname, struct sockaddr_in *addr,
3770  size_t addrlen);
3772 #endif
3773 
3779 
3792 LWS_VISIBLE LWS_EXTERN int
3793 lws_snprintf(char *str, size_t size, const char *format, ...) LWS_FORMAT(3);
3794 
3806 LWS_VISIBLE LWS_EXTERN int
3807 lws_get_random(struct lws_context *context, void *buf, int len);
3815 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
3816 lws_daemonize(const char *_lock_path);
3822 LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT
3824 
3831 LWS_VISIBLE LWS_EXTERN void *
3832 lws_wsi_user(struct lws *wsi);
3833 
3845 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
3846 lws_parse_uri(char *p, const char **prot, const char **ads, int *port,
3847  const char **path);
3848 
3852 LWS_VISIBLE LWS_EXTERN unsigned long
3853 lws_now_secs(void);
3854 
3864 LWS_VISIBLE LWS_EXTERN struct lws_context * LWS_WARN_UNUSED_RESULT
3865 lws_get_context(const struct lws *wsi);
3866 
3876 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
3877 lws_get_count_threads(struct lws_context *context);
3878 
3886 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
3887 lws_get_parent(const struct lws *wsi);
3888 
3895 LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT
3896 lws_get_child(const struct lws *wsi);
3897 
3898 
3899 /*
3900  * \deprecated DEPRECATED Note: this is not normally needed as a user api.
3901  * It's provided in case it is
3902  * useful when integrating with other app poll loop service code.
3903  */
3904 LWS_VISIBLE LWS_EXTERN int
3905 lws_read(struct lws *wsi, unsigned char *buf, size_t len);
3906 
3914 LWS_VISIBLE LWS_EXTERN void
3915 lws_set_allocator(void *(*realloc)(void *ptr, size_t size));
3917 
3923 
3930 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
3931 lws_send_pipe_choked(struct lws *wsi);
3932 
3937 LWS_VISIBLE LWS_EXTERN int
3938 lws_is_final_fragment(struct lws *wsi);
3939 
3944 LWS_VISIBLE LWS_EXTERN unsigned char
3945 lws_get_reserved_bits(struct lws *wsi);
3946 
3963 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
3964 lws_partial_buffered(struct lws *wsi);
3965 
3975 LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
3976 lws_frame_is_binary(struct lws *wsi);
3977 
3986 LWS_VISIBLE LWS_EXTERN int
3987 lws_is_ssl(struct lws *wsi);
3992 LWS_VISIBLE LWS_EXTERN int
3993 lws_is_cgi(struct lws *wsi);
3994 
3995 #ifdef LWS_OPENSSL_SUPPORT
3996 
4002 LWS_VISIBLE LWS_EXTERN SSL*
4003 lws_get_ssl(struct lws *wsi);
4004 #endif
4005 
4007 
4013 #ifdef LWS_SHA1_USE_OPENSSL_NAME
4015 #define lws_SHA1 SHA1
4016 #else
4017 
4026 LWS_VISIBLE LWS_EXTERN unsigned char *
4027 lws_SHA1(const unsigned char *d, size_t n, unsigned char *md);
4028 #endif
4029 
4039 LWS_VISIBLE LWS_EXTERN int
4040 lws_b64_encode_string(const char *in, int in_len, char *out, int out_size);
4050 LWS_VISIBLE LWS_EXTERN int
4051 lws_b64_decode_string(const char *in, char *out, int out_size);
4053 
4054 
4064 #ifdef LWS_WITH_CGI
4065 enum lws_enum_stdinouterr {
4066  LWS_STDIN = 0,
4067  LWS_STDOUT = 1,
4068  LWS_STDERR = 2,
4069 };
4070 
4071 enum lws_cgi_hdr_state {
4072  LCHS_HEADER,
4073  LCHS_CR1,
4074  LCHS_LF1,
4075  LCHS_CR2,
4076  LCHS_LF2,
4077  LHCS_PAYLOAD,
4078  LCHS_SINGLE_0A,
4079 };
4080 
4082  struct lws **stdwsi;
4083  enum lws_enum_stdinouterr ch;
4084  unsigned char *data;
4085  enum lws_cgi_hdr_state hdr_state;
4086  int len;
4087 };
4088 
4089 
4099 LWS_VISIBLE LWS_EXTERN int
4100 lws_cgi(struct lws *wsi, const char * const *exec_array,
4101  int script_uri_path_len, int timeout_secs,
4102  const struct lws_protocol_vhost_options *mp_cgienv);
4103 
4109 LWS_VISIBLE LWS_EXTERN int
4110 lws_cgi_write_split_stdout_headers(struct lws *wsi);
4111 
4117 LWS_VISIBLE LWS_EXTERN int
4118 lws_cgi_kill(struct lws *wsi);
4119 #endif
4120 
4122 
4139 
4146  lws_filefd_type (*open)(struct lws *wsi, const char *filename,
4147  unsigned long *filelen, int flags);
4151  int (*close)(struct lws *wsi, lws_filefd_type fd);
4153  unsigned long (*seek_cur)(struct lws *wsi, lws_filefd_type fd,
4154  long offset_from_cur_pos);
4156  int (*read)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
4157  unsigned char *buf, unsigned long len);
4159  int (*write)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
4160  unsigned char *buf, unsigned long len);
4163  /* Add new things just above here ---^
4164  * This is part of the ABI, don't needlessly break compatibility */
4165 };
4166 
4172 LWS_VISIBLE LWS_EXTERN struct lws_plat_file_ops * LWS_WARN_UNUSED_RESULT
4173 lws_get_fops(struct lws_context *context);
4174 
4183 static LWS_INLINE lws_filefd_type LWS_WARN_UNUSED_RESULT
4184 lws_plat_file_open(struct lws *wsi, const char *filename,
4185  unsigned long *filelen, int flags)
4186 {
4187  return lws_get_fops(lws_get_context(wsi))->open(wsi, filename,
4188  filelen, flags);
4189 }
4190 
4197 static LWS_INLINE int
4198 lws_plat_file_close(struct lws *wsi, lws_filefd_type fd)
4199 {
4200  return lws_get_fops(lws_get_context(wsi))->close(wsi, fd);
4201 }
4202 
4210 static LWS_INLINE unsigned long
4211 lws_plat_file_seek_cur(struct lws *wsi, lws_filefd_type fd, long offset)
4212 {
4213  return lws_get_fops(lws_get_context(wsi))->seek_cur(wsi, fd, offset);
4214 }
4224 static LWS_INLINE int LWS_WARN_UNUSED_RESULT
4225 lws_plat_file_read(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
4226  unsigned char *buf, unsigned long len)
4227 {
4228  return lws_get_fops(lws_get_context(wsi))->read(wsi, fd, amount, buf,
4229  len);
4230 }
4240 static LWS_INLINE int LWS_WARN_UNUSED_RESULT
4241 lws_plat_file_write(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
4242  unsigned char *buf, unsigned long len)
4243 {
4244  return lws_get_fops(lws_get_context(wsi))->write(wsi, fd, amount, buf,
4245  len);
4246 }
4248 
4280 #ifdef LWS_WITH_SMTP
4281 
4293 };
4294 
4296 struct lws_email {
4297  void *data;
4299  uv_loop_t *loop;
4302  char email_smtp_ip[32];
4303  char email_helo[32];
4304  char email_from[100];
4305  char email_to[100];
4307  unsigned int max_content_size;
4310  /* Fill all the callbacks before init */
4311 
4312  int (*on_next)(struct lws_email *email);
4317  int (*on_sent)(struct lws_email *email);
4322  int (*on_get_body)(struct lws_email *email, char *buf, int len);
4328  /* private things */
4329  uv_timer_t timeout_email;
4331  uv_connect_t email_connect_req;
4332  uv_tcp_t email_client;
4334  char email_buf[256];
4335  char *content;
4336 };
4337 
4347 LWS_VISIBLE LWS_EXTERN int
4348 lws_email_init(struct lws_email *email, uv_loop_t *loop, int max_content);
4349 
4358 LWS_VISIBLE LWS_EXTERN void
4359 lws_email_check(struct lws_email *email);
4367 LWS_VISIBLE LWS_EXTERN void
4368 lws_email_destroy(struct lws_email *email);
4369 
4370 #endif
4371 
4372 
4373 #ifdef __cplusplus
4374 }
4375 #endif
4376 
4377 #endif
LWS_VISIBLE LWS_EXTERN int lws_spa_destroy(struct lws_spa *spa)
LWS_VISIBLE LWS_EXTERN const char * lws_json_purify(char *escaped, const char *string, int len)
-
Definition: libwebsockets.h:4080
-
size_t rx_buffer_size
Definition: libwebsockets.h:1331
+
Definition: libwebsockets.h:4081
+
size_t rx_buffer_size
Definition: libwebsockets.h:1332
LWS_VISIBLE LWS_EXTERN struct lws_spa * lws_spa_create(struct lws *wsi, const char *const *param_names, int count_params, int max_storage, lws_spa_fileupload_cb opt_cb, void *opt_data)
LWS_VISIBLE LWS_EXTERN struct lws_vhost * lws_vhost_get(struct lws *wsi) LWS_WARN_DEPRECATED
-
Definition: libwebsockets.h:777
-
Definition: libwebsockets.h:905
+
Definition: libwebsockets.h:778
+
Definition: libwebsockets.h:906
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_daemonize(const char *_lock_path)
-
Definition: libwebsockets.h:2010
-
Definition: libwebsockets.h:3285
-
Definition: libwebsockets.h:4285
+
Definition: libwebsockets.h:2011
+
Definition: libwebsockets.h:3286
+
Definition: libwebsockets.h:4286
LWS_VISIBLE LWS_EXTERN struct lws * lws_adopt_socket_readbuf(struct lws_context *context, lws_sockfd_type accept_fd, const char *readbuf, size_t len)
-
Definition: libwebsockets.h:240
-
unsigned int auth_mask
Definition: libwebsockets.h:2045
-
Definition: libwebsockets.h:3308
-
void * data
Definition: libwebsockets.h:4296
-
const char * uri_replace_from
Definition: libwebsockets.h:2123
-
int(* write)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)
Definition: libwebsockets.h:4158
-
lws_callback_reasons
Definition: libwebsockets.h:670
+
Definition: libwebsockets.h:241
+
unsigned int auth_mask
Definition: libwebsockets.h:2046
+
Definition: libwebsockets.h:3309
+
void * data
Definition: libwebsockets.h:4297
+
const char * uri_replace_from
Definition: libwebsockets.h:2124
+
int(* write)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)
Definition: libwebsockets.h:4159
+
lws_callback_reasons
Definition: libwebsockets.h:671
LWS_VISIBLE LWS_EXTERN int lws_hdr_copy_fragment(struct lws *wsi, char *dest, int len, enum lws_token_indexes h, int frag_idx)
- -
lwsgs_auth_bits
Definition: libwebsockets.h:1476
+ +
lwsgs_auth_bits
Definition: libwebsockets.h:1477
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:903
-
Definition: libwebsockets.h:1135
-
unsigned int id
Definition: libwebsockets.h:1340
+
Definition: libwebsockets.h:904
+
Definition: libwebsockets.h:1136
+
unsigned int id
Definition: libwebsockets.h:1341
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_hdr_total_length(struct lws *wsi, enum lws_token_indexes h)
-
Definition: libwebsockets.h:1133
-
Definition: libwebsockets.h:808
+
Definition: libwebsockets.h:1134
+
Definition: libwebsockets.h:809
LWS_VISIBLE LWS_EXTERN int lws_service_fd_tsi(struct lws_context *context, struct lws_pollfd *pollfd, int tsi)
LWS_VISIBLE LWS_EXTERN int lws_service_adjust_timeout(struct lws_context *context, int timeout_ms, int tsi)
LWS_VISIBLE LWS_EXTERN struct lws *LWS_WARN_UNUSED_RESULT lws_get_parent(const struct lws *wsi)
LWS_VISIBLE LWS_EXTERN size_t lws_get_peer_write_allowance(struct lws *wsi)
LWS_VISIBLE LWS_EXTERN struct lws * lws_adopt_socket_vhost(struct lws_vhost *vh, lws_sockfd_type accept_fd)
-
Definition: libwebsockets.h:754
+
Definition: libwebsockets.h:755
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:4316
-
Definition: libwebsockets.h:1471
-
struct lws ** pwsi
Definition: libwebsockets.h:2130
-
Definition: libwebsockets.h:788
-
const char * path
Definition: libwebsockets.h:2102
+
int(* on_sent)(struct lws_email *email)
Definition: libwebsockets.h:4317
+
Definition: libwebsockets.h:1472
+
struct lws ** pwsi
Definition: libwebsockets.h:2131
+
Definition: libwebsockets.h:789
+
const char * path
Definition: libwebsockets.h:2103
LWS_VISIBLE LWS_EXTERN size_t lws_remaining_packet_payload(struct lws *wsi)
-
Definition: libwebsockets.h:589
-
Definition: libwebsockets.h:1427
+
Definition: libwebsockets.h:590
+
Definition: libwebsockets.h:1428
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:4332
-
lws_close_status
Definition: libwebsockets.h:560
+
time_t email_connect_started
Definition: libwebsockets.h:4333
+
lws_close_status
Definition: libwebsockets.h:561
LWS_VISIBLE LWS_EXTERN int lws_callback_all_protocol(struct lws_context *context, const struct lws_protocols *protocol, int reason)
-
Definition: libwebsockets.h:600
- -
int token_len
Definition: libwebsockets.h:2610
-
const struct lws_http_mount * mounts
Definition: libwebsockets.h:1719
-
Definition: libwebsockets.h:929
+
Definition: libwebsockets.h:601
+ +
int token_len
Definition: libwebsockets.h:2611
+
const struct lws_http_mount * mounts
Definition: libwebsockets.h:1720
+
Definition: libwebsockets.h:930
LWS_VISIBLE LWS_EXTERN struct lws_context *LWS_WARN_UNUSED_RESULT lws_get_context(const struct lws *wsi)
-
const char * value
Definition: libwebsockets.h:1999
-
Definition: libwebsockets.h:2930
-
Definition: libwebsockets.h:4290
-
const char * username
Definition: libwebsockets.h:1502
+
const char * value
Definition: libwebsockets.h:2000
+
Definition: libwebsockets.h:2931
+
Definition: libwebsockets.h:4291
+
const char * username
Definition: libwebsockets.h:1503
LWS_VISIBLE LWS_EXTERN struct lws * lws_client_connect_via_info(struct lws_client_connect_info *ccinfo)
-
const char * protocol
Definition: libwebsockets.h:2029
-
struct lws ** stdwsi
Definition: libwebsockets.h:4081
+
const char * protocol
Definition: libwebsockets.h:2030
+
struct lws ** stdwsi
Definition: libwebsockets.h:4082
LWS_VISIBLE LWS_EXTERN int lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len)
-
Definition: libwebsockets.h:875
+
Definition: libwebsockets.h:876
LWS_VISIBLE LWS_EXTERN const char * lws_get_mimetype(const char *file, const struct lws_http_mount *m)
-
Definition: libwebsockets.h:1473
-
int cache_max_age
Definition: libwebsockets.h:2043
-
long ssl_options_clear
Definition: libwebsockets.h:1737
-
Definition: libwebsockets.h:768
-
Definition: libwebsockets.h:1605
+
Definition: libwebsockets.h:1474
+
int cache_max_age
Definition: libwebsockets.h:2044
+
long ssl_options_clear
Definition: libwebsockets.h:1738
+
Definition: libwebsockets.h:769
+
Definition: libwebsockets.h:1606
LWS_VISIBLE LWS_EXTERN void lws_context_destroy(struct lws_context *context)
-
Definition: libwebsockets.h:616
-
char * start
Definition: libwebsockets.h:2549
+
Definition: libwebsockets.h:617
+
char * start
Definition: libwebsockets.h:2550
LWS_VISIBLE LWS_EXTERN int lws_snprintf(char *str, size_t size, const char *format,...) LWS_FORMAT(3)
LWS_VISIBLE LWS_EXTERN void lws_set_allocator(void *(*realloc)(void *ptr, size_t size))
-
lws_callback_function * callback
Definition: libwebsockets.h:1322
-
Definition: libwebsockets.h:3275
+
lws_callback_function * callback
Definition: libwebsockets.h:1323
+
Definition: libwebsockets.h:3276
LWS_VISIBLE LWS_EXTERN void lws_context_deprecate(struct lws_context *context, lws_reload_func cb)
LWS_VISIBLE LWS_EXTERN int lws_get_socket_fd(struct lws *wsi)
-
Definition: libwebsockets.h:966
- -
const char * protocol
Definition: libwebsockets.h:2108
-
Definition: libwebsockets.h:955
-
unsigned int pt_serv_buf_size
Definition: libwebsockets.h:1724
+
Definition: libwebsockets.h:967
+ +
const char * protocol
Definition: libwebsockets.h:2109
+
Definition: libwebsockets.h:956
+
unsigned int pt_serv_buf_size
Definition: libwebsockets.h:1725
LWS_VISIBLE LWS_EXTERN struct lws * lws_adopt_socket(struct lws_context *context, lws_sockfd_type accept_fd)
-
int len
Definition: libwebsockets.h:2541
-
int ka_time
Definition: libwebsockets.h:1660
-
Definition: libwebsockets.h:1547
+
int len
Definition: libwebsockets.h:2542
+
int ka_time
Definition: libwebsockets.h:1661
+
Definition: libwebsockets.h:1548
LWS_VISIBLE LWS_EXTERN int lws_callback_on_writable_all_protocol(const struct lws_context *context, const struct lws_protocols *protocol)
LWS_VISIBLE LWS_EXTERN void lws_set_log_level(int level, void(*log_emit_function)(int level, const char *line))
-
unsigned short ws_ping_pong_interval
Definition: libwebsockets.h:1739
-
int count_extensions
Definition: libwebsockets.h:1432
-
Definition: libwebsockets.h:3279
-
int port
Definition: libwebsockets.h:2098
-
struct lws_context * context
Definition: libwebsockets.h:2094
-
Definition: libwebsockets.h:1479
-
int ietf_version_or_minus_one
Definition: libwebsockets.h:2110
+
unsigned short ws_ping_pong_interval
Definition: libwebsockets.h:1740
+
int count_extensions
Definition: libwebsockets.h:1433
+
Definition: libwebsockets.h:3280
+
int port
Definition: libwebsockets.h:2099
+
struct lws_context * context
Definition: libwebsockets.h:2095
+
Definition: libwebsockets.h:1480
+
int ietf_version_or_minus_one
Definition: libwebsockets.h:2111
LWS_VISIBLE LWS_EXTERN int lws_callback_all_protocol_vhost(struct lws_vhost *vh, const struct lws_protocols *protocol, int reason)
-
Definition: libwebsockets.h:4283
-
Definition: libwebsockets.h:1995
+
Definition: libwebsockets.h:4284
+
Definition: libwebsockets.h:1996
LWS_VISIBLE LWS_EXTERN int lws_callback_on_writable(struct lws *wsi)
-
const char *const * vars
Definition: libwebsockets.h:2553
+
const char *const * vars
Definition: libwebsockets.h:2554
LWS_VISIBLE LWS_EXTERN SSL * lws_get_ssl(struct lws *wsi)
-
Definition: libwebsockets.h:568
-
Definition: libwebsockets.h:2093
-
Definition: libwebsockets.h:1577
-
int lws_extension_callback_function(struct lws_context *context, const struct lws_extension *ext, struct lws *wsi, enum lws_extension_callback_reasons reason, void *user, void *in, size_t len)
Definition: libwebsockets.h:1222
- -
int len
Definition: libwebsockets.h:1158
-
Definition: libwebsockets.h:2020
-
const char * def
Definition: libwebsockets.h:2027
-
Definition: libwebsockets.h:729
-
Definition: libwebsockets.h:1559
-
lws_context_options
Definition: libwebsockets.h:1530
-
Definition: libwebsockets.h:907
-
Definition: libwebsockets.h:1496
-
Definition: libwebsockets.h:1565
-
Definition: libwebsockets.h:895
-
const char * option_name
Definition: libwebsockets.h:1155
-
Definition: libwebsockets.h:2008
-
lws_sockfd_type fd
Definition: libwebsockets.h:538
+
Definition: libwebsockets.h:569
+
Definition: libwebsockets.h:2094
+
Definition: libwebsockets.h:1578
+
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:1223
+ +
int len
Definition: libwebsockets.h:1159
+
Definition: libwebsockets.h:2021
+
const char * def
Definition: libwebsockets.h:2028
+
Definition: libwebsockets.h:730
+
Definition: libwebsockets.h:1560
+
lws_context_options
Definition: libwebsockets.h:1531
+
Definition: libwebsockets.h:908
+
Definition: libwebsockets.h:1497
+
Definition: libwebsockets.h:1566
+
Definition: libwebsockets.h:896
+
const char * option_name
Definition: libwebsockets.h:1156
+
Definition: libwebsockets.h:2009
+
lws_sockfd_type fd
Definition: libwebsockets.h:539
LWS_VISIBLE LWS_EXTERN int lws_json_dump_context(const struct lws_context *context, char *buf, int len, int hide_vhosts)
-
const char * ssl_private_key_password
Definition: libwebsockets.h:1628
-
short events
Definition: libwebsockets.h:440
-
Definition: libwebsockets.h:1440
-
const struct lws_extension * extensions
Definition: libwebsockets.h:1431
-
const struct lws_http_mount * mount_next
Definition: libwebsockets.h:2021
+
const char * ssl_private_key_password
Definition: libwebsockets.h:1629
+
short events
Definition: libwebsockets.h:441
+
Definition: libwebsockets.h:1441
+
const struct lws_extension * extensions
Definition: libwebsockets.h:1432
+
const struct lws_http_mount * mount_next
Definition: libwebsockets.h:2022
LWS_VISIBLE LWS_EXTERN void lws_set_timeout(struct lws *wsi, enum pending_timeout reason, int secs)
-
void * userdata
Definition: libwebsockets.h:2112
-
Definition: libwebsockets.h:726
-
Definition: libwebsockets.h:913
+
void * userdata
Definition: libwebsockets.h:2113
+
Definition: libwebsockets.h:727
+
Definition: libwebsockets.h:914
LWS_VISIBLE LWS_EXTERN int lws_service_tsi(struct lws_context *context, int timeout_ms, int tsi)
-
unsigned char * data
Definition: libwebsockets.h:4083
-
const struct lws_protocol_vhost_options * extra_mimetypes
Definition: libwebsockets.h:2036
+
unsigned char * data
Definition: libwebsockets.h:4084
+
const struct lws_protocol_vhost_options * extra_mimetypes
Definition: libwebsockets.h:2037
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_finalize_http_header(struct lws *wsi, unsigned char **p, unsigned char *end)
-
Definition: libwebsockets.h:719
+
Definition: libwebsockets.h:720
LWS_VISIBLE LWS_EXTERN const char * lws_urlencode(char *escaped, const char *string, int len)
-
Definition: libwebsockets.h:800
-
uv_loop_t * loop
Definition: libwebsockets.h:4298
-
Definition: libwebsockets.h:898
+
Definition: libwebsockets.h:801
+
uv_loop_t * loop
Definition: libwebsockets.h:4299
+
Definition: libwebsockets.h:899
Definition: libwebsockets.h:72
-
Definition: libwebsockets.h:3311
-
int pos
Definition: libwebsockets.h:2551
-
struct lws_plugin * list
Definition: libwebsockets.h:1441
+
Definition: libwebsockets.h:3312
+
int pos
Definition: libwebsockets.h:2552
+
struct lws_plugin * list
Definition: libwebsockets.h:1442
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:1680
+
short max_http_header_data
Definition: libwebsockets.h:1681
LWS_VISIBLE LWS_EXTERN int lws_spa_process(struct lws_spa *spa, const char *in, int len)
-
void * provided_client_ssl_ctx
Definition: libwebsockets.h:1677
+
void * provided_client_ssl_ctx
Definition: libwebsockets.h:1678
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:1429
-
Definition: libwebsockets.h:1134
-
int ka_probes
Definition: libwebsockets.h:1663
+
const struct lws_protocols * protocols
Definition: libwebsockets.h:1430
+
Definition: libwebsockets.h:1135
+
int ka_probes
Definition: libwebsockets.h:1664
void onError(Socket *s, socket_error_t err)
-
const char * origin
Definition: libwebsockets.h:2106
-
SHORT revents
Definition: libwebsockets.h:426
-
const char * method
Definition: libwebsockets.h:2116
+
const char * origin
Definition: libwebsockets.h:2107
+
SHORT revents
Definition: libwebsockets.h:427
+
const char * method
Definition: libwebsockets.h:2117
LWS_VISIBLE LWS_EXTERN const char * lws_spa_get_string(struct lws_spa *spa, int n)
-
Definition: libwebsockets.h:1228
+
Definition: libwebsockets.h:1229
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:935
-
unsigned char origin_protocol
Definition: libwebsockets.h:2052
-
const char * log_filepath
Definition: libwebsockets.h:1716
-
Definition: libwebsockets.h:775
-
unsigned int max_content_size
Definition: libwebsockets.h:4306
-
int option_index
Definition: libwebsockets.h:1156
+
Definition: libwebsockets.h:936
+
unsigned char origin_protocol
Definition: libwebsockets.h:2053
+
const char * log_filepath
Definition: libwebsockets.h:1717
+
Definition: libwebsockets.h:776
+
unsigned int max_content_size
Definition: libwebsockets.h:4307
+
int option_index
Definition: libwebsockets.h:1157
LWS_VISIBLE LWS_EXTERN struct lws *LWS_WARN_UNUSED_RESULT lws_get_child(const struct lws *wsi)
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_header_by_token(struct lws *wsi, enum lws_token_indexes token, const unsigned char *value, int length, unsigned char **p, unsigned char *end)
-
Definition: libwebsockets.h:771
-
const char * uri_replace_to
Definition: libwebsockets.h:2126
-
struct lws * parent_wsi
Definition: libwebsockets.h:2119
+
Definition: libwebsockets.h:772
+
const char * uri_replace_to
Definition: libwebsockets.h:2127
+
struct lws * parent_wsi
Definition: libwebsockets.h:2120
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:4329
+
enum lwsgs_smtp_states estate
Definition: libwebsockets.h:4330
LWS_VISIBLE LWS_EXTERN int lws_spa_finalize(struct lws_spa *spa)
-
Definition: libwebsockets.h:671
+
Definition: libwebsockets.h:672
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:1707
-
char name[64]
Definition: libwebsockets.h:1447
+
const char *const * plugin_dirs
Definition: libwebsockets.h:1708
+
char name[64]
Definition: libwebsockets.h:1448
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_hdr_fragment_length(struct lws *wsi, enum lws_token_indexes h, int frag_idx)
LWS_VISIBLE LWS_EXTERN int lws_cgi_kill(struct lws *wsi)
-
char email_buf[256]
Definition: libwebsockets.h:4333
+
char email_buf[256]
Definition: libwebsockets.h:4334
LWS_VISIBLE LWS_EXTERN int lws_is_ssl(struct lws *wsi)
-
Definition: libwebsockets.h:1536
-
int(* close)(struct lws *wsi, lws_filefd_type fd)
Definition: libwebsockets.h:4150
-
uv_lib_t lib
Definition: libwebsockets.h:1443
-
x509_crt certificate
Definition: libwebsockets.h:242
+
Definition: libwebsockets.h:1537
+
int(* close)(struct lws *wsi, lws_filefd_type fd)
Definition: libwebsockets.h:4151
+
uv_lib_t lib
Definition: libwebsockets.h:1444
+
x509_crt certificate
Definition: libwebsockets.h:243
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:4284
+
Definition: libwebsockets.h:4285
LWS_VISIBLE LWS_EXTERN int lws_is_cgi(struct lws *wsi)
-
int ssl_connection
Definition: libwebsockets.h:2100
-
Definition: libwebsockets.h:1495
-
SSL_CTX * provided_client_ssl_ctx
Definition: libwebsockets.h:1671
+
int ssl_connection
Definition: libwebsockets.h:2101
+
Definition: libwebsockets.h:1496
+
SSL_CTX * provided_client_ssl_ctx
Definition: libwebsockets.h:1672
LWS_VISIBLE LWS_EXTERN int lws_rx_flow_control(struct lws *wsi, int enable)
-
Definition: libwebsockets.h:2539
+
Definition: libwebsockets.h:2540
LWS_VISIBLE LWS_EXTERN struct lws_plat_file_ops *LWS_WARN_UNUSED_RESULT lws_get_fops(struct lws_context *context)
-
Definition: libwebsockets.h:537
-
const struct lws_protocol_vhost_options * cgienv
Definition: libwebsockets.h:2032
-
const char * name
Definition: libwebsockets.h:1998
-
unsigned char mountpoint_len
Definition: libwebsockets.h:2053
-
Definition: libwebsockets.h:3282
-
Definition: libwebsockets.h:1554
-
lws_sockfd_type fd
Definition: libwebsockets.h:424
-
Definition: libwebsockets.h:2009
+
Definition: libwebsockets.h:538
+
const struct lws_protocol_vhost_options * cgienv
Definition: libwebsockets.h:2033
+
const char * name
Definition: libwebsockets.h:1999
+
unsigned char mountpoint_len
Definition: libwebsockets.h:2054
+
Definition: libwebsockets.h:3283
+
Definition: libwebsockets.h:1555
+
lws_sockfd_type fd
Definition: libwebsockets.h:425
+
Definition: libwebsockets.h:2010
LWS_VISIBLE LWS_EXTERN int lws_is_final_fragment(struct lws *wsi)
-
const struct lws_extension * extensions
Definition: libwebsockets.h:1622
-
Definition: libwebsockets.h:1538
+
const struct lws_extension * extensions
Definition: libwebsockets.h:1623
+
Definition: libwebsockets.h:1539
LWS_VISIBLE LWS_EXTERN void * lws_protocol_vh_priv_zalloc(struct lws_vhost *vhost, const struct lws_protocols *prot, int size)
-
Definition: libwebsockets.h:1543
-
lws_ext_options_types
Definition: libwebsockets.h:1132
-
const struct lws_protocols * protocols
Definition: libwebsockets.h:1618
+
Definition: libwebsockets.h:1544
+
lws_ext_options_types
Definition: libwebsockets.h:1133
+
const struct lws_protocols * protocols
Definition: libwebsockets.h:1619
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:1157
-
const char * ssl_cipher_list
Definition: libwebsockets.h:1642
+
const char * start
Definition: libwebsockets.h:1158
+
const char * ssl_cipher_list
Definition: libwebsockets.h:1643
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_header_by_name(struct lws *wsi, const unsigned char *name, const unsigned char *value, int length, unsigned char **p, unsigned char *end)
-
const char * mountpoint
Definition: libwebsockets.h:2023
-
const char * http_proxy_address
Definition: libwebsockets.h:1646
- -
rsa_context key
Definition: libwebsockets.h:243
-
const char * ssl_cert_filepath
Definition: libwebsockets.h:1630
-
const char * ecdh_curve
Definition: libwebsockets.h:1701
-
int cgi_timeout
Definition: libwebsockets.h:2041
-
Definition: libwebsockets.h:2011
-
Definition: libwebsockets.h:1480
-
Definition: libwebsockets.h:438
-
Definition: libwebsockets.h:594
+
const char * mountpoint
Definition: libwebsockets.h:2024
+
const char * http_proxy_address
Definition: libwebsockets.h:1647
+ +
rsa_context key
Definition: libwebsockets.h:244
+
const char * ssl_cert_filepath
Definition: libwebsockets.h:1631
+
const char * ecdh_curve
Definition: libwebsockets.h:1702
+
int cgi_timeout
Definition: libwebsockets.h:2042
+
Definition: libwebsockets.h:2012
+
Definition: libwebsockets.h:1481
+
Definition: libwebsockets.h:439
+
Definition: libwebsockets.h:595
LWS_VISIBLE LWS_EXTERN unsigned char lws_get_reserved_bits(struct lws *wsi)
LWS_VISIBLE LWS_EXTERN unsigned char * lws_SHA1(const unsigned char *d, size_t n, unsigned char *md)
LWS_VISIBLE LWS_EXTERN const unsigned char * lws_token_to_string(enum lws_token_indexes token)
LWS_VISIBLE LWS_EXTERN int lws_set_extension_option(struct lws *wsi, const char *ext_name, const char *opt_name, const char *opt_val)
-
Definition: libwebsockets.h:739
+
Definition: libwebsockets.h:740
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:773
+
Definition: libwebsockets.h:774
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:1563
+
Definition: libwebsockets.h:1564
LWS_VISIBLE LWS_EXTERN int lwsl_timestamp(int level, char *p, int len)
-
Definition: libwebsockets.h:1011
-
Definition: libwebsockets.h:1575
-
uv_timer_t timeout_email
Definition: libwebsockets.h:4328
-
Definition: libwebsockets.h:1545
-
short max_http_header_pool
Definition: libwebsockets.h:1683
+
Definition: libwebsockets.h:1012
+
Definition: libwebsockets.h:1576
+
uv_timer_t timeout_email
Definition: libwebsockets.h:4329
+
Definition: libwebsockets.h:1546
+
short max_http_header_pool
Definition: libwebsockets.h:1684
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:2540
-
x509_crt ca
Definition: libwebsockets.h:241
-
size_t per_session_data_size
Definition: libwebsockets.h:1326
-
Definition: libwebsockets.h:578
-
const struct lws_protocol_vhost_options * reject_service_keywords
Definition: libwebsockets.h:1755
-
lwsgs_smtp_states
Definition: libwebsockets.h:4282
-
Definition: libwebsockets.h:1557
-
Definition: libwebsockets.h:851
+
char * p
Definition: libwebsockets.h:2541
+
x509_crt ca
Definition: libwebsockets.h:242
+
size_t per_session_data_size
Definition: libwebsockets.h:1327
+
Definition: libwebsockets.h:579
+
const struct lws_protocol_vhost_options * reject_service_keywords
Definition: libwebsockets.h:1756
+
lwsgs_smtp_states
Definition: libwebsockets.h:4283
+
Definition: libwebsockets.h:1558
+
Definition: libwebsockets.h:852
LWS_VISIBLE LWS_EXTERN struct lws * lws_adopt_socket_vhost_readbuf(struct lws_vhost *vhost, lws_sockfd_type accept_fd, const char *readbuf, size_t len)
-
Definition: libwebsockets.h:737
-
Definition: libwebsockets.h:1318
-
Definition: libwebsockets.h:583
+
Definition: libwebsockets.h:738
+
Definition: libwebsockets.h:1319
+
Definition: libwebsockets.h:584
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:1690
-
const char * email
Definition: libwebsockets.h:1503
+
unsigned int count_threads
Definition: libwebsockets.h:1691
+
const char * email
Definition: libwebsockets.h:1504
LWS_VISIBLE LWS_EXTERN int lws_get_random(struct lws_context *context, void *buf, int len)
-
Definition: libwebsockets.h:565
-
uv_connect_t email_connect_req
Definition: libwebsockets.h:4330
-
const char * server_string
Definition: libwebsockets.h:1721
-
Definition: libwebsockets.h:1568
-
SHORT events
Definition: libwebsockets.h:425
-
Definition: libwebsockets.h:742
-
Definition: libwebsockets.h:1552
-
const char * vhost_name
Definition: libwebsockets.h:1703
-
Definition: libwebsockets.h:2012
+
Definition: libwebsockets.h:566
+
uv_connect_t email_connect_req
Definition: libwebsockets.h:4331
+
const char * server_string
Definition: libwebsockets.h:1722
+
Definition: libwebsockets.h:1569
+
SHORT events
Definition: libwebsockets.h:426
+
Definition: libwebsockets.h:743
+
Definition: libwebsockets.h:1553
+
const char * vhost_name
Definition: libwebsockets.h:1704
+
Definition: libwebsockets.h:2013
LWS_VISIBLE LWS_EXTERN const struct lws_protocols * lws_get_protocol(struct lws *wsi)
-
Definition: libwebsockets.h:1478
-
Definition: libwebsockets.h:1500
-
unsigned int fd_limit_per_thread
Definition: libwebsockets.h:1692
+
Definition: libwebsockets.h:1479
+
Definition: libwebsockets.h:1501
+
unsigned int fd_limit_per_thread
Definition: libwebsockets.h:1693
LWS_VISIBLE LWS_EXTERN int lws_cgi_write_split_stdout_headers(struct lws *wsi)
-
lws_gs_event
Definition: libwebsockets.h:1494
+
lws_gs_event
Definition: libwebsockets.h:1495
LWS_VISIBLE LWS_EXTERN int lws_finalize_startup(struct lws_context *context)
-
int ka_interval
Definition: libwebsockets.h:1667
-
Definition: libwebsockets.h:1477
-
int uid
Definition: libwebsockets.h:1653
-
Definition: libwebsockets.h:2932
+
int ka_interval
Definition: libwebsockets.h:1668
+
Definition: libwebsockets.h:1478
+
int uid
Definition: libwebsockets.h:1654
+
Definition: libwebsockets.h:2933
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:1319
+
const char * name
Definition: libwebsockets.h:1320
LWS_VISIBLE LWS_EXTERN int lws_init_vhost_client_ssl(const struct lws_context_creation_info *info, struct lws_vhost *vhost)
-
Definition: libwebsockets.h:4288
-
unsigned int http_proxy_port
Definition: libwebsockets.h:1649
+
Definition: libwebsockets.h:4289
+
unsigned int http_proxy_port
Definition: libwebsockets.h:1650
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_partial_buffered(struct lws *wsi)
-
unsigned int timeout_secs
Definition: libwebsockets.h:1696
-
int port
Definition: libwebsockets.h:1606
+
unsigned int timeout_secs
Definition: libwebsockets.h:1697
+
int port
Definition: libwebsockets.h:1607
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:1655
+
unsigned int options
Definition: libwebsockets.h:1656
LWS_VISIBLE LWS_EXTERN int lws_spa_get_length(struct lws_spa *spa, int n)
-
const struct lws_protocol_vhost_options * options
Definition: libwebsockets.h:1997
-
int prev_events
Definition: libwebsockets.h:540
-
int keepalive_timeout
Definition: libwebsockets.h:1713
-
Definition: libwebsockets.h:1484
-
Definition: libwebsockets.h:1145
-
const struct lws_protocol_vhost_options * headers
Definition: libwebsockets.h:1751
-
Definition: libwebsockets.h:2729
+
const struct lws_protocol_vhost_options * options
Definition: libwebsockets.h:1998
+
int prev_events
Definition: libwebsockets.h:541
+
int keepalive_timeout
Definition: libwebsockets.h:1714
+
Definition: libwebsockets.h:1485
+
Definition: libwebsockets.h:1146
+
const struct lws_protocol_vhost_options * headers
Definition: libwebsockets.h:1752
+
Definition: libwebsockets.h:2730
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:1710
-
const char * basic_auth_login_file
Definition: libwebsockets.h:2055
-
const char * host
Definition: libwebsockets.h:2104
-
Definition: libwebsockets.h:1154
-
Definition: libwebsockets.h:604
+
const struct lws_protocol_vhost_options * pvo
Definition: libwebsockets.h:1711
+
const char * basic_auth_login_file
Definition: libwebsockets.h:2056
+
const char * host
Definition: libwebsockets.h:2105
+
Definition: libwebsockets.h:1155
+
Definition: libwebsockets.h:605
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:4085
+
int len
Definition: libwebsockets.h:4086
LWS_VISIBLE LWS_EXTERN const char * lws_get_urlarg_by_name(struct lws *wsi, const char *name, char *buf, int len)
-
const char * iface
Definition: libwebsockets.h:1611
-
Definition: libwebsockets.h:4144
+
const char * iface
Definition: libwebsockets.h:1612
+
Definition: libwebsockets.h:4145
LWS_VISIBLE LWS_EXTERN void lwsl_hexdump(void *buf, size_t len)
-
Definition: libwebsockets.h:1016
-
lws_spa_fileupload_states
Definition: libwebsockets.h:2927
+
Definition: libwebsockets.h:1017
+
lws_spa_fileupload_states
Definition: libwebsockets.h:2928
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:562
-
Definition: libwebsockets.h:571
+ +
Definition: libwebsockets.h:563
+
Definition: libwebsockets.h:572
LWS_VISIBLE LWS_EXTERN const char * lws_sql_purify(char *escaped, const char *string, int len)
-
uv_tcp_t email_client
Definition: libwebsockets.h:4331
-
Definition: libwebsockets.h:423
-
Definition: libwebsockets.h:675
-
lws_filefd_type(* open)(struct lws *wsi, const char *filename, unsigned long *filelen, int flags)
Definition: libwebsockets.h:4145
-
lws_write_protocol
Definition: libwebsockets.h:3274
-
const char * client_offer
Definition: libwebsockets.h:1231
-
int(* read)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)
Definition: libwebsockets.h:4155
+
uv_tcp_t email_client
Definition: libwebsockets.h:4332
+
Definition: libwebsockets.h:424
+
Definition: libwebsockets.h:676
+
lws_filefd_type(* open)(struct lws *wsi, const char *filename, unsigned long *filelen, int flags)
Definition: libwebsockets.h:4146
+
lws_write_protocol
Definition: libwebsockets.h:3275
+
const char * client_offer
Definition: libwebsockets.h:1232
+
int(* read)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)
Definition: libwebsockets.h:4156
LWS_VISIBLE LWS_EXTERN void lws_cancel_service(struct lws_context *context)
-
Definition: libwebsockets.h:2928
-
Definition: libwebsockets.h:576
-
const char * origin
Definition: libwebsockets.h:2025
-
const char * name
Definition: libwebsockets.h:1146
+
Definition: libwebsockets.h:2929
+
Definition: libwebsockets.h:577
+
const char * origin
Definition: libwebsockets.h:2026
+
const char * name
Definition: libwebsockets.h:1147
LWS_VISIBLE LWS_EXTERN int lws_serve_http_file(struct lws *wsi, const char *file, const char *content_type, const char *other_headers, int other_headers_len)
LWS_VISIBLE LWS_EXTERN void lws_email_check(struct lws_email *email)
LWS_VISIBLE LWS_EXTERN int lws_set_proxy(struct lws_vhost *vhost, const char *proxy)
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_frame_is_binary(struct lws *wsi)
LWS_VISIBLE LWS_EXTERN int lws_hdr_copy(struct lws *wsi, char *dest, int len, enum lws_token_indexes h)
-
Definition: libwebsockets.h:752
-
const char * name
Definition: libwebsockets.h:1229
-
Definition: libwebsockets.h:4287
-
short revents
Definition: libwebsockets.h:441
-
lws_extension_callback_function * callback
Definition: libwebsockets.h:1230
-
long ssl_options_set
Definition: libwebsockets.h:1735
-
Definition: libwebsockets.h:1058
+
Definition: libwebsockets.h:753
+
const char * name
Definition: libwebsockets.h:1230
+
Definition: libwebsockets.h:4288
+
short revents
Definition: libwebsockets.h:442
+
lws_extension_callback_function * callback
Definition: libwebsockets.h:1231
+
long ssl_options_set
Definition: libwebsockets.h:1736
+
Definition: libwebsockets.h:1059
LWS_VISIBLE LWS_EXTERN const struct lws_protocols * lws_protocol_get(struct lws *wsi) LWS_WARN_DEPRECATED
-
unsigned int mask
Definition: libwebsockets.h:1488
+
unsigned int mask
Definition: libwebsockets.h:1489
LWS_VISIBLE LWS_EXTERN int lws_email_init(struct lws_email *email, uv_loop_t *loop, int max_content)
-
const void * client_exts
Definition: libwebsockets.h:2114
-
lws_mount_protocols
Definition: libwebsockets.h:2006
+
const void * client_exts
Definition: libwebsockets.h:2115
+
lws_mount_protocols
Definition: libwebsockets.h:2007
LWS_EXTERN int lws_extension_callback_pm_deflate(struct lws_context *context, const struct lws_extension *ext, struct lws *wsi, enum lws_extension_callback_reasons reason, void *user, void *in, size_t len)
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_header_content_length(struct lws *wsi, unsigned long content_length, unsigned char **p, unsigned char *end)
-
lws_sockfd_type fd
Definition: libwebsockets.h:439
-
unsigned int max_http_header_data2
Definition: libwebsockets.h:1730
-
Definition: libwebsockets.h:2007
+
lws_sockfd_type fd
Definition: libwebsockets.h:440
+
unsigned int max_http_header_data2
Definition: libwebsockets.h:1731
+
Definition: libwebsockets.h:2008
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:2038
-
void * external_baggage_free_on_destroy
Definition: libwebsockets.h:1762
+
const struct lws_protocol_vhost_options * interpret
Definition: libwebsockets.h:2039
+
void * external_baggage_free_on_destroy
Definition: libwebsockets.h:1763
LWS_VISIBLE LWS_EXTERN int lws_service(struct lws_context *context, int timeout_ms)
- -
Definition: libwebsockets.h:1550
+ +
Definition: libwebsockets.h:1551
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_http_transaction_completed(struct lws *wsi)
-
int count_vars
Definition: libwebsockets.h:2554
+
int count_vars
Definition: libwebsockets.h:2555
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_header_status(struct lws *wsi, unsigned int code, unsigned char **p, unsigned char *end)
-
Definition: libwebsockets.h:2608
+
Definition: libwebsockets.h:2609
LWS_VISIBLE LWS_EXTERN struct lws_context * lws_create_context(struct lws_context_creation_info *info)
-
Definition: libwebsockets.h:731
-
void * data
Definition: libwebsockets.h:2552
-
char * content
Definition: libwebsockets.h:4334
+
Definition: libwebsockets.h:732
+
void * data
Definition: libwebsockets.h:2553
+
char * content
Definition: libwebsockets.h:4335
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:1625
-
Definition: libwebsockets.h:4295
-
const char * address
Definition: libwebsockets.h:2096
-
unsigned long(* seek_cur)(struct lws *wsi, lws_filefd_type fd, long offset_from_cur_pos)
Definition: libwebsockets.h:4152
-
void * user
Definition: libwebsockets.h:1347
-
int events
Definition: libwebsockets.h:539
+
const struct lws_token_limits * token_limits
Definition: libwebsockets.h:1626
+
Definition: libwebsockets.h:4296
+
const char * address
Definition: libwebsockets.h:2097
+
unsigned long(* seek_cur)(struct lws *wsi, lws_filefd_type fd, long offset_from_cur_pos)
Definition: libwebsockets.h:4153
+
void * user
Definition: libwebsockets.h:1348
+
int events
Definition: libwebsockets.h:540
LWS_VISIBLE LWS_EXTERN unsigned int lws_http_client_http_response(struct lws *wsi)
-
int(* on_get_body)(struct lws_email *email, char *buf, int len)
Definition: libwebsockets.h:4321
-
Definition: libwebsockets.h:2013
-
void * user
Definition: libwebsockets.h:1657
-
Definition: libwebsockets.h:4291
-
Definition: libwebsockets.h:3297
-
char * token
Definition: libwebsockets.h:2609
+
int(* on_get_body)(struct lws_email *email, char *buf, int len)
Definition: libwebsockets.h:4322
+
Definition: libwebsockets.h:2014
+
void * user
Definition: libwebsockets.h:1658
+
Definition: libwebsockets.h:4292
+
Definition: libwebsockets.h:3298
+
char * token
Definition: libwebsockets.h:2610
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:1430
-
void * l
Definition: libwebsockets.h:1445
-
const char * ssl_private_key_filepath
Definition: libwebsockets.h:1634
-
Definition: libwebsockets.h:1583
-
int max_len
Definition: libwebsockets.h:2542
-
Definition: libwebsockets.h:733
-
const struct lws_protocol_vhost_options * next
Definition: libwebsockets.h:1996
-
Definition: libwebsockets.h:744
+
int count_protocols
Definition: libwebsockets.h:1431
+
void * l
Definition: libwebsockets.h:1446
+
const char * ssl_private_key_filepath
Definition: libwebsockets.h:1635
+
Definition: libwebsockets.h:1584
+
int max_len
Definition: libwebsockets.h:2543
+
Definition: libwebsockets.h:734
+
const struct lws_protocol_vhost_options * next
Definition: libwebsockets.h:1997
+
Definition: libwebsockets.h:745
LWS_VISIBLE LWS_EXTERN void lws_rx_flow_allow_all_protocol(const struct lws_context *context, const struct lws_protocols *protocol)
-
Definition: libwebsockets.h:2548
+
Definition: libwebsockets.h:2549
LWS_VISIBLE LWS_EXTERN const char *LWS_WARN_UNUSED_RESULT lws_canonical_hostname(struct lws_context *context)
-
Definition: libwebsockets.h:943
-
const char * ssl_ca_filepath
Definition: libwebsockets.h:1640
-
lws_client_connect_ssl_connection_flags
Definition: libwebsockets.h:2083
-
int gid
Definition: libwebsockets.h:1651
-
struct lws_vhost * vhost
Definition: libwebsockets.h:2128
-
int lws_callback_function(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len)
Definition: libwebsockets.h:1080
+
Definition: libwebsockets.h:944
+
const char * ssl_ca_filepath
Definition: libwebsockets.h:1641
+
lws_client_connect_ssl_connection_flags
Definition: libwebsockets.h:2084
+
int gid
Definition: libwebsockets.h:1652
+
struct lws_vhost * vhost
Definition: libwebsockets.h:2129
+
int lws_callback_function(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len)
Definition: libwebsockets.h:1081
LWS_VISIBLE LWS_EXTERN void lws_cancel_service_pt(struct lws *wsi)
-
Definition: libwebsockets.h:1570
-
Definition: libwebsockets.h:612
-
Definition: libwebsockets.h:4286
-
unsigned int api_magic
Definition: libwebsockets.h:1428
-
Definition: libwebsockets.h:1573
+
Definition: libwebsockets.h:1571
+
Definition: libwebsockets.h:613
+
Definition: libwebsockets.h:4287
+
unsigned int api_magic
Definition: libwebsockets.h:1429
+
Definition: libwebsockets.h:1574
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_send_pipe_choked(struct lws *wsi)
-
Definition: libwebsockets.h:4289
-
int(* lws_spa_fileupload_cb)(void *data, const char *name, const char *filename, char *buf, int len, enum lws_spa_fileupload_states state)
Definition: libwebsockets.h:2949
+
Definition: libwebsockets.h:4290
+
int(* lws_spa_fileupload_cb)(void *data, const char *name, const char *filename, char *buf, int len, enum lws_spa_fileupload_states state)
Definition: libwebsockets.h:2950
diff --git a/lib/libwebsockets.c b/lib/libwebsockets.c index c9727ec4..3128dae7 100755 --- a/lib/libwebsockets.c +++ b/lib/libwebsockets.c @@ -2722,7 +2722,7 @@ lws_json_dump_context(const struct lws_context *context, char *buf, int len, const struct lws_vhost *vh = context->vhost_list; const struct lws_context_per_thread *pt; time_t t = time(NULL); - int n, cc = 0, listening = 0, cgi_count = 0; + int n, listening = 0, cgi_count = 0; struct lws_conn_stats cs; double d = 0; #ifdef LWS_WITH_CGI @@ -2755,9 +2755,6 @@ lws_json_dump_context(const struct lws_context *context, char *buf, int len, buf += lws_snprintf(buf, end - buf, "\"contexts\":[\n"); - if (cc++) - buf += lws_snprintf(buf, end - buf, ","); - buf += lws_snprintf(buf, end - buf, "{ " "\"context_uptime\":\"%ld\",\n" "\"cgi_spawned\":\"%d\",\n"