Ë
    /æjÏ_  ã                  óX  — d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZ d dl	Z
d dlZ
d dlZ
d dlZ
d dlZ
ddlmZ ddlmZmZmZ ddlmZmZmZ ddlmZmZmZ dd	lmZ dd
lm Z  ddl!m"Z"  ejF                  d«      Z$dd„Z% G d„ dejL                  «      Z' G d„ de"«      Z( G d„ d«      Z)y)é    )ÚannotationsN)Ú	Generatoré   )ÚNetworkStream)ÚConnectionNotAvailableÚLocalProtocolErrorÚRemoteProtocolError)ÚOriginÚRequestÚResponse)ÚLockÚ	SemaphoreÚShieldCancellation)ÚTrace)Úsafe_iterateé   )ÚConnectionInterfacezhttpcore2.http2c                ó:   — t        d„ | j                  D «       «      S )Nc              3  ór   K  — | ]/  \  }}|j                  «       d k(  xs |j                  «       dk(  –— Œ1 y­w)s   content-lengthó   transfer-encodingN)Úlower)Ú.0ÚkÚ_vs      úX/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/httpcore2/_sync/http2.pyú	<genexpr>z#has_body_headers.<locals>.<genexpr>   s7   è ø€ ÒpÑW\ÐWXÐZ\ˆq�w‰w‹yÐ-Ñ-ÒR°·±³Ð>RÑ1RÓRÑpùs   ‚57)ÚanyÚheaders)Úrequests    r   Úhas_body_headersr       s   € ÜÑpÐ`g×`oÑ`oÔpÓpÐpó    c                  ó   — e Zd ZdZdZdZy)ÚHTTPConnectionStater   r   é   N)Ú__name__Ú
__module__Ú__qualname__ÚACTIVEÚIDLEÚCLOSED© r!   r   r#   r#      s   „ Ø€FØ€DØ�Fr!   r#   c                  óZ  — e Zd ZdZej
                  j                  d¬«      Z	 d!	 	 	 	 	 d"d„Zd#d„Z	d$d„Z
d%d„Zd%d	„Zd&d
„Zd%d„Zd'd„Zd(d„Z	 	 	 	 	 	 d)d„Zd!d*d„Zd+d„Zd,d„Zd-d„Zd.d„Zd$d„Zd/d„Zd0d„Zd1d„Zd1d„Zd1d„Zd1d„Zd1d„Zd1d„Zd2d„Z d2d„Z!d3d„Z"	 	 	 d4	 	 	 	 	 	 	 d5d „Z#y)6ÚHTTP2Connectioné   F)Úvalidate_inbound_headersNc                ó¬  — || _         || _        || _        t        j                  j                  | j                  ¬«      | _        t        j                  | _
        d | _        d| _        t        «       | _        t        «       | _        t        «       | _        t        «       | _        d| _        d| _        d| _        i | _        d | _        d | _        d | _        y )N)Úconfigr   F)Ú_originÚ_network_streamÚ_keepalive_expiryÚh2Ú
connectionÚH2ConnectionÚCONFIGÚ	_h2_stater#   r)   Ú_stateÚ
_expire_atÚ_request_countr   Ú
_init_lockÚ_state_lockÚ
_read_lockÚ_write_lockÚ_sent_connection_initÚ_used_all_stream_idsÚ_connection_errorÚ_eventsÚ_connection_terminatedÚ_read_exceptionÚ_write_exception)ÚselfÚoriginÚstreamÚkeepalive_expirys       r   Ú__init__zHTTP2Connection.__init__)   sº   € ð ˆŒØ%ˆÔØ/?ˆÔÜŸ™×3Ñ3¸4¿;¹;Ð3ÓGˆŒÜ)×.Ñ.ˆŒØ(,ˆŒØˆÔÜ›&ˆŒÜ›6ˆÔÜ›&ˆŒÜ›6ˆÔØ%*ˆÔ"Ø$)ˆÔ!Ø!&ˆÔð ð 	Œð NRˆÔ#à15ˆÔØ26ˆÕr!   c           	     óª	  — | j                  |j                  j                  «      s/t        d|j                  j                  › d| j                  › �«      ‚| j
                  5  | j                  t        j                  t        j                  fv r2| xj                  dz  c_
        d | _        t        j                  | _        n
t        «       ‚	 d d d «       | j                  5  | j                  s®	 d|i}t        dt         ||«      5   | j"                  di |¤Ž d d d «       d| _        d| _        d| _        | j.                  j0                  j2                  }t5        |«      | _        t9        || j*                  z
  «      D ]  }| j6                  j;                  «        Œ d d d «       	 | j6                  j;                  «        t'        «       5  | j
                  5  | j,                  s	 d d d «       d d d «       n&| xj,                  dz  c_        d d d «       d d d «       Œv	 | j.                  j=                  «       }g | j>                  |<   	 ||dœ}t        d	t         ||«      5  | jK                  ||¬«       d d d «       t        d
t         ||«      5  | jM                  ||¬«       d d d «       t        dt         ||«      5 }| jO                  ||¬«      \  }	}
|	|
f|_(        d d d «       tS        	
tU        | ||¬«      d| jV                  |dœ¬«      S # 1 sw Y   �Œ?xY w# 1 sw Y   �ŒxY w# t$        $ r7}t'        «       5  | j)                  «        d d d «       |‚# 1 sw Y   |‚xY wd }~ww xY w# 1 sw Y   �ŒÍxY w# 1 sw Y   �ŒlxY w# 1 sw Y   �ŒqxY w# t@        jB                  jD                  $ rA d| _#        | xj                  dz  c_
        | j6                  jI                  «        t        «       ‚w xY w# 1 sw Y   �Œ€xY w# 1 sw Y   �Œ_xY w# 1 sw Y   �Œ2xY w# t$        $ rµ}t'        «       5  d|i}t        dt         ||«      5  | jY                  |¬«       d d d «       n# 1 sw Y   nxY wd d d «       n# 1 sw Y   nxY wt[        |t@        jB                  j\                  «      r,| j^                  rta        | j^                  «      ‚tc        |«      ‚|‚d }~ww xY w)NzAttempted to send request to z on connection to r   r   Úsend_connection_initTr   ©r   Ú	stream_idÚsend_request_headersÚsend_request_bodyÚreceive_response_headers©rP   s   HTTP/2)Úhttp_versionÚnetwork_streamrP   )Ústatusr   ÚcontentÚ
extensionsrP   Úresponse_closedr+   )2Úcan_handle_requestÚurlrI   ÚRuntimeErrorr2   r>   r:   r#   r(   r)   r<   r;   r   r=   rA   r   ÚloggerÚ_send_connection_initÚBaseExceptionr   ÚcloseÚ_max_streamsÚ_max_streams_deficitr9   Úlocal_settingsÚmax_concurrent_streamsr   Ú_max_streams_semaphoreÚrangeÚacquireÚget_next_available_stream_idrD   r5   Ú
exceptionsÚNoAvailableStreamIDErrorrB   ÚreleaseÚ_send_request_headersÚ_send_request_bodyÚ_receive_responseÚreturn_valuer   ÚHTTP2ConnectionByteStreamr3   Ú_response_closedÚ
isinstanceÚProtocolErrorrE   r	   r   )rH   r   Ú
sci_kwargsÚexcÚlocal_settings_max_streamsÚ_rP   ÚkwargsÚtracerW   r   s              r   Úhandle_requestzHTTP2Connection.handle_requestK   s‚  € Ø×&Ñ& w§{¡{×'9Ñ'9Ô:ô
 Ð!>¸w¿{¹{×?QÑ?QÐ>RÐRdÐei×eqÑeqÐdrÐsÓtÐtà×Ññ 	/Ø�{‰{Ô2×9Ñ9Ô;N×;SÑ;SÐTÑTØ×#Ò# qÑ(Õ#Ø"&�”Ü1×8Ñ8�•ä,Ó.Ð.ð ÷		/ð �_‰_ñ 	:Ø×-Ò-ðØ"+¨WÐ!5�JÜÐ5´v¸wÈ
ÓSñ AØ2˜×2Ñ2Ñ@°ZÒ@÷Að .2�Ô*ð %&�Ô!ð -.�Ô)à-1¯^©^×-JÑ-J×-aÑ-aÐ*Ü.7Ð8RÓ.S�Ô+äÐ9¸D×<MÑ<MÑMÓNò :�AØ×/Ñ/×7Ñ7Õ9ð:÷/	:ð6 Ø×'Ñ'×/Ñ/Ô1Ü#Ó%ñ 3Ø×%Ñ%ñ 3Ø×4Ò4Ø÷3÷3ð 3ð ×-Ò-°Ñ2Õ-÷3÷3ð ð	+ØŸ™×CÑCÓEˆIØ&(ˆD�L‰L˜Ñ#ð*	Ø!(°yÑAˆFÜÐ-¬v°wÀÓGñ QØ×*Ñ*°7ÀiÐ*ÔP÷QäÐ*¬F°G¸VÓDñ NØ×'Ñ'°À9Ð'ÔM÷NäÐ1´6¸7ÀFÓKð 7ÈuØ"&×"8Ñ"8ÀÐT]Ð"8Ó"^‘�˜Ø&,¨gÐ%6�Ô"÷7ô ØØÜ1°$¸È9ÔUà$-Ø&*×&:Ñ&:Ø!*ñô		ð 	÷}	/ñ 	/ú÷Añ Aûä$ò Ü+Ó-ñ %ØŸ
™
œ÷%à�I÷%à�Iþðú÷	:ñ 	:ú÷<3ñ 3ú÷3ñ 3ûô �}‰}×5Ñ5ò 	+Ø(,ˆDÔ%Ø×Ò 1Ñ$ÕØ×'Ñ'×/Ñ/Ô1Ü(Ó*Ð*ð		+ú÷Qñ Qú÷Nñ Nú÷7ñ 7ûô ò 	Ü#Ó%ñ ?Ø% yÐ1�ÜÐ,¬f°g¸vÓFñ ?Ø×)Ñ)°IÐ)Ô>÷?÷ ?ñ ?ú÷?÷ ?ñ ?úô
 ˜#œrŸ}™}×:Ñ:Ô;ð ×.Ò.Ü-¨d×.IÑ.IÓJÐJô )¨Ó-Ð-àˆIûð-	ús<  Á!A)LÃM%Ã-L"ÄLÄL"ÄA<M%ÇM?ÇM2Ç"M?Ç3M2ÈM?È)N ÉP ÉO-É/P Ê	O:ÊP Ê7 PË0P ÌLÌL	ÌL"Ì"	M"Ì+
MÌ5MÍ
MÍMÍMÍM"Í"M%Í%M/Í2M<	Í7M?Í?N	ÎAO*Ï-O7Ï2P Ï:PÏ?P ÐPÐP Ð	SÐ
SÐ'Q/Ð>QÑ	Q/ÑQ#ÑQ/Ñ&	SÑ/Q8	Ñ4ASÓSc           	     ó:  — t         j                  j                  dt         j                  j                  j                  dt         j                  j                  j
                  dt         j                  j                  j                  di¬«      | j                  _        | j                  j                  t         j                  j                  j                  = | j                  j                  «        | j                  j                  d«       | j                  |«       y)z�
        The HTTP/2 connection requires some initial setup before we can start
        using individual request/response streams on it.
        Tr   éd   r.   )ÚclientÚinitial_valuesé   N)r5   ÚsettingsÚSettingsÚSettingCodesÚENABLE_PUSHÚMAX_CONCURRENT_STREAMSÚMAX_HEADER_LIST_SIZEr9   rd   ÚENABLE_CONNECT_PROTOCOLÚinitiate_connectionÚincrement_flow_control_windowÚ_write_outgoing_data)rH   r   s     r   r_   z%HTTP2Connection._send_connection_init³   sÁ   € ô )+¯©×(<Ñ(<Øô —‘×(Ñ(×4Ñ4°aä—‘×(Ñ(×?Ñ?ÀÜ—‘×(Ñ(×=Ñ=¸uðð )=ó 
)
ˆ�‰Ô%ð �N‰N×)Ñ)¬"¯+©+×*BÑ*B×*ZÑ*ZÐ[à�‰×*Ñ*Ô,Ø�‰×4Ñ4°UÔ;Ø×!Ñ! 'Õ*r!   c                ó<  — t        |«       }|j                  D ��cg c]  \  }}|j                  «       dk(  sŒ|‘Œ c}}d   }d|j                  fd|fd|j                  j
                  fd|j                  j                  fg|j                  D ��cg c])  \  }}|j                  «       dvr|j                  «       |f‘Œ+ c}}z   }| j                  j                  |||¬«       | j                  j                  d	|¬
«       | j                  |«       yc c}}w c c}}w )z@
        Send the request headers to a given stream ID.
        ó   hostr   s   :methods
   :authoritys   :schemes   :path)rŒ   r   )Ú
end_streamr€   rT   N)r    r   r   Úmethodr\   ÚschemeÚtargetr9   Úsend_headersr‰   rŠ   )rH   r   rP   r�   r   ÚvÚ	authorityr   s           r   rm   z%HTTP2Connection._send_request_headersÒ   s  € ô *¨'Ó2Ð2ˆ
ð $+§?¡?×K™4˜1˜a°a·g±g³iÀ7Ó6J’QÓKÈAÑNˆ	ð ˜Ÿ™Ð(Ø˜IÐ&Ø˜Ÿ™×+Ñ+Ð,Ø�w—{‘{×)Ñ)Ð*ð	
ð  Ÿ™÷
á��1Ø�w‰w‹yðñð �W‰W‹Y˜ŠNó
ñ
ˆð 	�‰×#Ñ# I¨wÀ:Ð#ÔNØ�‰×4Ñ4°UÀiÐ4ÔPØ×!Ñ! 'Õ*ùó' Lùó
s   œD¸DÂ.Dc                ó  — t        |«      syt        |j                  t        j                  «      sJ ‚t        |j                  «      5 }|D ]  }| j                  |||«       Œ 	 ddd«       | j                  ||«       y# 1 sw Y   ŒxY w)zP
        Iterate over the request body sending it to a given stream ID.
        N)r    rs   rJ   ÚtypingÚIterabler   Ú_send_stream_dataÚ_send_end_stream)rH   r   rP   ÚiteratorÚchunks        r   rn   z"HTTP2Connection._send_request_bodyñ   sƒ   € ô   Ô(Øä˜'Ÿ.™.¬&¯/©/Ô:Ð:Ð:Ü˜'Ÿ.™.Ó)ð 	B¨XØ!ò B�Ø×&Ñ& w°	¸5ÕAñB÷	Bð 	×Ñ˜g yÕ1÷		Bð 	Bús   ÁA?Á?Bc                óî   — d}|t        |«      k  re| j                  ||«      }||||z    }|t        |«      z  }| j                  j                  ||«       | j	                  |«       |t        |«      k  rŒdyy)zI
        Send a single chunk of data in one or more data frames.
        r   N)ÚlenÚ_wait_for_outgoing_flowr9   Ú	send_datarŠ   )rH   r   rP   ÚdataÚpositionÚmax_flowrš   s          r   r—   z!HTTP2Connection._send_stream_dataÿ   sv   € ð ˆØœ˜T›Ò"Ø×3Ñ3°G¸YÓGˆHØ˜ H¨xÑ$7Ð8ˆEØœ˜E›
Ñ"ˆHØ�N‰N×$Ñ$ Y°Ô6Ø×%Ñ% gÔ.ð œ˜T›Õ"r!   c                ó\   — | j                   j                  |«       | j                  |«       y)z`
        Send an empty data frame on on a given stream ID with the END_STREAM flag set.
        N)r9   r�   rŠ   )rH   r   rP   s      r   r˜   z HTTP2Connection._send_end_stream  s$   € ð 	�‰×!Ñ! )Ô,Ø×!Ñ! 'Õ*r!   c                óV  — 	 | j                  ||«      }t        |t        j                  j                  «      rnŒ8d}g }|j
                  €J ‚|j
                  D ]L  \  }}|dk(  rt        |j                  dd¬«      «      }Œ(|j                  d«      rŒ:|j                  ||f«       ŒN ||fS )zT
        Return the response status code and headers for a given stream ID.
        éÈ   s   :statusÚasciiÚignore)Úerrorsó   :)
Ú_receive_stream_eventrs   r5   ÚeventsÚResponseReceivedr   ÚintÚdecodeÚ
startswithÚappend)rH   r   rP   ÚeventÚstatus_coder   r   r’   s           r   ro   z!HTTP2Connection._receive_response  s¯   € ð Ø×.Ñ.¨w¸	ÓBˆEÜ˜%¤§¡×!;Ñ!;Ô<Øð ð
 ˆØ-/ˆØ�}‰}Ð(Ð(Ð(Ø—M‘Mò 	'‰DˆAˆqØ�JŠÜ! !§(¡(¨7¸8 (Ó"DÓE‘Ø—\‘\ $Õ'Ø—‘  1˜vÕ&ð		'ð ˜WÐ%Ð%r!   c              #  óŒ  K  — 	 | j                  ||«      }t        |t        j                  j                  «      rd|j
                  €J ‚|j                  €J ‚|j
                  }| j                  j                  ||«       | j                  |«       |j                  –— n%t        |t        j                  j                  «      ryŒÀ­w)z]
        Iterator that returns the bytes of the response body for a given stream ID.
        N)r©   rs   r5   rª   ÚDataReceivedÚflow_controlled_lengthrŸ   r9   Úacknowledge_received_datarŠ   ÚStreamEnded)rH   r   rP   r°   Úamounts        r   Ú_receive_response_bodyz&HTTP2Connection._receive_response_body(  s¦   è ø€ ð Ø×.Ñ.¨w¸	ÓBˆEÜ˜%¤§¡×!7Ñ!7Ô8Ø×3Ñ3Ð?Ð?Ð?Ø—z‘zÐ-Ð-Ð-Ø×5Ñ5�Ø—‘×8Ñ8¸ÀÔKØ×)Ñ)¨'Ô2Ø—j‘jÓ Ü˜E¤2§9¡9×#8Ñ#8Ô9Øð ùs   ‚CCc                ó2  — | j                   j                  |«      s.| j                  ||«       | j                   j                  |«      sŒ.| j                   |   j                  d«      }t	        |t
        j                  j                  «      rt        |«      ‚|S )zƒ
        Return the next available event for a given stream ID.

        Will read more data from the network if required.
        r   )	rD   ÚgetÚ_receive_eventsÚpoprs   r5   rª   ÚStreamResetr	   )rH   r   rP   r°   s       r   r©   z%HTTP2Connection._receive_stream_event8  sw   € ð —,‘,×"Ñ" 9Ô-Ø× Ñ  ¨)Ô4ð —,‘,×"Ñ" 9Õ-à—‘˜YÑ'×+Ñ+¨AÓ.ˆÜ�eœRŸY™Y×2Ñ2Ô3Ü% eÓ,Ð,Øˆr!   c           	     óú  — | j                   5  | j                  �S| j                  j                  }|r&|r$||kD  r| xj                  dz  c_        t	        «       ‚t        | j                  «      ‚|�| j                  j                  |«      �s?| j                  |«      }|D �](  }t        |t        j                  j                  «      r"t        dt        |«      5 }||_        ddd«       ŒJt        |t        j                  j                   t        j                  j"                  t        j                  j$                  t        j                  j&                  f«      rB|j(                  | j                  v sŒÓ| j                  |j(                     j+                  |«       Œüt        |t        j                  j,                  «      s�Œ"|| _        �Œ+ ddd«       | j/                  |«       y# 1 sw Y   �ŒPxY w# 1 sw Y   Œ(xY w)zp
        Read some data from the network until we see one or more events
        for a given stream ID.
        Nr   Úreceive_remote_settings)r?   rE   Úlast_stream_idr<   r   r	   rD   rº   Ú_read_incoming_datars   r5   rª   ÚRemoteSettingsChangedr   r^   rp   r«   r³   r¶   r½   rP   r¯   ÚConnectionTerminatedrŠ   )rH   r   rP   rÀ   rª   r°   rz   s          r   r»   zHTTP2Connection._receive_eventsG  s’  € ð
 �_‰_ñ "	<Ø×*Ñ*Ð6Ø!%×!<Ñ!<×!KÑ!K�Ù¡°IÀÒ4NØ×'Ò'¨1Ñ,Õ'Ü0Ó2Ð2Ü)¨$×*EÑ*EÓFÐFð Ð ¨¯©×(8Ñ(8¸Õ(CØ×1Ñ1°'Ó:�Ø#ó <�EÜ! %¬¯©×)HÑ)HÔIÜ"Ð#<¼fÀgÓNð 7ÐRWØ16˜EÔ.÷7ð 7ô $ØäŸI™I×6Ñ6ÜŸI™I×2Ñ2ÜŸI™I×1Ñ1ÜŸI™I×1Ñ1ð	ôð !Ÿ?™?¨d¯l©lÒ:Ø ŸL™L¨¯©Ñ9×@Ñ@ÀÕGä# E¬2¯9©9×+IÑ+IÖJØ6;˜Ö3ð%<÷!"	<ðH 	×!Ñ! 'Õ*÷%7ñ 7ú÷%"	<ð "	<ús2   �C
G1ÃG$ÃBG1Å1AG1Ç 
G1Ç$G.Ç)G1Ç1G:c                óÂ  — |j                   j                  t        j                  j                  j
                  «      }|�rt        |j                  | j                  j                  j                  «      }|rè|| j                  k7  rØ|| j                  kD  rd| j                  dkD  r| xj                  dz  c_        n| j                  j                  «        | xj                  dz  c_        || j                  kD  rŒd|| j                  k  rU| j                  j                  «       s| xj                  dz  c_        | xj                  dz  c_        || j                  k  rŒTy y y y y ©Nr   r   )Úchanged_settingsrº   r5   r�   rƒ   r…   ÚminÚ	new_valuer9   rd   re   rb   rc   rf   rl   Úacquire_if_available)rH   r°   re   Únew_max_streamss       r   Ú_receive_remote_settings_changez/HTTP2Connection._receive_remote_settings_changer  s%  € Ø!&×!7Ñ!7×!;Ñ!;¼B¿K¹K×<TÑ<T×<kÑ<kÓ!lÐÚ!Ü!Ø&×0Ñ0Ø—‘×-Ñ-×DÑDóˆOñ  ?°d×6GÑ6GÒ#Gà%¨×(9Ñ(9Ò9Ø×0Ñ0°1Ò4Ø×1Ò1°QÑ6Ö1à×3Ñ3×;Ñ;Ô=Ø×%Ò%¨Ñ*Õ%ð &¨×(9Ñ(9Ó9ð &¨×(9Ñ(9Ò9Ø×6Ñ6×KÑKÔMØ×1Ò1°QÑ6Õ1Ø×%Ò%¨Ñ*Õ%ð &¨×(9Ñ(9Õ9ð $Hˆð "r!   c                óh  — | j                   5  || j                  v rL| j                  dkD  r| xj                  dz  c_        n| j                  j	                  «        | j                  |= | j
                  r| j                  s| j                  «        nŽ| j                  t        j                  k(  rq| j                  set        j                  | _        | j                  �(t        j                  «       }|| j                  z   | _        | j                  r| j                  «        d d d «       y # 1 sw Y   y xY wrÅ   )r>   rD   rc   rf   rl   rE   ra   r:   r#   r(   r)   r4   ÚtimeÚ	monotonicr;   rB   )rH   rP   Únows      r   rr   z HTTP2Connection._response_closed†  sã   € Ø×Ññ 	!Ø˜DŸL™LÑ(Ø×,Ñ,¨qÒ0Ø×-Ò-°Ñ2Ö-à×/Ñ/×7Ñ7Ô9Ø—L‘L Ð+Ø×*Ò*°4·<²<Ø—
‘
•à—‘Ô 3× :Ñ :Ò:À4Ç<Â<Ü1×6Ñ6�”Ø×)Ñ)Ð5ÜŸ.™.Ó*�CØ&)¨D×,BÑ,BÑ&B�D”OØ×,Ò,Ø—J‘J”L÷!	!÷ 	!ñ 	!ús   �DD(Ä(D1c                ó–   — | j                   j                  «        t        j                  | _        | j
                  j                  «        y ©N)r9   Úclose_connectionr#   r*   r:   r3   ra   ©rH   s    r   ra   zHTTP2Connection.close™  s3   € ð 	�‰×'Ñ'Ô)Ü)×0Ñ0ˆŒØ×Ñ×"Ñ"Õ$r!   c                óx  — |j                   j                  di «      }|j                  dd «      }| j                  �| j                  ‚	 | j                  j	                  | j
                  |«      }|dk(  rt        d«      ‚	 t        «       5  | j                  5  | j                  j                  |«      }|D ]8  }t        |t        j                  j                   «      sŒ(| j#                  |«       Œ: 	 d d d «       d d d «       S # t        $ r}|| _        d| _        |‚d }~ww xY w# 1 sw Y   Œ4xY w# 1 sw Y   S xY w)NÚtimeoutÚreadr!   zServer disconnectedT)rY   rº   rF   r3   rÖ   ÚREAD_NUM_BYTESr	   Ú	ExceptionrC   r   r>   r9   Úreceive_datars   r5   rª   rÂ   rË   )rH   r   ÚtimeoutsrÕ   rŸ   rv   rª   r°   s           r   rÁ   z#HTTP2Connection._read_incoming_data¢  s8  € Ø×%Ñ%×)Ñ)¨)°RÓ8ˆØ—,‘,˜v tÓ,ˆà×ÑÐ+Ø×&Ñ&Ð&ð	Ø×'Ñ'×,Ñ,¨T×-@Ñ-@À'ÓJˆDØ�sŠ{Ü)Ð*?Ó@Ð@ð ô   Ó!ñ 	DØ×!Ñ!ñ DØ04·±×0KÑ0KÈDÓ0Q�Ø#ò D�EÜ! %¬¯©×)HÑ)HÕIØ×<Ñ<¸UÕCñD÷D÷	Dð ˆøô+ ò 	ð $'ˆDÔ Ø%)ˆDÔ"ØˆIûð	ú÷Dð Dú÷	Dð ˆúsC   Á6D Â	D/ÂAD#ÃD#Ã0D/Ä	D ÄDÄD Ä#D,	Ä(D/Ä/D9c                ó„  — |j                   j                  di «      }|j                  dd «      }| j                  5  | j                  j	                  «       }| j
                  �| j
                  ‚	 | j                  j                  ||«       	 d d d «       y # t        $ r}|| _        d| _	        |‚d }~ww xY w# 1 sw Y   y xY w)NrÕ   ÚwriteT)
rY   rº   r@   r9   Údata_to_sendrG   r3   rÜ   rØ   rC   )rH   r   rÚ   rÕ   rÝ   rv   s         r   rŠ   z$HTTP2Connection._write_outgoing_dataÄ  s»   € Ø×%Ñ%×)Ñ)¨)°RÓ8ˆØ—,‘,˜w¨Ó-ˆà×Ññ 	ØŸ>™>×6Ñ6Ó8ˆLà×$Ñ$Ð0Ø×+Ñ+Ð+ðØ×$Ñ$×*Ñ*¨<¸ÕA÷	ð 	øô ò ð ),�Ô%Ø)-�Ô&Ø�	ûðú÷	ð 	ús)   »3B6Á/BÂ	B3ÂB.Â.B3Â3B6Â6B?c                ó2  — | j                   j                  |«      }| j                   j                  }t        ||«      }|dk  rT| j	                  |«       | j                   j                  |«      }| j                   j                  }t        ||«      }|dk  rŒT|S )a  
        Returns the maximum allowable outgoing flow for a given stream.

        If the allowable flow is zero, then waits on the network until
        WindowUpdated frames have increased the flow rate.
        https://tools.ietf.org/html/rfc7540#section-6.9
        r   )r9   Úlocal_flow_control_windowÚmax_outbound_frame_sizerÇ   r»   )rH   r   rP   Ú
local_flowÚmax_frame_sizeÚflows         r   r�   z'HTTP2Connection._wait_for_outgoing_flowß  s‡   € ð Ÿ.™.×BÑBÀ9ÓMˆ
Ø"Ÿn™n×DÑDˆÜ�:˜~Ó.ˆØ�aŠiØ× Ñ  Ô)ØŸ™×AÑAÀ)ÓLˆJØ!Ÿ^™^×CÑCˆNÜ�z >Ó2ˆDð	 �a‹ið
 ˆr!   c                ó    — || j                   k(  S rÑ   )r2   ©rH   rI   s     r   r[   z"HTTP2Connection.can_handle_requestó  s   € Ø˜Ÿ™Ñ%Ð%r!   c                ó$   — | j                  «        S rÑ   )Ú	is_closedrÓ   s    r   Úis_connectedzHTTP2Connection.is_connectedö  s   € Ø—>‘>Ó#Ð#Ð#r!   c                ó  — | j                   t        j                  k7  xrd | j                   xrU | j                   xrF | j
                  j                  j                  t        j                  j                  j                  k(   S rÑ   )r:   r#   r*   rC   rB   r9   Ústate_machineÚstater5   r6   ÚConnectionStaterÓ   s    r   Úis_availablezHTTP2Connection.is_availableù  sq   € à�K‰KÔ.×5Ñ5Ñ5ò aØ×*Ñ*Ð*òaà×-Ñ-Ð-òað —^‘^×1Ñ1×7Ñ7¼2¿=¹=×;XÑ;X×;_Ñ;_Ñ_Ð`ð		
r!   c                óX   — t        j                  «       }| j                  }|d uxr ||kD  S rÑ   )rÍ   rÎ   r;   )rH   rÏ   Ú	expire_ats      r   Úhas_expiredzHTTP2Connection.has_expired  s-   € Ü�n‰nÓˆð —O‘Oˆ	Ø Ð$Ò8¨¨y©Ð8r!   c                ó<   — | j                   t        j                  k(  S rÑ   )r:   r#   r)   rÓ   s    r   Úis_idlezHTTP2Connection.is_idle  s   € Ø�{‰{Ô1×6Ñ6Ñ6Ð6r!   c                 ó   — y)NTr+   rÓ   s    r   Úcan_multiplexzHTTP2Connection.can_multiplex  s   € Ør!   c                ó<   — | j                   t        j                  k(  S rÑ   )r:   r#   r*   rÓ   s    r   rç   zHTTP2Connection.is_closed  s   € Ø�{‰{Ô1×8Ñ8Ñ8Ð8r!   c                ó|   — t        | j                  «      }|›d| j                  j                  › d| j                  › �S )Nz
, HTTP/2, ú, Request Count: )Ústrr2   r:   Únamer<   rå   s     r   ÚinfozHTTP2Connection.info  s:   € Ü�T—\‘\Ó"ˆØ�˜: d§k¡k×&6Ñ&6Ð%7Ð7HÈ×I\ÑI\ÐH]Ð^Ð^r!   c           	     ó²   — | j                   j                  }t        | j                  «      }d|› d|›d| j                  j
                  › d| j                  › d�	S )Nú<z [z, r÷   z]>)Ú	__class__r%   rø   r2   r:   rù   r<   )rH   Ú
class_namerI   s      r   Ú__repr__zHTTP2Connection.__repr__  sU   € Ø—^‘^×,Ñ,ˆ
Ü�T—\‘\Ó"ˆØ�:�,˜b  
¨"¨T¯[©[×-=Ñ-=Ð,>Ð>OÐPT×PcÑPcÐOdÐdfÐgÐgr!   c                ó   — | S rÑ   r+   rÓ   s    r   Ú	__enter__zHTTP2Connection.__enter__  s   € Øˆr!   c                ó$   — | j                  «        y rÑ   )ra   )rH   Úexc_typeÚ	exc_valueÚ	tracebacks       r   Ú__exit__zHTTP2Connection.__exit__   s   € ð 	�
‰
�r!   rÑ   )rI   r
   rJ   r   rK   zfloat | None)r   r   Úreturnr   )r   r   r  ÚNone)r   r   rP   r¬   r  r  )r   r   rP   r¬   rŸ   Úbytesr  r  )r   r   rP   r¬   r  z%tuple[int, list[tuple[bytes, bytes]]])r   r   rP   r¬   r  úGenerator[bytes])r   r   rP   r¬   r  zKh2.events.ResponseReceived | h2.events.DataReceived | h2.events.StreamEnded)r   r   rP   z
int | Noner  r  )r°   zh2.events.RemoteSettingsChangedr  r  )rP   r¬   r  r  ©r  r  )r   r   r  zlist[h2.events.Event])r   r   rP   r¬   r  r¬   )rI   r
   r  Úbool)r  r  )r  rø   )r  r-   )NNN)r  ztype[BaseException] | Noner  zBaseException | Noner  ztypes.TracebackType | Noner  r  )$r%   r&   r'   r×   r5   r1   ÚH2Configurationr8   rL   r{   r_   rm   rn   r—   r˜   ro   r¸   r©   r»   rË   rr   ra   rÁ   rŠ   r�   r[   rè   rí   rð   rò   rô   rç   rú   rÿ   r  r  r+   r!   r   r-   r-   %   s  „ Ø€NØ�Y‰Y×&Ñ&ÀÐ&ÓF€Fð *.ð	 7àð 7ð ð 7ð 'ó	 7óDfóP+ó>+ó>2ó
/ó+ó&ó(ð ØðØ+.ðà	Tóô)+óV+ó(!ó&%ó óDó6ó(&ó$ó
ó9ó7óó9ó_óhóð
 04Ø*.Ø04ð	à,ðð (ðð .ð	ð
 
ôr!   r-   c                  ó$   — e Zd Zdd„Zdd„Zdd„Zy)rq   c                ó<   — || _         || _        || _        d| _        y )NF)Ú_connectionÚ_requestÚ
_stream_idÚ_closed)rH   r6   r   rP   s       r   rL   z"HTTP2ConnectionByteStream.__init__*  s   € Ø%ˆÔØˆŒØ#ˆŒØˆ�r!   c              #  óÞ  K  — | j                   | j                  dœ}	 t        dt        | j                   |«      5  t	        | j
                  j                  | j                   | j                  ¬«      «      5 }|D ]  }|–— Œ 	 d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w# t        $ r7}t        «       5  | j                  «        d d d «       |‚# 1 sw Y   |‚xY wd }~ww xY w­w)NrO   Úreceive_response_body)
r  r  r   r^   r   r  r¸   r`   r   ra   )rH   ry   r™   rš   rv   s        r   Ú__iter__z"HTTP2ConnectionByteStream.__iter__0  sÜ   è ø€ Ø!Ÿ]™]¸¿¹ÑIˆð	ÜÐ.´¸¿¹ÀvÓNñ $Ü!Ø×$Ñ$×;Ñ;ÀDÇMÁMÐ]a×]lÑ]lÐ;Ómóð $àØ!)ò $˜Ø#›ñ$÷$÷$ð $÷$ð $ú÷$ð $ûô ò 	ô $Ó%ñ Ø—
‘
”÷àˆI÷àˆIþð	üs{   ‚C-�B* ¹;BÁ4BÂBÂ	B* ÂC-ÂB	ÂBÂB'Â#B* Â&C-Â'B* Â*	C*Â3
C%Â=CÃ
C%ÃC"	ÃC%Ã%C*Ã*C-c                óö   — | j                   sad| _         d| j                  i}t        dt        | j                  |«      5  | j
                  j                  | j                  ¬«       d d d «       y y # 1 sw Y   y xY w)NTrP   rZ   rT   )r  r  r   r^   r  r  rr   )rH   ry   s     r   ra   zHTTP2ConnectionByteStream.closeA  sp   € Ø�|Š|ØˆDŒLØ! 4§?¡?Ð3ˆFÜÐ(¬&°$·-±-ÀÓHñ MØ× Ñ ×1Ñ1¸D¿O¹OÐ1ÔL÷Mð Mð ÷Mð Mús   ¾'A/Á/A8N)r6   r-   r   r   rP   r¬   r  r  )r  r
  r  )r%   r&   r'   rL   r  ra   r+   r!   r   rq   rq   )  s   „ óóô"Mr!   rq   )r   r   r  r  )*Ú
__future__r   ÚenumÚloggingrÍ   Útypesr•   Úcollections.abcr   Ú	h2.configr5   Úh2.connectionÚ	h2.eventsÚh2.exceptionsÚh2.settingsÚ_backends.baser   Ú_exceptionsr   r   r	   Ú_modelsr
   r   r   Ú_synchronizationr   r   r   Ú_tracer   Ú_utilsr   Ú
interfacesr   Ú	getLoggerr^   r    ÚIntEnumr#   r-   rq   r+   r!   r   ú<module>r+     sŒ   ðÝ "ã Û Û Û Û Ý %ã Û Û Û Û å *ß YÑ Yß /Ñ /ß BÑ BÝ Ý !Ý +à	ˆ×	Ñ	Ð,Ó	-€óqô˜$Ÿ,™,ô ôAÐ)ô A÷HMò Mr!   