diff options
Diffstat (limited to 'Swiften/FileTransfer/SOCKS5BytestreamServerManager.h')
-rw-r--r-- | Swiften/FileTransfer/SOCKS5BytestreamServerManager.h | 23 |
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_; }; } |