summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swiften/Network')
-rw-r--r--Swiften/Network/BOSHConnection.h7
-rw-r--r--Swiften/Network/BOSHConnectionPool.h3
-rw-r--r--Swiften/Network/BoostConnection.h9
-rw-r--r--Swiften/Network/BoostConnectionFactory.h4
-rw-r--r--Swiften/Network/BoostTimerFactory.h3
-rw-r--r--Swiften/Network/HTTPConnectProxiedConnection.h3
-rw-r--r--Swiften/Network/HTTPConnectProxiedConnectionFactory.h5
-rw-r--r--Swiften/Network/NetworkFactories.h17
-rw-r--r--Swiften/Network/PlatformNATTraversalWorker.h3
-rw-r--r--Swiften/Network/ProxiedConnection.h9
-rw-r--r--Swiften/Network/UnboundDomainNameResolver.h3
11 files changed, 18 insertions, 48 deletions
diff --git a/Swiften/Network/BOSHConnection.h b/Swiften/Network/BOSHConnection.h
index 1409ae6..c492ac4 100644
--- a/Swiften/Network/BOSHConnection.h
+++ b/Swiften/Network/BOSHConnection.h
@@ -1,64 +1,57 @@
/*
* Copyright (c) 2011 Thilo Cestonaro
* Licensed under the simplified BSD license.
* See Documentation/Licenses/BSD-simplified.txt for more information.
*/
/*
* Copyright (c) 2011-2017 Isode Limited.
* All rights reserved.
* See the COPYING file for more information.
*/
#pragma once
#include <memory>
#include <Swiften/Base/API.h>
#include <Swiften/Base/Error.h>
#include <Swiften/Base/String.h>
#include <Swiften/Base/URL.h>
#include <Swiften/Network/Connection.h>
#include <Swiften/Network/Connector.h>
#include <Swiften/Network/HostAddressPort.h>
#include <Swiften/Session/SessionStream.h>
#include <Swiften/TLS/TLSError.h>
-namespace boost {
- class thread;
- namespace system {
- class error_code;
- }
-}
-
class BOSHConnectionTest;
namespace Swift {
class XMLParserFactory;
class TLSContextFactory;
class TLSLayer;
struct TLSOptions;
class HighLayer;
class SWIFTEN_API BOSHError : public SessionStream::SessionStreamError {
public:
enum Type {
BadRequest, HostGone, HostUnknown, ImproperAddressing,
InternalServerError, ItemNotFound, OtherRequest, PolicyViolation,
RemoteConnectionFailed, RemoteStreamError, SeeOtherURI, SystemShutdown, UndefinedCondition,
NoError};
BOSHError(Type type) : SessionStream::SessionStreamError(SessionStream::SessionStreamError::ConnectionReadError), type(type) {}
Type getType() const {return type;}
typedef std::shared_ptr<BOSHError> ref;
private:
Type type;
};
class SWIFTEN_API BOSHConnection : public std::enable_shared_from_this<BOSHConnection> {
public:
typedef std::shared_ptr<BOSHConnection> ref;
static ref create(const URL& boshURL, Connector::ref connector, XMLParserFactory* parserFactory, TLSContextFactory* tlsContextFactory, const TLSOptions& tlsOptions) {
return ref(new BOSHConnection(boshURL, connector, parserFactory, tlsContextFactory, tlsOptions));
diff --git a/Swiften/Network/BOSHConnectionPool.h b/Swiften/Network/BOSHConnectionPool.h
index c4d827c..a6956fa 100644
--- a/Swiften/Network/BOSHConnectionPool.h
+++ b/Swiften/Network/BOSHConnectionPool.h
@@ -1,51 +1,50 @@
/*
- * Copyright (c) 2011-2016 Isode Limited.
+ * Copyright (c) 2011-2017 Isode Limited.
* All rights reserved.
* See the COPYING file for more information.
*/
#pragma once
#include <vector>
#include <Swiften/Base/API.h>
#include <Swiften/Base/SafeString.h>
#include <Swiften/Network/BOSHConnection.h>
#include <Swiften/TLS/CertificateWithKey.h>
#include <Swiften/TLS/TLSOptions.h>
namespace Swift {
class CachingDomainNameResolver;
class EventLoop;
- class HTTPConnectProxiedConnectionFactory;
class HTTPTrafficFilter;
class TLSContextFactory;
class CachingDomainNameResolver;
class EventLoop;
class SWIFTEN_API BOSHConnectionPool : public boost::signals2::trackable {
public:
BOSHConnectionPool(const URL& boshURL, DomainNameResolver* resolver, ConnectionFactory* connectionFactory, XMLParserFactory* parserFactory, TLSContextFactory* tlsFactory, TimerFactory* timerFactory, EventLoop* eventLoop, const std::string& to, unsigned long long initialRID, const URL& boshHTTPConnectProxyURL, const SafeString& boshHTTPConnectProxyAuthID, const SafeString& boshHTTPConnectProxyAuthPassword, const TLSOptions& tlsOptions, std::shared_ptr<HTTPTrafficFilter> trafficFilter = std::shared_ptr<HTTPTrafficFilter>());
~BOSHConnectionPool();
void open();
void write(const SafeByteArray& data);
void writeFooter();
void close();
void restartStream();
void setTLSCertificate(CertificateWithKey::ref certWithKey);
bool isTLSEncrypted() const;
Certificate::ref getPeerCertificate() const;
std::vector<Certificate::ref> getPeerCertificateChain() const;
std::shared_ptr<CertificateVerificationError> getPeerCertificateVerificationError() const;
boost::signals2::signal<void ()> onTLSConnectionEstablished;
boost::signals2::signal<void (BOSHError::ref)> onSessionTerminated;
boost::signals2::signal<void ()> onSessionStarted;
boost::signals2::signal<void (const SafeByteArray&)> onXMPPDataRead;
boost::signals2::signal<void (const SafeByteArray&)> onBOSHDataRead;
boost::signals2::signal<void (const SafeByteArray&)> onBOSHDataWritten;
private:
diff --git a/Swiften/Network/BoostConnection.h b/Swiften/Network/BoostConnection.h
index 03122da..c77b933 100644
--- a/Swiften/Network/BoostConnection.h
+++ b/Swiften/Network/BoostConnection.h
@@ -1,59 +1,52 @@
/*
- * Copyright (c) 2010-2016 Isode Limited.
+ * Copyright (c) 2010-2017 Isode Limited.
* All rights reserved.
* See the COPYING file for more information.
*/
#pragma once
#include <memory>
#include <mutex>
#include <boost/asio/io_service.hpp>
#include <boost/asio/ip/tcp.hpp>
#include <Swiften/Base/API.h>
#include <Swiften/Base/SafeByteArray.h>
#include <Swiften/EventLoop/EventOwner.h>
#include <Swiften/Network/Connection.h>
#include <Swiften/TLS/Certificate.h>
#include <Swiften/TLS/CertificateVerificationError.h>
#include <Swiften/TLS/CertificateWithKey.h>
-namespace boost {
- class thread;
- namespace system {
- class error_code;
- }
-}
-
namespace Swift {
class EventLoop;
class SWIFTEN_API BoostConnection : public Connection, public EventOwner, public std::enable_shared_from_this<BoostConnection> {
public:
typedef std::shared_ptr<BoostConnection> ref;
virtual ~BoostConnection();
static ref create(std::shared_ptr<boost::asio::io_service> ioService, EventLoop* eventLoop) {
return ref(new BoostConnection(ioService, eventLoop));
}
virtual void listen();
virtual void connect(const HostAddressPort& address);
virtual void disconnect();
virtual void write(const SafeByteArray& data);
boost::asio::ip::tcp::socket& getSocket() {
return socket_;
}
virtual HostAddressPort getLocalAddress() const;
virtual HostAddressPort getRemoteAddress() const;
bool setClientCertificate(CertificateWithKey::ref cert);
Certificate::ref getPeerCertificate() const;
std::vector<Certificate::ref> getPeerCertificateChain() const;
std::shared_ptr<CertificateVerificationError> getPeerCertificateVerificationError() const;
diff --git a/Swiften/Network/BoostConnectionFactory.h b/Swiften/Network/BoostConnectionFactory.h
index a4e3b0d..eef0b45 100644
--- a/Swiften/Network/BoostConnectionFactory.h
+++ b/Swiften/Network/BoostConnectionFactory.h
@@ -1,28 +1,26 @@
/*
- * Copyright (c) 2010-2016 Isode Limited.
+ * Copyright (c) 2010-2017 Isode Limited.
* All rights reserved.
* See the COPYING file for more information.
*/
#pragma once
#include <boost/asio/io_service.hpp>
#include <Swiften/Base/API.h>
#include <Swiften/Network/BoostConnection.h>
#include <Swiften/Network/ConnectionFactory.h>
namespace Swift {
- class BoostConnection;
-
class SWIFTEN_API BoostConnectionFactory : public ConnectionFactory {
public:
BoostConnectionFactory(std::shared_ptr<boost::asio::io_service>, EventLoop* eventLoop);
virtual std::shared_ptr<Connection> createConnection();
private:
std::shared_ptr<boost::asio::io_service> ioService;
EventLoop* eventLoop;
};
}
diff --git a/Swiften/Network/BoostTimerFactory.h b/Swiften/Network/BoostTimerFactory.h
index ca9a833..1e2139b 100644
--- a/Swiften/Network/BoostTimerFactory.h
+++ b/Swiften/Network/BoostTimerFactory.h
@@ -1,29 +1,28 @@
/*
- * Copyright (c) 2010-2016 Isode Limited.
+ * Copyright (c) 2010-2017 Isode Limited.
* All rights reserved.
* See the COPYING file for more information.
*/
#pragma once
#include <boost/asio/io_service.hpp>
#include <Swiften/Base/API.h>
#include <Swiften/Network/BoostTimer.h>
#include <Swiften/Network/TimerFactory.h>
namespace Swift {
- class BoostTimer;
class EventLoop;
class SWIFTEN_API BoostTimerFactory : public TimerFactory {
public:
BoostTimerFactory(std::shared_ptr<boost::asio::io_service>, EventLoop* eventLoop);
virtual std::shared_ptr<Timer> createTimer(int milliseconds);
private:
std::shared_ptr<boost::asio::io_service> ioService;
EventLoop* eventLoop;
};
}
diff --git a/Swiften/Network/HTTPConnectProxiedConnection.h b/Swiften/Network/HTTPConnectProxiedConnection.h
index 21b3960..6592839 100644
--- a/Swiften/Network/HTTPConnectProxiedConnection.h
+++ b/Swiften/Network/HTTPConnectProxiedConnection.h
@@ -1,54 +1,53 @@
/*
* Copyright (c) 2010-2011 Thilo Cestonaro
* Licensed under the simplified BSD license.
* See Documentation/Licenses/BSD-simplified.txt for more information.
*/
/*
- * Copyright (c) 2011-2016 Isode Limited.
+ * Copyright (c) 2011-2017 Isode Limited.
* All rights reserved.
* See the COPYING file for more information.
*/
#pragma once
#include <memory>
#include <Swiften/Base/API.h>
#include <Swiften/Network/ProxiedConnection.h>
namespace Swift {
class ConnectionFactory;
class DomainNameResolver;
- class EventLoop;
class HTTPTrafficFilter;
class TimerFactory;
class SWIFTEN_API HTTPConnectProxiedConnection : public ProxiedConnection {
public:
typedef std::shared_ptr<HTTPConnectProxiedConnection> ref;
virtual ~HTTPConnectProxiedConnection();
static ref create(DomainNameResolver* resolver, ConnectionFactory* connectionFactory, TimerFactory* timerFactory, const std::string& proxyHost, int proxyPort, const SafeString& authID, const SafeString& authPassword) {
return ref(new HTTPConnectProxiedConnection(resolver, connectionFactory, timerFactory, proxyHost, proxyPort, authID, authPassword));
}
void setHTTPTrafficFilter(std::shared_ptr<HTTPTrafficFilter> trafficFilter);
private:
HTTPConnectProxiedConnection(DomainNameResolver* resolver, ConnectionFactory* connectionFactory, TimerFactory* timerFactory, const std::string& proxyHost, int proxyPort, const SafeString& authID, const SafeString& authPassword);
virtual void initializeProxy();
virtual void handleProxyInitializeData(std::shared_ptr<SafeByteArray> data);
void sendHTTPRequest(const std::string& statusLine, const std::vector<std::pair<std::string, std::string> >& headerFields);
void parseHTTPHeader(const std::string& data, std::string& statusLine, std::vector<std::pair<std::string, std::string> >& headerFields);
private:
SafeByteArray authID_;
SafeByteArray authPassword_;
std::shared_ptr<HTTPTrafficFilter> trafficFilter_;
std::string httpResponseBuffer_;
std::vector<std::pair<std::string, std::string> > nextHTTPRequestHeaders_;
diff --git a/Swiften/Network/HTTPConnectProxiedConnectionFactory.h b/Swiften/Network/HTTPConnectProxiedConnectionFactory.h
index 74d6279..395f64f 100644
--- a/Swiften/Network/HTTPConnectProxiedConnectionFactory.h
+++ b/Swiften/Network/HTTPConnectProxiedConnectionFactory.h
@@ -1,43 +1,42 @@
/*
- * Copyright (c) 2012-2016 Isode Limited.
+ * Copyright (c) 2012-2017 Isode Limited.
* All rights reserved.
* See the COPYING file for more information.
*/
/*
* Copyright (c) 2010-2011 Thilo Cestonaro
* Licensed under the simplified BSD license.
* See Documentation/Licenses/BSD-simplified.txt for more information.
*/
#pragma once
#include <Swiften/Base/API.h>
#include <Swiften/Base/SafeString.h>
#include <Swiften/Network/ConnectionFactory.h>
#include <Swiften/Network/HostAddressPort.h>
namespace Swift {
class DomainNameResolver;
- class TimerFactory;
- class EventLoop;
class HTTPTrafficFilter;
+ class TimerFactory;
class SWIFTEN_API HTTPConnectProxiedConnectionFactory : public ConnectionFactory {
public:
HTTPConnectProxiedConnectionFactory(DomainNameResolver* resolver, ConnectionFactory* connectionFactory, TimerFactory* timerFactory, const std::string& proxyHost, int proxyPort, std::shared_ptr<HTTPTrafficFilter> httpTrafficFilter = std::shared_ptr<HTTPTrafficFilter>());
HTTPConnectProxiedConnectionFactory(DomainNameResolver* resolver, ConnectionFactory* connectionFactory, TimerFactory* timerFactory, const std::string& proxyHost, int proxyPort, const SafeString& authID, const SafeString& authPassword, std::shared_ptr<HTTPTrafficFilter> httpTrafficFilter = std::shared_ptr<HTTPTrafficFilter>());
virtual std::shared_ptr<Connection> createConnection();
private:
DomainNameResolver* resolver_;
ConnectionFactory* connectionFactory_;
TimerFactory* timerFactory_;
std::string proxyHost_;
int proxyPort_;
SafeString authID_;
SafeString authPassword_;
std::shared_ptr<HTTPTrafficFilter> httpTrafficFilter_;
};
}
diff --git a/Swiften/Network/NetworkFactories.h b/Swiften/Network/NetworkFactories.h
index 7c76c67..f31c448 100644
--- a/Swiften/Network/NetworkFactories.h
+++ b/Swiften/Network/NetworkFactories.h
@@ -1,46 +1,45 @@
/*
- * Copyright (c) 2010-2015 Isode Limited.
+ * Copyright (c) 2010-2017 Isode Limited.
* All rights reserved.
* See the COPYING file for more information.
*/
#pragma once
#include <Swiften/Base/API.h>
namespace Swift {
- class TimerFactory;
class ConnectionFactory;
- class DomainNameResolver;
class ConnectionServerFactory;
- class NATTraverser;
- class XMLParserFactory;
- class TLSContextFactory;
- class CertificateFactory;
- class ProxyProvider;
+ class CryptoProvider;
+ class DomainNameResolver;
class EventLoop;
class IDNConverter;
+ class NATTraverser;
class NetworkEnvironment;
- class CryptoProvider;
+ class ProxyProvider;
+ class TLSContextFactory;
+ class TimerFactory;
+ class XMLParserFactory;
/**
* An interface collecting network factories.
*/
class SWIFTEN_API NetworkFactories {
public:
virtual ~NetworkFactories();
virtual TimerFactory* getTimerFactory() const = 0;
virtual ConnectionFactory* getConnectionFactory() const = 0;
virtual DomainNameResolver* getDomainNameResolver() const = 0;
virtual ConnectionServerFactory* getConnectionServerFactory() const = 0;
virtual NATTraverser* getNATTraverser() const = 0;
virtual NetworkEnvironment* getNetworkEnvironment() const = 0;
virtual XMLParserFactory* getXMLParserFactory() const = 0;
virtual TLSContextFactory* getTLSContextFactory() const = 0;
virtual ProxyProvider* getProxyProvider() const = 0;
virtual EventLoop* getEventLoop() const = 0;
virtual IDNConverter* getIDNConverter() const = 0;
virtual CryptoProvider* getCryptoProvider() const = 0;
};
}
diff --git a/Swiften/Network/PlatformNATTraversalWorker.h b/Swiften/Network/PlatformNATTraversalWorker.h
index 3607dac..aee1052 100644
--- a/Swiften/Network/PlatformNATTraversalWorker.h
+++ b/Swiften/Network/PlatformNATTraversalWorker.h
@@ -1,68 +1,67 @@
/*
* Copyright (c) 2011 Tobias Markmann
* Licensed under the simplified BSD license.
* See Documentation/Licenses/BSD-simplified.txt for more information.
*/
/*
- * Copyright (c) 2016 Isode Limited.
+ * Copyright (c) 2016-2017 Isode Limited.
* All rights reserved.
* See the COPYING file for more information.
*/
#pragma once
#include <condition_variable>
#include <deque>
#include <mutex>
#include <thread>
#include <boost/logic/tribool.hpp>
#include <boost/optional.hpp>
#include <Swiften/Base/API.h>
#include <Swiften/Base/Atomic.h>
#include <Swiften/Network/HostAddressPort.h>
#include <Swiften/Network/NATTraverser.h>
#include <Swiften/Network/NullNATTraversalInterface.h>
namespace Swift {
class EventLoop;
class NATTraversalGetPublicIPRequest;
class NATTraversalForwardPortRequest;
class NATTraversalRemovePortForwardingRequest;
class PlatformNATTraversalRequest;
class NATPMPInterface;
class MiniUPnPInterface;
class NATTraversalInterface;
- class NATPortMapping;
class SWIFTEN_API PlatformNATTraversalWorker : public NATTraverser {
friend class PlatformNATTraversalRequest;
public:
PlatformNATTraversalWorker(EventLoop* eventLoop);
virtual ~PlatformNATTraversalWorker();
std::shared_ptr<NATTraversalGetPublicIPRequest> createGetPublicIPRequest();
std::shared_ptr<NATTraversalForwardPortRequest> createForwardPortRequest(int localPort, int publicPort);
std::shared_ptr<NATTraversalRemovePortForwardingRequest> createRemovePortForwardingRequest(int localPort, int publicPort);
private:
NATTraversalInterface* getNATTraversalInterface() const;
void addRequestToQueue(std::shared_ptr<PlatformNATTraversalRequest>);
void start();
void stop();
EventLoop* getEventLoop() const {
return eventLoop;
}
private:
EventLoop* eventLoop;
Atomic<bool> stopRequested;
std::thread* thread;
std::deque<std::shared_ptr<PlatformNATTraversalRequest> > queue;
std::mutex queueMutex;
std::condition_variable queueNonEmpty;
diff --git a/Swiften/Network/ProxiedConnection.h b/Swiften/Network/ProxiedConnection.h
index 38194aa..440fb86 100644
--- a/Swiften/Network/ProxiedConnection.h
+++ b/Swiften/Network/ProxiedConnection.h
@@ -1,54 +1,47 @@
/*
- * Copyright (c) 2012-2016 Isode Limited.
+ * Copyright (c) 2012-2017 Isode Limited.
* All rights reserved.
* See the COPYING file for more information.
*/
#pragma once
#include <memory>
#include <Swiften/Base/API.h>
#include <Swiften/Base/SafeString.h>
#include <Swiften/Network/Connection.h>
#include <Swiften/Network/Connector.h>
#include <Swiften/Network/HostAddressPort.h>
-namespace boost {
- class thread;
- namespace system {
- class error_code;
- }
-}
-
namespace Swift {
class ConnectionFactory;
class SWIFTEN_API ProxiedConnection : public Connection, public std::enable_shared_from_this<ProxiedConnection> {
public:
ProxiedConnection(DomainNameResolver* resolver, ConnectionFactory* connectionFactory, TimerFactory* timerFactory, const std::string& proxyHost, int proxyPort);
virtual ~ProxiedConnection();
virtual void listen();
virtual void connect(const HostAddressPort& address);
virtual void disconnect();
virtual void write(const SafeByteArray& data);
virtual HostAddressPort getLocalAddress() const;
virtual HostAddressPort getRemoteAddress() const;
private:
void handleConnectFinished(Connection::ref connection);
void handleDataRead(std::shared_ptr<SafeByteArray> data);
void handleDisconnected(const boost::optional<Error>& error);
void cancelConnector();
protected:
void setProxyInitializeFinished(bool success);
virtual void initializeProxy() = 0;
virtual void handleProxyInitializeData(std::shared_ptr<SafeByteArray> data) = 0;
const HostAddressPort& getServer() const {
return server_;
diff --git a/Swiften/Network/UnboundDomainNameResolver.h b/Swiften/Network/UnboundDomainNameResolver.h
index a97e385..988a415 100644
--- a/Swiften/Network/UnboundDomainNameResolver.h
+++ b/Swiften/Network/UnboundDomainNameResolver.h
@@ -1,59 +1,58 @@
/*
* Copyright (c) 2013 Tobias Markmann
* Licensed under the simplified BSD license.
* See Documentation/Licenses/BSD-simplified.txt for more information.
*/
/*
- * Copyright (c) 2016 Isode Limited.
+ * Copyright (c) 2016-2017 Isode Limited.
* All rights reserved.
* See the COPYING file for more information.
*/
#pragma once
#include <memory>
#include <boost/asio.hpp>
#include <Swiften/EventLoop/EventOwner.h>
#include <Swiften/Network/DomainNameResolver.h>
#include <Swiften/Network/Timer.h>
struct ub_ctx;
struct ub_result;
namespace Swift {
class EventLoop;
class IDNConverter;
- class TimerFactory;
class UnboundDomainNameResolver;
class UnboundQuery;
class UnboundDomainNameResolver : public DomainNameResolver, public EventOwner, public std::enable_shared_from_this<UnboundDomainNameResolver> {
public:
UnboundDomainNameResolver(IDNConverter* idnConverter, std::shared_ptr<boost::asio::io_service> ioService, EventLoop* eventLoop);
virtual ~UnboundDomainNameResolver();
virtual std::shared_ptr<DomainNameServiceQuery> createServiceQuery(const std::string& serviceLookupPrefix, const std::string& domain);
virtual std::shared_ptr<DomainNameAddressQuery> createAddressQuery(const std::string& name);
static void unbound_callback_wrapper(void* data, int err, ub_result* result);
private:
void unbound_callback(std::shared_ptr<UnboundQuery> query, int err, ub_result* result);
void handleUBSocketReadable(boost::system::error_code);
void processData();
private:
IDNConverter* idnConverter;
std::shared_ptr<EventOwner> eventOwner;
std::shared_ptr<boost::asio::io_service> ioService;
boost::asio::posix::stream_descriptor ubDescriptior;
EventLoop* eventLoop;
ub_ctx* ubContext;
};
}