
    nbi                      d dl mZ d dl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	 d dlm
Z
mZ d dlmZ 	 d dlZddlmZ n# eef$ r dZ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/m0Z0m1Z1m2Z2m3Z3 ddl4m5Z5m6Z6 ddl7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z> ej?        rddl@mAZA  eBed          ZC e	d          dd            ZD G d de8          ZEdS )    )annotationsN)datetimetimezone)	lru_cache)
SOCK_DGRAMSOCK_STREAM)timeout   )SSLTransport)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)EarlyResponseIncompleteReadInvalidHeaderMustDowngradeErrorProtocolErrorResponseNotReadySSLError)parse_alt_svcresolve_cert_reqs   )BaseBackendConnectionInfoDirectStreamAccessHttpVersionLowLevelResponseQuicPreemptiveCacheTypeResponsePromise)_TYPE_SOCKET_OPTIONSaudit)maxsizereturnboolc                     ddl m}  | rdS dd l}	 |j                            d          d uS # t
          t          t          f$ r Y dS w xY w)Nr
   )IS_FIPSFr   qh3)	util.ssl_r7   importlib.utilutil	find_specImportErrorModuleNotFoundError
ValueError)r7   	importlibs     l/var/www/html/mdtn/previsions/meteo_cartes/venv/lib/python3.11/site-packages/urllib3_future/backend/hface.py_HAS_HTTP3_SUPPORTrB   M   sw    ###### u~''..d::,j9   uus   , AAc                      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 )HfaceBackendNsocket_optionsdisabled_svnpreemptive_quic_cachekeepalive_delayhoststrport
int | Noner	   int | float | Nonesource_addresstuple[str, int] | None	blocksizeintrG   _TYPE_SOCKET_OPTIONS | NonerH   set[HttpVersion] | NonerI   QuicPreemptiveCacheType | NonerJ   float | int | Nonec                  t                      s/|t                      }|                    t          j                   t                                          |||||||||		  	         d | _        d | _        d | _	        d | _
        g | _        d | _        d | _        d| _        d | _        d| _        d | _        d | _        d | _        d | _        d S )NrF   F)rB   setaddr-   h3super__init___proxy_protocol	_protocol_svn
_stream_id_HfaceBackend__headers#_HfaceBackend__expected_body_length$_HfaceBackend__remaining_body_length _HfaceBackend__authority_bit_set _HfaceBackend__legacy_host_entry_HfaceBackend__protocol_bit_set"_HfaceBackend__custom_tls_settings_HfaceBackend__alt_authority_HfaceBackend__origin_port _max_tolerable_delay_for_upgrade)selfrK   rM   r	   rP   rR   rG   rH   rI   rJ   	__class__s             rA   r]   zHfaceBackend.__init___   s     "## 	-#"uu[^,,,)%"7+ 	 
	
 
	
 
	
 <@LP(,	&* 5726#37$). 15 (- <@"7;)- ?C---    r4   r5   c                    | j         dS | j                                         du r| j                                         du S dS )NF)r_   is_availablehas_expiredrl   s    rA   is_saturatedzHfaceBackend.is_saturated   sH    >!5 >&&((E11>--//588urn   c                ,    | j         dS | j         j        S )Nr   )r_   max_stream_countrr   s    rA   ru   zHfaceBackend.max_stream_count   s    >!1~..rn   c                ,    | j         d uo| j         j        S N)r_   multiplexedrr   s    rA   is_multiplexedzHfaceBackend.is_multiplexed   s    ~T)Hdn.HHrn   c                    | j         | j        S 	 | j                                         }n# t          $ r
 | j        cY S w xY w| j        |k    r|n| j        S rw   )r_   rR   max_frame_sizeNotImplementedError)rl   remote_max_sizes     rA   r{   zHfaceBackend.max_frame_size   so    >!>!	""n;;==OO" 	" 	" 	">!!!	" #'.?"B"BVs   * >>socket.socket | Nonec                J   | 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  r)   )r`   r-   r[   _disabled_svnscheme_preemptive_quic_cacherK   rM   ri   h11h2rR   r   r   r   socket_kind	_response	authorityr   rr   s    rA   	_new_connzHfaceBackend._new_conn   sy    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trn   Nonec                   | j         
J d            | j        J | j        J | j        d S t	                      }t          | j                  t          j        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        | _        | j        d         | _        |                                  d S d S )Nz<attempt to call _upgrade() prior to successful getresponse()h2c)svcFTr[   r   g      $@g{Gz?g      @r   r)   )r   sockr`   ri   rB   typesocketr-   r[   r   r   _HfaceBackend__altsvc_probe	conn_infoestablished_latencytotal_secondsrk   tls_handshake_latencyr   rK   rM   rj   close)rl   has_h3_supportis_plain_socketis_h3_disabledis_h2_disabledupgradable_svns         rA   _upgradezHfaceBackend._upgrade   s   ~))J *)) y$$$y$$$ +F ,-- ty//V]: %4+==$4+==-1 	E kn!<!<(^N#'#6#6 $7 $ $D   yKN**&&>T+A+A!,'+':':t':'D'D$ ' EDI,G,G!,'+':':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!%D,Q/DIJJLLLLLI$	 $	rn   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}|rt          |dd          pd}|j        t
          j        k    rd}|:|8|6|                    d          }|rd                    d	 |D                       }|t          |d
          r|j        du r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 rw   )sslDER_cert_to_PEM_cert).0certs     rA   	<genexpr>z+HfaceBackend._custom_tls.<locals>.<genexpr>s  s>       - -;?066- - - - - -rn   check_hostnameg     r@)insecurecafilecapathcadatacertfilekeyfilekeypasswordr   cert_use_common_nameverify_hostnamer   idle_timeout)r`   r-   r[   NotImplementedr(   r   	CERT_NONEcert_store_stats
SSLContextPROTOCOL_TLS_CLIENThasattrr   getattrverify_modeget_ca_certsjoinr   r   
isinstancerL   encoder5   _keepalive_delayrh   r   is_verified)rl   r   r   r   r   r   r   r   r   r   r   r   r   r   allow_insecuressl_ctx_have_certsctx_root_certificatess                    rA   _custom_tlszHfaceBackend._custom_tls9  s^     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
  'K)9:: (.%77"'%2#,,,<&&((($-!5/400OO/3//OO.7%)&
 &
 &
".  $9BBtrn   r[   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'   splitrK   rS   r?   )rl   r   alt_svcprotocolalt_authorityserverrM   s          rA   __altsvc_probezHfaceBackend.__altsvc_probe  s     ~)))~)11)<< 	 	G+8+A+A  '-s??,22377  f	11!3t99,,,,,,!   D  ts   -B
BBc                b   | j         | j        
J d            | j        
J d            | j        /t	          | j        t
          j        t          f          }|rpt	          | j        t
          j                  r| j                                        n| j        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        t2          | j        j        r| j        j        n|t7          |          f|| j        	          | _        t9                      | _        | j        | j        _        t?          | d
          r5| j         r.| j         d         | j        _!        | j         d         | j        _"        | j        t          j        k    rd }t?          | j        d          r| j        j	        #                    d          | j        _$        	 | j        j	        #                    d          | j        _%        n# tL          $ r d | j        _%        Y nw xY wd | j        _'        | j        j	        (                                }t?          | j        j	        d          r| j        j	        )                                }| j        j%        s&|r$|d         *                                | j        _%        tW          |          dk    rtX          t	          |d         tX                    rot?          t
          d          rZt          j-        |d         .                                          | j        _/        |d         *                                | j        _0        nt?          | j        d          r| j        #                    d          | j        _$        	 | j        #                    d          | j        _%        n# tL          $ r d | j        _%        Y nw xY wt?          | j        d          r| j        (                                nd }t?          | j        d          rt?          | j        j1        d          r| j        j1        )                                }| j        j%        s&|r$|d         *                                | j        _%        tW          |          dk    rtX          t	          |d         tX                    rot?          t
          d          rZt          j-        |d         .                                          | j        _/        |d         *                                | j        _0        |r|d         | j        _(        |d         dk    rt
          j2        j3        | j        _4        n|d         dk    rt
          j2        j5        | j        _4        n\|d         dk    rt
          j2        j6        | j        _4        n4|d         dk    rt
          j2        j7        | j        _4        nd | j        _4        | j        j'        @t?          | j        d          r+| j        8                                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$        rNt?          | d
          r>| j         r7ts          j:        tv          j<                  | j         d         z
  | j        _=        t}          j?                    | _@        d S | jA        | j        B                    | jA                   	 | C                    t          d           n# t"          t          t          t          t          f$ 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?                    | _@        | jA        | j        B                    | jM                   d | _A        t	          | j        t                    r| j        #                    d          | j        _$        | j        #                    d          | j        _%        | j        8                                d d         | j        _'        | j        (                                | j        _(        t
          j2        j7        | j        _4        | j        O                    d          | j        _0        | j        O                    d          | j        _/        | j        j$        r\t?          | d
          rN| j        j=        sD| j         r?ts          j:        tv          j<                  | j         d         z
  | j        _=        d S 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   r)   sslobjT)binary_formFget_verified_chainPEM_cert_to_DER_certgetpeercertcipher_sslobjzTLSv1.0zTLSv1.1zTLSv1.2zTLSv1.3getpeernamer
   tzrE   )receive_firstr   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.)P_tunnel_hostr_   r   r`   r   r   	SSLSocketr   selected_alpn_protocolr   r   newr   r-   r   r   r   r$   r   RuntimeErrorr[   rh   ri   rK   rM   r   r   rS   r+   r   http_versionr   r   resolution_latencyr   r   certificate_dercertificate_dictr?   destination_addressr   r   get_infolenr   r   public_bytesissuer_certificate_derissuer_certificate_dictr   
TLSVersionTLSv1tls_versionTLSv1_1TLSv1_2TLSv1_3r   r   nowr   utcr   time	monotonic_connected_atrk   
settimeout_HfaceBackend__exchange_untilr   TimeoutErrorSocketTimeoutConnectionRefusedErrorConnectionResetErrorr   rj   rH   r#   r	   r   getissuercert)
rl   is_tcp_tls_connalpn_rM   r   cipher_tuplechainealt_keys
             rA   
_post_connzHfaceBackend._post_conn  s   $>))L *)) y$$S %$$
 9(S]L4QRRO - "$)S];;CDI44666)@@BB  #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(++ B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+-ABB U I,??AAE  >: Nu N:?(:K:K:M:M7 E

Q'3&uQx== 4#C)?@@ 4
  4U1X5J5J5L5LMM = BGqARARATAT>M22  U151F1FSW1F1X1X.;6:i6K6K$) 7L 7 7DN33 " ; ; ;6:DN333; +2$)X*F*FPDI$$&&&D 
 49i00 UWI%';6 6 U !I-@@BBE  >: 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$	!!"# "    
 " 
 	 	 	 #/ I//3?#y$*<*CDG$"=== 7@ "&
  O4+<<<"~T->>>,qdi q qCG9q q q   ?	B "^--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=   **P P.-P.'%W W&%W&
f' '#i"
Bii"httpheaderstyping.Mapping[str, str] | Noner   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-   r[   r   rZ   r   _tunnel_port_tunnel_headers)rl   rK   rM   r  r   s        rA   
set_tunnelzHfaceBackend.set_tunnel  s     9 	@  
 >!333"";>222(,(, 	&#*D   #%D   rn   c                   | 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 }|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 }	|	sC|                                  |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:  )r_   r   r   r  r`   r-   r   r|   get_available_stream_idra   r   r   itemsappendlowersubmit_headersr  r   r   r  rS   decoder   r   OSError_protocol_factory)rl   req_contextheadervalueeventsstatusevent
raw_header	raw_valuetunnel_acceptedmessages              rA   _tunnelzHfaceBackend._tunnel  st   ~)))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JJLLL%+R)0C0C	&!!  IvIIIIJJJ 	!%rn   Fexpect_framec                   | j         | j        dS | j                                         }| j                             |sdnd           	 | j                             | j                  }nQ# t          t          t          j	        f$ 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 	 | j                            |           n## | j                                        $ r Y dS w xY w	 | j                                        }|sn.	 | j                             |           n# t          $ r Y dS w xY wJt#          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 send regular unsolicited data and expect regular ACKs, otherwise will
        deduct that network conn is dead.
        see: https://github.com/google/quiche/commit/c4bb0723f0a03e135bc9328b59a39382761f3de6
        and: https://github.com/google/quiche/blob/92b45f743288ea2f43ae8cdc4a783ef252e41d93/quiche/quic/core/quic_connection.cc#L6322
        NFgMbP?g?rn   )r   r_   
gettimeoutr  recvrR   r5  r  r   r	   ConnectionAbortedErrorr  connection_lostbytes_received
exceptionsbytes_to_sendsendallr	  r
  _last_used_athas_pending_event)rl   rB  bck_timeout	peek_datadata_outs        rA   peek_and_reactzHfaceBackend.peek_and_react&  s    9 65i**,,	,?UUC@@@	.	t~66IIv~6 	 	 	 I  ----- '(<= 	 	 	III	 I  ----DI  ---- 	N**,,,5	N)))4444~((** 	 	 	55			~3355H 	!!(++++   uu		 "^--~//111sZ   	A) (C )B7C "B74C 6B77C C1D- -EE.F	 	
FF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)  rR  rS  $typing.Callable[[Event], int] | NonerT  list[Event]c          	     8   | 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 r8	 | j                                        }|sn| j                             |           7	 | j                             | j                  }n# t          t          f$ rJ}t          |t                    r)|t          u st          |t                    rt          |v r|d}Y d}~ndd}~wt          $ rT}| j         j        t          j        u r6|t          u st          |t                    rt          |v rt                      | d}~ww xY wd}|s|	s| j        dt#          | j        d          rO	 | j                                         n# | j                                        $ r}t)          |          |d}~ww xY w| j                                         n||t-          |          z  }	 | j                            |           np# | j                                        $ rQ}t#          |d	          r,t#          |d
          rt1          |j        |j                  |t)          |          |d}~ww xY w|du r8	 | j                                        }|sn| j                             |           7| j                            |          D ]#}t#          |d          }|s<t          |t8                    r&|j        dk    rm|k|t<          u st          |t                    rMt<          |v rDd| _        |                                  |	                     t=          |dd                     |	c S |du rw|dk    rq| j        jt          |t                    r	tB          |v s	|tB          u rCtE          d |	D                       r*d| _        |                                  t)          d          |j        dk    r$|j#        rd|j#        v rtI          |j#                  |j        dk    rK| j%        tL          j'        k    r6|j#        r d|j#        v rtQ          d|j#                   tQ          d          	 |j#        rzd|j#        v rq|j#        )                    dd          *                    d          }d t          |+                    d                    D             \  }}t1          |||z
            n# tX          tZ          f$ r Y nw xY wt)          |j#                  |rt          |t\                    r| j%        tL          j/        k    r|j        dk    s | j%        tL          j'        k    r5|j        dk    r*tL          j0        | j1        vrte          d| j%                   t)          d|j3         d ti          |j                   d!          |s|	                     |           n]t          ||          r8|	                     |           | 	 | ||          z  }n&# tj          $ r Y nw xY wn|
                     |           |duo||k    }|rt          ||          s|r=|du r$|r"|r |j6        du r|
r | j        j7        |
  |	c S |
r | j        j7        |
  |	c S |r"|j6        du r|du r|
r | j        j7        |
  |	c S |r-|j6        du r$|"| ||j3        k    r|
r | j        j7        |
  |	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   rE   FTrT  rn   eof_receivedexpected_lengthactual_length)partialexpectedrT  
end_streamc              3  D   K   | ]}t          |t                    d u V  dS )FN)r   r   r   r  s     rA   r   z0HfaceBackend.__exchange_until.<locals>.<genexpr>  s1      XXA
1o > >% GXXXXXXrn   z-Remote end closed connection without responsei  r8  i*  FingerprintzTLS over QUIC did not succeed. zfTLS over QUIC did not succeed. Chain certificate verification failed or client cert validation 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 )rf  c              3  B   K   | ]}|                                 |V  d S rw   )isdigit)r   cs     rA   r   z:HfaceBackend.__exchange_until.<locals>.<genexpr>.<genexpr>-  s/      +H+H!AIIKK+HA+H+H+H+H+H+Hrn   N)rS   r   strip)r   r  s     rA   r   z0HfaceBackend.__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rn   z,    i  z8The remote server is unable to serve this resource over zStream z# was reset by remote peer. Reason: .)8r   r_   rM  rJ  rK  rE  rR   rF  r  r   r   tupler5  r   r   r   r   r   r\  rI  r$   rG  r   rH  r!   r^  r]  r:  r   
error_coder   r   r1  r   allr@  r"   r`   r-   r[   r&   replacerk  r   r?   
IndexErrorr   r   r   rH   r#   rT  hexAttributeErrorrb  reshelve)rl   rU  r   r(  r)  rR  rS  rT  data_in_lenr:  reshelve_eventsreach_socketrP  data_inr  r<  stream_related_eventr   receivedr`  target_cap_reacheds                        rA   __exchange_untilzHfaceBackend.__exchange_until[  s_	    y$)C)C)C+(A--1E1K1K'+$
  ')1$$M 	$$81$<$<(-%#' #~	"!&L>33i3HH O4 E))4#'>#?#?#A#A' "!	))(3334"innT^<<GG.0DE 	" 	" 	"!!%9::  "&888&z599 9 !3j @ @  !GGGGGG    y~):::"&888&z599 9 !3j @ @ 344!;  $  6  
9$."<'C C"<: N779999#~88:: : : : #0"2"29:
 668888'/#s7||3655g>>>>>4466 	6 	6 	6 #1&788 %W> > % #1()!BS# # ##$% ,A..A5	6 !D((4#'>#?#?#A#A' "!	))(3334 ...CC k" k"-4UK-H-H$+ q
5BV0W0W q
 (A--%1&,66 *:u = = 7 %1J$>$>
 ! 
 

( ) #+/      & %,,#sNN N6 !+:u = = 7 %4z$A$A *o = =XXQWXXXXX !> *.

+K  
 (C//!M 0$55+EM::: )S00TY+.5P5P = ]em-K-K"* Q%- Q Q# #  #+!D# # !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,,,+7% +/?/?/F/F F#1 % % % $% 8 (..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!MMM}~	"s|   B9 9E0
A DE0AE++E0F0 0G!GG!H. .J
AJJBTT0/T05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)rb   rc   rd   rf   re   rg   r   r  r   r  _start_last_requestr   r  rK   rM   r   r   r1  default_port)rl   r~  r  r  r  rK   rM   r   s           rA   
putrequestzHfaceBackend.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!!    	 	rn   r8  valuesc                   |                                 }t          |t                    r|                    d          n|}| j        t
          j        k    }|s|dv rd S | j        I|dk    rC	 t          |d                   | _        ny# t          $ r t          d|d          d          w xY w| j        K|dk    rEt          |d         t                    r|d                             d          n|d         | _        d S |D ]}t          |t                    r|                    d	          n|}|                    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)r2  r   rL   r   r`   r-   r   rc   rS   r?   r$   rf   
startswithrg   rb   removeinsertr1  )
rl   r8  r  encoded_headersupport_te_chunkedr9  encoded_valueitem_to_remove_k_vs
             rA   	putheaderzHfaceBackend.putheader  sb    3=fc3J3JVw///PV $(9#? " 	 "   &.>EV3V3V.1&)nn++   #d&)ddd   %-.G2K2K,6vay#,F,FUq	  (((FSTI $ F !	 !	E.8.D.DO\***%  ((.. !\11.2D+!%"n  FB==.. ^++*,b , "-N)).999%%&%    %%&%   9!	 !	s   ,B $B+)encode_chunkedexpect_body_afterwardmessage_bodybytes | Noner  r  ResponsePromise | Nonec                  | j         |                                  | j        |                                  | 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	 	 | j                                        }	|	sn| j                             |	           7	 t%          j                    | _        nT# t*          $ rG}t-          | | j        | j                  }
|
| j        |
j        <   |
| j        |
j        <   |
|_        |d }~ww xY w|du rz| j        r8| j        r1t=          j        t@          j!                  | j        z
  | j        _"        t-          | | j        | j                  }
|
| j        |
j        <   |
| j        |
j        <   |
S d S )	NFr#  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+.ra  r   )#r   connectr_   r  r/  ra   rg   rf   rb   r  r  r  re   r$   r3  rI  rJ  rK  r	  r
  rL  BrokenPipeErrorr0   	_promisesuid_promises_per_streamrT  promiser  r   r   r  r   r  request_sent_latency)rl   r  r  r  should_end_streamexisting_authoritycursor_headercursor_valuer  bufrps              rA   
endheaderszHfaceBackend.endheaders  s    9LLNNN >!OO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'n2244 	!!#&&&	'  "&!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ts1   	'D1 1E"EE"&8F8 8
H	AHH	_HfaceBackend__bufbytes_HfaceBackend__stream_id_HfaceBackend__close_streamc                   | j         J | j        J | j                             |t          |                    du r| j                             | j                            | j                             	 | j                                         }|sn| j                            |           7| j                             |t          |                    du | j         	                    |||           	 | j                                         }|sn| j                            |           7t          j                    | _        d S )NTra  )r_   r   should_wait_remote_flow_controlr   rH  rE  rR   rJ  rK  submit_datar	  r
  rL  )rl   r  r  r  rP  s        rA   
__write_stzHfaceBackend.__write_stQ  sZ    ~)))y$$$ N::;E

SS  N))$)..*H*HIII,>7799 	!!(+++, N::;E

SS  	""% 	# 	
 	
 	
	(~3355H Ih'''	( "^--rn   c                   | j         J | j        J | j                             |           	 | j                                         }|sn| j                            |           7	 | j        |= n# t          $ r Y nw xY w| j                                         r|                                  t          j
                    | _        dS )zKill a stream properly.Nr[  )r_   r   submit_stream_resetrJ  rK  _pending_responsesKeyErrorrq   r   r	  r
  rL  )rl   r  rP  s      rA   
__abort_stzHfaceBackend.__abort_stu  s    ~)))y$$$**[*AAA	(~3355H Ih'''	(	'44 	 	 	D	 >%%'' 	JJLLL!^--s   'A0 0
A=<A=_HfaceBackend__amt!_HfaceBackend__respect_end_signal_HfaceBackend__dummy_operation)tuple[bytes, bool, HTTPHeaderDict | None]c           	        |ri	 | j         |= n# t          $ r Y nw xY w| j        F| j                                        r-| j                                        r|                                  dS d}|                     t          dt          t          f|d ||          }t          j
                    | _        |r|d         j        rd}	 | j         |= n# t          $ r Y nw xY w| j        b| j                                        r.| j                                        r|                                  n| j        r|                                  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)rn   TNFTc                *    t          | j                  S rw   )r   data)xs    rA   <lambda>z(HfaceBackend.__read_st.<locals>.<lambda>  s    s16{{ rn   )r   r(  rR  rS  rT  r)  rE   r
   r   :   r$  r'  rn   r)   c              3  $   K   | ]}|j         V  d S rw   )r  rd  s     rA   r   z)HfaceBackend.__read_st.<locals>.<genexpr>  s$      ,,QV,,,,,,rn   )r  r  r_   is_idlerq   r   r  r   r   r	  r
  rL  rb  r   r   r   r   r  rZ   r4  popr   r  )rl   r  r  r  r  eotr:  trailersidxr=  r>  s              rA   	__read_stzHfaceBackend.__read_st  s     
	#+K88    ~)>))++ !0J0J0L0L !JJLLL"?7;7L7L$0/#B!&22!&: 8M 8
 8
 "^-- 	$fRj+ 	$C+K88    ~)>))++ $0J0J0L0L $JJLLLL\ $MMOOO 	/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  0typing.Callable[[LowLevelResponse], None] | Noner.   c               L   | j         | j        | j        st                      | j        s| j        }n|r|j        nd }|                     t          t          fdt          t          fd|          
                                }t          j                    | _        t                      }d }|j        D ]e\  }}|"|d         dk    r|dk    rt!          |          })|                    |                    d          |                    d                     f|t'          d	          t)          |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        = d}|j        D ]\  }}|dk    r|} n	 t0          |         }n# t,          $ r d}Y nw xY w|	rp|Qt3          |                    d          || j        ||d | j        | j        |j        	  	        }||_         ||           t<                              | ||          S |j         du }|d
k    s|dk    r1d|cxk    rdk     r$n n!tC          |j        | j"        | j#                  }nd }t3          |                    d          || j        |||du r	|| j"        nd | j        | j        |j        | j        dk    r| j         nd ||du r| j$        nd           | _%        | j%        |_&        || j%        _        | j        |j'        = |rJ| j        (                                r| )                                 n0| j*        r| +                                 n| j%        | j,        |j        <   | j%        S )NTF)r   r(  r)  rT  r   r  r*  r$  r'  z@Got an HTTP response without a status code. This is a violation.e   zResponse received (stream: z) but no promise in-flightrn   r%  r-  )bodyr   rM   rT  r  r&  r+  r,     )r   rM   rT  r   dsastream_abort)-r   r_   r  r%   ry   ra   rT  r  r   r   r  r	  r
  rL  r   r  rS   rZ   r4  r$   r   r  r  request_headersr   r.   	_http_vsnrK   rM   from_promiserD   getresponserb  r,   _HfaceBackend__read_st_HfaceBackend__write_st_HfaceBackend__abort_str   responser  rq   r   r  r   r  )rl   r  r  rT  
head_eventr  r;  r=  r>  is_early_responser  	http_verbreasonearly_responser  r  s                   rA   r  zHfaceBackend.getresponse  s    I~%> & #$$$" 	?II-4>))$I >B=R=R$ $$ ', >S >
 >
 #%% 	  "^-- ""!%/%7 	X 	X!J	~*Q-4"7"7++ ^^FJ--g66	8H8H8V8VWWWW >R   z#788JVs] 	 ?$ R"7
8LMGG"7;;J<PQQG   #b*2Fbbb 
 % A-g.?@	%,%< 	 	!J	Z''%	 (	#F+FF 	 	 	FFF	  	&2!1$$W--N"i%/
" 
" 
" /6+''777++g?V ,    #t+S==Y*44#:M:M:M:M#:M:M:M:M:M-?!. .CC C+;W%%N!Ulls{DNNi'~## ,/5LLd,
 ,
 ,
   >&-# N7;' 	H~))++  

  9=D#G$56~s*   4E; ;
F#FF#G G,+G,)r  r  bytes | bytearrayr  c               l   | j         | j        | j        t          d          | j        | j        | j        | _        	 | j                            | j        t          |                    du rN| j                            | j         	                    | j
                             | j                            | j        t          f          r| j        r8| j        r1t          j        t"          j                  | j        z
  | j        _        t)          | | j        | j                  }|| j        |j        <   || j        |j        <   t5          |          	 | j                                        }|sn| j                             |           7| j                            | j        t          |                    du N| j        r| xj        t          |          z  c_        | j                            | j        ||           t<          rt?          j         d| |           d}	 | j                                        }|sn6	 | j                             |           n# tB          $ r}|}Y d}~nd}~ww xY wR|s|r| j        r8| j        r1t          j        t"          j                  | j        z
  | j        _        t)          | | j        | j                  }|| j        |j        <   || j        |j        <   |r	||_"        ||S n4# | j        #                                $ r}tI          |          |d}~ww xY wdS )	z4We might be receiving a chunk constructed downstreamNz,Trying to send data from a closed connectionT)rT  
excl_eventr   )r  ra  zhttp.client.send)%r   ra   r_   r   rd   rc   r  r   rH  rE  rR   rM  r   r  r   r   r  r   r  r  r0   rb   r  r  r  rT  r    rJ  rK  r  _HAS_SYS_AUDITsysr2   r  r  rI  r$   )rl   r  r  r  rP  remote_pipe_shutdownr  s          rA   sendzHfaceBackend.send  s    9 74>;Q >  
 (0+7+/+FD(M	>>OSYY   
 --dinnT^.L.LMMM >33"o;O:Q 4   4 / DN $LHL999D<TT ; )tOOB-/DN26*>@D-bl;'33330#~;;==H# I%%h///0/ >>OSYY   > + :,,D		9,,N&& '     :	,dD999;? 	->7799 -I%%h////& - - -+,((((((-	-  * +   5558PP N7 %T4?DNKK)+rv&:<)",7' /35(0..	 ~((** 	 	 	 	
 tsD    H L  I L  
I2&I-(L  -I22BL   L1L,,L1c                   | 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n9	 | j                             |           n# t          t          j
        f$ r Y nw xY wUt          j                    | _        dS )z8Send a ping frame if possible. Otherwise, fail silently.N)r   r_   rq   pingr|   rI  rJ  rK  r5  r   r&   r	  r
  rL  )rl   
ping_frames     rA   r  zHfaceBackend.ping  s    9 6F>%%'' 	F	N!!!!" 	 	 	FF~((** 	 	 	FF		5577J 	!!*----    		 "^--s)   A 
A3A32A3B/ /CCc                   | j         r
| j        	 | j                                         	 | j                                        }|sn9	 | j                             |           n# t
          t          j        f$ r Y nw xY wUn4# | j                                        $ r}t          |          |d }~ww xY w	 | j         
                    d           n# t
          t          f$ r Y nw xY w	 | j                                          n# t
          $ r Y nw xY wd | _        d | _        i | _        i | _        i | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        t1          j                    | _        d S )NTr   )r   r_   submit_closerJ  rK  r5  r   SSLEOFErrorrI  r$   shutdownrt  r   ra   r  r  r  rh   r   rc   rd   r  _cached_http_vsnr  r	  r
  rL  )rl   goodbye_framer  s      rA   r   zHfaceBackend.close  s   9 	~)"N//111

"(,(D(D(F(F, "!" I--m<<<<#O  " " " "E	"
"	 ~0022 2 2 2'**12 	""1%%%%^,   	!!!!    $&!"$%)"&*#'+$#'  $!!^--sM   B A# #A<;A<B2B--B26C C%$C%)D 
DD)rK   rL   rM   rN   r	   rO   rP   rQ   rR   rS   rG   rT   rH   rU   rI   rV   rJ   rW   r4   r5   )r4   rS   )r4   r~   )r4   r   )NNNNNNNNNNNN)r   r   r   r   r   r   r   r   r   rN   r   rN   r   r   r   r   r   r   r   r   r   r   r   r   r4   r5   )r[   )r   rL   r4   rQ   )NNr  )
rK   rL   rM   rN   r  r  r   rL   r4   r   )F)rB  r5   r4   r5   )rU  rV  r   r5   r(  rW  r)  r5   rR  rN   rS  rX  rT  rN   r4   rY  )FF)
r~  rL   r  rL   r  r5   r  r5   r4   r   )r8  rL   r  rL   r4   r   rw   )r  r  r  r5   r  r5   r4   r  )r  r  r  rS   r  r5   r4   r   )r  rS   r4   r   )TF)
r  rN   r  rN   r  r5   r  r5   r4   r  )r  r  r  r  r4   r.   )r  r  r  r5   r4   r  )&__name__
__module____qualname__r-   r   r   r[   supported_svnr   r*   default_socket_optionsr   r]   propertyrs   ru   ry   r{   r   r   r   r   r  r!  rA  rQ  r  r  r  r  r  r  r  r  r  r  r   __classcell__)rm   s   @rA   rD   rD   \   s        _knknEM
  &(15*5C 304@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&*^ ^ ^ ^ ^@    0\ \ \ \B	  37& & & & &2<& <& <& <&|32 32 32 32 32r $OS*.+/AE $b" b" b" b" b" b"P	  %*1 1 1 1 1fF F F FT &*U  %&+U U U U U Up FK". ". ". ". ".H. . . .< &*"'W
 W
 W
 W
 W
x +/U U U U U Uv 	c c c c c cJ. . . .>+. +. +. +. +. +. +. +.rn   rD   r  )F
__future__r   r   r  r	  typingr   r   	functoolsr   r   r   r	   r  r   util.ssltransportr   r=   rt  _sslr   _collectionsr   	_constantr   r   r   r   contrib.hfacer   r   r   r   r   r   r   contrib.hface.eventsr   r   r   r   r   r   r   rI  r    r!   r"   r#   r$   r%   r&   r;   r'   r(   _baser*   r+   r,   r-   r.   r/   r0   TYPE_CHECKING_typingr1   r   r  rB   rD    rn   rA   <module>r     s   " " " " " "  



   ' ' ' ' ' ' ' '       * * * * * * * * + + + + + +JJJ0000000^$   
CLLL
       ^$   KKK * ) ) ) ) )                                                               4 3 3 3 3 3 3 3                  
 /......g&& 1   R. R. R. R. R.; R. R. R. R. R.s!   
? AAA 	A$#A$