X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FProtocols%2FINet%2FINet6Address.cci;h=b2d0e2a6cc689c1541e42c6befe9119c3906244e;hb=10985d71f77b627bc4da543d7114feb7c4529329;hp=96e87f5e1d8c225f0fada4008958a79115b31204;hpb=d99f412f95e9c56b4f7e6fee860cd80234c89107;p=senf.git diff --git a/Socket/Protocols/INet/INet6Address.cci b/Socket/Protocols/INet/INet6Address.cci index 96e87f5..b2d0e2a 100644 --- a/Socket/Protocols/INet/INet6Address.cci +++ b/Socket/Protocols/INet/INet6Address.cci @@ -58,12 +58,11 @@ prefix_ senf::INet6Address::INet6Address(boost::uint16_t a0, boost::uint16_t a1, (*this)[15] = boost::uint8_t(a7); } -prefix_ senf::INet6Address::INet6Address(in6_addr in6addr){ - senf::INet6Address::from_data(&in6addr.s6_addr[0]); +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; @@ -87,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 { @@ -119,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() @@ -145,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::inet4Compatible() + +prefix_ bool senf::INet6Address::linkScope() const { - return CheckINet6Network<0u,96>::match(*this); + return scope() == LinkScope; } -prefix_ bool senf::INet6Address::inet4Mapped() +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()