
    F2jA                      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mZmZ edd	lmZ ndZdd
l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(m)Z)m*Z*m+Z+m,Z, ddl-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 ddl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z; ddl<m=Z=m>Z>m?Z? ddl@mAZA ddlBmCZC ddlDmEZEmFZFmGZGmHZHmIZImJZJmKZK ejL        rddlMmNZN  eOed          ZP e	d          dd            ZQ G d deE          ZRdS )    )annotationsN)datetimetimezone)	lru_cache)
SOCK_DGRAMSOCK_STREAM)timeout   )sslCertificate)SSLTransport)HTTPHeaderDict)DEFAULT_BLOCKSIZEDEFAULT_KEEPALIVE_DELAYUDP_DEFAULT_BLOCKSIZE	responsesHTTP1_ONLY_HEADERSDEFAULT_BACKGROUND_WATCH_WINDOWDEFAULT_KEEPALIVE_IDLE_WINDOW)HTTP1ProtocolHTTP2ProtocolHTTP3ProtocolHTTPOverQUICProtocolHTTPOverTCPProtocolHTTPProtocolFactoryQuicTLSConfig)ConnectionTerminatedDataReceivedEarlyHeadersReceivedEventHandshakeCompletedHeadersReceivedStreamResetReceived) GenericSegmentOffloadUnsupported_sock_has_gro_sock_has_gsosync_recv_grosync_send_dgramsync_sendmsg_gso)EarlyResponseIncompleteReadInvalidHeaderMustDowngradeErrorProtocolErrorResponseNotReadySSLError)parse_alt_svcresolve_cert_reqs	parse_url)enable_keepalive)
SubTimeout   )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_rD   importlib.utilutil	find_specImportErrorModuleNotFoundError
ValueError)rD   	importlibs     ]/home/thesage/.hermes/hermes-agent/venv/lib/python3.11/site-packages/urllib3/backend/hface.py_HAS_HTTP3_SUPPORTrO   S   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eeddx fdZedyd            Zedyd            Zedyd            Zedzd            Zd{d Zd|d"Z	 	 	 	 	 	 	 	 	 	 	 	 d}d~d5Zddd8Zd|d9Z	 	 	 ddd>Zd|d?ZdddBZd@ddCddddDddPZ	 	 dddUZddXZ	 dd@d@dYdd_Z	 ddddZ ddeZ!	 	 dddjZ"dddkddpZ#d@dqdduZ$d|dvZ%d|dwZ& xZ'S )HfaceBackendNsocket_optionsdisabled_svnpreemptive_quic_cachekeepalive_delaybackground_watch_delaykeepalive_idle_windowhoststrport
int | Noner	   int | float | Nonesource_addresstuple[str, int] | None	blocksizeintrT   _TYPE_SOCKET_OPTIONS | NonerU   set[HttpVersion] | NonerV   QuicPreemptiveCacheType | NonerW   float | int | NonerX   rY   c                  t                      s/|t                      }|                    t          j                   t                                          |||||||||	|
|           d | _        d | _        d | _	        d | _
        g | _        d | _        d | _        d| _        d | _        d| _        d | _        d | _        d | _        d | _        d| _        d| _        d S )NrS   F)rO   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_dgram_gro_enabled_dgram_gso_enabled)selfrZ   r\   r	   r_   ra   rT   rU   rV   rW   rX   rY   	__class__s               rN   rl   zHfaceBackend.__init__e   s	     "## 	-#"uu[^,,,)%"7+#9"7 	 	
 	
 	
 <@LP(,	&* 5726#37$). 15 (- <@"7;)- ?C- ).(-    rA   rB   c                ~    | j         dS | j                                         s| j                                          S dS NF)rn   is_availablehas_expiredr}   s    rN   is_saturatedzHfaceBackend.is_saturated   sC    >!5 ~**,, 	4~113333ur   c                ,    | j         d uo| j         j        S N)rn   multiplexedr   s    rN   is_multiplexedzHfaceBackend.is_multiplexed   s    ~T)Hdn.HHr   c                F    | j         dS | j                                         S r   )rn   expect_pongr   s    rN   r   zHfaceBackend.expect_pong   s#    >!5~))+++r   c                    | j         | j        S 	 | j                                         }n# t          $ r
 | j        cY S w xY w| j        |k    r|n| j        S r   )rn   ra   max_frame_sizeNotImplementedError)r}   remote_max_sizes     rN   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  r6   )ro   r:   rj   _disabled_svnscheme_preemptive_quic_cacherZ   r\   rx   h11h2ra   r   r   r   socket_kind	_response	authorityr   r   s    rN   	_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tr   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 |s)|r't          j        }|                     d          | _        | j        s<| j        t          j
        k    r't          j
        }|                     d          | _        | j        r| j        | j        j        v| j        j                                        | _        | j        j        ,| xj        | j        j                                        z  c_        t#          | j        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)svcrj   r   g      ?r   r6   )r   sockro   rx   rO   typesocketr:   rj   r   r   _HfaceBackend__altsvc_probe	conn_infoestablished_latencytotal_secondsrz   tls_handshake_latencymaxr   rZ   r\   ry   close)r}   has_h3_supportis_plain_socketis_h3_disabledis_h2_disabledupgradable_svns         rN   _upgradezHfaceBackend._upgrade   s   ~))J *)) y$$$y$$$ +F ,-- ty//V]: %4+==$4+==-1 	E kn!<!<(^N#'#6#6 $7 $ $D   yKN**! En E!,'+':':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 9<99 955
 9<5//.:, /DI<L0MN 	49#34D<WWW&DI!%D,Q/DIJJLLLLLO'	 '	r   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        urdS d}d}|st          |          t          j        k    rd}d}|?	 |                                }d|v o|d         dk    }n# t          t          f$ r d}Y nw xY w|sM|K|I|G|sEt	          j	        t          j
                  }t          |d          r|                                 nd}|r
t          |dd          pd}|j        t          j        k    rd}|U|S|Q	 |                    d          }n# t          t          f$ r g }Y nw xY w|rd                    d	 |D                       }|t          |d
          r|j        du rd}t          |d          rF	 |                                 n0# t&          $ r |                    d           Y nt          $ r Y nw xY wt+          | j        d|           t/          |||t1          |t2                    r|                                n||||	|
|t1          |t6                    r|ndt1          |t2                    r|nd| j        pd| j                  | _        | 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 r   )r   DER_cert_to_PEM_cert).0certs     rN   	<genexpr>z+HfaceBackend._custom_tls.<locals>.<genexpr>  s>       - -;?066- - - - - -r   check_hostnameset_fingerprintzchrome:stablecontextg     r@)insecurecafilecapathcadatacertfilekeyfilekeypasswordr   cert_use_common_nameverify_hostnamer   idle_timeoutech_config_list)!ro   r:   rj   r2   r   	CERT_NONEcert_store_statsAttributeErrorr   
SSLContextPROTOCOL_TLS_CLIENThasattrr   getattrverify_modeget_ca_certsjoinr   http_header_for_fingerprintrL   r   setattrr   r   
isinstancer[   encoderB   _keepalive_delay_ech_configrw   r   is_verified)r}   r   r   r   r   r   r   r   r   r   r   r   r   r   allow_insecuressl_ctx_have_certs
cert_statsctx_root_certificatess                     rN   _custom_tlszHfaceBackend._custom_tlsJ  s`     9KN**5$$ 	""3I">">#-"O"O!N#("	+(99;;
+I
90E0I #" # + + + &+"""	+ 	# #$& % .)@AAK{$899 #..0000" (	7%BEJJSe ! &#-77!%K$7L<P/9D9Q9QRV9W9W))"' / / / -/)))	/ ) #'99 - -CX- - - $ $L
  'K)9:: (.%77"' {$566 ;;====! A A A//@@@@@%   D
 DIy+666%2#,,,<&&((($-!5/400OO/3//OO.7% ,+&
 &
 &
"0  $9BBts<    $A% %A;:A;D D-,D-?F G5	G Grj   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getlistr1   splitrZ   rb   rL   )r}   r   alt_svcprotocolalt_authorityserverr\   s          rN   __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           	        | j         d | _        d | _        n| 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        _        | j        j        t@          k    r3tC          | j                  | _"        tG          | j                  | _$        nd
| _"        d
| _$        tK          | d          r5| j&        r.| j&        d         | j        _'        | j&        d         | j        _(        | j        t          j        urd }tK          | j        d          stK          | j        d          r^tS          | j        dtS          | j        dd                     }tK          |d          r|j*        dk    | j        _+        n;tK          |d          r|,                                | j        _+        nd
| j        _+        | j        -                    d          | j        _.        	 | j        -                    d
          | j        _/        n# t`          $ r d | j        _/        Y nw xY wd | j        _1        |2                                }tK          |d          r8|3                                }ti          |          }	tj          tm          d |D                       nd
}
|
r| j        j/        s&|	r$|d         7                                | j        _/        |	dk    r|d         8                                }t	          |tr                    r|| j        _:        n3tK          t
          d          rt          j;        |          | j        _:        |d         7                                | j        _<        n|	dk    r| j        j:        s|d         | j        _:        ntK          | j        d          r| j        -                    d          | j        _.        	 | j        -                    d
          | j        _/        n# t`          $ r d | j        _/        Y nw xY wtK          | j        d          r| j        2                                nd }tK          | j        d          r3tK          | j        j=        d          r| j        j=        3                                }| j        j/        s&|r$|d         7                                | j        _/        ti          |          dk    rtj          t	          |d         tj                    r|d         8                                }t	          |tr                    r|| j        _:        n3tK          t
          d          rt          j;        |          | j        _:        |d         7                                | j        _<        |r|d         | j        _2        |d         dk    rt
          j>        j?        | j        _@        n|d         dk    rt
          j>        jA        | j        _@        n\|d         dk    rt
          j>        jB        | j        _@        n4|d         dk    rt
          j>        jC        | j        _@        nd | j        _@        | j        j1        @tK          | j        d          r+| j        D                                d d         | j        _1        | j        | j        t          j        k    rF| j        Ct          j        | j        v r0t          j        t                    | _        t          j        | _        nwt          j        t                    | _        t          j        | _        | jE        rA| jF        r:t          | j        t7          | jF                  t7          | jE                             | j        | j        _        | j        j.        rNtK          | d          r>| j&        r7t          jI        t          jK                   | j&        d!         z
  | j        _L        t          jN                    | _O        d S | jP        | j        Q                    | jP                   	 | R                    t          d
"           n# t"          t          t          t          t          f$ r}| j        | j        t          j        k    r(| jX        !| j        | jY        pd#f}|| jX        v r| jX        |= d | _        t          j        | jZ        vst          j        | jZ        vr!t          d$| j         d%| j         d&          | d }~ww xY wt          jN                    | _O        | jP        | j        Q                    | j\                   d | _P        t	          | j        t                    r | j        -                    d          | j        _.        | j        -                    d
          | j        _/        | j        D                                d d         | j        _1        | j        2                                | j        _2        | j        ,                                | j        _+        t
          j>        jC        | j        _@        | j        ^                    d
          | j        _<        | j        ^                    d          | j        _:        | j        j.        r\tK          | d          rN| j        jL        sD| j&        r?t          jI        t          jK                   | j&        d!         z
  | j        _L        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_configF_connect_timingsr   r6   sslobj_sslobj
ech_statusacceptedech_acceptedT)binary_formget_verified_chainc              3  @   K   | ]}t          |t                    V  d S r   )r   r   )r   crts     rN   r   z*HfaceBackend._post_conn.<locals>.<genexpr>e  s,      JJSJsK88JJJJJJr   PEM_cert_to_DER_certgetpeercertcipherzTLSv1.0zTLSv1.1zTLSv1.2zTLSv1.3getpeernamer
   tzrR   )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.)__tunnel_hostro   rn   r   r   r   	SSLSocketr   selected_alpn_protocolr   r   newr   r:   r   r   r   r.   r   RuntimeErrorrj   rw   rx   rZ   r\   r   r   rb   r8   r   http_versionr   r   r%   r{   r&   r|   r   r   resolution_latencyr   r   r  tls_ech_acceptedr  r
  certificate_dercertificate_dictrL   destination_addressr  r  lenr   allget_infopublic_bytesbytesissuer_certificate_derr	  issuer_certificate_dictr  
TLSVersionTLSv1tls_versionTLSv1_1TLSv1_2TLSv1_3r  _background_watch_delay_keepalive_idle_windowr4   r   nowr   utcr   time	monotonic_connected_atrz   
settimeout_HfaceBackend__exchange_untilr!   TimeoutErrorSocketTimeoutConnectionRefusedErrorConnectionResetErrorr   ry   rU   r-   r	   r   getissuercert)r}   is_tcp_tls_connalpn_r\   r   cipher_tupler   chaincert_in_chain_countparsed_certsissuer_public_bytesealt_keys                 rN   
_post_connzHfaceBackend._post_conn  sc   ( DI!DNN>))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#9>Z''&3DI&>&>D#&3DI&>&>D##&+D#&+D#4+,, 	J1F 	J040Ea0HDN-151Fq1IDN. 9KN**8<Lty(++ ZUwty)/L/L ZU IxIt)L)L  6<00 <6<6G:6UDN33V^44 <6<6I6I6K6KDN336;DN3151F1FSW1F1X1X.;6:i6K6K$) 7L 7 7DN33 " ; ; ;6:DN333; 6:2%}} 6#788 I"5577E/25zz' '2 JJEJJJJJJ" ! $ I#~> RCV R>CAh>O>O>Q>QDN;.2227(2G2G2I2I/)*=uEE "$7 !% E E ").D!E!E "$'$<=P$Q$Q !% E FK1XEVEVEXEXDNB+a// $ E 0 AFa=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 /4Ah.C.C.E.E+%&95AA DWDNAA$S*@AA  # 89L M M !NA 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	/ D4O $	D788D899   +/)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!.2n.I.I.K.KDN+),)?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=   (%T T'&T'%[7 7\\"l? ?#o:"Bo55o: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:   rj   r   ri   r  _tunnel_port_tunnel_headers)r}   rZ   r\   rB  r   s        rN   
set_tunnelzHfaceBackend.set_tunnel'  s     9 	@  
 >!333"";>222(,(, 	&#*D   #%D   r   c                   | j         J | j        J | j        J | j        J | j        t
          j        k    rt          d          | j                                         | _	        dd| j         d| j         
                    d          f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.)   :method   CONNECT
   :authorityr   ascii
iso-8859-1TF)r  event_type_collectablerespect_end_stream_signal   :status   ,  UnknownzTunnel connection failed:  )rn   r   r  rE  ro   r:   r   r   get_available_stream_idrp   r   rF  itemsappendlowersubmit_headersr0  r"   r   rB  rb   decoder   r   OSError_protocol_factory)r}   req_contextheadervalueeventsstatusevent
raw_header	raw_valuetunnel_acceptedmessages              rN   _tunnelzHfaceBackend._tunnel@  sr   ~)))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 	!%r   Fexpect_framec                F   | j         | j        dS | j                                         }| j                             |sdnd           	 | j        rt          | j         | j                  }n| 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 	 t          |t                     r |D ]}| j                            |           n| 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?r   )r   rn   
gettimeoutr/  r{   r'   ra   recvr[  r1  r   r	   ConnectionAbortedErrorr4  connection_lostr   listbytes_received
exceptionsbytes_to_sendsendallr,  r-  _last_used_athas_pending_event)r}   rh  bck_timeout	peek_datagro_segmentdata_outs         rN   peek_and_reactzHfaceBackend.peek_and_react~  s`    9 65i**,,	,?UUC@@@
	.& ;)$)T^DD		 INN4>::	v~6 	 	 	 I  ----- '(<= 	 	 	III	 I  ----DI  ---- 	N**,,,5	)T** 9#, ? ?KN11+>>>>? --i888~((** 	 	 	55			~3355H 	!!(++++   uu		 "^--~//111s\   	AB 
C7 C'C7 CC7 CC7 7D4AF F$#F$G   
G.-G.T)r  rN  rO  maximal_data_in_readdata_in_len_from	stream_id
event_type%type[Event] | tuple[type[Event], ...]r  rN  ,type[Event] | tuple[type[Event], ...] | NonerO  rz  r{  $typing.Callable[[Event], int] | Noner|  list[Event]c          	     P     j          j        J  j         j          j         j        } j        }	 j        t          j        u t          d          }
	                                }d& fd}||dk    s|dk    sd}d}g }g }|dk    r|S |r|dk     rd}d}d}	 d}
                    |
          s|s
 |             |
r                                nd}t          ||          }	 |5  |rt          |	          }n                    |	          }ddd           n# 1 swxY w Y   n# t          t           t"          f$ rJ}t%          |t                     r)|t&          u st%          |t(                    rt&          |v r|d}Y d}~n_d}~wt*          $ rO}j        t.          j        u r6|t&          u st%          |t(                    rt&          |v rt!                      | d}~ww xY w|j        rWd	}|sc|s j        Dt          d          r4	                                  nU# |$ r}t9          |          |d}~ww xY w                                 n"t%          |t<                    r|D ]}||t?          |          z  }	                      |           -# |$ rQ}t          |d          r,t          |d          rtC          |j"        |j#                  |t9          |          |d}~ww xY wn||t?          |          z  }	                      |           nY# |$ rQ}t          |d          r,t          |d          rtC          |j"        |j#                  |t9          |          |d}~ww xY w|r
 |             $                    |
          D ]}t          |d          }|s3t%          |tJ                    rd _         &                                 |j'        dk    rm|k|tP          u st%          |t(                    rMtP          |v rDd _         &                                 |)                    tQ          |dd	                     |c S |rU|dk    rOt%          |t(                    r	tT          |v s	|tT          u r(tW          d |D                       st9          d          |j'        dk    r$|j,        rd|j,        v rt[          |j,                  |j'        dk    rK j        t          j        k    r6|j,        r d|j,        v rt]          d|j,                   t]          d          	 |j,        rzd|j,        v rq|j,        /                    dd          0                    d          }d t)          |1                    d                    D             \  }}tC          |||z
            n# td          tf          f$ r Y nw xY wt9          |j,                  |rt%          |th                    r j        t          j5        k    r|j'        d k    s  j        t          j        k    r5|j'        d!k    r*t          j6         j7        vrtq          d" j                   t9          d#|j9         d$tu          |j'                   d%          |s|)                    |           n]t%          ||          r8|)                    |           | 	 | ||          z  }n&# tv          $ r Y nw xY wn|)                    |           |duo||k    }|rt%          ||          s|r/|s|r|r|j<        r|r
 j=        |  |c S |r
 j=        |  |c S |r|j<        r|r|r
 j=        |  |c S |r&|j<        r||||j9        k    r|r
 j=        |  |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.N
next_timerrA   r   c                    rg } 	                                  }|sn|                     |           -t          |           dk    rB	 t          |            d S # t          $ r" dx_        | D ]}t          |           Y d S w xY w| rt          | d                    d S d S 	                                  }|sd S rt          |           n                    |           A)NTr6   Fr   )rq  rW  r  r)   r$   r|   r(   rr  )tbsrx  dgramgso_enabledis_quicr   r}   r   s      rN   send_pendingz3HfaceBackend.__exchange_until.<locals>.send_pending  sP    /#%)'5577H# JJx(((	)
 s88a<<9(s33333; 9 9 9@EE/+%( 9 9E+D%88889 9 99  2#D#a&111112 2/'5577H#  /'h7777X.../s   A (BBr   rR   FTr|  r   eof_receivedexpected_lengthactual_length)partialexpectedr|  
end_streamc              3  @   K   | ]}t          |t                    V  d S r   )r   r"   r   r>  s     rN   r   z0HfaceBackend.__exchange_until.<locals>.<genexpr>  s,      #S#SqJq/$B$B#S#S#S#S#S#Sr   z-Remote end closed connection without responsei  r^  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 )r  c              3  B   K   | ]}|                                 |V  d S r   )isdigit)r   cs     rN   r   z:HfaceBackend.__exchange_until.<locals>.<genexpr>.<genexpr>  s/      +H+H!AIIKK+HA+H+H+H+H+H+Hr   N)rb   r   strip)r   r8  s     rN   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r   z,    i  z8The remote server is unable to serve this resource over zStream z# was reset by remote peer. Reason: .rA   r   )>r   rn   r|   r{   ra   ro   r:   rj   r   rp  rt  r  r5   r'   rk  rl  r4  r3  r   r!   tupler[  r   r   r   timer_firedr   r  r.   rm  rn  r  ro  r+   r  r  r`  r   r   
error_coder   rW  r"   anyrf  r,   r0   replacer  r   rL   
IndexErrorr#   r   r   rU   r-   r|  hexr   r  reshelve) r}   r}  r  rN  rO  rz  r{  r|  gro_enabledra   _has_next_timer
_proto_excr  data_in_lenr`  reshelve_eventsreach_socketr  subdata_inr>  udp_gro_segmentrb  stream_related_eventr   receivedr  target_cap_reachedr  r  r   r   s    `                           @@@@rN   __exchange_untilzHfaceBackend.__exchange_until  s
    y$)C)CC>y--N	){~-!(L99((**
	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/8  +(A--1E1K1K'+$  ')1$$M 	$$81$<$<(-%#' #P	"!&L--	-BB a#$ # LNNN6EOX002224
 z<@@  ; ;& ;&3D)&D&DGG&*ii	&:&:G	; ; ; ; ; ; ; ; ; ; ; ; ; ; ; +(* " " "
 "!%9::  "&888&z599 9 !3j @ @  !GGGGGG    yF$555"&888&z599 9 !3j @ @ 344!; ? # 1:  
3$."<' .C C"<:$113333) : : : #0"2"29:
 !002222!'400 :/6 > >O/7 +s?/C/C C
> ( 7 7 H H H H#- > > >#*1.?#@#@ !-W$%F" F" !- +901121B+& +& +& ,-%- '4A&6&6A =>>  ,3'3w<<7K:$33G<<<<) 	: 	: 	:  'q*;<< ) !?B B ) '5,-OaFW'" '" '"'(!) #0"2"29	: ! # LNNN!9== k" k"-4UK-H-H$+ q
5BV0W0W q%)DNJJLLL (A--%1&,66 *:u = = 7 %1J$>$>
 ! 
 

( ) #+/      & %#sNN !+:u = = + %4z$A$A *o = = ##S#SF#S#S#S S S !> ,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 "" /	!5	! 1	!
 !+ *. D 1 1? C C#)MMM & <))?;;!MMM("(" 2"
 ' <))?;;!MMM(	"(	" -4.:!U_44& <))?;;!MMMaP	"s   6D9 8)D-!D9 -D11D9 4D15D9 9G1A FG1"A
G,,G1H1 1I6IIJ((K>-AK99K>L- -N2AM>>NBWWW[..
[;:[;methodurl	skip_hostskip_accept_encodingc                @   g | _         d| _        d| _        d| _        d| _        d| _        t          j        t          j	                  | _
        | j        | j        | j        }}nR| j        | j        }}|                    d          r/t!          |          }|j        |k    r|j        |j        p| j        }}d|                    d          fg| _         |s_|                    d          }| j                             d|| j        k    s||n|d	|                                 z   f           d
| _        | j                             d| j                            d          fd|                    d          fg           |s| j                             d           dS dS )zNInternally fhace translate this into what putrequest does. e.g. initial trame.NFr  rA  rI  rL  idnarK  r   Ts   :schemes   :path)s   accept-encodings   identity)rq   rr   rs   ru   rt   rv   r   r*  r   r+  _start_last_requestr  rE  rZ   r\   
startswithr3   default_portr   rW  extendr   )	r}   r  r  r  r  rZ   r\   
parsed_urlr   s	            rN   
putrequestzHfaceBackend.putrequest  s    &*#'+$#' #( "'#+<8<#@#@#@ (*D,=$DDDI$D~~f%% W 's^^
?d**!+*/2VTEV$D w//0
  
	,#{{622IN!!!t000DL I"ZZZ%6%6%8%88	   (,D$ K&&w// 3::g../	
 	
 	
 $ 	N!!    	 	r   r^  valuesc                   |                                 }t          |t                    r|                    d          n|}| j        t
          j        u p| j        d u }|s|t          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 )NrL  s   content-lengthr   z#Invalid content-length set. Given 'z' when only digits are allowed.s   hostr  rM     :s	   :protocolT)rX  r   r[   r   ro   r:   r   r   rr   rb   rL   r.   ru   r  r  rv   rq   removeinsertrW  )
r}   r^  r  encoded_headersupport_te_chunkedr_  encoded_valueitem_to_remove_k_vs
             rN   	putheaderzHfaceBackend.putheaderV  s    3=fc3J3JVw///PV $(9#?#T49PTCT " 	!333&.>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   8B $B7)encode_chunkedexpect_body_afterwardmessage_bodybytes | Noner  r  ResponsePromise | Nonec                  | j         |                                  | j        |                                  | j         | j        J | j                                        | _        | o| j         }| j        wd }| j        D ](\  }}|dk    r||f} n|	                    d          s n)|| j        
                    |           | j                            dd| j        f           d| _        | j        st          d          	 | j                            | j        | j        |           n4# | j                                        $ r}t          |          |d }~ww xY w	 | j        rg }		 | j                                        }
|
sn|	                    |
           2t'          |	          dk    rH	 t)          | j         |	           n# t*          $ r$ d| _        |	D ]}t-          | j         |           Y nw xY w|	rt-          | j         |	d	                    nc| j        t0          j        u }	 | j                                        }
|
sn3|rt-          | j         |
           n| j                             |
           Ot7          j                    | _        nT# t<          $ rG}t?          | | j        | j                  }|| j         |j!        <   || j"        |j#        <   ||_$        |d }~ww xY w|sz| j%        r8| j&        r1tO          j(        tR          j*        
          | j%        z
  | j&        _+        t?          | | j        | j                  }|| j         |j!        <   || j"        |j#        <   |S d S )NrK  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+.r  r6   Fr   r  ),r   connectrn   r@  rU  rp   rv   ru   rq   r  r  r  rt   r.   rY  rp  r|   rq  rW  r  r)   r$   r(   ro   r:   rj   rr  r,  r-  rs  BrokenPipeErrorr=   	_promisesuid_promises_per_streamr|  promiser  r   r   r*  r   r+  request_sent_latency)r}   r  r  r  should_end_streamexisting_authoritycursor_headercursor_valuer>  r  bufr  r  rps                 rN   
endheaderszHfaceBackend.endheaders  s    9LLNNN >!OOy$)C)CC .@@BB &%Ed.E*E 	
 #/!%/3~  +| M11*7)F&E$//55 E "-%%&8999N!!!mT5M%NOOO'+D$' 	  	*N)), *    
 ~((** 	* 	* 	*"")	*#	2& /$.6688C JJsOOO	$
 s88a<<>(C8888; > > >27/%( > >E+DIu====> >>  7#DIs1v666){~5/.6688C  /'	37777	))#.../  "&!1!1D  	 	 	 tGGB%'DN26"68D%bl3AIG	 % 		' DN LHL111D4LL 3 !tGGB%'DN26"68D%bl3ItsW   'D- -E	EE"AJ 2G J +G63J 5G66BJ 
K$AKK$_HfaceBackend__bufr  _HfaceBackend__stream_id_HfaceBackend__close_streamc                     j         J  j        J t           j         d          }d fd} j                             |t	          |                    du r|r j                                         nd }t           j        ||          }|5   j        rt           j         j	                  }n j        
                     j	                  }d d d            n# 1 swxY w Y   |j        rt          |t                    r |D ]}	 j                             |	           n j                             |            |              j                             |t	          |                    du  j                             |||           	  j                                         }
|
sn j                            |
           7t%          j                     _        d S )Nr  rA   r   c                 v    	 j                                         } | sd S j                            |            8r   rn   rq  r   rr  rx  r}   s    rN   r  z-HfaceBackend.__write_st.<locals>.send_pending  C    ,>7799 E	!!(+++	,r   Tr  r  )rn   r   r   should_wait_remote_flow_controlr  r  r5   r{   r'   ra   rk  r  r   rn  ro  submit_datarq  rr  r,  r-  rs  )r}   r  r  r  r  r  r  r  r  rw  rx  s   `          rN   
__write_stzHfaceBackend.__write_st  sX    ~)))y$$$!$.,??	, 	, 	, 	, 	, 	, N::;E

SS  9HQ22444TJTY
LAAC = =* =+DIt~FFGG"innT^<<G	= = = = = = = = = = = = = = =  '4(( 7#* ? ?KN11+>>>>? --g666LNNN) N::;E

SS , 	""% 	# 	
 	
 	
	(~3355H Ih'''	( "^--s   ACC!$C!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  )rn   r   submit_stream_resetrq  rr  _pending_responsesKeyErrorr   r   r,  r-  rs  )r}   r  rx  s      rN   
__abort_stzHfaceBackend.__abort_stA  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[list[bytes], bool, HTTPHeaderDict | None]c           	     l   |rl	 | j         |= n# t          $ r Y nw xY w| j        F| j                                        r-| j                                        r|                                  g ddf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g d|fS d |D             ||fS )af  Allows us to defer the body loading after constructing the response object.

        Returns the body as a list of per-frame chunks (not concatenated):
        the caller feeds them straight into its ``BytesQueueBuffer`` so
        contiguity is produced lazily and, for frame-aligned reads,
        zero-copy. Joining here would defeat that buffer.
        NTFc                *    t          | j                  S r   )r  data)xs    rN   <lambda>z(HfaceBackend.__read_st.<locals>.<lambda>  s    s16{{ r   )r  rN  rz  r{  r|  rO  rR   r
   r   :   rL  rM  c                    g | ]	}|j         
S  )r  r  s     rN   
<listcomp>z*HfaceBackend.__read_st.<locals>.<listcomp>  s    $$$QV$$$r   )r  r  rn   is_idler   r   r0  r   r"   r,  r-  rs  r  r   r   r  r   rB  ri   rZ  pop)r}   r  r  r  r  eotr`  trailersidxrc  rd  s              rN   	__read_stzHfaceBackend.__read_st[  s   $  
	"+K88    ~)>))++ !0J0J0L0L !JJLLLtT>!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 .tX-- %$V$$$
 	
s    
	C 
CCr  early_response_callbackr  r  0typing.Callable[[LowLevelResponse], None] | Noner;   c               @   | 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
k    s|dk    r1d|cxk    rdk     r$n n!tC          |j        | j"        | j#                  }nd }t3          |                    d          || j        |||s	|| j"        nd | j        | j        |j        | j        dk    r| j         nd ||s| j$        nd           | _%        | j%        |_&        || j%        _        | j        |j'        = |rJ| j        (                                r| )                                 n0| j*        r| +                                 n| j%        | j,        |j        <   | j%        S )NTF)r  rN  rO  r|  r   r  rP  rL  rM  z@Got an HTTP response without a status code. This is a violation.e   zResponse received (stream: z) but no promise in-flightr   rI  rS  )bodyr   r\   r|  r  rJ  rQ  rR     )r   r\   r|  r   dsastream_abort)-r   rn   r  r/   r   rp   r|  r0  r"   r   r  r,  r-  rs  r   rB  rb   ri   rZ  r.   r   r  r  request_headersr   r;   	_http_vsnrZ   r\   from_promiserQ   getresponser  r9   _HfaceBackend__read_st_HfaceBackend__write_st_HfaceBackend__abort_str   responser  r   r   r  r   r  )r}   r  r  r|  
head_eventrB  ra  rc  rd  is_early_responser>  	http_verbreasonearly_responser   r  s                   rN   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 ,    #S==Y*44#:M:M:M:M#:M:M:M:M:M-?!. .CC C+;W%%N"%?#+DNN4i'~## 03=,
 ,
 ,
   >&-# N7;' 	H~))++  

  9=D#G$56~s*   4E; ;
F#FF#G G,+G,)r   r  bytes | bytearrayr   c               d	     j          j         j        t          d           j         j         j         _        t           j        d          }d fd}	  j                             j        t          |                    du r|r j        	                                nd}t           j         ||          }|5   j        rt           j          j                  }n j                              j                  }ddd           n# 1 swxY w Y   |j        rt!          |t"                    s j                            |           n|D ]} j                            |            j                             j        t(          f          r j        r8 j        r1t/          j        t2          j        	           j        z
   j        _        t9            j         j                  }	|	 j        |	j        <   |	 j         |	j!        <   tE          |	
           |              j                             j        t          |                    du Ή j        r xj        t          |          z  c_         j        #                     j        ||           tH          rtK          j&        d |           d}
	  j'        rg }	  j        (                                }|sn|)                    |           2t          |          dk    rH	 tU           j         |           n# tV          $ r$ d _'        |D ]}tY           j         |           Y nw xY w|rtY           j         |d                    nc j-        t\          j/        u }	  j        (                                }|sn3|rtY           j         |           n j         0                    |           On# tb          $ r}|}
Y d}~nd}~ww xY w|s|
r j        r8 j        r1t/          j        t2          j        	           j        z
   j        _        t9            j         j                  }	|	 j        |	j        <   |	 j         |	j!        <   |
r	|	|
_2        |
|	S n4#  j        3                                $ 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 connectionr  rA   r   c                 v    	 j                                         } | sd S j                            |            8r   r  r  s    rN   r  z'HfaceBackend.send.<locals>.send_pendingg  r  r   T)r|  
excl_eventr  )r  r  zhttp.client.sendr6   Fr   r  )5r   rp   rn   r  rs   rr   r   r  r  r  r5   r{   r'   ra   rk  r  r   rn  ro  rt  r   r  r   r   r*  r   r+  r  r=   rq   r  r  r  r|  r*   r  _HAS_SYS_AUDITsysr?   r|   rq  rW  r)   r$   r(   ro   r:   rj   rr  r  r  rp  r.   )r}   r  r   r  r  r  r  r  rw  r  remote_pipe_shutdownr  rx  r  r  r>  s   `               rN   sendzHfaceBackend.sendQ  s    9 74>;Q >  
 (0+7+/+FD(!$.,??	, 	, 	, 	, 	, 	,l	>>OSYY   
 =LUT^66888QU
 JEE A A. A"/	4>"J"J"&).."@"@	A A A A A A A A A A A A A A A ? !'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M >>OSYY   P + :,,D		9,,N&& '     :	,dD999;? )* 8C-#'>#?#?#A#A' "!

8,,,	-
 3xx!||B,TY<<<<? B B B6;D3), B B /	5 A A A AB BB  ;'	3q6:::"i;>9G	8#'>#?#?#A#A' "!" 8+DIx@@@@ I--h777	8 # ) ) )'($$$$$$)  * +   5558PP N7 %T4?DNKK)+rv&:<)",7' /35(0..	 ~((** 	 	 	 	
 ts   A%Q< ADQ< DQ< DF(Q<  AO L& %O &+MO MBO Q< 
O/#O*%Q< *O//BQ< <R-R((R-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   rn   r   pingr   rp  rq  rr  r[  r   r0   r,  r-  rs  )r}   
ping_frames     rN   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| _        d| _        d | _        d S )NTr   F)r   rn   submit_closerq  rr  r[  r   SSLEOFErrorrp  r.   shutdownr   r   rp   r  r  r  rw   r   rr   rs   r  _cached_http_vsnr.  r,  r-  rs  r{   r|   r   )r}   goodbye_framer>  s      rN   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)rZ   r[   r\   r]   r	   r^   r_   r`   ra   rb   rT   rc   rU   rd   rV   re   rW   rf   rX   r^   rY   r^   rA   rB   )rA   rb   )rA   r   r  )NNNNNNNNNNNN)r   r   r   r   r   r   r   r   r   r]   r   r]   r   r   r   r   r   r   r   r   r   r   r   r   rA   rB   )rj   )r   r[   rA   r`   )NNrA  )
rZ   r[   r\   r]   rB  rC  r   r[   rA   r   )F)rh  rB   rA   rB   )r}  r~  r  rB   rN  r  rO  rB   rz  r]   r{  r  r|  r]   rA   r  )FF)
r  r[   r  r[   r  rB   r  rB   rA   r   )r^  r[   r  r[   rA   r   r   )r  r  r  rB   r  rB   rA   r  )r  r  r  rb   r  rB   rA   r   )r  rb   rA   r   )TF)
r  r]   r  r]   r  rB   r  rB   rA   r  )r  r  r  r  rA   r;   )r  r  r   rB   rA   r  )(__name__
__module____qualname__r:   r   r   rj   supported_svnr   r7   default_socket_optionsr   r   r   rl   propertyr   r   r   r   r   r   r   r   r@  rG  rg  ry  r0  r  r  r  r  r  r  r  r!  r#  r   __classcell__)r~   s   @rN   rQ   rQ   b   s        _knknEM
  &(15*=. 304@D.E5T4Q=. =. =. =. =. =. =. =.~    X I I I XI , , , X,
 	W 	W 	W X	W, , , ,\V V V Vt .2#"&+/*.*.(,'++/'+>B&*y y y y yv    0H H H HZ
  37& & & & &2<& <& <& <&|:2 :2 :2 :2 :2@ $OS*.+/AE $Y" Y" Y" Y" Y" Y"~
  %*? ? ? ? ?BG G G GV &*j  %&+j j j j j jZ FK4. 4. 4. 4. 4.l. . . .< &*"']
 ]
 ]
 ]
 ]
D +/U U U U U Uv 	K K K K K KZ. . . .>.  .  .  .  .  .  .  . r   rQ   r+  )S
__future__r   r   r  r,  typingr   r   	functoolsr   r   r   r	   r2  contrib.anytlsr   r   util.ssltransportr   _collectionsr   	_constantr   r   r   r   r   r   r   contrib.hfacer   r   r   r   r   r   r   contrib.hface.eventsr   r   r   r    r!   r"   r#   contrib.ssa._gror$   r%   r&   r'   r(   r)   rp  r*   r+   r,   r-   r.   r/   r0   rH   r1   r2   r3   util.socket_stater4   util.sub_timeoutr5   _baser7   r8   r9   r:   r;   r<   r=   TYPE_CHECKING_typingr>   r   r  rO   rQ   r  r   rN   <module>rB     s   " " " " " "  



   ' ' ' ' ' ' ' '       * * * * * * * * + + + + + + - - - - - - - -?0000000L ) ) ) ) ) )                                                                                    ? > > > > > > > > > 0 0 0 0 0 0 ) ) ) ) ) )                  
 /......g&& 1   I  I  I  I  I ; I  I  I  I  I r   