
    ;eo                        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                            e          Zej        Ze j                            ed          Z G d de	          Z G d d	e
          Z G d
 de          Z G d dej                  ZdeedddZedk    rd dlZ ej        d          Z e !                    dde"dd           e !                    dddddd           e !                    dd d!d"d#d$           e !                    d%d&e#d'd()           e !                    d*d+e#d,-           e !                    d.d/e#d'd0)           e $                                Z%e%j&        e_&        e%j'        reZ(neZ( e j)                    e(_*         ej+        ej,        j-                  Z.e./                    e           e%j0        re.1                    e%j0                   e%j2        re.3                    e%j2                   e%j4        re.5                    e%j4                    ed1e%j6        fe(e.          Z7e%j&        r e8d29                    e%                     e7:                    d3           dS dS )4    N)
HTTPServerSimpleHTTPRequestHandlerBaseHTTPRequestHandler)support)socket_helperzkeycert.pemc                        e Zd Zd Zd Zd ZdS )HTTPSServerc                 @    t          j        | ||           || _        d S N)_HTTPServer__init__context)selfserver_addresshandler_classr   s       '/usr/lib/python3.11/test/ssl_servers.pyr   zHTTPSServer.__init__   s"    T>=AAA    c                 B    d| j         j        d| j        d| j        dS )N< :>)	__class____name__server_nameserver_portr   s    r   __str__zHTTPSServer.__str__   s4     (((!!!!!!# 	$r   c                     	 | j                                         \  }}| j                            |d          }nA# t          $ r4}t
          j        r"t          j        	                    d|z              d }~ww xY w||fS )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!   s    	++--JD$l..t.FFGG 	 	 	 <
  !6!:;;;		
 }s   8; 
A9/A44A9N)r   
__module____qualname__r   r   r-    r   r   r	   r	      sA          $ $ $
 
 
 
 
r   r	   c                   0    e Zd ZdZeZej        Zd Z	d Z
dS )RootedHTTPRequestHandlerzTestHTTPS/1.0c                    t           j                            |          d         }t          j                            t           j                            |                    }|                    d          }t          d|          }| j	        }|D ]f}t          j        
                    |          \  }}t          j                            |          \  }}t          j                            ||          }g|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-w 4 4T : :;;

3tU##y 	, 	,D',,T22KE4t,,JD$7<<d++DDr   c           	          t           j        rit          j                            d| j        j        | j        j        | j        	                                | 
                                ||z  fz             d S d S )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   s~    ? 	,J@"k8"k5"l1133"7799$Tk	++ , , , , ,	, 	,r   N)r   r.   r/   server_versionherer?   r   LOOPBACK_TIMEOUTtimeoutrF   rP   r0   r   r   r2   r2   -   sF        
 %ND&G  (, , , , ,r   r2   c                   *    e Zd ZdZdZddZd Zd ZdS )	StatsRequestHandlerzSExample HTTP request handler which returns SSL statistics on GET
    requests.
    zStatsHTTPS/1.0Tc                    | j         j        j        }|j        }|                                |                                |                                d}t          j        |          }|	                    d          }| 
                    d           |                     dd           |                     dt          t          |                               |                                  |r| j                            |           dS dS )zServe a GET request.)session_cacherK   compressionzutf-8   zContent-typeztext/plain; charset=utf-8zContent-LengthN)rfileraw_sockr   session_statsrK   rY   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    z~#,$2244kkmm++-- 
 ~e$${{7##3)DEEE)3s4yy>>::: 	#JT"""""	# 	#r   c                 2    |                      d           dS )zServe a HEAD request.F)rh   N)rk   r   s    r   do_HEADzStatsRequestHandler.do_HEADo   s    e$$$$$r   c                 H    t           j        rt          j        | |g|R   d S d S r   )r   r%   r   log_requestrM   s      r   ro   zStatsRequestHandler.log_requests   s:    ? 	D".tVCdCCCCCC	D 	Dr   N)T)r   r.   r/   __doc__rQ   rk   rm   ro   r0   r   r   rV   rV   V   s\          &N# # # #$% % %D D D D Dr   rV   c                   4    e Zd ZedfdZd ZddZd Zd ZdS )HTTPSServerThreadNc                     d | _         t          |df|pt          |          | _        | j        j        | _        t          j                            |            d| _	        d S )Nr   T)
flagr	   r2   rI   r   port	threadingThreadr   daemon)r   r   hostr   s       r   r   zHTTPSServerThread.__init__z   s\    	!4)"/"K3K")+ + K+	!!$'''r   c                 2    d| j         j        d| j        dS )Nr   r   r   )r   r   rI   r   s    r   r   zHTTPSServerThread.__str__   s       N333T[[[AAr   c                 R    || _         t          j                            |            d S r   )rt   rv   rw   start)r   rt   s     r   r|   zHTTPSServerThread.start   s&    	t$$$$$r   c                     | j         r| j                                          	 | j                            d           | j                                         d S # | j                                         w xY w)Ng?)rt   setrI   serve_foreverserver_closer   s    r   runzHTTPSServerThread.run   sj    9 	IMMOOO	'K%%d+++K$$&&&&&DK$$&&&&s   A A2c                 8    | j                                          d S r   )rI   shutdownr   s    r   stopzHTTPSServerThread.stop   s    r   r   )	r   r.   r/   HOSTr   r   r|   r   r   r0   r   r   rr   rr   x   sq        %)    B B B% % % %' ' '    r   rr   )r   certfilery   r   c                J   |#t          j        t           j        j                  }|                    |           t          |||          t          j                    }                    |           |	                                 fd}| 
                    |           S )Nc                     t           j        rt          j                            d                                             t           j        rt          j                            d                                             d S )Nzstopping HTTPS server
zjoining HTTPS thread
)r   r%   r&   rH   r(   r   rA   )rI   s   r   cleanupz"make_https_server.<locals>.cleanup   sc    ? 	8J6777? 	7J5666r   )sslcreate_default_contextPurposeCLIENT_AUTHload_cert_chainrr   rv   Eventr|   wait
addCleanup)caser   r   ry   r   rt   r   rI   s          @r   make_https_serverr      s    ,S[-DEEH%%%wm<<F?D
LLIIKKK     	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?);r9   r&   r   r_   rv   urllib.parser6   http.serverr   r   r   r   testr   test.supportr   r:   dirname__file__rR   r   rA   CERTFILEr	   r2   rV   rw   rr   r   r   argparseArgumentParserparseradd_argumentintrd   
parse_argsrO   r%   r   r   getcwdr?   r   r   r   r   r   r   set_ecdh_curver   load_dh_paramsr   set_ciphersru   rI   printrN   r   r0   r   r   <module>r      s   				 



 



         6 6 6 6 6 6 6 6 6 6       & & & & & &	wx  7<<m,,    +   0&, &, &, &, &,7 &, &, &,RD D D D D0 D D DD    	(   < (,ht    * zOOO$X$CD D DF hS$G  I I I
ii,3D  F F F
i.A5+2L  N N N
\&E  G G G )#2  4 4 4
YS@  B B BDlGO )+0&RY[[(c()@AAGH%%% 0t///| -t|,,,| *DL)))["di-AAF| F7>>tDDEEE
M r   