예제 #1
0
nsresult NrIceMediaStream::GetDefaultCandidate(int component,
        std::string *addrp,
        int *portp) {
    nr_ice_candidate *cand;
    int r;

    r = nr_ice_media_stream_get_default_candidate(stream_,
            component, &cand);
    if (r) {
        MOZ_MTLOG(ML_ERROR, "Couldn't get default ICE candidate for '"
                  << name_ << "'");
        return NS_ERROR_NOT_AVAILABLE;
    }

    char addr[64];  // Enough for IPv6 with colons.
    r = nr_transport_addr_get_addrstring(&cand->addr,addr,sizeof(addr));
    if (r)
        return NS_ERROR_FAILURE;

    int port;
    r=nr_transport_addr_get_port(&cand->addr,&port);
    if (r)
        return NS_ERROR_FAILURE;

    *addrp = addr;
    *portp = port;

    return NS_OK;
}
// Make an NrIceCandidate from the candidate |cand|.
// This is not a member fxn because we want to hide the
// defn of nr_ice_candidate but we pass by reference.
static NrIceCandidate* MakeNrIceCandidate(const nr_ice_candidate& candc) {
  ScopedDeletePtr<NrIceCandidate> out(new NrIceCandidate());

  int r;
  // Const-cast because the internal nICEr code isn't const-correct.
  nr_ice_candidate *cand = const_cast<nr_ice_candidate *>(&candc);
  char addr[INET6_ADDRSTRLEN + 1];

  r = nr_transport_addr_get_addrstring(&cand->addr, addr, sizeof(addr));
  if (r)
    return nullptr;

  int port;
  r=nr_transport_addr_get_port(&cand->addr, &port);
  if (r)
    return nullptr;

  NrIceCandidate::Type type;

  switch(cand->type) {
    case HOST:
      type = NrIceCandidate::ICE_HOST;
      break;
    case SERVER_REFLEXIVE:
      type = NrIceCandidate::ICE_SERVER_REFLEXIVE;
      break;
    case PEER_REFLEXIVE:
      type = NrIceCandidate::ICE_PEER_REFLEXIVE;
      break;
    case RELAYED:
      type = NrIceCandidate::ICE_RELAYED;
      break;
    default:
      return nullptr;
  }

  out->host = addr;
  out->port = port;
  out->type = type;

  return out.forget();
}
예제 #3
0
/*
 * nr_transport_addr_get_addrstring_and_port
 * convert nr_transport_addr to IP address string and port number
 */
int nr_transport_addr_get_addrstring_and_port(nr_transport_addr *addr,
                                              nsACString *host, int32_t *port) {
  int r, _status;
  char addr_string[64];

  // We cannot directly use |nr_transport_addr.as_string| because it contains
  // more than ip address, therefore, we need to explicity convert it
  // from |nr_transport_addr_get_addrstring|.
  if ((r=nr_transport_addr_get_addrstring(addr, addr_string, sizeof(addr_string)))) {
    ABORT(r);
  }

  if ((r=nr_transport_addr_get_port(addr, port))) {
    ABORT(r);
  }

  *host = addr_string;

  _status=0;
abort:
  return(_status);
}