K i"ddlmZddlZddlZddlZddlZddlmZejrddl m Z ddl m Z m Z ejeefZej$dZd ZGd d Zy) ) annotationsN)ProxySchemeUnsupported)Self)_TYPE_PEER_CERT_RET_TYPE_PEER_CERT_RET_DICT _ReturnValuei@c"eZdZdZed!dZ d" d#dZd$dZd%dZd&dZ d'd(dZ d)d*d Z d+ d,d Z d-d.d Z d-d/d Z d0dddd  d1dZd2dZd2dZej& d3 d4dZej&d5dZd6d7dZd8dZd9dZd8dZd:dZd8dZd;dZddZej&d?dZej& d@dZ dA dBd Zy)C SSLTransportaL 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. c2t|ds tdy)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) ssl_contexts _/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/urllib3/util/ssltransport.py$_validate_ssl_context_for_tls_in_tlsz1SSLTransport._validate_ssl_context_for_tls_in_tls!s%{J/(5 0Nc(tj|_tj|_||_||_|j |j|j||_|j|jjy)zV Create an SSLTransport around socket using the provided ssl_context. )server_hostnameN) ssl MemoryBIOincomingoutgoingsuppress_ragged_eofssocketrsslobj _ssl_io_loop do_handshake)selfrrrrs r__init__zSSLTransport.__init__1sm    $8! !** MM4==/+  $++223rc|SNrs r __enter__zSSLTransport.__enter__Hs rc$|jyr")close)r_s r__exit__zSSLTransport.__exit__Ks  rc6|jjSr")rfilenor$s rr+zSSLTransport.filenoN{{!!##rc&|j||Sr")_wrap_ssl_read)rlenbuffers rreadzSSLTransport.readQs""3//rcD|dk7r td|j|S)Nrz+non-zero flags not allowed in calls to recv) ValueErrorr.)rbuflenflagss rrecvzSSLTransport.recvTs& A:JK K""6**rc`|dk7r td| t|}|j||S)Nrz0non-zero flags not allowed in calls to recv_into)r3r/r1)rr0nbytesr5s r recv_intozSSLTransport.recv_intoYs6 A:OP P >[Fyy((rc|dk7r tdd}t|5}|jd5}t|}||kr|j ||d}||z }||krddddddy#1swYxYw#1swYyxYw)Nrz.non-zero flags not allowed in calls to sendallB)r3 memoryviewcastr/send)rdatar5countview byte_viewamountvs rsendallzSSLTransport.sendalles A:MN N   tyy~ ^F&.IIi/0 &.      s"A=/A1 A=1A: 6A==Bcn|dk7r td|j|jj|S)Nrz+non-zero flags not allowed in calls to send)r3rrwrite)rr?r5s rr>zSSLTransport.sendos2 A:JK K  !2!2D99r)encodingerrorsnewlinec:t|hdkstd|dd|v}d|vxs| }|s|sJd|v}d} |r| dz } |r| dz } tj|| } |jxjdz c_|d }|d krt j }|d k(r|s td | S|r|rt j| | |} n3|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)rNrMrLrrz!unbuffered streams must be binary) setr3rSocketIO_io_refsioDEFAULT_BUFFER_SIZEBufferedRWPairBufferedReaderBufferedWriter TextIOWrappermode) rrZ bufferingrHrIrJwritingreadingbinaryrawmoderawr0texts rmakefilezSSLTransport.makefilets= 4yO+}TH4KLM M++,W'!!  sNG  sNGoodG, !  I q=..I > !DEEJ w&&sC;F &&sI6FN7&&sI6F M&'B  rcN|j|jjyr")rrunwrapr$s rrdzSSLTransport.unwraps $++,,-rc8|jjyr")rr'r$s rr'zSSLTransport.closes rcyr"r#r binary_forms r getpeercertzSSLTransport.getpeercerts+.rcyr"r#rgs rrizSSLTransport.getpeercertsNQrc8|jj|Sr")rrirgs rrizSSLTransport.getpeercerts{{&&{33rc6|jjSr")rversionr$s rrmzSSLTransport.versions{{""$$rc6|jjSr")rcipherr$s rrozSSLTransport.cipherr,rc6|jjSr")rselected_alpn_protocolr$s rrqz#SSLTransport.selected_alpn_protocols{{1133rc6|jjSr")rshared_ciphersr$s rrszSSLTransport.shared_cipherss{{))++rc6|jjSr")r compressionr$s rruzSSLTransport.compressions{{&&((rc:|jj|yr")r settimeout)rvalues rrwzSSLTransport.settimeouts u%rc6|jjSr")r gettimeoutr$s rrzzSSLTransport.gettimeouts{{%%''rc8|jjyr")r_decref_socketiosr$s rr|zSSLTransport._decref_socketioss %%'rc |j|jj||S#tj$r4}|j tj k(r|jrYd}~yd}~wwxYwNr)rrr1rSSLErrorerrno SSL_ERROR_EOFr)rr/r0es rr.zSSLTransport._wrap_ssl_readsZ $$T[[%5%5sFC C|| ww#+++0I0I  s&)A0)A+*A++A0cyr"r#)rfuncs rrzSSLTransport._ssl_io_loopsEHrcyr"r#)rrarg1s rrzSSLTransport._ssl_io_loopsUXrcyr"r#)rrrarg2s rrzSSLTransport._ssl_io_loops rcd}d}|rd} | ||}n| ||}n |||}|j j }|jj||d}nj|tjk(rW|jjt}|r|jj|n|jj|rtjt |S#tj$rE}|jtjtjfvr||j}Yd}~d}~wwxYw)z>Performs an I/O loop between incoming/outgoing and the socket.TNF)rrrSSL_ERROR_WANT_READSSL_ERROR_WANT_WRITErr1rrEr6 SSL_BLOCKSIZErrG write_eoftypingr=r ) rrrr should_loopretrrbufs rrzSSLTransport._ssl_io_loops E :D>>E)rssl.SSLContextreturnNone)NT) rz socket.socketrrr str | Nonerboolrr)rr)r(z typing.Anyrr)rint)N)r/rr0ztyping.Any | Noner int | bytes)rr)r4rr5rrrr~)r0 _WriteBufferr8 int | Noner5rrzNone | int | bytes)r)r?bytesr5rrr)r?rr5rrrr") rZstrr[rrHrrIrrJrrz1typing.BinaryIO | typing.TextIO | socket.SocketIO)rr).)rhztyping.Literal[False]rz_TYPE_PEER_CERT_RET_DICT | None)rhztyping.Literal[True]rz bytes | None)F)rhrrr)rr)rztuple[str, str, int] | None)rz!list[tuple[str, str, int]] | None)rx float | Nonerr)rr)r/rr0bytearray | Nonerr)rztyping.Callable[[], None]rr)rztyping.Callable[[bytes], int]rrrr)rz/typing.Callable[[int, bytearray | None], bytes]rrrrrr)NN)rz"typing.Callable[..., _ReturnValue]rzNone | bytes | intrrrr )__name__ __module__ __qualname____doc__ staticmethodrr r%r)r+r1r6r9rEr>rbrdr'roverloadrirmrorqrsrurwrzr|r.rr#rrr r s  &'+%) 44$4$ 4 # 4  4.$0+" ) ) ) )  ):!%2 $!"222  2  22 ;2h. __36.0. (.. __QQ4%$4,)&(( __HH __XX __=   $(!% $.0$.!$. $.  $.rr ) __future__rrTrrr exceptionsr TYPE_CHECKINGtyping_extensionsrssl_rr Union bytearrayr<rTypeVarr rr r#rrrs\" / &C||Iz12 v~~n-  y.y.r