X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2df7be7f2cca699a02ee0c9ce69de9bfe6b0922f..19e30148e18cc99296b26503c155e5cef59045f4:/include/wx/sckaddr.h diff --git a/include/wx/sckaddr.h b/include/wx/sckaddr.h index b182548948..c9be201e8e 100644 --- a/include/wx/sckaddr.h +++ b/include/wx/sckaddr.h @@ -20,62 +20,61 @@ #if wxUSE_SOCKETS -#if defined(__WINDOWS__) && defined(WXSOCK_INTERNAL) -#include - -#elif defined(__UNIX__) && defined(WXSOCK_INTERNAL) - -#include -#include -#include -#endif - #include "wx/string.h" +#include "wx/gsocket.h" + class WXDLLEXPORT wxSockAddress : public wxObject { DECLARE_ABSTRACT_CLASS(wxSockAddress) public: typedef enum { IPV4=1, IPV6=2, UNIX=3 } Addr; - wxSockAddress() {}; - virtual ~wxSockAddress() {}; - - virtual void Clear() = 0; + wxSockAddress(); + wxSockAddress(const wxSockAddress& other); + virtual ~wxSockAddress(); - virtual void Build(struct sockaddr*& addr, size_t& len) = 0; - virtual void Disassemble(struct sockaddr *addr, size_t len) = 0; - virtual int SockAddrLen() = 0; + wxSockAddress& operator=(const wxSockAddress& other); - virtual int GetFamily() = 0; + virtual void Clear(); virtual int Type() = 0; + + GAddress *GetAddress() const { return m_address; } + void SetAddress(GAddress *address); + + // we need to be able to create copies of the addresses polymorphically (i.e. + // without knowing the exact address class) + virtual wxSockAddress *Clone() const = 0; + +protected: + GAddress *m_address; + +private: + void Init(); }; class WXDLLEXPORT wxIPV4address : public wxSockAddress { DECLARE_DYNAMIC_CLASS(wxIPV4address) -private: - struct sockaddr_in *m_addr; public: wxIPV4address(); + wxIPV4address(const wxIPV4address& other); virtual ~wxIPV4address(); - virtual void Clear(); -// const wxSockAddress& operator =(const wxSockAddress& addr); - - virtual bool Hostname(const wxString& name); - virtual bool Hostname(unsigned long addr); - virtual bool Service(const wxString& name); - virtual bool Service(unsigned short port); - virtual bool LocalHost(); + bool Hostname(const wxString& name); + bool Hostname(unsigned long addr); + bool Service(const wxString& name); + bool Service(unsigned short port); + bool LocalHost(); + bool AnyAddress(); wxString Hostname(); + wxString OrigHostname() { return m_origHostname; } unsigned short Service(); - void Build(struct sockaddr*& addr, size_t& len); - void Disassemble(struct sockaddr *addr, size_t len); + virtual int Type() { return wxSockAddress::IPV4; } + virtual wxSockAddress *Clone() const; - inline int SockAddrLen(); - inline int GetFamily(); - inline int Type() { return wxSockAddress::IPV4; } +private: + wxString m_origHostname; }; #ifdef ENABLE_IPV6 @@ -85,10 +84,8 @@ private: struct sockaddr_in6 *m_addr; public: wxIPV6address(); - ~wxIPV6address(); - - void Clear(); -// const wxSockAddress& operator =(const wxSockAddress& addr); + wxIPV6address(const wxIPV6address& other); + virtual ~wxIPV6address(); bool Hostname(const wxString& name); bool Hostname(unsigned char addr[16]); @@ -99,17 +96,16 @@ public: wxString Hostname() const; unsigned short Service() const; - void Build(struct sockaddr*& addr, size_t& len); - void Disassemble(struct sockaddr *addr, size_t len); - - inline int SockAddrLen(); - inline int GetFamily(); - inline int Type() { return wxSockAddress::IPV6; } + virtual int Type() { return wxSockAddress::IPV6; } + virtual wxSockAddress *Clone() const { return new wxIPV6address(*this); } }; #endif -#ifdef __UNIX__ -#include +#if defined(__UNIX__) && !defined(__WXMAC__) +#include +#ifndef __VMS__ +# include +#endif class WXDLLEXPORT wxUNIXaddress : public wxSockAddress { DECLARE_DYNAMIC_CLASS(wxUNIXaddress) @@ -117,26 +113,20 @@ private: struct sockaddr_un *m_addr; public: wxUNIXaddress(); - ~wxUNIXaddress(); - - void Clear(); -// const wxSockAddress& operator =(const wxSockAddress& addr); + wxUNIXaddress(const wxUNIXaddress& other); + virtual ~wxUNIXaddress(); void Filename(const wxString& name); wxString Filename(); - void Build(struct sockaddr*& addr, size_t& len); - void Disassemble(struct sockaddr *addr, size_t len); - - inline int SockAddrLen(); - inline int GetFamily(); - inline int Type() { return wxSockAddress::UNIX; } + virtual int Type() { return wxSockAddress::UNIX; } + virtual wxSockAddress *Clone() const { return new wxUNIXaddress(*this); } }; #endif // __UNIX__ #endif // wxUSE_SOCKETS - + #endif // _WX_NETWORK_ADDRESS_H