summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swiften/Base')
-rw-r--r--Swiften/Base/URL.cpp12
-rw-r--r--Swiften/Base/URL.h10
-rw-r--r--Swiften/Base/UnitTest/URLTest.cpp26
3 files changed, 24 insertions, 24 deletions
diff --git a/Swiften/Base/URL.cpp b/Swiften/Base/URL.cpp
index 3bc97ba..5c0f0d7 100644
--- a/Swiften/Base/URL.cpp
+++ b/Swiften/Base/URL.cpp
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2010-2016 Isode Limited.
+ * Copyright (c) 2010-2018 Isode Limited.
* All rights reserved.
* See the COPYING file for more information.
*/
#include <Swiften/Base/URL.h>
@@ -9,11 +9,11 @@
#include <algorithm>
#include <iostream>
namespace Swift {
-int URL::getPortOrDefaultPort(const URL& url) {
+unsigned short URL::getPortOrDefaultPort(const URL& url) {
if (url.getPort()) {
return *url.getPort();
}
else if (url.getScheme() == "http") {
return 80;
@@ -60,22 +60,22 @@ URL URL::fromString(const std::string& urlString) {
userInfo = "";
hostAndPort = authority;
}
std::string host;
- boost::optional<int> port;
+ boost::optional<unsigned short> port;
if (hostAndPort[0] == '[') {
// handle IPv6 address literals
size_t addressEndIndex = hostAndPort.find(']');
if (addressEndIndex != std::string::npos) {
host = hostAndPort.substr(1, addressEndIndex - 1);
colonIndex = hostAndPort.find(':', addressEndIndex);
if (colonIndex != std::string::npos) {
try {
- port = boost::lexical_cast<int>(hostAndPort.substr(colonIndex + 1));
+ port = boost::numeric_cast<unsigned short>(boost::lexical_cast<int>(hostAndPort.substr(colonIndex + 1)));
}
- catch (const boost::bad_lexical_cast&) {
+ catch (...) {
return URL();
}
}
}
else {
@@ -85,11 +85,11 @@ URL URL::fromString(const std::string& urlString) {
else {
colonIndex = hostAndPort.find(':');
if (colonIndex != std::string::npos) {
host = unescape(hostAndPort.substr(0, colonIndex));
try {
- port = boost::lexical_cast<int>(hostAndPort.substr(colonIndex + 1));
+ port = boost::numeric_cast<unsigned short>(boost::lexical_cast<int>(hostAndPort.substr(colonIndex + 1)));
}
catch (const boost::bad_lexical_cast&) {
return URL();
}
}
diff --git a/Swiften/Base/URL.h b/Swiften/Base/URL.h
index 1a03efe..8fdb018 100644
--- a/Swiften/Base/URL.h
+++ b/Swiften/Base/URL.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2011-2016 Isode Limited.
+ * Copyright (c) 2011-2018 Isode Limited.
* All rights reserved.
* See the COPYING file for more information.
*/
#pragma once
@@ -19,11 +19,11 @@ class SWIFTEN_API URL {
public:
URL() : scheme(""), user(""), password(""), host(""), path(""), empty(true) {
}
- URL(const std::string& scheme, const std::string& host, int port, const std::string& path) : scheme(scheme), user(), password(), host(host), port(port), path(path), empty(false) {
+ URL(const std::string& scheme, const std::string& host, unsigned short port, const std::string& path) : scheme(scheme), user(), password(), host(host), port(port), path(path), empty(false) {
}
URL(const std::string& scheme, const std::string& host, const std::string& path) : scheme(scheme), user(), password(), host(host), path(path), empty(false) {
}
@@ -49,11 +49,11 @@ class SWIFTEN_API URL {
}
/**
* Port number
*/
- boost::optional<int> getPort() const {
+ boost::optional<unsigned short> getPort() const {
return port;
}
/**
* Path
@@ -62,20 +62,20 @@ class SWIFTEN_API URL {
return path;
}
std::string toString() const;
- static int getPortOrDefaultPort(const URL& url);
+ static unsigned short getPortOrDefaultPort(const URL& url);
static URL fromString(const std::string&);
static std::string unescape(const std::string&);
private:
std::string scheme;
std::string user;
std::string password;
std::string host;
- boost::optional<int> port;
+ boost::optional<unsigned short> port;
std::string path;
bool empty;
};
}
diff --git a/Swiften/Base/UnitTest/URLTest.cpp b/Swiften/Base/UnitTest/URLTest.cpp
index c38398a..da9f15c 100644
--- a/Swiften/Base/UnitTest/URLTest.cpp
+++ b/Swiften/Base/UnitTest/URLTest.cpp
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2012-2016 Isode Limited.
+ * Copyright (c) 2012-2018 Isode Limited.
* All rights reserved.
* See the COPYING file for more information.
*/
#include <boost/lexical_cast.hpp>
@@ -64,29 +64,29 @@ class URLTest : public CppUnit::TestFixture {
void testFromString_WithPort() {
URL url = URL::fromString("http://foo.bar:1234/baz/bam");
CPPUNIT_ASSERT_EQUAL(std::string("http"), url.getScheme());
CPPUNIT_ASSERT_EQUAL(std::string("foo.bar"), url.getHost());
- CPPUNIT_ASSERT_EQUAL(1234, *url.getPort());
+ CPPUNIT_ASSERT_EQUAL(static_cast<unsigned short>(1234), *url.getPort());
CPPUNIT_ASSERT_EQUAL(std::string("/baz/bam"), url.getPath());
}
void testFromString_WithPortOnePartPath() {
URL url = URL::fromString("http://foo.bar:11440/http-bind/");
CPPUNIT_ASSERT_EQUAL(std::string("http"), url.getScheme());
CPPUNIT_ASSERT_EQUAL(std::string("foo.bar"), url.getHost());
- CPPUNIT_ASSERT_EQUAL(11440, *url.getPort());
+ CPPUNIT_ASSERT_EQUAL(static_cast<unsigned short>(11440), *url.getPort());
CPPUNIT_ASSERT_EQUAL(std::string("/http-bind/"), url.getPath());
}
void testFromString_WithPortWithoutPath() {
URL url = URL::fromString("http://foo.bar:1234");
CPPUNIT_ASSERT_EQUAL(std::string("http"), url.getScheme());
CPPUNIT_ASSERT_EQUAL(std::string("foo.bar"), url.getHost());
- CPPUNIT_ASSERT_EQUAL(1234, *url.getPort());
+ CPPUNIT_ASSERT_EQUAL(static_cast<unsigned short>(1234), *url.getPort());
CPPUNIT_ASSERT_EQUAL(std::string(""), url.getPath());
}
void testFromString_WithUserInfo() {
URL url = URL::fromString("http://user:pass@foo.bar/baz/bam");
@@ -119,11 +119,11 @@ class URLTest : public CppUnit::TestFixture {
void testFromString_IPv4AddressWithPort() {
URL url = URL::fromString("http://127.0.0.1:12345/foobar");
CPPUNIT_ASSERT_EQUAL(std::string("http"), url.getScheme());
CPPUNIT_ASSERT_EQUAL(std::string("127.0.0.1"), url.getHost());
- CPPUNIT_ASSERT_EQUAL(12345, url.getPort().get_value_or(0));
+ CPPUNIT_ASSERT_EQUAL(static_cast<unsigned short>(12345), url.getPort().get_value_or(0));
CPPUNIT_ASSERT_EQUAL(std::string("/foobar"), url.getPath());
}
void testFromString_IPv6Address() {
URL url = URL::fromString("http://[fdf8:f53b:82e4::53]/foobar");
@@ -135,21 +135,21 @@ class URLTest : public CppUnit::TestFixture {
void testFromString_IPv6AddressWithPort() {
URL url = URL::fromString("http://[fdf8:f53b:82e4::53]:12435/foobar");
CPPUNIT_ASSERT_EQUAL(std::string("http"), url.getScheme());
CPPUNIT_ASSERT_EQUAL(std::string("fdf8:f53b:82e4::53"), url.getHost());
- CPPUNIT_ASSERT_EQUAL(12435, url.getPort().get_value_or(0));
+ CPPUNIT_ASSERT_EQUAL(static_cast<unsigned short>(12435), url.getPort().get_value_or(0));
}
void test_FromString_ToString_IPv6RFC2732() {
{
const char* testVector = "http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html";
URL url = URL::fromString(testVector);
CPPUNIT_ASSERT_EQUAL(std::string("http"), url.getScheme());
CPPUNIT_ASSERT_EQUAL(std::string("FEDC:BA98:7654:3210:FEDC:BA98:7654:3210"), url.getHost());
- CPPUNIT_ASSERT_EQUAL(80, url.getPort().get_value_or(2));
+ CPPUNIT_ASSERT_EQUAL(static_cast<unsigned short>(80), url.getPort().get_value_or(2));
CPPUNIT_ASSERT_EQUAL(std::string("/index.html"), url.getPath());
CPPUNIT_ASSERT_EQUAL(std::string(testVector), url.toString());
}
@@ -157,11 +157,11 @@ class URLTest : public CppUnit::TestFixture {
const char* testVector = "http://[1080:0:0:0:8:800:200C:417A]/index.html";
URL url = URL::fromString(testVector);
CPPUNIT_ASSERT_EQUAL(std::string("http"), url.getScheme());
CPPUNIT_ASSERT_EQUAL(std::string("1080:0:0:0:8:800:200C:417A"), url.getHost());
- CPPUNIT_ASSERT_EQUAL(2, url.getPort().get_value_or(2));
+ CPPUNIT_ASSERT_EQUAL(static_cast<unsigned short>(2), url.getPort().get_value_or(2));
CPPUNIT_ASSERT_EQUAL(std::string("/index.html"), url.getPath());
CPPUNIT_ASSERT_EQUAL(std::string(testVector), url.toString());
}
@@ -169,11 +169,11 @@ class URLTest : public CppUnit::TestFixture {
const char* testVector = "http://[3ffe:2a00:100:7031::1]";
URL url = URL::fromString(testVector);
CPPUNIT_ASSERT_EQUAL(std::string("http"), url.getScheme());
CPPUNIT_ASSERT_EQUAL(std::string("3ffe:2a00:100:7031::1"), url.getHost());
- CPPUNIT_ASSERT_EQUAL(2, url.getPort().get_value_or(2));
+ CPPUNIT_ASSERT_EQUAL(static_cast<unsigned short>(2), url.getPort().get_value_or(2));
CPPUNIT_ASSERT_EQUAL(std::string(""), url.getPath());
CPPUNIT_ASSERT_EQUAL(std::string(testVector), url.toString());
}
@@ -181,11 +181,11 @@ class URLTest : public CppUnit::TestFixture {
const char* testVector = "http://[1080::8:800:200C:417A]/foo";
URL url = URL::fromString(testVector);
CPPUNIT_ASSERT_EQUAL(std::string("http"), url.getScheme());
CPPUNIT_ASSERT_EQUAL(std::string("1080::8:800:200C:417A"), url.getHost());
- CPPUNIT_ASSERT_EQUAL(2, url.getPort().get_value_or(2));
+ CPPUNIT_ASSERT_EQUAL(static_cast<unsigned short>(2), url.getPort().get_value_or(2));
CPPUNIT_ASSERT_EQUAL(std::string("/foo"), url.getPath());
CPPUNIT_ASSERT_EQUAL(std::string(testVector), url.toString());
}
@@ -193,11 +193,11 @@ class URLTest : public CppUnit::TestFixture {
const char* testVector = "http://[::192.9.5.5]/ipng";
URL url = URL::fromString(testVector);
CPPUNIT_ASSERT_EQUAL(std::string("http"), url.getScheme());
CPPUNIT_ASSERT_EQUAL(std::string("::192.9.5.5"), url.getHost());
- CPPUNIT_ASSERT_EQUAL(2, url.getPort().get_value_or(2));
+ CPPUNIT_ASSERT_EQUAL(static_cast<unsigned short>(2), url.getPort().get_value_or(2));
CPPUNIT_ASSERT_EQUAL(std::string("/ipng"), url.getPath());
CPPUNIT_ASSERT_EQUAL(std::string(testVector), url.toString());
}
@@ -205,11 +205,11 @@ class URLTest : public CppUnit::TestFixture {
const char* testVector = "http://[::FFFF:129.144.52.38]:80/index.html";
URL url = URL::fromString(testVector);
CPPUNIT_ASSERT_EQUAL(std::string("http"), url.getScheme());
CPPUNIT_ASSERT_EQUAL(std::string("::FFFF:129.144.52.38"), url.getHost());
- CPPUNIT_ASSERT_EQUAL(80, url.getPort().get_value_or(2));
+ CPPUNIT_ASSERT_EQUAL(static_cast<unsigned short>(80), url.getPort().get_value_or(2));
CPPUNIT_ASSERT_EQUAL(std::string("/index.html"), url.getPath());
CPPUNIT_ASSERT_EQUAL(std::string(testVector), url.toString());
}
@@ -217,11 +217,11 @@ class URLTest : public CppUnit::TestFixture {
const char* testVector = "http://[2010:836B:4179::836B:4179]";
URL url = URL::fromString(testVector);
CPPUNIT_ASSERT_EQUAL(std::string("http"), url.getScheme());
CPPUNIT_ASSERT_EQUAL(std::string("2010:836B:4179::836B:4179"), url.getHost());
- CPPUNIT_ASSERT_EQUAL(2, url.getPort().get_value_or(2));
+ CPPUNIT_ASSERT_EQUAL(static_cast<unsigned short>(2), url.getPort().get_value_or(2));
CPPUNIT_ASSERT_EQUAL(std::string(), url.getPath());
CPPUNIT_ASSERT_EQUAL(std::string(testVector), url.toString());
}
}