bool ProxyAutoConfig::SrcAddress(const NetAddr *remoteAddress, nsCString &localAddress) { PRFileDesc *fd; fd = PR_OpenUDPSocket(remoteAddress->raw.family); if (!fd) return false; PRNetAddr prRemoteAddress; NetAddrToPRNetAddr(remoteAddress, &prRemoteAddress); if (PR_Connect(fd, &prRemoteAddress, 0) != PR_SUCCESS) { PR_Close(fd); return false; } PRNetAddr localName; if (PR_GetSockName(fd, &localName) != PR_SUCCESS) { PR_Close(fd); return false; } PR_Close(fd); char dottedDecimal[128]; if (PR_NetAddrToString(&localName, dottedDecimal, sizeof(dottedDecimal)) != PR_SUCCESS) return false; localAddress.Assign(dottedDecimal); return true; }
PRStatus TLSFilterTransaction::GetPeerName(PRFileDesc *aFD, PRNetAddr*addr) { NetAddr peeraddr; TLSFilterTransaction *self = reinterpret_cast<TLSFilterTransaction *>(aFD->secret); if (!self->mTransaction || NS_FAILED(self->mTransaction->Connection()->Transport()->GetPeerAddr(&peeraddr))) { return PR_FAILURE; } NetAddrToPRNetAddr(&peeraddr, addr); return PR_SUCCESS; }