summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swiften/FileTransfer/SOCKS5BytestreamServerManager.h')
-rw-r--r--Swiften/FileTransfer/SOCKS5BytestreamServerManager.h23
1 files changed, 20 insertions, 3 deletions
diff --git a/Swiften/FileTransfer/SOCKS5BytestreamServerManager.h b/Swiften/FileTransfer/SOCKS5BytestreamServerManager.h
index abb28b0..e8a43f9 100644
--- a/Swiften/FileTransfer/SOCKS5BytestreamServerManager.h
+++ b/Swiften/FileTransfer/SOCKS5BytestreamServerManager.h
@@ -8,6 +8,7 @@
#include <vector>
#include <boost/shared_ptr.hpp>
+#include <boost/weak_ptr.hpp>
#include <Swiften/Base/boost_bsignals.h>
#include <Swiften/Network/HostAddressPort.h>
@@ -22,10 +23,14 @@ namespace Swift {
class SOCKS5BytestreamRegistry;
class ConnectionServerFactory;
class ConnectionServer;
- class SOCKS5BytestreamServerInitializeRequest;
class SOCKS5BytestreamServer;
+ class SOCKS5BytestreamServerResourceUser;
+ class SOCKS5BytestreamServerPortForwardingUser;
class SOCKS5BytestreamServerManager {
+ friend class SOCKS5BytestreamServerResourceUser;
+ friend class SOCKS5BytestreamServerPortForwardingUser;
+
public:
SOCKS5BytestreamServerManager(
SOCKS5BytestreamRegistry* bytestreamRegistry,
@@ -34,7 +39,9 @@ namespace Swift {
NATTraverser* natTraverser);
~SOCKS5BytestreamServerManager();
- boost::shared_ptr<SOCKS5BytestreamServerInitializeRequest> createInitializeRequest();
+ boost::shared_ptr<SOCKS5BytestreamServerResourceUser> aquireResourceUser();
+ boost::shared_ptr<SOCKS5BytestreamServerPortForwardingUser> aquirePortForwardingUser();
+
void stop();
std::vector<HostAddressPort> getHostAddressPorts() const;
@@ -47,6 +54,11 @@ namespace Swift {
private:
bool isInitialized() const;
void initialize();
+
+ bool isPortForwardingReady() const;
+ void setupPortForwarding();
+ void removePortForwarding();
+
void checkInitializeFinished();
void handleGetPublicIPResult(boost::optional<HostAddress> address);
@@ -54,7 +66,7 @@ namespace Swift {
void handleUnforwardPortResult(boost::optional<bool> result);
boost::signal<void (bool /* success */)> onInitialized;
-
+ boost::signal<void (bool /* success */)> onPortForwardingSetup;
private:
friend class SOCKS5BytestreamServerInitializeRequest;
@@ -66,11 +78,16 @@ namespace Swift {
SOCKS5BytestreamServer* server;
boost::shared_ptr<ConnectionServer> connectionServer;
int connectionServerPort;
+
boost::shared_ptr<NATTraversalGetPublicIPRequest> getPublicIPRequest;
boost::shared_ptr<NATTraversalForwardPortRequest> forwardPortRequest;
boost::shared_ptr<NATTraversalRemovePortForwardingRequest> unforwardPortRequest;
boost::optional<HostAddress> publicAddress;
boost::optional<NATPortMapping> portMapping;
+ bool attemptedPortMapping_;
+
+ boost::weak_ptr<SOCKS5BytestreamServerResourceUser> s5bServerResourceUser_;
+ boost::weak_ptr<SOCKS5BytestreamServerPortForwardingUser> s5bServerPortForwardingUser_;
};
}