diff --git a/linkedList.c b/linkedList.c new file mode 100644 index 0000000..031b114 --- /dev/null +++ b/linkedList.c @@ -0,0 +1,93 @@ +/*#include "linkedList.h" + +void createLinkedList(node_t * head, char * ip) { + head = malloc(sizeof(node_t)); + if (head == NULL) { + return; + } + + strcpy(head->ip, ip); + head->next = NULL; +} + +void push(node_t * head, char * ip) { + node_t * current = head; + while (current->next != NULL) { + current = current->next; + } + + current->next = malloc(sizeof(node_t)); + strcpy(current->next->ip, ip); + current->next->next = NULL; +} + +void popFirst(node_t ** head) { + node_t * next_node = NULL; + + if (*head == NULL) { + return; + } + + next_node = (*head)->next; + free(*head); + *head = next_node; +} + +void popLast(node_t * head) { + node_t * current; + + if (head->next == NULL) { + free(head); + head = NULL; + return; + } + + current = head; + + while (current->next->next != NULL) { + current = current->next; + } +} + +void popByIndex(node_t ** head, int index) { + int i = 0; + node_t * current = *head; + node_t * temp_node = NULL; + + if (index == 0) { + popFirst(head); + return; + } + + for (int i = 0; i < index-1; i++) { + if (current->next == NULL) { + return; + } + current = current->next; + } + + temp_node = current->next; + current->next = temp_node->next; + free(temp_node); +} + +void clearLinkedList(node_t ** head) { + node_t * current = * head; + node_t * previous; + while (current->next != NULL) { + previous = current; + current = current->next; + free(current); + } + free(current); +} + +void printAllAddresses(node_t * head) { + node_t * current = head; + while(current->next != NULL) { + printf("%s\n", current->ip); + current = current->next; + } + printf("%s\n", current->ip); +} +*/ diff --git a/linkedList.h b/linkedList.h new file mode 100644 index 0000000..0407b6d --- /dev/null +++ b/linkedList.h @@ -0,0 +1,24 @@ +/*#ifndef LINKEDLIST_H +#define LINKEDLIST_H + +#include +#include +#include + +struct node { + char * ip; + struct node *next; +}; + +typedef struct node node_t; + +void createLinkedList(node_t * head, char * ip); +void push(node_t * head, char * ip); +void popFirst(node_t ** head); +void popLast(node_t * head); +void popByIndex(node_t ** head, int index); +void clearLinkedList(node_t ** head); +void printAllAddresses(node_t * head); + +#endif //LINKEDLIST_H +*/ diff --git a/server b/server index c6bc5a8..cf02025 100755 Binary files a/server and b/server differ diff --git a/server.c b/server.c index 21d9abd..31db0a5 100644 --- a/server.c +++ b/server.c @@ -50,6 +50,7 @@ int main (int argc, char **argv) { FD_ZERO(&allSet); FD_SET(listeningSocketDescriptor, &allSet); + InitializeAddresses(); while (TRUE) { curSet = allSet; // structure assignment @@ -61,8 +62,6 @@ int main (int argc, char **argv) { SystemFatal("accept error"); } - printf("Remote Address: %s\n", inet_ntoa(clientAddress.sin_addr)); - for (i = 0; i < FD_SETSIZE; i++) { if (client[i] < 0) { client[i] = newSocketDescriptor; // save descriptor @@ -73,8 +72,12 @@ int main (int argc, char **argv) { if (i == FD_SETSIZE) { printf ("Too many clients\n"); exit(1); + } else { + strcpy(addresses[i], inet_ntoa(clientAddress.sin_addr)); } + Refresh(); + FD_SET (newSocketDescriptor, &allSet); // add new descriptor to set if (newSocketDescriptor > clientLatestSocket) { clientLatestSocket = newSocketDescriptor; // for select @@ -103,6 +106,8 @@ int main (int argc, char **argv) { printf("Remote Address: %s closed connection\n", inet_ntoa(clientAddress.sin_addr)); close(curClientSocket); FD_CLR(curClientSocket, &allSet); + strcpy(addresses[i], ""); + Refresh(); client[i] = -1; continue; } @@ -111,6 +116,8 @@ int main (int argc, char **argv) { printf("Remote Address: %s closed connection\n", inet_ntoa(clientAddress.sin_addr)); close(curClientSocket); FD_CLR(curClientSocket, &allSet); + strcpy(addresses[i], ""); + Refresh(); client[i] = -1; } else { AddAddress(buf, inet_ntoa(clientAddress.sin_addr)); @@ -131,12 +138,6 @@ int main (int argc, char **argv) { return(0); } -void Refresh() { - //Clears the screen - printf("%c[2J",27); - -} - void AddAddress(char * message, char * address) { size_t i, j; char temp[BUFLEN]; @@ -163,8 +164,22 @@ void AddAddress(char * message, char * address) { strncpy(message, temp, i+j); } +void InitializeAddresses() { + size_t i; + for(i = 0; i < LISTENQ; i++) + strcpy(addresses[i], ""); +} + +void Refresh() { + size_t i; + printf("%s", CLEARSCREENANSI); + for(i = 0; i < LISTENQ; i++) + if (addresses[i][0] != '\0') + printf("%s\n", addresses[i]); +} + // Prints the error stored in errno and aborts the program. void SystemFatal(const char* errorMessage) { - perror (message); + perror (errorMessage); exit (EXIT_FAILURE); } diff --git a/server.h b/server.h index d33023f..1d1f983 100644 --- a/server.h +++ b/server.h @@ -14,13 +14,19 @@ #define SERVER_TCP_PORT 7000 // Default port #define BUFLEN 255 //Buffer length +#define IPLEN 17 #define TRUE 1 #define LISTENQ 5 #define MAXLINE 4096 +const char* CLEARSCREENANSI = "\e[1;1H\e[2J"; +char addresses[LISTENQ][IPLEN]; + // Function Prototypes void SystemFatal(const char * errorMessage ); int main (int argc, char **argv); void AddAddress(char * message, char * address); +void Refresh(); +void InitializeAddresses(); #endif //SERVER_H