summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemko Tronçon <git@el-tramo.be>2012-09-17 11:52:40 (GMT)
committerRemko Tronçon <git@el-tramo.be>2012-09-17 18:01:27 (GMT)
commitd1aaf7fc9b9da32f04f84eef06bc0ee731e79223 (patch)
tree14ecd64cfd4b44e2664170983a5a0fefc47a03fd /Swiften
parent3d6aa3b50090c19b50ae488494f1459bade88da3 (diff)
downloadswift-d1aaf7fc9b9da32f04f84eef06bc0ee731e79223.zip
swift-d1aaf7fc9b9da32f04f84eef06bc0ee731e79223.tar.bz2
Fixed URL parsing/serializing.
Resolves: #1157,#1158
Diffstat (limited to 'Swiften')
-rw-r--r--Swiften/Base/URL.cpp22
-rw-r--r--Swiften/Base/URL.h22
-rw-r--r--Swiften/Base/UnitTest/URLTest.cpp10
3 files changed, 33 insertions, 21 deletions
diff --git a/Swiften/Base/URL.cpp b/Swiften/Base/URL.cpp
index c36863f..28fe6d3 100644
--- a/Swiften/Base/URL.cpp
+++ b/Swiften/Base/URL.cpp
@@ -87,6 +87,28 @@ URL URL::fromString(const std::string& urlString) {
}
}
+// FIXME: Escape non-ascii characters
+std::string URL::toString() const {
+ if (empty) {
+ return "";
+ }
+ std::string result = scheme + "://";
+ if (!user.empty()) {
+ result += user;
+ if (!password.empty()) {
+ result += ":" + password;
+ }
+ result += "@";
+ }
+ result += host;
+ if (port) {
+ result += ":";
+ result += boost::lexical_cast<std::string>(*port);
+ }
+ result += path;
+ return result;
+}
+
// Disabling this code for now, since GCC4.5+boost1.42 (on ubuntu) seems to
// result in a bug. Replacing it with naive code.
#if 0
diff --git a/Swiften/Base/URL.h b/Swiften/Base/URL.h
index 00d58f1..75cf1a6 100644
--- a/Swiften/Base/URL.h
+++ b/Swiften/Base/URL.h
@@ -60,27 +60,7 @@ class SWIFTEN_API URL {
return path;
}
- const std::string toString() const {
- if (empty) {
- return "";
- }
- std::string result = scheme + "://";
- if (!user.empty()) {
- result += user;
- if (!password.empty()) {
- result += ":" + password;
- }
- result += "@";
- }
- result += host;
- if (port > 0) {
- result += ":";
- result += boost::lexical_cast<std::string>(port);
- }
- result += "/";
- result += path;
- return result;
- }
+ std::string toString() const;
static int getPortOrDefaultPort(const URL& url);
static URL fromString(const std::string&);
diff --git a/Swiften/Base/UnitTest/URLTest.cpp b/Swiften/Base/UnitTest/URLTest.cpp
index 4de1d33..55c81f6 100644
--- a/Swiften/Base/UnitTest/URLTest.cpp
+++ b/Swiften/Base/UnitTest/URLTest.cpp
@@ -21,6 +21,8 @@ class URLTest : public CppUnit::TestFixture {
CPPUNIT_TEST(testFromString_WithUserInfo);
CPPUNIT_TEST(testFromString_NonASCIIHost);
CPPUNIT_TEST(testFromString_NonASCIIPath);
+ CPPUNIT_TEST(testToString);
+ CPPUNIT_TEST(testToString_WithPort);
CPPUNIT_TEST_SUITE_END();
public:
@@ -79,6 +81,14 @@ class URLTest : public CppUnit::TestFixture {
CPPUNIT_ASSERT_EQUAL(std::string("/baz/tron\xc3\xa7on/bam"), url.getPath());
}
+
+ void testToString() {
+ CPPUNIT_ASSERT_EQUAL(std::string("http://foo.bar/baz/bam"), URL("http", "foo.bar", "/baz/bam").toString());
+ }
+
+ void testToString_WithPort() {
+ CPPUNIT_ASSERT_EQUAL(std::string("http://foo.bar:1234/baz/bam"), URL("http", "foo.bar", 1234, "/baz/bam").toString());
+ }
};
CPPUNIT_TEST_SUITE_REGISTRATION(URLTest);