summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swiften/Client')
-rw-r--r--Swiften/Client/ClientXMLTracer.cpp4
-rw-r--r--Swiften/Client/CoreClient.cpp40
-rw-r--r--Swiften/Client/DummyStanzaChannel.h7
-rw-r--r--Swiften/Client/UnitTest/XMLBeautifierTest.cpp13
4 files changed, 52 insertions, 12 deletions
diff --git a/Swiften/Client/ClientXMLTracer.cpp b/Swiften/Client/ClientXMLTracer.cpp
index e205f41..e1b9e0c 100644
--- a/Swiften/Client/ClientXMLTracer.cpp
+++ b/Swiften/Client/ClientXMLTracer.cpp
@@ -16,9 +16,9 @@ namespace Swift {
ClientXMLTracer::ClientXMLTracer(CoreClient* client, bool bosh) : bosh_(bosh) {
#ifdef SWIFTEN_PLATFORM_WIN32
- beautifier_ = std::unique_ptr<XMLBeautifier>(new XMLBeautifier(true, false));
+ beautifier_ = std::make_unique<XMLBeautifier>(true, false);
#else
- beautifier_ = std::unique_ptr<XMLBeautifier>(new XMLBeautifier(true, true));
+ beautifier_ = std::make_unique<XMLBeautifier>(true, true);
#endif
onDataReadConnection_ = client->onDataRead.connect(boost::bind(&ClientXMLTracer::printData, this, '<', _1));
onDataWrittenConnection_ = client->onDataWritten.connect(boost::bind(&ClientXMLTracer::printData, this, '>', _1));
diff --git a/Swiften/Client/CoreClient.cpp b/Swiften/Client/CoreClient.cpp
index 1de1d61..ccde0c2 100644
--- a/Swiften/Client/CoreClient.cpp
+++ b/Swiften/Client/CoreClient.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010-2016 Isode Limited.
+ * Copyright (c) 2010-2018 Isode Limited.
* All rights reserved.
* See the COPYING file for more information.
*/
@@ -85,7 +85,17 @@ void CoreClient::connect(const ClientOptions& o) {
case ClientOptions::SOCKS5Proxy: {
SWIFT_LOG(debug) << " with manual configured SOCKS5 proxy" << std::endl;
std::string proxyHostname = o.manualProxyHostname.empty() ? systemSOCKS5Proxy.getAddress().toString() : o.manualProxyHostname;
- int proxyPort = o.manualProxyPort == -1 ? systemSOCKS5Proxy.getPort() : o.manualProxyPort;
+ auto proxyPort = systemSOCKS5Proxy.getPort();
+ if (o.manualProxyPort != -1) {
+ try {
+ proxyPort = boost::numeric_cast<unsigned short>(o.manualProxyPort);
+ }
+ catch (const boost::numeric::bad_numeric_cast& e) {
+ SWIFT_LOG(warning) << "Manual proxy port " << o.manualProxyPort << " is invalid: " << e.what() << std::endl;
+ onDisconnected(boost::optional<ClientError>(ClientError::ConnectionError));
+ return;
+ }
+ }
SWIFT_LOG(debug) << "Proxy: " << proxyHostname << ":" << proxyPort << std::endl;
proxyConnectionFactories.push_back(new SOCKS5ProxiedConnectionFactory(networkFactories->getDomainNameResolver(), networkFactories->getConnectionFactory(), networkFactories->getTimerFactory(), proxyHostname, proxyPort));
useDirectConnection = false;
@@ -94,7 +104,17 @@ void CoreClient::connect(const ClientOptions& o) {
case ClientOptions::HTTPConnectProxy: {
SWIFT_LOG(debug) << " with manual configured HTTPConnect proxy" << std::endl;
std::string proxyHostname = o.manualProxyHostname.empty() ? systemHTTPConnectProxy.getAddress().toString() : o.manualProxyHostname;
- int proxyPort = o.manualProxyPort == -1 ? systemHTTPConnectProxy.getPort() : o.manualProxyPort;
+ unsigned short proxyPort = systemHTTPConnectProxy.getPort();
+ if (o.manualProxyPort != -1) {
+ try {
+ proxyPort = boost::numeric_cast<unsigned short>(o.manualProxyPort);
+ }
+ catch (const boost::numeric::bad_numeric_cast& e) {
+ SWIFT_LOG(warning) << "Manual proxy port " << o.manualProxyPort << " is invalid: " << e.what() << std::endl;
+ onDisconnected(boost::optional<ClientError>(ClientError::ConnectionError));
+ return;
+ }
+ }
SWIFT_LOG(debug) << "Proxy: " << proxyHostname << ":" << proxyPort << std::endl;
proxyConnectionFactories.push_back(new HTTPConnectProxiedConnectionFactory(networkFactories->getDomainNameResolver(), networkFactories->getConnectionFactory(), networkFactories->getTimerFactory(), proxyHostname, proxyPort, o.httpTrafficFilter));
useDirectConnection = false;
@@ -108,7 +128,17 @@ void CoreClient::connect(const ClientOptions& o) {
// Create connector
std::string host = o.manualHostname.empty() ? jid_.getDomain() : o.manualHostname;
- int port = o.manualPort;
+ unsigned short port = 0;
+ if (o.manualPort != -1) {
+ try {
+ port = boost::numeric_cast<unsigned short>(o.manualPort);
+ }
+ catch (const boost::numeric::bad_numeric_cast& e) {
+ SWIFT_LOG(warning) << "Invalid manual port " << o.manualPort << ": " << e.what() << std::endl;
+ onDisconnected(boost::optional<ClientError>(ClientError::ConnectionError));
+ return;
+ }
+ }
boost::optional<std::string> serviceLookupPrefix;
if (o.manualHostname.empty()) {
serviceLookupPrefix = "_xmpp-client._tcp.";
@@ -286,6 +316,8 @@ void CoreClient::handleSessionFinished(std::shared_ptr<Error> error) {
clientError = ClientError(ClientError::CertificateCardRemoved);
break;
case TLSError::UnknownError:
+ case TLSError::AcceptFailed:
+ case TLSError::ConnectFailed:
clientError = ClientError(ClientError::TLSError);
break;
}
diff --git a/Swiften/Client/DummyStanzaChannel.h b/Swiften/Client/DummyStanzaChannel.h
index 4cc0f7e..1ba70ad 100644
--- a/Swiften/Client/DummyStanzaChannel.h
+++ b/Swiften/Client/DummyStanzaChannel.h
@@ -48,8 +48,12 @@ namespace Swift {
return available_;
}
+ virtual void setStreamManagementEnabled(bool enable) {
+ streamManagement_ = enable;
+ }
+
virtual bool getStreamManagementEnabled() const {
- return false;
+ return streamManagement_;
}
template<typename T> bool isRequestAtIndex(size_t index, const JID& jid, IQ::Type type) {
@@ -101,5 +105,6 @@ namespace Swift {
bool available_ = true;
bool uniqueIDs_ = false;
unsigned int idCounter_ = 0;
+ bool streamManagement_ = false;
};
}
diff --git a/Swiften/Client/UnitTest/XMLBeautifierTest.cpp b/Swiften/Client/UnitTest/XMLBeautifierTest.cpp
index 0188634..2a639ea 100644
--- a/Swiften/Client/UnitTest/XMLBeautifierTest.cpp
+++ b/Swiften/Client/UnitTest/XMLBeautifierTest.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010-2017 Isode Limited.
+ * Copyright (c) 2010-2018 Isode Limited.
* All rights reserved.
* See the COPYING file for more information.
*/
@@ -8,6 +8,9 @@
#include <Swiften/Client/XMLBeautifier.h>
#include <iostream>
+// Clang wrongly things that tests for 0 are using 0 as null.
+#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant"
+
using namespace Swift;
namespace {
@@ -15,7 +18,7 @@ namespace {
}
TEST(XMLBeautifierTest, testBeautify) {
- auto beautifier = std::unique_ptr<XMLBeautifier>(new XMLBeautifier(true, false));
+ auto beautifier = std::make_unique<XMLBeautifier>(true, false);
ASSERT_EQ(FULL_FORMATTED_OUTPUT, beautifier->beautify("<list><el>aqq</el><el>bzz</el></list>"));
ASSERT_TRUE(beautifier->wasReset());
@@ -26,7 +29,7 @@ TEST(XMLBeautifierTest, testBeautify) {
}
TEST(XMLBeautifierTest, testBeautifyMultipleChunks) {
- auto beautifier = std::unique_ptr<XMLBeautifier>(new XMLBeautifier(true, false));
+ auto beautifier = std::make_unique<XMLBeautifier>(true, false);
auto result = beautifier->beautify("<list><el>aqq</el>");
ASSERT_TRUE(beautifier->wasReset());
@@ -40,7 +43,7 @@ TEST(XMLBeautifierTest, testBeautifyMultipleChunks) {
}
TEST(XMLBeautifierTest, testBeautifyMultipleChunksMiddleElement) {
- auto beautifier = std::unique_ptr<XMLBeautifier>(new XMLBeautifier(true, false));
+ auto beautifier = std::make_unique<XMLBeautifier>(true, false);
auto result = beautifier->beautify("<l");
ASSERT_TRUE(beautifier->wasReset());
@@ -54,7 +57,7 @@ TEST(XMLBeautifierTest, testBeautifyMultipleChunksMiddleElement) {
}
TEST(XMLBeautifierTest, testBeautifyInvalidMultipleChunks) {
- auto beautifier = std::unique_ptr<XMLBeautifier>(new XMLBeautifier(true, false));
+ auto beautifier = std::make_unique<XMLBeautifier>(true, false);
ASSERT_EQ(std::string("<list>\n <el>aqq"), beautifier->beautify("<list><el>aqq<"));
ASSERT_TRUE(beautifier->wasReset());