diff options
Diffstat (limited to 'src/com/isode/stroke/filetransfer/SOCKS5BytestreamServerPortForwardingUser.java')
-rw-r--r-- | src/com/isode/stroke/filetransfer/SOCKS5BytestreamServerPortForwardingUser.java | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/com/isode/stroke/filetransfer/SOCKS5BytestreamServerPortForwardingUser.java b/src/com/isode/stroke/filetransfer/SOCKS5BytestreamServerPortForwardingUser.java new file mode 100644 index 0000000..dc3c3b7 --- /dev/null +++ b/src/com/isode/stroke/filetransfer/SOCKS5BytestreamServerPortForwardingUser.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2015 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.filetransfer; + +import com.isode.stroke.signals.Slot1; +import com.isode.stroke.signals.Signal1; +import com.isode.stroke.signals.SignalConnection; + +public class SOCKS5BytestreamServerPortForwardingUser { + + private SOCKS5BytestreamServerManager s5bServerManager_; + private SignalConnection onPortForwardingSetupConnection_; + + public SOCKS5BytestreamServerPortForwardingUser(SOCKS5BytestreamServerManager s5bServerManager) { + this.s5bServerManager_ = s5bServerManager; + // the server should be initialized, so we know what port to setup a forward for + assert(s5bServerManager != null); + if (s5bServerManager_.isPortForwardingReady()) { + onSetup.emit(!s5bServerManager_.getAssistedHostAddressPorts().isEmpty()); + } + else { + onPortForwardingSetupConnection_ = s5bServerManager_.onPortForwardingSetup.connect(new Slot1<Boolean>() { + @Override + public void call(Boolean s) { + handleServerManagerPortForwardingSetup(s); + } + }); + s5bServerManager_.setupPortForwarding(); + } + } + + /** + * User should call delete to free the resources. + */ + public void delete() { + if (s5bServerManager_.isPortForwardingReady()) { + s5bServerManager_.removePortForwarding(); + } + } + + protected void finalize() throws Throwable { + try { + delete(); + } + finally { + super.finalize(); + } + } + + public boolean isForwardingSetup() { + return s5bServerManager_.isPortForwardingReady(); + } + + public Signal1<Boolean /* success */> onSetup = new Signal1<Boolean>(); + + private void handleServerManagerPortForwardingSetup(boolean successful) { + onSetup.emit(successful); + } +}
\ No newline at end of file |