agent: Bail out early on empty message
authorOlivier Crête <olivier.crete@collabora.com>
Thu, 27 Mar 2014 21:55:01 +0000 (17:55 -0400)
committerOlivier Crête <olivier.crete@collabora.com>
Thu, 27 Mar 2014 22:05:41 +0000 (18:05 -0400)
This can happen if a lower layer has consumed the message, bail out earlier in
that case.

agent/agent.c

index 569c66e..03ae14a 100644 (file)
@@ -2726,7 +2726,12 @@ agent_recv_message_unlocked (
     goto done;
   }
 
-  if (nice_debug_is_enabled () && message->length > 0) {
+  if (retval == RECV_OOB || message->length == 0) {
+    retval = RECV_OOB;
+    goto done;
+  }
+
+  if (nice_debug_is_enabled ()) {
     gchar tmpbuf[INET6_ADDRSTRLEN];
     nice_address_to_string (message->from, tmpbuf);
     nice_debug ("Agent %p : Packet received on local socket %d from [%s]:%u (%" G_GSSIZE_FORMAT " octets).", agent,
@@ -2750,11 +2755,16 @@ agent_recv_message_unlocked (
       if (cand->type == NICE_CANDIDATE_TYPE_RELAYED &&
           cand->stream_id == stream->id &&
           cand->component_id == component->id) {
-        nice_turn_socket_parse_recv_message (cand->sockptr, &socket, message);
+        retval = nice_turn_socket_parse_recv_message (cand->sockptr, &socket,
+            message);
+        break;
       }
     }
   }
 
+  if (retval == RECV_OOB)
+    goto done;
+
   agent->media_after_tick = TRUE;
 
   /* If the message’s stated length is equal to its actual length, it’s probably
@@ -2806,7 +2816,7 @@ agent_recv_message_unlocked (
       nice_debug ("%s: Queued %" G_GSSIZE_FORMAT " bytes for agent %p.",
           G_STRFUNC, vec->size, agent);
 
-      return 0;
+      return RECV_OOB;
     } else {
       process_queued_tcp_packets (agent, stream, component);
     }