/**
 * @file member.c  Real-time Transport Control Protocol member
 *
 * Copyright (C) 2010 Creytiv.com
 */
#include <re_types.h>
#include <string.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));
}
