X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FINetAddressing.cc;h=2fbbd7e70297e18a32f60ad3a204e7f4ceb3078b;hb=9a988902090d28007578e93bffd809f6bd913155;hp=b1efabc4325b3b4e7c97240e3c3499926fba22e5;hpb=cf4ebe486e7e0543ac8568d3043f43d95f197a96;p=senf.git diff --git a/Socket/INetAddressing.cc b/Socket/INetAddressing.cc index b1efabc..2fbbd7e 100644 --- a/Socket/INetAddressing.cc +++ b/Socket/INetAddressing.cc @@ -1,6 +1,6 @@ // $Id$ // -// Copyright (C) 2006 +// Copyright (C) 2006 // Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) // Kompetenzzentrum fuer Satelitenkommunikation (SatCom) // Stefan Bund @@ -79,7 +79,7 @@ prefix_ void senf::INet4Address::assignString(std::string address) try { // Replace lexical_cast with strtoul ? addr_.sin_port = htons(boost::lexical_cast< ::u_int16_t >(std::string(address,i+1))); - } + } catch (boost::bad_lexical_cast const &) { throw InvalidINetAddressException(); } @@ -91,13 +91,13 @@ prefix_ void senf::INet4Address::assignString(std::string address) prefix_ senf::INet6Address::INet6Address(std::string const & addr) { if (inet_pton(AF_INET6,addr.c_str(),&addr_) <= 0) - throw InvalidINetAddressException(); + throw InvalidINetAddressException(); } prefix_ senf::INet6Address::INet6Address(char const * addr) { if (inet_pton(AF_INET6,addr,&addr_) <= 0) - throw InvalidINetAddressException(); + throw InvalidINetAddressException(); } prefix_ void senf::INet6Address::clear() @@ -132,8 +132,8 @@ prefix_ bool senf::INet6SocketAddress::operator==(INet6SocketAddress const & oth const { return ::memcmp(&sockaddr_.sin6_addr, &other.sockaddr_.sin6_addr, sizeof(sockaddr_.sin6_addr))==0 && - sockaddr_.sin6_port == other.sockaddr_.sin6_port && - sockaddr_.sin6_scope_id == other.sockaddr_.sin6_scope_id; + sockaddr_.sin6_port == other.sockaddr_.sin6_port && + sockaddr_.sin6_scope_id == other.sockaddr_.sin6_scope_id; } prefix_ bool senf::INet6SocketAddress::operator!=(INet6SocketAddress const & other) @@ -148,21 +148,13 @@ prefix_ void senf::INet6SocketAddress::clear() sockaddr_.sin6_family = AF_INET6; } -prefix_ void senf::INet6SocketAddress::address(std::string const & addr) -{ - if (addr[0]=='[') - assignAddr(addr); - else - host(addr); -} - prefix_ std::string senf::INet6SocketAddress::address() const { std::stringstream ss; ss << '[' << host(); if (sockaddr_.sin6_scope_id != 0) - ss << '@' << iface() + ss << '@' << iface() << "]:" << port(); return ss.str(); } @@ -171,7 +163,7 @@ prefix_ std::string senf::INet6SocketAddress::iface() const { if (sockaddr_.sin6_scope_id == 0) - return ""; + return ""; char buffer[IFNAMSIZ]; BOOST_ASSERT( if_indextoname(sockaddr_.sin6_scope_id,buffer) ); return std::string(buffer); @@ -184,47 +176,47 @@ prefix_ void senf::INet6SocketAddress::assignAddr(std::string const & addr) typedef boost::tokenizer tokenizer; // we don't add ':' to the list of separators since that would give as the IPv6 address // as a list of tokens. We just strip the : from the port number manually - separator sep ("", "@[]"); + separator sep ("", "@[]"); tokenizer tokens (addr, sep); tokenizer::iterator token (tokens.begin()); - if (token == tokens.end() - || *token != "[" - || ++token == tokens.end() - || inet_pton(AF_INET6, std::string(boost::begin(*token),boost::end(*token)).c_str(), - &sockaddr_.sin6_addr) <= 0 - || ++token == tokens.end()) - throw InvalidINetAddressException(); + if (token == tokens.end() + || *token != "[" + || ++token == tokens.end() + || inet_pton(AF_INET6, std::string(boost::begin(*token),boost::end(*token)).c_str(), + &sockaddr_.sin6_addr) <= 0 + || ++token == tokens.end()) + throw InvalidINetAddressException(); if (*token == "@") { - if (++token == tokens.end()) - throw InvalidINetAddressException(); - assignIface(std::string(boost::begin(*token),boost::end(*token))); - if (++token == tokens.end() - || *token != "]") - throw InvalidINetAddressException(); + if (++token == tokens.end()) + throw InvalidINetAddressException(); + assignIface(std::string(boost::begin(*token),boost::end(*token))); + if (++token == tokens.end() + || *token != "]") + throw InvalidINetAddressException(); } else if (*token != "]") - throw InvalidINetAddressException(); + throw InvalidINetAddressException(); if (++token == tokens.end() - || *boost::begin(*token) != ':') - throw InvalidINetAddressException(); + || *boost::begin(*token) != ':') + throw InvalidINetAddressException(); try { - sockaddr_.sin6_port = htons( - boost::lexical_cast(std::string(boost::next(boost::begin(*token)), - boost::end(*token)))); + sockaddr_.sin6_port = htons( + boost::lexical_cast(std::string(boost::next(boost::begin(*token)), + boost::end(*token)))); } catch(boost::bad_lexical_cast const &) { - throw InvalidINetAddressException(); + throw InvalidINetAddressException(); } if (++token != tokens.end()) - throw InvalidINetAddressException(); + throw InvalidINetAddressException(); } prefix_ void senf::INet6SocketAddress::assignIface(std::string const & iface) { if (iface.empty()) - sockaddr_.sin6_scope_id = 0; + sockaddr_.sin6_scope_id = 0; else { - sockaddr_.sin6_scope_id = if_nametoindex(iface.c_str()); - if (sockaddr_.sin6_scope_id == 0) - throw InvalidINetAddressException(); + sockaddr_.sin6_scope_id = if_nametoindex(iface.c_str()); + if (sockaddr_.sin6_scope_id == 0) + throw InvalidINetAddressException(); } } @@ -235,5 +227,8 @@ prefix_ void senf::INet6SocketAddress::assignIface(std::string const & iface) // Local Variables: // mode: c++ +// fill-column: 100 // c-file-style: "senf" +// indent-tabs-mode: nil +// ispell-local-dictionary: "american" // End: