ice: Added functions to get selected candidates. (#72)
* 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.
This commit is contained in:
parent
4ae6163fb0
commit
dfe0e0176d
3 changed files with 47 additions and 2 deletions
|
@ -55,6 +55,7 @@ enum ice_candpair_state {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ice;
|
struct ice;
|
||||||
|
struct ice_cand;
|
||||||
struct icem;
|
struct icem;
|
||||||
struct turnc;
|
struct turnc;
|
||||||
|
|
||||||
|
@ -100,6 +101,10 @@ struct list *icem_checkl(const struct icem *icem);
|
||||||
struct list *icem_validl(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_cand_default(struct icem *icem, unsigned compid);
|
||||||
const struct sa *icem_selected_laddr(const 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 ice_candpair_set_states(struct icem *icem);
|
||||||
void icem_cand_redund_elim(struct icem *icem);
|
void icem_cand_redund_elim(struct icem *icem);
|
||||||
int icem_comps_set_default_cand(struct icem *icem);
|
int icem_comps_set_default_cand(struct icem *icem);
|
||||||
|
@ -108,7 +113,6 @@ int icem_set_turn_client(struct icem *icem, unsigned compid,
|
||||||
struct turnc *turnc);
|
struct turnc *turnc);
|
||||||
|
|
||||||
|
|
||||||
struct ice_cand;
|
|
||||||
bool ice_remotecands_avail(const struct icem *icem);
|
bool ice_remotecands_avail(const struct icem *icem);
|
||||||
int ice_cand_encode(struct re_printf *pf, const struct ice_cand *cand);
|
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);
|
int ice_remotecands_encode(struct re_printf *pf, const struct icem *icem);
|
||||||
|
@ -119,6 +123,7 @@ int icem_lcand_add(struct icem *icem, struct ice_cand *base,
|
||||||
const struct sa *addr);
|
const struct sa *addr);
|
||||||
struct ice_cand *icem_lcand_base(struct ice_cand *lcand);
|
struct ice_cand *icem_lcand_base(struct ice_cand *lcand);
|
||||||
const struct sa *icem_lcand_addr(const struct ice_cand *cand);
|
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_cand[];
|
||||||
|
|
|
@ -310,3 +310,8 @@ int icem_cand_print(struct re_printf *pf, const struct ice_cand *cand)
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum ice_cand_type icem_cand_type(const struct ice_cand *cand)
|
||||||
|
{
|
||||||
|
return cand ? cand->type : (enum ice_cand_type)-1;
|
||||||
|
}
|
||||||
|
|
|
@ -293,10 +293,45 @@ void icem_checklist_update(struct icem *icem)
|
||||||
* @return Local address if available, otherwise NULL
|
* @return Local address if available, otherwise NULL
|
||||||
*/
|
*/
|
||||||
const struct sa *icem_selected_laddr(const struct icem *icem, unsigned compid)
|
const struct sa *icem_selected_laddr(const struct icem *icem, unsigned compid)
|
||||||
|
{
|
||||||
|
const struct ice_cand *cand = icem_selected_lcand(icem, compid);
|
||||||
|
return icem_lcand_addr(cand);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the Local candidate of the Selected Candidate pair, if available
|
||||||
|
*
|
||||||
|
* @param icem ICE Media object
|
||||||
|
* @param compid Component ID
|
||||||
|
*
|
||||||
|
* @return Local candidate if available, otherwise NULL
|
||||||
|
*/
|
||||||
|
const struct ice_cand *icem_selected_lcand(const struct icem *icem,
|
||||||
|
unsigned compid)
|
||||||
{
|
{
|
||||||
const struct icem_comp *comp = icem_comp_find(icem, compid);
|
const struct icem_comp *comp = icem_comp_find(icem, compid);
|
||||||
if (!comp || !comp->cp_sel)
|
if (!comp || !comp->cp_sel)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
return &comp->cp_sel->lcand->addr;
|
return comp->cp_sel->lcand;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the Remote candidate of the Selected Candidate pair, if available
|
||||||
|
*
|
||||||
|
* @param icem ICE Media object
|
||||||
|
* @param compid Component ID
|
||||||
|
*
|
||||||
|
* @return Remote candidate if available, otherwise NULL
|
||||||
|
*/
|
||||||
|
const struct ice_cand *icem_selected_rcand(const struct icem *icem,
|
||||||
|
unsigned compid)
|
||||||
|
{
|
||||||
|
const struct icem_comp *comp = icem_comp_find(icem, compid);
|
||||||
|
if (!comp || !comp->cp_sel)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return comp->cp_sel->rcand;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue