static gboolean socket_is_based_on (NiceSocket *sock, NiceSocket *other) { PseudoSSLPriv *priv = sock->priv; return (sock == other) || (priv && nice_socket_is_based_on (priv->base_socket, other)); }
void nice_component_remove_socket (NiceComponent *cmp, NiceSocket *nsocket) { GSList *i; for (i = cmp->local_candidates; i;) { NiceCandidate *candidate = i->data; GSList *next = i->next; if (!nice_socket_is_based_on (candidate->sockptr, nsocket)) { i = next; continue; } if (candidate == cmp->selected_pair.local) { nice_component_clear_selected_pair (cmp); agent_signal_component_state_change (cmp->agent, cmp->stream->id, cmp->id, NICE_COMPONENT_STATE_FAILED); } refresh_prune_candidate (cmp->agent, candidate); if (candidate->sockptr != nsocket) { discovery_prune_socket (cmp->agent, candidate->sockptr); conn_check_prune_socket (cmp->agent, cmp->stream, cmp, candidate->sockptr); nice_component_detach_socket (cmp, candidate->sockptr); } agent_remove_local_candidate (cmp->agent, candidate); nice_candidate_free (candidate); cmp->local_candidates = g_slist_delete_link (cmp->local_candidates, i); i = next; } discovery_prune_socket (cmp->agent, nsocket); conn_check_prune_socket (cmp->agent, cmp->stream, cmp, nsocket); nice_component_detach_socket (cmp, nsocket); }