#include #include #include #include #include "u-hashtable.h" /*initialize */ USER_STRUCT *users = NULL; /*add user information */ void uadd_user(uint32_t user_ip, USER user_info) { USER_STRUCT *s ; HASH_FIND_INT(users, &user_ip, s); /*ip already in the hash? */ if(s == NULL) { s = (struct user_struct *)malloc(sizeof *s); s->ip = user_ip; HASH_ADD_INT(users, ip, s); } s->info = user_info; } /*find user information */ USER_STRUCT *ufind_user(uint32_t user_ip) { USER_STRUCT *s; HASH_FIND_INT(users, &user_ip, s); printf("user_nams: %s user_id:%d usergroud_id:%d\n", s->info.name, s->info.user_id, s->info.usergroud_id); return s; } /*delete user information */ void udelete_user(USER_STRUCT *user) { HASH_DEL(users, user); /* user: pointer to delete */ free(user); } /*delect all uesr'informations */ void udelete_all() { USER_STRUCT *current_user, *tmp; HASH_ITER(hh, users, current_user, tmp) { HASH_DEL(users,current_user); /* delete; users advances to next */ free(current_user); } } /*printf user information */ void uprint_users() { USER_STRUCT *s; char str[32]; for(s=users; s != NULL; s=(USER_STRUCT *)(s->hh.next)) { inet_ntop(AF_INET, (void *)&s->ip, str, 32); printf(" user_ip: %s user_nams: %s user_id:%d usergroud_id:%d\n", str, s->info.name, s->info.user_id, s->info.usergroud_id); } }