summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Swift/Controllers/MainController.cpp8
-rw-r--r--Swift/Controllers/MainController.h2
-rw-r--r--Swift/Controllers/SConscript1
-rw-r--r--Swiften/FileTransfer/FileTransferManager.h1
-rw-r--r--Swiften/FileTransfer/FileTransferManagerImpl.cpp12
-rw-r--r--Swiften/FileTransfer/FileTransferManagerImpl.h105
-rw-r--r--Swiften/FileTransfer/SConscript1
-rw-r--r--Swiften/FileTransfer/SOCKS5BytestreamProxyFinder.cpp (renamed from Swift/Controllers/FileTransfer/SOCKS5BytestreamProxyFinder.cpp)17
-rw-r--r--Swiften/FileTransfer/SOCKS5BytestreamProxyFinder.h (renamed from Swift/Controllers/FileTransfer/SOCKS5BytestreamProxyFinder.h)6
9 files changed, 83 insertions, 70 deletions
diff --git a/Swift/Controllers/MainController.cpp b/Swift/Controllers/MainController.cpp
index ce5b6ed..364dd57 100644
--- a/Swift/Controllers/MainController.cpp
+++ b/Swift/Controllers/MainController.cpp
@@ -121,7 +121,6 @@ MainController::MainController(
userSearchControllerAdd_ = NULL;
quitRequested_ = false;
clientInitialized_ = false;
- s5bProxyFinder_ = NULL;
timeBeforeNextReconnect_ = -1;
dock_ = dock;
@@ -219,8 +218,6 @@ void MainController::resetClient() {
eventWindowController_ = NULL;
delete chatsManager_;
chatsManager_ = NULL;
- delete s5bProxyFinder_;
- s5bProxyFinder_ = NULL;
delete ftOverview_;
ftOverview_ = NULL;
delete rosterController_;
@@ -285,11 +282,6 @@ void MainController::handleConnected() {
srand(time(NULL));
int randomPort = 10000 + rand() % 10000;
client_->getFileTransferManager()->startListeningOnPort(randomPort);
-#ifdef SWIFT_EXPERIMENTAL_FT
- s5bProxyFinder_ = new SOCKS5BytestreamProxyFinder(client_->getJID().getDomain(), client_->getIQRouter());
- s5bProxyFinder_->onProxyFound.connect(boost::bind(&FileTransferManager::addS5BProxy, client_->getFileTransferManager(), _1));
- s5bProxyFinder_->start();
-#endif
ftOverview_ = new FileTransferOverview(client_->getFileTransferManager());
fileTransferListController_->setFileTransferOverview(ftOverview_);
rosterController_ = new RosterController(jid_, client_->getRoster(), client_->getAvatarManager(), uiFactory_, client_->getNickManager(), client_->getNickResolver(), client_->getPresenceOracle(), client_->getSubscriptionManager(), eventController_, uiEventStream_, client_->getIQRouter(), settings_, client_->getEntityCapsProvider(), ftOverview_);
diff --git a/Swift/Controllers/MainController.h b/Swift/Controllers/MainController.h
index 2aaa542..12028d7 100644
--- a/Swift/Controllers/MainController.h
+++ b/Swift/Controllers/MainController.h
@@ -23,7 +23,6 @@
#include "Swiften/Elements/CapsInfo.h"
#include "Swift/Controllers/XMPPEvents/ErrorEvent.h"
#include "Swift/Controllers/UIEvents/UIEvent.h"
-#include "Swift/Controllers/FileTransfer/SOCKS5BytestreamProxyFinder.h"
#include "Swiften/Client/ClientXMLTracer.h"
namespace Swift {
@@ -168,6 +167,5 @@ namespace Swift {
static const int SecondsToWaitBeforeForceQuitting;
bool eagleMode_;
FileTransferOverview* ftOverview_;
- SOCKS5BytestreamProxyFinder* s5bProxyFinder_;
};
}
diff --git a/Swift/Controllers/SConscript b/Swift/Controllers/SConscript
index 03dc0b7..e48f382 100644
--- a/Swift/Controllers/SConscript
+++ b/Swift/Controllers/SConscript
@@ -33,7 +33,6 @@ if env["SCONS_STAGE"] == "build" :
"FileTransfer/FileTransferController.cpp",
"FileTransfer/FileTransferOverview.cpp",
"FileTransfer/FileTransferProgressInfo.cpp",
- "FileTransfer/SOCKS5BytestreamProxyFinder.cpp",
"Roster/RosterController.cpp",
"Roster/RosterGroupExpandinessPersister.cpp",
"Roster/ContactRosterItem.cpp",
diff --git a/Swiften/FileTransfer/FileTransferManager.h b/Swiften/FileTransfer/FileTransferManager.h
index 3a1628f..d59f029 100644
--- a/Swiften/FileTransfer/FileTransferManager.h
+++ b/Swiften/FileTransfer/FileTransferManager.h
@@ -24,7 +24,6 @@ namespace Swift {
virtual ~FileTransferManager();
virtual void startListeningOnPort(int port) = 0;
- virtual void addS5BProxy(boost::shared_ptr<S5BProxyRequest> proxy) = 0;
virtual OutgoingFileTransfer::ref createOutgoingFileTransfer(const JID& to, const boost::filesystem::path& filepath, const std::string& description, boost::shared_ptr<ReadBytestream> bytestream) = 0;
virtual OutgoingFileTransfer::ref createOutgoingFileTransfer(const JID& to, const std::string& filename, const std::string& description, const boost::uintmax_t sizeInBytes, const boost::posix_time::ptime& lastModified, boost::shared_ptr<ReadBytestream> bytestream) = 0;
diff --git a/Swiften/FileTransfer/FileTransferManagerImpl.cpp b/Swiften/FileTransfer/FileTransferManagerImpl.cpp
index 445c7f0..83320b2 100644
--- a/Swiften/FileTransfer/FileTransferManagerImpl.cpp
+++ b/Swiften/FileTransfer/FileTransferManagerImpl.cpp
@@ -13,6 +13,7 @@
#include "Swiften/Disco/EntityCapsProvider.h"
#include <Swiften/JID/JID.h>
#include <Swiften/Elements/StreamInitiationFileInfo.h>
+#include <Swiften/FileTransfer/SOCKS5BytestreamProxyFinder.h>
#include <Swiften/FileTransfer/ConnectivityManager.h>
#include <Swiften/FileTransfer/OutgoingFileTransferManager.h>
#include <Swiften/FileTransfer/IncomingFileTransferManager.h>
@@ -30,7 +31,7 @@
namespace Swift {
-FileTransferManagerImpl::FileTransferManagerImpl(const JID& ownFullJID, JingleSessionManager* jingleSessionManager, IQRouter* router, EntityCapsProvider* capsProvider, PresenceOracle* presOracle, ConnectionFactory* connectionFactory, ConnectionServerFactory* connectionServerFactory, TimerFactory* timerFactory, NATTraverser* natTraverser) : ownJID(ownFullJID), jingleSM(jingleSessionManager), iqRouter(router), capsProvider(capsProvider), presenceOracle(presOracle), timerFactory(timerFactory), connectionFactory(connectionFactory), connectionServerFactory(connectionServerFactory), natTraverser(natTraverser), bytestreamServer(NULL) {
+FileTransferManagerImpl::FileTransferManagerImpl(const JID& ownFullJID, JingleSessionManager* jingleSessionManager, IQRouter* router, EntityCapsProvider* capsProvider, PresenceOracle* presOracle, ConnectionFactory* connectionFactory, ConnectionServerFactory* connectionServerFactory, TimerFactory* timerFactory, NATTraverser* natTraverser) : ownJID(ownFullJID), jingleSM(jingleSessionManager), iqRouter(router), capsProvider(capsProvider), presenceOracle(presOracle), timerFactory(timerFactory), connectionFactory(connectionFactory), connectionServerFactory(connectionServerFactory), natTraverser(natTraverser), bytestreamServer(NULL), s5bProxyFinder(NULL) {
assert(!ownFullJID.isBare());
connectivityManager = new ConnectivityManager(natTraverser);
@@ -45,8 +46,13 @@ FileTransferManagerImpl::FileTransferManagerImpl(const JID& ownFullJID, JingleSe
}
FileTransferManagerImpl::~FileTransferManagerImpl() {
+ if (s5bProxyFinder) {
+ s5bProxyFinder->stop();
+ delete s5bProxyFinder;
+ }
if (bytestreamServer) {
bytestreamServer->stop();
+ delete bytestreamServer;
}
delete incomingFTManager;
delete outgoingFTManager;
@@ -63,6 +69,10 @@ void FileTransferManagerImpl::startListeningOnPort(int port) {
bytestreamServer = new SOCKS5BytestreamServer(server, bytestreamRegistry);
bytestreamServer->start();
connectivityManager->addListeningPort(port);
+
+ s5bProxyFinder = new SOCKS5BytestreamProxyFinder(ownJID.getDomain(), iqRouter);
+ s5bProxyFinder->onProxyFound.connect(boost::bind(&FileTransferManagerImpl::addS5BProxy, this, _1));
+ s5bProxyFinder->start();
}
void FileTransferManagerImpl::addS5BProxy(S5BProxyRequest::ref proxy) {
diff --git a/Swiften/FileTransfer/FileTransferManagerImpl.h b/Swiften/FileTransfer/FileTransferManagerImpl.h
index d1c3786..248b437 100644
--- a/Swiften/FileTransfer/FileTransferManagerImpl.h
+++ b/Swiften/FileTransfer/FileTransferManagerImpl.h
@@ -21,60 +21,61 @@
#include <Swiften/Elements/S5BProxyRequest.h>
namespace Swift {
+ class Client;
+ class ConnectionFactory;
+ class ConnectionServerFactory;
+ class ConnectivityManager;
+ class EntityCapsProvider;
+ class IQRouter;
+ class IncomingFileTransferManager;
+ class JingleSessionManager;
+ class LocalJingleTransportCandidateGeneratorFactory;
+ class OutgoingFileTransferManager;
+ class NATTraverser;
+ class PresenceOracle;
+ class ReadBytestream;
+ class RemoteJingleTransportCandidateSelectorFactory;
+ class SOCKS5BytestreamRegistry;
+ class SOCKS5BytestreamServer;
+ class SOCKS5BytestreamProxy;
+ class TimerFactory;
+ class SOCKS5BytestreamProxyFinder;
-class Client;
-class ConnectionFactory;
-class ConnectionServerFactory;
-class ConnectivityManager;
-class EntityCapsProvider;
-class IQRouter;
-class IncomingFileTransferManager;
-class JingleSessionManager;
-class LocalJingleTransportCandidateGeneratorFactory;
-class OutgoingFileTransferManager;
-class NATTraverser;
-class PresenceOracle;
-class ReadBytestream;
-class RemoteJingleTransportCandidateSelectorFactory;
-class SOCKS5BytestreamRegistry;
-class SOCKS5BytestreamServer;
-class SOCKS5BytestreamProxy;
-class TimerFactory;
+ class FileTransferManagerImpl : public FileTransferManager {
+ public:
+ FileTransferManagerImpl(const JID& ownFullJID, JingleSessionManager* jingleSessionManager, IQRouter* router, EntityCapsProvider* capsProvider, PresenceOracle* presOracle, ConnectionFactory* connectionFactory, ConnectionServerFactory* connectionServerFactory, TimerFactory* timerFactory, NATTraverser* natTraverser);
+ ~FileTransferManagerImpl();
+
+ void startListeningOnPort(int port);
+ void addS5BProxy(S5BProxyRequest::ref proxy);
-class FileTransferManagerImpl : public FileTransferManager {
-public:
- FileTransferManagerImpl(const JID& ownFullJID, JingleSessionManager* jingleSessionManager, IQRouter* router, EntityCapsProvider* capsProvider, PresenceOracle* presOracle, ConnectionFactory* connectionFactory, ConnectionServerFactory* connectionServerFactory, TimerFactory* timerFactory, NATTraverser* natTraverser);
- ~FileTransferManagerImpl();
-
- void startListeningOnPort(int port);
- void addS5BProxy(S5BProxyRequest::ref proxy);
+ OutgoingFileTransfer::ref createOutgoingFileTransfer(const JID& to, const boost::filesystem::path& filepath, const std::string& description, boost::shared_ptr<ReadBytestream> bytestream);
+ OutgoingFileTransfer::ref createOutgoingFileTransfer(const JID& to, const std::string& filename, const std::string& description, const boost::uintmax_t sizeInBytes, const boost::posix_time::ptime& lastModified, boost::shared_ptr<ReadBytestream> bytestream);
+
+ private:
+ boost::optional<JID> highestPriorityJIDSupportingFileTransfer(const JID& bareJID);
+
+ private:
+ JID ownJID;
+
+ OutgoingFileTransferManager* outgoingFTManager;
+ IncomingFileTransferManager* incomingFTManager;
+ RemoteJingleTransportCandidateSelectorFactory* remoteCandidateSelectorFactory;
+ LocalJingleTransportCandidateGeneratorFactory* localCandidateGeneratorFactory;
+ JingleSessionManager* jingleSM;
+ IQRouter* iqRouter;
+ EntityCapsProvider* capsProvider;
+ PresenceOracle* presenceOracle;
- OutgoingFileTransfer::ref createOutgoingFileTransfer(const JID& to, const boost::filesystem::path& filepath, const std::string& description, boost::shared_ptr<ReadBytestream> bytestream);
- OutgoingFileTransfer::ref createOutgoingFileTransfer(const JID& to, const std::string& filename, const std::string& description, const boost::uintmax_t sizeInBytes, const boost::posix_time::ptime& lastModified, boost::shared_ptr<ReadBytestream> bytestream);
-
- private:
- boost::optional<JID> highestPriorityJIDSupportingFileTransfer(const JID& bareJID);
-
-private:
- JID ownJID;
-
- OutgoingFileTransferManager* outgoingFTManager;
- IncomingFileTransferManager* incomingFTManager;
- RemoteJingleTransportCandidateSelectorFactory* remoteCandidateSelectorFactory;
- LocalJingleTransportCandidateGeneratorFactory* localCandidateGeneratorFactory;
- JingleSessionManager* jingleSM;
- IQRouter* iqRouter;
- EntityCapsProvider* capsProvider;
- PresenceOracle* presenceOracle;
-
- TimerFactory* timerFactory;
- ConnectionFactory* connectionFactory;
- ConnectionServerFactory* connectionServerFactory;
- NATTraverser* natTraverser;
- SOCKS5BytestreamRegistry* bytestreamRegistry;
- SOCKS5BytestreamServer* bytestreamServer;
- SOCKS5BytestreamProxy* bytestreamProxy;
- ConnectivityManager* connectivityManager;
-};
+ TimerFactory* timerFactory;
+ ConnectionFactory* connectionFactory;
+ ConnectionServerFactory* connectionServerFactory;
+ NATTraverser* natTraverser;
+ SOCKS5BytestreamRegistry* bytestreamRegistry;
+ SOCKS5BytestreamServer* bytestreamServer;
+ SOCKS5BytestreamProxy* bytestreamProxy;
+ ConnectivityManager* connectivityManager;
+ SOCKS5BytestreamProxyFinder* s5bProxyFinder;
+ };
}
diff --git a/Swiften/FileTransfer/SConscript b/Swiften/FileTransfer/SConscript
index 83e223c..4e79992 100644
--- a/Swiften/FileTransfer/SConscript
+++ b/Swiften/FileTransfer/SConscript
@@ -27,6 +27,7 @@ sources = [
"SOCKS5BytestreamServerSession.cpp",
"SOCKS5BytestreamRegistry.cpp",
"SOCKS5BytestreamProxy.cpp",
+ "SOCKS5BytestreamProxyFinder.cpp",
"IBBSendSession.cpp",
"IBBReceiveSession.cpp",
"FileTransferManager.cpp",
diff --git a/Swift/Controllers/FileTransfer/SOCKS5BytestreamProxyFinder.cpp b/Swiften/FileTransfer/SOCKS5BytestreamProxyFinder.cpp
index da0606c..9d7505b 100644
--- a/Swift/Controllers/FileTransfer/SOCKS5BytestreamProxyFinder.cpp
+++ b/Swiften/FileTransfer/SOCKS5BytestreamProxyFinder.cpp
@@ -4,7 +4,7 @@
* See Documentation/Licenses/BSD-simplified.txt for more information.
*/
-#include "SOCKS5BytestreamProxyFinder.h"
+#include <Swiften/FileTransfer/SOCKS5BytestreamProxyFinder.h>
#include <boost/smart_ptr/make_shared.hpp>
#include <boost/bind.hpp>
@@ -16,15 +16,24 @@
namespace Swift {
-SOCKS5BytestreamProxyFinder::SOCKS5BytestreamProxyFinder(const JID& service, IQRouter *iqRouter) : iqRouter(iqRouter) {
- serviceWalker = boost::make_shared<DiscoServiceWalker>(service, iqRouter);
- serviceWalker->onServiceFound.connect(boost::bind(&SOCKS5BytestreamProxyFinder::handleServiceFound, this, _1, _2));
+SOCKS5BytestreamProxyFinder::SOCKS5BytestreamProxyFinder(const JID& service, IQRouter *iqRouter) : service(service), iqRouter(iqRouter) {
+}
+
+SOCKS5BytestreamProxyFinder::~SOCKS5BytestreamProxyFinder() {
}
void SOCKS5BytestreamProxyFinder::start() {
+ serviceWalker = boost::make_shared<DiscoServiceWalker>(service, iqRouter);
+ serviceWalker->onServiceFound.connect(boost::bind(&SOCKS5BytestreamProxyFinder::handleServiceFound, this, _1, _2));
serviceWalker->beginWalk();
}
+void SOCKS5BytestreamProxyFinder::stop() {
+ serviceWalker->endWalk();
+ serviceWalker->onServiceFound.disconnect(boost::bind(&SOCKS5BytestreamProxyFinder::handleServiceFound, this, _1, _2));
+ serviceWalker.reset();
+}
+
void SOCKS5BytestreamProxyFinder::sendBytestreamQuery(const JID& jid) {
S5BProxyRequest::ref proxyRequest = boost::make_shared<S5BProxyRequest>();
boost::shared_ptr<GenericRequest<S5BProxyRequest> > request = boost::make_shared<GenericRequest<S5BProxyRequest> >(IQ::Get, jid, proxyRequest, iqRouter);
diff --git a/Swift/Controllers/FileTransfer/SOCKS5BytestreamProxyFinder.h b/Swiften/FileTransfer/SOCKS5BytestreamProxyFinder.h
index bffc7a1..071e03a 100644
--- a/Swift/Controllers/FileTransfer/SOCKS5BytestreamProxyFinder.h
+++ b/Swiften/FileTransfer/SOCKS5BytestreamProxyFinder.h
@@ -20,7 +20,10 @@ class IQRouter;
class SOCKS5BytestreamProxyFinder {
public:
SOCKS5BytestreamProxyFinder(const JID& service, IQRouter *iqRouter);
+ ~SOCKS5BytestreamProxyFinder();
+
void start();
+ void stop();
boost::signal<void(boost::shared_ptr<S5BProxyRequest>)> onProxyFound;
@@ -30,8 +33,9 @@ private:
void handleServiceFound(const JID&, boost::shared_ptr<DiscoInfo>);
void handleProxyResponse(boost::shared_ptr<S5BProxyRequest>, ErrorPayload::ref);
private:
- boost::shared_ptr<DiscoServiceWalker> serviceWalker;
+ JID service;
IQRouter* iqRouter;
+ boost::shared_ptr<DiscoServiceWalker> serviceWalker;
std::vector<boost::shared_ptr<GenericRequest<S5BProxyRequest> > > requests;
};