63 lines
1.4 KiB
C
63 lines
1.4 KiB
C
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <arpa/inet.h>
|
|
#include <stdio.h>
|
|
#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);
|
|
}
|
|
}
|