conncheck: handle the consequence when a pair is not created
authorFabrice Bellet <fabrice@bellet.info>
Sun, 17 May 2020 20:51:21 +0000 (22:51 +0200)
committerFabrice Bellet <fabrice@bellet.info>
Mon, 18 May 2020 13:21:20 +0000 (15:21 +0200)
Since commit fcd6bc86 a pair is not always created, when its priority
is lower than the selected pair priority. We have to deal with this
possibility when calling the function priv_add_new_check_pair().

More precisely, the component state update really requires the addition
of a new pair.

agent/conncheck.c

index e726d7a..690f63e 100644 (file)
@@ -2423,17 +2423,19 @@ static CandidateCheckPair *priv_conn_check_add_for_candidate_pair_matched (
 
   pair = priv_add_new_check_pair (agent, stream_id, component, local, remote,
       initial_state);
-  if (component->state == NICE_COMPONENT_STATE_CONNECTED ||
-      component->state == NICE_COMPONENT_STATE_READY) {
-    agent_signal_component_state_change (agent,
-        stream_id,
-        component->id,
-        NICE_COMPONENT_STATE_CONNECTED);
-  } else {
-    agent_signal_component_state_change (agent,
-        stream_id,
-        component->id,
-        NICE_COMPONENT_STATE_CONNECTING);
+  if (pair) {
+    if (component->state == NICE_COMPONENT_STATE_CONNECTED ||
+        component->state == NICE_COMPONENT_STATE_READY) {
+      agent_signal_component_state_change (agent,
+          stream_id,
+          component->id,
+          NICE_COMPONENT_STATE_CONNECTED);
+    } else {
+      agent_signal_component_state_change (agent,
+          stream_id,
+          component->id,
+          NICE_COMPONENT_STATE_CONNECTING);
+    }
   }
 
   return pair;
@@ -2468,9 +2470,9 @@ gboolean conn_check_add_for_candidate_pair (NiceAgent *agent,
   /* note: match pairs only if transport and address family are the same */
   if (local->transport == conn_check_match_transport (remote->transport) &&
      local->addr.s.addr.sa_family == remote->addr.s.addr.sa_family) {
-    priv_conn_check_add_for_candidate_pair_matched (agent, stream_id, component,
-        local, remote, NICE_CHECK_FROZEN);
-    ret = TRUE;
+    if (priv_conn_check_add_for_candidate_pair_matched (agent, stream_id,
+        component, local, remote, NICE_CHECK_FROZEN))
+      ret = TRUE;
   }
 
   return ret;