| Index: third_party/twisted_8_1/twisted/words/protocols/jabber/component.py | 
| diff --git a/third_party/twisted_8_1/twisted/words/protocols/jabber/component.py b/third_party/twisted_8_1/twisted/words/protocols/jabber/component.py | 
| deleted file mode 100644 | 
| index c6be76c52a291dd76d407245320dc0ae4585279f..0000000000000000000000000000000000000000 | 
| --- a/third_party/twisted_8_1/twisted/words/protocols/jabber/component.py | 
| +++ /dev/null | 
| @@ -1,229 +0,0 @@ | 
| -# -*- test-case-name: twisted.words.test.test_jabbercomponent -*- | 
| -# | 
| -# Copyright (c) 2001-2007 Twisted Matrix Laboratories. | 
| -# See LICENSE for details. | 
| - | 
| -""" | 
| -External server-side components. | 
| - | 
| -Most Jabber server implementations allow for add-on components that act as a | 
| -seperate entity on the Jabber network, but use the server-to-server | 
| -functionality of a regular Jabber IM server. These so-called 'external | 
| -components' are connected to the Jabber server using the Jabber Component | 
| -Protocol as defined in U{JEP-0114<http://www.jabber.org/jeps/jep-0114.html>}. | 
| - | 
| -This module allows for writing external server-side component by assigning one | 
| -or more services implementing L{ijabber.IService} up to L{ServiceManager}. The | 
| -ServiceManager connects to the Jabber server and is responsible for the | 
| -corresponding XML stream. | 
| -""" | 
| - | 
| -from zope.interface import implements | 
| - | 
| -from twisted.application import service | 
| -from twisted.internet import defer | 
| -from twisted.words.xish import domish | 
| -from twisted.words.protocols.jabber import ijabber, jstrports, xmlstream | 
| - | 
| -def componentFactory(componentid, password): | 
| -    """ | 
| -    XML stream factory for external server-side components. | 
| - | 
| -    @param componentid: JID of the component. | 
| -    @type componentid: L{unicode} | 
| -    @param password: password used to authenticate to the server. | 
| -    @type password: L{str} | 
| -    """ | 
| -    a = ConnectComponentAuthenticator(componentid, password) | 
| -    return xmlstream.XmlStreamFactory(a) | 
| - | 
| -class ComponentInitiatingInitializer(object): | 
| -    """ | 
| -    External server-side component authentication initializer for the | 
| -    initiating entity. | 
| - | 
| -    @ivar xmlstream: XML stream between server and component. | 
| -    @type xmlstream: L{xmlstream.XmlStream} | 
| -    """ | 
| - | 
| -    def __init__(self, xs): | 
| -        self.xmlstream = xs | 
| -        self._deferred = None | 
| - | 
| -    def initialize(self): | 
| -        xs = self.xmlstream | 
| -        hs = domish.Element((self.xmlstream.namespace, "handshake")) | 
| -        hs.addContent(xmlstream.hashPassword(xs.sid, | 
| -                                             xs.authenticator.password)) | 
| - | 
| -        # Setup observer to watch for handshake result | 
| -        xs.addOnetimeObserver("/handshake", self._cbHandshake) | 
| -        xs.send(hs) | 
| -        self._deferred = defer.Deferred() | 
| -        return self._deferred | 
| - | 
| -    def _cbHandshake(self, _): | 
| -        # we have successfully shaken hands and can now consider this | 
| -        # entity to represent the component JID. | 
| -        self.xmlstream.thisEntity = self.xmlstream.otherEntity | 
| -        self._deferred.callback(None) | 
| - | 
| -class ConnectComponentAuthenticator(xmlstream.ConnectAuthenticator): | 
| -    """ | 
| -    Authenticator to permit an XmlStream to authenticate against a Jabber | 
| -    server as an external component (where the Authenticator is initiating the | 
| -    stream). | 
| -    """ | 
| -    namespace = 'jabber:component:accept' | 
| - | 
| -    def __init__(self, componentjid, password): | 
| -        """ | 
| -        @type componentjid: L{str} | 
| -        @param componentjid: Jabber ID that this component wishes to bind to. | 
| - | 
| -        @type password: L{str} | 
| -        @param password: Password/secret this component uses to authenticate. | 
| -        """ | 
| -        # Note that we are sending 'to' our desired component JID. | 
| -        xmlstream.ConnectAuthenticator.__init__(self, componentjid) | 
| -        self.password = password | 
| - | 
| -    def associateWithStream(self, xs): | 
| -        xs.version = (0, 0) | 
| -        xmlstream.ConnectAuthenticator.associateWithStream(self, xs) | 
| - | 
| -        xs.initializers = [ComponentInitiatingInitializer(xs)] | 
| - | 
| -class ListenComponentAuthenticator(xmlstream.Authenticator): | 
| -    """ | 
| -    Placeholder for listening components. | 
| -    """ | 
| - | 
| -class Service(service.Service): | 
| -    """ | 
| -    External server-side component service. | 
| -    """ | 
| - | 
| -    implements(ijabber.IService) | 
| - | 
| -    def componentConnected(self, xs): | 
| -        pass | 
| - | 
| -    def componentDisconnected(self): | 
| -        pass | 
| - | 
| -    def transportConnected(self, xs): | 
| -        pass | 
| - | 
| -    def send(self, obj): | 
| -        """ | 
| -        Send data over service parent's XML stream. | 
| - | 
| -        @note: L{ServiceManager} maintains a queue for data sent using this | 
| -        method when there is no current established XML stream. This data is | 
| -        then sent as soon as a new stream has been established and initialized. | 
| -        Subsequently, L{componentConnected} will be called again. If this | 
| -        queueing is not desired, use C{send} on the XmlStream object (passed to | 
| -        L{componentConnected}) directly. | 
| - | 
| -        @param obj: data to be sent over the XML stream. This is usually an | 
| -        object providing L{domish.IElement}, or serialized XML. See | 
| -        L{xmlstream.XmlStream} for details. | 
| -        """ | 
| - | 
| -        self.parent.send(obj) | 
| - | 
| -class ServiceManager(service.MultiService): | 
| -    """ | 
| -    Business logic representing a managed component connection to a Jabber | 
| -    router. | 
| - | 
| -    This service maintains a single connection to a Jabber router and provides | 
| -    facilities for packet routing and transmission. Business logic modules are | 
| -    services implementing L{ijabber.IService} (like subclasses of L{Service}), and | 
| -    added as sub-service. | 
| -    """ | 
| - | 
| -    def __init__(self, jid, password): | 
| -        service.MultiService.__init__(self) | 
| - | 
| -        # Setup defaults | 
| -        self.jabberId = jid | 
| -        self.xmlstream = None | 
| - | 
| -        # Internal buffer of packets | 
| -        self._packetQueue = [] | 
| - | 
| -        # Setup the xmlstream factory | 
| -        self._xsFactory = componentFactory(self.jabberId, password) | 
| - | 
| -        # Register some lambda functions to keep the self.xmlstream var up to | 
| -        # date | 
| -        self._xsFactory.addBootstrap(xmlstream.STREAM_CONNECTED_EVENT, | 
| -                                     self._connected) | 
| -        self._xsFactory.addBootstrap(xmlstream.STREAM_AUTHD_EVENT, self._authd) | 
| -        self._xsFactory.addBootstrap(xmlstream.STREAM_END_EVENT, | 
| -                                     self._disconnected) | 
| - | 
| -        # Map addBootstrap and removeBootstrap to the underlying factory -- is | 
| -        # this right? I have no clue...but it'll work for now, until i can | 
| -        # think about it more. | 
| -        self.addBootstrap = self._xsFactory.addBootstrap | 
| -        self.removeBootstrap = self._xsFactory.removeBootstrap | 
| - | 
| -    def getFactory(self): | 
| -        return self._xsFactory | 
| - | 
| -    def _connected(self, xs): | 
| -        self.xmlstream = xs | 
| -        for c in self: | 
| -            if ijabber.IService.providedBy(c): | 
| -                c.transportConnected(xs) | 
| - | 
| -    def _authd(self, xs): | 
| -        # Flush all pending packets | 
| -        for p in self._packetQueue: | 
| -            self.xmlstream.send(p) | 
| -        self._packetQueue = [] | 
| - | 
| -        # Notify all child services which implement the IService interface | 
| -        for c in self: | 
| -            if ijabber.IService.providedBy(c): | 
| -                c.componentConnected(xs) | 
| - | 
| -    def _disconnected(self, _): | 
| -        self.xmlstream = None | 
| - | 
| -        # Notify all child services which implement | 
| -        # the IService interface | 
| -        for c in self: | 
| -            if ijabber.IService.providedBy(c): | 
| -                c.componentDisconnected() | 
| - | 
| -    def send(self, obj): | 
| -        """ | 
| -        Send data over the XML stream. | 
| - | 
| -        When there is no established XML stream, the data is queued and sent | 
| -        out when a new XML stream has been established and initialized. | 
| - | 
| -        @param obj: data to be sent over the XML stream. This is usually an | 
| -        object providing L{domish.IElement}, or serialized XML. See | 
| -        L{xmlstream.XmlStream} for details. | 
| -        """ | 
| - | 
| -        if self.xmlstream != None: | 
| -            self.xmlstream.send(obj) | 
| -        else: | 
| -            self._packetQueue.append(obj) | 
| - | 
| -def buildServiceManager(jid, password, strport): | 
| -    """ | 
| -    Constructs a pre-built L{ServiceManager}, using the specified strport | 
| -    string. | 
| -    """ | 
| - | 
| -    svc = ServiceManager(jid, password) | 
| -    client_svc = jstrports.client(strport, svc.getFactory()) | 
| -    client_svc.setServiceParent(svc) | 
| -    return svc | 
|  |