From 2db33efeccc3ebf05a44c6255f92dae19785a7e4 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Wed, 18 Mar 2015 09:23:13 -0400 Subject: [PATCH] reset ICE/STUN retransmit data on triggered checks fixes #84 --- daemon/ice.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/daemon/ice.c b/daemon/ice.c index dd5c09495..8119da3e6 100644 --- a/daemon/ice.c +++ b/daemon/ice.c @@ -559,6 +559,7 @@ void ice_init(void) { static void __fail_pair(struct ice_candidate_pair *pair) { ilog(LOG_DEBUG, "Setting ICE candidate pair "PAIR_FORMAT" as failed", PAIR_FMT(pair)); PAIR_SET(pair, FAILED); + PAIR_CLEAR(pair, IN_PROGRESS); } /* agent must NOT be locked, but call must be locked in R */ @@ -869,7 +870,9 @@ static void __trigger_check(struct ice_candidate_pair *pair) { ilog(LOG_DEBUG, "Triggering check for "PAIR_FORMAT, PAIR_FMT(pair)); mutex_lock(&ag->lock); - PAIR_CLEAR(pair, FAILED); + pair->retransmits = 0; + if (PAIR_CLEAR(pair, FAILED)) + PAIR_CLEAR(pair, IN_PROGRESS); if (ag->triggered.length < 4 * MAX_ICE_CANDIDATES && !PAIR_SET(pair, TRIGGERED)) g_queue_push_tail(&ag->triggered, pair); mutex_unlock(&ag->lock);