Skip to content

Commit ce7477c

Browse files
committed
lws_ipv4
1 parent 5a510c4 commit ce7477c

11 files changed

Lines changed: 204 additions & 22 deletions

File tree

.github/workflows/codeql.yml

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,30 @@ jobs:
2424

2525
steps:
2626
- name: Checkout
27-
uses: actions/checkout@v3
27+
uses: actions/checkout@v4
2828

2929
- name: Initialize CodeQL
30-
uses: github/codeql-action/init@v3
30+
uses: github/codeql-action/init@v4
3131
with:
3232
languages: ${{ matrix.language }}
3333
config-file: ./.github/codeql.yml
3434
queries: +security-and-quality
3535

36-
- name: Autobuild
37-
uses: github/codeql-action/autobuild@v3
38-
if: ${{ matrix.language == 'javascript' || matrix.language == 'cpp' }}
36+
- name: Autobuild javascript
37+
uses: github/codeql-action/autobuild@v4
38+
if: ${{ matrix.language == 'javascript' }}
39+
40+
- name: Build cpp
41+
if: ${{ matrix.language == 'cpp' }}
42+
run: |
43+
sudo apt-get update
44+
sudo apt-get install -y libuv1-dev libev-dev libglib2.0-dev
45+
mkdir build
46+
cd build
47+
cmake ..
48+
make -j$(nproc)
3949
4050
- name: Perform CodeQL Analysis
41-
uses: github/codeql-action/analyze@v3
51+
uses: github/codeql-action/analyze@v4
4252
with:
4353
category: "/language:${{ matrix.language }}"

.sai.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,9 @@
278278
"ipv6-off": {
279279
"cmake": "-DLWS_IPV6=OFF"
280280
},
281+
"ipv4-off": {
282+
"cmake": "-DLWS_IPV4=OFF"
283+
},
281284
"nonetlink": {
282285
"cmake": "-DLWS_WITH_NETLINK=0"
283286
},

lib/core-net/adopt.c

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -763,11 +763,13 @@ lws_create_adopt_udp2(struct lws *wsi, const char *ads,
763763
s->af = AF_INET6;
764764
} else
765765
#endif
766+
#if defined(LWS_WITH_IPV4)
766767
{
767768
s->dest.sa4.sin_family = AF_INET;
768769
s->dest.sa4.sin_addr.s_addr = INADDR_ANY;
769770
s->af = AF_INET;
770771
}
772+
#endif
771773
lws_dll2_add_tail(&s->list, &wsi->dns_sorted_list);
772774
}
773775

@@ -836,10 +838,14 @@ lws_create_adopt_udp2(struct lws *wsi, const char *ads,
836838

837839
/* ipv6 udp!!! */
838840

841+
#if defined(LWS_WITH_IPV4)
839842
if (s->dest.sa4.sin_family == AF_INET)
840843
s->dest.sa4.sin_port = htons(wsi->c_port);
841844
#if defined(LWS_WITH_IPV6)
842845
else
846+
#endif
847+
#endif
848+
#if defined(LWS_WITH_IPV6)
843849
s->dest.sa6.sin6_port = htons(wsi->c_port);
844850
#endif
845851

@@ -952,12 +958,17 @@ lws_create_adopt_udp2(struct lws *wsi, const char *ads,
952958
memset(&dest, 0, sizeof(dest));
953959

954960
if (r) {
961+
#if defined(LWS_WITH_IPV4)
955962
if (r->ai_family == AF_INET) {
956963
dest.sa4.sin_family = AF_INET;
957964
memcpy(&dest.sa4.sin_addr, &((struct sockaddr_in *)r->ai_addr)->sin_addr, sizeof(struct in_addr));
958965
}
959966
#if defined(LWS_WITH_IPV6)
960-
else if (r->ai_family == AF_INET6) {
967+
else
968+
#endif
969+
#endif
970+
#if defined(LWS_WITH_IPV6)
971+
if (r->ai_family == AF_INET6) {
961972
dest.sa6.sin6_family = AF_INET6;
962973
memcpy(&dest.sa6.sin6_addr, &((struct sockaddr_in6 *)r->ai_addr)->sin6_addr, sizeof(struct in6_addr));
963974
}
@@ -969,10 +980,12 @@ lws_create_adopt_udp2(struct lws *wsi, const char *ads,
969980
dest.sa6.sin6_family = AF_INET6;
970981
} else
971982
#endif
983+
#if defined(LWS_WITH_IPV4)
972984
{
973985
dest.sa4.sin_family = AF_INET;
974986
dest.sa4.sin_addr.s_addr = INADDR_ANY;
975987
}
988+
#endif
976989
}
977990

978991
#if !defined(__linux__)
@@ -1013,10 +1026,14 @@ lws_create_adopt_udp2(struct lws *wsi, const char *ads,
10131026
}
10141027
#endif
10151028

1029+
#if defined(LWS_WITH_IPV4)
10161030
if (dest.sa4.sin_family == AF_INET)
10171031
dest.sa4.sin_port = htons(wsi->c_port);
10181032
#if defined(LWS_WITH_IPV6)
10191033
else
1034+
#endif
1035+
#endif
1036+
#if defined(LWS_WITH_IPV6)
10201037
dest.sa6.sin6_port = htons(wsi->c_port);
10211038
#endif
10221039

lib/core-net/network.c

Lines changed: 55 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ lws_get_addresses(struct lws_vhost *vh, void *ads, char *name,
151151
return 0;
152152
} else
153153
#endif
154+
#if defined(LWS_WITH_IPV4)
154155
{
155156
addr4.sin_family = AF_INET;
156157
addr4.sin_addr = ((struct sockaddr_in *)ads)->sin_addr;
@@ -174,13 +175,16 @@ lws_get_addresses(struct lws_vhost *vh, void *ads, char *name,
174175
#endif
175176
}
176177
}
178+
#endif
177179

178180
if (addr4.sin_family == AF_UNSPEC)
179181
return -1;
180182

183+
#if defined(LWS_WITH_IPV4)
181184
if (lws_plat_inet_ntop(AF_INET, &addr4.sin_addr, rip,
182185
(socklen_t)rip_len) == NULL)
183186
return -1;
187+
#endif
184188

185189
return 0;
186190
}
@@ -293,7 +297,9 @@ lws_socket_bind(struct lws_vhost *vhost, struct lws *wsi,
293297
#if defined(LWS_WITH_IPV6) && !defined(LWS_PLAT_OPTEE)
294298
struct sockaddr_in6 serv_addr6;
295299
#endif
300+
#if defined(LWS_WITH_IPV4)
296301
struct sockaddr_in serv_addr4;
302+
#endif
297303
#ifndef LWS_PLAT_OPTEE
298304
socklen_t len = sizeof(struct sockaddr_storage);
299305
#endif
@@ -377,6 +383,7 @@ lws_socket_bind(struct lws_vhost *vhost, struct lws *wsi,
377383
#endif
378384
#endif
379385

386+
#if defined(LWS_WITH_IPV4)
380387
case AF_INET:
381388
v = (struct sockaddr *)&serv_addr4;
382389
n = sizeof(serv_addr4);
@@ -402,6 +409,7 @@ lws_socket_bind(struct lws_vhost *vhost, struct lws *wsi,
402409
#endif
403410
serv_addr4.sin_port = htons((uint16_t)(unsigned int)port);
404411
break;
412+
#endif
405413
default:
406414
return -1;
407415
} /* switch */
@@ -500,9 +508,13 @@ lws_socket_bind(struct lws_vhost *vhost, struct lws *wsi,
500508
} else
501509
#endif
502510
#if defined(LWS_WITH_IPV6)
511+
#if defined(LWS_WITH_IPV4)
503512
port = (sin.ss_family == AF_INET6) ?
504513
ntohs(((struct sockaddr_in6 *)psin)->sin6_port) :
505514
ntohs(((struct sockaddr_in *)psin)->sin_port);
515+
#else
516+
port = ntohs(((struct sockaddr_in6 *)psin)->sin6_port);
517+
#endif
506518
#else
507519
{
508520
struct sockaddr_in sain;
@@ -949,11 +961,15 @@ lws_sa46_parse_numeric_address(const char *ads, lws_sockaddr46 *sa46)
949961
if (n != 4)
950962
return -1;
951963

964+
#if defined(LWS_WITH_IPV4)
952965
sa46->sa4.sin_family = AF_INET;
953966
memcpy(&sa46->sa4.sin_addr.s_addr, a,
954967
sizeof(sa46->sa4.sin_addr.s_addr));
955968

956969
return 0;
970+
#else
971+
return -1;
972+
#endif
957973
}
958974

959975
int
@@ -1033,9 +1049,11 @@ lws_sa46_write_numeric_address(lws_sockaddr46 *sa46, char *buf, size_t len)
10331049
return lws_write_numeric_address(
10341050
(uint8_t *)&sa46->sa6.sin6_addr, 16, buf, len);
10351051
#endif
1052+
#if defined(LWS_WITH_IPV4)
10361053
if (sa46->sa4.sin_family == AF_INET)
10371054
return lws_write_numeric_address(
10381055
(uint8_t *)&sa46->sa4.sin_addr, 4, buf, len);
1056+
#endif
10391057

10401058
#if defined(LWS_WITH_UNIX_SOCK)
10411059
if (sa46->sa4.sin_family == AF_UNIX)
@@ -1056,27 +1074,35 @@ lws_sa46_write_numeric_address(lws_sockaddr46 *sa46, char *buf, size_t len)
10561074
int
10571075
lws_sa46_compare_ads(const lws_sockaddr46 *sa46a, const lws_sockaddr46 *sa46b)
10581076
{
1077+
#if defined(LWS_WITH_IPV4)
10591078
uint8_t norm1[16], norm2[16];
1079+
#endif
10601080
const uint8_t *p1, *p2;
10611081

1082+
#if defined(LWS_WITH_IPV4)
10621083
if (sa46a->sa4.sin_family == AF_INET) {
10631084
p1 = norm1;
10641085
lws_4to6(norm1, (const uint8_t *)&sa46a->sa4.sin_addr);
1086+
} else
1087+
#endif
10651088
#if defined(LWS_WITH_IPV6)
1066-
} else if (sa46a->sa4.sin_family == AF_INET6) {
1089+
if (sa46a->sa4.sin_family == AF_INET6) {
10671090
p1 = (const uint8_t *)&sa46a->sa6.sin6_addr;
1068-
#endif
10691091
} else
1092+
#endif
10701093
return 1;
10711094

1095+
#if defined(LWS_WITH_IPV4)
10721096
if (sa46b->sa4.sin_family == AF_INET) {
10731097
p2 = norm2;
10741098
lws_4to6(norm2, (const uint8_t *)&sa46b->sa4.sin_addr);
1099+
} else
1100+
#endif
10751101
#if defined(LWS_WITH_IPV6)
1076-
} else if (sa46b->sa4.sin_family == AF_INET6) {
1102+
if (sa46b->sa4.sin_family == AF_INET6) {
10771103
p2 = (const uint8_t *)&sa46b->sa6.sin6_addr;
1078-
#endif
10791104
} else
1105+
#endif
10801106
return 1;
10811107

10821108
return memcmp(p1, p2, 16);
@@ -1111,9 +1137,14 @@ int
11111137
lws_sa46_on_net(const lws_sockaddr46 *sa46a, const lws_sockaddr46 *sa46_net,
11121138
int net_len)
11131139
{
1140+
#if defined(LWS_WITH_IPV4)
11141141
uint8_t mask = 0xff, norm[16];
1142+
#else
1143+
uint8_t mask = 0xff;
1144+
#endif
11151145
const uint8_t *p1, *p2;
11161146

1147+
#if defined(LWS_WITH_IPV4)
11171148
if (sa46a->sa4.sin_family == AF_INET) {
11181149
p1 = (uint8_t *)&sa46a->sa4.sin_addr;
11191150
if (sa46_net->sa4.sin_family == AF_INET6) {
@@ -1122,14 +1153,16 @@ lws_sa46_on_net(const lws_sockaddr46 *sa46a, const lws_sockaddr46 *sa46_net,
11221153
lws_4to6(norm, p1);
11231154
p1 = norm;
11241155
}
1156+
} else
1157+
#endif
11251158
#if defined(LWS_WITH_IPV6)
1159+
if (sa46a->sa4.sin_family == AF_INET6) {
1160+
p1 = (uint8_t *)&sa46a->sa6.sin6_addr;
11261161
} else
1127-
if (sa46a->sa4.sin_family == AF_INET6) {
1128-
p1 = (uint8_t *)&sa46a->sa6.sin6_addr;
11291162
#endif
1130-
} else
1131-
return 1;
1163+
return 1;
11321164

1165+
#if defined(LWS_WITH_IPV4)
11331166
if (sa46_net->sa4.sin_family == AF_INET) {
11341167
p2 = (uint8_t *)&sa46_net->sa4.sin_addr;
11351168
if (sa46a->sa4.sin_family == AF_INET6) {
@@ -1140,13 +1173,14 @@ lws_sa46_on_net(const lws_sockaddr46 *sa46a, const lws_sockaddr46 *sa46_net,
11401173
/* because the mask length is for net v4 address */
11411174
net_len += 12 * 8;
11421175
}
1176+
} else
1177+
#endif
11431178
#if defined(LWS_WITH_IPV6)
1179+
if (sa46a->sa4.sin_family == AF_INET6) {
1180+
p2 = (uint8_t *)&sa46_net->sa6.sin6_addr;
11441181
} else
1145-
if (sa46a->sa4.sin_family == AF_INET6) {
1146-
p2 = (uint8_t *)&sa46_net->sa6.sin6_addr;
11471182
#endif
1148-
} else
1149-
return 1;
1183+
return 1;
11501184

11511185
while (net_len > 0) {
11521186
if (net_len < 8)
@@ -1166,10 +1200,13 @@ lws_sa46_copy_address(lws_sockaddr46 *sa46a, const void *in, int af)
11661200
{
11671201
sa46a->sa4.sin_family = (sa_family_t)af;
11681202

1203+
#if defined(LWS_WITH_IPV4)
11691204
if (af == AF_INET)
11701205
memcpy(&sa46a->sa4.sin_addr, in, 4);
1206+
else
1207+
#endif
11711208
#if defined(LWS_WITH_IPV6)
1172-
else if (af == AF_INET6)
1209+
if (af == AF_INET6)
11731210
memcpy(&sa46a->sa6.sin6_addr, in, sizeof(sa46a->sa6.sin6_addr));
11741211
#endif
11751212
}
@@ -1252,22 +1289,25 @@ lws_is_lan_address(const char *ads)
12521289
if (lws_sa46_parse_numeric_address(ads, &sa46) < 0)
12531290
return 0;
12541291

1292+
#if defined(LWS_WITH_IPV4)
12551293
if (sa46.sa4.sin_family == AF_INET) {
12561294
uint8_t *p = (uint8_t *)&sa46.sa4.sin_addr.s_addr;
12571295

12581296
/* 10.0.0.0/8 */
12591297
if (p[0] == 10)
12601298
return 1;
12611299
/* 172.16.0.0/12 */
1262-
if (p[0] == 172 && (p[1] >= 16 && p[1] <= 31))
1300+
if (p[0] == 172 && p[1] >= 16 && p[1] <= 31)
12631301
return 1;
12641302
/* 192.168.0.0/16 */
12651303
if (p[0] == 192 && p[1] == 168)
12661304
return 1;
12671305
/* 127.0.0.0/8 */
12681306
if (p[0] == 127)
12691307
return 1;
1270-
} else if (sa46.sa4.sin_family == AF_INET6) {
1308+
} else
1309+
#endif
1310+
if (sa46.sa4.sin_family == AF_INET6) {
12711311
#if defined(LWS_WITH_IPV6)
12721312
uint8_t *p = (uint8_t *)&sa46.sa6.sin6_addr.s6_addr;
12731313

lib/core-net/private-lib-core-net.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,11 @@ struct lws_context_per_thread {
362362
#endif
363363

364364
#if defined(WIN32)
365+
#if defined(LWS_WITH_IPV4)
365366
struct sockaddr_in frt_pipe_si;
367+
#else
368+
struct sockaddr_in6 frt_pipe_si;
369+
#endif
366370
#endif
367371

368372
#if defined(LWS_WITH_TLS)

lib/core/private-lib-core.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -513,7 +513,11 @@ struct lws_context {
513513
#endif
514514

515515
#if defined(LWS_PLAT_FREERTOS)
516+
#if defined(LWS_WITH_IPV4)
516517
struct sockaddr_in frt_pipe_si;
518+
#else
519+
struct sockaddr_in6 frt_pipe_si;
520+
#endif
517521
#endif
518522

519523
#if defined(LWS_WITH_HTTP2)

0 commit comments

Comments
 (0)