3
uQhö  ã               @   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 ƒ j|ƒ d| _d S )Nr   )ÚsuperÚ__init__Ú_send_counter)ÚselfÚ
connection)Ú	__class__© úG/tmp/pip-build-2nz6shyl/telethon/telethon/network/connection/tcpfull.pyr      s    zFullPacketCodec.__init__c             C   sF   t |ƒd }tjd|| jƒ| }tjdt|ƒƒ}|  jd7  _|| S )Né   z<iiz<Ir   )ÚlenÚstructÚpackr   r   )r   ÚdataÚlengthÚcrcr   r   r   Úencode_packet   s
    zFullPacketCodec.encode_packetc             Ã   s´   |j dƒI d H }tjd|ƒ\}}|dk rJ|dk rJ|j dƒI d H }t|ƒ‚n|dk rZt|ƒ‚|j |d ƒI d H }tjd|dd … ƒd }|d d… }t|| ƒ}||kr°t||ƒ‚|S )Né   z<iir   é   z<Iéüÿÿÿ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
   *