diff options
author | Tobias Markmann <tm@ayena.de> | 2016-09-30 17:59:31 (GMT) |
---|---|---|
committer | Tobias Markmann <tm@ayena.de> | 2016-09-30 17:59:31 (GMT) |
commit | 1e8670bd64efcc51cb435880a4e11337c56b1a0f (patch) | |
tree | 6dcca792c7d34833dfe3d230e0ce0e7847aec4e6 /Swiften/Network | |
parent | cb41a41239bd75db8a3ed6d5b3013104e393d0ad (diff) | |
download | swift-1e8670bd64efcc51cb435880a4e11337c56b1a0f.zip swift-1e8670bd64efcc51cb435880a4e11337c56b1a0f.tar.bz2 |
Add missing error check in HostAddress::toString
In the process converted try/catch use to Boost's error code
for more explicit error checking and added log output.
Test-Information:
Swift builds with test=all on macOS 10.12 and all tests pass.
Change-Id: I6e465354dbb38c7178b0406b9a544ebd3be62ddd
Diffstat (limited to 'Swiften/Network')
-rw-r--r-- | Swiften/Network/HostAddress.cpp | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/Swiften/Network/HostAddress.cpp b/Swiften/Network/HostAddress.cpp index 64a4ff6..7738079 100644 --- a/Swiften/Network/HostAddress.cpp +++ b/Swiften/Network/HostAddress.cpp @@ -1,72 +1,80 @@ /* * Copyright (c) 2010-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #include <Swiften/Network/HostAddress.h> #include <cassert> -#include <stdexcept> #include <string> #include <boost/array.hpp> #include <boost/lexical_cast.hpp> #include <boost/numeric/conversion/cast.hpp> #include <Swiften/Base/foreach.h> +#include <Swiften/Base/Log.h> static boost::asio::ip::address localhost4 = boost::asio::ip::address(boost::asio::ip::address_v4::loopback()); static boost::asio::ip::address localhost6 = boost::asio::ip::address(boost::asio::ip::address_v6::loopback()); namespace Swift { HostAddress::HostAddress() { } HostAddress::HostAddress(const std::string& address) { - try { - address_ = boost::asio::ip::address::from_string(address); - } - catch (const std::exception&) { + boost::system::error_code errorCode; + address_ = boost::asio::ip::address::from_string(address, errorCode); + if (errorCode) { + SWIFT_LOG(warning) << "error: " << errorCode.message() << std::endl; } } HostAddress::HostAddress(const unsigned char* address, size_t length) { assert(length == 4 || length == 16); if (length == 4) { boost::asio::ip::address_v4::bytes_type data; for (size_t i = 0; i < length; ++i) { data[i] = address[i]; } address_ = boost::asio::ip::address(boost::asio::ip::address_v4(data)); } else { boost::asio::ip::address_v6::bytes_type data; for (size_t i = 0; i < length; ++i) { data[i] = address[i]; } address_ = boost::asio::ip::address(boost::asio::ip::address_v6(data)); } } HostAddress::HostAddress(const boost::asio::ip::address& address) : address_(address) { } std::string HostAddress::toString() const { - return address_.to_string(); + std::string addressString; + boost::system::error_code errorCode; + + addressString = address_.to_string(errorCode); + if (errorCode) { + SWIFT_LOG(debug) << "error: " << errorCode.message() << std::endl; + } + + return addressString; } bool HostAddress::isValid() const { return !(address_.is_v4() && address_.to_v4().to_ulong() == 0); } boost::asio::ip::address HostAddress::getRawAddress() const { return address_; } bool HostAddress::isLocalhost() const { return address_ == localhost4 || address_ == localhost6; } } |