diff options
15 files changed, 81 insertions, 38 deletions
| diff --git a/Swiften/Examples/NetworkTool/main.cpp b/Swiften/Examples/NetworkTool/main.cpp index 4ac7e6a..10a0aa6 100644 --- a/Swiften/Examples/NetworkTool/main.cpp +++ b/Swiften/Examples/NetworkTool/main.cpp @@ -58,7 +58,7 @@ int main(int argc, char* argv[]) {  	if (std::string(argv[1]) == "get-public-ip") {  		boost::shared_ptr<NATTraversalGetPublicIPRequest> query = natTraverser.createGetPublicIPRequest();  		query->onResult.connect(boost::bind(&handleGetPublicIPRequestResponse, _1)); -		query->run(); +		query->start();  		eventLoop.run();  	}  	else if (std::string(argv[1]) == "add-port-forward") { @@ -67,7 +67,7 @@ int main(int argc, char* argv[]) {  		}  		boost::shared_ptr<NATTraversalForwardPortRequest> query = natTraverser.createForwardPortRequest(boost::lexical_cast<int>(argv[2]), boost::lexical_cast<int>(argv[3]));  		query->onResult.connect(boost::bind(&handleGetForwardPortRequestResponse, _1)); -		query->run(); +		query->start();  		eventLoop.run();  	}  	else if (std::string(argv[1]) == "remove-port-forward") { @@ -76,7 +76,7 @@ int main(int argc, char* argv[]) {  		}  		boost::shared_ptr<NATTraversalRemovePortForwardingRequest> query = natTraverser.createRemovePortForwardingRequest(boost::lexical_cast<int>(argv[2]), boost::lexical_cast<int>(argv[3]));  		query->onResult.connect(boost::bind(&handleRemovePortForwardingRequestResponse, _1)); -		query->run(); +		query->start();  		eventLoop.run();  	}  	else if (std::string(argv[1]) == "get-local-ip") { diff --git a/Swiften/FileTransfer/ConnectivityManager.cpp b/Swiften/FileTransfer/ConnectivityManager.cpp index 7d25991..5ed500c 100644 --- a/Swiften/FileTransfer/ConnectivityManager.cpp +++ b/Swiften/FileTransfer/ConnectivityManager.cpp @@ -34,13 +34,13 @@ void ConnectivityManager::addListeningPort(int port) {  	boost::shared_ptr<NATTraversalGetPublicIPRequest> getIPRequest = natTraversalWorker->createGetPublicIPRequest();  	if (getIPRequest) {  		getIPRequest->onResult.connect(boost::bind(&ConnectivityManager::natTraversalGetPublicIPResult, this, _1)); -		getIPRequest->run(); +		getIPRequest->start();  	}  	boost::shared_ptr<NATTraversalForwardPortRequest> forwardPortRequest = natTraversalWorker->createForwardPortRequest(port, port);  	if (forwardPortRequest) {  		forwardPortRequest->onResult.connect(boost::bind(&ConnectivityManager::natTraversalForwardPortResult, this, _1)); -		forwardPortRequest->run(); +		forwardPortRequest->start();  	}  } @@ -49,7 +49,7 @@ void ConnectivityManager::removeListeningPort(int port) {  	ports.erase(port);  	boost::shared_ptr<NATTraversalRemovePortForwardingRequest> removePortForwardingRequest = natTraversalWorker->createRemovePortForwardingRequest(port, port);  	if (removePortForwardingRequest) { -		removePortForwardingRequest->run(); +		removePortForwardingRequest->start();  	}  } diff --git a/Swiften/FileTransfer/DefaultLocalJingleTransportCandidateGenerator.cpp b/Swiften/FileTransfer/DefaultLocalJingleTransportCandidateGenerator.cpp index 4b205cb..988be7b 100644 --- a/Swiften/FileTransfer/DefaultLocalJingleTransportCandidateGenerator.cpp +++ b/Swiften/FileTransfer/DefaultLocalJingleTransportCandidateGenerator.cpp @@ -27,7 +27,7 @@ DefaultLocalJingleTransportCandidateGenerator::DefaultLocalJingleTransportCandid  DefaultLocalJingleTransportCandidateGenerator::~DefaultLocalJingleTransportCandidateGenerator() {  } -void DefaultLocalJingleTransportCandidateGenerator::generateLocalTransportCandidates(JingleTransportPayload::ref transportPayload) { +void DefaultLocalJingleTransportCandidateGenerator::start(JingleTransportPayload::ref transportPayload) {  	if (boost::dynamic_pointer_cast<JingleIBBTransportPayload>(transportPayload)) {  		JingleTransportPayload::ref payL = boost::make_shared<JingleTransportPayload>();  		payL->setSessionID(transportPayload->getSessionID()); @@ -83,6 +83,9 @@ void DefaultLocalJingleTransportCandidateGenerator::generateLocalTransportCandid  } +void DefaultLocalJingleTransportCandidateGenerator::stop() { +} +  bool DefaultLocalJingleTransportCandidateGenerator::isActualCandidate(JingleTransportPayload::ref transportPayload) {  	if (!transportPayload.get()) return false;  	return false; diff --git a/Swiften/FileTransfer/DefaultLocalJingleTransportCandidateGenerator.h b/Swiften/FileTransfer/DefaultLocalJingleTransportCandidateGenerator.h index 7d45491..b729d0d 100644 --- a/Swiften/FileTransfer/DefaultLocalJingleTransportCandidateGenerator.h +++ b/Swiften/FileTransfer/DefaultLocalJingleTransportCandidateGenerator.h @@ -22,7 +22,8 @@ public:  	DefaultLocalJingleTransportCandidateGenerator(ConnectivityManager* connectivityManager, SOCKS5BytestreamRegistry* s5bRegistry, SOCKS5BytestreamProxy* s5bProxy, JID& ownJID);  	virtual ~DefaultLocalJingleTransportCandidateGenerator(); -	virtual void generateLocalTransportCandidates(JingleTransportPayload::ref); +	virtual void start(JingleTransportPayload::ref); +	virtual void stop();  	virtual bool isActualCandidate(JingleTransportPayload::ref);  	virtual int getPriority(JingleTransportPayload::ref); diff --git a/Swiften/FileTransfer/IncomingJingleFileTransfer.cpp b/Swiften/FileTransfer/IncomingJingleFileTransfer.cpp index c462381..0d576ac 100644 --- a/Swiften/FileTransfer/IncomingJingleFileTransfer.cpp +++ b/Swiften/FileTransfer/IncomingJingleFileTransfer.cpp @@ -112,7 +112,7 @@ void IncomingJingleFileTransfer::accept(WriteBytestream::ref stream) {  		candidateSelector->addRemoteTransportCandidates(s5bTransport);  		candidateSelector->setRequesterTarget(session->getInitiator(), ourJID);  		s5bTransport->setSessionID(s5bSessionID); -		candidateGenerator->generateLocalTransportCandidates(s5bTransport); +		candidateGenerator->start(s5bTransport);  	}  	else {  		assert(false); diff --git a/Swiften/FileTransfer/LocalJingleTransportCandidateGenerator.h b/Swiften/FileTransfer/LocalJingleTransportCandidateGenerator.h index 14c128a..474b01d 100644 --- a/Swiften/FileTransfer/LocalJingleTransportCandidateGenerator.h +++ b/Swiften/FileTransfer/LocalJingleTransportCandidateGenerator.h @@ -16,10 +16,12 @@ namespace Swift {  	class SWIFTEN_API LocalJingleTransportCandidateGenerator {  		public:  			virtual ~LocalJingleTransportCandidateGenerator(); +  			/**  			* Should call onLocalTransportCandidatesGenerated if it has finished discovering local candidates.  			*/ -			virtual void generateLocalTransportCandidates(JingleTransportPayload::ref) = 0; +			virtual void start(JingleTransportPayload::ref) = 0; +			virtual void stop() = 0;  			virtual bool isActualCandidate(JingleTransportPayload::ref) = 0;  			virtual int getPriority(JingleTransportPayload::ref) = 0; diff --git a/Swiften/FileTransfer/OutgoingJingleFileTransfer.cpp b/Swiften/FileTransfer/OutgoingJingleFileTransfer.cpp index 4da70ef..8229a2f 100644 --- a/Swiften/FileTransfer/OutgoingJingleFileTransfer.cpp +++ b/Swiften/FileTransfer/OutgoingJingleFileTransfer.cpp @@ -54,7 +54,8 @@ OutgoingJingleFileTransfer::OutgoingJingleFileTransfer(JingleSession::ref sessio  	filename = fileInfo.getName();  	localCandidateGenerator = localFactory->createCandidateGenerator(); -	localCandidateGenerator->onLocalTransportCandidatesGenerated.connect(boost::bind(&OutgoingJingleFileTransfer::handleLocalTransportCandidatesGenerated, this, _1)); +	localCandidateGenerator->onLocalTransportCandidatesGenerated.connect( +			boost::bind(&OutgoingJingleFileTransfer::handleLocalTransportCandidatesGenerated, this, _1));  	remoteCandidateSelector = remoteFactory->createCandidateSelector();  	remoteCandidateSelector->onRemoteTransportCandidateSelectFinished.connect(boost::bind(&OutgoingJingleFileTransfer::handleRemoteTransportCandidateSelectFinished, this, _1)); @@ -77,7 +78,7 @@ void OutgoingJingleFileTransfer::start() {  	//s5bProxy->connectToProxies(s5bSessionID);  	JingleS5BTransportPayload::ref transport = boost::make_shared<JingleS5BTransportPayload>(); -	localCandidateGenerator->generateLocalTransportCandidates(transport); +	localCandidateGenerator->start(transport);  }  void OutgoingJingleFileTransfer::stop() { diff --git a/Swiften/FileTransfer/UnitTest/IncomingJingleFileTransferTest.cpp b/Swiften/FileTransfer/UnitTest/IncomingJingleFileTransferTest.cpp index 4c6ae72..9d180a0 100644 --- a/Swiften/FileTransfer/UnitTest/IncomingJingleFileTransferTest.cpp +++ b/Swiften/FileTransfer/UnitTest/IncomingJingleFileTransferTest.cpp @@ -10,6 +10,7 @@  #include <boost/smart_ptr/make_shared.hpp>  #include <Swiften/Base/ByteArray.h> +#include <Swiften/Base/Override.h>  #include <Swiften/Base/Log.h>  #include <Swiften/Client/DummyStanzaChannel.h>  #include <Swiften/Elements/IBB.h> @@ -80,12 +81,6 @@ public:  class FakeLocalJingleTransportCandidateGenerator : public LocalJingleTransportCandidateGenerator {  public: -	virtual void generateLocalTransportCandidates(JingleTransportPayload::ref payload) { -		JingleS5BTransportPayload::ref payL = make_shared<JingleS5BTransportPayload>(); -		payL->setSessionID(payload->getSessionID()); -		onLocalTransportCandidatesGenerated(payL); -	} -  	void emitonLocalTransportCandidatesGenerated(JingleTransportPayload::ref payload) {  		onLocalTransportCandidatesGenerated(payload);  	} @@ -101,6 +96,14 @@ public:  	virtual JingleTransport::ref selectTransport(JingleTransportPayload::ref) {  		return JingleTransport::ref();  	} + +	virtual void start(JingleTransportPayload::ref payload) SWIFTEN_OVERRIDE { +		JingleS5BTransportPayload::ref payL = make_shared<JingleS5BTransportPayload>(); +		payL->setSessionID(payload->getSessionID()); +		onLocalTransportCandidatesGenerated(payL); +	} + +	virtual void stop() SWIFTEN_OVERRIDE {}  };  class FakeLocalJingleTransportCandidateGeneratorFactory : public LocalJingleTransportCandidateGeneratorFactory { diff --git a/Swiften/FileTransfer/UnitTest/OutgoingJingleFileTransferTest.cpp b/Swiften/FileTransfer/UnitTest/OutgoingJingleFileTransferTest.cpp index 0c324bf..73b496a 100644 --- a/Swiften/FileTransfer/UnitTest/OutgoingJingleFileTransferTest.cpp +++ b/Swiften/FileTransfer/UnitTest/OutgoingJingleFileTransferTest.cpp @@ -28,6 +28,7 @@  #include <Swiften/Elements/JingleFileTransferDescription.h>  #include <Swiften/Elements/IBB.h>  #include <Swiften/Base/ByteArray.h> +#include <Swiften/Base/Override.h>  #include <Swiften/Base/IDGenerator.h>  #include <Swiften/EventLoop/DummyEventLoop.h>  #include <Swiften/Network/PlatformNATTraversalWorker.h> @@ -87,14 +88,6 @@ public:  class OFakeLocalJingleTransportCandidateGenerator : public LocalJingleTransportCandidateGenerator {  public: -	virtual void generateLocalTransportCandidates(JingleTransportPayload::ref /* payload */) { -		//JingleTransportPayload::ref payL = make_shared<JingleTransportPayload>(); -		//payL->setSessionID(payload->getSessionID()); -		JingleS5BTransportPayload::ref payL = boost::make_shared<JingleS5BTransportPayload>(); - -		onLocalTransportCandidatesGenerated(payL); -	} -  	void emitonLocalTransportCandidatesGenerated(JingleTransportPayload::ref payload) {  		onLocalTransportCandidatesGenerated(payload);  	} @@ -110,6 +103,16 @@ public:  	virtual JingleTransport::ref selectTransport(JingleTransportPayload::ref) {  		return JingleTransport::ref();  	} + +	virtual void start(JingleTransportPayload::ref /* payload */) SWIFTEN_OVERRIDE { +		//JingleTransportPayload::ref payL = make_shared<JingleTransportPayload>(); +		//payL->setSessionID(payload->getSessionID()); +		JingleS5BTransportPayload::ref payL = boost::make_shared<JingleS5BTransportPayload>(); + +		onLocalTransportCandidatesGenerated(payL); +	} + +	virtual void stop() SWIFTEN_OVERRIDE {}  };  class OFakeLocalJingleTransportCandidateGeneratorFactory : public LocalJingleTransportCandidateGeneratorFactory { diff --git a/Swiften/Network/NATTraversalForwardPortRequest.h b/Swiften/Network/NATTraversalForwardPortRequest.h index 35b23c4..48f85ea 100644 --- a/Swiften/Network/NATTraversalForwardPortRequest.h +++ b/Swiften/Network/NATTraversalForwardPortRequest.h @@ -16,7 +16,8 @@ namespace Swift {  		public:  			virtual ~NATTraversalForwardPortRequest(); -			virtual void run() = 0; +			virtual void start() = 0; +			virtual void stop() = 0;  			boost::signal<void (boost::optional<NATPortMapping>)> onResult;  	}; diff --git a/Swiften/Network/NATTraversalGetPublicIPRequest.h b/Swiften/Network/NATTraversalGetPublicIPRequest.h index db1f005..1270db3 100644 --- a/Swiften/Network/NATTraversalGetPublicIPRequest.h +++ b/Swiften/Network/NATTraversalGetPublicIPRequest.h @@ -14,7 +14,8 @@ namespace Swift {  		public:  			virtual ~NATTraversalGetPublicIPRequest(); -			virtual void run() = 0; +			virtual void start() = 0; +			virtual void stop() = 0;  			boost::signal<void (boost::optional<HostAddress>)> onResult;  	}; diff --git a/Swiften/Network/NATTraversalRemovePortForwardingRequest.h b/Swiften/Network/NATTraversalRemovePortForwardingRequest.h index c82ae03..210cbcb 100644 --- a/Swiften/Network/NATTraversalRemovePortForwardingRequest.h +++ b/Swiften/Network/NATTraversalRemovePortForwardingRequest.h @@ -27,7 +27,8 @@ namespace Swift {  		public:  			virtual ~NATTraversalRemovePortForwardingRequest(); -			virtual void run() = 0; +			virtual void start() = 0; +			virtual void stop() = 0;  			boost::signal<void (boost::optional<bool> /* failure */)> onResult;  	}; diff --git a/Swiften/Network/NullNATTraverser.cpp b/Swiften/Network/NullNATTraverser.cpp index 8cb35cd..43fcd08 100644 --- a/Swiften/Network/NullNATTraverser.cpp +++ b/Swiften/Network/NullNATTraverser.cpp @@ -21,10 +21,13 @@ class NullNATTraversalGetPublicIPRequest : public NATTraversalGetPublicIPRequest  		NullNATTraversalGetPublicIPRequest(EventLoop* eventLoop) : eventLoop(eventLoop) {  		} -		virtual void run() { +		virtual void start() {  			eventLoop->postEvent(boost::bind(boost::ref(onResult), boost::optional<HostAddress>()));  		} +		virtual void stop() { +		} +  	private:  		EventLoop* eventLoop;  }; @@ -34,10 +37,13 @@ class NullNATTraversalForwardPortRequest : public NATTraversalForwardPortRequest  		NullNATTraversalForwardPortRequest(EventLoop* eventLoop) : eventLoop(eventLoop) {  		} -		virtual void run() { +		virtual void start() {  			eventLoop->postEvent(boost::bind(boost::ref(onResult), boost::optional<NATPortMapping>()));  		} +		virtual void stop() { +		} +  	private:  		EventLoop* eventLoop;  }; @@ -47,10 +53,13 @@ class NullNATTraversalRemovePortForwardingRequest : public NATTraversalRemovePor  		NullNATTraversalRemovePortForwardingRequest(EventLoop* eventLoop) : eventLoop(eventLoop) {  		} -		virtual void run() { +		virtual void start() {  			eventLoop->postEvent(boost::bind(boost::ref(onResult), boost::optional<bool>(true)));  		} +		virtual void stop() { +		} +  	private:  		EventLoop* eventLoop;  }; diff --git a/Swiften/Network/PlatformNATTraversalWorker.cpp b/Swiften/Network/PlatformNATTraversalWorker.cpp index eeecb38..40d6da6 100644 --- a/Swiften/Network/PlatformNATTraversalWorker.cpp +++ b/Swiften/Network/PlatformNATTraversalWorker.cpp @@ -50,10 +50,14 @@ class PlatformNATTraversalGetPublicIPRequest : public NATTraversalGetPublicIPReq  		PlatformNATTraversalGetPublicIPRequest(PlatformNATTraversalWorker* worker) : PlatformNATTraversalRequest(worker) {  		} -		virtual void run() { +		virtual void start() {  			doRun();  		} +		virtual void stop() { +			// TODO +		} +  		virtual void runBlocking() {  			onResult(getNATTraversalInterface()->getPublicIP());  		} @@ -64,10 +68,14 @@ class PlatformNATTraversalForwardPortRequest : public NATTraversalForwardPortReq  		PlatformNATTraversalForwardPortRequest(PlatformNATTraversalWorker* worker, unsigned int localIP, unsigned int publicIP) : PlatformNATTraversalRequest(worker), localIP(localIP), publicIP(publicIP) {  		} -		virtual void run() { +		virtual void start() {  			doRun();  		} +		virtual void stop() { +			// TODO +		} +  		virtual void runBlocking() {  			onResult(getNATTraversalInterface()->addPortForward(boost::numeric_cast<int>(localIP), boost::numeric_cast<int>(publicIP)));  		} @@ -82,10 +90,14 @@ class PlatformNATTraversalRemovePortForwardingRequest : public NATTraversalRemov  		PlatformNATTraversalRemovePortForwardingRequest(PlatformNATTraversalWorker* worker, const NATPortMapping& mapping) : PlatformNATTraversalRequest(worker), mapping(mapping) {  		} -		virtual void run() { +		virtual void start() {  			doRun();  		} +		virtual void stop() { +			// TODO +		} +  		virtual void runBlocking() {  			onResult(getNATTraversalInterface()->removePortForward(mapping));  		} @@ -96,7 +108,8 @@ class PlatformNATTraversalRemovePortForwardingRequest : public NATTraversalRemov  PlatformNATTraversalWorker::PlatformNATTraversalWorker(EventLoop* eventLoop) : eventLoop(eventLoop), stopRequested(false), natPMPSupported(boost::logic::indeterminate), natPMPInterface(NULL), miniUPnPSupported(boost::logic::indeterminate), miniUPnPInterface(NULL) {  	nullNATTraversalInterface = new NullNATTraversalInterface(); -	thread = new boost::thread(boost::bind(&PlatformNATTraversalWorker::run, this)); +	// FIXME: This should be done from start(), and the current start() should be an internal method +	thread = new boost::thread(boost::bind(&PlatformNATTraversalWorker::start, this));  }  PlatformNATTraversalWorker::~PlatformNATTraversalWorker() { @@ -143,7 +156,7 @@ boost::shared_ptr<NATTraversalRemovePortForwardingRequest> PlatformNATTraversalW  	return boost::make_shared<PlatformNATTraversalRemovePortForwardingRequest>(this, mapping);  } -void PlatformNATTraversalWorker::run() { +void PlatformNATTraversalWorker::start() {  	while (!stopRequested) {  		PlatformNATTraversalRequest::ref request;  		{ @@ -162,6 +175,10 @@ void PlatformNATTraversalWorker::run() {  	}  } +void PlatformNATTraversalWorker::stop() { +	// TODO +} +  void PlatformNATTraversalWorker::addRequestToQueue(PlatformNATTraversalRequest::ref request) {  	{  		boost::lock_guard<boost::mutex> lock(queueMutex); diff --git a/Swiften/Network/PlatformNATTraversalWorker.h b/Swiften/Network/PlatformNATTraversalWorker.h index 8060e31..6148705 100644 --- a/Swiften/Network/PlatformNATTraversalWorker.h +++ b/Swiften/Network/PlatformNATTraversalWorker.h @@ -43,7 +43,8 @@ namespace Swift {  		private:  			NATTraversalInterface* getNATTraversalInterface() const;  			void addRequestToQueue(boost::shared_ptr<PlatformNATTraversalRequest>); -			void run(); +			void start(); +			void stop();  		private:  			EventLoop* eventLoop; | 
 Swift
 Swift