2biLSSKrSSKrSSKrSSKJr SSKJr Sr"SS5rg)N)ProxySchemeUnsupported)sixi@c\rSrSrSr\S5rSSjrSrSr Sr SS jr S S jr S!S jr S"S jrS"S jrS#SjrSrSrS$SjrSrSrSrSrSrSrSrSrSrS%SjrSrSrg)& SSLTransport a4 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. c|[US5(d+[R(a [S5e[S5eg)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_biozKTLS in TLS requires SSLContext.wrap_bio() which isn't supported on Python 2zXTLS in TLS requires SSLContext.wrap_bio() which isn't available on non-native SSLContextN)hasattrrPY2r) ssl_contexts ڗ/builddir/build/BUILDROOT/alt-python313-pip-23.3.1-3.el8.x86_64/opt/alt/python313/lib/python3.13/site-packages/pip/_vendor/urllib3/util/ssltransport.py$_validate_ssl_context_for_tls_in_tls1SSLTransport._validate_ssl_context_for_tls_in_tlssC{J//ww,, -90Nc"[R"5Ul[R"5UlX@lXlUR URURUS9UlURURR5 g)zF Create an SSLTransport around socket using the provided ssl_context. )server_hostnameN) ssl MemoryBIOincomingoutgoingsuppress_ragged_eofssocketr sslobj _ssl_io_loop do_handshake)selfrr rrs r__init__SSLTransport.__init__,si     $8! !** MM4==/+  $++223rcU$Nrs r __enter__SSLTransport.__enter__?s rc$UR5 gr!)close)r_s r__exit__SSLTransport.__exit__Bs  rc6URR5$r!)rfilenor#s rr,SSLTransport.filenoE{{!!##rc$URX5$r!)_wrap_ssl_read)rlenbuffers rreadSSLTransport.readHs""3//rcFUS:wa [S5eURU5$)Nrz+non-zero flags not allowed in calls to recv) ValueErrorr0)rr1flagss rrecvSSLTransport.recvKs& A:JK K""3''rc|US:wa [S5eU(aUc [U5nOUcSnURX!5$)Nrz0non-zero flags not allowed in calls to recv_into)r6r1r3)rr2nbytesr7s r recv_intoSSLTransport.recv_intoPs> A:OP P v~[F ^Fyy((rc$US:wa [S5eSn[U5oDRS5n[U5nX6:aUR XSS5nX7- nX6:aMSSS5 SSS5 g!,(df  N=f!,(df  g=f)Nrz.non-zero flags not allowed in calls to sendallB)r6 memoryviewcastr1send)rdatar7countview byte_viewamountvs rsendallSSLTransport.sendallYst A:MN N  yy~^F.IIi/0 .(6  ~~  s"B-A0B0 A> :B BctUS:wa [S5eURURRU5nU$)Nrz+non-zero flags not allowed in calls to send)r6rrwrite)rrDr7responses rrCSSLTransport.sendcs6 A:JK K$$T[[%6%6=rc[U51Sk::d[SU<S35eSU;nSU;=(d U(+nU(d U(deSU;nSn U(aU S- n U(aU S- n [R"X 5n UR=RS- slUcS nUS :a[ R nUS :XaU(d [S 5eU $U(aU(a[ R"XU5n O=U(a[ R"X5n OU(de[ R"X5n U(aU $[ R"XXE5n Xl U $) z 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)rSrRrQrz!unbuffered streams must be binary) setr6rSocketIO_io_refsioDEFAULT_BUFFER_SIZEBufferedRWPairBufferedReaderBufferedWriter TextIOWrappermode) rr` bufferingencodingerrorsnewlinewritingreadingbinaryrawmoderawr2texts rmakefileSSLTransport.makefileis(4yO+OP P++,W'!!  sNG  sNGood, !  I q=..I > !DEEJ w&&s;F &&s6FN7&&s6F M&B  rcNURURR5 gr!)rrunwrapr#s rrnSSLTransport.unwraps $++,,-rc8URR5 gr!)rr'r#s rr'SSLTransport.closes rc8URRU5$r!)r getpeercert)r binary_forms rrsSSLTransport.getpeercerts{{&&{33rc6URR5$r!)rversionr#s rrwSSLTransport.versions{{""$$rc6URR5$r!)rcipherr#s rrzSSLTransport.cipherr.rc6URR5$r!)rselected_alpn_protocolr#s rr}#SSLTransport.selected_alpn_protocols{{1133rc6URR5$r!)rselected_npn_protocolr#s rr"SSLTransport.selected_npn_protocols{{0022rc6URR5$r!)rshared_ciphersr#s rrSSLTransport.shared_cipherss{{))++rc6URR5$r!)r compressionr#s rrSSLTransport.compressions{{&&((rc:URRU5 gr!)r settimeout)rvalues rrSSLTransport.settimeouts u%rc6URR5$r!)r gettimeoutr#s rrSSLTransport.gettimeouts{{%%''rc8URR5 gr!)r_decref_socketiosr#s rrSSLTransport._decref_socketioss %%'rcURURRX5$![Ra:nUR [R :XaUR(aSnAgeSnAff=fNr)rrr3rSSLErrorerrno SSL_ERROR_EOFr)rr1r2es rr0SSLTransport._wrap_ssl_readsX $$T[[%5%5sC C|| ww#+++0I0I  s%(A6/A10A11A6cPSnSnU(aSnU"U6nUR R 5nURRU5 UcSnOpU[R:Xa\URR[5nU(aURRU5 OURR5 U(aMU$![RaGnUR[R[R4;aUeURnSnAGN SnAff=f)z>Performs an I/O loop between incoming/outgoing and the socket.TNF)rrrSSL_ERROR_WANT_READSSL_ERROR_WANT_WRITErr3rrJr8 SSL_BLOCKSIZErrM write_eof)rfuncargs should_loopretrrbufs rrSSLTransport._ssl_io_loops E Dk--$$&C KK   $}# #111kk&&}5MM'',MM++-)k* #<< 773#:#:Crs% / RRr