U
    
W[ü	  ã                   @   sÞ   d Z ddlmZmZ ddlZddlZddlmZ ddlm	Z	m
Z
 G dd„ de	jƒZG dd	„ d	e	jƒZee
jƒG d
d„ de	jƒƒZG dd„ de	jƒZG dd„ de	jƒZG dd„ de	jƒZG dd„ de	jƒZdd	dddddgZdS )zzImplement standard (and unused) TCP protocols.

These protocols are either provided by inetd, or are not provided at all.
é    )Úabsolute_importÚdivisionN)Úimplementer)ÚprotocolÚ
interfacesc                   @   s   e Zd ZdZdd„ ZdS )ÚEchozC
    As soon as any data is received, write it back (RFC 862).
    c                 C   s   | j  |¡ d S ©N)Ú	transportÚwrite©ÚselfÚdata© r   ú8/usr/lib/python3/dist-packages/twisted/protocols/wire.pyÚdataReceived   s    zEcho.dataReceivedN©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdd„ ZdS )ÚDiscardz.
    Discard any received data (RFC 863).
    c                 C   s   d S r   r   r   r   r   r   r   #   s    zDiscard.dataReceivedNr   r   r   r   r   r      s   r   c                   @   s4   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚChargenz-
    Generate repeating noise (RFC 864).
    sG   @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&?c                 C   s   | j  | d¡ d S )Nr   )r	   ZregisterProducer©r   r   r   r   ÚconnectionMade0   s    zChargen.connectionMadec                 C   s   | j  | j¡ d S r   )r	   r
   Únoiser   r   r   r   ÚresumeProducing4   s    zChargen.resumeProducingc                 C   s   d S r   r   r   r   r   r   ÚpauseProducing8   s    zChargen.pauseProducingc                 C   s   d S r   r   r   r   r   r   ÚstopProducing<   s    zChargen.stopProducingN)	r   r   r   r   r   r   r   r   r   r   r   r   r   r   )   s   r   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚQOTDz.
    Return a quote of the day (RFC 865).
    c                 C   s   | j  |  ¡ ¡ | j  ¡  d S r   )r	   r
   ÚgetQuoteÚloseConnectionr   r   r   r   r   F   s    zQOTD.connectionMadec                 C   s   dS )zB
        Return a quote. May be overrriden in subclasses.
        s'   An apple a day keeps the doctor away.
r   r   r   r   r   r   K   s    zQOTD.getQuoteN)r   r   r   r   r   r   r   r   r   r   r   A   s   r   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚWhoz/
    Return list of active users (RFC 866)
    c                 C   s   | j  |  ¡ ¡ | j  ¡  d S r   )r	   r
   ÚgetUsersr    r   r   r   r   r   X   s    zWho.connectionMadec                 C   s   dS )z>
        Return active users. Override in subclasses.
        s   root
r   r   r   r   r   r"   ]   s    zWho.getUsersN)r   r   r   r   r   r"   r   r   r   r   r!   S   s   r!   c                   @   s   e Zd ZdZdd„ ZdS )ÚDaytimez8
    Send back the daytime in ASCII form (RFC 867).
    c                 C   s.   | j  t t t ¡ ¡¡d ¡ | j  ¡  d S )Ns   
)r	   r
   ÚtimeÚasctimeÚgmtimer    r   r   r   r   r   j   s     zDaytime.connectionMadeN©r   r   r   r   r   r   r   r   r   r#   e   s   r#   c                   @   s   e Zd ZdZdd„ ZdS )ÚTimez@
    Send back the time in machine readable form (RFC 868).
    c                 C   s.   t  dtt ¡ ƒ¡}| j |¡ | j ¡  d S )Nz!i)ÚstructZpackÚintr$   r	   r
   r    )r   Úresultr   r   r   r   u   s    zTime.connectionMadeNr'   r   r   r   r   r(   p   s   r(   )r   Z
__future__r   r   r$   r)   Zzope.interfacer   Ztwisted.internetr   r   ZProtocolr   r   Z	IProducerr   r   r!   r#   r(   Ú__all__r   r   r   r   Ú<module>   s   
