зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1161020: Added clean interface to |UnixSocketConnector|, r=kmachulis
The current interface of |UnixSocketConnector| doesn't follow any design and is not easily understandable. This patch adds a new interface to the class. The new interface provides a method for each of the following operations: * converting an address to a human-readable string, * creating a listening socket, * creating a stream socket, and * accepting a stream socket from a listening socket. All arguments are stored in the connector class, so that connect and listen methods of the socket classes don't require protocol-specific arguments. All socket parameters are set within the connector class, so each connector class can now select parameters individually.
This commit is contained in:
Родитель
53b503b2f0
Коммит
d9ca2a993a
|
@ -5,12 +5,54 @@
|
|||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include "UnixSocketConnector.h"
|
||||
#include "nsISupportsImpl.h" // For MOZ_COUNT_CTOR, MOZ_COUNT_DTOR
|
||||
|
||||
namespace mozilla {
|
||||
namespace ipc {
|
||||
|
||||
UnixSocketConnector::UnixSocketConnector()
|
||||
{
|
||||
MOZ_COUNT_CTOR(UnixSocketConnector);
|
||||
}
|
||||
|
||||
UnixSocketConnector::~UnixSocketConnector()
|
||||
{ }
|
||||
{
|
||||
MOZ_COUNT_DTOR(UnixSocketConnector);
|
||||
}
|
||||
|
||||
nsresult
|
||||
UnixSocketConnector::ConvertAddressToString(const struct sockaddr& aAddress,
|
||||
socklen_t aAddressLength,
|
||||
nsACString& aAddressString)
|
||||
{
|
||||
MOZ_CRASH("|UnixSocketConnector| does not convert addresses to strings.");
|
||||
return NS_ERROR_ABORT;
|
||||
}
|
||||
|
||||
nsresult
|
||||
UnixSocketConnector::CreateListenSocket(struct sockaddr* aAddress,
|
||||
socklen_t* aAddressLength,
|
||||
int& aListenFd)
|
||||
{
|
||||
MOZ_CRASH("|UnixSocketConnector| does not support listening sockets.");
|
||||
}
|
||||
|
||||
nsresult
|
||||
UnixSocketConnector::AcceptStreamSocket(int aListenFd,
|
||||
struct sockaddr* aAddress,
|
||||
socklen_t* aAddressLen,
|
||||
int& aStreamFd)
|
||||
{
|
||||
MOZ_CRASH("|UnixSocketConnector| does not support accepting stream sockets.");
|
||||
}
|
||||
|
||||
nsresult
|
||||
UnixSocketConnector::CreateStreamSocket(struct sockaddr* aAddress,
|
||||
socklen_t* aAddressLength,
|
||||
int& aStreamFd)
|
||||
{
|
||||
MOZ_CRASH("|UnixSocketConnector| does not support creating stream sockets.");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#ifndef mozilla_ipc_unixsocketconnector_h
|
||||
#define mozilla_ipc_unixsocketconnector_h
|
||||
|
||||
#include <sys/socket.h>
|
||||
#include "mozilla/ipc/UnixSocketWatcher.h"
|
||||
#include "nsString.h"
|
||||
|
||||
|
@ -16,7 +17,7 @@ namespace ipc {
|
|||
/**
|
||||
* |UnixSocketConnector| defines the socket creation and connection/listening
|
||||
* functions for |UnixSocketConsumer|, et al. Due to the fact that socket setup
|
||||
* can vary between protocols (unix sockets, tcp sockets, bluetooth sockets, etc),
|
||||
* can vary between protocols (Unix sockets, TCP sockets, Bluetooth sockets, etc),
|
||||
* this allows the user to create whatever connection mechanism they need while
|
||||
* still depending on libevent for non-blocking communication handling.
|
||||
*/
|
||||
|
@ -25,9 +26,61 @@ class UnixSocketConnector
|
|||
public:
|
||||
virtual ~UnixSocketConnector();
|
||||
|
||||
/**
|
||||
* Converts an address to a human-readable string.
|
||||
*
|
||||
* @param aAddress A socket address
|
||||
* @param aAddressLength The number of valid bytes in |aAddress|
|
||||
* @param[out] aAddressString The resulting string
|
||||
* @return NS_OK on success, or an XPCOM error code otherwise.
|
||||
*/
|
||||
virtual nsresult ConvertAddressToString(const struct sockaddr& aAddress,
|
||||
socklen_t aAddressLength,
|
||||
nsACString& aAddressString);
|
||||
|
||||
/**
|
||||
* Creates a listening socket. I/O thread only.
|
||||
*
|
||||
* @param[out] aAddress The listening socket's address
|
||||
* @param[out] aAddressLength The number of valid bytes in |aAddress|
|
||||
* @param[out] aListenFd The socket's file descriptor
|
||||
* @return NS_OK on success, or an XPCOM error code otherwise.
|
||||
*/
|
||||
virtual nsresult CreateListenSocket(struct sockaddr* aAddress,
|
||||
socklen_t* aAddressLength,
|
||||
int& aListenFd);
|
||||
|
||||
/**
|
||||
* Accepts a stream socket from a listening socket. I/O thread only.
|
||||
*
|
||||
* @param aListenFd The listening socket
|
||||
* @param[out] aAddress Returns the stream socket's address
|
||||
* @param[out] aAddressLength Returns the number of valid bytes in |aAddress|
|
||||
* @param[out] aStreamFd The stream socket's file descriptor
|
||||
* @return NS_OK on success, or an XPCOM error code otherwise.
|
||||
*/
|
||||
virtual nsresult AcceptStreamSocket(int aListenFd,
|
||||
struct sockaddr* aAddress,
|
||||
socklen_t* aAddressLen,
|
||||
int& aStreamFd);
|
||||
|
||||
/**
|
||||
* Creates a stream socket. I/O thread only.
|
||||
*
|
||||
* @param[in|out] aAddress The stream socket's address
|
||||
* @param[in|out] aAddressLength The number of valid bytes in |aAddress|
|
||||
* @param[out] aStreamFd The socket's file descriptor
|
||||
* @return NS_OK on success, or an XPCOM error code otherwise.
|
||||
*/
|
||||
virtual nsresult CreateStreamSocket(struct sockaddr* aAddress,
|
||||
socklen_t* aAddressLength,
|
||||
int& aStreamFd);
|
||||
|
||||
/**
|
||||
* Establishs a file descriptor for a socket.
|
||||
*
|
||||
* @deprecated
|
||||
*
|
||||
* @return File descriptor for socket
|
||||
*/
|
||||
virtual int Create() = 0;
|
||||
|
@ -37,6 +90,8 @@ public:
|
|||
* sockaddr struct, this function is defined by subclasses and fills in the
|
||||
* structure as needed for whatever connection it is trying to build
|
||||
*
|
||||
* @deprecated
|
||||
*
|
||||
* @param aIsServer True is we are acting as a server socket
|
||||
* @param aAddrSize Size of the struct
|
||||
* @param aAddr Struct to fill
|
||||
|
@ -62,6 +117,8 @@ public:
|
|||
/**
|
||||
* Perform socket setup for socket created by ListenSocket(), after listen().
|
||||
*
|
||||
* @deprecated
|
||||
*
|
||||
* @param aFd File descriptor for opened socket
|
||||
*
|
||||
* @return true is successful, false otherwise
|
||||
|
@ -72,11 +129,16 @@ public:
|
|||
* Get address of socket we're currently connected to. Return null string if
|
||||
* not connected.
|
||||
*
|
||||
* @deprecated
|
||||
*
|
||||
* @param aAddr Address struct
|
||||
* @param aAddrStr String to store address to
|
||||
*/
|
||||
virtual void GetSocketAddr(const sockaddr_any& aAddr,
|
||||
nsAString& aAddrStr) = 0;
|
||||
|
||||
protected:
|
||||
UnixSocketConnector();
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче