]> PatchyGit - patchyircd.git/commitdiff
add argument handling
authorEgor <egor@patchysicp.xyz>
Thu, 26 May 2022 21:36:34 +0000 (00:36 +0300)
committerEgor <egor@patchysicp.xyz>
Thu, 26 May 2022 21:36:34 +0000 (00:36 +0300)
main.c

diff --git a/main.c b/main.c
index 6effab4..fdba603 100644 (file)
--- 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]);