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/include/re_ice.h b/include/re_ice.h
new file mode 100644
index 0000000..6c72856
--- /dev/null
+++ b/include/re_ice.h
@@ -0,0 +1,161 @@
+/**
+ * @file re_ice.h  Interface to Interactive Connectivity Establishment (ICE)
+ *
+ * Copyright (C) 2010 Creytiv.com
+ */
+
+
+/** ICE mode */
+enum ice_mode {
+	ICE_MODE_FULL,
+	ICE_MODE_LITE
+};
+
+/** ICE Role */
+enum ice_role {
+	ICE_ROLE_UNKNOWN = 0,
+	ICE_ROLE_CONTROLLING,
+	ICE_ROLE_CONTROLLED
+};
+
+/** ICE Component ID */
+enum ice_compid {
+	ICE_COMPID_RTP  = 1,
+	ICE_COMPID_RTCP = 2
+};
+
+/** ICE Nomination */
+enum ice_nomination {
+	ICE_NOMINATION_REGULAR = 0,
+	ICE_NOMINATION_AGGRESSIVE
+};
+
+/** ICE Candidate type */
+enum ice_cand_type {
+	ICE_CAND_TYPE_HOST,   /**< Host candidate             */
+	ICE_CAND_TYPE_SRFLX,  /**< Server Reflexive candidate */
+	ICE_CAND_TYPE_PRFLX,  /**< Peer Reflexive candidate   */
+	ICE_CAND_TYPE_RELAY   /**< Relayed candidate          */
+};
+
+/** ICE TCP protocol type */
+enum ice_tcptype {
+	ICE_TCP_ACTIVE,   /**< Active TCP client                   */
+	ICE_TCP_PASSIVE,  /**< Passive TCP server                  */
+	ICE_TCP_SO        /**< Simultaneous-open TCP client/server */
+};
+
+/** Candidate pair states */
+enum ice_candpair_state {
+	ICE_CANDPAIR_FROZEN = 0, /**< Frozen state (default)                 */
+	ICE_CANDPAIR_WAITING,    /**< Waiting to become highest on list      */
+	ICE_CANDPAIR_INPROGRESS, /**< In-Progress state;transac. in progress */
+	ICE_CANDPAIR_SUCCEEDED,  /**< Succeeded state; successful result     */
+	ICE_CANDPAIR_FAILED      /**< Failed state; check failed             */
+};
+
+struct ice;
+struct ice_cand;
+struct icem;
+struct turnc;
+
+/** ICE Configuration */
+struct ice_conf {
+	enum ice_nomination nom;  /**< Nomination algorithm        */
+	uint32_t rto;             /**< STUN Retransmission TimeOut */
+	uint32_t rc;              /**< STUN Retransmission Count   */
+	bool debug;               /**< Enable ICE debugging        */
+};
+
+typedef void (ice_connchk_h)(int err, bool update, void *arg);
+
+
+/* ICE Media */
+int  icem_alloc(struct icem **icemp, enum ice_mode mode,
+		enum ice_role role, int proto, int layer,
+		uint64_t tiebrk, const char *lufrag, const char *lpwd,
+		ice_connchk_h *chkh, void *arg);
+struct ice_conf *icem_conf(struct icem *icem);
+enum ice_role icem_local_role(const struct icem *icem);
+void icem_set_conf(struct icem *icem, const struct ice_conf *conf);
+void icem_set_role(struct icem *icem, enum ice_role role);
+void icem_set_name(struct icem *icem, const char *name);
+int  icem_comp_add(struct icem *icem, unsigned compid, void *sock);
+int  icem_cand_add(struct icem *icem, unsigned compid, uint16_t lprio,
+		   const char *ifname, const struct sa *addr);
+
+int  icem_lite_set_default_candidates(struct icem *icem);
+bool icem_verify_support(struct icem *icem, unsigned compid,
+			 const struct sa *raddr);
+int  icem_conncheck_start(struct icem *icem);
+void icem_conncheck_stop(struct icem *icem, int err);
+int  icem_add_chan(struct icem *icem, unsigned compid, const struct sa *raddr);
+bool icem_mismatch(const struct icem *icem);
+void icem_update(struct icem *icem);
+int  ice_sdp_decode(struct icem *ice, const char *name, const char *value);
+int  icem_sdp_decode(struct icem *icem, const char *name, const char *value);
+int  icem_debug(struct re_printf *pf, const struct icem *icem);
+struct list *icem_lcandl(const struct icem *icem);
+struct list *icem_rcandl(const struct icem *icem);
+struct list *icem_checkl(const struct icem *icem);
+struct list *icem_validl(const struct icem *icem);
+const struct sa *icem_cand_default(struct icem *icem, unsigned compid);
+const struct sa *icem_selected_laddr(const struct icem *icem, unsigned compid);
+const struct ice_cand *icem_selected_lcand(const struct icem *icem,
+				unsigned compid);
+const struct ice_cand *icem_selected_rcand(const struct icem *icem,
+				unsigned compid);
+void ice_candpair_set_states(struct icem *icem);
+void icem_cand_redund_elim(struct icem *icem);
+int  icem_comps_set_default_cand(struct icem *icem);
+struct stun *icem_stun(struct icem *icem);
+int icem_set_turn_client(struct icem *icem, unsigned compid,
+			 struct turnc *turnc);
+
+
+bool ice_remotecands_avail(const struct icem *icem);
+int  ice_cand_encode(struct re_printf *pf, const struct ice_cand *cand);
+int  ice_remotecands_encode(struct re_printf *pf, const struct icem *icem);
+struct ice_cand *icem_cand_find(const struct list *lst, unsigned compid,
+				const struct sa *addr);
+int icem_lcand_add(struct icem *icem, struct ice_cand *base,
+		   enum ice_cand_type type,
+		   const struct sa *addr);
+struct ice_cand *icem_lcand_base(struct ice_cand *lcand);
+const struct sa *icem_lcand_addr(const struct ice_cand *cand);
+enum ice_cand_type icem_cand_type(const struct ice_cand *cand);
+
+
+extern const char ice_attr_cand[];
+extern const char ice_attr_lite[];
+extern const char ice_attr_mismatch[];
+extern const char ice_attr_pwd[];
+extern const char ice_attr_remote_cand[];
+extern const char ice_attr_ufrag[];
+
+
+const char        *ice_cand_type2name(enum ice_cand_type type);
+enum ice_cand_type ice_cand_name2type(const char *name);
+const char    *ice_role2name(enum ice_role role);
+const char    *ice_candpair_state2name(enum ice_candpair_state st);
+
+
+uint32_t ice_cand_calc_prio(enum ice_cand_type type, uint16_t local,
+			    unsigned compid);
+
+
+/** Defines an SDP candidate attribute */
+struct ice_cand_attr {
+	char foundation[32];      /**< Foundation string                    */
+	unsigned compid;          /**< Component ID (1-256)                 */
+	int proto;                /**< Transport protocol                   */
+	uint32_t prio;            /**< Priority of this candidate           */
+	struct sa addr;           /**< Transport address                    */
+	enum ice_cand_type type;  /**< Candidate type                       */
+	struct sa rel_addr;       /**< Related transport address (optional) */
+	enum ice_tcptype tcptype; /**< TCP candidate type (TCP-only)        */
+};
+
+int ice_cand_attr_encode(struct re_printf *pf,
+			 const struct ice_cand_attr *cand);
+int ice_cand_attr_decode(struct ice_cand_attr *cand, const char *val);