69 lines
1.9 KiB
C
69 lines
1.9 KiB
C
#include "users.h"
|
|
|
|
int checkUser(UserList *user_list, const char nick[], struct in_addr address) {
|
|
int i;
|
|
for (i=0;i<user_list->length;i++) {
|
|
if (strcmp(user_list->users[i].nick, nick) == 0) {
|
|
return 1;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int addUser(UserList *user_list, const char nick[], struct in_addr address) {
|
|
int nick_length = strlen(nick)+1;
|
|
user_list->length++;
|
|
user_list->users = realloc(user_list->users, (user_list->length)*sizeof(User));
|
|
User new_user;
|
|
new_user.last_address = address;
|
|
new_user.nick = malloc(nick_length);
|
|
new_user.addresses = malloc(1);
|
|
new_user.address_count = 0;
|
|
memcpy(new_user.nick, nick, nick_length);
|
|
addUserAddress(&new_user, address);
|
|
user_list->users[user_list->length-1] = new_user;
|
|
return 0;
|
|
}
|
|
|
|
int addUserAddress(User *user, struct in_addr address) {
|
|
user->address_count++;
|
|
user->addresses = realloc(user->addresses, (user->address_count)*sizeof(struct in_addr));
|
|
user->addresses[user->address_count-1] = address;
|
|
return 0;
|
|
}
|
|
|
|
int updateUser(UserList *user_list, const char nick[], struct in_addr address) {
|
|
int i;
|
|
int j;
|
|
int address_exists = 0;
|
|
for (i=0;i<user_list->length;i++) {
|
|
if (strcmp(user_list->users[i].nick, nick) == 0) {
|
|
user_list->users[i].last_address = address;
|
|
for (j=0;j<user_list->users[i].address_count;j++) {
|
|
if (user_list->users[i].addresses[j].s_addr == address.s_addr) {
|
|
address_exists = 1;
|
|
break;
|
|
}
|
|
}
|
|
if (!address_exists) {
|
|
addUserAddress(&user_list->users[i], address);
|
|
//printf("addy: %s\n", inet_ntoa(user_list->users[i].addresses[j]));
|
|
//printf("last_addy: %s\n", inet_ntoa(user_list->users[i].last_address));
|
|
//printf("new_addy: %s\n", inet_ntoa(address));
|
|
}
|
|
// TODO: add timestamp here
|
|
return 1;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void freeUserList(UserList *user_list) {
|
|
int i;
|
|
for (i=0;i<user_list->length;i++) {
|
|
free(user_list->users[i].nick);
|
|
free(user_list->users[i].addresses);
|
|
}
|
|
free(user_list->users);
|
|
}
|