示例#1
0
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));
}
示例#2
0
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);
}