// $Id$
//
// Copyright (C) 2006
-// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
-// Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
-// Stefan Bund <stefan.bund@fokus.fraunhofer.de>
+// Fraunhofer Institute for Open Communication Systems (FOKUS)
+// Competence Center NETwork research (NET), St. Augustin, GERMANY
+// Stefan Bund <g0dil@berlios.de>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
#include <exception>
#include <netinet/in.h>
#include <boost/operators.hpp>
-#include "Socket/SocketPolicy.hh"
-#include "Socket/ClientSocketHandle.hh"
-#include "Socket/CommunicationPolicy.hh"
-#include "Socket/Protocols/GenericAddressingPolicy.hh"
+#include "../../../Socket/SocketPolicy.hh"
+#include "../../../Socket/ClientSocketHandle.hh"
+#include "../../../Socket/CommunicationPolicy.hh"
+#include "../../../Socket/Protocols/GenericAddressingPolicy.hh"
+#include "../../../Utils/safe_bool.hh"
#include "INet4Address.hh"
#include "INet6Address.hh"
*/
class INet4SocketAddress
: public boost::equality_comparable<INet4SocketAddress>,
- public senf::ComparableSafeBool<INet4SocketAddress>
+ public senf::comparable_safe_bool<INet4SocketAddress>
{
public:
INet4SocketAddress();
- explicit INet4SocketAddress(std::string const & address); ///< Set address and port
+ explicit INet4SocketAddress(std::string const & addr); ///< Set address and port
/**< This constructor expects a string of the form
'host:port'. The constructor will use this value to
initialize the host and port members. Since it uses the
INet4Address::from_string constructor, this call may
block while waiting for the resolver.
- \throws SyntaxException if the 'host:port' syntax is
- not obeyed.
- \throws INet4Address::SyntaxException if the host part
- cannot be converted to an IP address. */
+ \throws AddressSyntaxException if the address syntax is
+ invalid
+ \throws UnknownHostnameException if the
+ address cannot be resolved. */
INet4SocketAddress(INet4Address const & addr, unsigned port);
///< Set address and port explicitly
INet4Address address() const; ///< Return address
unsigned port() const; ///< Return port number
- bool boolean_test() const; ///< \c true, if address is empty (i.e. 0.0.0.0:0)
+ bool boolean_test() const; ///< \c true, if address is not empty (i.e. 0.0.0.0:0)
void clear(); ///< Clear address/port to 0.0.0.0:0
/// @}
- struct SyntaxException : public std::exception
- { virtual char const * what() const throw()
- { return "Invalid IpV4 socket address syntax"; } };
-
private:
struct ::sockaddr_in addr_;
};
///@{
INet6SocketAddress(); ///< Create empty instance
- explicit INet6SocketAddress(std::string const & addr);
+ explicit INet6SocketAddress(std::string const & addr,
+ INet6Address::Resolve_t resolve = INet6Address::ResolveINet6);
///< Initialize/convert from string representation
+ /**< \throws AddressSyntaxException if the address syntax is
+ invalid
+ \throws UnknownHostnameException if the
+ address cannot be resolved.
+ \param[in] addr Address to parse
+ \param[in] resolve If this is
+ INet6Address::ResolveINet4, support IPv4
+ addresses. See INet6Address. */
INet6SocketAddress(INet6Address const & addr, unsigned port);
///< Initialize from address and port
INet6SocketAddress(INet6Address const & addr, unsigned port, std::string const & iface);
///< Initialize explicitly from given parameters
- INet6SocketAddress(std::string const & addr, std::string const & iface);
- ///< Initialize from URL representation and explit interface
///@}
///////////////////////////////////////////////////////////////////////////
///@}
- struct SyntaxException : public std::exception
- { virtual char const * what() const throw()
- { return "Invalid IpV6 socket address syntax"; } };
-
protected:
private:
- void assignAddr(std::string const & addr);
void assignIface(std::string const & iface);
struct sockaddr_in6 sockaddr_;
/** \brief Addressing policy supporting IPv4 addressing
\par Address Type:
- INet4Address
+ INet4SocketAddress
This addressing policy implements addressing using Internet V4
addresses.