secgateway/Product/common/u-hashtable.c

63 lines
1.4 KiB
C
Raw Normal View History

#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);
}
}