
    daf{                     (   d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ	m
Z
mZ d dlmZ d dlmZ e j                   j#                  e      Zej(                  Ze j                   j+                  edd      Z G d de	      Z G d	 d
e
      Z G d de      Z G d dej4                        ZdeedddZedk(  rd dlZ ej>                  d      Z e jC                  dde"dd       e jC                  dddddd       e jC                  d d!d"d#d$d%       e jC                  d&d'e#d(d)*       e jC                  d+d,e#d-.       e jC                  d/d0e#d(d1*       e jI                         Z%e%jL                  e_&        e%jN                  reZ(neZ( e jR                         e(_*         ejV                  ejX                  jZ                        Z.e.j_                  e       e%j`                  re.jc                  e%j`                         e%jd                  re.jg                  e%jd                         e%jh                  re.jk                  e%jh                          ed2e%jl                  fe(e.      Z7e%jL                  r e8d3js                  e%             e7ju                  d4       yy)5    N)
HTTPServerSimpleHTTPRequestHandlerBaseHTTPRequestHandler)support)socket_helpercertdatazkeycert.pemc                       e Zd Zd Zd Zd Zy)HTTPSServerc                 @    t        j                  | ||       || _        y N)_HTTPServer__init__context)selfserver_addresshandler_classr   s       +/root/Python-3.12.4/Lib/test/ssl_servers.pyr   zHTTPSServer.__init__   s    T>=A    c                 j    d| j                   j                  d| j                  d| j                  dS )N< :>)	__class____name__server_nameserver_portr   s    r   __str__zHTTPSServer.__str__   s+    ((!!!!# 	$r   c                    	 | j                   j                         \  }}| j                  j                  |d      }||fS # t        $ r8}t
        j                  r"t        j                  j                  d|z          d }~ww xY w)NT)server_sidezGot an error:
%s
)
socketacceptr   wrap_socketOSErrorr   verbosesysstderrwrite)r   sockaddrsslconnes        r   get_requestzHTTPSServer.get_request!   sv    	++-JD$ll..t.FG }  	

  !6!:;		s   :A   	B	3A<<BN)r   
__module____qualname__r   r   r.    r   r   r
   r
      s    $
r   r
   c                   8    e Zd ZdZeZej                  Zd Z	d Z
y)RootedHTTPRequestHandlerzTestHTTPS/1.0c                    t         j                  j                  |      d   }t        j                  j                  t         j                  j                  |            }|j                  d      }t        d|      }| j                  }|D ]f  }t        j                  j                  |      \  }}t        j                  j                  |      \  }}t        j                  j                  ||      }h |S )zTranslate a /-separated PATH to the local filename syntax.

        Components that mean special things to the local file system
        (e.g. drive or directory names) are ignored.  (XXX They should
        probably be diagnosed.)

           /N)urllibparseurlparseospathnormpathunquotesplitfilterroot
splitdrivejoin)r   r;   wordsworddriveheads         r   translate_pathz'RootedHTTPRequestHandler.translate_path7   s     ||$$T*1-ww 4 4T :;

3tU#yy 	,D'',,T2KE4t,JD$77<<d+D	, r   c           	         t         j                  ryt        j                  j	                  d| j
                  j                  | j
                  j                  | j                  j                         | j                         ||z  fz         y y )Nz server (%s:%d %s):
   [%s] %s
)r   r&   r'   stdoutr)   serverr   r   requestcipherlog_date_time_stringr   formatargss      r   log_messagez$RootedHTTPRequestHandler.log_messageK   sj    ??JJ@"kk88"kk55"ll113"779$Tk	++ , r   N)r   r/   r0   server_versionherer@   r   LOOPBACK_TIMEOUTtimeoutrG   rQ   r1   r   r   r3   r3   -   s#    
 %ND&&G(,r   r3   c                   (    e Zd ZdZdZddZd Zd Zy)StatsRequestHandlerzSExample HTTP request handler which returns SSL statistics on GET
    requests.
    zStatsHTTPS/1.0c                    | j                   j                  j                  }|j                  }|j	                         |j                         |j                         d}t        j                  |      }|j                  d      }| j                  d       | j                  dd       | j                  dt        t        |                   | j                          |r| j                  j!                  |       yy)zServe a GET request.)session_cacherL   compressionzutf-8   zContent-typeztext/plain; charset=utf-8zContent-LengthN)rfileraw_sockr   session_statsrL   rZ   pprintpformatencodesend_responsesend_headerstrlenend_headerswfiler)   )r   	send_bodyr*   r   statsbodys         r   do_GETzStatsRequestHandler.do_GET]   s    zz~~##,,$224kkm++-
 ~~e${{7#3)DE)3s4y>:JJT" r   c                 (    | j                  d       y)zServe a HEAD request.F)ri   N)rl   r   s    r   do_HEADzStatsRequestHandler.do_HEADo   s    e$r   c                 T    t         j                  rt        j                  | |g|  y y r   )r   r&   r   log_requestrN   s      r   rp   zStatsRequestHandler.log_requests   s#    ??"..tVCdC r   N)T)r   r/   r0   __doc__rR   rl   rn   rp   r1   r   r   rW   rW   V   s     &N#$%Dr   rW   c                   2    e Zd ZedfdZd ZddZd Zd Zy)HTTPSServerThreadNc                     d | _         t        |df|xs t        |      | _        | j                  j                  | _        t        j                  j                  |        d| _	        y )Nr   T)
flagr
   r3   rJ   r   port	threadingThreadr   daemon)r   r   hostr   s       r   r   zHTTPSServerThread.__init__z   sU    	!4)"/"K3K")+ KK++	!!$'r   c                 P    d| j                   j                  d| j                  dS )Nr   r   r   )r   r   rJ   r   s    r   r   zHTTPSServerThread.__str__   s     NN33T[[AAr   c                 P    || _         t        j                  j                  |        y r   )ru   rw   rx   start)r   ru   s     r   r}   zHTTPSServerThread.start   s    	t$r   c                     | j                   r| j                   j                          	 | j                  j                  d       | j                  j	                          y # | j                  j	                          w xY w)Ng?)ru   setrJ   serve_foreverserver_closer   s    r   runzHTTPSServerThread.run   sN    99IIMMO	'KK%%d+KK$$&DKK$$&s   A A:c                 8    | j                   j                          y r   )rJ   shutdownr   s    r   stopzHTTPSServerThread.stop   s    r   r   )	r   r/   r0   HOSTr   r   r}   r   r   r1   r   r   rs   rs   x   s!    %) B%'r   rs   )r   certfilerz   r   c                8   |-t        j                  t         j                  j                        }|j	                  |       t        |||      t        j                         }j                  |       |j                          fd}| j                  |       S )Nc                     t         j                  rt        j                  j	                  d        j                          t         j                  rt        j                  j	                  d        j                          y )Nzstopping HTTPS server
zjoining HTTPS thread
)r   r&   r'   rI   r)   r   rB   )rJ   s   r   cleanupz"make_https_server.<locals>.cleanup   sI    ??JJ67??JJ56r   )sslcreate_default_contextPurposeCLIENT_AUTHload_cert_chainrs   rw   Eventr}   wait
addCleanup)caser   r   rz   r   ru   r   rJ   s          @r   make_https_serverr      sw    ,,S[[-D-DEH%wm<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?);r:   r'   r   r`   rw   urllib.parser7   http.serverr   r   r   r   testr   test.supportr   r;   dirname__file__rS   r   rB   CERTFILEr
   r3   rW   rx   rs   r   r   argparseArgumentParserparseradd_argumentintre   
parse_argsrP   r&   r   r   getcwdr@   r   r   r   r   r   r   set_ecdh_curver   load_dh_paramsr   set_ciphersrv   rJ   printrO   r   r1   r   r   <module>r      s   	 
 
   6 6  &	wwx 77<<j-8+ 0&,7 &,RD0 DD	(( < (,ht* z$X$$CDF hS$G  I
ii,3D  F
i.A5+2L  N
\&E  G )#2  4
YS@  BDllGO+0&RYY[(c(()@)@AGH%t/||t||,||DLL)"dii-AF||7>>tDE
M r   