U
    ¯ªhö  ã                   @   sX   d dl Z d dlmZ ddlmZmZ ddlmZmZ G dd„ deƒZ	G d	d
„ d
eƒZ
dS )é    N)Úcrc32é   )Ú
ConnectionÚPacketCodecé   )ÚInvalidChecksumErrorÚInvalidBufferErrorc                       s0   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Z‡  ZS )ÚFullPacketCodecNc                    s   t ƒ  |¡ d| _d S )Nr   )ÚsuperÚ__init__Ú_send_counter)ÚselfÚ
connection©Ú	__class__© úG/tmp/pip-unpacked-wheel-c81u5j2r/telethon/network/connection/tcpfull.pyr      s    zFullPacketCodec.__init__c                 C   sF   t |ƒd }t d|| j¡| }t dt|ƒ¡}|  jd7  _|| S )Né   ú<iiú<Ir   )ÚlenÚstructÚpackr   r   )r   ÚdataÚlengthÚcrcr   r   r   Úencode_packet   s
    zFullPacketCodec.encode_packetc                 Ã   s´   |  d¡I d H }t d|¡\}}|dk rJ|dk rJ|  d¡I d H }t|ƒ‚n|dk rZt|ƒ‚|  |d ¡I d H }t d|dd … ¡d }|d d… }t|| ƒ}||kr°t||ƒ‚|S )Né   r   r   é   r   éüÿÿÿ)Zreadexactlyr   Úunpackr   r   r   )r   ÚreaderZpacket_len_seqZ
packet_lenÚseqÚbodyZchecksumZvalid_checksumr   r   r   Úread_packet   s    

zFullPacketCodec.read_packet)Ú__name__Ú
__module__Ú__qualname__Útagr   r   r$   Ú__classcell__r   r   r   r   r	      s   	r	   c                   @   s   e Zd ZdZeZdS )ÚConnectionTcpFullzy
    Default Telegram mode. Sends 12 additional bytes and
    needs to calculate the CRC value of the packet itself.
    N)r%   r&   r'   Ú__doc__r	   Zpacket_codecr   r   r   r   r*   2   s   r*   )r   Úzlibr   r   r   r   Úerrorsr   r   r	   r*   r   r   r   r   Ú<module>   s
   *