30 #if BOOST_VERSION < 105800 31 #include <boost/algorithm/string.hpp> 32 #include <boost/lexical_cast.hpp> 34 #endif // BOOST_VERSION < 105800 44 char buffer[IFNAMSIZ];
45 auto scopeName = if_indextoname(scopeId, buffer);
46 if (scopeName !=
nullptr) {
47 return std::string(scopeName);
52 #if BOOST_VERSION < 105800 56 auto id = if_nametoindex(scope.c_str());
63 return boost::lexical_cast<
unsigned int>(scope);
65 catch (
const boost::bad_lexical_cast&) {
72 boost::asio::ip::address addr;
79 std::vector<std::string> parseResult;
80 boost::algorithm::split(parseResult, address, boost::is_any_of(
"%"));
81 auto addr = boost::asio::ip::address::from_string(parseResult[0], ec);
83 switch (parseResult.size()) {
89 if (!ec && addr.is_v6() && addr.to_v6().is_link_local()) {
90 return {addr, parseResult[1]};
94 ec = boost::asio::error::invalid_argument;
98 #endif // BOOST_VERSION < 105800 100 boost::asio::ip::address
104 #if BOOST_VERSION < 105800 106 if (ec || parsedAddress.addr.is_v4()) {
107 return parsedAddress.addr;
109 auto addr = parsedAddress.addr.to_v6();
113 return boost::asio::ip::address::from_string(address, ec);
114 #endif // BOOST_VERSION < 105800 117 boost::asio::ip::address
120 boost::system::error_code ec;
123 BOOST_THROW_EXCEPTION(boost::system::system_error(ec));
128 boost::asio::ip::address_v6
132 if (ec || addr.is_v4()) {
133 ec = boost::asio::error::invalid_argument;
139 boost::asio::ip::address_v6
142 boost::system::error_code ec;
145 BOOST_THROW_EXCEPTION(boost::system::system_error(ec));
constexpr nullopt_t nullopt
Copyright (c) 2013-2017 Regents of the University of California.
static unsigned int scopeIdFromString(const std::string &scope)
static ParsedAddress parseAddressFromString(const std::string &address, boost::system::error_code &ec)
boost::asio::ip::address addressFromString(const std::string &address, boost::system::error_code &ec)
parse and convert the input string into an IP address
#define NDN_CXX_FALLTHROUGH
boost::asio::ip::address_v6 addressV6FromString(const std::string &address, boost::system::error_code &ec)
parse and convert the input string into an IPv6 address
optional< std::string > scopeNameFromId(unsigned int scopeId)
Convert scope ID of IPv6 address into interface name.