]> PatchyGit - patchyircd.git/commitdiff
Github Copajeet pt.1
authorSam Smith <sam@patchysicp.xyz>
Sat, 30 Apr 2022 23:09:08 +0000 (16:09 -0700)
committerSam Smith <sam@patchysicp.xyz>
Sat, 30 Apr 2022 23:09:08 +0000 (16:09 -0700)
irc.c
main.c
net.c
net.h

diff --git a/irc.c b/irc.c
index 67480ab..d760479 100644 (file)
--- a/irc.c
+++ b/irc.c
@@ -24,9 +24,26 @@ int processPacket(struct client_data *client) {
        } else if(strncmp(packet, "JOIN ", 5) == 0) {
                char data[256];
                data[0] = ':';
+               char *i;
                strcpy(data+1, client->nick);
                strcpy(data+1+client->nickLen, " JOIN :");
-               strcpy(data+8+client->nickLen, packet+5);
+               if(packet[5] == ':') {
+                       i = packet+6;
+               } else {
+                       i = packet+5;
+               }
+               strcpy(data+8+client->nickLen, i);
+               // Start GitHub Copilot
+               i = data+8+client->nickLen;
+               while(*i != '\0') {
+                       if(*i == ' ') {
+                               *i = '\n';
+                               *(i+1) = '\0';
+                               break;
+                       }
+                       i++;
+               }
+               // End GitHub Copilot
                send_log(client->FD, data, strlen(data), 0);
                sendall_log(client->FD, data, strlen(data), 0);
        } else if(strncmp(packet, "PRIVMSG ", 8) == 0) {
@@ -36,10 +53,30 @@ int processPacket(struct client_data *client) {
                data[1+client->nickLen] = ' ';
                strcpy(data+2+client->nickLen, packet);
                sendall_log(client->FD, data, strlen(data), 0);
+       // Start GitHub Copilot - this shit actually be copy pasting my code lmao
        } else if(strncmp(packet, "QUIT", 4) == 0) {
-               killConnection(client);
+               char data[256];
+               data[0] = ':';
+               strcpy(data+1, client->nick);
+               strcpy(data+1+client->nickLen, " QUIT :");
+               strcpy(data+8+client->nickLen, packet+5);
+               sendall_log(client->FD, data, strlen(data), 0);
+               killConnection(client, true);
                return 1;
+       } else if(strncmp(packet, "PART ", 5) == 0) {
+               char data[256];
+               data[0] = ':';
+               strcpy(data+1, client->nick);
+               strcpy(data+1+client->nickLen, " PART :");
+               strcpy(data+8+client->nickLen, packet+5);
+               sendall_log(client->FD, data, strlen(data), 0);
+       } else if(strncmp(packet, "PONG", 4) == 0) {
+               // Do nothing
+       } else {
+               printf("Unknown packet: %s\n", packet);
+               fflush(stdout);
        }
+       // End GitHub Copilot
        return 0;
 }
 
diff --git a/main.c b/main.c
index 8585f7e..933df64 100644 (file)
--- a/main.c
+++ b/main.c
@@ -209,7 +209,7 @@ int main() {
        fflush(stdout);
        for(i=0;i<CLIENTS;i++) {
                if(clients[i] != 0) {
-                       killConnection(clients[i]);
+                       killConnection(clients[i], false);
                }
        }
        net_cleanup();
diff --git a/net.c b/net.c
index d529297..a132388 100644 (file)
--- a/net.c
+++ b/net.c
@@ -20,9 +20,9 @@ struct client_data *allocClient(){
        return NewClient;
 };
 
-void killConnection(struct client_data *cl) {
+void killConnection(struct client_data *cl, bool byChoice) {
        int i;
-       char client_addr[100];
+       char data[1024];
        bool valid=false;
        if(cl == 0) return;
        for(i=0;i<CLIENTS;i++) {
@@ -37,19 +37,33 @@ void killConnection(struct client_data *cl) {
 #ifdef SUPPORT_IPV4
        if(cl->type == 4) {
                getpeername(cl->FD,(struct sockaddr*)&serverAddrV4,(socklen_t*)&serverAddrV4len);  
-               inet_ntop(AF_INET, &(serverAddrV4.sin_addr), client_addr, sizeof(client_addr));
-               printf("Client disconnected from Socket: %"PRISocket", IP: %s PORT: %d\n", cl->FD, client_addr, ntohs(serverAddrV4.sin_port));
+               inet_ntop(AF_INET, &(serverAddrV4.sin_addr), data, sizeof(data));
+               printf("Client disconnected from Socket: %"PRISocket", IP: %s PORT: %d\n", cl->FD, data, ntohs(serverAddrV4.sin_port));
                fflush(stdout);
        }
 #endif
 #ifdef SUPPORT_IPV6
        if(cl->type == 6) {
                getpeername(cl->FD,(struct sockaddr*)&serverAddrV6,(socklen_t*)&serverAddrV6len);  
-               inet_ntop(AF_INET6, &(serverAddrV6.sin6_addr), client_addr, sizeof(client_addr));
-               printf("Client disconnected from Socket: %"PRISocket", IP: %s PORT: %d\n", cl->FD, client_addr, ntohs(serverAddrV6.sin6_port));
+               inet_ntop(AF_INET6, &(serverAddrV6.sin6_addr), data, sizeof(data));
+               printf("Client disconnected from Socket: %"PRISocket", IP: %s PORT: %d\n", cl->FD, data, ntohs(serverAddrV6.sin6_port));
                fflush(stdout);
        }
 #endif
+       // Start GitHub Copilot
+       if(!byChoice) {
+               strcpy(data, ":irc.patchysicp.xyz QUIT :");
+               strcpy(data+24, cl->nick);
+               strcpy(data+24+cl->nickLen, " has left the building\n");
+               sendall_log(cl->FD, data, strlen(data), 0);
+       }
+       // Send error to client informing them that they will be disconnected
+       // ERROR :Closing Link: NICK ()
+       strcpy(data, "ERROR :Closing Link: ");
+       strcpy(data+21, cl->nick);
+       strcpy(data+21+cl->nickLen, " ()\n");
+       send_log(cl->FD, data, strlen(data), 0);
+       // End GitHub Copilot
        shutdown(cl->FD, SHUT_RDWR);
        closesocket(cl->FD);
        free(cl);
@@ -62,17 +76,17 @@ void recvProc(struct client_data *cl) {
        int packetReturn;
        while(1){
                // I hate you
-               if(cl->bufLen == cl->bufCap) { killConnection(cl); return; }
+               if(cl->bufLen == cl->bufCap) { killConnection(cl, false); return; }
                bytesRead = recv_log(cl->FD,cl->buf + cl->bufLen,cl->bufCap - cl->bufLen, 0);
                switch(bytesRead){
                        // Disconnect
                        case 0:
-                               killConnection(cl);
+                               killConnection(cl, false);
                                return;
                        // Error
                        case -1:
                                if(!net_wouldblock()){
-                                       killConnection(cl);
+                                       killConnection(cl, false);
                                        net_perror("RECV");
                                }
                                return;
diff --git a/net.h b/net.h
index 30d601e..0838e90 100644 (file)
--- a/net.h
+++ b/net.h
@@ -1,10 +1,11 @@
 #ifndef _net_h
 #define _net_h
 #include "common.h"
+#include <stdbool.h>
 
 void sendall_log(SOCKET socket, const char *buffer, size_t length, int flags);
 struct client_data *allocClient();
-void killConnection(struct client_data *client);
+void killConnection(struct client_data *client, bool byChoice);
 void recvProc(struct client_data *cl);
 
 #endif