diff options
author | Olivier CrĂȘte <olivier.crete@collabora.co.uk> | 2010-05-20 22:49:00 -0400 |
---|---|---|
committer | Olivier CrĂȘte <olivier.crete@collabora.co.uk> | 2010-05-21 14:45:04 -0400 |
commit | 62991736c8a3562986545f0dfdc1810f65de1cc8 (patch) | |
tree | 48649d62a4cd389aee15c15d84456bbc75577f30 /agent/discovery.c | |
parent | 305ce1a9fb2fd21d3756dd3c620d254f85ba8c5d (diff) | |
download | libnice-62991736c8a3562986545f0dfdc1810f65de1cc8.tar.gz |
discovery: Clean up error handling in discovery_add_relay_candidate
Diffstat (limited to 'agent/discovery.c')
-rw-r--r-- | agent/discovery.c | 54 |
1 files changed, 23 insertions, 31 deletions
diff --git a/agent/discovery.c b/agent/discovery.c index b544847..85eb452 100644 --- a/agent/discovery.c +++ b/agent/discovery.c @@ -583,8 +583,6 @@ discovery_add_relay_candidate ( NiceCandidate *candidate; Component *component; Stream *stream; - gboolean result = FALSE; - gboolean errors = FALSE; NiceSocket *relay_socket = NULL; if (!agent_find_component (agent, stream_id, component_id, &stream, &component)) @@ -610,41 +608,35 @@ discovery_add_relay_candidate ( base_socket, &turn->server, turn->username, turn->password, agent_to_turn_socket_compatibility (agent)); - if (relay_socket) { - candidate->sockptr = relay_socket; - candidate->base_addr = base_socket->addr; - - priv_generate_candidate_credentials (agent, candidate); + if (!relay_socket) + goto errors; - /* Google uses the turn username as the candidate username */ - if (agent->compatibility == NICE_COMPATIBILITY_GOOGLE) { - g_free (candidate->username); - candidate->username = g_strdup (turn->username); - } + candidate->sockptr = relay_socket; + candidate->base_addr = base_socket->addr; - priv_assign_foundation (agent, candidate); + priv_generate_candidate_credentials (agent, candidate); - result = priv_add_local_candidate_pruned (component, candidate); - if (result) { - component->sockets = g_slist_append (component->sockets, relay_socket); - agent_signal_new_candidate (agent, candidate); - } else { - /* error: duplicate candidate */ - errors = TRUE; - } - } else { - /* error: socket factory make */ - errors = TRUE; + /* Google uses the turn username as the candidate username */ + if (agent->compatibility == NICE_COMPATIBILITY_GOOGLE) { + g_free (candidate->username); + candidate->username = g_strdup (turn->username); } - /* clean up after errors */ - if (errors) { - if (candidate) - nice_candidate_free (candidate), candidate = NULL; - if (relay_socket) - nice_socket_free (relay_socket); - } + priv_assign_foundation (agent, candidate); + + if (!priv_add_local_candidate_pruned (component, candidate)) + goto errors; + + component->sockets = g_slist_append (component->sockets, relay_socket); + agent_signal_new_candidate (agent, candidate); + return candidate; + +errors: + nice_candidate_free (candidate); + if (relay_socket) + nice_socket_free (relay_socket); + return NULL; } /* |