summaryrefslogtreecommitdiff
path: root/agent
diff options
context:
space:
mode:
authorOlivier Crête <olivier.crete@collabora.com>2014-03-27 17:55:01 -0400
committerOlivier Crête <olivier.crete@collabora.com>2014-03-27 18:05:41 -0400
commit5987a939e61b034d675c0227b0b5be7748c7754f (patch)
treef18ffddeb3c3d0e0b5d558c6b5c12f20b3b237db /agent
parent01c5ef0496e3e7b7796e8a374bb8c23cc4612169 (diff)
downloadlibnice-5987a939e61b034d675c0227b0b5be7748c7754f.tar.gz
agent: Bail out early on empty message
This can happen if a lower layer has consumed the message, bail out earlier in that case.
Diffstat (limited to 'agent')
-rw-r--r--agent/agent.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/agent/agent.c b/agent/agent.c
index 569c66e..03ae14a 100644
--- a/agent/agent.c
+++ b/agent/agent.c
@@ -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);
}