]> PatchyGit - patchyircd.git/commitdiff
create listener struct
authorEgor <egor@patchysicp.xyz>
Thu, 26 May 2022 21:54:33 +0000 (00:54 +0300)
committerEgor <egor@patchysicp.xyz>
Thu, 26 May 2022 21:54:33 +0000 (00:54 +0300)
main.c

diff --git a/main.c b/main.c
index fdba603..259f6bd 100644 (file)
--- a/main.c
+++ b/main.c
@@ -73,6 +73,11 @@ fd_set readfds;
 
 FILE *fchanlog = NULL;
 
+struct listener {
+       SOCKET sock;
+       struct tls *ctx;
+};
+
 SOCKET create_listen_sock(const char *ip, const char *port)
 {
        struct addrinfo hints, *res;
@@ -121,12 +126,12 @@ SOCKET create_listen_sock(const char *ip, const char *port)
        return sock;
 }
 
-void accept_from_sock(SOCKET serverSocket, struct tls *ctx)
+void accept_from_sock(struct listener *listener)
 {
        while (true) {
                struct sockaddr_storage addr;
                socklen_t len = sizeof(addr);
-               SOCKET newSocket = accept(serverSocket, (struct sockaddr *)&addr, &len);
+               SOCKET newSocket = accept(listener->sock, (struct sockaddr *)&addr, &len);
                if (newSocket == (SOCKET)INVALID_SOCKET) {
                        if (!net_wouldblock())
                                net_perror("ERROR newSocket");
@@ -150,11 +155,11 @@ void accept_from_sock(SOCKET serverSocket, struct tls *ctx)
                fprintf(stderr, "Connection accepted from Socket: %"PRISocket", IP: %s PORT: %d\n", newSocket,
                                client_addr, port);
                struct tls *cctx = NULL;
-               if (ctx) {
+               if (listener->ctx) {
 #ifdef HAS_TLS
-                       if (tls_accept_socket(ctx, &cctx, newSocket) == -1) {
+                       if (tls_accept_socket(listener->ctx, &cctx, newSocket) == -1) {
                                close(newSocket);
-                               fprintf(stderr, "tls_accept_socket: %s\n", tls_error(ctx));
+                               fprintf(stderr, "tls_accept_socket: %s\n", tls_error(listener->ctx));
                                continue;
                        }
 #endif
@@ -183,8 +188,7 @@ void accept_from_sock(SOCKET serverSocket, struct tls *ctx)
 int main(int argc, char *argv[])
 {
 #define MAX_LISTENERS 16
-       SOCKET listeners[MAX_LISTENERS];
-       struct tls *listeners_tls[MAX_LISTENERS];
+       struct listener listeners[MAX_LISTENERS];
        int listener_count = 0;
        setlocale(LC_ALL, "C");
        fprintf(stderr, "[PatchyIRCD]: Starting up...\n");
@@ -197,9 +201,9 @@ int main(int argc, char *argv[])
        // Zero stuff out
        memset(clients, 0, sizeof(clients));
 
+       struct tls *tls_ctx = NULL;
 #ifdef HAS_TLS
        struct tls_config *tls_cfg;
-       struct tls *tls_ctx;
        if (tls_init() == -1)
                return fprintf(stderr, "tls_init error\n"), 1;
        if (!(tls_cfg = tls_config_new()))
@@ -224,14 +228,10 @@ int main(int argc, char *argv[])
                                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] = 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]);
+                       if (is_tls && !tls_ctx)
+                               return fprintf(stderr, "no TLS support\n"), 1;
+                       listeners[listener_count].ctx = is_tls ? tls_ctx : NULL;
+                       listeners[listener_count++].sock = create_listen_sock(argv[i+1], argv[i+2]);
                        i += 2;
                } else {
                        return fprintf(stderr, "unknown flag '%s'\n", argv[i]), 1;
@@ -239,20 +239,20 @@ int main(int argc, char *argv[])
        }
 
        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");
+               listeners[listener_count].ctx = NULL;
+               listeners[listener_count++].sock = create_listen_sock("0", "6667");
+               listeners[listener_count].ctx = NULL;
+               listeners[listener_count++].sock = 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");
+               listeners[listener_count].ctx = tls_ctx;
+               listeners[listener_count++].sock = create_listen_sock("0", "6697");
+               listeners[listener_count].ctx = tls_ctx;
+               listeners[listener_count++].sock = create_listen_sock("::", "6697");
 #endif
        }
 
        for (int i = 0; i < listener_count; i++)
-               net_nonblock(listeners[i]);
+               net_nonblock(listeners[i].sock);
 
        FILE *f = fopen("init.txt", "rb");
        if (f) {
@@ -313,7 +313,7 @@ int main(int argc, char *argv[])
                FD_ZERO(&readfds); 
                // Add listening SOCKETS to FDSET
                for (int i = 0; i < listener_count; i++)
-                       FD_SET(listeners[i], &readfds);
+                       FD_SET(listeners[i].sock, &readfds);
 #ifdef _WIN32
                if (self_sock != INVALID_SOCKET)
                        FD_SET(self_sock, &readfds);
@@ -328,8 +328,8 @@ int main(int argc, char *argv[])
 #else
                SOCKET highestFD = -1;
                for (int i = 0; i < listener_count; i++)
-                       if (highestFD < listeners[i])
-                               highestFD = listeners[i];
+                       if (highestFD < listeners[i].sock)
+                               highestFD = listeners[i].sock;
                for (int i = 0; i < CLIENTS; i++)
                        if (clients[i] && highestFD < clients[i]->FD)
                                        highestFD = clients[i]->FD;
@@ -352,8 +352,8 @@ int main(int argc, char *argv[])
 
                // Accept new connections
                for (int i = 0; i < listener_count; i++)
-                       if (FD_ISSET(listeners[i], &readfds))
-                               accept_from_sock(listeners[i], listeners_tls[i]);
+                       if (FD_ISSET(listeners[i].sock, &readfds))
+                               accept_from_sock(&listeners[i]);
                // Respond to already connected clients
                for (int i = 0; i < CLIENTS; i++)
                        if (clients[i] && FD_ISSET(clients[i]->FD, &readfds))