Skip to content

Commit 1f737a6

Browse files
authored
feat: 24H2 update (#26)
1 parent 48b7a5c commit 1f737a6

Some content is hidden

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

41 files changed

+1246
-434
lines changed

src/80s/80s.c

Lines changed: 55 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@
2525

2626
#include <sys/socket.h>
2727
#include <sys/types.h>
28+
#include <sys/un.h>
29+
30+
#include <execinfo.h>
31+
#include <signal.h>
32+
2833
#ifdef USE_KQUEUE
2934
#include <sys/sysctl.h>
3035
#endif
@@ -35,6 +40,10 @@ reload_context reload;
3540
union addr_common {
3641
struct sockaddr_in6 v6;
3742
struct sockaddr_in v4;
43+
#ifdef UNIX_BASED
44+
struct sockaddr_un ux;
45+
#endif
46+
struct sockaddr_storage any;
3847
};
3948

4049
typedef void* pvoid;
@@ -201,10 +210,12 @@ int main(int argc, const char **argv) {
201210
const int cli = get_arg("--cli", 0, 1, argc, argv);
202211
const int workers = get_arg("-c", cli ? 1 : get_cpus(), 0, argc, argv);
203212
const int show_cfg = get_arg("--cfg", 0, 1, argc, argv);
204-
char resolved[100], *p, *q;
213+
214+
size_t client_len = 0;
215+
216+
char resolved[200], *p, *q;
205217
int optval, i,
206-
portno = get_arg("-p", 8080, 0, argc, argv),
207-
v6 = get_arg("--6", 0, 1, argc, argv);
218+
portno = get_arg("-p", 8080, 0, argc, argv);
208219
fd_t parentfd;
209220
union addr_common serveraddr;
210221
module_extension *module = NULL,
@@ -213,7 +224,10 @@ int main(int argc, const char **argv) {
213224
const char *entrypoint;
214225
const char *module_list = get_sz_arg("-m", argc, argv, NULL, NULL);
215226
const char *node_name = get_sz_arg("-n", argc, argv, "HOSTNAME", "localhost");
216-
const char *addr = v6 ? "::" : "0.0.0.0";
227+
const char *addr = "0.0.0.0";
228+
int protocol = AF_INET;
229+
int sock_type = SOCK_STREAM;
230+
int ip_proto = IPPROTO_TCP;
217231
char *module_names = NULL;
218232
serve_params *params = (serve_params*)calloc(workers, sizeof(serve_params));
219233
node_id node;
@@ -234,7 +248,6 @@ int main(int argc, const char **argv) {
234248
printf("Concurrency: %d\n", workers);
235249
printf("Address: %s\n", addr);
236250
printf("Port: %d\n", portno);
237-
printf("IPv6: %s\n", v6 ? "yes" : "no");
238251
printf("CLI: %s\n", cli ? "yes" : "no");
239252
printf("Modules: %s\n", module_list ? module_list : "no modules");
240253
}
@@ -338,7 +351,42 @@ int main(int argc, const char **argv) {
338351
#endif
339352

340353
if(!cli) {
341-
parentfd = (fd_t)socket(v6 ? AF_INET6 : AF_INET, SOCK_STREAM, IPPROTO_TCP);
354+
355+
memset((void *)&serveraddr, 0, sizeof(serveraddr));
356+
357+
if(strstr(addr, "unix:") == addr) {
358+
protocol = AF_UNIX;
359+
ip_proto = 0;
360+
#ifdef UNIX_BASED
361+
serveraddr.ux.sun_family = protocol;
362+
addr += 5;
363+
strncpy(serveraddr.ux.sun_path, addr, sizeof(serveraddr.ux.sun_path));
364+
strncpy(resolved, addr, sizeof(resolved));
365+
client_len = sizeof(serveraddr.ux);
366+
#else
367+
error("main: UDS not supported on Windows");
368+
exit(1);
369+
#endif
370+
} else if (strstr(addr, "v6:") == addr) {
371+
protocol = AF_INET6;
372+
addr += 3;
373+
serveraddr.v6.sin6_family = protocol;
374+
serveraddr.v6.sin6_port = htons((unsigned short)portno);
375+
if(inet_pton(AF_INET6, addr, &serveraddr.v6.sin6_addr) <= 0) {
376+
error("failed to resolve bind IP address");
377+
}
378+
inet_ntop(AF_INET6, &serveraddr.v6.sin6_addr, resolved, sizeof(resolved));
379+
client_len = sizeof(serveraddr.v6);
380+
} else {
381+
protocol = AF_INET;
382+
serveraddr.v4.sin_family = protocol;
383+
serveraddr.v4.sin_addr.s_addr = inet_addr(addr);
384+
serveraddr.v4.sin_port = htons((unsigned short)portno);
385+
inet_ntop(AF_INET, &serveraddr.v4.sin_addr, resolved, sizeof(resolved));
386+
client_len = sizeof(serveraddr.v4);
387+
}
388+
389+
parentfd = (fd_t)socket(protocol, sock_type, ip_proto);
342390

343391
#ifdef _WIN32
344392
if (parentfd == (fd_t)INVALID_SOCKET)
@@ -353,23 +401,8 @@ int main(int argc, const char **argv) {
353401
#else
354402
setsockopt((sock_t)parentfd, SOL_SOCKET, SO_REUSEADDR, (const void *)&optval, sizeof(int));
355403
#endif
356-
memset((void *)&serveraddr, 0, sizeof(serveraddr));
357-
358-
if (v6) {
359-
serveraddr.v6.sin6_family = AF_INET6;
360-
serveraddr.v6.sin6_port = htons((unsigned short)portno);
361-
if(inet_pton(AF_INET6, addr, &serveraddr.v6.sin6_addr) <= 0) {
362-
error("failed to resolve bind IP address");
363-
}
364-
inet_ntop(AF_INET6, &serveraddr.v6.sin6_addr, resolved, sizeof(resolved));
365-
} else {
366-
serveraddr.v4.sin_family = AF_INET;
367-
serveraddr.v4.sin_addr.s_addr = inet_addr(addr);
368-
serveraddr.v4.sin_port = htons((unsigned short)portno);
369-
inet_ntop(AF_INET, &serveraddr.v4.sin_addr, resolved, sizeof(resolved));
370-
}
371404

372-
if (bind((sock_t)parentfd, (struct sockaddr *)(v6 ? (void *)&serveraddr.v6 : (void *)&serveraddr.v4), v6 ? sizeof(serveraddr.v6) : sizeof(serveraddr.v4)) < 0)
405+
if (bind((sock_t)parentfd, (struct sockaddr *)&serveraddr, client_len) < 0)
373406
error("main: failed to bind server socket");
374407

375408
if (listen((sock_t)parentfd, 20000) < 0)

src/80s/80s.h

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ extern "C" {
8686
int connected;
8787
int worker;
8888
fd_t fd;
89+
fd_t parentfd;
8990
DWORD length;
9091
DWORD flags;
9192
WSABUF wsaBuf;
@@ -303,10 +304,23 @@ void resolve_mail(serve_params *params, int id);
303304
#define LOG_INFO 3
304305
#define LOG_DEBUG 4
305306

307+
void s80_print(const char *fmt, ...);
308+
309+
#define DEBUG_PRINT s80_print
310+
#define DEBUG_FLUSH
311+
312+
#ifndef DEBUG_PRINT
313+
#define DEBUG_PRINT printf
314+
#endif
315+
316+
#ifndef DEBUG_FLUSH
317+
#define DEBUG_FLUSH fflush(stdout)
318+
#endif
319+
306320
#ifdef S80_DEBUG_LEVEL
307-
#define dbgf(LEVEL, ...) do {if(LEVEL <= S80_DEBUG_LEVEL) printf(__VA_ARGS__); fflush(stdout);} while(0)
321+
#define dbgf(LEVEL, ...) do {if(LEVEL <= S80_DEBUG_LEVEL) {DEBUG_PRINT(__VA_ARGS__); DEBUG_FLUSH; }} while(0)
308322
#else
309-
#define dbgf(LEVEL, ...) do {if(LEVEL <= 0) printf(__VA_ARGS__); fflush(stdout);} while(0)
323+
#define dbgf(LEVEL, ...) do {if(LEVEL <= LOG_ERROR) {DEBUG_PRINT(__VA_ARGS__); DEBUG_FLUSH; }} while(0)
310324
#endif
311325

312326
#ifdef __cplusplus

0 commit comments

Comments
 (0)