summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swiften/Network/PlatformNATTraversalWorker.cpp')
-rw-r--r--Swiften/Network/PlatformNATTraversalWorker.cpp43
1 files changed, 36 insertions, 7 deletions
diff --git a/Swiften/Network/PlatformNATTraversalWorker.cpp b/Swiften/Network/PlatformNATTraversalWorker.cpp
index c962b3b..133b006 100644
--- a/Swiften/Network/PlatformNATTraversalWorker.cpp
+++ b/Swiften/Network/PlatformNATTraversalWorker.cpp
@@ -8,13 +8,18 @@
#include <boost/smart_ptr/make_shared.hpp>
#include <boost/enable_shared_from_this.hpp>
+#include <boost/numeric/conversion/cast.hpp>
#include <Swiften/Base/Log.h>
#include <Swiften/Network/NATTraversalGetPublicIPRequest.h>
#include <Swiften/Network/NATTraversalForwardPortRequest.h>
#include <Swiften/Network/NATTraversalRemovePortForwardingRequest.h>
+#ifdef HAVE_LIBNATPMP
#include <Swiften/Network/NATPMPInterface.h>
+#endif
+#ifdef HAVE_LIBMINIUPNPC
#include <Swiften/Network/MiniUPnPInterface.h>
+#endif
namespace Swift {
@@ -49,10 +54,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());
}
@@ -63,12 +72,16 @@ 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(localIP, publicIP));
+ onResult(getNATTraversalInterface()->addPortForward(boost::numeric_cast<int>(localIP), boost::numeric_cast<int>(publicIP)));
}
private:
@@ -81,10 +94,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));
}
@@ -95,7 +112,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() {
@@ -103,12 +121,17 @@ PlatformNATTraversalWorker::~PlatformNATTraversalWorker() {
addRequestToQueue(boost::shared_ptr<PlatformNATTraversalRequest>());
thread->join();
delete thread;
+#ifdef HAVE_LIBNATPMP
delete natPMPInterface;
+#endif
+#ifdef HAVE_LIBMINIUPNPC
delete miniUPnPInterface;
+#endif
delete nullNATTraversalInterface;
}
NATTraversalInterface* PlatformNATTraversalWorker::getNATTraversalInterface() const {
+#ifdef HAVE_LIBMINIUPNPC
if (boost::logic::indeterminate(miniUPnPSupported)) {
miniUPnPInterface = new MiniUPnPInterface();
miniUPnPSupported = miniUPnPInterface->isAvailable();
@@ -116,8 +139,9 @@ NATTraversalInterface* PlatformNATTraversalWorker::getNATTraversalInterface() co
if (miniUPnPSupported) {
return miniUPnPInterface;
}
+#endif
-
+#ifdef HAVE_LIBNATPMP
if (boost::logic::indeterminate(natPMPSupported)) {
natPMPInterface = new NATPMPInterface();
natPMPSupported = natPMPInterface->isAvailable();
@@ -125,6 +149,7 @@ NATTraversalInterface* PlatformNATTraversalWorker::getNATTraversalInterface() co
if (natPMPSupported) {
return natPMPInterface;
}
+#endif
return nullNATTraversalInterface;
}
@@ -142,7 +167,7 @@ boost::shared_ptr<NATTraversalRemovePortForwardingRequest> PlatformNATTraversalW
return boost::make_shared<PlatformNATTraversalRemovePortForwardingRequest>(this, mapping);
}
-void PlatformNATTraversalWorker::run() {
+void PlatformNATTraversalWorker::start() {
while (!stopRequested) {
PlatformNATTraversalRequest::ref request;
{
@@ -161,6 +186,10 @@ void PlatformNATTraversalWorker::run() {
}
}
+void PlatformNATTraversalWorker::stop() {
+ // TODO
+}
+
void PlatformNATTraversalWorker::addRequestToQueue(PlatformNATTraversalRequest::ref request) {
{
boost::lock_guard<boost::mutex> lock(queueMutex);