
    @OOf.                        d dl mZmZ d dlmZ d dlmZmZmZm	Z	m
Z
mZmZ ddlmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZmZmZmZmZmZmZ dZdZ ed   Z! G d de      Z"e G d d             Z# G d de$      Z% G d d      Z&y)    )	dataclassfield)Enum)AnyCallableDictListOptionalSequenceTuple   )Buffersize_uint_var)Epoch   )
CryptoPair)QuicLoggerTrace)NON_ACK_ELICITING_FRAME_TYPESNON_IN_FLIGHT_FRAME_TYPESPACKET_NUMBER_MAX_SIZEPACKET_TYPE_HANDSHAKEPACKET_TYPE_INITIALPACKET_TYPE_MASKQuicFrameTypeis_long_header).Nc                       e Zd ZdZdZy)QuicDeliveryStater   r   N)__name__
__module____qualname__ACKEDLOST     \/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/aioquic/quic/packet_builder.pyr   r      s    EDr$   r   c                       e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   dZee	   ed<   d	Z
eed
<    ee      Zeeeef      ed<    ee      Zee   ed<   y)QuicSentPacketepoch	in_flightis_ack_elicitingis_crypto_packetpacket_numberpacket_typeN	sent_timer   
sent_bytes)default_factorydelivery_handlersquic_logger_frames)r   r   r    r   __annotations__boolintr.   r
   floatr/   r   listr1   r	   r   QuicDeliveryHandlerr   r2   r   r#   r$   r%   r'   r'       sx    LO!%Ix%J?D@tE"5s":;<  &+4%@T
@r$   r'   c                       e Zd Zy)QuicPacketBuilderStopN)r   r   r    r#   r$   r%   r:   r:   1   s    r$   r:   c                      e Zd ZdZddddddeded	ed
ededededee   defdZ	e
defd       Ze
defd       Ze
defd       Ze
defd       Zdeee   ee   f   fdZddg fdededee   dee   def
dZdededdfdZd"d Zd"d!Zy)#QuicPacketBuilderz+
    Helper for building QUIC packets.
    r   r$   NF)r,   
peer_tokenquic_loggerspin_bithost_cidpeer_cidversion	is_clientmax_datagram_sizer,   r=   r>   r?   c       	            d | _         d | _        d | _        || _        || _        || _        || _        || _        |	| _        || _	        g | _
        d| _        d| _        g | _        d| _        d| _        d| _        d | _        d | _        d| _        || _        d| _        d| _        t/        |      | _        || _        || _        y )Nr   TF)max_flight_bytesmax_total_bytesr2   	_host_cid
_is_client	_peer_cid_peer_token_quic_logger	_spin_bit_version
_datagrams_datagram_flight_bytes_datagram_init_packets_flight_bytes_total_bytes_header_size_packet_packet_crypto_packet_long_header_packet_number_packet_start_packet_typer   _buffer_buffer_capacity_flight_capacity)
selfr@   rA   rB   rC   rD   r,   r=   r>   r?   s
             r%   __init__zQuicPacketBuilder.__init__:   s     04.28<!#!%'! (*&'#".0 1548#( +/0 1 1r$   returnc                     | j                   J | j                  j                         | j                  z
  }|| j                  k  S )z@
        Returns `True` if the current packet is empty.
        )rV   r\   tellrZ   rU   )r_   packet_sizes     r%   packet_is_emptyz!QuicPacketBuilder.packet_is_emptyh   sB    
 ||'''ll'')D,>,>>d////r$   c                     | j                   S )z@
        Returns the packet number for the next packet.
        )rY   r_   s    r%   r,   zQuicPacketBuilder.packet_numberq   s    
 """r$   c                 ~    | j                   | j                  j                         z
  | j                  j                  z
  S zh
        Returns the remaining number of bytes which can be used in
        the current packet.
        )r]   r\   rc   rW   aead_tag_sizerg   s    r%   remaining_buffer_spacez(QuicPacketBuilder.remaining_buffer_spacex   ;     !!ll!"!!//0	
r$   c                 ~    | j                   | j                  j                         z
  | j                  j                  z
  S ri   )r^   r\   rc   rW   rj   rg   s    r%   remaining_flight_spacez(QuicPacketBuilder.remaining_flight_space   rl   r$   c                     | j                   | j                          | j                          | j                  }| j                  }g | _        g | _        ||fS )z2
        Returns the assembled datagrams.
        )rV   _end_packet_flush_current_datagramrO   rR   )r_   	datagramspacketss      r%   flushzQuicPacketBuilder.flush   sQ     <<#$$&OO	--'!!r$   r   
frame_typecapacityhandlerhandler_argsc                    | j                   |k  s|t        vr| j                  |k  rt        | j                  j                  |       |t        vrd| j                  _        |t        vrd| j                  _	        |t        j                  k(  rd| j                  _        |'| j                  j                  j                  ||f       | j                  S )z%
        Starts a new frame.
        T)rk   r   rn   r:   r\   push_uint_varr   rV   r*   r)   r   CRYPTOr+   r1   append)r_   ru   rv   rw   rx   s        r%   start_framezQuicPacketBuilder.start_frame   s     &&177++h6''"":.::,0DLL)66%)DLL"---,0DLL)LL**117L2IJ||r$   r-   cryptoc                    | j                   }| j                  | j                          |j                         }| j                  |z
  dk  r| j                          d}| j                  r| j                  /| j                  | j                  z
  }|| j                  k  r|| _        | j                  | _	        | j                  /| j                  | j                  z
  }|| j                  k  r|| _	        d| _        d| _        t        |      }|redt        | j                        z   t        | j                         z   }|t"        z  t$        k(  r?t        | j&                        }	|t)        |	      |	z   z  }ndt        | j                        z   }||z   | j                  k\  rt*        |t$        k(  rt,        j.                  }
n*|t0        k(  rt,        j2                  }
nt,        j4                  }
|| _        t9        |
ddd| j:                  |      | _        || _        || _        || _         || _!        | j                  jD                  | _"        |jG                  | j@                  | j6                  z          y)z&
        Starts a new packet.
        N   r   F      )r(   r)   r*   r+   r,   r-   )$r\   rV   rp   rc   r]   rq   rQ   rG   rT   r^   rF   rS   rP   r   lenrJ   rH   r   r   rK   r   r:   r   INITIALr   	HANDSHAKEONE_RTTrU   r'   rY   rW   rX   rZ   r[   r2   seek)r_   r-   r~   bufpacket_startremaining_total_bytesremaining_flight_bytespacket_long_headerheader_sizetoken_lengthr(   s              r%   start_packetzQuicPacketBuilder.start_packet   s/    ll <<# xxz  </#5((*L ##/(,(<(<t?P?P(P%(4+@+@@,AD)$($9$9D!$$0)-)>)>ASAS)S&)D,A,AA,BD)*+D'"'D ,K8s4>>22S5HHK..3FF"4#3#34}\:\IIc$..11K +%)>)>>'' --MME11OOEMME'%""--#
 %#5 )'"&,,"A"A##d&7&778r$   c                 	   | j                   }|j                         | j                  z
  }|| j                  kD  rt        t
        z
  | j                  z   |z
  }| j                  s| j                  j                  r:| j                  t        k(  r'| j                  r| j                  |kD  r| j                  }|dkD  ry|j                  t        |             ||z  }d| j                  _        | j                  =| j                  j                   j#                  | j                  j%                                | j&                  r|| j                  z
  t
        z   | j(                  j*                  z   }|j-                  | j                         |j/                  | j                  t
        dz
  z         |j1                  | j2                         |j/                  t5        | j6                               |j                  | j6                         |j/                  t5        | j8                               |j                  | j8                         | j                  t:        z  t        k(  r?|j=                  t5        | j>                               |j                  | j>                         |jA                  |dz         |jA                  | jB                  dz         n|j-                  | j                         |j/                  | j                  | jD                  dz  z  | j(                  jF                  dz  z  t
        dz
  z         |j                  | j6                         |jA                  | jB                  dz         |jI                  | j                  | j                  |z         }|j-                  | j                         |j                  | j(                  jK                  |d| j                   || j                  | | jB                               |j                         | j                  z
  | j                  _&        | jN                  j#                  | j                         | j                  j                  r)| xjP                  | j                  jL                  z  c_(        | j&                  s| jS                          | xjB                  dz  c_!        n|j-                  | j                         d| _        d| _        y)	z*
        Ends the current packet.
        r   TNr   i @  i     r   )*r\   rc   rZ   rU   r   PACKET_NUMBER_SEND_SIZErI   rV   r*   r[   r   rn   
push_bytesbytesr)   rL   r2   r|   encode_padding_framerX   rW   rj   r   
push_uint8push_uint32rN   r   rJ   rH   r   rz   rK   push_uint16rY   rM   	key_phase
data_sliceencrypt_packetr/   rR   rP   rq   )r_   r   rd   padding_sizelengthplains         r%   rp   zQuicPacketBuilder._end_packet   s    llhhj4#5#55*** ')*##$   DLL$A$A%%)<<////,>#:: au\23|+)-& $$0LL33::))>>@
 ''''(-. ))778  ++,t004Ka4OPQ.s4>>23t~~.s4>>23t~~.%%(88=PP%%c$*:*:&;<NN4#3#340 3 3f <=++,%%~~*,**449; /24 t~~. 3 3f <= NN4#5#5t7I7IK7WXEHHT''(NN##22!d//0$++k:'' '*hhj43E3E&EDLL#MM  .||%%++t||/F/FF+ ++,,.1$ HHT''("&r$   c                 H   | j                   j                         }|r| j                  j                  | j                   j                         | xj
                  | j                  z  c_        | xj                  |z  c_        d| _        | j                   j                  d       y y )NTr   )
r\   rc   rO   r|   datarS   rP   rT   rQ   r   )r_   datagram_bytess     r%   rq   z)QuicPacketBuilder._flush_current_datagram`  sz    **,OO""4<<#4#45$"="==/"&DLLa  r$   )ra   N)r   r   r    __doc__r   r5   r4   r
   r   r`   propertyre   r,   rk   rn   r   r	   r'   rt   r8   r   r   r   r}   r   r   rp   rq   r#   r$   r%   r<   r<   5   sz    15,2 ,2 	,2
 ,2 ,2 ,2 ,2 ,2 o.,2 ,2\ 0 0 0 #s # # 	
 	
 	
 	
 	
 	
"uT%[$~*>>? "" 15&(  -.	
 sm 
6E9 E9Z E9D E9N^'@!r$   r<   N)'dataclassesr   r   enumr   typingr   r   r   r	   r
   r   r   bufferr   r   tlsr   r~   r   loggerr   packetr   r   r   r   r   r   r   r   PACKET_LENGTH_SEND_SIZEr   r8   r   r'   	Exceptionr:   r<   r#   r$   r%   <module>r      s    (  G G G *   #	 	 	    y)  
 A A A 	I 	r! r!r$   