示例#1
0
static void parse(client *c)
{
	switch(c->state)
	{
		case CONNECTING:
			login_send_banner(c);
			login_ask_username(c);
			c->state = USERNAME;
		break;
		case USERNAME:
			handle_username(c);
			login_ask_password(c);
			c->state = PASSWORD;
		break;
		case PASSWORD:
			/* TODO: check the username and password */
			login_client(c);
			c->state = CONNECTED;
			client_prompt(c);
		break;
		case CONNECTED:
			/* TODO: parse the command prompt */
			//send_prompt(c);
			parse_command(c);
			client_prompt(c);
		break;
	}
}
示例#2
0
int connect_accept(client_data *fd_array, int *num_clients, fd_set *readfds, char *msg, waitList *waitlist) {

	/* Fonction qui permet à un client d'accepter une connextion d'un utilisateur distant. */

	char client_name[MAX_SIZE_USERNAME];
	int client_sockfd;
	int i, bchar;
	char *posSpace = NULL;

	if(strlen(msg) < MIN_SIZE_USERNAME+8 || strlen(msg) > MAX_SIZE_USERNAME+8) { // "/accept " = 8
		printf(BLUE"[PROGRAM] Error command : Username too short or too long.\n[PROGRAM] Please use \"/accept username\" as described previously."RESET"\n\n");
		return -1;
	}
	if((posSpace = strchr(msg, ' ')) == NULL) {
    printf(BLUE"[PROGRAM] Error command. Please use \"/accept username\" as described previously."RESET"\n\n");
    return -1;
  }
	if(strcpy(client_name, posSpace+1) == NULL) {
		printf(BLUE"[PROGRAM] Error command. Please use \"/accept username\" as described previously."RESET"\n\n");
		return -1;
	}
	client_name[strlen(client_name)-1] = '\0';
	for(i=0 ; i < strlen(client_name) ; i++) {
    bchar = (isalnum((unsigned char) client_name[i])) ? 0 : 1;
    if(bchar) {break;}
  }
  if (bchar) {
    printf(BLUE"[PROGRAM] Error command : Username must only be composed of alphanumeric characters.\n[PROGRAM] Please use \"/accept username\" as described previously.\n"RESET"\n\n");
    return -1;
  }

	if((client_sockfd = search_client_waiting_fd_by_name(client_name, fd_array, num_clients, *waitlist)) == -1) {
		printf(BLUE"[PROGRAM] This user is not in your waiting list."RESET"\n\n");
    return -1;
	}
	/* Fin de l'initialisation / gestion d'erreurs : on alloue de la mémoire */

	message *msg_send = (message *) malloc(sizeof(message));
	//On lui demande de se logger
  if (login_client(msg_send, &client_sockfd, fd_array, num_clients, readfds, waitlist) != -1) {
    //On confirme la connection du client
    session_accept(msg_send); //on crée le message de session-accept-1
    send_msg(msg_send, &client_sockfd, readfds, fd_array, num_clients);
    free((*msg_send).msg_content);
		free(msg_send);
  }
	return 0;
}