Squashed 'third_party/rawrtc/re/' content from commit f3163ce8b
Change-Id: I6a235e6ac0f03269d951026f9d195da05c40fdab
git-subtree-dir: third_party/rawrtc/re
git-subtree-split: f3163ce8b526a13b35ef71ce4dd6f43585064d8a
diff --git a/src/rtp/member.c b/src/rtp/member.c
new file mode 100644
index 0000000..1a3bd78
--- /dev/null
+++ b/src/rtp/member.c
@@ -0,0 +1,53 @@
+/**
+ * @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));
+}