INet4SocketAddress: unsigned/size_type bugfix for 64bit
[senf.git] / Socket / Protocols / INet / INet6Address.hh
index 16d2e44..94e240d 100644 (file)
@@ -23,8 +23,8 @@
 /** \file
     \brief INet6Address public header */
 
-#ifndef HH_INet6Address_
-#define HH_INet6Address_ 1
+#ifndef HH_SENF_Socket_Protocols_INet_INet6Address_
+#define HH_SENF_Socket_Protocols_INet_INet6Address_ 1
 
 // Custom includes
 #include <iostream>
@@ -162,12 +162,12 @@ namespace senf {
         ///@{
 
         explicit INet6Address(senf::NoInit_t); ///< Construct uninitialized (!) address
-        INet6Address(boost::uint16_t a0=0u, boost::uint16_t a1=0u, boost::uint16_t a2=0u,
-                     boost::uint16_t a3=0u, boost::uint16_t a4=0u, boost::uint16_t a5=0u,
-                     boost::uint16_t a6=0u, boost::uint16_t a7=0u);
+        explicit INet6Address(boost::uint16_t a0=0u, boost::uint16_t a1=0u, boost::uint16_t a2=0u,
+                              boost::uint16_t a3=0u, boost::uint16_t a4=0u, boost::uint16_t a5=0u,
+                              boost::uint16_t a6=0u, boost::uint16_t a7=0u);
                                         ///< Construct an address constant
         
-        INet6Address(in6_addr in6addr); ///< Construct from std c struct
+        static INet6Address from_in6addr(in6_addr const & in6addr); ///< Construct from std C struct
 
         static INet6Address from_string(std::string const & s, Resolve_t resolve = ResolveINet6);
                                         ///< Convert string to address
@@ -203,6 +203,12 @@ namespace senf {
                                              \par 
                                              INet4 compatible INet6 addresses are not directly
                                              supported, they are deprecated in the RFC. */
+        std::string toString() const;
+                                        ///< get the string representation of this INet6Address
+        in6_addr  toin6_addr() const;
+                                        ///< get the linux in6_addr struct (convinience only) 
+        
+        
         ///@}
         ///////////////////////////////////////////////////////////////////////////
         ///\name Accessors
@@ -216,6 +222,12 @@ namespace senf {
 
         bool unicast() const;           ///< \c true, if address is unicast
         bool multicast() const;         ///< \c true, if address is multicast
+                                        /**< To support a linux specific extension, INet4 multicast
+                                             addressed mapped to INet6 are also interpreted as
+                                             multicast addresses. This is NOT part of the standard,
+                                             however the standard officially only allows unicast v4
+                                             addresses to be mapped to v6 so this does not collide
+                                             with any standard conforming use. */
 
         ScopeId scope() const;          ///< Get address's scope
                                         /**< The scope of an address is one of the \ref ScopeId