
    hh[                    B   S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SK	rS SK
rS SKrS SKrSSKJr  SSKJrJrJr  SSKJrJrJr  SSKJrJrJr  SSKJr  S	S
KJr  \R>                  " S5      r SS jr! " S S\RD                  5      r# " S S\5      r$ " S S5      r%g)    )annotationsN   )NetworkStream)ConnectionNotAvailableLocalProtocolErrorRemoteProtocolError)OriginRequestResponse)Lock	SemaphoreShieldCancellation)Trace   )ConnectionInterfacezhttpcore.http2c                :    [        S U R                   5       5      $ )Nc              3     #    U  H4  u  pUR                  5       S :H  =(       d    UR                  5       S:H  v   M6     g7f)s   content-length   transfer-encodingN)lower).0kvs      F/var/www/html/env/lib/python3.13/site-packages/httpcore/_sync/http2.py	<genexpr>#has_body_headers.<locals>.<genexpr>   s9      #DA 	
	&&K!'')7K*KK#s   <>)anyheaders)requests    r   has_body_headersr      s      OO      c                       \ rS rSrSrSrSrSrg)HTTPConnectionState$   r   r       N)__name__
__module____qualname____firstlineno__ACTIVEIDLECLOSED__static_attributes__r%   r    r   r"   r"   $   s    FDFr    r"   c                     \ rS rSrSr\R                  R                  SS9r S!     S"S jjr	S#S jr
S$S jrS%S	 jrS%S
 jr        S&S jrS%S jr      S'S jr      S(S jr      S)S jr S!     S*S jjr    S+S jrS,S jrS-S jrS.S jrS$S jrS/S jrS0S jrS1S jrS1S jrS1S jrS1S jrS2S jrS2S jr S3S jr!   S4       S5S jjr"S r#g)6HTTP2Connection*      F)validate_inbound_headersNc                   Xl         X l        X0l        [        R                  R                  U R                  S9U l        [        R                  U l
        S U l        SU l        [        5       U l        [        5       U l        [        5       U l        [        5       U l        SU l        SU l        SU l        0 U l        S U l        S U l        S U l        g )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__HTTP2Connection.__init__.   s     %/?334;;3G)..(,&6&6%*"$)!!&  	 NR#1526r    c           
        U R                  UR                  R                  5      (       d/  [        SUR                  R                   SU R                   35      eU R
                     U R                  [        R                  [        R                  4;   a2  U =R                  S-  sl
        S U l        [        R                  U l        O
[        5       e S S S 5        U R                     U R                  (       d   SU0n[        S[         X5         U R"                  " S0 UD6  S S S 5        SU l        SU l        U R,                  R.                  R0                  n[3        U5      U l        [7        X@R*                  -
  5       H  nU R4                  R9                  5         M     S S S 5        U R4                  R9                  5          U R,                  R;                  5       n/ U R<                  U'    XS.n[        S[         X5         U RG                  XS9  S S S 5        [        S	[         X5         U RI                  XS9  S S S 5        [        S
[         X5       nU RK                  XS9u  pX4Ul&        S S S 5        [O        W	W
[Q        XUS9SU RR                  US.S9$ ! , (       d  f       GN= f! , (       d  f       GN= f! [$         a<  n['        5          U R)                  5         S S S 5        Ue! , (       d  f       Ue= fS nAff = f! , (       d  f       GNl= f! [>        R@                  RB                   a'    SU l"        U =R                  S-  sl
        [        5       ef = f! , (       d  f       GNT= f! , (       d  f       GN== f! , (       d  f       GN= f! [$         a  n['        5          SU0n[        S[         X5         U RU                  US9  S S S 5        O! , (       d  f       O= fS S S 5        O! , (       d  f       O= f[W        U[>        R@                  RX                  5      (       a1  U RZ                  (       a  []        U RZ                  5      e[_        U5      eUeS nAff = f)NzAttempted to send request to z on connection to r   r   send_connection_initTr   	stream_idsend_request_headerssend_request_bodyreceive_response_headersrT   s   HTTP/2)http_versionnetwork_streamrT   )statusr   content
extensionsrT   response_closedr%   )0can_handle_requesturlrL   RuntimeErrorr5   rA   r=   r"   r*   r+   r?   r>   r   r@   rD   r   logger_send_connection_initBaseExceptionr   close_max_streamsr<   local_settingsmax_concurrent_streamsr   _max_streams_semaphorerangeacquireget_next_available_stream_idrG   r8   
exceptionsNoAvailableStreamIDErrorrE   _send_request_headers_send_request_body_receive_responsereturn_valuer   HTTP2ConnectionByteStreamr6   _response_closed
isinstanceProtocolErrorrH   r   r   )rK   r   
sci_kwargsexclocal_settings_max_streams_rT   kwargstracer[   r   s              r   handle_requestHTTP2Connection.handle_requestU   s   &&w{{'9'9::
 /0B0B/C Dll^% 
 {{299;N;S;STT##q(#"&188,.. 	  __--	"+W!5J. 22@Z@ .2* %&! NN11HH + /88R.S+9<M<MMNA//779 O1 6 	##++-	+CCEI&(DLL#.	!(AF-vwG**7*P H*FGD'''M E*FG"&"8"8# #9 # '-%6" 1$9U$-&*&:&:!*		 	w   % +-

 .I .-I _@ }}55 	+(,D%1$(**	+ HGDD $  	#%%y1,fgF))I)> GFF &%%
 #r}}::;; ..-d.I.IJJ )--I-	s  &A+J&L9J;J)!J;)A6L)L ,N MN *M0:N N-)N 
J&)
J8	3J;6L8J;;
L
K<K* 
K<*
K94K<<LL
LAM
M-(N 0
M?:N 
NN 
Q#
Q(O1>O	O1
O%!O1(	Q1
O?	;A#QQ#c           	     4   [         R                  R                  S[         R                  R                  R                  S[         R                  R                  R
                  S[         R                  R                  R                  S0S9U R                  l        U R                  R                  [         R                  R                  R                  	 U R                  R                  5         U R                  R                  S5        U R                  U5        g)zx
The HTTP/2 connection requires some initial setup before we can start
using individual request/response streams on it.
Tr   d   r1   )clientinitial_values   N)r8   settingsSettingsSettingCodesENABLE_PUSHMAX_CONCURRENT_STREAMSMAX_HEADER_LIST_SIZEr<   rg   ENABLE_CONNECT_PROTOCOLinitiate_connectionincrement_flow_control_window_write_outgoing_data)rK   r   s     r   rc   %HTTP2Connection._send_connection_init   s     )+(<(< ((44a((??((==u )= 
)
% NN))KK$$<<
 	**,44U;!!'*r    c                J   [        U5      (       + nUR                   VVs/ s H  u  pEUR                  5       S:X  d  M  UPM     snnS   nSUR                  4SU4SUR                  R
                  4SUR                  R                  4/UR                   VVs/ s H-  u  pEUR                  5       S;  d  M  UR                  5       U4PM/     snn-   nU R                  R                  X'US9  U R                  R                  S	US
9  U R                  U5        gs  snnf s  snnf )z0
Send the request headers to a given stream ID.
   hostr   s   :methods
   :authoritys   :schemes   :path)r   r   )
end_streamr   rX   N)r   r   r   methodr`   schemetargetr<   send_headersr   r   )rK   r   rT   r   r   r   	authorityr   s           r   ro   %HTTP2Connection._send_request_headers   s    *'22
 $+??K?41aggi76JQ?KAN	 (I&++,w{{))*	
  
'wwy QWWYN'

 	##I:#N44Ui4P!!'*' L
s   DDD7Dc                    [        U5      (       d  g[        UR                  [        R                  5      (       d   eUR                   H  nU R                  XU5        M     U R                  X5        g)z@
Iterate over the request body sending it to a given stream ID.
N)r   ru   rM   typingIterable_send_stream_data_send_end_stream)rK   r   rT   datas       r   rp   "HTTP2Connection._send_request_body   sY      (('..&//::::NND""7t< #g1r    c                    U(       ad  U R                  X5      n[        [        U5      U5      nUSU X5S p6U R                  R	                  X&5        U R                  U5        U(       a  Mc  gg)z9
Send a single chunk of data in one or more data frames.
N)_wait_for_outgoing_flowminlenr<   	send_datar   )rK   r   rT   r   max_flow
chunk_sizechunks          r   r   !HTTP2Connection._send_stream_data	  sa     33GGHSY1J{
+T+->4NN$$Y6%%g. dr    c                \    U R                   R                  U5        U R                  U5        g)zP
Send an empty data frame on on a given stream ID with the END_STREAM flag set.
N)r<   r   r   )rK   r   rT   s      r   r    HTTP2Connection._send_end_stream  s$     	!!),!!'*r    c                j    U R                  X5      n[        U[        R                  R                  5      (       a  OM=  Sn/ nUR
                  c   eUR
                   HP  u  pgUS:X  a  [        UR                  SSS95      nM&  UR                  S5      (       a  M>  UR                  Xg45        MR     XE4$ )zD
Return the response status code and headers for a given stream ID.
   s   :statusasciiignore)errors   :)
_receive_stream_eventru   r8   eventsResponseReceivedr   intdecode
startswithappend)rK   r   rT   eventstatus_coder   r   r   s           r   rq   !HTTP2Connection._receive_response  s     ..wBE%!;!;<< 
 }}(((MMDAJ!!((78("DE\\$''v&	 " %%r    c              #    #     U R                  X5      n[        U[        R                  R                  5      (       ae  UR
                  c   eUR                  c   eUR
                  nU R                  R                  XB5        U R                  U5        UR                  v   O*[        U[        R                  R                  5      (       a  gM  7f)zM
Iterator that returns the bytes of the response body for a given stream ID.
N)r   ru   r8   r   DataReceivedflow_controlled_lengthr   r<   acknowledge_received_datar   StreamEnded)rK   r   rT   r   amounts        r   _receive_response_body&HTTP2Connection._receive_response_body5  s      ..wBE%!7!78833???zz---5588K))'2jj E299#8#899 s   CCc                P   U R                   R                  U5      (       d3  U R                  X5        U R                   R                  U5      (       d  M3  U R                   U   R                  S5      n[	        U[
        R                  R                  5      (       a  [        U5      eU$ )zk
Return the next available event for a given stream ID.

Will read more data from the network if required.
r   )	rG   get_receive_eventspopru   r8   r   StreamResetr   )rK   r   rT   r   s       r   r   %HTTP2Connection._receive_stream_eventG  s~     ,,""9--  4 ,,""9--Y'++A.eRYY2233%e,,r    c           	        U R                      U R                  b]  U R                  R                  nU(       a+  U(       a$  X#:  a  U =R                  S-  sl        [	        5       e[        U R                  5      eUb!  U R                  R                  U5      (       Gdg  U R                  U5      nU GHO  n[        U[        R                  R                  5      (       a3  [        S[        U5       nU R                  U5        XVl        SSS5        M`  [        U[        R                  R"                  [        R                  R$                  [        R                  R&                  [        R                  R(                  45      (       aH  UR*                  U R                  ;   a+  U R                  UR*                     R-                  U5        GM  GM  [        U[        R                  R.                  5      (       d  GMI  XPl        GMR     SSS5        U R1                  U5        g! , (       d  f       GM~  = f! , (       d  f       N3= f)zX
Read some data from the network until we see one or more events
for a given stream ID.
Nr   receive_remote_settings)rB   rH   last_stream_idr?   r   r   rG   r   _read_incoming_dataru   r8   r   RemoteSettingsChangedr   rb   _receive_remote_settings_changerr   r   r   r   r   rT   r   ConnectionTerminatedr   )rK   r   rT   r   r   r   r|   s          r   r   HTTP2Connection._receive_eventsV  s    __**6!%!<!<!K!KI4N''1,'022)$*E*EFF  (8(8(C(C11':#E!%)H)HII"5vw" @@G16.	  $II66II22II11II11	  !??dll: LL9@@G ; $E299+I+IJJ6;3+ $! N 	!!'*+ % _s+   C H0-HC.H08H0
H-'	H00
H>c                d   UR                   R                  [        R                  R                  R
                  5      nU(       a  [        UR                  U R                  R                  R                  5      nU(       a  X0R                  :w  a  X0R                  :  a@  U R                  R                  5         U =R                  S-  sl        X0R                  :  a  M@  X0R                  :  aA  U R                  R                  5         U =R                  S-  sl        X0R                  :  a  M@  g g g g g )Nr   )changed_settingsr   r8   r   r   r   r   	new_valuer<   rg   rh   rf   ri   releaserk   )rK   r   rh   new_max_streamss       r   r   /HTTP2Connection._receive_remote_settings_change  s     "'!7!7!;!;KK$$;;"
 "!&00--DDO ?6G6G#G%(9(99//779%%*% &(9(99 &(9(99//779%%*% &(9(99	 $H "r    c                8   U R                   R                  5         U R                  U	 U R                     U R                  (       a"  U R                  (       d  U R                  5         OU R                  [        R                  :X  a|  U R                  (       dk  [        R                  U l        U R                  b(  [        R                  " 5       nX R                  -   U l        U R                  (       a  U R                  5         S S S 5        g ! , (       d  f       g = fN)ri   r   rG   rA   rH   re   r=   r"   r*   r+   r7   time	monotonicr>   rE   )rK   rT   nows      r   rt    HTTP2Connection._response_closed  s    ##++-LL#**4<<

 3 : ::4<<166))5..*C&),B,B&BDO,,JJL s   CD
Dc                    U R                   R                  5         [        R                  U l        U R
                  R                  5         g r   )r<   close_connectionr"   r,   r=   r6   re   rK   s    r   re   HTTP2Connection.close  s3     	''))00""$r    c                ~   UR                   R                  S0 5      nUR                  SS 5      nU R                  b  U R                  e U R                  R	                  U R
                  U5      nUS:X  a  [        S5      e U R                  R                  U5      nU$ ! [         a  nXPl        SU l        UeS nAff = f)Ntimeoutreadr    zServer disconnectedT)r]   r   rI   r6   r   READ_NUM_BYTESr   	ExceptionrF   r<   receive_data)rK   r   timeoutsr   r   rx   r   s          r   r   #HTTP2Connection._read_incoming_data  s    %%)))R8,,vt,+&&&	'',,T-@-@'JDs{)*?@@  )-(C(CD(I  	 $' %)D"I	s   	7B 
B<(B77B<c                   UR                   R                  S0 5      nUR                  SS 5      nU R                     U R                  R	                  5       nU R
                  b  U R
                  e U R                  R                  XC5         S S S 5        g ! [         a  nXPl        SU l	        UeS nAff = f! , (       d  f       g = f)Nr   writeT)
r]   r   rC   r<   data_to_sendrJ   r6   r   r   rF   )rK   r   r   r   r   rx   s         r   r   $HTTP2Connection._write_outgoing_data  s    %%)))R8,,w->>668L$$0+++$$**<A    ),%)-&	 s)   4B60B
B3B..B33B66
Cc                4   U R                   R                  U5      nU R                   R                  n[        X45      nUS:X  aU  U R	                  U5        U R                   R                  U5      nU R                   R                  n[        X45      nUS:X  a  MU  U$ )z
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   )r<   local_flow_control_windowmax_outbound_frame_sizer   r   )rK   r   rT   
local_flowmax_frame_sizeflows         r   r   'HTTP2Connection._wait_for_outgoing_flow  s     ..BB9M
"nnDD:.ai  )AA)LJ!^^CCNz2D	 ai
 r    c                    XR                   :H  $ r   )r5   rK   rL   s     r   r_   "HTTP2Connection.can_handle_request  s    %%r    c                8   U R                   [        R                  :g  =(       aw    U R                  (       + =(       a_    U R                  (       + =(       aG    U R
                  R                  R                  [        R                  R                  R                   :X  + $ r   )r=   r"   r,   rF   rE   r<   state_machinestater8   r9   ConnectionStater   s    r   is_availableHTTP2Connection.is_available  ss    KK.555 ***--- ,,22==00778		
r    c                r    [         R                  " 5       nU R                  S L=(       a    XR                  :  $ r   )r   r   r>   )rK   r   s     r   has_expiredHTTP2Connection.has_expired
  s)    nnd*Ds__/DDr    c                <    U R                   [        R                  :H  $ r   )r=   r"   r+   r   s    r   is_idleHTTP2Connection.is_idle  s    {{16666r    c                <    U R                   [        R                  :H  $ r   )r=   r"   r,   r   s    r   	is_closedHTTP2Connection.is_closed  s    {{18888r    c                ~    [        U R                  5      nU< SU R                  R                   SU R                   3$ )Nz
, HTTP/2, , Request Count: )strr5   r=   namer?   r   s     r   infoHTTP2Connection.info  sA    T\\"j
4;;#3#3"4 5"1124	
r    c           	         U R                   R                  n[        U R                  5      nSU SU< SU R                  R
                   SU R                   S3	$ )N<z [z, r  z]>)	__class__r&   r  r5   r=   r  r?   )rK   
class_namerL   s      r   __repr__HTTP2Connection.__repr__  sZ    ^^,,
T\\"
|2fZr$++*:*:); <"112"6	
r    c                    U $ r   r%   r   s    r   	__enter__HTTP2Connection.__enter__&  s    r    c                $    U R                  5         g r   )re   )rK   exc_type	exc_value	tracebacks       r   __exit__HTTP2Connection.__exit__)  s     	

r    )rF   rH   rG   r>   r<   r@   r7   rf   ri   r6   r5   rI   rB   r?   rD   r=   rA   rE   rJ   rC   r   )rL   r	   rM   r   rN   zfloat | None)r   r
   returnr   )r   r
   r  None)r   r
   rT   r   r  r  )r   r
   rT   r   r   bytesr  r  )r   r
   rT   r   r  z%tuple[int, list[tuple[bytes, bytes]]])r   r
   rT   r   r  typing.Iterator[bytes])r   r
   rT   r   r  zKh2.events.ResponseReceived | h2.events.DataReceived | h2.events.StreamEnded)r   r
   rT   z
int | Noner  r  )r   zh2.events.RemoteSettingsChangedr  r  )rT   r   r  r  r  r  )r   r
   r  zlist[h2.events.Event])r   r
   rT   r   r  r   )rL   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)   r   r8   r4   H2Configurationr;   rO   r}   rc   ro   rp   r   r   rq   r   r   r   r   rt   re   r   r   r   r_   r   r   r   r  r	  r  r  r  r-   r%   r    r   r/   r/   *   s   NYY&&&FF *.	%7%7 %7 '	%7NfP+B+>
2//+./6;/	/+&&+.&	.&,+.	$+.	T  9=.+.++5.+	.+`+4+	+&!%86(&	
E79


 04*.04	, ( .	
 
 r    r/   c                  B    \ rS rSr        SS jrSS jrS	S jrSrg)
rs   i2  c                6    Xl         X l        X0l        SU l        g )NF)_connection_request
_stream_id_closed)rK   r9   r   rT   s       r   rO   "HTTP2ConnectionByteStream.__init__3  s     &#r    c              #    #    U R                   U R                  S.n [        S[        U R                   U5         U R                  R                  U R                   U R                  S9 H  nUv   M	     S S S 5        g ! , (       d  f       g = f! [         a<  n[        5          U R                  5         S S S 5        Ue! , (       d  f       Ue= fS nAff = f7f)NrS   receive_response_body)	r$  r%  r   rb   r#  r   rd   r   re   )rK   r{   r   rx   s       r   __iter__"HTTP2ConnectionByteStream.__iter__;  s     !]]I	.vN!--DD MMT__ E E  K ONN
  	 $%

 &I &%I	sc   CB :A<3B ;C<
B
B 	C
B 
C
C!B<2
C<
C	CCCc                   U R                   (       d^  SU l         SU R                  0n[        S[        U R                  U5         U R
                  R                  U R                  S9  S S S 5        g g ! , (       d  f       g = f)NTrT   r^   rX   )r&  r%  r   rb   r$  r#  rt   )rK   r{   s     r   re   HTTP2ConnectionByteStream.closeK  sd    ||DL!4??3F(&$--H  11DOO1L IH  IHs   $A11
A?)r&  r#  r$  r%  N)r9   r/   r   r
   rT   r   r  r  )r  r  r  )r&   r'   r(   r)   rO   r*  re   r-   r%   r    r   rs   rs   2  s2    )4;HK	 Mr    rs   )r   r
   r  r  )&
__future__r   enumloggingr   typesr   	h2.configr8   h2.connection	h2.eventsh2.exceptionsh2.settings_backends.baser   _exceptionsr   r   r   _modelsr	   r
   r   _synchronizationr   r   r   _tracer   
interfacesr   	getLoggerrb   r   IntEnumr"   r/   rs   r%   r    r   <module>r?     s    "           * 
 0 / B B  +			+	,$,, E) EPM Mr    