} 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) {
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;
}
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++) {
#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);
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;