blob: 1a3bd78e5cfd4612bfcb4ff661d3d244cf5618f8 [file] [log] [blame]
James Kuszmaul82f6c042021-01-17 11:30:16 -08001/**
2 * @file member.c Real-time Transport Control Protocol member
3 *
4 * Copyright (C) 2010 Creytiv.com
5 */
6#include <string.h>
7#include <re_types.h>
8#include <re_fmt.h>
9#include <re_mem.h>
10#include <re_mbuf.h>
11#include <re_list.h>
12#include <re_hash.h>
13#include <re_sa.h>
14#include <re_rtp.h>
15#include "rtcp.h"
16
17
18static void destructor(void *data)
19{
20 struct rtp_member *mbr = data;
21
22 hash_unlink(&mbr->le);
23 mem_deref(mbr->s);
24}
25
26
27struct rtp_member *member_add(struct hash *ht, uint32_t src)
28{
29 struct rtp_member *mbr;
30
31 mbr = mem_zalloc(sizeof(*mbr), destructor);
32 if (!mbr)
33 return NULL;
34
35 hash_append(ht, src, &mbr->le, mbr);
36 mbr->src = src;
37
38 return mbr;
39}
40
41
42static bool hash_cmp_handler(struct le *le, void *arg)
43{
44 const struct rtp_member *mbr = le->data;
45
46 return mbr->src == *(uint32_t *)arg;
47}
48
49
50struct rtp_member *member_find(struct hash *ht, uint32_t src)
51{
52 return list_ledata(hash_lookup(ht, src, hash_cmp_handler, &src));
53}