
    i                      d dl mZ d dlZd dlZd dlZd dlmZmZ d dlmZm	Z	 d dlm
Z 	 d dlZn# eef$ r dZY nw xY w	 d dlmZ n# eef$ r dZY nw xY wddlmZ dd	lmZmZmZ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"m#Z#m$Z$m%Z%m&Z&m'Z' ddl(m)Z)m*Z*m+Z+ ddl,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 ddl4m5Z5m6Z6 ddl7m8Z8m9Z9m:Z:m;Z; ddl<m=Z=m>Z> ddl7m?Z?m@Z@mAZA ejB        rddlCmDZD  e+            ZE G d de?          ZFdS )    )annotationsN)datetimetimezone)
SOCK_DGRAMSOCK_STREAM)timeout)Certificate   )HTTPHeaderDict)DEFAULT_BLOCKSIZEDEFAULT_KEEPALIVE_DELAYUDP_DEFAULT_BLOCKSIZE	responses)HTTP1ProtocolHTTP2ProtocolHTTP3ProtocolHTTPOverQUICProtocolHTTPOverTCPProtocolHTTPProtocolFactoryQuicTLSConfig)ConnectionTerminatedDataReceivedEarlyHeadersReceivedEventHandshakeCompletedHeadersReceivedStreamResetReceived)AsyncSocketSSLAsyncSocket_has_complete_support_dgram)EarlyResponseIncompleteReadInvalidHeaderMustDowngradeErrorProtocolErrorResponseNotReadySSLError)parse_alt_svcresolve_cert_reqs   )ConnectionInfoHttpVersionQuicPreemptiveCacheTypeResponsePromise)_HAS_HTTP3_SUPPORT_HAS_SYS_AUDIT   )AsyncBaseBackendAsyncDirectStreamAccessAsyncLowLevelResponse)_TYPE_SOCKET_OPTIONSc                      e Zd Zej        ej        ej        gZdddefe	j
        ddeddv fdZedwd            Zedxd            Zedwd            Zedxd            ZdydZdzd Z	 	 	 	 	 	 	 	 	 	 	 	 d{d|d3Zd}d~d6Zdzd7Z	 	 	 ddd<Zdzd=Zddd@Zd>ddAddddBddNZ	 	 dddSZddVZ	 dd>d>dWdd]Z	 dddbZddcZ	 	 dddhZ dddiddnZ!d>doddsZ"dzdtZ#dzduZ$ xZ%S )AsyncHfaceBackendNsocket_optionsdisabled_svnpreemptive_quic_cachekeepalive_delayhoststrport
int | Noner   int | float | Nonesource_addresstuple[str, int] | None	blocksizeintr:   _TYPE_SOCKET_OPTIONS | Noner;   set[HttpVersion] | Noner<   QuicPreemptiveCacheType | Noner=   float | int | Nonec                  t                      rt          s/|t                      }|                    t          j                   t                                          |||||||||		  	         d | _        d | _	        d | _
        d | _        g | _        d | _        d | _        d| _        d | _        d| _        d | _        d | _        d | _        d | _        d S )Nr9   F)r/   _HAS_DGRAM_SUPPORTsetaddr,   h3super__init___proxy_protocol	_protocol_svn
_stream_id_AsyncHfaceBackend__headers(_AsyncHfaceBackend__expected_body_length)_AsyncHfaceBackend__remaining_body_length%_AsyncHfaceBackend__authority_bit_set%_AsyncHfaceBackend__legacy_host_entry$_AsyncHfaceBackend__protocol_bit_set'_AsyncHfaceBackend__custom_tls_settings!_AsyncHfaceBackend__alt_authority_AsyncHfaceBackend__origin_port _max_tolerable_delay_for_upgrade)selfr>   r@   r   rC   rE   r:   r;   r<   r=   	__class__s             ^/root/projects/butler/venv/lib/python3.11/site-packages/urllib3_future/backend/_async/hface.pyrQ   zAsyncHfaceBackend.__init__K   s     "## 	-+= 	-#"uu[^,,,)%"7+ 	 
	
 
	
 
	
 <@LP(,	&* 5726#37$). 15 (- <@"7;)- ?C---    returnboolc                    | j         dS | j                                         du r| j                                         du S dS )NF)rS   is_availablehas_expiredr`   s    rb   is_saturatedzAsyncHfaceBackend.is_saturated   sH    >!5 >&&((E11>--//588urc   c                ,    | j         dS | j         j        S )Nr   )rS   max_stream_countri   s    rb   rl   z"AsyncHfaceBackend.max_stream_count   s    >!1~..rc   c                ,    | j         d uo| j         j        S N)rS   multiplexedri   s    rb   is_multiplexedz AsyncHfaceBackend.is_multiplexed   s    ~T)Hdn.HHrc   c                    | j         | j        S 	 | j                                         }n# t          $ r
 | j        cY S w xY w| j        |k    r|n| j        S )z
        The remote may require us to a lower blocksize
        than defined. This property will avoid relying
        too much on defined blocksize.
        )rS   rE   max_frame_sizeNotImplementedError)r`   remote_max_sizes     rb   rr   z AsyncHfaceBackend.max_frame_size   sq     >!>!	""n;;==OO" 	" 	" 	">!!!	" #'.?"B"BVs   * >>AsyncSocket | Nonec                N  K   | j         t          j        | j        vr| j        dk    r| j        r`| j        | j        f| j        v rK| j        | j        | j        pdf         | _        | j        r#t          j        | _         | j        d         | _        n^t          j	        | j        v rKt          j
        | j        v r8| j        | j        pdf| _        t          j        | _         | j        d         | _        | j         t          j        k    r{| j        t          k    rt          | _        t          | _        | j        rK| j        j        | j        k    r6d | _         d | _        | j        t          k    rt          | _        t$          | _        n(| j        t          k    rt          | _        t$          | _        d S )Nhttps  r1   )rT   r,   rO   _disabled_svnscheme_preemptive_quic_cacher>   r@   r]   h11h2rE   r   r   r   socket_kind	_response	authorityr   ri   s    rb   	_new_connzAsyncHfaceBackend._new_conn   s}      Id&888w&& +4Y	*d.III'+'BY	 0S1($ ' = +DI%)%9!%<DI4#555Nd&888(,	493C'D$'N	 03	9&&~!222!6)D ~ /$.":di"G"G 	!%>%:::%6DN#. ~!666!2*Dtrc   Nonec                  K   | j         
J d            | j        J | j        J | j        d S t	                      }t          | j                  t          u }t          j        | j	        v }t          j
        | j	        v }d }|rA|s| j        t          j
        k    rd S t          j
        }|                     d          | _        n| j        t          j        k    rd S |du r+|du r't          j        }|                     d          | _        | j        s<| j        t          j        k    r't          j
        }|                     d          | _        | j        r(| j        | j        j        ~| j        j                                        | _        | j        j        ,| xj        | j        j                                        z  c_        | xj        dz  c_        | j        d	k    rd
| _        nd
| _        |t          j        k    r=| j        6| j        | j        | j        | j        pdf<   | j        | j        pdf| j        vrd S || _        | j        pd| _        | j        d         | _        |                                  d {V  d S d S )Nz<attempt to call _upgrade() prior to successful getresponse()h2c)svcFTrO   r}   g      $@g{Gz?g      @rx   r1   )r   sockrT   r]   r/   typer   r,   rO   ry   r}    _AsyncHfaceBackend__altsvc_prober|   	conn_infoestablished_latencytotal_secondsr_   tls_handshake_latencyr{   r>   r@   r^   close)r`   has_h3_supportis_plain_socketis_h3_disabledis_h2_disabledupgradable_svns         rb   _upgradezAsyncHfaceBackend._upgrade   s     ~))J *)) y$$$y$$$ +F ,-- ty//[8 %4+==$4+==-1 	E kn!<!<(^N#'#6#6 $7 $ $D   yKN**&&>T+A+A!,'+':':t':'D'D$ ' EDI,H,H!,'+':':t':'D'D$ $	
 *N6B N6DDFF 5 >7C99<JJLL99 55=55 8D@@<?D98;5//.:, /DI<L0MN 	49#34D<WWW&DI!%!1cD,Q/DI**,,I$	 $	rc   ssl_contextssl.SSLContext | Noneca_certs
str | Noneca_cert_dirca_cert_dataNone | str | bytesssl_minimum_versionssl_maximum_version	cert_filestr | bytes | Nonekey_filekey_passwordcert_fingerprintassert_hostname"None | str | typing.Literal[False]	cert_reqsint | str | Nonec                   | j         t          j        k    rt          S d}d}|st	          |          t
          j        k    rd}|duo3d|                                v o|                                d         dk    }|sO|M|K|I|du rEt          j        t
          j	                  }t          |d          r|                                 nd}|rft          |dd          pd}|j        t
          j        k    rd}|:|8|6|                    d          }|rd                    d	 |D                       }t!          |||t#          |t$                    r|                                n||||	|
|t#          |t(                    r|ndt#          |t$                    r|nd| j        pd
          | _        | j        j         | _        dS )z^Meant to support TLS over QUIC meanwhile cpython does not ship with its native implementation.FTNx509_car   load_default_certshostname_checks_common_name
c              3  >   K   | ]}t          j        |          V  d S rn   )sslDER_cert_to_PEM_cert).0certs     rb   	<genexpr>z0AsyncHfaceBackend._custom_tls.<locals>.<genexpr>d  s>       - -;?066- - - - - -rc   g     r@)insecurecafilecapathcadatacertfilekeyfilekeypasswordr   cert_use_common_nameverify_hostnamer   idle_timeout)rT   r,   rO   NotImplementedr)   r   	CERT_NONEcert_store_stats
SSLContextPROTOCOL_TLS_CLIENThasattrr   getattrverify_modeget_ca_certsjoinr   
isinstancer?   encodere   _keepalive_delayr\   r   is_verified)r`   r   r   r   r   r   r   r   r   r   r   r   r   r   allow_insecuressl_ctx_have_certsctx_root_certificatess                    rb   _custom_tlszAsyncHfaceBackend._custom_tls*  s2     9&&!!$$ 	""3I">">#-"O"O!N t# >[99;;;>,,..y9A= 	 	# #$"e++.)@AAK{$899 #..0000" 	%BEJJSe ! &#-77!%K$7L<P(3(@(@(F(F%( #'99 - -CX- - - $ $L &3#,,,<&&((($-!5/400OO/3//OO.7%)&
 &
 &
".  $9BBtrc   rO   r   c                *   | j         J | j         j                            d          D ]i}t          |          D ]W\  }}||k    r|                    d          \  }}|r|| j        k    r2	 |t          |          fc c S # t          $ r Y Tw xY wjdS )zFDetermine if remote yield support for an alternative service protocol.Nzalt-svc:)r   msggetlistr(   splitr>   rF   
ValueError)r`   r   alt_svcprotocolalt_authorityserverr@   s          rb   __altsvc_probez AsyncHfaceBackend.__altsvc_probe  s     ~)))~)11)<< 	 	G+8+A+A  '-s??,22377  f	11!3t99,,,,,,!   D  ts   -B
BBc                  K   | j         | j        
J d            | j        
J d            | j        t	          | j        t
                    }|r3| j                                        }||dk    r1t          j        t                    | _        t          j        | _        n>|dk    r1t          j        t                    | _        t          j        | _        nt          d| d          t          j        | j        vr1t          j        t                    | _        t          j        | _        nt          j        | j        vr1t          j        t                    | _        t          j        | _        nlt!          d          t          j        | j        vr1t          j        t                    | _        t          j        | _        nt          j        | j        vr0t          j        t                    | _        t          j        | _        nt!          d          | j        t          j        k    rt          j        t                    | _        n| j        t          j        k    r~| j        J | j        | j        \  }}| j        }n| j        | j        }}t          j        t,          | j        j        r| j        j        n|t1          |          f|| j        	          | _        t3                      | _        | j        | j        _        t9          | d
          r5| j        r.| j        d         | j        _        | j        d         | j        _        | j        t          j        k    rd }t9          | j        d          r| j        j         !                    d          | j        _"        	 | j        j         !                    d          | j        _#        n# tH          $ r d | j        _#        Y nw xY wd | j        _%        | j        j         &                                }t9          | j        j         d          rt9          | j        j         j'        d          r| j        j         j'        (                                }| j        j#        s&|r$|d         )                                | j        _#        tU          |          dk    rtV          t	          |d         tV                    rot9          tX          d          rZtY          j-        |d         .                                          | j        _/        |d         )                                | j        _0        |r|d         | j        _&        |d         dk    rtX          j1        j2        | j        _3        n|d         dk    rtX          j1        j4        | j        _3        n\|d         dk    rtX          j1        j5        | j        _3        n4|d         dk    rtX          j1        j6        | j        _3        nd | j        _3        | j        j%        @t9          | j        d          r+| j        7                                d d         | j        _%        | j        | j        t          j        k    r| j        Ct          j        | j        v r0t          j        t                    | _        t          j        | _        n/t          j        t                    | _        t          j        | _        | j        | j        _        | j        j"        rNt9          | d
          r>| j        r7tq          j9        tt          j;                  | j        d         z
  | j        _<        t{          j>                    | _?        d S | j@        | j        A                    | j@                   	 | B                    t          d           d {V  n# t          t          t          t          t          f$ r}t	          | j        t                    r| j        | j        t          j        k    r(| jI        !| j        | jJ        pdf}	|	| jI        v r| jI        |	= d | _        t          j        | jK        vst          j        | jK        vr!t          d| j         d| j         d           | d }~ww xY wt{          j>                    | _?        | j@        | j        A                    | jM                   d | _@        t	          | j        t                    r| j        !                    d          | j        _"        | j        !                    d          | j        _#        | j        7                                d d         | j        _%        | j        &                                | j        _&        tX          j1        j6        | j        _3        | j        N                    d          | j        _0        | j        N                    d          | j        _/        | j        j"        rUt9          | d
          rG| j        j<        s=tq          j9        tt          j;                  | j        d         z
  | j        _<        d S d S d S d S )!Nz:_post_conn() must be called when socket is closed or unsetzEprobable attempt to call _post_conn() prior to successful _new_conn()r}   zhttp/1.1zUnsupported ALPN 'z<' during handshake. Did you try to reach a non-HTTP server ?zNo compatible protocol are enabled to emit request. You currently are connected using TCP TLS and must have HTTP/1.1 or/and HTTP/2 enabled to pursue.zNo compatible protocol are enabled to emit request. You currently are connected using TCP Unencrypted and must have HTTP/1.1 or/and HTTP/2 enabled to pursue.)remote_addressserver_name
tls_config_connect_timingsr   r1   sslobjT)binary_formF_sslobjget_verified_chainPEM_cert_to_DER_certzTLSv1.0zTLSv1.1zTLSv1.2zTLSv1.3getpeernamer*   tzr8   )receive_firstrx   z#The server yielded its support for z[ through the Alt-Svc header while unable to do so. To remediate that issue, either disable z" or reach out to the server admin.)O_tunnel_hostrS   r   rT   r   r   selected_alpn_protocolr   newr   r,   r}   r   r|   r%   ry   RuntimeErrorrO   r\   r]   r>   r@   r   r   rF   r+   r   http_versionr   r   resolution_latencyr   r   getpeercertcertificate_dercertificate_dictr   destination_addresscipherr   r   get_infolenr	   r   r   public_bytesissuer_certificate_derissuer_certificate_dict
TLSVersionTLSv1tls_versionTLSv1_1TLSv1_2TLSv1_3r   r   nowr   utcr   time	monotonic_connected_atr_   
settimeout"_AsyncHfaceBackend__exchange_untilr   TimeoutErrorSocketTimeoutConnectionRefusedErrorConnectionResetErrorr   r{   r^   r;   r$   r   getissuercert)
r`   is_tcp_tls_connalpn_r@   r   cipher_tuplechainealt_keys
             rb   
_post_connzAsyncHfaceBackend._post_conn  s	     $>))L *)) y$$S %$$
 9(NCCO )#'9#C#C#E#E#t||)<)@)O)O$/N		++)<)@)O)O$/O		+ssss   #d.@@@)<)@)O)O$/O		$t/AAA)<)@)O)O$/N		*^   ?$*<<<%8%<]%K%KDN +DII ^4+===%8%<]%K%KDN +DII&b  
 yKN**!4!8!G!Gkn,,1==='3"2GAt!YFF#'9diDF!4!8!  5E$2BB#D			$ !'#9
" 
" 
" ())&*i#4+,, 	J1F 	J040Ea0HDN-151Fq1IDN.9&&8<Lty(++ "U151A1M1M $ 2N 2 2.;6:i6F6R6R$) 7S 7 7DN33 " ; ; ;6:DN333; 6:2#y/6688 49+Y77 UGI$,.B= = U !I,4GGIIE  >: Nu N:?(:K:K:M:M7 E

Q'3&uQx== 4#C)?@@ 4
  4U1X5J5J5L5LMM = BGqARARATAT> 6(4Q%?i//141EDN..!!_	11141GDN..!!_	11141GDN..!!_	11141GDN..15DN.~19g	=? ?9 6:Y5J5J5L5LRaR5P2 >!TY+/%A%A~%+/T=O*O*O!4!8!G!G'N		!4!8!G!G'O	*.)DN' .D"455 ) LHL111D4I"4MM 4 "&!1!1DF 0<I  !FGGG'	''"# (          
 " 
 "	 "	 "	 4>+?@@(4
 I//3?#y$*<*CDG$"=== 7@ "&
  O4+<<<"~T->>>,qdi q qCG9q q q   E"	H "^--0<I  ...  	- dn&:;; 	-1^-G-G  .H . .DN* /3n.H.H! /I / /DN+ 261F1F1H1H!1LDN.$(N$9$9$;$;DN!),)?DN&59^5Q5Q! 6R 6 6DN2 59N4P4P  5Q 5 5DN1
 N*	011	 N8	 ---0Eb0II N000	 	 	 	 	 	s+   #*O O'&O'"^7 7#bB-bbhttpheaderstyping.Mapping[str, str] | Nonerz   c                    | j         rt          d          t          j        | j        vr$| j                            t          j                   || _        || _        |r	|| _        d S i | _        d S )Nz.Can't set up tunnel for established connection)	r   r   r,   rO   ry   rN   r   _tunnel_port_tunnel_headers)r`   r>   r@   r  rz   s        rb   
set_tunnelzAsyncHfaceBackend.set_tunnel  s     9 	@  
 >!333"";>222(,(, 	&#*D   #%D   rc   c                "  K   | j         J | j        J | j        J | j        J | j        t
          j        k    rt          d          | j                                         | _	        d| j         d| j         
                    d          fdg}| j                                        D ]S\  }}|                    |                                
                                |
                    d          f           T| j                             | j	        |d           |                     t"          dt"          fd	           d {V }d }|D ]M}t%          |t"                    r6|j        D ].\  }}|d
k    r#t)          |                                          } n/N|d uod|cxk    odk     nc }	|	sI|                                  d {V  |r|t.          v rt.          |         nd}
t1          d| d|
           d | _        d | _         d | _        d S )Nz7Unable to establish a tunnel using other than HTTP/1.1.
   :authorityr   ascii)   :method   CONNECT
iso-8859-1TF)r   event_type_collectablerespect_end_stream_signal   :status   ,  UnknownzTunnel connection failed:  )rS   r   r   r  rT   r,   r|   rs   get_available_stream_idrU   r   r  itemsappendlowersubmit_headersr  r   r   r  rF   decoder   r   OSError_protocol_factory)r`   req_contextheadervalueeventsstatusevent
raw_header	raw_valuetunnel_acceptedmessages              rb   _tunnelzAsyncHfaceBackend._tunnel  s     ~)))y$$$ ,,, ,,,9''%M   .@@BB $::t'8::AA'JJ %
 "17799 	V 	VMFE 5 5 7 7l9S9STUUUU%%O	
 	
 	
 ,,$3#5&+ - 
 
 
 
 
 
 
 
 " 	 	E%11 -2]  )J	!Z//!$Y%5%5%7%7!8!8 0 !'d 2 Lv8K8K8K8K8K8K8K8K 	K**,,%+R)0C0C	&!!  IvIIIIJJJ 	!%rc   Fexpect_framec                  K   | j         | j        dS | j                                         }| j                             |sdnd           	 | j                             | j                   d{V }n?# t          $ r Y | j                             |           dS t          t          f$ r d}Y nw xY w| j                             |           n# | j                             |           w xY w|s| j        	                                 dS 	 t          |t                    r |D ]}| j                            |           n| j                            |           n## | j                                        $ r Y dS w xY w	 | j                                        }|sn4	 | j                             |           d{V  n# t           $ r Y dS w xY wPt#          j                    | _        | j                                        S )a  This method should be called by a thread using TrafficPolice when it is idle.
        Multiplexed protocols can receive incoming data unsolicited. Like when using QUIC
        or when reaching a WebSocket.
        This method return True if there is any event ready to unpack for the connection.
        Some server implementation may be aggressive toward "idle" session
        this is especially true when using QUIC.
        For example, google/quiche expect regular ACKs, otherwise will
        deduct that network conn is dead.
        see: https://github.com/google/quiche/commit/c4bb0723f0a03e135bc9328b59a39382761f3de6
             https://github.com/google/quiche/blob/92b45f743288ea2f43ae8cdc4a783ef252e41d93/quiche/quic/core/quic_connection.cc#L6322
        NFgMbP?g?rc   )r   rS   
gettimeoutr  recvrE   r  ConnectionAbortedErrorr  connection_lostr   listbytes_received
exceptionsbytes_to_sendsendallr*  r   r   _last_used_athas_pending_event)r`   r7  bck_timeout	peek_datagro_segmentdata_outs         rb   peek_and_reactz AsyncHfaceBackend.peek_and_react  sb      9 65i**,, 		,?UUC@@@	."innT^<<<<<<<<II 	 	 	 I  ----- '(<= 	 	 	III	 I  ----DI  ---- 	N**,,,5	)T** 9#, ? ?KN11+>>>>? --i888~((** 	 	 	55			~3355H i''1111111111   uu		 "^--~//111s[   %A1 0C 1
B-;C B-*C ,B--C C'AE E87E8 F: :
GGT)r   r  r  maximal_data_in_readdata_in_len_from	stream_id
event_type%type[Event] | tuple[type[Event], ...]r   r  ,type[Event] | tuple[type[Event], ...] | Noner  rI  rJ  $typing.Callable[[Event], int] | NonerK  list[Event]c          	       K   | j         | j        J ||dk    s|dk    sd}d}g }	g }
|dk    r|	S |r|dk     rd}d}d}	 d}| j                            |          s|du rg }	 | j                                        }|sn|                    |           2| j        t          j        u r4t          |          dk    r!| j         	                    |           d{V  n%|D ]"}| j         	                    |           d{V  #	 | j         
                    | j                   d{V }n^# t          t          f$ rJ}t          |t                    r)|t          u st          |t                     rt          |v r|d}Y d}~nd}~ww xY wd}|s|	s| j        et%          | j        d	          rP	 | j                                         n# | j                                        $ r}t+          |          |d}~ww xY w| j                                         nqt          |t.                    r|D ]}||t          |          z  }	 | j                            |           2# | j                                        $ rQ}t%          |d
          r,t%          |d          rt3          |j        |j                  |t+          |          |d}~ww xY wnt          |          }| j        dz  |dz  z   | _        |||z  }	 | j                            |           np# | j                                        $ rQ}t%          |d
          r,t%          |d          rt3          |j        |j                  |t+          |          |d}~ww xY w|du rg }	 | j                                        }|sn|                    |           2| j        t          j        u r4t          |          dk    r!| j         	                    |           d{V  n%|D ]"}| j         	                    |           d{V  #| j                            |          D ]}t%          |d          }|s!t          |t<                    r|j        dk    rs|q|t@          u st          |t                     rSt@          |v rJd| _        | !                                 d{V  |	                    tA          |dd                     |	c S |du r}|dk    rw| j        pt          |t                     r	tD          |v s	|tD          u rItG          d |	D                       r0d| _        | !                                 d{V  t+          d          |j        dk    r$|j$        rd|j$        v rtK          |j$                  |j        dk    r$| j        t          j        k    rtM          d          	 |j$        rzd|j$        v rq|j$        '                    dd          (                    d          }d t!          |)                    d                    D             \  }}t3          |||z
            n# tT          tV          f$ r Y nw xY wt+          |j$                  |rt          |tX                    r| j        t          j-        k    r|j        dk    s | j        t          j        k    r5|j        dk    r*t          j.        | j/        vrta          d| j                   t+          d |j1         d!te          |j                   d"          |s|	                    |           n]t          ||          r8|	                    |           |r 	 | ||          z  }n&# tf          $ r Y nw xY wn|
                    |           |duo||k    }|rt          ||          s|r=|du r$|r"|r |j4        du r|
r | j        j5        |
  |	c S |
r | j        j5        |
  |	c S |r"|j4        du r|du r|
r | j        j5        |
  |	c S |r-|j4        du r$|"| ||j1        k    r|
r | j        j5        |
  |	c S 
)#zThis method simplify socket exchange in/out based on what the protocol state machine orders.
        Can be used for the initial handshake for instance.Nr   r8   FTrK  r1   rc   eof_receivedexpected_lengthactual_length)partialexpectedgffffff?g333333?rK  
end_streamc              3  D   K   | ]}t          |t                    d u V  dS )FN)r   r   r   r  s     rb   r   z5AsyncHfaceBackend.__exchange_until.<locals>.<genexpr>  s1      XXA
1o > >% GXXXXXXrc   z-Remote end closed connection without responsei  r-  i*  zQTLS over QUIC did not succeed (Error 298). Chain certificate verification failed.z%without sending complete message bodyz=peer closed connection without sending complete message body  z()c              3     K   | ]B}t          d                     d |D                                                                 V  CdS )r\  c              3  B   K   | ]}|                                 |V  d S rn   )isdigit)r   cs     rb   r   z?AsyncHfaceBackend.__exchange_until.<locals>.<genexpr>.<genexpr>  s/      +H+H!AIIKK+HA+H+H+H+H+H+Hrc   N)rF   r   strip)r   r
  s     rb   r   z5AsyncHfaceBackend.__exchange_until.<locals>.<genexpr>  se       2 2$% !$BGG+H+Hq+H+H+H$H$H$N$N$P$P Q Q2 2 2 2 2 2rc   z,    i  z8The remote server is unable to serve this resource over zStream z# was reset by remote peer. Reason: .)6r   rS   rC  r@  r&  rT   r,   rO   r   rA  r:  rE   r;  r  r   r   tupler   r   rS  r?  r%   r<  r=  r>  r"   rU  rT  _recv_size_emar/  r   
error_coder   r   r   allr5  r#   r'   replacera  r   r   
IndexErrorr   r}   r|   r;   r$   rK  hexAttributeErrorrY  reshelve)r`   rL  r   r  r  rI  rJ  rK  data_in_lenr/  reshelve_eventsreach_sockettbsrG  chunkdata_inr  udp_gro_segmentincoming_buffer_sizer1  stream_related_eventr   receivedrW  target_cap_reacheds                            rb   __exchange_untilz"AsyncHfaceBackend.__exchange_until&  s      y$)C)C)C+(A--1E1K1K'+$
  ')1$$M 	$$81$<$<(-%#' #T	"!&L>33i3HH j; E))C-#'>#?#?#A#A' "!

8,,,- yKN22s3xx!||"i//4444444444%( ; ;E"&)"3"3E":":::::::::"$(INN4>$B$BBBBBBBGG.0DE 	" 	" 	"!!%9::  "&888&z599 9 !3j @ @  !GGGGGG	"  $ 8:  
9$."<'C C"<: N779999#~88:: : : : #0"2"29:
 668888!'400 &:/6 > >O/7 +s?/C/C C> $ = =o N N N N#'>#<#<#>#> 
> 
> 
> $+1.?#@#@ !-W$%F" F" !- +901121B+& +& +& ,-%- '4A&6&6A =
>>$ 037||, /#58Ls8RR + ,3'+??K: N99'BBBB#~88:: 	: 	: 	:  'q*;<< ) !?B B ) '5,-OaFW'" '" '"'(!) #0"2"29	: !D((C-#'>#?#?#A#A' "!

8,,,- yKN22s3xx!||"i//4444444444%( ; ;E"&)"3"3E":":::::::::...CC f" f"-4UK-H-H$+ l
5BV0W0W l
 (A--%1&,66 *:u = = 7 %1J$>$>
 ! 
 #jjll*******( ) #+/      & %,,#sNN N6 !+:u = = 7 %4z$A$A *o = =XXQWXXXXX !> *."jjll*******+K  
 (C//!M 0$55+EM::: )S00TY+.5P5P&o  !M G5= X X"'-"7"7 _ "# # $eDkk  
2 2).syy)?)?2 2 2.Hh
 #1(0)1H)<# # #  '
3    (666) j@S.T.T  	[^338HC8O8O	[^338HF8R8R&?$2CCC"4 f[_[d f f# #  (n%/nnVYZ_ZjVkVknnn   . 6MM%((((!%)?@@ 	6e,,,+ %% +/?/?/F/F F#1 % % % $%% (..u555 )4 <#';; #
  "":eZ#@#@ ""EW "" +e335 40 4 !+t33. J 7 7 I I#)MMM & B//AA!MMM("(D001T99& B//AA!MMM(	"(D00,4.:!U_44& B//AA!MMMiT	"s   %D* *F;A F  F+G G7"G22G7IK:AKK;L N2AM>>NBYY&%Y&+]::
^^methodurl	skip_hostskip_accept_encodingc                   g | _         d| _        d| _        d| _        d| _        d| _        t          j        t          j	                  | _
        | j        | j        | j        }}n| j        | j        }}d|                    d          fd| j                            d          fd|                    d          fg| _         |s_|                    d          }| j                             d	|| j        k    s||n|d
|                                 z   f           d| _        |s| j                             d           dS dS )zNInternally fhace translate this into what putrequest does. e.g. initial trame.NFr   r  r  s   :schemes   :pathidnar  r   T)s   accept-encodings   identity)rV   rW   rX   rZ   rY   r[   r   r   r   r   _start_last_requestr   r  r>   r@   r   rz   r&  default_port)r`   ry  rz  r{  r|  r>   r@   r   s           rb   
putrequestzAsyncHfaceBackend.putrequest`  sv    &*#'+$#' #( "'#+<8<#@#@#@ (*D,=$DDDI$D w//0""7++ szz'**+
  	,#{{622IN!!!t000DL I"ZZZ%6%6%8%88	   (,D$# 	N!!    	 	rc   r-  valuesc                   |                                 }t          |t                    r|                    d          n|}| j        t
          j        k    }|s|dv rd S | j        I|dk    rC	 t          |d                   | _        n# t          $ r t          d|d          d          w xY w| j        |dk    rt          |d         t                    r!|d                             d          | _        nVt          |d         t                    r|d         | _        n-t          |d                                       d	          | _        d S |D ]}t          |t                    r|                    d	          }n:t          |t                    r|}n"t          |                              d	          }|                    d
          ry|dk    rd| _        d }| j        D ](\  }}	|                    d
          s n||k    r||	f} n)|| j                            |           | j                            d||f           | j                            ||f           d S )Nr  >      upgrade
   connection
   keep-alive   transfer-encodings   content-lengthr   z#Invalid content-length set. Given 'z' when only digits are allowed.s   hostr~  r     :s	   :protocolT)r'  r   r?   r   rT   r,   r|   rW   rF   r   r%   rZ   bytes
startswithr[   rV   removeinsertr&  )
r`   r-  r  encoded_headersupport_te_chunkedr.  encoded_valueitem_to_remove_k_vs
             rb   	putheaderzAsyncHfaceBackend.putheader  s    3=fc3J3JVw///PV $(9#? " 	 "   &.>EV3V3V.1&)nn++   #d&)ddd   %-.G2K2K&)S)) O+1!9+;+;F+C+C((F1Iu-- O+1!9((+.vay>>+@+@+N+N(F $	 $	E%%% @ %\ : :E5)) @ % #E

 1 1, ? ?((.. !\11.2D+!%"n  FB==.. ^++*,b , "-N)).999%%&%    %%&%   ?$	 $	s   ,B $B+)encode_chunkedexpect_body_afterwardmessage_bodybytes | Noner  r  ResponsePromise | Nonec                 K   | j         |                                  d {V  | j        |                                  d {V  | j         | j        J | j                                        | _        |du o| j        du }| j        wd }| j        D ](\  }}|dk    r||f} n|	                    d          s n)|| j        
                    |           | j                            dd| j        f           d| _        | j        du rt          d          	 | j                            | j        | j        |           n4# | j                                        $ r}t          |          |d }~ww xY w	 g }		 | j                                        }
|
sn|	                    |
           2| j        t&          j        u r4t+          |	          dk    r!| j                             |	           d {V  n%|	D ]"}| j                             |           d {V  #t/          j                    | _        nT# t4          $ rG}t7          | | j        | j                  }|| j        |j        <   || j        |j        <   ||_         |d }~ww xY w|du rz| j!        r8| j"        r1tG          j$        tJ          j&        	          | j!        z
  | j"        _'        t7          | | j        | j                  }|| j        |j        <   || j        |j        <   |S d S )
NFr  r  r
   T)zOurllib3.future do not support emitting HTTP requests without the `Host` header zKIt was only permitted in HTTP/1.0 and prior. This client support HTTP/1.1+.rX  r1   r   )(r   connectrS   r  r$  rU   r[   rZ   rV   r  r  r  rY   r%   r(  r?  r@  r&  rT   r,   rO   r   rA  r   r   rB  BrokenPipeErrorr.   	_promisesuid_promises_per_streamrK  promiser  r   r   r   r   r   request_sent_latency)r`   r  r  r  should_end_streamexisting_authoritycursor_headercursor_valuer  rp  bufrq  rps                rb   
endheaderszAsyncHfaceBackend.endheaders  s      9,,..        >!//#########y$)C)C)C .@@BB "U*Ot/F%/O 	
 #/!%/3~  +| M11*7)F&E$//55 E "-%%&8999N!!!mT5M%NOOO'+D$#u,,  	*N)), *    
 ~((** 	* 	* 	*"")	*	2C n2244 

3	  yKN**s3xx!||i'',,,,,,,,,,  3 3E)++E2222222222 "&!1!1D  	 	 	 tGGB%'DN26"68D%bl3AIG	 !E))' DN LHL111D4LL 3 !tGGB%'DN26"68D%bl3Its2   'D? ?E0E++E04B!H. .
I?8AI::I?_AsyncHfaceBackend__bufr  _AsyncHfaceBackend__stream_id _AsyncHfaceBackend__close_streamc                   K   | j         J | j        J | j                             |t          |                    du r| j                            | j                   d {V }t          |t                    r |D ]}| j                             |           n| j                             |           	 | j         	                                }|sn!| j        
                    |           d {V  =| j                             |t          |                    du | j                             |||           	 | j         	                                }|sn!| j        
                    |           d {V  =t          j                    | _        d S )NTrX  )rS   r   should_wait_remote_flow_controlr   r:  rE   r   r=  r>  r@  rA  submit_datar   r   rB  )r`   r  r  r  rr  rF  rG  s          rb   
__write_stzAsyncHfaceBackend.__write_stA  s      ~)))y$$$ N::;E

SS  !INN4>::::::::G'4(( 7#* ? ?KN11+>>>>? --g6662>7799 i''1111111112 N::;E

SS & 	""% 	# 	
 	
 	
	.~3355H )##H---------	. "^--rc   c                  K   | j         J | j        J | j                             |           	 | j                                         }|sn!| j                            |           d{V  =	 | j        |= n# t          $ r Y nw xY w| j                                         r|                                  d{V  t          j
                    | _        dS )zKill a stream properly.NrR  )rS   r   submit_stream_resetr@  rA  _pending_responsesKeyErrorrh   r   r   r   rB  )r`   r  rG  s      rb   
__abort_stzAsyncHfaceBackend.__abort_stk  s     ~)))y$$$**[*AAA	.~3355H )##H---------	.	'44 	 	 	D	 >%%'' 	**,,!^--s   /A8 8
BB_AsyncHfaceBackend__amt&_AsyncHfaceBackend__respect_end_signal#_AsyncHfaceBackend__dummy_operation)tuple[bytes, bool, HTTPHeaderDict | None]c           	        K   |ro	 | j         |= n# t          $ r Y nw xY w| j        L| j                                        r3| j                                        r|                                  d{V  dS d}|                     t          dt          t          f|d ||           d{V }t          j
                    | _        |r|d         j        rd}	 | j         |= n# t          $ r Y nw xY w| j        n| j                                        r4| j                                        r|                                  d{V  n!| j        r|                                  d{V  d}|rd}t          |d         t                    rd}n0t          |          dk    rt          |d	         t                    rd	}|t!                      }||         j        D ]N\  }	}
|	d
         dk    r|                    |	                    d          |
                    d                     O|                    |           |sdd|fS t          |          dk    rd                    d |D                       n|d
         j        ||fS )zKAllows us to defer the body loading after constructing the response object.N)rc   TNFTc                *    t          | j                  S rn   )r   data)xs    rb   <lambda>z-AsyncHfaceBackend.__read_st.<locals>.<lambda>  s    s16{{ rc   )r   r  rI  rJ  rK  r  r8   r*   r   :   r  r  rc   r1   c              3  $   K   | ]}|j         V  d S rn   )r  r[  s     rb   r   z.AsyncHfaceBackend.__read_st.<locals>.<genexpr>  s$      ,,QV,,,,,,rc   )r  r  rS   is_idlerh   r   r  r   r   r   r   rB  rY  r   r   r   r   r  rN   r)  popr   r  )r`   r  r  r  r  eotr/  trailersidxr2  r3  s              rb   	__read_stzAsyncHfaceBackend.__read_st  s!       
	#+K88    ~)>))++ '0J0J0L0L '**,,&&&&&&&"?=A=R=R$ "'22!&: >S >
 >
 8
 8
 8
 8
 8
 8
 "^-- 	*fRj+ 	*C+K88    ~)>))++ *0J0J0L0L ***,,&&&&&&&&\ *--//))))))) 	/C&*o66 V!!j_&M&M! )++-3C[-@  )J	!!},,  &--g66	8H8H8V8V    

3 /h.. 14FaCHH,,V,,,,,,VAY^
 	
s    
C 
C*)C*r  early_response_callbackr  r  Gtyping.Callable[[AsyncLowLevelResponse], typing.Awaitable[None]] | Noner4   c               Z  K   | j         | j        | j        st                      t	                      }d }| j        s| j        }n|r|j        nd }|                     t          t          fdt          t          fd|           d {V                                 }t          j                    | _        |j        D ]e\  }}|"|d         dk    r|dk    rt!          |          })|                    |                    d          |                    d                     ft'          |t                    o|d	k    }	|a	 |	r| j        |j                 }n| j                            |j                  }n:# t*          $ r}
t-          d
|j         d          |
d }
~
ww xY w|	s| j        |j        = |t-          d          |j        du }d}|j        D ]\  }}|dk    r|} n|d	k    s|dk    r1d|cxk    rdk     r$n n!t3          |j        | j        | j                  }nd }	 t8          |         }n# t*          $ r d}Y nw xY w|	r||Wt;          |                    d          || j        ||d | j        | j         |j        	  	        }||_!         ||           d {V  tD          #                    | ||           d {V S t;          |                    d          || j        |||du r	|| j        nd | j        | j         |j        || j$                  | _%        | j%        |_&        || j%        _!        | j        |j'        = |rV| j        (                                r| )                                 d {V  n6| j*        r| +                                 d {V  n| j%        | j,        |j        <   | j%        S )NTF)r   r  r  rK  r   r  r  r  r  e   zResponse received (stream: z) but no promise in-flightz@Got an HTTP response without a status code. This is a violation.rc   r  r  r   r!  r"  )bodyr   r@   rK  r  )r   r@   rK  dsastream_abort)-r   rS   r  r&   r   rp   rU   rK  r  r   r   r  r   r   rB  r  rF   rN   r)  r   r  r  r%   rY  request_headersr3   _AsyncHfaceBackend__read_st_AsyncHfaceBackend__write_str   r4   	_http_vsnr>   r@   from_promiser7   getresponse_AsyncHfaceBackend__abort_str   responser  rh   r   r  r   r  )r`   r  r  r  r0  rK  
head_eventr2  r3  is_early_responser  r  	http_verbr  reasonearly_responses                   rb   r  zAsyncHfaceBackend.getresponse  s      9 6dn 6"$$$ ""!" 	?II-4>))$I ''#( ##(( +0# (         #%% 	$ "^--%/%7 	X 	X!J	~*Q-4"7"7++ ^^FJ--g66	8H8H8V8VWWWW z#788JVs] 	 ?$ R"7
8LMGG"7;;J<PQQG   #b*2Fbbb 
 % A-g.?@ >R   #t+	%,%< 	 	!J	Z''%	 ( S==Y*44#:M:M:M:M#:M:M:M:M:M2I!3 3CC C	#F+FF 	 	 	FFF	  	&2!6$$W--N"i%/
" 
" 
" /6+--n=========*66g?V 7          /W%%N!Ulls{DNNi'
 
 
  >&-# N7;' 	H~))++ &jjll"""""""" &mmoo%%%%%%%9=D#G$56~s*   =4E2 2
F<FFH- -H<;H<)r  r  bytes | bytearrayr  c                 K   | j         | j        | j        t          d          | j        | j        | j        | _        	 | j                            | j        t          |                    du r| j                             | j	                   d{V }t          |t                    s| j                            |           n|D ]}| j                            |           | j                            | j        t          f          r| j        r8| j        r1t#          j        t&          j                  | j        z
  | j        _        t-          | | j        | j                  }|| j        |j        <   || j        |j        <   t9          |          	 | j                                        }|sn!| j                             |           d{V  =| j                            | j        t          |                    du | j        r| xj        t          |          z  c_        | j                            | j        ||           t@          rtC          j"        d| |           d}	 | j                                        }|sn<	 | j                             |           d{V  n# tF          $ r}|}Y d}~nd}~ww xY wX|s|r| j        r8| j        r1t#          j        t&          j                  | j        z
  | j        _        t-          | | j        | j                  }|| j        |j        <   || j        |j        <   |r	||_$        ||S n4# | j        %                                $ r}tM          |          |d}~ww xY wdS )	z4We might be receiving a chunk constructed downstreamNz,Trying to send data from a closed connectionT)rK  
excl_eventr   )r  rX  zhttp.client.send)'r   rU   rS   r   rX   rW   r  r   r:  rE   r   r=  r>  rC  r   r  r   r   r   r   r   r  r.   rV   r  r  r  rK  r!   r@  rA  r  r0   sysauditr  r  r?  r%   )	r`   r  r  rr  rF  r  rG  remote_pipe_shutdownr  s	            rb   sendzAsyncHfaceBackend.sendt  s(      9 74>;Q >  
 (0+7+/+FD(R	>>OSYY   
 !%	t~ > >>>>>>>!'400 CN11'::::'. C C55kBBBB >33"o;O:Q 4   4 / DN $LHL999D<TT ; )tOOB-/DN26*>@D-bl;'33336#~;;==H# )++H55555555569 >>OSYY   H + :,,D		9,,N&& '     :	,dD999;? 	->7799 -)++H5555555555& - - -+,((((((-	-  * +   5558PP N7 %T4?DNKK)+rv&:<)",7' /35(0..	 ~((** 	 	 	 	
 tsD   IM  J' &M '
J=1J83M 8J==BM M<'M77M<c                  K   | j         | j        dS | j                                        rdS 	 | j                                         n/# t          $ r Y dS | j                                        $ r Y dS w xY w	 | j                                        }|sn?	 | j                             |           d{V  n# t          t          j
        f$ r Y nw xY w[t          j                    | _        dS )z8Send a ping frame if possible. Otherwise, fail silently.N)r   rS   rh   pingrs   r?  r@  rA  r*  r   r'   r   r   rB  )r`   
ping_frames     rb   r  zAsyncHfaceBackend.ping  s6     9 6F>%%'' 	F	N!!!!" 	 	 	FF~((** 	 	 	FF		5577J i''
3333333333    		 "^--s)   A	 	
A5A54A5 B7 7CCc                  K   | j         r| j        	 | j                                         	 | j                                        }|sn?	 | j                             |           d {V  n# t
          t          j        f$ r Y nw xY w[n4# | j                                        $ r}t          |          |d }~ww xY w	 | j         
                                 | j                                          d {V  n# t
          $ r Y nw xY wd | _        d | _        i | _        i | _        i | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        t/          j                    | _        d| _        d S )NTg        )r   rS   submit_closer@  rA  r*  r   SSLEOFErrorr?  r%   r   wait_for_closerU   r  r  r  r\   r   rW   rX   r  _cached_http_vsnr   r   r   rB  re  )r`   goodbye_framer  s      rb   r   zAsyncHfaceBackend.close  s     9 	~)"N//111

"(,(D(D(F(F, "!""&)"3"3M"B"BBBBBBBBB#O  " " " "E	"
"	 ~0022 2 2 2'**12 	!!! i..0000000000    $&!"$%)"&*#'+$#'  $!!^--!s;   B 	 A* *BBB9$B44B9=8C6 6
DD)r>   r?   r@   rA   r   rB   rC   rD   rE   rF   r:   rG   r;   rH   r<   rI   r=   rJ   )rd   re   )rd   rF   )rd   ru   )rd   r   )NNNNNNNNNNNN)r   r   r   r   r   r   r   r   r   rA   r   rA   r   r   r   r   r   r   r   r   r   r   r   r   rd   re   )rO   )r   r?   rd   rD   )NNr  )
r>   r?   r@   rA   r  r  rz   r?   rd   r   )F)r7  re   rd   re   )rL  rM  r   re   r  rN  r  re   rI  rA   rJ  rO  rK  rA   rd   rP  )FF)
ry  r?   rz  r?   r{  re   r|  re   rd   r   )r-  r?   r  r?   rd   r   rn   )r  r  r  re   r  re   rd   r  )r  r  r  rF   r  re   rd   r   )r  rF   rd   r   )TF)
r  rA   r  rA   r  re   r  re   rd   r  )r  r  r  r  rd   r4   )r  r  r  re   rd   r  )&__name__
__module____qualname__r,   r|   r}   rO   supported_svnr   r2   default_socket_optionsr   rQ   propertyrj   rl   rp   rr   r   r   r   r   r  r  r6  rH  r  r  r  r  r  r  r  r  r  r  r   __classcell__)ra   s   @rb   r7   r7   H   s        _knknEM
  &(15*5C "804@D.E5C 5C 5C 5C 5C 5C 5C 5Cn    X / / / X/
 I I I XI W W W XW , , , ,\S S S Sn .2#"&+/*.*.(,'++/'+>B&*W W W W Wr    0y y y y|  37& & & & &2<& <& <& <&|72 72 72 72 72z $OS*.+/AE $x" x" x" x" x" x"|	  %*2 2 2 2 2hL L L L` &*]  %&+] ] ] ] ] ]@ FK(. (. (. (. (.T. . . .< &*"'Z
 Z
 Z
 Z
 Z
~ +/ Q Q Q Q Q Qn 	h h h h h hT. . . .>*" *" *" *" *" *" *" *"rc   r7   )G
__future__r   r  r   typingr   r   socketr   r   r   r  r   ImportErrorrk  _sslr	   _collectionsr   	_constantr   r   r   r   contrib.hfacer   r   r   r   r   r   r   contrib.hface.eventsr   r   r   r   r   r   r   contrib.ssar   r   r    r?  r!   r"   r#   r$   r%   r&   r'   utilr(   r)   _baser+   r,   r-   r.   hfacer/   r0   r2   r3   r4   TYPE_CHECKING_typingr5   rL   r7    rc   rb   <module>r     sh   " " " " " " 



   ' ' ' ' ' ' ' ' * * * * * * * * + + + + + +JJJJ^$   
CCC       ^$   KKK + * * * * *                                              T S S S S S S S S S                  5 4 4 4 4 4 4 4            7 6 6 6 6 6 6 6 S S S S S S S S S S	 0//////0022 _" _" _" _" _"( _" _" _" _" _"s   / 	;;A 	AA