blob: 1a3bd78e5cfd4612bfcb4ff661d3d244cf5618f8 [file] [log] [blame]
/**
* @file member.c Real-time Transport Control Protocol member
*
* Copyright (C) 2010 Creytiv.com
*/
#include <string.h>
#include <re_types.h>
#include <re_fmt.h>
#include <re_mem.h>
#include <re_mbuf.h>
#include <re_list.h>
#include <re_hash.h>
#include <re_sa.h>
#include <re_rtp.h>
#include "rtcp.h"
static void destructor(void *data)
{
struct rtp_member *mbr = data;
hash_unlink(&mbr->le);
mem_deref(mbr->s);
}
struct rtp_member *member_add(struct hash *ht, uint32_t src)
{
struct rtp_member *mbr;
mbr = mem_zalloc(sizeof(*mbr), destructor);
if (!mbr)
return NULL;
hash_append(ht, src, &mbr->le, mbr);
mbr->src = src;
return mbr;
}
static bool hash_cmp_handler(struct le *le, void *arg)
{
const struct rtp_member *mbr = le->data;
return mbr->src == *(uint32_t *)arg;
}
struct rtp_member *member_find(struct hash *ht, uint32_t src)
{
return list_ledata(hash_lookup(ht, src, hash_cmp_handler, &src));
}