Squashed 'third_party/rawrtc/rew/' content from commit 24c91fd83

Change-Id: Ica2fcc790472ecd5b195d20da982c4e84139cbdd
git-subtree-dir: third_party/rawrtc/rew
git-subtree-split: 24c91fd839b40b11f727c902fa46d20874da33fb
diff --git a/src/trice/cand.c b/src/trice/cand.c
new file mode 100644
index 0000000..df4f0e6
--- /dev/null
+++ b/src/trice/cand.c
@@ -0,0 +1,88 @@
+/**
+ * @file cand.c  Common ICE Candidates
+ *
+ * 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_tmr.h>
+#include <re_sa.h>
+#include <re_net.h>
+#include <re_sys.h>
+#include <re_stun.h>
+#include <re_udp.h>
+#include <re_tcp.h>
+#include <re_ice.h>
+#include <re_trice.h>
+#include "trice.h"
+
+
+const char *ice_tcptype_name(enum ice_tcptype tcptype)
+{
+	switch (tcptype) {
+
+	case ICE_TCP_ACTIVE:  return "active";
+	case ICE_TCP_PASSIVE: return "passive";
+	case ICE_TCP_SO:      return "so";
+	default: return "???";
+	}
+}
+
+
+/*
+   Local           Remote
+   Candidate       Candidate
+   ---------------------------
+   tcp-so          tcp-so
+   tcp-active      tcp-passive
+   tcp-passive     tcp-active
+
+ */
+enum ice_tcptype ice_tcptype_reverse(enum ice_tcptype type)
+{
+	switch (type) {
+
+	case ICE_TCP_SO:      return ICE_TCP_SO;
+	case ICE_TCP_ACTIVE:  return ICE_TCP_PASSIVE;
+	case ICE_TCP_PASSIVE: return ICE_TCP_ACTIVE;
+	default:              return (enum ice_tcptype)-1;
+	}
+}
+
+
+enum ice_cand_type ice_cand_type_base(enum ice_cand_type type)
+{
+	switch (type) {
+
+	case ICE_CAND_TYPE_HOST:    return ICE_CAND_TYPE_HOST;
+	case ICE_CAND_TYPE_SRFLX:   return ICE_CAND_TYPE_HOST;
+	case ICE_CAND_TYPE_PRFLX:   return ICE_CAND_TYPE_HOST;
+	case ICE_CAND_TYPE_RELAY:   return ICE_CAND_TYPE_RELAY;
+	default: return type;
+	}
+}
+
+
+int trice_cand_print(struct re_printf *pf, const struct ice_cand_attr *cand)
+{
+	int err = 0;
+
+	if (!cand)
+		return 0;
+
+	err |= re_hprintf(pf, "%s|%s", ice_cand_type2name(cand->type),
+			  net_proto2name(cand->proto));
+
+	if (cand->proto == IPPROTO_TCP) {
+
+		err |= re_hprintf(pf, ".%s", ice_tcptype_name(cand->tcptype));
+	}
+
+	err |= re_hprintf(pf, "|%J", &cand->addr);
+
+	return err;
+}