if I don't get complaints about this, it gets checked in and I move on to
shutting down connectors, and so on.
Index: twisted/internet/app.py
===================================================================
RCS file: /cvs/Twisted/twisted/internet/app.py,v
retrieving revision 1.4
diff -c -r1.4 app.py
*** twisted/internet/app.py 13 Dec 2001 07:01:59 -0000 1.4
--- twisted/internet/app.py 24 Dec 2001 14:52:29 -0000
***************
*** 125,130 ****
--- 125,132 ----
self.name = name
# a list of (tcp, ssl, udp) Ports
self.ports = []
+ # a list of (tcp, ssl, udp) Connectors
+ self.connectors = []
# a list of twisted.python.delay.Delayeds
self.delayeds = []
# a list of twisted.internet.passport.Services
***************
*** 152,159 ****
self.lock()
! persistenceVersion = 3
!
def upgradeToVersion3(self):
"""Version 3 Persistence Upgrade
"""
--- 154,166 ----
self.lock()
! persistenceVersion = 4
!
! def upgradeToVersion4(self):
! """Version 4 Persistence Upgrade
! """
! self.connectors = []
!
def upgradeToVersion3(self):
"""Version 3 Persistence Upgrade
"""
***************
*** 235,240 ****
--- 242,266 ----
if self.running:
port.startListening()
+ def connectTCP(self, host, port, factory):
+ """Connect a given client protocol factory to a specific TCP server."""
+ from twisted.internet import tcp
+ self.addConnector(tcp.Connector(host, port, factory))
+
+ def connectSSL(self, host, port, factory, ctxFactory=None):
+ """Connect a given client protocol factory to a specific SSL server."""
+ from twisted.internet import ssl
+ c = ssl.Connector(host, port, factory)
+ if ctxFactory:
+ c.contextFactory = ctxFactory
+ self.addConnector(c)
+
+ def addConnector(self, connector):
+ """Add a connector to this Application."""
+ self.connectors.append(connector)
+ if self.running:
+ connector.startConnecting()
+
def addDelayed(self, delayed):
"""
Adds a twisted.python.delay.Delayed object for execution in my event loop.
***************
*** 326,331 ****
--- 352,359 ----
except socket.error:
print 'port %s already bound' % port.port
return
+ for connector in self.connectors:
+ connector.startConnecting()
for port in self.ports:
port.factory.startFactory()
resolver = self.resolver
Index: twisted/internet/tcp.py
===================================================================
RCS file: /cvs/Twisted/twisted/internet/tcp.py,v
retrieving revision 1.35
diff -c -r1.35 tcp.py
*** twisted/internet/tcp.py 28 Nov 2001 07:17:29 -0000 1.35
--- twisted/internet/tcp.py 24 Dec 2001 14:52:30 -0000
***************
*** 239,251 ****
s = '<%s to %s at %x>' % (self.__class__, self.addr, id(self))
return s
class Connector:
! def __init__(self, host, factory, portno, timeout=30):
self.host = host
self.portno = portno
! self.factory = factory
! self.portno = portno
!
def connectionFailed(self):
self.startConnecting()
--- 239,256 ----
s = '<%s to %s at %x>' % (self.__class__, self.addr, id(self))
return s
+
class Connector:
! """Connect a protocol to a server using TCP and if it fails make a new one."""
!
! transportFactory = Client
!
! def __init__(self, host, portno, protocolFactory, timeout=30):
self.host = host
self.portno = portno
! self.factory = protocolFactory
! self.timeout = timeout
!
def connectionFailed(self):
self.startConnecting()
***************
*** 254,260 ****
def startConnecting(self):
proto = self.factory.buildProtocol((self.host, self.portno))
! Client(self.host, self.portno, proto, 30, self)
--- 259,265 ----
def startConnecting(self):
proto = self.factory.buildProtocol((self.host, self.portno))
! self.transportFactory(self.host, self.portno, proto, self.timeout, self)
Index: twisted/internet/ssl.py
===================================================================
RCS file: /cvs/Twisted/twisted/internet/ssl.py,v
retrieving revision 1.6
diff -c -r1.6 ssl.py
*** twisted/internet/ssl.py 29 Nov 2001 12:20:32 -0000 1.6
--- twisted/internet/ssl.py 24 Dec 2001 14:52:30 -0000
***************
*** 88,96 ****
"""I am an SSL client.
"""
! def __init__(self, host, port, protocol, ctxFactory, timeout=None):
self.ctxFactory = ctxFactory
! apply(tcp.Client.__init__, (self, host, port, protocol), {'timeout': timeout})
def createInternetSocket(self):
"""(internal) create an SSL socket
--- 88,96 ----
"""I am an SSL client.
"""
! def __init__(self, host, port, protocol, ctxFactory, timeout=None, connector=None):
self.ctxFactory = ctxFactory
! apply(tcp.Client.__init__, (self, host, port, protocol), {'timeout': timeout, 'connector': connector})
def createInternetSocket(self):
"""(internal) create an SSL socket
***************
*** 146,148 ****
--- 146,159 ----
protocol.makeConnection(transport, self)
except:
traceback.print_exc(file=log.logfile)
+
+
+ class Connector(tcp.Connector):
+ """Connect a protocol to a server using SSL and if it fails make a new one."""
+
+ transportFactory = Client
+ contextFactory = ClientContextFactory
+
+ def startConnecting(self):
+ proto = self.factory.buildProtocol((self.host, self.portno))
+ self.transportFactory(self.host, self.portno, proto, self.contextFactory, self.timeout, self)