Update SENF to compile using g++ 4.3.2 (Ubuntu 8.10)
[senf.git] / Socket / Protocols / INet / INet6Address.cci
index 95e5335..61fa0c6 100644 (file)
@@ -1,8 +1,8 @@
 // $Id$
 //
-// Copyright (C) 2007 
-// Fraunhofer Institute for Open Communication Systems (FOKUS) 
-// Competence Center NETwork research (NET), St. Augustin, GERMANY 
+// Copyright (C) 2007
+// 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
@@ -32,7 +32,7 @@
 #define prefix_ inline
 ///////////////////////////////cci.p///////////////////////////////////////
 
-prefix_ senf::INet6Address::INet6Address(NoInit_t)
+prefix_ senf::INet6Address::INet6Address(senf::NoInit_t)
 {}
 
 prefix_ senf::INet6Address::INet6Address(boost::uint16_t a0, boost::uint16_t a1,
@@ -58,6 +58,11 @@ prefix_ senf::INet6Address::INet6Address(boost::uint16_t a0, boost::uint16_t a1,
     (*this)[15] = boost::uint8_t(a7);
 }
 
+prefix_ senf::INet6Address senf::INet6Address::from_in6addr(in6_addr const & in6addr)
+{
+    return senf::INet6Address::from_data(&in6addr.s6_addr[0]);
+}
+
 prefix_ senf::INet6Address senf::INet6Address::from_inet4address(INet4Address addr4)
 {
     INet6Address addr;
@@ -81,12 +86,6 @@ prefix_ boost::uint64_t senf::INet6Address::network()
         ((boost::uint64_t((*this)[7]) & 0xff)       );
 }
 
-prefix_ bool senf::INet6Address::hasEuid64()
-    const
-{
-    return unicast() && ((*this)[0]&0xE0u) != 0u;
-}
-
 prefix_ boost::uint64_t senf::INet6Address::id()
     const
 {
@@ -113,16 +112,22 @@ prefix_ bool senf::INet6Address::groupId()
     return (*this)[8] & 1u;
 }
 
-prefix_ bool senf::INet6Address::unicast()
+prefix_ senf::INet4Address senf::INet6Address::inet4address()
     const
 {
-    return ! multicast();
+    return INet4Address::from_data(&(*this)[12]);
+}
+
+prefix_ bool senf::INet6Address::inet4Mapped()
+    const
+{
+    return CheckINet6Network<0u,0u,0u,0u,0u,0xFFFFu,96>::match(*this);
 }
 
 prefix_ bool senf::INet6Address::multicast()
     const
 {
-    return (*this)[0] == 0xFFu;
+    return (*this)[0] == 0xFFu || (inet4Mapped() && inet4address().multicast());
 }
 
 prefix_ senf::INet6Address::ScopeId senf::INet6Address::scope()
@@ -139,34 +144,34 @@ prefix_ senf::INet6Address::ScopeId senf::INet6Address::scope()
         : GlobalScope;
 }
 
-prefix_ bool senf::INet6Address::globalScope()
+prefix_ bool senf::INet6Address::unicast()
     const
 {
-    return scope() == GlobalScope;
+    return ! multicast();
 }
-prefix_ bool senf::INet6Address::linkScope()
+
+prefix_ bool senf::INet6Address::hasEuid64()
     const
 {
-    return scope() == LinkScope;
+    return unicast() && ((*this)[0]&0xE0u) != 0u;
 }
 
-prefix_ senf::INet4Address senf::INet6Address::inet4address()
+prefix_ bool senf::INet6Address::globalScope()
     const
 {
-    return INet4Address::from_data(&(*this)[12]);
+    return scope() == GlobalScope;
 }
-
-prefix_ bool senf::INet6Address::ipv4Compatible()
+prefix_ bool senf::INet6Address::linkScope()
     const
 {
-    return CheckINet6Network<0u,96>::match(*this);
+    return scope() == LinkScope;
 }
 
-prefix_ bool senf::INet6Address::ipv4Mapped()
+prefix_ bool senf::INet6Address::inet4Compatible()
     const
 {
-    return CheckINet6Network<0u,0u,0u,0u,0u,0xFFFFu,96>::match(*this);
+    return CheckINet6Network<0u,96>::match(*this);
 }
 
 prefix_ bool senf::INet6Address::globalMulticastAddr()