presence: Add set_metadata() and delete_metadata().

This commit is contained in:
William Pitcock 2009-06-02 01:41:44 -05:00
parent 95cc7c44e8
commit e5847c3ef3
2 changed files with 35 additions and 0 deletions

View File

@ -614,4 +614,7 @@ extern char *generate_uid(void);
void allocate_away(struct Client *);
void free_away(struct Client *);
void set_metadata(struct Client *, const char *, const char *);
void delete_metadata(struct Client *, const char *);
#endif /* INCLUDED_client_h */

View File

@ -77,6 +77,7 @@ static rb_bh *lclient_heap = NULL;
static rb_bh *pclient_heap = NULL;
static rb_bh *user_heap = NULL;
static rb_bh *away_heap = NULL;
static rb_bh *metadata_heap = NULL;
static char current_uid[IDLEN];
struct Dictionary *nd_dict = NULL;
@ -120,6 +121,7 @@ init_client(void)
lclient_heap = rb_bh_create(sizeof(struct LocalUser), LCLIENT_HEAP_SIZE, "lclient_heap");
pclient_heap = rb_bh_create(sizeof(struct PreClient), PCLIENT_HEAP_SIZE, "pclient_heap");
user_heap = rb_bh_create(sizeof(struct User), USER_HEAP_SIZE, "user_heap");
metadata_heap = rb_bh_create(sizeof(struct MetadataEntry), USER_HEAP_SIZE, "metadata_heap");
away_heap = rb_bh_create(AWAYLEN, AWAY_HEAP_SIZE, "away_heap");
rb_event_addish("check_pings", check_pings, NULL, 30);
@ -1746,6 +1748,36 @@ free_away(struct Client *client_p)
}
}
void
set_metadata(struct Client *client_p, const char *key, const char *value)
{
struct MetadataEntry *md;
if(client_p->user != NULL)
{
md = rb_bh_alloc(metadata_heap);
rb_strlcpy(md->key, key, NICKLEN);
rb_strlcpy(md->value, value, TOPICLEN);
irc_dictionary_add(client_p->user->metadata, key, md);
}
}
void
delete_metadata(struct Client *client_p, const char *key)
{
struct MetadataEntry *md;
if(client_p->user != NULL)
{
md = irc_dictionary_delete(client_p->user->metadata, key);
if (md == NULL)
return;
rb_free(md);
}
}
void
init_uid(void)
{