a
    f’iö  ã                   @   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__© úX/home/ec2-user/.local/lib/python3.9/site-packages/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   éüÿÿÿ)Ú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
   *