summaryrefslogtreecommitdiff
path: root/agent/discovery.c
diff options
context:
space:
mode:
authorOlivier CrĂȘte <olivier.crete@collabora.co.uk>2010-05-20 22:49:00 -0400
committerOlivier CrĂȘte <olivier.crete@collabora.co.uk>2010-05-21 14:45:04 -0400
commit62991736c8a3562986545f0dfdc1810f65de1cc8 (patch)
tree48649d62a4cd389aee15c15d84456bbc75577f30 /agent/discovery.c
parent305ce1a9fb2fd21d3756dd3c620d254f85ba8c5d (diff)
downloadlibnice-62991736c8a3562986545f0dfdc1810f65de1cc8.tar.gz
discovery: Clean up error handling in discovery_add_relay_candidate
Diffstat (limited to 'agent/discovery.c')
-rw-r--r--agent/discovery.c54
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;
}
/*