void testMY_VECT2STR(void){ char** strvect = NULL; char* str = NULL; int i; if(temp_file != NULL){ strvect = (char**)xmalloc(4 * sizeof(char*)); strvect[0] = my_strdup("test"); strvect[1] = my_strdup("was"); strvect[2] = my_strdup("successful"); strvect[3] = NULL; str = my_vect2str(strvect); CU_ASSERT_STRING_EQUAL(str, "test was successful"); free(str); str = my_vect2str(NULL); CU_ASSERT(str == NULL); for(i = 0; i < 3; ++i){ free(strvect[i]); strvect[i] = NULL; } free(strvect); strvect = NULL; str = NULL; } }
int main(int argc, char** argv) { int serpid; serpid = 0; if(argc >= 3) { if((serpid = atoi(argv[1])) > 0) { my_str("--CLIPID-->"); my_int(getpid()); my_str("<--\n"); signal(SIGUSR1, ack); signal(SIGALRM, omg); sendpid(serpid, getpid()); if(!gl_ack) { alarm(5); pause(); } alarm(0); gl_ack = 0; my_str("--SENDING STRING-->"); my_str("<--\n"); sendstring(serpid, my_vect2str(&argv[2])); gl_ack = 0; my_str("--FINISHED SENDING STRING-->"); my_str("<--\n"); } } return 0; }
int main(int argc, char **argv) { test_my_char(); test_my_str(); test_my_int(); test_my_alpha(); test_my_digits(); test_my_strindex(); test_my_strlen(); test_my_revstr(); my_num_base(123, "01"); my_char('\n'); my_num_base(123, "0123456789ABCDEF"); my_char('\n'); my_num_base(100, "0123456789"); my_char('\n'); test_my_strrindex(); my_str("-->"); my_str(my_vect2str(&argv[1])); my_str("<--\n"); my_str("-->"); my_printvect(&argv[1]); my_str("<--\n"); my_printvect(my_str2vect(my_strdup("hello world bro"))); my_char('\n'); my_int(my_atoi("100")); my_char('\n'); my_int(my_atoi("-100")); my_char('\n'); my_int(my_atoi("")); my_char('\n'); my_int(my_atoi("\n\n\n")); my_char('\n'); return 0; }
int main(int argc, char** argv){ struct addrinfo *ailist = NULL; struct addrinfo *currai = NULL; struct addrinfo hint; extern int servfd; int clientfd; int err; extern pid_t pid; char* username = NULL; char* input = NULL; char** inputVect = NULL; int strLen; if(argc != 2){ my_str("usage: ./myirc <port>\n"); exit(1); } signal(SIGINT, sig_bye); signal(SIGQUIT, sig_bye); input = xmalloc(BUF_LEN_MAX); hint.ai_flags = AI_PASSIVE; hint.ai_family = AF_INET; hint.ai_socktype = SOCK_STREAM; hint.ai_protocol = 0; hint.ai_addrlen = 0; hint.ai_canonname = NULL; hint.ai_addr = NULL; if((err = getaddrinfo(NULL, argv[1], &hint, &ailist)) != 0){ my_str((char*)gai_strerror(err)); exit(1); } for(currai = ailist; currai != NULL; currai = currai->ai_next){ if((servfd = socket(currai->ai_addr->sa_family, currai->ai_socktype, 0)) >= 0){ if(bind(servfd, currai->ai_addr, currai->ai_addrlen) >= 0){ if(listen(servfd, QUEUELENGTH) >= 0){ while(1){ #ifdef DEBUG my_str("Waiting for client.\n"); #endif clientfd = accept(servfd, NULL, NULL); if((pid = fork()) < 0) my_err("Fork error"); if(pid == 0){ #ifdef DEBUG my_str("Client connected.\n"); #endif while((strLen = recv(clientfd, input, BUF_LEN_MAX, 0)) <= 0) ; my_str(input); input[strLen] = '\0'; inputVect = my_str2vect(input); username = my_strdup(inputVect[0]); my_freevect(inputVect); my_str(" has connected.\n"); } for(;pid == 0;){ strLen = recv(clientfd, input, BUF_LEN_MAX, 0); if(strLen >= 0){ #ifdef DEBUG my_str("Client input read.\n"); #endif input[strLen] = '\0'; inputVect = my_str2vect(input); if(!my_strcmp(inputVect[0], "/exit")){ close(clientfd); my_str(username); my_str(" has disconnected.\n"); exit(0); } else if (!my_strcmp(inputVect[0], "/me")){ my_str(username); my_char(' '); my_str(my_vect2str(&(inputVect[1]))); } else if (!my_strcmp(inputVect[0], "/nick")){ if(inputVect[1]){ my_str(username); my_str(" changed name to: "); free(username); username = my_strdup(inputVect[1]); my_str(username); } } else { my_str(username); my_str(": "); my_str(input); } my_char('\n'); } } } exit(0); } close(servfd); my_err("Listen error"); } close(servfd); my_err("Bind error"); } close(servfd); my_err("Socket error"); } #ifdef DEBUG my_str("EXITING AT END.\n"); #endif exit(1); }
int main(int argc, char *argv[]) { int listener, newsockfd, portno, i, j, bytesRead; fd_set master, readfd; struct s_node *userList = NULL; struct user *newUser = NULL; socklen_t clilen; char buffer[256]; char *messageSending; struct sockaddr_in serv_addr, cli_addr; int n, maxFileDescriptors = 0; char **parsedInput; if (argc < 2) { my_str("Usage: /server [port]\n"); exit(1); } listener = socket(AF_INET, SOCK_STREAM, 0); if (listener < 0) { my_str("ERROR opening socket"); exit(1); } my_bzero((char *) &serv_addr, sizeof(serv_addr)); portno = my_atoi(argv[1]); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_port = htons(portno); my_memset(&(serv_addr.sin_zero), '\0', 8); if (bind(listener, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) { my_str("Binding failed.\n"); exit(1); } listen(listener,5); FD_ZERO(&master); FD_ZERO(&readfd); FD_SET(listener, &master); maxFileDescriptors = listener; my_str("Server is now online!\n\n"); while(1) { readfd = master; if (select(maxFileDescriptors + 1, &readfd, NULL, NULL, NULL) < 0) error("select() failed!\n"); for(i = 3; i <= maxFileDescriptors; i++) { if(FD_ISSET(i, &readfd)) { if(i == listener) /* we got a new connection */ { my_str("Got a new connection!\n"); clilen = sizeof(cli_addr); newsockfd = accept(listener, (struct sockaddr *) &cli_addr, &clilen); if (newsockfd < 0) error("ERROR on accept"); /* read in username */ my_bzero(buffer, 256); bytesRead = read(newsockfd, buffer, 255); if (bytesRead > 0) /* was valid username */ { newUser = (struct user *)malloc(sizeof(struct user)); newUser->fd = newsockfd; newUser->nick = my_strconcat(buffer, ""); /* hacky lmao */ add_node(new_node(newUser, NULL, NULL), &userList); my_str("New user entry: "); my_str(buffer); my_char('\n'); messageSending = my_strconcat(buffer, " has connected."); for(j = 3; j <= maxFileDescriptors; j++) { if(FD_ISSET(j, &master)) { if(j != listener && j != i) { if (write(j, messageSending, my_strlen(messageSending)) < 0) error("write() error!\n"); } } } } else my_str("no nickname received...\n"); FD_SET(newsockfd, &master); if (newsockfd > maxFileDescriptors) maxFileDescriptors = newsockfd; } else /* we got text */ { bytesRead = read(i, buffer, 255); messageSending = ""; if (bytesRead > 1) /* got a message, not just a newline */ { buffer[bytesRead] = '\0'; if (buffer[0] == '/') /* special command */ { parsedInput = my_str2vect(buffer); if (my_strcmp(parsedInput[0], "/nick") == 0) { if (parsedInput[1] != NULL) { messageSending = my_strconcat(getUserNick(userList, i), " changed their nick to "); removeUser(&userList, i); newUser = (struct user *)malloc(sizeof(struct user)); newUser->fd = i; newUser->nick = parsedInput[1]; add_node(new_node(newUser, NULL, NULL), &userList); messageSending = my_strconcat(messageSending, getUserNick(userList, i)); } } else if (my_strcmp(parsedInput[0], "/me") == 0) { messageSending = my_strconcat(getUserNick(userList, i), " "); messageSending = my_strconcat(messageSending, my_vect2str(&parsedInput[1])); }else if (my_strcmp(parsedInput[0], "/exit") == 0) { messageSending = ""; }else /* invalid command */ { if (write(i, "Invalid command.", my_strlen("Invalid command.")) < 0) error("wrote() error!\n"); } } else /* normal message */ { messageSending = my_strconcat(getUserNick(userList, i), ": "); messageSending = my_strconcat(messageSending, buffer); } if (my_strcmp(messageSending, "") != 0) /* if wrote message to send, send it */ { my_str(messageSending); my_char('\n'); for(j = 3; j <= maxFileDescriptors; j++) { if(FD_ISSET(j, &master)) { if(j != listener && j != i) { if (write(j, messageSending, my_strlen(messageSending)) < 0) error("write() error!\n"); } } } } } else if (bytesRead == 0) /* we closed the file descriptor on client */ { messageSending = my_strconcat("SERVER: ", getUserNick(userList, i)); messageSending = my_strconcat(messageSending, " disconnected.\n"); my_str(messageSending); removeUser(&userList, i); for(j = 3; j <= maxFileDescriptors; j++) { if(FD_ISSET(j, &master)) { if(j != listener && j != i) { /* change to "SERVER: /nick disconnected" */ if (write(j, messageSending, my_strlen(messageSending)) < 0) error("write() error!\n"); } } } close(i); FD_CLR(i, &master); continue; } else if (bytesRead < 0) error("Read error...\n"); } } } } return 0; }
int main(int argc, char **argv) { my_str(my_vect2str(&argv[1])); }