=3ddlmZddlZddlZddlZddlZddlmZejrddl m Z ddl m Z m Z ejdd ZejeefZejd Zd ZGd d ZdS)) annotationsN)ProxySchemeUnsupported)Literal)_TYPE_PEER_CERT_RET_TYPE_PEER_CERT_RET_DICT_SelfT SSLTransport)bound _ReturnValuei@ceZdZdZed]dZ d^d_dZd`dZdadZdbdZ dcdddZ dedfd!Z dgdhd&Z didjd)Z didkd*Z dldddd+dmd3Zdnd4Zdnd5Zej dodpd:Zejdqd=Zdrdsd@ZdtdAZdudCZdtdDZdtdEZdvdGZdtdHZdwdKZdxdLZdndMZdldydOZejdzdRZejd{dUZejd|dXZ d}d~d\ZdS)r aL The SSLTransport wraps an existing socket and establishes an SSL connection. Contrary to Python's implementation of SSLSocket, it allows you to chain multiple TLS connections together. It's particularly useful if you need to implement TLS within TLS. The class supports most of the socket API operations. ssl_contextssl.SSLContextreturnNonecDt|dstddS)z Raises a ProxySchemeUnsupported if the provided ssl_context can't be used for TLS in TLS. The only requirement is that the ssl_context provides the 'wrap_bio' methods. wrap_biozXTLS in TLS requires SSLContext.wrap_bio() which isn't available on non-native SSLContextN)hasattrr)rs k/builddir/build/BUILD/cloudlinux-venv-1.0.10/venv/lib/python3.11/site-packages/urllib3/util/ssltransport.py$_validate_ssl_context_for_tls_in_tlsz1SSLTransport._validate_ssl_context_for_tls_in_tls"s7{J// (5   NTsocket socket.socketserver_hostname str | Nonesuppress_ragged_eofsboolctj|_tj|_||_||_||j|j||_||jj dS)zV Create an SSLTransport around socket using the provided ssl_context. )rN) ssl MemoryBIOincomingoutgoingrrrsslobj _ssl_io_loop do_handshake)selfrrrrs r__init__zSSLTransport.__init__2su    $8! !** M4=/+   $+233333rr'r c|SNr's r __enter__zSSLTransport.__enter__Is r_ typing.Anyc.|dSr*)close)r'r.s r__exit__zSSLTransport.__exit__Ls rintc4|jSr*)rfilenor,s rr5zSSLTransport.filenoO{!!###rlenbuffertyping.Any | None int | bytesc.|||Sr*)_wrap_ssl_read)r'r8r9s rreadzSSLTransport.readRs""3///rrbuflenflagscV|dkrtd||S)Nrz+non-zero flags not allowed in calls to recv) ValueErrorr=)r'r?r@s rrecvzSSLTransport.recvUs. A::JKK K""6***r _WriteBuffernbytes int | NoneNone | int | bytescz|dkrtd|t|}|||S)Nrz0non-zero flags not allowed in calls to recv_into)rBr8r>)r'r9rEr@s r recv_intozSSLTransport.recv_intoZs@ A::OPP P >[[Fyy(((rdatabytescX|dkrtdd}t|5}|d5}t|}||kr(|||d}||z }||k(dddn #1swxYwYddddS#1swxYwYdS)Nrz.non-zero flags not allowed in calls to sendallB)rB memoryviewcastr8send)r'rJr@countview byte_viewamountvs rsendallzSSLTransport.sendallfs1 A::MNN N    tyy~~ ^^F&..IIi/00 &..                                 s4B>B; BB BB BB#&B#cl|dkrtd||jj|S)Nrz+non-zero flags not allowed in calls to send)rBr%r$write)r'rJr@s rrPzSSLTransport.sendps5 A::JKK K  !2D999r)encodingerrorsnewlinemodestr bufferingrYrZr[1typing.BinaryIO | typing.TextIO | socket.SocketIOc.t|hdkstd|dd|v}d|vp| }|s|sJd|v}d} |r| dz } |r| dz } tj|| } |jxjdz c_|d }|d kr t j}|d kr|std | S|r|rt j| | |} n1|rt j| |} n|sJt j | |} |r| St j | |||} || _ | S) a Python's httpclient uses makefile and buffered io when reading HTTP messages and we need to support it. This is unfortunately a copy and paste of socket.py makefile with small changes to point to the socket directly. >brwz invalid mode z (only r, w, b allowed)rcrbrarNrz!unbuffered streams must be binary) setrBrSocketIO_io_refsioDEFAULT_BUFFER_SIZEBufferedRWPairBufferedReaderBufferedWriter TextIOWrapperr\) r'r\r^rYrZr[writingreadingbinaryrawmoderawr9texts rmakefilezSSLTransport.makefileus 4yyOOO++LTLLLMM M++,W!'!!!   sNG   sNGodG,, !  I q==.I >> F !DEEEJ  7w 7&sC;;FF  7&sI66FFNN7&sI66F  M&'BB  rcD||jjdSr*)r%r$unwrapr,s rrwzSSLTransport.unwraps! $+,-----rc8|jdSr*)rr1r,s rr1zSSLTransport.closes r. binary_formLiteral[False]_TYPE_PEER_CERT_RET_DICT | NonecdSr*r+r'rys r getpeercertzSSLTransport.getpeercerts  r Literal[True] bytes | NonecdSr*r+r}s rr~zSSLTransport.getpeercert rFrc6|j|Sr*)r$r~r}s rr~zSSLTransport.getpeercerts{&&{333rc4|jSr*)r$versionr,s rrzSSLTransport.versions{""$$$rtuple[str, str, int] | Nonec4|jSr*)r$cipherr,s rrzSSLTransport.cipherr6rc4|jSr*)r$selected_alpn_protocolr,s rrz#SSLTransport.selected_alpn_protocols{11333rc4|jSr*)r$selected_npn_protocolr,s rrz"SSLTransport.selected_npn_protocols{00222r!list[tuple[str, str, int]] | Nonec4|jSr*)r$shared_ciphersr,s rrzSSLTransport.shared_cipherss{))+++rc4|jSr*)r$ compressionr,s rrzSSLTransport.compressions{&&(((rvalue float | Nonec:|j|dSr*)r settimeout)r'rs rrzSSLTransport.settimeouts u%%%%%rc4|jSr*)r gettimeoutr,s rrzSSLTransport.gettimeouts{%%'''rc8|jdSr*)r_decref_socketiosr,s rrzSSLTransport._decref_socketioss %%'''''rbytearray | Nonec ||jj||S#tj$r(}|jtjkr |jrYd}~dSd}~wwxYwNr)r%r$r>r SSLErrorerrno SSL_ERROR_EOFr)r'r8r9es rr=zSSLTransport._wrap_ssl_readsm $$T[%5sFCC C|   w#+++0I+qqqqq  s #AAAAfunctyping.Callable[[], None]cdSr*r+)r'rs rr%zSSLTransport._ssl_io_looprrtyping.Callable[[bytes], int]arg1cdSr*r+)r'rrs rr%zSSLTransport._ssl_io_looprr/typing.Callable[[int, bytearray | None], bytes]arg2cdSr*r+)r'rrrs rr%zSSLTransport._ssl_io_loops  r"typing.Callable[..., _ReturnValue]None | bytes | intr cfd}d}|rd} | | |}n| ||}n |||}nD#tj$r2}|jtjtjfvr||j}Yd}~nd}~wwxYw|j}|j||d}ne|tjkrU|j t}|r|j |n|j |tjt |S)z>Performs an I/O loop between incoming/outgoing and the socket.TNF)r rrSSL_ERROR_WANT_READSSL_ERROR_WANT_WRITEr#r>rrVrC SSL_BLOCKSIZEr"rX write_eoftypingrOr ) r'rrr should_loopretrrbufs rr%zSSLTransport._ssl_io_loopsX  .E rCrIrVrPrurwr1roverloadr~rrrrrrrrrr=r%r+rrr r s5   \ &'+%) 44444.$$$$00000+++++" ) ) ) ) ):::::!%2 $!"222222h.... _,/    _  _   _ 44444%%%%$$$$44443333,,,,))))&&&&(((((((( _   _  _   _  _   _ $(!% $.$.$.$.$.$.$.r) __future__rrirr r exceptionsr TYPE_CHECKINGtyping_extensionsrssl_rr TypeVarr Union bytearrayrNrDr rr r+rrrs"""""" ////// D))))))CCCCCCCC  7 7 7|Iz12 v~n--  A.A.A.A.A.A.A.A.A.A.r