Bug 1164417: Add |UnixSocketConnector::Duplicate|, r=kmachulis

The new method |UnixSocketConnector::Duplicate| allows a socket
connector to duplicate itself. Listening sockets will used this
feature to create socket connectors for accepted connections.
This commit is contained in:
Thomas Zimmermann 2015-05-21 13:34:37 +02:00
parent 5d585882e3
commit a385885364
11 changed files with 59 additions and 0 deletions

View File

@ -171,4 +171,12 @@ BluetoothDaemonConnector::CreateStreamSocket(struct sockaddr* aAddress,
return NS_ERROR_ABORT;
}
nsresult
BluetoothDaemonConnector::Duplicate(UnixSocketConnector*& aConnector)
{
aConnector = new BluetoothDaemonConnector(*this);
return NS_OK;
}
END_BLUETOOTH_NAMESPACE

View File

@ -40,6 +40,8 @@ public:
socklen_t* aAddressLength,
int& aStreamFd) override;
nsresult Duplicate(UnixSocketConnector*& aConnector) override;
private:
nsresult CreateSocket(int& aFd) const;
nsresult SetSocketFlags(int aFd) const;

View File

@ -408,4 +408,12 @@ BluetoothUnixSocketConnector::CreateStreamSocket(struct sockaddr* aAddress,
return NS_OK;
}
nsresult
BluetoothUnixSocketConnector::Duplicate(UnixSocketConnector*& aConnector)
{
aConnector = new BluetoothUnixSocketConnector(*this);
return NS_OK;
}
END_BLUETOOTH_NAMESPACE

View File

@ -41,6 +41,8 @@ public:
socklen_t* aAddressLength,
int& aStreamFd) override;
nsresult Duplicate(UnixSocketConnector*& aConnector) override;
private:
nsresult CreateSocket(int& aFd) const;
nsresult SetSocketFlags(int aFd) const;

View File

@ -222,5 +222,13 @@ KeyStoreConnector::CreateStreamSocket(struct sockaddr* aAddress,
return NS_ERROR_FAILURE;
}
nsresult
KeyStoreConnector::Duplicate(UnixSocketConnector*& aConnector)
{
aConnector = new KeyStoreConnector(*this);
return NS_OK;
}
}
}

View File

@ -39,6 +39,8 @@ public:
socklen_t* aAddressLength,
int& aStreamFd) override;
nsresult Duplicate(UnixSocketConnector*& aConnector) override;
private:
nsresult CreateSocket(int& aFd) const;
nsresult SetSocketFlags(int aFd) const;

View File

@ -190,5 +190,13 @@ NfcConnector::CreateStreamSocket(struct sockaddr* aAddress,
return NS_OK;
}
nsresult
NfcConnector::Duplicate(UnixSocketConnector*& aConnector)
{
aConnector = new NfcConnector(*this);
return NS_OK;
}
}
}

View File

@ -43,6 +43,8 @@ public:
socklen_t* aAddressLength,
int& aStreamFd) override;
nsresult Duplicate(UnixSocketConnector*& aConnector) override;
private:
nsresult CreateSocket(int& aFd) const;
nsresult SetSocketFlags(int aFd) const;

View File

@ -204,5 +204,13 @@ RilConnector::CreateStreamSocket(struct sockaddr* aAddress,
return NS_OK;
}
nsresult
RilConnector::Duplicate(UnixSocketConnector*& aConnector)
{
aConnector = new RilConnector(*this);
return NS_OK;
}
}
}

View File

@ -43,6 +43,9 @@ public:
socklen_t* aAddressLength,
int& aStreamFd) override;
nsresult Duplicate(UnixSocketConnector*& aConnector) override;
private:
nsresult CreateSocket(int aDomain, int& aFd) const;
nsresult SetSocketFlags(int aFd) const;

View File

@ -76,6 +76,14 @@ public:
socklen_t* aAddressLength,
int& aStreamFd) = 0;
/**
* Copies the instance of |UnixSocketConnector|. I/O thread only.
*
* @param[in] aConnector Returns a new instance of the connector class
* @return NS_OK on success, or an XPCOM error code otherwise
*/
virtual nsresult Duplicate(UnixSocketConnector*& aConnector) = 0;
protected:
UnixSocketConnector();
};