RefPtr<NrSocketBase> TestNrSocket::create_external_socket( const nr_transport_addr &dest_addr) const { MOZ_ASSERT(nat_->enabled_); MOZ_ASSERT(!nat_->is_an_internal_tuple(dest_addr)); int r; nr_transport_addr nat_external_addr; // Open the socket on an arbitrary port, on the same address. // TODO(bug 1170299): Remove const_cast when no longer necessary if ((r = nr_transport_addr_copy( &nat_external_addr, const_cast<nr_transport_addr*>(&internal_socket_->my_addr())))) { r_log(LOG_GENERIC,LOG_CRIT, "%s: Failure in nr_transport_addr_copy: %d", __FUNCTION__, r); return nullptr; } if ((r = nr_transport_addr_set_port(&nat_external_addr, 0))) { r_log(LOG_GENERIC,LOG_CRIT, "%s: Failure in nr_transport_addr_set_port: %d", __FUNCTION__, r); return nullptr; } RefPtr<NrSocketBase> external_socket; r = NrSocketBase::CreateSocket(&nat_external_addr, &external_socket); if (r) { r_log(LOG_GENERIC,LOG_CRIT, "%s: Failure in NrSocket::create: %d", __FUNCTION__, r); return nullptr; } return external_socket; }
void NrIceResolverFake::resolve_cb(NR_SOCKET s, int how, void *cb_arg) { MOZ_ASSERT(cb_arg); PendingResolution *pending = static_cast<PendingResolution *>(cb_arg); const PRNetAddr *addr=pending->resolver_->Resolve(pending->hostname_); if (addr) { nr_transport_addr transport_addr; int r = nr_praddr_to_transport_addr(addr, &transport_addr, 0); MOZ_ASSERT(!r); if (r) goto abort; r=nr_transport_addr_set_port(&transport_addr, pending->port_); MOZ_ASSERT(!r); if (r) goto abort; /* Fill in the address string */ r=nr_transport_addr_fmt_addr_string(&transport_addr); MOZ_ASSERT(!r); if (r) goto abort; pending->cb_(pending->cb_arg_, &transport_addr); delete pending; return; } abort: // Resolution failed. pending->cb_(pending->cb_arg_, nullptr); delete pending; }