}
}
-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");
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]);