summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemko Tronçon <git@el-tramo.be>2012-12-25 14:39:48 (GMT)
committerRemko Tronçon <git@el-tramo.be>2013-05-11 10:22:56 (GMT)
commit927d62cc54c8a5087dba6b61afa9ad30dc528a23 (patch)
treee67dc911bd30c0519d31a542d8e085bbb209879d /Swiften/FileTransfer/DefaultFileTransferTransporter.h
parent17b188343e7208b875af7af30d94f0bf948f6b93 (diff)
downloadswift-927d62cc54c8a5087dba6b61afa9ad30dc528a23.zip
swift-927d62cc54c8a5087dba6b61afa9ad30dc528a23.tar.bz2
File Transfer refactoring.
Allocate S5B server lazily. Forward forts lazily. Various state machine fixes. Temporarily disabling S5B proxy support. Change-Id: I3145e85a99b15a7e457306bbfbe9c0eb570191e4
Diffstat (limited to 'Swiften/FileTransfer/DefaultFileTransferTransporter.h')
-rw-r--r--Swiften/FileTransfer/DefaultFileTransferTransporter.h102
1 files changed, 102 insertions, 0 deletions
diff --git a/Swiften/FileTransfer/DefaultFileTransferTransporter.h b/Swiften/FileTransfer/DefaultFileTransferTransporter.h
new file mode 100644
index 0000000..ef982c0
--- /dev/null
+++ b/Swiften/FileTransfer/DefaultFileTransferTransporter.h
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2013 Remko Tronçon
+ * Licensed under the GNU General Public License.
+ * See the COPYING file for more information.
+ */
+
+#pragma once
+
+#include <Swiften/Base/Override.h>
+#include <Swiften/Base/API.h>
+#include <Swiften/FileTransfer/FileTransferTransporter.h>
+
+namespace Swift {
+ class LocalJingleTransportCandidateGenerator;
+ class RemoteJingleTransportCandidateSelector;
+ class SOCKS5BytestreamRegistry;
+ class SOCKS5BytestreamServerManager;
+ class SOCKS5BytestreamProxiesManager;
+ class SOCKS5BytestreamClientSession;
+ class SOCKS5BytestreamServerSession;
+ class IDGenerator;
+ class IQRouter;
+ class ReadBytestream;
+ class WriteBytestream;
+ class ConnectionFactory;
+ class TimerFactory;
+ class CryptoProvider;
+
+ class SWIFTEN_API DefaultFileTransferTransporter : public FileTransferTransporter {
+ public:
+ enum Role {
+ Initiator,
+ Responder
+ };
+
+ DefaultFileTransferTransporter(
+ const JID& initiator,
+ const JID& responder,
+ Role role,
+ SOCKS5BytestreamRegistry*,
+ SOCKS5BytestreamServerManager* s5bServerManager,
+ SOCKS5BytestreamProxiesManager* s5bProxy,
+ IDGenerator* idGenerator,
+ ConnectionFactory*,
+ TimerFactory*,
+ CryptoProvider*,
+ IQRouter*);
+ virtual ~DefaultFileTransferTransporter();
+
+
+ virtual void initialize();
+ virtual void initialize(const std::string& s5bSessionID);
+
+ virtual void startGeneratingLocalCandidates() SWIFTEN_OVERRIDE;
+ virtual void stopGeneratingLocalCandidates() SWIFTEN_OVERRIDE;
+
+ virtual void addRemoteCandidates(
+ const std::vector<JingleS5BTransportPayload::Candidate>&) SWIFTEN_OVERRIDE;
+ virtual void startTryingRemoteCandidates() SWIFTEN_OVERRIDE;
+ virtual void stopTryingRemoteCandidates() SWIFTEN_OVERRIDE;
+
+ virtual void startActivatingProxy(const JID& jid);
+ virtual void stopActivatingProxy();
+
+ virtual boost::shared_ptr<TransportSession> createIBBSendSession(
+ const std::string& sessionID, unsigned int blockSize, boost::shared_ptr<ReadBytestream>) SWIFTEN_OVERRIDE;
+ virtual boost::shared_ptr<TransportSession> createIBBReceiveSession(
+ const std::string& sessionID, unsigned long long size, boost::shared_ptr<WriteBytestream>) SWIFTEN_OVERRIDE;
+ virtual boost::shared_ptr<TransportSession> createRemoteCandidateSession(
+ boost::shared_ptr<ReadBytestream>) SWIFTEN_OVERRIDE;
+ virtual boost::shared_ptr<TransportSession> createRemoteCandidateSession(
+ boost::shared_ptr<WriteBytestream>) SWIFTEN_OVERRIDE;
+ virtual boost::shared_ptr<TransportSession> createLocalCandidateSession(
+ boost::shared_ptr<ReadBytestream>) SWIFTEN_OVERRIDE;
+ virtual boost::shared_ptr<TransportSession> createLocalCandidateSession(
+ boost::shared_ptr<WriteBytestream>) SWIFTEN_OVERRIDE;
+
+ private:
+ void handleLocalCandidatesGenerated(const std::vector<JingleS5BTransportPayload::Candidate>&);
+ void handleRemoteCandidateSelectFinished(
+ const boost::optional<JingleS5BTransportPayload::Candidate>&,
+ boost::shared_ptr<SOCKS5BytestreamClientSession>);
+ std::string getSOCKS5DstAddr() const;
+ void closeLocalSession();
+ void closeRemoteSession();
+ boost::shared_ptr<SOCKS5BytestreamServerSession> getServerSession();
+
+ private:
+ JID initiator;
+ JID responder;
+ Role role;
+ SOCKS5BytestreamRegistry* s5bRegistry;
+ SOCKS5BytestreamServerManager* s5bServerManager;
+ CryptoProvider* crypto;
+ IQRouter* router;
+ LocalJingleTransportCandidateGenerator* localCandidateGenerator;
+ RemoteJingleTransportCandidateSelector* remoteCandidateSelector;
+ std::string s5bSessionID;
+ boost::shared_ptr<SOCKS5BytestreamClientSession> remoteS5BClientSession;
+ };
+}
+