
    /hh{              	       4   S SK r S SKrS SKrS SKrS SKrS SKrS SKJr	J
r
Jr  S SKJr  S SKJr  \ R                   R#                  \5      r\R(                  r\ R                   R+                  \SS5      r " S S\	5      r " S	 S
\
5      r " S S\5      r " S S\R4                  5      rS\\SS.S jr\S:X  Ga  S SKr\R>                  " SS9r \ RC                  SS\"SSS9  \ RC                  SSSSSSS9  \ RC                  S S!S"S#S$S%S9  \ RC                  S&S'\#S(S)S*9  \ RC                  S+S,\#S-S.9  \ RC                  S/S0\#S(S1S*9  \ RI                  5       r%\%RL                  \l&        \%RN                  (       a  \r(O\r(\ RR                  " 5       \(l*        \RV                  " \RX                  RZ                  5      r.\.R_                  \5        \%R`                  (       a  \.Rc                  \%R`                  5        \%Rd                  (       a  \.Rg                  \%Rd                  5        \%Rh                  (       a  \.Rk                  \%Rh                  5        \" S2\%Rl                  4\(\.5      r7\%RL                  (       a  \8" S3Rs                  \%5      5        \7Ru                  S45        gg)5    N)
HTTPServerSimpleHTTPRequestHandlerBaseHTTPRequestHandler)support)socket_helpercertdatazkeycert.pemc                   &    \ rS rSrS rS rS rSrg)HTTPSServer   c                 >    [         R                  " XU5        X0l        g N)_HTTPServer__init__context)selfserver_addresshandler_classr   s       9/opt/python-3.13.8/usr/lib/python3.13/test/ssl_servers.pyr   HTTPSServer.__init__   s    T=A    c                 p    SU R                   R                  < SU R                  < SU R                  < S3$ )N< :>)	__class____name__server_nameserver_portr   s    r   __str__HTTPSServer.__str__   s+    ((!!!!# 	$r   c                 
    U R                   R                  5       u  pU R                  R                  USS9nX24$ ! [         a=  n[
        R                  (       a"  [        R                  R                  SU-  5        e S nAff = f)NT)server_sidezGot an error:
%s
)
socketacceptr   wrap_socketOSErrorr   verbosesysstderrwrite)r   sockaddrsslconnes        r   get_requestHTTPSServer.get_request!   sr    	++-JDll..t.FG }  	

  !6!:;		s   6; 
B8A==B)r   N)r   
__module____qualname____firstlineno__r   r!   r1   __static_attributes__ r   r   r
   r
      s    $
r   r
   c                   @    \ rS rSrSr\r\R                  r	S r
S rSrg)RootedHTTPRequestHandler-   zTestHTTPS/1.0c                    [         R                  R                  U5      S   n[        R                  R                  [         R                  R                  U5      5      nUR                  S5      n[        S U5      nU R                  nU Hd  n[        R                  R                  U5      u  pC[        R                  R                  U5      u  pS[        R                  R                  X5      nMf     U$ )N   /)urllibparseurlparseospathnormpathunquotesplitfilterroot
splitdrivejoin)r   rB   wordsworddriveheads         r   translate_path'RootedHTTPRequestHandler.translate_path7   s     ||$$T*1-ww 4 4T :;

3tU#yyD'',,T2KEt,JD77<<+D  r   c           	         [         R                  (       ax  [        R                  R	                  SU R
                  R                  U R
                  R                  U R                  R                  5       U R                  5       X-  4-  5        g g )Nz server (%s:%d %s):
   [%s] %s
)r   r)   r*   stdoutr,   serverr   r   requestcipherlog_date_time_stringr   formatargss      r   log_message$RootedHTTPRequestHandler.log_messageK   sh    ??JJ@"kk88"kk55"ll113"779$k	++ , r   r7   N)r   r3   r4   r5   server_versionhererG   r   LOOPBACK_TIMEOUTtimeoutrN   rY   r6   r7   r   r   r9   r9   -   s#    
 %ND&&G(,r   r9   c                   .    \ rS rSrSrSS jrS rS rSrg)	StatsRequestHandlerV   zStatsHTTPS/1.0c                    U R                   R                  R                  nUR                  nUR	                  5       UR                  5       UR                  5       S.n[        R                  " U5      nUR                  S5      nU R                  S5        U R                  SS5        U R                  S[        [        U5      5      5        U R                  5         U(       a  U R                  R!                  U5        g g )N)session_cacherT   compressionzutf-8   zContent-typeztext/plain; charset=utf-8zContent-Length)rfileraw_sockr   session_statsrT   rd   pprintpformatencodesend_responsesend_headerstrlenend_headerswfiler,   )r   	send_bodyr-   r   statsbodys         r   do_GETStatsRequestHandler.do_GET]   s    zz~~##,,$224kkm++-
 ~~e${{7#3)DE)3s4y>:JJT" r   c                 "    U R                  SS9  g )NF)rs   )rv   r    s    r   do_HEADStatsRequestHandler.do_HEADo   s    e$r   c                 ^    [         R                  (       a  [        R                  " X/UQ76   g g r   )r   r)   r   log_requestrV   s      r   r|   StatsRequestHandler.log_requests   s!    ??"..tCdC r   r7   N)T)	r   r3   r4   r5   r[   rv   ry   r|   r6   r7   r   r   r`   r`   V   s    
 &N#$%Dr   r`   c                   >    \ rS rSr\S4S jrS rS	S jrS rS r	Sr
g)
HTTPSServerThreadx   Nc                     S U l         [        US4U=(       d    [        U5      U l        U R                  R                  U l        [        R                  R                  U 5        SU l	        g )Nr   T)
flagr
   r9   rR   r   port	threadingThreadr   daemon)r   r   hostr   s       r   r   HTTPSServerThread.__init__z   sU    	!4)"/"K3K")+ KK++	!!$'r   c                 T    SU R                   R                  < SU R                  < S3$ )Nr   r   r   )r   r   rR   r    s    r   r!   HTTPSServerThread.__str__   s     NN33T[[AAr   c                 N    Xl         [        R                  R                  U 5        g r   )r   r   r   start)r   r   s     r   r   HTTPSServerThread.start   s    	t$r   c                    U R                   (       a  U R                   R                  5          U R                  R                  S5        U R                  R	                  5         g ! U R                  R	                  5         f = f)Ng?)r   setrR   serve_foreverserver_closer    s    r   runHTTPSServerThread.run   sN    99IIMMO	'KK%%d+KK$$&DKK$$&s   A# #A?c                 8    U R                   R                  5         g r   )rR   shutdownr    s    r   stopHTTPSServerThread.stop   s    r   )r   r   r   rR   r   )r   r3   r4   r5   HOSTr   r!   r   r   r   r6   r7   r   r   r   r   x   s!    %) B%'r   r   )r   certfiler   r   c                >  ^ Uc.  [         R                  " [         R                  R                  5      nUR	                  U5        [        XU5      m[        R                  " 5       nTR                  U5        UR                  5         U4S jnU R                  U5        T$ )Nc                    > [         R                  (       a  [        R                  R	                  S5        T R                  5         [         R                  (       a  [        R                  R	                  S5        T R                  5         g )Nzstopping HTTPS server
zjoining HTTPS thread
)r   r)   r*   rQ   r,   r   rI   )rR   s   r   cleanup"make_https_server.<locals>.cleanup   sI    ??JJ67??JJ56r   )sslcreate_default_contextPurposeCLIENT_AUTHload_cert_chainr   r   Eventr   wait
addCleanup)caser   r   r   r   r   r   rR   s          @r   make_https_serverr      su    ,,S[[-D-DEH%wm<F??D
LLIIK 	OOGMr   __main__zERun a test HTTPS server. By default, the current directory is served.)descriptionz-pz--portiQ  z(port to listen on (default: %(default)s))typedefaulthelpz-qz--quietr)   Tstore_falsezbe less verbose)destr   actionr   z-sz--statsuse_stats_handlerF
store_truezalways return stats pagez--curve-name
curve_namestorez&curve name for EC-based Diffie-Hellman)r   r   r   r   z	--cipherscipherszallowed cipher list)r   r   r   z--dhdh_filez!PEM file containing DH parameters z'Listening on https://localhost:{0.port}g?);rA   r*   r   rj   r   urllib.parser>   http.serverr   r   r   r   testr   test.supportr   rB   dirname__file__r\   r   rI   CERTFILEr
   r9   r`   r   r   r   r   argparseArgumentParserparseradd_argumentintro   
parse_argsrX   r)   r   r   getcwdrG   r   r   r   r   r   r   set_ecdh_curver   load_dh_paramsr   set_ciphersr   rR   printrW   r   r7   r   r   <module>r      s   	 
 
   6 6  &	wwx 77<<j-8+ 0&,7 &,RD0 DD	(( < (,ht* z$$CDF hS$G  I
ii,3D  F
i.A5+2L  N
\&E  G )#2  4
YS@  BDllGO+0YY[(()@)@AGH%t/||t||,||DLL)"dii-AF||7>>tDE
M r   