Пример #1
0
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;
    }
}
Пример #2
0
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;
}
Пример #3
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;
}
Пример #4
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);
}
Пример #5
0
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; 
}
Пример #6
0
int main(int argc, char **argv)
{
    my_str(my_vect2str(&argv[1]));
}