diff options
5 files changed, 15 insertions, 6 deletions
diff --git a/Swiften/FileTransfer/SOCKS5BytestreamServerManager.cpp b/Swiften/FileTransfer/SOCKS5BytestreamServerManager.cpp index 43d3e46..3137163 100644 --- a/Swiften/FileTransfer/SOCKS5BytestreamServerManager.cpp +++ b/Swiften/FileTransfer/SOCKS5BytestreamServerManager.cpp @@ -189,12 +189,16 @@ void SOCKS5BytestreamServerManager::stop() { getPublicIPRequest.reset(); } if (forwardPortRequest) { forwardPortRequest->stop(); forwardPortRequest.reset(); } + if (server) { + server->stop(); + server = NULL; + } if (connectionServer) { connectionServer->stop(); connectionServer.reset(); } state = Start; @@ -220,12 +224,13 @@ void SOCKS5BytestreamServerManager::handleForwardPortResult(boost::optional<NATP } else { SWIFT_LOG(debug) << "Mapping port has failed." << std::endl; } portMapping = mapping; + onPortForwardingSetup(mapping.is_initialized()); forwardPortRequest->stop(); forwardPortRequest.reset(); } void SOCKS5BytestreamServerManager::handleUnforwardPortResult(boost::optional<bool> result) { diff --git a/Swiften/FileTransfer/SOCKS5BytestreamServerPortForwardingUser.cpp b/Swiften/FileTransfer/SOCKS5BytestreamServerPortForwardingUser.cpp index 9ab097b..e3b6d34 100644 --- a/Swiften/FileTransfer/SOCKS5BytestreamServerPortForwardingUser.cpp +++ b/Swiften/FileTransfer/SOCKS5BytestreamServerPortForwardingUser.cpp @@ -12,20 +12,22 @@ namespace Swift { SOCKS5BytestreamServerPortForwardingUser::SOCKS5BytestreamServerPortForwardingUser(SOCKS5BytestreamServerManager* s5bServerManager) : s5bServerManager_(s5bServerManager) { // the server should be initialized, so we know what port to setup a forward for assert(s5bServerManager->isInitialized()); - assert(!s5bServerManager_->isPortForwardingReady()); - - s5bServerManager_->onPortForwardingSetup.connect(boost::bind(&SOCKS5BytestreamServerPortForwardingUser::handleServerManagerPortForwardingSetup, this, _1)); - s5bServerManager_->setupPortForwarding(); + if (s5bServerManager_->isPortForwardingReady()) { + onSetup(!s5bServerManager_->getAssistedHostAddressPorts().empty()); + } + else { + onPortForwardingSetupConnection_ = s5bServerManager_->onPortForwardingSetup.connect(boost::bind(&SOCKS5BytestreamServerPortForwardingUser::handleServerManagerPortForwardingSetup, this, _1)); + s5bServerManager_->setupPortForwarding(); + } } SOCKS5BytestreamServerPortForwardingUser::~SOCKS5BytestreamServerPortForwardingUser() { - s5bServerManager_->onPortForwardingSetup.disconnect(boost::bind(&SOCKS5BytestreamServerPortForwardingUser::handleServerManagerPortForwardingSetup, this, _1)); if (s5bServerManager_->isPortForwardingReady()) { s5bServerManager_->removePortForwarding(); } } bool SOCKS5BytestreamServerPortForwardingUser::isForwardingSetup() const { diff --git a/Swiften/FileTransfer/SOCKS5BytestreamServerPortForwardingUser.h b/Swiften/FileTransfer/SOCKS5BytestreamServerPortForwardingUser.h index f486836..c4550d3 100644 --- a/Swiften/FileTransfer/SOCKS5BytestreamServerPortForwardingUser.h +++ b/Swiften/FileTransfer/SOCKS5BytestreamServerPortForwardingUser.h @@ -23,9 +23,10 @@ class SOCKS5BytestreamServerPortForwardingUser { private: void handleServerManagerPortForwardingSetup(bool successful); private: SOCKS5BytestreamServerManager* s5bServerManager_; + boost::bsignals::scoped_connection onPortForwardingSetupConnection_; }; } diff --git a/Swiften/FileTransfer/SOCKS5BytestreamServerResourceUser.cpp b/Swiften/FileTransfer/SOCKS5BytestreamServerResourceUser.cpp index bf7d4e8..b369347 100644 --- a/Swiften/FileTransfer/SOCKS5BytestreamServerResourceUser.cpp +++ b/Swiften/FileTransfer/SOCKS5BytestreamServerResourceUser.cpp @@ -11,13 +11,13 @@ #include <boost/bind.hpp> namespace Swift { SOCKS5BytestreamServerResourceUser::SOCKS5BytestreamServerResourceUser(SOCKS5BytestreamServerManager* s5bServerManager) : s5bServerManager_(s5bServerManager) { assert(!s5bServerManager_->isInitialized()); - s5bServerManager_->onInitialized.connect(boost::bind(&SOCKS5BytestreamServerResourceUser::handleServerManagerInitialized, this, _1)); + onInitializedConnection_ = s5bServerManager_->onInitialized.connect(boost::bind(&SOCKS5BytestreamServerResourceUser::handleServerManagerInitialized, this, _1)); s5bServerManager_->initialize(); } SOCKS5BytestreamServerResourceUser::~SOCKS5BytestreamServerResourceUser() { if (s5bServerManager_->isInitialized()) { s5bServerManager_->stop(); diff --git a/Swiften/FileTransfer/SOCKS5BytestreamServerResourceUser.h b/Swiften/FileTransfer/SOCKS5BytestreamServerResourceUser.h index 014689b..fa7f42c 100644 --- a/Swiften/FileTransfer/SOCKS5BytestreamServerResourceUser.h +++ b/Swiften/FileTransfer/SOCKS5BytestreamServerResourceUser.h @@ -23,9 +23,10 @@ class SOCKS5BytestreamServerResourceUser { private: void handleServerManagerInitialized(bool successfulInitialize); private: SOCKS5BytestreamServerManager* s5bServerManager_; + boost::bsignals::scoped_connection onInitializedConnection_; }; } |