Ignore:
Timestamp:
Apr 22, 2009, 4:50:28 PM (13 years ago)
Author:
Ralph Meijer <ralphm@…>
Branch:
default
Convert:
svn:b33ecbfc-034c-dc11-8662-000475d9059e/trunk@167
Message:

Implement server-to-server dialback protocol and stream management.

Author: ralphm.
Fixes #33.

This also abstracts the concept of a client factory that fires a deferred.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • wokkel/client.py

    r42 r55  
    1212
    1313from twisted.application import service
    14 from twisted.internet import defer, protocol, reactor
     14from twisted.internet import reactor
    1515from twisted.names.srvconnect import SRVConnector
    1616from twisted.words.protocols.jabber import client, sasl, xmlstream
    1717
    18 try:
    19     from twisted.words.xish.xmlstream import BootstrapMixin
    20 except ImportError:
    21     from wokkel.compat import BootstrapMixin
    22 
    23 from wokkel.subprotocols import StreamManager, XMPPHandler
     18from wokkel import generic
     19from wokkel.subprotocols import StreamManager
    2420
    2521class CheckAuthInitializer(object):
     
    128124
    129125
    130 class DeferredClientFactory(BootstrapMixin, protocol.ClientFactory):
    131     protocol = xmlstream.XmlStream
     126class DeferredClientFactory(generic.DeferredXmlStreamFactory):
    132127
    133128    def __init__(self, jid, password):
    134         BootstrapMixin.__init__(self)
    135 
    136         self.jid = jid
    137         self.password = password
    138 
    139         deferred = defer.Deferred()
    140         self.deferred = deferred
    141         self.addBootstrap(xmlstream.INIT_FAILED_EVENT, deferred.errback)
    142 
    143         class ConnectionInitializedHandler(XMPPHandler):
    144             def connectionInitialized(self):
    145                 deferred.callback(None)
    146 
    147         self.streamManager = StreamManager(self)
    148         self.addHandler(ConnectionInitializedHandler())
    149 
    150 
    151     def buildProtocol(self, addr):
    152         """
    153         Create an instance of XmlStream.
    154 
    155         A new authenticator instance will be created and passed to the new
    156         XmlStream. Registered bootstrap event observers are installed as well.
    157         """
    158         self.authenticator = client.XMPPAuthenticator(self.jid, self.password)
    159         xs = self.protocol(self.authenticator)
    160         xs.factory = self
    161         self.installBootstraps(xs)
    162         return xs
    163 
    164 
    165     def clientConnectionFailed(self, connector, reason):
    166         self.deferred.errback(reason)
     129        authenticator = client.XMPPAuthenticator(jid, password)
     130        generic.DeferredXmlStreamFactory.__init__(self, authenticator)
    167131
    168132
     
    181145
    182146
     147
    183148def clientCreator(factory):
    184     domain = factory.jid.host
     149    domain = factory.authenticator.jid.host
    185150    c = SRVConnector(reactor, 'xmpp-client', domain, factory)
    186151    c.connect()
Note: See TracChangeset for help on using the changeset viewer.