X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2df7be7f2cca699a02ee0c9ce69de9bfe6b0922f..613de0e89efab1cbf8463ea06e0cf0b2914fbce9:/include/wx/sckaddr.h diff --git a/include/wx/sckaddr.h b/include/wx/sckaddr.h index b182548948..8dd3a80a5e 100644 --- a/include/wx/sckaddr.h +++ b/include/wx/sckaddr.h @@ -6,137 +6,212 @@ // Created: 26/04/1997 // RCS-ID: $Id$ // Copyright: (c) 1997, 1998 Guilhem Lavaux -// Licence: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifndef _WX_NETWORK_ADDRESS_H -#define _WX_NETWORK_ADDRESS_H - -#ifdef __GNUG__ -#pragma interface -#endif +#ifndef _WX_SCKADDR_H_ +#define _WX_SCKADDR_H_ #include "wx/defs.h" #if wxUSE_SOCKETS -#if defined(__WINDOWS__) && defined(WXSOCK_INTERNAL) -#include +#include "wx/string.h" -#elif defined(__UNIX__) && defined(WXSOCK_INTERNAL) +struct GAddress; -#include -#include -#include -#endif +// Any socket address kind +class WXDLLIMPEXP_NET wxSockAddress : public wxObject +{ +public: + enum + { + IPV4 = 1, + IPV6 = 2, + UNIX = 3 + } Addr; -#include "wx/string.h" + wxSockAddress(); + wxSockAddress(const wxSockAddress& other); + virtual ~wxSockAddress(); -class WXDLLEXPORT wxSockAddress : public wxObject { - DECLARE_ABSTRACT_CLASS(wxSockAddress) -public: - typedef enum { IPV4=1, IPV6=2, UNIX=3 } Addr; + wxSockAddress& operator=(const wxSockAddress& other); - wxSockAddress() {}; - virtual ~wxSockAddress() {}; + virtual void Clear(); + virtual int Type() = 0; - virtual void Clear() = 0; + // 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; - virtual void Build(struct sockaddr*& addr, size_t& len) = 0; - virtual void Disassemble(struct sockaddr *addr, size_t len) = 0; - virtual int SockAddrLen() = 0; - virtual int GetFamily() = 0; - virtual int Type() = 0; -}; + // implementation only, don't use + GAddress *GetAddress() const { return m_address; } + void SetAddress(GAddress *address); + +protected: + GAddress *m_address; -class WXDLLEXPORT wxIPV4address : public wxSockAddress { - DECLARE_DYNAMIC_CLASS(wxIPV4address) private: - struct sockaddr_in *m_addr; + void Init(); + DECLARE_ABSTRACT_CLASS(wxSockAddress) +}; + +// An IP address (either IPv4 or IPv6) +class WXDLLIMPEXP_NET wxIPaddress : public wxSockAddress +{ public: - wxIPV4address(); - virtual ~wxIPV4address(); + wxIPaddress(); + wxIPaddress(const wxIPaddress& other); + virtual ~wxIPaddress(); + + virtual bool Hostname(const wxString& name) = 0; + virtual bool Service(const wxString& name) = 0; + virtual bool Service(unsigned short port) = 0; - virtual void Clear(); -// const wxSockAddress& operator =(const wxSockAddress& addr); + virtual bool LocalHost() = 0; + virtual bool IsLocalHost() const = 0; - 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(); + virtual bool AnyAddress() = 0; + virtual bool BroadcastAddress() = 0; - wxString Hostname(); - unsigned short Service(); + virtual wxString IPAddress() const = 0; - void Build(struct sockaddr*& addr, size_t& len); - void Disassemble(struct sockaddr *addr, size_t len); + virtual wxString Hostname() const = 0; + virtual unsigned short Service() const = 0; - inline int SockAddrLen(); - inline int GetFamily(); - inline int Type() { return wxSockAddress::IPV4; } + DECLARE_ABSTRACT_CLASS(wxIPaddress) }; -#ifdef ENABLE_IPV6 -class WXDLLEXPORT wxIPV6address : public wxSockAddress { - DECLARE_DYNAMIC_CLASS(wxIPV6address) -private: - struct sockaddr_in6 *m_addr; +// An IPv4 address +class WXDLLIMPEXP_NET wxIPV4address : public wxIPaddress +{ public: - wxIPV6address(); - ~wxIPV6address(); + wxIPV4address(); + wxIPV4address(const wxIPV4address& other); + virtual ~wxIPV4address(); - void Clear(); -// const wxSockAddress& operator =(const wxSockAddress& addr); + bool operator==(const wxIPV4address& addr) const; - bool Hostname(const wxString& name); - bool Hostname(unsigned char addr[16]); - bool Service(const wxString& name); - bool Service(unsigned short port); - bool LocalHost(); + // implement wxSockAddress pure virtuals: + virtual int Type() { return wxSockAddress::IPV4; } + virtual wxSockAddress *Clone() const; - wxString Hostname() const; - unsigned short Service() const; - void Build(struct sockaddr*& addr, size_t& len); - void Disassemble(struct sockaddr *addr, size_t len); + // implement wxIPaddress pure virtuals: + + // handles the usual dotted quad format too + virtual bool Hostname(const wxString& name); + virtual bool Service(const wxString& name); + virtual bool Service(unsigned short port); + + // localhost (127.0.0.1) + virtual bool LocalHost(); + virtual bool IsLocalHost() const; + + // any (0.0.0.0) + virtual bool AnyAddress(); + // all (255.255.255.255) + virtual bool BroadcastAddress(); + + // a.b.c.d + virtual wxString IPAddress() const; + + virtual wxString Hostname() const; + virtual unsigned short Service() const; - inline int SockAddrLen(); - inline int GetFamily(); - inline int Type() { return wxSockAddress::IPV6; } -}; -#endif -#ifdef __UNIX__ -#include + // IPv4-specific methods: + + bool Hostname(unsigned long addr); + wxString OrigHostname() { return m_origHostname; } -class WXDLLEXPORT wxUNIXaddress : public wxSockAddress { - DECLARE_DYNAMIC_CLASS(wxUNIXaddress) private: - struct sockaddr_un *m_addr; + wxString m_origHostname; + + DECLARE_DYNAMIC_CLASS(wxIPV4address) +}; + + +#if wxUSE_IPV6 + +// An IPv6 address +class WXDLLIMPEXP_NET wxIPV6address : public wxIPaddress +{ public: - wxUNIXaddress(); - ~wxUNIXaddress(); + wxIPV6address(); + wxIPV6address(const wxIPV6address& other); + virtual ~wxIPV6address(); - void Clear(); -// const wxSockAddress& operator =(const wxSockAddress& addr); + // implement wxSockAddress pure virtuals: - void Filename(const wxString& name); - wxString Filename(); + virtual int Type() { return wxSockAddress::IPV6; } + virtual wxSockAddress *Clone() const { return new wxIPV6address(*this); } - 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; } + // implement wxIPaddress pure virtuals: + + virtual bool Hostname(const wxString& name); + virtual bool Service(const wxString& name); + virtual bool Service(unsigned short port); + + // localhost (0000:0000:0000:0000:0000:0000:0000:0001 (::1)) + virtual bool LocalHost(); + virtual bool IsLocalHost() const; + + // any (0000:0000:0000:0000:0000:0000:0000:0000 (::)) + virtual bool AnyAddress(); + // all (?) + virtual bool BroadcastAddress(); + + // 3ffe:ffff:0100:f101:0210:a4ff:fee3:9566 + virtual wxString IPAddress() const; + + virtual wxString Hostname() const; + virtual unsigned short Service() const; + + + // IPv6-specific methods: + + bool Hostname(unsigned char addr[16]); + +private: + wxString m_origHostname; + + DECLARE_DYNAMIC_CLASS(wxIPV6address) }; -#endif - // __UNIX__ +#endif // wxUSE_IPV6 + +#if defined(__UNIX__) && !defined(__WINE__) + +#include +#ifndef __VMS__ + #include #endif - // wxUSE_SOCKETS - -#endif - // _WX_NETWORK_ADDRESS_H + +// A Unix domain socket address +class WXDLLIMPEXP_NET wxUNIXaddress : public wxSockAddress +{ +public: + wxUNIXaddress(); + wxUNIXaddress(const wxUNIXaddress& other); + virtual ~wxUNIXaddress(); + + void Filename(const wxString& name); + wxString Filename(); + + virtual int Type() { return wxSockAddress::UNIX; } + virtual wxSockAddress *Clone() const { return new wxUNIXaddress(*this); } + +private: + struct sockaddr_un *m_addr; + + DECLARE_DYNAMIC_CLASS(wxUNIXaddress) +}; + +#endif // __UNIX__ + +#endif // wxUSE_SOCKETS + +#endif // _WX_SCKADDR_H_