From 26e34e9888e4c523741a659055d469c828909cc6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Remko=20Tron=C3=A7on?= <git@el-tramo.be>
Date: Fri, 30 Sep 2011 23:22:15 +0200
Subject: Moved SOCKS5BytestreamProxyFinder to Swiften.


diff --git a/Swift/Controllers/FileTransfer/SOCKS5BytestreamProxyFinder.cpp b/Swift/Controllers/FileTransfer/SOCKS5BytestreamProxyFinder.cpp
deleted file mode 100644
index da0606c..0000000
--- a/Swift/Controllers/FileTransfer/SOCKS5BytestreamProxyFinder.cpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 2011 Tobias Markmann
- * Licensed under the simplified BSD license.
- * See Documentation/Licenses/BSD-simplified.txt for more information.
- */
-
-#include "SOCKS5BytestreamProxyFinder.h"
-
-#include <boost/smart_ptr/make_shared.hpp>
-#include <boost/bind.hpp>
-
-#include <Swiften/Base/Log.h>
-#include <Swiften/Elements/S5BProxyRequest.h>
-#include <Swiften/Queries/GenericRequest.h>
-#include <Swiften/Queries/IQRouter.h>
-
-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));
-}
-
-void SOCKS5BytestreamProxyFinder::start() {
-	serviceWalker->beginWalk();
-}
-
-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);
-	request->onResponse.connect(boost::bind(&SOCKS5BytestreamProxyFinder::handleProxyResponse, this, _1, _2));
-	request->send();
-}
-
-void SOCKS5BytestreamProxyFinder::handleServiceFound(const JID& jid, boost::shared_ptr<DiscoInfo> discoInfo) {
-	if (discoInfo->hasFeature(DiscoInfo::Bytestream)) {
-		sendBytestreamQuery(jid);
-	}
-}
-
-void SOCKS5BytestreamProxyFinder::handleProxyResponse(boost::shared_ptr<S5BProxyRequest> request, ErrorPayload::ref error) {
-	if (error) {
-		SWIFT_LOG(debug) << "ERROR" << std::endl;
-	} else {
-		if (request) {
-			onProxyFound(request);
-		} else {
-			//assert(false);
-		}
-	}
-}
-
-}
diff --git a/Swift/Controllers/FileTransfer/SOCKS5BytestreamProxyFinder.h b/Swift/Controllers/FileTransfer/SOCKS5BytestreamProxyFinder.h
deleted file mode 100644
index bffc7a1..0000000
--- a/Swift/Controllers/FileTransfer/SOCKS5BytestreamProxyFinder.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 2011 Tobias Markmann
- * Licensed under the simplified BSD license.
- * See Documentation/Licenses/BSD-simplified.txt for more information.
- */
-
-#pragma once
-
-#include <boost/shared_ptr.hpp>
-
-#include <Swiften/Disco/DiscoServiceWalker.h>
-#include <Swiften/Network/HostAddressPort.h>
-#include <Swiften/Elements/S5BProxyRequest.h>
-
-namespace Swift {
-
-class JID;
-class IQRouter;
-
-class SOCKS5BytestreamProxyFinder {
-public:
-	SOCKS5BytestreamProxyFinder(const JID& service, IQRouter *iqRouter);
-	void start();
-
-	boost::signal<void(boost::shared_ptr<S5BProxyRequest>)> onProxyFound;
-
-private:
-	void sendBytestreamQuery(const JID&);
-
-	void handleServiceFound(const JID&, boost::shared_ptr<DiscoInfo>);
-	void handleProxyResponse(boost::shared_ptr<S5BProxyRequest>, ErrorPayload::ref);
-private:
-	boost::shared_ptr<DiscoServiceWalker> serviceWalker;
-	IQRouter* iqRouter;
-	std::vector<boost::shared_ptr<GenericRequest<S5BProxyRequest> > > requests;
-};
-
-}
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/Swiften/FileTransfer/SOCKS5BytestreamProxyFinder.cpp b/Swiften/FileTransfer/SOCKS5BytestreamProxyFinder.cpp
new file mode 100644
index 0000000..9d7505b
--- /dev/null
+++ b/Swiften/FileTransfer/SOCKS5BytestreamProxyFinder.cpp
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2011 Tobias Markmann
+ * Licensed under the simplified BSD license.
+ * See Documentation/Licenses/BSD-simplified.txt for more information.
+ */
+
+#include <Swiften/FileTransfer/SOCKS5BytestreamProxyFinder.h>
+
+#include <boost/smart_ptr/make_shared.hpp>
+#include <boost/bind.hpp>
+
+#include <Swiften/Base/Log.h>
+#include <Swiften/Elements/S5BProxyRequest.h>
+#include <Swiften/Queries/GenericRequest.h>
+#include <Swiften/Queries/IQRouter.h>
+
+namespace Swift {
+
+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);
+	request->onResponse.connect(boost::bind(&SOCKS5BytestreamProxyFinder::handleProxyResponse, this, _1, _2));
+	request->send();
+}
+
+void SOCKS5BytestreamProxyFinder::handleServiceFound(const JID& jid, boost::shared_ptr<DiscoInfo> discoInfo) {
+	if (discoInfo->hasFeature(DiscoInfo::Bytestream)) {
+		sendBytestreamQuery(jid);
+	}
+}
+
+void SOCKS5BytestreamProxyFinder::handleProxyResponse(boost::shared_ptr<S5BProxyRequest> request, ErrorPayload::ref error) {
+	if (error) {
+		SWIFT_LOG(debug) << "ERROR" << std::endl;
+	} else {
+		if (request) {
+			onProxyFound(request);
+		} else {
+			//assert(false);
+		}
+	}
+}
+
+}
diff --git a/Swiften/FileTransfer/SOCKS5BytestreamProxyFinder.h b/Swiften/FileTransfer/SOCKS5BytestreamProxyFinder.h
new file mode 100644
index 0000000..071e03a
--- /dev/null
+++ b/Swiften/FileTransfer/SOCKS5BytestreamProxyFinder.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2011 Tobias Markmann
+ * Licensed under the simplified BSD license.
+ * See Documentation/Licenses/BSD-simplified.txt for more information.
+ */
+
+#pragma once
+
+#include <boost/shared_ptr.hpp>
+
+#include <Swiften/Disco/DiscoServiceWalker.h>
+#include <Swiften/Network/HostAddressPort.h>
+#include <Swiften/Elements/S5BProxyRequest.h>
+
+namespace Swift {
+
+class JID;
+class IQRouter;
+
+class SOCKS5BytestreamProxyFinder {
+public:
+	SOCKS5BytestreamProxyFinder(const JID& service, IQRouter *iqRouter);
+	~SOCKS5BytestreamProxyFinder();
+
+	void start();
+	void stop();
+
+	boost::signal<void(boost::shared_ptr<S5BProxyRequest>)> onProxyFound;
+
+private:
+	void sendBytestreamQuery(const JID&);
+
+	void handleServiceFound(const JID&, boost::shared_ptr<DiscoInfo>);
+	void handleProxyResponse(boost::shared_ptr<S5BProxyRequest>, ErrorPayload::ref);
+private:
+	JID service;
+	IQRouter* iqRouter;
+	boost::shared_ptr<DiscoServiceWalker> serviceWalker;
+	std::vector<boost::shared_ptr<GenericRequest<S5BProxyRequest> > > requests;
+};
+
+}
-- 
cgit v0.10.2-6-g49f6