o
    b                     @   sx   d Z ddlmZmZ G dd deZG dd deZG dd deZG d	d
 d
eZG dd deZG dd deZ	dS )z
Public Jabber Interfaces.
    )	Attribute	Interfacec                   @   s   e Zd ZdZdS )IInitializerz
    Interface for XML stream initializers.

    Initializers perform a step in getting the XML stream ready to be
    used for the exchange of XML stanzas.
    N)__name__
__module____qualname____doc__ r	   r	   H/usr/lib/python3/dist-packages/twisted/words/protocols/jabber/ijabber.pyr      s    r   c                   @   s    e Zd ZdZedZdd ZdS )IInitiatingInitializerzJ
    Interface for XML stream initializers for the initiating entity.
    zThe associated XML streamc                   C      dS )z
        Initiate the initialization step.

        May return a deferred when the initialization is done asynchronously.
        Nr	   r	   r	   r	   r
   
initialize       z!IInitiatingInitializer.initializeN)r   r   r   r   r   	xmlstreamr   r	   r	   r	   r
   r      s    r   c                   @   s   e Zd ZdZedZdS )IIQResponseTrackera  
    IQ response tracker interface.

    The XMPP stanza C{iq} has a request-response nature that fits
    naturally with deferreds. You send out a request and when the response
    comes back a deferred is fired.

    The L{twisted.words.protocols.jabber.client.IQ} class implements a C{send}
    method that returns a deferred. This deferred is put in a dictionary that
    is kept in an L{XmlStream} object, keyed by the request stanzas C{id}
    attribute.

    An object providing this interface (usually an instance of L{XmlStream}),
    keeps the said dictionary and sets observers on the iq stanzas of type
    C{result} and C{error} and lets the callback fire the associated deferred.
    z2Dictionary of deferreds waiting for an iq responseN)r   r   r   r   r   iqDeferredsr	   r	   r	   r
   r   #   s    r   c                   @   sP   e Zd ZdZedZedZdd Zdd Zdd	 Z	d
d Z
dd Zdd ZdS )IXMPPHandlerz
    Interface for XMPP protocol handlers.

    Objects that provide this interface can be added to a stream manager to
    handle of (part of) an XMPP extension protocol.
    z#XML stream manager for this handlerzThe managed XML streamc                 C   r   )za
        Set the parent of the handler.

        @type parent: L{IXMPPHandlerCollection}
        Nr	   parentr	   r	   r
   setHandlerParentC   r   zIXMPPHandler.setHandlerParentc                 C   r   )zd
        Remove the parent of the handler.

        @type parent: L{IXMPPHandlerCollection}
        Nr	   r   r	   r	   r
   disownHandlerParentJ   r   z IXMPPHandler.disownHandlerParentc                 C   r   )aj  
        A connection over the underlying transport of the XML stream has been
        established.

        At this point, no traffic has been exchanged over the XML stream
        given in C{xs}.

        This should setup L{xmlstream} and call L{connectionMade}.

        @type xs:
               L{twisted.words.protocols.jabber.xmlstream.XmlStream}
        Nr	   xsr	   r	   r
   makeConnectionQ   r   zIXMPPHandler.makeConnectionc                   C   r   )z
        Called after a connection has been established.

        This method can be used to change properties of the XML Stream, its
        authenticator or the stream manager prior to stream initialization
        (including authentication).
        Nr	   r	   r	   r	   r
   connectionMade_   r   zIXMPPHandler.connectionMadec                   C   r   )a  
        The XML stream has been initialized.

        At this point, authentication was successful, and XML stanzas can be
        exchanged over the XML stream L{xmlstream}. This method can be
        used to setup observers for incoming stanzas.
        Nr	   r	   r	   r	   r
   connectionInitializedh   r   z"IXMPPHandler.connectionInitializedc                 C   r   )z
        The XML stream has been closed.

        Subsequent use of C{parent.send} will result in data being queued
        until a new connection has been established.

        @type reason: L{twisted.python.failure.Failure}
        Nr	   )reasonr	   r	   r
   connectionLostq   r   zIXMPPHandler.connectionLostN)r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r	   r	   r
   r   8   s    		r   c                   @   (   e Zd ZdZdd Zdd Zdd ZdS )	IXMPPHandlerCollectionz\
    Collection of handlers.

    Contain several handlers and manage their connection.
    c                   C   r   )z:
        Get an iterator over all child handlers.
        Nr	   r	   r	   r	   r
   __iter__   r   zIXMPPHandlerCollection.__iter__c                 C   r   )zN
        Add a child handler.

        @type handler: L{IXMPPHandler}
        Nr	   handlerr	   r	   r
   
addHandler   r   z!IXMPPHandlerCollection.addHandlerc                 C   r   )zQ
        Remove a child handler.

        @type handler: L{IXMPPHandler}
        Nr	   r!   r	   r	   r
   removeHandler   r   z$IXMPPHandlerCollection.removeHandlerN)r   r   r   r   r    r#   r$   r	   r	   r	   r
   r   |   s
    r   c                   @   r   )	IServicez
    External server-side component service interface.

    Services that provide this interface can be added to L{ServiceManager} to
    implement (part of) the functionality of the server-side component.
    c                 C   r   )ax  
        Parent component has established a connection.

        At this point, authentication was successful, and XML stanzas
        can be exchanged over the XML stream C{xs}. This method can be used
        to setup observers for incoming stanzas.

        @param xs: XML Stream that represents the established connection.
        @type xs: L{xmlstream.XmlStream}
        Nr	   r   r	   r	   r
   componentConnected   r   zIService.componentConnectedc                   C   r   )z
        Parent component has lost the connection to the Jabber server.

        Subsequent use of C{self.parent.send} will result in data being
        queued until a new connection has been established.
        Nr	   r	   r	   r	   r
   componentDisconnected   r   zIService.componentDisconnectedc                 C   r   )ay  
        Parent component has established a connection over the underlying
        transport.

        At this point, no traffic has been exchanged over the XML stream. This
        method can be used to change properties of the XML Stream (in C{xs}),
        the service manager or it's authenticator prior to stream
        initialization (including authentication).
        Nr	   r   r	   r	   r
   transportConnected   r   zIService.transportConnectedN)r   r   r   r   r&   r'   r(   r	   r	   r	   r
   r%      s
    r%   N)
r   zope.interfacer   r   r   r   r   r   r   r%   r	   r	   r	   r
   <module>   s   	D