/* * Copyright (c) 2013 Remko Tronçon * Licensed under the GNU General Public License. * See the COPYING file for more information. */ #pragma once #include #include #include 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&) 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 createIBBSendSession( const std::string& sessionID, unsigned int blockSize, boost::shared_ptr) SWIFTEN_OVERRIDE; virtual boost::shared_ptr createIBBReceiveSession( const std::string& sessionID, unsigned long long size, boost::shared_ptr) SWIFTEN_OVERRIDE; virtual boost::shared_ptr createRemoteCandidateSession( boost::shared_ptr) SWIFTEN_OVERRIDE; virtual boost::shared_ptr createRemoteCandidateSession( boost::shared_ptr) SWIFTEN_OVERRIDE; virtual boost::shared_ptr createLocalCandidateSession( boost::shared_ptr) SWIFTEN_OVERRIDE; virtual boost::shared_ptr createLocalCandidateSession( boost::shared_ptr) SWIFTEN_OVERRIDE; private: void handleLocalCandidatesGenerated(const std::vector&); void handleRemoteCandidateSelectFinished( const boost::optional&, boost::shared_ptr); std::string getSOCKS5DstAddr() const; void closeLocalSession(); void closeRemoteSession(); boost::shared_ptr 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 remoteS5BClientSession; }; }