Esempio n. 1
0
void handleRead(char *allTokens[], char response[MAX_RESPONSE_SIZE], int clientSock){
	//executes and sends read requests to the client
	if(strncmp(allTokens[0], "LOGIN", strlen(allTokens[0])) == 0){
		validateArguments(allTokens, 3);
		int val = verifyLogin(allTokens[1], allTokens[2]);
		if(snprintf(response, MAX_RESPONSE_SIZE, "%i\n", val) < 0)
		{
			perror("Snprintf failed.");
			exit(SNPRINTF_FAILED);
		}
		if(send(clientSock, response, MAX_RESPONSE_SIZE, 0) == -1)
		{
			perror("Send Failed.");
			exit(SEND_FAILED);
		}
	}
	else if(strncmp(allTokens[0], "LIST_FOLLOWEES", strlen(allTokens[0])) == 0){
		validateArguments(allTokens, 2);
		listFollowees(allTokens[1], clientSock);
	}
	else if(strncmp(allTokens[0], "LIST_OTHERS", strlen(allTokens[0])) == 0){
		validateArguments(allTokens, 2);
		int size = 1;
		char **followees = (char **)malloc(size*sizeof(char*));
		if(followees == NULL)
		{
			perror("Malloc failed");
			exit(MALLOC_FAILED);
		}
		loadFollowees(allTokens[1], &followees, &size);
		listOthers(allTokens[1], followees, clientSock, size-1);
		for(int i = 0; i < (size-1); i++)
		{
			free(followees[i]);
		}
		free(followees);
			
	}
	else if(strncmp(allTokens[0], "LIST_TWEETS", strlen(allTokens[0])) == 0){
		validateArguments(allTokens, 2);
		int size = 1;
		char **followees = (char **)malloc(size*sizeof(char*));
		if(followees == NULL)
		{
			perror("Malloc failed");
			exit(MALLOC_FAILED);
		}
		loadFollowees(allTokens[1], &followees, &size);
		listTweets(allTokens[1], followees, clientSock, size-1);
		for(int i = 0; i < (size-1); i++)
		{
			free(followees[i]);
		}
		free(followees);
	}

	else{
			exit(INVALID_SELECTION);
		}	
}
Esempio n. 2
0
File: ss_2.c Progetto: jddantes/chat
int handle_data(char * data, char * ret){
	/*
		Data structured as: [head] tail
		Returns 1 to self-broadcast
			2 to broadcast to all
			
		
	*/
	char head[200];
	char tail[600];
	int offset = 0;
	offset += getNext(data+offset, head);
	if(!strcmp(head, "LOGIN")){
		char user[200];
		char pass[200];
		offset += getNext(data+offset, user);
		offset += getNext(data+offset, pass);
		int login = verifyLogin(user, pass);
		if(login) {
			strcpy(ret, "[LOGIN_CHK_1] [You have logged in]\n");	
			printf("server: %s logged in\n", user);
		} else {
			strcpy(ret, "[LOGIN_CHK_0] [Incorrect username/password]\n");
		}
		return BROADCAST_SELF;
	} else if(!strcmp(head, "CREATE_ACCT")) {
		char user[200];
		char pass[200];
		offset += getNext(data+offset, user);
		offset += getNext(data+offset, pass);
		createAcct(user, pass);
		strcpy(ret, "[ACCT_CREATED] [Account succesfully created]\n");
		return BROADCAST_SELF;
	} else if(!strcmp(head, "CHK_USR")){
		char user[200];
		offset += getNext(data+offset, user);
		int user_exst = userCheck(user);
		if(user_exst){
			strcpy(ret, "[USR_CHK_1] [User exists]\n");
		} else {
			strcpy(ret, "[USR_CHK_0] [Username is valid]\n");
		}	
		return BROADCAST_SELF;
	} else if(!strcmp(head, "JOIN")){
		char user[200];
		char ts[50];
		offset += getNext(data+offset, user);
		offset += getNext(data+offset, ts);
		strjoin(ret, "[JOINED] [", user, "] [", ts, "]\n", NULL);
		strcpy(user_list[currfd], user);
		ol_list[currfd] = 1;
		//printf("Setting user %d to %s\n", currfd, user);
		return BROADCAST_OTHERS;
	} else if(!strcmp(head, "LEAVE")){
		char user[200];
		char ts[50];
		offset += getNext(data+offset, user);
		offset += getNext(data+offset, ts);
		strjoin(ret, "[LEFT] [", user, "] [", ts, "]\n", NULL);
		user_list[currfd][0] = 0;
		ol_list[currfd] = 0;
		return BROADCAST_OTHERS;
	
	 } else if(!strcmp(head, "MSG")){
		char user[200];
		char ts[50];
		char msg[200];
		offset += getNext(data+offset, user);
		offset += getNext(data+offset, ts);
		offset += getNext(data+offset, msg);
		strjoin(ret, "[MSG] [", user, "] [", ts, "] [", msg, "]\n", NULL);
		return BROADCAST_ALL;
	} else if(!strcmp(head, "OL")){
		strcpy(ret, "[ONLINE]");
		pollOnline(ret);
		return BROADCAST_SELF;
	} else if(!strcmp(head, "PM")){
		//printf("server: Got pm\n");
		char target[200];
		char user[200];
		char ts[50];
		char msg[200];
		offset += getNext(data+offset, target);
		strcpy(pm_global, target);
		offset += getNext(data+offset, user);
		offset += getNext(data+offset, ts);
		offset += getNext(data+offset, msg);
		strjoin(ret, "[PMR] [", user, "] [", ts, "] [", msg, "]\n", NULL);
		return BROADCAST_ONE;
	}
	
}