X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FProtocols%2FINet%2FINet6Address.cc;h=8ece248e16289555815254a1fc049bbb37f4a1a3;hb=81ffa1c459b96dd44472bcef37e1e373934ee138;hp=7dfa6428705723ee5a63e9f5f791402c35f3c0ab;hpb=ced8f321adf904c31149162de5f6258c971c7466;p=senf.git diff --git a/Socket/Protocols/INet/INet6Address.cc b/Socket/Protocols/INet/INet6Address.cc index 7dfa642..8ece248 100644 --- a/Socket/Protocols/INet/INet6Address.cc +++ b/Socket/Protocols/INet/INet6Address.cc @@ -32,6 +32,7 @@ #include #include #include +#include //#include "INet6Address.mpp" #define prefix_ @@ -102,6 +103,25 @@ senf::INet6Address const senf::INet6Address::Loopback (0u,0u,0u,0u,0u,0u,0u,1u senf::INet6Address const senf::INet6Address::AllNodes (0xFF02u,0u,0u,0u,0u,0u,0u,1u); senf::INet6Address const senf::INet6Address::AllRouters (0xFF02u,0u,0u,0u,0u,0u,0u,2u); +/////////////////////////////////////////////////////////////////////////// +// senf::INet6Network + +prefix_ senf::INet6Network::INet6Network(std::string s) +{ + using boost::lambda::_1; + using boost::lambda::_2; + std::string::size_type i (s.find('/')); + if (i == std::string::npos) + throw INet6Address::SyntaxException(); + try { + prefix_len_ = boost::lexical_cast(std::string(s,i+1)); + } catch (boost::bad_lexical_cast const &) { + throw INet6Address::SyntaxException(); + } + address_ = INet6Address::from_string(std::string(s, 0, i)); + detail::apply_mask(prefix_len_, address_.begin(), address_.end(), _1 &= _2); +} + ///////////////////////////////cc.e//////////////////////////////////////// #undef prefix_ //#include "INet6Address.mpp"