diff options
Diffstat (limited to 'network/akgnet_inetaddr.hh')
-rw-r--r-- | network/akgnet_inetaddr.hh | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/network/akgnet_inetaddr.hh b/network/akgnet_inetaddr.hh new file mode 100644 index 0000000..ad9c5c3 --- /dev/null +++ b/network/akgnet_inetaddr.hh @@ -0,0 +1,148 @@ +/* +* This file is part of rasdaman community. +* +* Rasdaman community is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* Rasdaman community is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with rasdaman community. If not, see <http://www.gnu.org/licenses/>. +* +* Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 Peter Baumann / +rasdaman GmbH. +* +* For more information please see <http://www.rasdaman.org> +* or contact Peter Baumann via <baumann@rasdaman.com>. +/ +/** + * INCLUDE: akgnet_inetaddr.hh + * + * MODULE: akg network + * CLASS: HostAddress, SocketAddress + * + * COMMENTS: + * Namespace akg + * +*/ +#ifndef AKGNET_INETADDR_HH +#define AKGNET_INETADDR_HH + +#include "akgnet_common.hh" + + +namespace akg + { + +/** This class represents the internet address of a computer and envelops + the OS data structure 'in_addr' + Important: new is supposed to throw +*/ + + +class HostAddress + { + public: + static const uint32_t addrLocalhost = INADDR_LOOPBACK; + static const uint32_t addrBroadcast = INADDR_BROADCAST; + static const uint32_t addrAny = INADDR_ANY; + static const uint32_t addrNone = INADDR_NONE; + + /// Default constructor, creating an 'invalid' object + HostAddress() throw(); + + /// Copy constructor + HostAddress(const HostAddress&); + + /// Constructor taking a 32-bit internet address + HostAddress(uint32_t); + + /** Constructor taking a string representation of the address + It can be the the name or the internet address + Assert: theHostName != 0 + */ + HostAddress(const char* theHostName); + + /// Destructor + ~HostAddress() throw(); + + /// Returns true if the object was initialized correctly + bool isValid() const throw(); + + /// Returns the full host name, meaning hostname.domainname + const char* getFullHostName() const throw(); + + /// Returns the short form of the host name + const char* getShortHostName() const throw(); + + /// Returns the IP-Address as a 32-bit value + uint32_t getAddress() const throw(); + + /// Returns the string representation of the IP-Address + const char* getStringAddress() const throw(); + + private: + /// Initializes the object with default values. Used by the constructors + void initDefault() throw(); + + /// Initializes the object from a OS 'hostent' object. Used by the constructors + bool init(hostent *); + + char *fullHostName; + char *shortHostName; + char *strAddress; + in_addr address; + + ///unimplemented + HostAddress operator=(const HostAddress&); + + }; + + +/** This class represents the IP address of a OS socket and envelops + the OS data structure 'sockaddr_in' +*/ +class SocketAddress + { + public: + /// Default constructor + SocketAddress() throw(); + + /// Constructor taking a 'sockaddr_in' + SocketAddress(sockaddr_in&) throw(); + + /// Initialization from a 'sockaddr_in' + void init(sockaddr_in&) throw(); + + /// Returns true if the object is initialized + bool isValid() const throw(); + + /// Returns the HostAddress of this socket + HostAddress getHostAddress() const throw(); + + /// Returns the IP Address + uint32_t getAddress() const throw(); + int getPort() const throw(); + private: + bool valid; + void clear() throw(); + + private: + sockaddr_in address; + /* + sa_family_t sin_family + struct inaddr + { uint32_t s_addr; + } + sin_addr + ushort sin_port + */ + }; + +} // namespace +#endif |