X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/14372de82e2129fab7d416de79fc3d95e57960b9..e1ef506e13b7c8e96483b7fc0852dcb46688badd:/include/wx/private/socket.h?ds=sidebyside diff --git a/include/wx/private/socket.h b/include/wx/private/socket.h index d25f8d0481..0e2d15ae91 100644 --- a/include/wx/private/socket.h +++ b/include/wx/private/socket.h @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// // Name: wx/private/socket.h -// Purpose: wxSocketImpl nd related declarations +// Purpose: wxSocketImpl and related declarations // Authors: Guilhem Lavaux, Vadim Zeitlin // Created: April 1997 // RCS-ID: $Id$ @@ -42,6 +42,7 @@ #if wxUSE_SOCKETS #include "wx/socket.h" +#include "wx/private/sckaddr.h" #include @@ -90,23 +91,8 @@ #define SOCKET_ERROR (-1) #endif -#if wxUSE_IPV6 - typedef struct sockaddr_storage wxSockAddr; -#else - typedef struct sockaddr wxSockAddr; -#endif - -enum GAddressType -{ - wxSOCKET_NOFAMILY = 0, - wxSOCKET_INET, - wxSOCKET_INET6, - wxSOCKET_UNIX -}; - typedef int wxSocketEventFlags; -struct GAddress; class wxSocketImpl; /* @@ -158,10 +144,15 @@ public: // that both BSD and Winsock implementations actually use socket->m_server // value to determine what exactly should be monitored so it needs to be // set before calling these functions) + // + // the default event value is used just for the convenience of wxMSW + // implementation which doesn't use this parameter anyhow, it doesn't make + // sense to pass wxSOCKET_LOST for the Unix implementation which does use + // this parameter virtual void Install_Callback(wxSocketImpl *socket, - wxSocketNotify event = wxSOCKET_MAX_EVENT) = 0; + wxSocketNotify event = wxSOCKET_LOST) = 0; virtual void Uninstall_Callback(wxSocketImpl *socket, - wxSocketNotify event = wxSOCKET_MAX_EVENT) = 0; + wxSocketNotify event = wxSOCKET_LOST) = 0; virtual ~wxSocketManager() { } @@ -200,16 +191,16 @@ public: m_initialSendBufferSize = send; } - wxSocketError SetLocal(GAddress *address); - wxSocketError SetPeer(GAddress *address); + wxSocketError SetLocal(const wxSockAddressImpl& address); + wxSocketError SetPeer(const wxSockAddressImpl& address); // accessors // --------- bool IsServer() const { return m_server; } - GAddress *GetLocal(); - GAddress *GetPeer(); + const wxSockAddressImpl& GetLocal(); // non const as may update m_local + const wxSockAddressImpl& GetPeer() const { return m_peer; } wxSocketError GetError() const { return m_error; } bool IsOk() const { return m_error == wxSOCKET_NOERROR; } @@ -295,6 +286,11 @@ public: // named) OnRequest() method void NotifyOnStateChange(wxSocketNotify event); + // called after reading/writing the data from/to the socket and should + // enable back the wxSOCKET_INPUT/OUTPUT_FLAG notifications if they were + // turned off when this data was first detected + virtual void ReenableEvents(wxSocketEventFlags flags) = 0; + // TODO: make these fields protected and provide accessors for those of // them that wxSocketBase really needs //protected: @@ -303,8 +299,8 @@ public: int m_initialRecvBufferSize; int m_initialSendBufferSize; - GAddress *m_local; - GAddress *m_peer; + wxSockAddressImpl m_local, + m_peer; wxSocketError m_error; bool m_stream; @@ -332,7 +328,7 @@ private: // check that the socket wasn't created yet and that the given address // (either m_local or m_peer depending on the socket kind) is valid and // set m_error and return false if this is not the case - bool PreCreateCheck(GAddress *addr); + bool PreCreateCheck(const wxSockAddressImpl& addr); // set the given socket option: this just wraps setsockopt(SOL_SOCKET) int SetSocketOption(int optname, int optval) @@ -378,79 +374,6 @@ private: #include "wx/unix/private/sockunix.h" #endif - -/* GAddress */ - -// TODO: make GAddress a real class instead of this mix of C and C++ - -// Represents a socket endpoint, i.e. -- in spite of its name -- not an address -// but an (address, port) pair -struct GAddress -{ - struct sockaddr *m_addr; - size_t m_len; - - GAddressType m_family; - int m_realfamily; - - wxSocketError m_error; -}; - -GAddress *GAddress_new(); -GAddress *GAddress_copy(GAddress *address); -void GAddress_destroy(GAddress *address); - -void GAddress_SetFamily(GAddress *address, GAddressType type); -GAddressType GAddress_GetFamily(GAddress *address); - -/* The use of any of the next functions will set the address family to - * the specific one. For example if you use GAddress_INET_SetHostName, - * address family will be implicitly set to AF_INET. - */ - -wxSocketError GAddress_INET_SetHostName(GAddress *address, const char *hostname); -wxSocketError GAddress_INET_SetBroadcastAddress(GAddress *address); -wxSocketError GAddress_INET_SetAnyAddress(GAddress *address); -wxSocketError GAddress_INET_SetHostAddress(GAddress *address, - unsigned long hostaddr); -wxSocketError GAddress_INET_SetPortName(GAddress *address, const char *port, - const char *protocol); -wxSocketError GAddress_INET_SetPort(GAddress *address, unsigned short port); - -wxSocketError GAddress_INET_GetHostName(GAddress *address, char *hostname, - size_t sbuf); -unsigned long GAddress_INET_GetHostAddress(GAddress *address); -unsigned short GAddress_INET_GetPort(GAddress *address); - -wxSocketError _GAddress_translate_from(GAddress *address, - struct sockaddr *addr, int len); -wxSocketError _GAddress_translate_to (GAddress *address, - struct sockaddr **addr, int *len); -wxSocketError _GAddress_Init_INET(GAddress *address); - -#if wxUSE_IPV6 - -wxSocketError GAddress_INET6_SetHostName(GAddress *address, const char *hostname); -wxSocketError GAddress_INET6_SetAnyAddress(GAddress *address); -wxSocketError GAddress_INET6_SetHostAddress(GAddress *address, - struct in6_addr hostaddr); -wxSocketError GAddress_INET6_SetPortName(GAddress *address, const char *port, - const char *protocol); -wxSocketError GAddress_INET6_SetPort(GAddress *address, unsigned short port); - -wxSocketError GAddress_INET6_GetHostName(GAddress *address, char *hostname, - size_t sbuf); -wxSocketError GAddress_INET6_GetHostAddress(GAddress *address,struct in6_addr *hostaddr); -unsigned short GAddress_INET6_GetPort(GAddress *address); - -#endif // wxUSE_IPV6 - -// these functions are available under all platforms but only implemented under -// Unix ones, elsewhere they just return wxSOCKET_INVADDR -wxSocketError _GAddress_Init_UNIX(GAddress *address); -wxSocketError GAddress_UNIX_SetPath(GAddress *address, const char *path); -wxSocketError GAddress_UNIX_GetPath(GAddress *address, char *path, size_t sbuf); - #endif /* wxUSE_SOCKETS */ #endif /* _WX_PRIVATE_SOCKET_H_ */