[X2Go-Commits] python-x2go.git - build-baikal (branch) updated: 98bc65e33b9f0a92d8be038482c919d7d87819d5
X2Go dev team
git-admin at x2go.org
Wed Jan 8 15:29:36 CET 2014
The branch, build-baikal has been updated
via 98bc65e33b9f0a92d8be038482c919d7d87819d5 (commit)
from 9687ed3c223ea8ce2f0f79229a2233adc927536c (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
-----------------------------------------------------------------------
Summary of changes:
x2go/backends/proxy/base.py | 18 ++++++++++++------
x2go/forward.py | 37 +++++++++++++++++++++++++++----------
2 files changed, 39 insertions(+), 16 deletions(-)
The diff of changes is:
diff --git a/x2go/backends/proxy/base.py b/x2go/backends/proxy/base.py
index d193e60..d11b68c 100644
--- a/x2go/backends/proxy/base.py
+++ b/x2go/backends/proxy/base.py
@@ -36,6 +36,7 @@ import cStringIO
# Python X2go modules
import x2go.forward as forward
import x2go.log as log
+import x2go.x2go_exceptions as x2go_exceptions
from x2go.defaults import X2GOCLIENT_OS as _X2GOCLIENT_OS
if _X2GOCLIENT_OS in ("Windows"):
@@ -158,15 +159,20 @@ class X2goProxyBASE(threading.Thread):
pass
local_graphics_port = self.session_info.graphics_port
- while self.fw_tunnel is None:
- self.fw_tunnel = forward.start_forward_tunnel(local_port=local_graphics_port, remote_port=self.session_info.graphics_port, ssh_transport=self.ssh_transport, logger=self.logger, )
+ count = 0
+ # we will try to bind to 50 different local ports, if that fails, we are lost...
+ while self.fw_tunnel is None and count < 50:
+ self.fw_tunnel = forward.start_forward_tunnel(local_port=local_graphics_port + count, remote_port=self.session_info.graphics_port, ssh_transport=self.ssh_transport, logger=self.logger, )
if self.fw_tunnel is None:
- self.logger('socket [localhost]:%s is in use, trying local TCP/IP socket port: [localhost]:%s' % (local_graphics_port, local_graphics_port+1), loglevel=log.loglevel_INFO)
- local_graphics_port += 1
- time.sleep(.5)
+ self.logger('socket [localhost]:%s is in use, trying local TCP/IP socket port: [localhost]:%s' % (local_graphics_port + count, local_graphics_port + count +1), loglevel=log.loglevel_INFO)
+ count += 1
+ time.sleep(.2)
+
+ if count == 50:
+ raise x2go_exceptions.X2goFwTunnelException('local socket bind for forwarding tunnel failed, there are probably too many open connections')
# update the proxy port in PROXY_ARGS
- self._update_local_proxy_socket(local_graphics_port)
+ self._update_local_proxy_socket(local_graphics_port + count)
cmd_line = self._generate_cmdline()
# resume sessions needs a fraction of time for the forward_tunnel to be created...
diff --git a/x2go/forward.py b/x2go/forward.py
index df4a8a9..0fafa8d 100644
--- a/x2go/forward.py
+++ b/x2go/forward.py
@@ -73,8 +73,21 @@ class X2goFwServer(StreamServer):
self.chain_port = remote_port
self.ssh_transport = ssh_transport
+ self._get_channel()
StreamServer.__init__(self, listener, self.x2go_forward_tunnel_handle)
+ def _get_channel(self):
+
+ try:
+ self.chan = self.ssh_transport.open_channel('direct-tcpip',
+ (self.chain_host, self.chain_port),
+ self.ssh_transport.getpeername())
+ except Exception, e:
+ self.logger('incoming request to %s:%d failed: %s' % (self.chain_host,
+ self.chain_port,
+ repr(e)), loglevel=log.loglevel_ERROR)
+ raise x2go_exceptions.X2goFwTunnelException('forwarding tunnel setup failed')
+
def x2go_forward_tunnel_handle(self, fw_socket, address):
"""\
Handle for SSH/Paramiko forwarding tunnel.
@@ -85,15 +98,14 @@ class X2goFwServer(StreamServer):
@type address: C{tuple}
"""
+
+ if self.chan is None:
+
+ self._get_channel()
+
try:
- self.chan = self.ssh_transport.open_channel('direct-tcpip',
- (self.chain_host, self.chain_port),
- fw_socket.getpeername())
chan_peername = self.chan.getpeername()
except Exception, e:
- self.logger('incoming request to %s:%d failed: %s' % (self.chain_host,
- self.chain_port,
- repr(e)), loglevel=log.loglevel_ERROR)
raise x2go_exceptions.X2goFwTunnelException('forwarding tunnel setup failed')
if self.chan is None:
@@ -155,13 +167,18 @@ def start_forward_tunnel(local_host='localhost', local_port=22022,
@rtype: C{instance}
"""
- fw_server = X2goFwServer((local_host, local_port), remote_host, remote_port, ssh_transport, logger=logger)
try:
- fw_server.start()
- return fw_server
- except socket.error:
+ fw_server = X2goFwServer((local_host, local_port), remote_host, remote_port, ssh_transport, logger=logger)
+ try:
+ fw_server.start()
+ return fw_server
+ except socket.error:
+ pass
+ except x2go_exceptions.X2goFwTunnelException:
pass
+ return None
+
def stop_forward_tunnel(fw_server):
"""\
hooks/post-receive
--
python-x2go.git (Python X2Go Client API)
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "python-x2go.git" (Python X2Go Client API).
More information about the x2go-commits
mailing list