/* * 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 . * * Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 Peter Baumann / rasdaman GmbH. * * For more information please see * or contact Peter Baumann via . / /** * 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