
    @OOf'                     `    d dl mZ ddlmZ ddlmZmZmZmZ dZ	 G d de      Z
 ed	e
       y
)    )Iterable   )QuicSentPacket   )K_MINIMUM_WINDOWQuicCongestionControlQuicRttMonitorregister_congestion_controlg      ?c                        e Zd ZdZdeddf fdZdededdfdZdeddfd	Z	d
e
e   ddfdZded
e
e   ddfdZdededdfdZ xZS )RenoCongestionControlz&
    New Reno congestion control.
    max_datagram_sizereturnNc                n    t         |   |       || _        d| _        d| _        t               | _        y )N)r           r   )super__init___max_datagram_size_congestion_recovery_start_time_congestion_stashr	   _rtt_monitor)selfr   	__class__s     ]/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/aioquic/quic/congestion/reno.pyr   zRenoCongestionControl.__init__   s7    +<="3/2,!"*,    nowpacketc                   | xj                   |j                  z  c_         |j                  | j                  k  ry | j                  | j
                  | j                  k  r | xj
                  |j                  z  c_        y | xj                  |j                  z  c_        | j                  | j
                  z  }|rE| xj                  || j
                  z  z  c_        | xj
                  || j                  z  z  c_        y y N)bytes_in_flight
sent_bytes	sent_timer   ssthreshcongestion_windowr   r   )r   r   r   counts       r   on_packet_ackedz%RenoCongestionControl.on_packet_acked   s     1 11 tCCC== D$:$:T]]$J""f&7&77" ""f&7&77"**d.D.DDE&&%$2H2H*HH&&&%$2I2I*II& r   c                B    | xj                   |j                  z  c_         y r   r   r    )r   r   s     r   on_packet_sentz$RenoCongestionControl.on_packet_sent,   s     1 11r   packetsc                P    |D ]!  }| xj                   |j                  z  c_         # y r   r'   )r   r)   r   s      r   on_packets_expiredz(RenoCongestionControl.on_packets_expired/   s(     	6F  F$5$55 	6r   c                4   d}|D ]-  }| xj                   |j                  z  c_         |j                  }/ || j                  kD  rU|| _        t	        t        | j                  t        z        t        | j                  z        | _        | j                  | _
        y y )Nr   )r   r    r!   r   maxintr#   K_LOSS_REDUCTION_FACTORr   r   r"   )r   r   r)   lost_largest_timer   s        r   on_packets_lostz%RenoCongestionControl.on_packets_lost3   s     	1F  F$5$55  & 0 0	1 tCCC36D0%(D**-DDE 4#:#::&D" !22DM Dr   rttc                |    | j                   0| j                  j                  ||      r| j                  | _         y y y )N)r   r2   )r"   r   is_rtt_increasingr#   )r   r   r2   s      r   on_rtt_measurementz(RenoCongestionControl.on_rtt_measurementE   sA    == T%6%6%H%H &I &
 !22DM&
 r   )__name__
__module____qualname____doc__r.   r   floatr   r%   r(   r   r+   r1   r5   __classcell__)r   s   @r   r   r      s    -S -T -Je J^ J J$2 24 26Xn-E 6$ 63e 3h~6N 3SW 3$3 3U 3t 3r   r   renoN)typingr   packet_builderr   baser   r   r	   r
   r/   r    r   r   <module>rA      s8     +   <31 <3~ F$9 :r   