/* =============================================================================== Users Defines User struct and functions for manipulating that struct. =============================================================================== */ #ifndef USERS_H #define USERS_H #include #include "macros.h" #include #include #include #include // for intptr_t http://stackoverflow.com/questions/5701450/getting-the-warning-cast-to-pointer-from-integer-of-different-size-from-the-fo#5703367 /* struct for storing known/talked to users */ typedef struct { uint8_t address_count; struct timeval last_heard; struct in_addr last_address; //struct in_addr *last_address; struct in_addr *addresses; /* dynamically allocated array via malloc */ // char nick[15]; char *nick; // dynamically allocated char array } User; /* struct for storing a list of Users, memory managed dynamically */ typedef struct { int length; User *users; } UserList; /* checkUser Checks the given UserList for the occurrence of nick in the users property */ int checkUser(UserList *user_list, const char nick[], struct in_addr address); /* addUser(UserList *user_list, const char nick[], struct in_addr address) creates a new User struct refernced in user_list.users, mallocs User.nick to passed nick and memcpys, set address, and time */ int addUser(UserList *user_list, const char nick[], struct in_addr address); /* updateUser Updates the given nick in user_list, setting the User's last_address to address and changing last_heard to the current time */ int updateUser(UserList *user_list, const char nick[], struct in_addr address); /* addUserAddress(User *user, struct in_addr address) Takes a pointer to a User struct and adds the address to user.addresses, mallocing as appropriate. */ int addUserAddress(User *user, struct in_addr address); /* freeUserList frees all malloc'd values in user_list and the contained users(and their mallocs) */ void freeUserList(UserList *user_list); #endif