diff options
author | Marcus Lundblad <ml@update.uu.se> | 2010-10-25 23:26:50 +0200 |
---|---|---|
committer | Youness Alaoui <youness.alaoui@collabora.co.uk> | 2010-12-14 20:53:04 -0500 |
commit | 73d2deef48a7aff59ed58df3146ab60055a1f31b (patch) | |
tree | 123236f97c54b765fae390649b3895d9507cd49c /socket | |
parent | ecca706440e081b1a17dd79be8a3f3e8429001e9 (diff) | |
download | libnice-73d2deef48a7aff59ed58df3146ab60055a1f31b.tar.gz |
Don't log pending permission messages more than once (when resending the message with
message integrity)
Added some debug output that shall be removed...
Diffstat (limited to 'socket')
-rw-r--r-- | socket/turn.c | 57 |
1 files changed, 43 insertions, 14 deletions
diff --git a/socket/turn.c b/socket/turn.c index 6c289a4..153c86d 100644 --- a/socket/turn.c +++ b/socket/turn.c @@ -514,8 +514,16 @@ socket_send (NiceSocket *sock, const NiceAddress *to, if (priv->compatibility == NICE_TURN_SOCKET_COMPATIBILITY_RFC5766) { if (!priv_has_permission_for_peer (priv, to) && !priv_has_sent_permission_for_peer (priv, to)) { + nice_debug ("installed permissions: %d\n", g_list_length (priv->permissions)); + nice_debug ("sent permissions: %d\n", g_list_length (priv->sent_permissions)); + nice_debug ("permission: %d\n", + priv_has_permission_for_peer (priv, to)); + nice_debug ("has sent permission: %d\n", + priv_has_sent_permission_for_peer (priv, to)); nice_debug ("no permission installed for peer"); priv_send_create_permission (priv, NULL, 0, NULL, 0, to); + nice_debug ("has sent permission: %d\n", + priv_has_sent_permission_for_peer (priv, to)); } } @@ -846,17 +854,32 @@ nice_turn_socket_parse_recv (NiceSocket *sock, NiceSocket **from_sock, /* we now have a permission installed for this peer */ GList *iter; + nice_debug ("have %d sent permissions pending\n", + g_list_length (priv->sent_permissions)); + for (iter = priv->sent_permissions ; iter ; iter = g_list_next (iter)) { NiceAddress *address = (NiceAddress *) iter->data; - + if (nice_address_equal (address, to)) { nice_address_free ((NiceAddress *) iter->data); priv->sent_permissions = - g_list_remove_link (priv->sent_permissions, iter); - break; + g_list_delete_link (priv->sent_permissions, iter); } } + for (iter = priv->sent_permissions ; iter ; iter = g_list_next (iter)) { + NiceAddress *address = (NiceAddress *) iter->data; + gchar addr[NICE_ADDRESS_STRING_LEN]; + + nice_address_to_string (address, addr); + nice_debug ("pending permission left for %s\n", addr); + } + + nice_debug ("sent permissions left: %d\n", + g_list_length (priv->sent_permissions)); + + exit (0); + priv->permissions = g_list_append (priv->permissions, to); @@ -1026,7 +1049,7 @@ priv_retransmissions_create_permission_tick_unlocked (TurnPriv *priv) NiceAddress *to = nice_address_new (); struct sockaddr addr; socklen_t addr_len = sizeof(addr); - GList *sent_permission; + GList *iter; stun_message_id (&priv->current_create_permission_msg->message, id); stun_agent_forget_transaction (&priv->agent, id); @@ -1034,9 +1057,17 @@ priv_retransmissions_create_permission_tick_unlocked (TurnPriv *priv) STUN_ATTRIBUTE_XOR_PEER_ADDRESS, &addr, &addr_len); nice_address_set_from_sockaddr (to, &addr); - sent_permission = - g_list_find_custom (priv->sent_permissions, to, - (GCompareFunc) nice_address_equal); + + for (iter = priv->sent_permissions ; iter ; iter = g_list_next (iter)) { + NiceAddress *address = (NiceAddress *) iter->data; + + if (nice_address_equal (address, to)) { + nice_address_free (address); + priv->sent_permissions = + g_list_delete_link (priv->sent_permissions, iter); + break; + } + } g_free (priv->current_create_permission_msg); priv->current_create_permission_msg = NULL; @@ -1047,12 +1078,6 @@ priv_retransmissions_create_permission_tick_unlocked (TurnPriv *priv) fail eventually anyway */ priv->permissions = g_list_append (priv->permissions, to); - if (sent_permission) { - nice_address_free ((NiceAddress *) sent_permission->data); - priv->sent_permissions = - g_list_delete_link (priv->sent_permissions, sent_permission); - } - socket_dequeue_all_data (priv, to); break; @@ -1199,7 +1224,11 @@ priv_send_create_permission(TurnPriv *priv, uint8_t *realm, gsize realm_len, nice_address_to_string (to, addr_str); nice_debug("creating CreatePermission message for %s", addr_str); - priv->sent_permissions = g_list_append (priv->sent_permissions, to); + + /* register this peer as being pening a permission (if not already pending) */ + if (!priv_has_sent_permission_for_peer (priv, to)) { + priv->sent_permissions = g_list_append (priv->sent_permissions, to); + } nice_address_copy_to_sockaddr (peer, &addr); |