tsk_bool_t tsip_dialog_invite_ice_is_enabled(const tsip_dialog_invite_t * self)
{
	if(self){
		return (self->supported.ice && (tnet_ice_ctx_is_active(self->ice.ctx_audio) || tnet_ice_ctx_is_active(self->ice.ctx_video)));
	}
	return tsk_false;
}
tsk_bool_t tsip_dialog_invite_ice_got_local_candidates(const tsip_dialog_invite_t * self)
{
	if(self){
		return (!tnet_ice_ctx_is_active(self->ice.ctx_audio) || tnet_ice_ctx_got_local_candidates(self->ice.ctx_audio))
			&& (!tnet_ice_ctx_is_active(self->ice.ctx_video) || tnet_ice_ctx_got_local_candidates(self->ice.ctx_video));
	}
	return tsk_false;
}
tsk_bool_t tsip_dialog_invite_ice_is_connected(const tsip_dialog_invite_t * self)
{
	if(self){
		return (!tnet_ice_ctx_is_active(self->ice.ctx_audio) || tnet_ice_ctx_is_connected(self->ice.ctx_audio))
			&& (!tnet_ice_ctx_is_active(self->ice.ctx_video) || tnet_ice_ctx_is_connected(self->ice.ctx_video));
	}
	return tsk_false;
}
Example #4
0
int tsip_dialog_invite_ice_timers_set(tsip_dialog_invite_t *self, int64_t timeout)
{
	if(tnet_ice_ctx_is_active(self->ice.ctx_audio)){
		tnet_ice_ctx_set_concheck_timeout(self->ice.ctx_audio, timeout);
	}
	if(tnet_ice_ctx_is_active(self->ice.ctx_video)){
		tnet_ice_ctx_set_concheck_timeout(self->ice.ctx_video, timeout);
	}
	return 0;
}
int tsip_dialog_invite_ice_process_lo(tsip_dialog_invite_t * self, const tsdp_message_t* sdp_lo)
{
	const tsdp_header_M_t* M;
	const tsdp_header_A_t *A;
	int ret = 0, i;

	if(!self || !sdp_lo){
		TSK_DEBUG_ERROR("Invalid parameter");
		return -1;
	}

	// cancels all ICE contexts without candidates
	// this happens if codecs negotiations mismatch for one media out of two or three
	for(i = 0; i < 2; ++i){
		struct tnet_ice_ctx_s *ctx = i == 0 ? self->ice.ctx_audio : self->ice.ctx_video;
		const char* media = i == 0 ? "audio" : "video";
		if(tnet_ice_ctx_is_active(ctx)){
			tsk_bool_t cancel = tsk_true;
			if((M = tsdp_message_find_media(sdp_lo, media))){
				if((A = tsdp_header_M_findA(M, "candidate"))){
					cancel = tsk_false;
				}
			}
			if(cancel){
				ret = tnet_ice_ctx_cancel(ctx);
			}
		}
	}

	return ret;
}