
* ice: Added functions to get selected candidates. Also added a function to get the type of a candidate. This can be used when sending data to handle relay candidates, where data must be sent through the TURN client. * Forward-declare "ice_cand" before it is used.
161 lines
5.8 KiB
C
161 lines
5.8 KiB
C
/**
|
|
* @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);
|