From: Egor Date: Thu, 26 May 2022 21:36:34 +0000 (+0300) Subject: add argument handling X-Git-Url: https://git.patchysicp.xyz/?a=commitdiff_plain;h=7d9447591ad721f699fd9063c6c604f376ab1cab;p=patchyircd.git add argument handling --- diff --git a/main.c b/main.c index 6effab4..fdba603 100644 --- a/main.c +++ b/main.c @@ -180,9 +180,11 @@ void accept_from_sock(SOCKET serverSocket, struct tls *ctx) } } -int main() { - SOCKET listeners[4]; - struct tls *listeners_tls[4]; +int main(int argc, char *argv[]) +{ +#define MAX_LISTENERS 16 + SOCKET listeners[MAX_LISTENERS]; + struct tls *listeners_tls[MAX_LISTENERS]; int listener_count = 0; setlocale(LC_ALL, "C"); fprintf(stderr, "[PatchyIRCD]: Starting up...\n"); @@ -215,16 +217,39 @@ int main() { tls_config_free(tls_cfg); #endif - listeners_tls[listener_count] = NULL; - listeners[listener_count++] = create_listen_sock("0", "6667"); - listeners_tls[listener_count] = NULL; - listeners[listener_count++] = create_listen_sock("::", "6667"); + for (int i = 1; i < argc; i++) { + int is_tls = 0; + if (!strcmp(argv[i], "--listenPlain") || (is_tls = !strcmp(argv[i], "--listenTls"))) { + if (i + 2 >= argc) + return fprintf(stderr, "not enough parameters\n"), 1; + if (listener_count == MAX_LISTENERS) + return fprintf(stderr, "too many listeners\n"), 1; #ifdef HAS_TLS - listeners_tls[listener_count] = tls_ctx; - listeners[listener_count++] = create_listen_sock("0", "6697"); - listeners_tls[listener_count] = tls_ctx; - listeners[listener_count++] = create_listen_sock("::", "6697"); + listeners_tls[listener_count] = is_tls ? tls_ctx : NULL; +#else + if (is_tls) + return fprintf(stderr, "not TLS support\n"), 1; + listeners_tls[listener_count] = NULL; #endif + listeners[listener_count++] = create_listen_sock(argv[i+1], argv[i+2]); + i += 2; + } else { + return fprintf(stderr, "unknown flag '%s'\n", argv[i]), 1; + } + } + + if (!listener_count) { + listeners_tls[listener_count] = NULL; + listeners[listener_count++] = create_listen_sock("0", "6667"); + listeners_tls[listener_count] = NULL; + listeners[listener_count++] = create_listen_sock("::", "6667"); +#ifdef HAS_TLS + listeners_tls[listener_count] = tls_ctx; + listeners[listener_count++] = create_listen_sock("0", "6697"); + listeners_tls[listener_count] = tls_ctx; + listeners[listener_count++] = create_listen_sock("::", "6697"); +#endif + } for (int i = 0; i < listener_count; i++) net_nonblock(listeners[i]);