
                         n    S SK r S SKrS SKrS SKrSS jr " S S\R
                  5      r " S S\5      rg)    Nc                     SnSn [         R                   " U // / U5      S   nU(       d   U$ U R                  U5      nU(       d   U$ X5-  nMH  )Ni       r   )selectrecv)socktimeoutchunkscontentmore_to_readnew_contents         ?platform/gsutil/third_party/requests/tests/testserver/server.pyconsume_socket_contentr      sc    FG
}}dVRW=a@ N ii' N 	 r   c                      ^  \ rS rSrSrSr     SU 4S jjr\SS j5       r\S 5       r	S r
S rS	 rS
 rS rS rS rSrU =r$ )Server   z#Dummy server using for unit testing   c                    > [         TU ]  5         U=(       d    [        U l        / U l        X l        X0l        X@l        XPl        [        R                  " 5       U l        [        R                  " 5       U l        g N)super__init__r   handlerhandler_resultshostportrequests_to_handlewait_to_close_event	threadingEventready_event
stop_event)selfr   r   r   r   r   	__class__s         r   r   Server.__init__   sX     	8"8!		"4#6 $??,#//+r   c                 ,   ^^ UU4S jn[        U40 UD6$ )Nc                 \   > [        U TS9nU R                  TR                  S5      5        U$ )N)r   zutf-8)r   sendencode)r   request_contentrequest_timeouttexts     r   text_response_handler:Server.text_response_server.<locals>.text_response_handler5   s*    4T?SOIIdkk'*+""r   )r   )clsr*   r)   kwargsr+   s    ``  r   text_response_serverServer.text_response_server3   s    	# +6v66r   c                 (    U R                   "  S0 UD6$ )N)z&HTTP/1.1 200 OK
Content-Length: 0

)r/   )r-   r.   s     r   basic_response_serverServer.basic_response_server=   s     ''?
CI
 	
r   c                 N    U R                  5       U l        U R                  R                  5       S   U l        U R                  R                  5         U R                  5         U R                  (       a%  U R                  R                  U R                  5        U R                  R                  5         U R                  5         U R                  R                  5         g ! U R                  R                  5         U R                  5         U R                  R                  5         f = f)N   )_create_socket_and_bindserver_sockgetsocknamer   r   set_handle_requestsr   waitWAIT_EVENT_TIMEOUT _close_server_sock_ignore_errorsr    r!   s    r   run
Server.runC   s    	"#;;=D((446q9DI  "!!#''((--d.E.EF  "113OO!   "113OO!s   BC AD$c                     [         R                   " 5       nUR                  U R                  U R                  45        UR	                  5         U$ r   )socketbindr   r   listenr!   r   s     r   r6   Server._create_socket_and_bindR   s4    }}		499dii()r   c                 Z     U R                   R                  5         g ! [         a     g f = fr   )r7   closeOSErrorr>   s    r   r=   'Server._close_server_sock_ignore_errorsX   s+    	""$ 		s    
**c                     [        U R                  5       HX  nU R                  5       nU(       d    g U R                  U5      nU R                  R                  U5        UR                  5         MZ     g r   )ranger   _accept_connectionr   r   appendrH   )r!   _r   handler_results       r   r:   Server._handle_requests^   sV    t../A**,D!\\$/N  ''7JJL 0r   c                      [         R                   " U R                  // / U R                  5      u  n  nU(       d  g U R                  R                  5       S   $ ! [         a     g f = f)Nr   )r   r7   r<   acceptrI   )r!   readyrO   s      r   rM   Server._accept_connectioni   sg    		 --!!"BD,C,CKE1a ##**,Q// 		s   9A A 
A&%A&c                     U R                  5         U R                  R                  U R                  5      (       d  [	        S5      eU R
                  U R                  4$ )Nz'Timeout waiting for server to be ready.)startr   r;   r<   RuntimeErrorr   r   r>   s    r   	__enter__Server.__enter__u   sG    

$$T%<%<==HIIyy$))##r   c                     Uc&  U R                   R                  U R                  5        O+U R                  (       a  U R                  R	                  5         U R                  5         U R                  5         g)NF)r    r;   r<   r   r9   r=   join)r!   exc_type	exc_value	tracebacks       r   __exit__Server.__exit__{   sW    OO  !8!89'' ((,,. 	--/		r   )	r   r   r   r   r   r   r7   r    r   )N	localhostr   r5   Ng      ?)__name__
__module____qualname____firstlineno____doc__r<   r   classmethodr/   r2   r?   r6   r=   r:   rM   rY   r`   __static_attributes____classcell__r"   s   @r   r   r      sr    -  ,* 7 7 
 

"	
$ r   r   c            
       F   ^  \ rS rSrSSSSSSSSSS.	U 4S jjrS	 rS
rU =r$ )	TLSServer   Nrb   r   r5   F)	r   r   r   r   r   
cert_chainkeyfile
mutual_tlscacertc       	           > [         T
U ]  UUUUUS9  X`l        Xpl        [        R
                  " [        R                  5      U l        U R                  R                  U R                  U R                  S9  Xl	        Xl
        U(       aE  [        R                  U R                  l        U R                  R                  U R                  5        g g )N)r   r   r   r   r   )rq   )r   r   rp   rq   ssl
SSLContextPROTOCOL_TLS_SERVERssl_contextload_cert_chainrr   rs   CERT_OPTIONALverify_modeload_verify_locations)r!   r   r   r   r   r   rp   rq   rr   rs   r"   s             r   r   TLSServer.__init__   s     	1 3 	 	
 %>>#*A*AB(($,,(O$ ,/+<+<D(224;;?	 r   c                     [         R                   " 5       nU R                  R                  USS9nUR                  U R                  U R
                  45        UR                  5         U$ )NT)server_side)rB   rx   wrap_socketrC   r   r   rD   rE   s     r   r6   !TLSServer._create_socket_and_bind   sO    }}++Dd+C		499dii()r   )rs   rp   rq   rr   rx   )rd   re   rf   rg   r   r6   rj   rk   rl   s   @r   rn   rn      s7      @ @@ r   rn   rc   )r   rB   ru   r   r   Threadr   rn    r   r   <module>r      s7      
 $nY nb& &r   