mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-14 05:45:37 +00:00
Bug 951677 - Part 1: Add Bind function to SocketTransport. r=honzab
This commit is contained in:
parent
f16d501785
commit
09aed1e55d
@ -16,6 +16,7 @@ union NetAddr;
|
||||
}
|
||||
%}
|
||||
native NetAddr(mozilla::net::NetAddr);
|
||||
[ptr] native NetAddrPtr(mozilla::net::NetAddr);
|
||||
|
||||
/**
|
||||
* nsISocketTransport
|
||||
@ -27,7 +28,7 @@ native NetAddr(mozilla::net::NetAddr);
|
||||
* NOTE: This is a free-threaded interface, meaning that the methods on
|
||||
* this interface may be called from any thread.
|
||||
*/
|
||||
[scriptable, uuid(3F41704C-CD5D-4537-8C4C-7B2EBFC5D972)]
|
||||
[scriptable, uuid(a0b3b547-d6f0-4b65-a3de-a99ffa368840)]
|
||||
interface nsISocketTransport : nsITransport
|
||||
{
|
||||
/**
|
||||
@ -55,6 +56,11 @@ interface nsISocketTransport : nsITransport
|
||||
*/
|
||||
[noscript] NetAddr getSelfAddr();
|
||||
|
||||
/**
|
||||
* Bind to a specific local address.
|
||||
*/
|
||||
[noscript] void bind(in NetAddrPtr aLocalAddr);
|
||||
|
||||
/**
|
||||
* Returns a scriptable version of getPeerAddr. This attribute is defined
|
||||
* only once a connection has been established.
|
||||
|
@ -1355,6 +1355,18 @@ nsSocketTransport::InitiateSocket()
|
||||
// Initiate the connect() to the host...
|
||||
//
|
||||
PRNetAddr prAddr;
|
||||
{
|
||||
if (mBindAddr) {
|
||||
MutexAutoLock lock(mLock);
|
||||
NetAddrToPRNetAddr(mBindAddr.get(), &prAddr);
|
||||
status = PR_Bind(fd, &prAddr);
|
||||
if (status != PR_SUCCESS) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
mBindAddr = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
NetAddrToPRNetAddr(&mNetAddr, &prAddr);
|
||||
|
||||
MOZ_EVENT_TRACER_EXEC(this, "net::tcp::connect");
|
||||
@ -2221,6 +2233,22 @@ nsSocketTransport::GetSelfAddr(NetAddr *addr)
|
||||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsSocketTransport::Bind(NetAddr *aLocalAddr)
|
||||
{
|
||||
NS_ENSURE_ARG(aLocalAddr);
|
||||
|
||||
MutexAutoLock lock(mLock);
|
||||
if (mAttached) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
mBindAddr = new NetAddr();
|
||||
memcpy(mBindAddr.get(), aLocalAddr, sizeof(NetAddr));
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
/* nsINetAddr getScriptablePeerAddr (); */
|
||||
NS_IMETHODIMP
|
||||
nsSocketTransport::GetScriptablePeerAddr(nsINetAddr * *addr)
|
||||
|
@ -305,6 +305,8 @@ private:
|
||||
mozilla::net::NetAddr mNetAddr;
|
||||
bool mNetAddrIsSet;
|
||||
|
||||
nsAutoPtr<mozilla::net::NetAddr> mBindAddr;
|
||||
|
||||
// socket methods (these can only be called on the socket thread):
|
||||
|
||||
void SendStatus(nsresult status);
|
||||
|
@ -1544,6 +1544,12 @@ SocketTransportShim::SetEventSink(nsITransportEventSink *aSink, nsIEventTarget *
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
SocketTransportShim::Bind(NetAddr *aLocalAddr)
|
||||
{
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
#define FWD_TS_PTR(fx, ts) NS_IMETHODIMP \
|
||||
SocketTransportShim::fx(ts *arg) { return mWrapped->fx(arg); }
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user