| Index: third_party/twisted_8_1/twisted/conch/ssh/forwarding.py
|
| diff --git a/third_party/twisted_8_1/twisted/conch/ssh/forwarding.py b/third_party/twisted_8_1/twisted/conch/ssh/forwarding.py
|
| deleted file mode 100644
|
| index 25dcb5b72a48401c66e217bd7210b414208ae88b..0000000000000000000000000000000000000000
|
| --- a/third_party/twisted_8_1/twisted/conch/ssh/forwarding.py
|
| +++ /dev/null
|
| @@ -1,181 +0,0 @@
|
| -# Copyright (c) 2001-2004 Twisted Matrix Laboratories.
|
| -# See LICENSE for details.
|
| -
|
| -#
|
| -
|
| -"""
|
| -This module contains the implementation of the TCP forwarding, which allows
|
| -clients and servers to forward arbitrary TCP data across the connection.
|
| -
|
| -Maintainer: U{Paul Swartz<mailto:z3p@twistedmatrix.com>}
|
| -"""
|
| -
|
| -import struct
|
| -
|
| -from twisted.internet import protocol, reactor
|
| -from twisted.python import log
|
| -
|
| -import common, channel
|
| -
|
| -class SSHListenForwardingFactory(protocol.Factory):
|
| - def __init__(self, connection, hostport, klass):
|
| - self.conn = connection
|
| - self.hostport = hostport # tuple
|
| - self.klass = klass
|
| -
|
| - def buildProtocol(self, addr):
|
| - channel = self.klass(conn = self.conn)
|
| - client = SSHForwardingClient(channel)
|
| - channel.client = client
|
| - addrTuple = (addr.host, addr.port)
|
| - channelOpenData = packOpen_direct_tcpip(self.hostport, addrTuple)
|
| - self.conn.openChannel(channel, channelOpenData)
|
| - return client
|
| -
|
| -class SSHListenForwardingChannel(channel.SSHChannel):
|
| -
|
| - def channelOpen(self, specificData):
|
| - log.msg('opened forwarding channel %s' % self.id)
|
| - if len(self.client.buf)>1:
|
| - b = self.client.buf[1:]
|
| - self.write(b)
|
| - self.client.buf = ''
|
| -
|
| - def openFailed(self, reason):
|
| - self.closed()
|
| -
|
| - def dataReceived(self, data):
|
| - self.client.transport.write(data)
|
| -
|
| - def eofReceived(self):
|
| - self.client.transport.loseConnection()
|
| -
|
| - def closed(self):
|
| - if hasattr(self, 'client'):
|
| - log.msg('closing local forwarding channel %s' % self.id)
|
| - self.client.transport.loseConnection()
|
| - del self.client
|
| -
|
| -class SSHListenClientForwardingChannel(SSHListenForwardingChannel):
|
| -
|
| - name = 'direct-tcpip'
|
| -
|
| -class SSHListenServerForwardingChannel(SSHListenForwardingChannel):
|
| -
|
| - name = 'forwarded-tcpip'
|
| -
|
| -class SSHConnectForwardingChannel(channel.SSHChannel):
|
| -
|
| - def __init__(self, hostport, *args, **kw):
|
| - channel.SSHChannel.__init__(self, *args, **kw)
|
| - self.hostport = hostport
|
| - self.client = None
|
| - self.clientBuf = ''
|
| -
|
| - def channelOpen(self, specificData):
|
| - cc = protocol.ClientCreator(reactor, SSHForwardingClient, self)
|
| - log.msg("connecting to %s:%i" % self.hostport)
|
| - cc.connectTCP(*self.hostport).addCallbacks(self._setClient, self._close)
|
| -
|
| - def _setClient(self, client):
|
| - self.client = client
|
| - log.msg("connected to %s:%i" % self.hostport)
|
| - if self.clientBuf:
|
| - self.client.transport.write(self.clientBuf)
|
| - self.clientBuf = None
|
| - if self.client.buf[1:]:
|
| - self.write(self.client.buf[1:])
|
| - self.client.buf = ''
|
| -
|
| - def _close(self, reason):
|
| - log.msg("failed to connect: %s" % reason)
|
| - self.loseConnection()
|
| -
|
| - def dataReceived(self, data):
|
| - if self.client:
|
| - self.client.transport.write(data)
|
| - else:
|
| - self.clientBuf += data
|
| -
|
| - def closed(self):
|
| - if self.client:
|
| - log.msg('closed remote forwarding channel %s' % self.id)
|
| - if self.client.channel:
|
| - self.loseConnection()
|
| - self.client.transport.loseConnection()
|
| - del self.client
|
| -
|
| -def openConnectForwardingClient(remoteWindow, remoteMaxPacket, data, avatar):
|
| - remoteHP, origHP = unpackOpen_direct_tcpip(data)
|
| - return SSHConnectForwardingChannel(remoteHP,
|
| - remoteWindow=remoteWindow,
|
| - remoteMaxPacket=remoteMaxPacket,
|
| - avatar=avatar)
|
| -
|
| -class SSHForwardingClient(protocol.Protocol):
|
| -
|
| - def __init__(self, channel):
|
| - self.channel = channel
|
| - self.buf = '\000'
|
| -
|
| - def dataReceived(self, data):
|
| - if self.buf:
|
| - self.buf += data
|
| - else:
|
| - self.channel.write(data)
|
| -
|
| - def connectionLost(self, reason):
|
| - if self.channel:
|
| - self.channel.loseConnection()
|
| - self.channel = None
|
| -
|
| -
|
| -def packOpen_direct_tcpip((connHost, connPort), (origHost, origPort)):
|
| - """Pack the data suitable for sending in a CHANNEL_OPEN packet.
|
| - """
|
| - conn = common.NS(connHost) + struct.pack('>L', connPort)
|
| - orig = common.NS(origHost) + struct.pack('>L', origPort)
|
| - return conn + orig
|
| -
|
| -packOpen_forwarded_tcpip = packOpen_direct_tcpip
|
| -
|
| -def unpackOpen_direct_tcpip(data):
|
| - """Unpack the data to a usable format.
|
| - """
|
| - connHost, rest = common.getNS(data)
|
| - connPort = int(struct.unpack('>L', rest[:4])[0])
|
| - origHost, rest = common.getNS(rest[4:])
|
| - origPort = int(struct.unpack('>L', rest[:4])[0])
|
| - return (connHost, connPort), (origHost, origPort)
|
| -
|
| -unpackOpen_forwarded_tcpip = unpackOpen_direct_tcpip
|
| -
|
| -def packGlobal_tcpip_forward((host, port)):
|
| - return common.NS(host) + struct.pack('>L', port)
|
| -
|
| -def unpackGlobal_tcpip_forward(data):
|
| - host, rest = common.getNS(data)
|
| - port = int(struct.unpack('>L', rest[:4])[0])
|
| - return host, port
|
| -
|
| -"""This is how the data -> eof -> close stuff /should/ work.
|
| -
|
| -debug3: channel 1: waiting for connection
|
| -debug1: channel 1: connected
|
| -debug1: channel 1: read<=0 rfd 7 len 0
|
| -debug1: channel 1: read failed
|
| -debug1: channel 1: close_read
|
| -debug1: channel 1: input open -> drain
|
| -debug1: channel 1: ibuf empty
|
| -debug1: channel 1: send eof
|
| -debug1: channel 1: input drain -> closed
|
| -debug1: channel 1: rcvd eof
|
| -debug1: channel 1: output open -> drain
|
| -debug1: channel 1: obuf empty
|
| -debug1: channel 1: close_write
|
| -debug1: channel 1: output drain -> closed
|
| -debug1: channel 1: rcvd close
|
| -debug3: channel 1: will not send data after close
|
| -debug1: channel 1: send close
|
| -debug1: channel 1: is dead
|
| -"""
|
|
|