Skip to content

Commit 38c4a0d

Browse files
committed
sai-fixes
1 parent a6b3d33 commit 38c4a0d

48 files changed

Lines changed: 738 additions & 139 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.sai.json

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@
6969
"w11/x86_64-amd/msvc": {
7070
"default": false,
7171
"build": [
72-
"\"C:\\Program Files\\CMake\\bin\\cmake.exe\" -S . -B build -DOPENSSL_ROOT_DIR=\"C:\\Users\\andy\\vcpkg\\packages\\openssl_x64-windows\" -DLWS_EXT_PTHREAD_INCLUDE_DIR=\"C:\\Program Files (x86)\\pthreads\\include\" -DLWS_EXT_PTHREAD_LIBRARIES=\"C:\\Program Files (x86)\\pthreads\\lib\\x64\\libpthreadGC2.a\" ${cmake}",
72+
"\"C:\\Program Files\\CMake\\bin\\cmake.exe\" -S . -B build -DLWS_WITH_SCHANNEL=0 -DOPENSSL_ROOT_DIR=\"C:\\Users\\andy\\vcpkg\\packages\\openssl_x64-windows\" -DLWS_EXT_PTHREAD_INCLUDE_DIR=\"C:\\Program Files (x86)\\pthreads\\include\" -DLWS_EXT_PTHREAD_LIBRARIES=\"C:\\Program Files (x86)\\pthreads\\lib\\x64\\libpthreadGC2.a\" ${cmake}",
7373
"\"C:\\Program Files\\CMake\\bin\\cmake.exe\" --build build --config DEBUG --parallel %SAI_PARALLEL%",
7474
"\"C:\\Program Files\\CMake\\bin\\ctest.exe\" --test-dir build -C DEBUG -j%SAI_PARALLEL% --output-on-failure --repeat until-pass:3"
7575
]
@@ -120,10 +120,14 @@
120120
"cmake": "-DLWS_WITH_SYS_FAULT_INJECTION=1 -DLWS_WITH_MINIMAL_EXAMPLES=1 -DLWS_WITH_CBOR=1"
121121
},
122122
"esp32-heltec": {
123-
"cmake": "-DLWS_IPV6=0",
123+
"cmake": "-DLWS_IPV6=1",
124124
"cpack": "esp-heltec-wb32",
125125
"platforms": "none, freertos-espidf/xl6-esp32/gcc"
126126
},
127+
"mbedtls4": {
128+
"cmake": "-DLWS_WITH_MBEDTLS=1 -DCMAKE_PREFIX_PATH=/opt/mbedtls -DLWS_WITH_MINIMAL_EXAMPLES=1",
129+
"platforms": "none, rocky9/aarch64-a72a55-rk3588/gcc"
130+
},
127131
"gnutls": {
128132
"cmake": "-DLWS_WITH_GNUTLS=1 -DLWS_GNUTLS_INCLUDE_DIRS=\"/opt/gnutls/lib/includes\" -DLWS_GNUTLS_LIBRARIES=\"/opt/gnutls/lib/.libs/libgnutls.so\" -DLWS_ROLE_QUIC=1",
129133
"platforms": "none, rocky9/aarch64-a72a55-rk3588/gcc"

CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,11 @@ if (LWS_WITH_BEARSSL)
256256
set(LWS_WITH_HTTP3 0)
257257
endif()
258258

259+
if (LWS_WITH_SSL AND NOT (LWS_WITH_BORINGSSL OR LWS_WITH_AWSLC OR LWS_WITH_MBEDTLS OR LWS_WITH_WOLFSSL OR LWS_WITH_CYASSL OR LWS_WITH_GNUTLS OR LWS_WITH_BEARSSL OR LWS_WITH_SCHANNEL))
260+
set(LWS_ROLE_QUIC 0)
261+
set(LWS_WITH_HTTP3 0)
262+
endif()
263+
259264
if (WIN32 AND NOT (LWS_WITH_BORINGSSL OR LWS_WITH_AWSLC OR LWS_WITH_MBEDTLS OR LWS_WITH_WOLFSSL OR LWS_WITH_CYASSL OR LWS_WITH_BEARSSL OR LWS_WITH_GNUTLS))
260265
set(LWS_SCHANNEL_DEFAULT ON)
261266
else()

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ and am starting to port more cases from there into SS-based examples.
102102
|Loop support, sul scheduler|default, event libs|same|
103103
|Supports comms mode|Client, Server, Raw|same|
104104
|Supports protocols|h1, h2, ws, mqtt (client)|same|
105-
|TLS support|mbedtls (including v3), openssl (including v3), wolfssl, boringssl, aws-lc, libressl|same|
105+
|TLS support|mbedtls (including v3 and v4, no QUIC), openssl (including v3), wolfssl, boringssl, aws-lc, libressl|same|
106106
|Serializable, proxiable, muxable, transportable|No|Yes|
107107
|Auto-allocated per-connection user object|pss specified in lws_protocols|Specified in ss info struct|
108108
|Connection User API|Protocol-specific lws_protocols cbs (> 100)|SS API (rx, tx, state callbacks only)|

include/libwebsockets/lws-genhash.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ struct lws_genhmac_ctx {
132132
EVP_MD_CTX *ctx;
133133
EVP_PKEY *key;
134134
#else
135-
#if defined(LWS_HAVE_HMAC_CTX_new) || defined(LWS_WITH_BORINGSSL)
135+
#if defined(LWS_HAVE_HMAC_CTX_new) || defined(LWS_WITH_BORINGSSL) || defined(LWS_WITH_AWSLC)
136136
HMAC_CTX *ctx;
137137
#else
138138
HMAC_CTX ctx;

include/libwebsockets/lws-secure-streams-policy.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ typedef struct lws_ss_trust_store {
152152
enum {
153153
LWSSSP_H1,
154154
LWSSSP_H2,
155+
LWSSSP_H3,
155156
LWSSSP_WS,
156157
LWSSSP_MQTT,
157158
LWSSSP_RAW,
@@ -267,6 +268,8 @@ typedef struct lws_ss_policy {
267268
// } h1;
268269
// struct { /* LWSSSP_H2 */
269270
// } h2;
271+
// struct { /* LWSSSP_H3 */
272+
// } h3;
270273
struct { /* LWSSSP_WS */
271274
const char *subprotocol;
272275
uint8_t binary;

lib/core-net/network.c

Lines changed: 43 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ lws_get_addresses(struct lws_vhost *vh, void *ads, char *name,
131131
memmove(rip, rip + 7, strlen(rip) - 6);
132132

133133
if (name) {
134+
#if !defined(LWS_PLAT_FREERTOS) && !defined(LWS_PLAT_OPTEE)
134135
getnameinfo((struct sockaddr *)ads, sizeof(struct sockaddr_in6),
135136
name,
136137
#if defined(__ANDROID__)
@@ -139,6 +140,12 @@ lws_get_addresses(struct lws_vhost *vh, void *ads, char *name,
139140
(socklen_t)name_len,
140141
#endif
141142
NULL, 0, 0);
143+
#else
144+
if (!lws_plat_inet_ntop(AF_INET6,
145+
&((struct sockaddr_in6 *)ads)->sin6_addr,
146+
name, (socklen_t)name_len))
147+
name[0] = '\0';
148+
#endif
142149
}
143150

144151
return 0;
@@ -148,8 +155,8 @@ lws_get_addresses(struct lws_vhost *vh, void *ads, char *name,
148155
addr4.sin_family = AF_INET;
149156
addr4.sin_addr = ((struct sockaddr_in *)ads)->sin_addr;
150157

151-
#if !defined(LWS_PLAT_FREERTOS)
152158
if (name) {
159+
#if !defined(LWS_PLAT_FREERTOS) && !defined(LWS_PLAT_OPTEE)
153160
getnameinfo((struct sockaddr *)ads,
154161
sizeof(struct sockaddr_in),
155162
name,
@@ -159,8 +166,13 @@ lws_get_addresses(struct lws_vhost *vh, void *ads, char *name,
159166
(socklen_t)name_len,
160167
#endif
161168
NULL, 0, 0);
162-
}
169+
#else
170+
if (!lws_plat_inet_ntop(AF_INET,
171+
&((struct sockaddr_in *)ads)->sin_addr,
172+
name, (socklen_t)name_len))
173+
name[0] = '\0';
163174
#endif
175+
}
164176
}
165177

166178
if (addr4.sin_family == AF_UNSPEC)
@@ -278,7 +290,7 @@ lws_socket_bind(struct lws_vhost *vhost, struct lws *wsi,
278290
#ifdef LWS_WITH_UNIX_SOCK
279291
struct sockaddr_un serv_unix;
280292
#endif
281-
#ifdef LWS_WITH_IPV6
293+
#if defined(LWS_WITH_IPV6) && !defined(LWS_PLAT_FREERTOS) && !defined(LWS_PLAT_OPTEE)
282294
struct sockaddr_in6 serv_addr6;
283295
#endif
284296
struct sockaddr_in serv_addr4;
@@ -602,11 +614,13 @@ unsigned long
602614
lws_get_addr_scope(struct lws *wsi, const char *ifname_or_ipaddr)
603615
{
604616
unsigned long scope;
605-
char ip[NI_MAXHOST];
617+
#if !defined(LWS_PLAT_FREERTOS) && !defined(LWS_PLAT_OPTEE)
618+
char ip[256];
606619
unsigned int i;
607-
#if !defined(WIN32)
620+
#endif
621+
#if !defined(WIN32) && !defined(LWS_PLAT_FREERTOS) && !defined(LWS_PLAT_OPTEE)
608622
struct ifaddrs *addrs, *addr;
609-
#else
623+
#elif defined(WIN32)
610624
PIP_ADAPTER_ADDRESSES adapter, addrs = NULL;
611625
PIP_ADAPTER_UNICAST_ADDRESS addr;
612626
struct sockaddr_in6 *sockaddr;
@@ -631,7 +645,7 @@ lws_get_addr_scope(struct lws *wsi, const char *ifname_or_ipaddr)
631645

632646
scope = 0;
633647

634-
#if !defined(WIN32)
648+
#if !defined(WIN32) && !defined(LWS_PLAT_FREERTOS) && !defined(LWS_PLAT_OPTEE)
635649

636650
getifaddrs(&addrs);
637651
for (addr = addrs; addr; addr = addr->ifa_next) {
@@ -656,7 +670,28 @@ lws_get_addr_scope(struct lws *wsi, const char *ifname_or_ipaddr)
656670
}
657671
}
658672
freeifaddrs(addrs);
659-
#else
673+
#elif defined(LWS_PLAT_FREERTOS)
674+
#if defined(LWS_AMAZON_RTOS) || defined(LWS_ESP_PLATFORM)
675+
#include <lwip/netif.h>
676+
#include <lwip/ip6_addr.h>
677+
{
678+
ip6_addr_t ip6;
679+
struct netif *netif;
680+
int j;
681+
682+
if (ip6addr_aton(ifname_or_ipaddr, &ip6)) {
683+
for (netif = netif_list; netif != NULL; netif = netif->next) {
684+
for (j = 0; j < LWIP_IPV6_NUM_ADDRESSES; j++) {
685+
if (ip6_addr_isvalid(netif_ip6_addr_state(netif, j)) &&
686+
ip6_addr_cmp(&ip6, netif_ip6_addr(netif, j))) {
687+
return netif_get_index(netif);
688+
}
689+
}
690+
}
691+
}
692+
}
693+
#endif
694+
#elif defined(WIN32)
660695

661696
for (i = 0; i < 5; i++) {
662697
ret = GetAdaptersAddresses(AF_INET6, GAA_FLAG_INCLUDE_PREFIX,

lib/core-net/output.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,13 @@ lws_ssl_capable_write_no_ssl(struct lws *wsi, unsigned char *buf, size_t len)
355355
#endif
356356
len, 0, sa46_sockaddr(&wsi->udp->sa46),
357357
sa46_socklen(&wsi->udp->sa46));
358+
359+
if (n < 0 && LWS_ERRNO == LWS_EISCONN)
360+
n = (int)sendto(wsi->desc.sockfd, (const char *)buf,
361+
#if defined(WIN32)
362+
(int)
363+
#endif
364+
len, 0, NULL, 0);
358365
} else
359366
#endif
360367
if (wsi->role_ops->file_handle)

lib/core/context.c

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,9 @@ static const char * const opts_str =
337337
#if defined(LWS_ROLE_H2)
338338
"H2 "
339339
#endif
340+
#if defined(LWS_ROLE_H3)
341+
"H3 "
342+
#endif
340343
#if defined(LWS_ROLE_WS)
341344
"WS "
342345
#endif
@@ -415,15 +418,14 @@ lws_create_context(const struct lws_context_creation_info *info)
415418
#if defined(__ANDROID__)
416419
struct rlimit rt;
417420
#endif
418-
size_t
419421
#if defined(LWS_PLAT_FREERTOS)
420422
/* smaller default, can set in info->pt_serv_buf_size */
421-
s1 = 2048,
423+
size_t s1 = 2048;
422424
#else
423-
s1 = 4096,
425+
size_t s1 = 4096;
424426
#endif
425-
size = sizeof(struct lws_context);
426427
#endif
428+
size_t size = sizeof(struct lws_context);
427429
#if !defined(LWS_PLAT_BAREMETAL) && defined(LWS_WITH_NETWORK)
428430
int n;
429431
#endif
@@ -646,6 +648,7 @@ lws_create_context(const struct lws_context_creation_info *info)
646648

647649
if (!plev || lws_fi(&info->fic, "ctx_createfail_evlib_sel"))
648650
goto fail_event_libs;
651+
#endif /* LWS_WITH_NETWORK */
649652

650653
#if defined(LWS_WITH_NETWORK)
651654
size += (size_t)plev->ops->evlib_size_ctx /* the ctx evlib priv */ +
@@ -661,6 +664,15 @@ lws_create_context(const struct lws_context_creation_info *info)
661664
goto early_bail;
662665
}
663666

667+
context->name = info->vhost_name;
668+
if (info->log_cx)
669+
context->log_cx = info->log_cx;
670+
else
671+
context->log_cx = &log_cx;
672+
lwsl_refcount_cx(context->log_cx, 1);
673+
674+
#if defined(LWS_WITH_NETWORK)
675+
664676
#if defined(LWS_WITH_SYS_STATE)
665677
// NOTE: we need to init this fields because they may be used in logger when context destroying
666678
context->mgr_system.state_names = system_state_names;
@@ -704,12 +716,6 @@ lws_create_context(const struct lws_context_creation_info *info)
704716
context->argc = info->argc;
705717
context->argv = info->argv;
706718
#endif
707-
context->name = info->vhost_name;
708-
if (info->log_cx)
709-
context->log_cx = info->log_cx;
710-
else
711-
context->log_cx = &log_cx;
712-
lwsl_refcount_cx(context->log_cx, 1);
713719

714720
context->system_ops = info->system_ops;
715721

lib/event-libs/glib/glib.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,8 @@ elops_accept_glib(struct lws *wsi)
265265
struct lws_wsi_eventlibs_glib *wsipr = wsi_to_priv_glib(wsi);
266266
int fd;
267267

268-
assert(!wsi_to_subclass(wsi));
268+
if (wsi_to_subclass(wsi))
269+
return 0;
269270

270271
wsi_to_subclass(wsi) = (struct lws_io_watcher_glib_subclass *)
271272
g_source_new((GSourceFuncs *)&lws_glib_source_ops,

lib/roles/h3/ops-h3.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -610,7 +610,9 @@ lws_h3_create_unidi_stream(struct lws *nwsi, uint8_t type)
610610

611611
{
612612
uint8_t pre[LWS_PRE + 16];
613+
#if (_LWS_ENABLED_LOGS & LLL_NOTICE)
613614
int n;
615+
#endif
614616
size_t send_len = 1;
615617
pre[LWS_PRE] = type;
616618
if (type == 0x00) {
@@ -643,11 +645,19 @@ lws_h3_create_unidi_stream(struct lws *nwsi, uint8_t type)
643645
send_len = 6;
644646
}
645647

648+
#if (_LWS_ENABLED_LOGS & LLL_NOTICE)
646649
n = lws_write(cwsi, &pre[LWS_PRE], send_len, LWS_WRITE_BINARY | LWS_WRITE_NO_FIN);
647650
lwsl_notice("lws_h3_create_unidi_stream: lws_write control ret %d\n", n);
651+
#else
652+
lws_write(cwsi, &pre[LWS_PRE], send_len, LWS_WRITE_BINARY | LWS_WRITE_NO_FIN);
653+
#endif
648654
} else {
655+
#if (_LWS_ENABLED_LOGS & LLL_NOTICE)
649656
n = lws_write(cwsi, &pre[LWS_PRE], 1, LWS_WRITE_BINARY | LWS_WRITE_NO_FIN);
650657
lwsl_notice("lws_h3_create_unidi_stream: lws_write %d ret %d\n", type, n);
658+
#else
659+
lws_write(cwsi, &pre[LWS_PRE], 1, LWS_WRITE_BINARY | LWS_WRITE_NO_FIN);
660+
#endif
651661
}
652662
}
653663

0 commit comments

Comments
 (0)