00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00039 #ifndef BLOCXX_SocketADDRESS_HPP_INCLUDE_GUARD_
00040 #define BLOCXX_SocketADDRESS_HPP_INCLUDE_GUARD_
00041 #include "blocxx/BLOCXX_config.h"
00042 #include "blocxx/Array.hpp"
00043 #include "blocxx/Types.hpp"
00044 #include "blocxx/NetworkTypes.hpp"
00045 #include "blocxx/String.hpp"
00046 #include "blocxx/Exception.hpp"
00047
00048 namespace BLOCXX_NAMESPACE
00049 {
00050
00051 BLOCXX_DECLARE_APIEXCEPTION(UnknownHost, BLOCXX_COMMON_API);
00052 BLOCXX_DECLARE_APIEXCEPTION(SocketAddress, BLOCXX_COMMON_API);
00053
00054
00055 class BLOCXX_COMMON_API SocketAddress
00056 {
00057 public:
00058 static const char* const ALL_LOCAL_ADDRESSES;
00059
00060 enum AddressType
00061 {
00062 UNSET,
00063 INET,
00064 UDS
00065 };
00066 AddressType getType() const { return m_type; }
00076 static SocketAddress getByName(const String& host, unsigned short port = 0);
00092 static SocketAddress getAnyLocalHost(UInt16 port = 0);
00097 static SocketAddress allocEmptyAddress(AddressType type);
00102 UInt16 getPort() const;
00103 ~SocketAddress() {}
00109 const String getName() const;
00115 const String getAddress() const;
00116 const SocketAddress_t* getNativeForm() const;
00117 size_t getNativeFormSize() const;
00118
00123 const InetSocketAddress_t* getInetAddress() const;
00124
00125 #if !defined(BLOCXX_WIN32)
00126
00127
00128 static SocketAddress getUDS(const String& filename);
00129
00134 const UnixSocketAddress_t* getUnixAddress() const;
00135
00136 void assignFromNativeForm(const UnixSocketAddress_t* address, size_t len);
00137 #endif
00138
00144 const String toString() const;
00145 void assignFromNativeForm(const InetSocketAddress_t* address, size_t len);
00146
00147 SocketAddress();
00148 private:
00149 SocketAddress(const InetSocketAddress_t& nativeForm);
00150
00151 #if !defined(BLOCXX_WIN32)
00152 SocketAddress(const UnixSocketAddress_t& nativeForm);
00153 #endif
00154
00155 String m_name;
00156 String m_address;
00157 size_t m_nativeSize;
00158
00159 InetSocketAddress_t m_inetNativeAddress;
00160
00161 #if !defined(BLOCXX_WIN32)
00162 UnixSocketAddress_t m_UDSNativeAddress;
00163 #endif
00164
00165 AddressType m_type;
00166 static SocketAddress getFromNativeForm(const InetAddress_t& nativeForm,
00167 UInt16 nativePort, const String& hostname );
00168 static SocketAddress getFromNativeForm(
00169 const InetSocketAddress_t& nativeForm);
00170
00171 #if !defined(BLOCXX_WIN32)
00172 static SocketAddress getFromNativeForm(
00173 const UnixSocketAddress_t& nativeForm);
00174 #endif
00175
00176 #ifdef BLOCXX_WIN32
00177 const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt);
00178 #endif
00179
00180 };
00181
00182 }
00183
00184 #endif