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(); }
/* * 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); }