diff --git a/NetworkServerLookup.cpp b/NetworkServerLookup.cpp index be872e715..3e0ec34a3 100644 --- a/NetworkServerLookup.cpp +++ b/NetworkServerLookup.cpp @@ -6,11 +6,13 @@ #include std::tuple -network_server_lookup (QString const& query +network_server_lookup (QString query , quint16 default_service_port , QHostAddress default_host_address , QAbstractSocket::NetworkLayerProtocol required_protocol) { + query = query.trimmed (); + QHostAddress host_address {default_host_address}; quint16 service_port {default_service_port}; @@ -20,63 +22,64 @@ network_server_lookup (QString const& query int port_colon_index {-1}; if ('[' == query[0]) - { - // assume IPv6 combined address/port syntax [
]: - auto close_bracket_index = query.lastIndexOf (']'); - host_name = query.mid (1, close_bracket_index - 1); - port_colon_index = query.indexOf (':', close_bracket_index); - } + { + // assume IPv6 combined address/port syntax [
]: + auto close_bracket_index = query.lastIndexOf (']'); + host_name = query.mid (1, close_bracket_index - 1); + port_colon_index = query.indexOf (':', close_bracket_index); + } else - { - port_colon_index = query.lastIndexOf (':'); - host_name = query.left (port_colon_index); - } + { + port_colon_index = query.lastIndexOf (':'); + host_name = query.left (port_colon_index); + } + host_name = host_name.trimmed (); if (port_colon_index >= 0) - { - bool ok; - service_port = query.mid (port_colon_index + 1).toUShort (&ok); - if (!ok) - { - throw std::runtime_error {"network server lookup error: invalid port"}; - } - } + { + bool ok; + service_port = query.mid (port_colon_index + 1).trimmed ().toUShort (&ok); + if (!ok) + { + throw std::runtime_error {"network server lookup error: invalid port"}; + } + } } if (!host_name.isEmpty ()) { auto host_info = QHostInfo::fromName (host_name); if (host_info.addresses ().isEmpty ()) - { - throw std::runtime_error {"network server lookup error: host name lookup failed"}; - } + { + throw std::runtime_error {"network server lookup error: host name lookup failed"}; + } bool found {false}; for (int i {0}; i < host_info.addresses ().size () && !found; ++i) - { - host_address = host_info.addresses ().at (i); - switch (required_protocol) - { - case QAbstractSocket::IPv4Protocol: - case QAbstractSocket::IPv6Protocol: - if (required_protocol != host_address.protocol ()) - { - break; - } - // drop through + { + host_address = host_info.addresses ().at (i); + switch (required_protocol) + { + case QAbstractSocket::IPv4Protocol: + case QAbstractSocket::IPv6Protocol: + if (required_protocol != host_address.protocol ()) + { + break; + } + // drop through - case QAbstractSocket::AnyIPProtocol: - found = true; - break; + case QAbstractSocket::AnyIPProtocol: + found = true; + break; - default: - throw std::runtime_error {"network server lookup error: invalid required protocol"}; - } - } + default: + throw std::runtime_error {"network server lookup error: invalid required protocol"}; + } + } if (!found) - { - throw std::runtime_error {"network server lookup error: no suitable host address found"}; - } + { + throw std::runtime_error {"network server lookup error: no suitable host address found"}; + } } return std::make_tuple (host_address, service_port); diff --git a/NetworkServerLookup.hpp b/NetworkServerLookup.hpp index 1f21ad591..7c7c9d119 100644 --- a/NetworkServerLookup.hpp +++ b/NetworkServerLookup.hpp @@ -30,7 +30,7 @@ class QString; // returned in the first member of the result tuple. // std::tuple -network_server_lookup (QString const& query +network_server_lookup (QString query , quint16 default_service_port , QHostAddress default_host_address = QHostAddress::LocalHost , QAbstractSocket::NetworkLayerProtocol protocol = QAbstractSocket::AnyIPProtocol);