
                        d    d dl mZ d dlZd dlZd dlZd dlmZmZmZm	Z	m
Z
mZ ddZ G d d      Zy)    )annotationsN)ASGIReceiveCallableASGISendCallableHTTPResponseBodyEventHTTPResponseStartEvent	HTTPScopeScopec                   K   t               }d}|sC |         d {   }|d   dk(  r|j                  |d          |d    }nt        |d         |sCt        |      S 7 Cw)NFtypezhttp.requestbody	more_body)	bytearrayextend
ValueErrorbytes)receiver   body_consumedevents       =platform/gsutil/third_party/urllib3/dummyserver/asgi_proxy.py
_read_bodyr      sl     ;DMi=N*KKf& %k 22MU6]++  ;  s   A!A7A!A!c                  N    e Zd ZdddZ	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 d	dZd
dZy)ProxyAppNc                    || _         y N)upstream_ca_certs)selfr   s     r   __init__zProxyApp.__init__   s
    !2    c                   K   |d   dk(  sJ |d   dv r| j                  |||       d {    y |d   dk(  r| j                  ||       d {    y t        |d         7 67 w)Nr   httpmethod)GETPOSTCONNECT)absolute_uriconnectr   )r   scoper   sends       r   __call__zProxyApp.__call__"   sv      V}&&&?o-##E7D9998_	),,ud+++U8_--	 :+s!   (A%A!"A%A#A%#A%c           	     
  K   t        j                  | j                  xs d      4 d {   }|j                  |d   |d   t	        |d         t        |       d {          d {   }d d d       d {    g }dD ]O  }j                  j                  |      }|s!|j                  |j                         |j                         f       Q |j                  dt        t        j                              j                         f        |t        d	|j                  |
             d {     |t        d|j                  d             d {    y 7 57 7 7 # 1 d {  7  sw Y   xY w7 J7 &w)NT)verifyr!   pathheaders)r!   urlr-   content)DatezCache-ControlServerzContent-TypeLocations   Content-Lengthhttp.response.startr   statusr-   http.response.bodyFr   r   r   )httpxAsyncClientr   requestlistr   r-   getappendencodestrlenr/   r   status_coder   )	r   r'   r   r(   clientclient_responser-   headervs	            r   r%   zProxyApp.absolute_uri-   sh     $$D,B,B,JdKKv$*NNX&MU9-.(11	 %3 % O LK 
F  ''++F3A<=
 	)3s?3J3J/K+L+S+S+UVW"*&22
 	
 	
 !)$,,
 	
 	
9 L
 2	 LKKK*	
	
s   )FE F/E*E#E*+E&,E*0F;E(<(F%BF4E?5%FFF#E*&E*(F*E<0E31E<8FFc                  K   	 	 	 	 	 	 dd}|d   j                  d      \  }}t        j                  |t        |             d {   4 d {   } |ddg d       d {     |ddd	d
       d {    t	        j
                  t        j                  |d   d         }t        j                  d	      4 d {   }|j                  |||       |j                  |||       d d d       d {    d d d       d {    y 7 7 7 7 7 S7 # 1 d {  7  sw Y   /xY w7 &# 1 d {  7  sw Y   y xY ww)Nc                   K   	 	 | j                  d       d {   }|sn|j                  |       d {    7|j	                          d {    y 7 :# t        j                  $ r Y 0w xY w7 97 "w)Ni   )receive_sometrioClosedResourceErrorsend_allaclose)readerwriterdatas      r   start_forwardz'ProxyApp.connect.<locals>.start_forwardX   sy      !'!4!4T!::D ood+++  --/!! ;//  ,!sS   A3A AA A3A/A3A1A3A A,)A3+A,,A31A3r,   :r3      r4   r6   r   Tr7   
extensions
_transport)strict_exception_groups)rM   trio.SocketStreamrN   rV   returnNone)	splitrI   open_tcp_streaminttypingcastSocketStreamopen_nursery
start_soon)	r   r'   r(   rP   hostportupstreamrB   nurserys	            r   r&   zProxyApp.connectW   s&    	"%	"/@	"	" 6]((-
d--dCI>>>>( 5QSTUUU 4cPTUVVV[[!2!2E,4G4UVF((FF'""=&(C""=(FC GF ?>>>UV GFFFF ?>>>s   AEDEDED/#D$D/7D8AD/ DD/'D+D/6D7D/;ED-EED/D/D/D/D*	D!D*	&D/-E/E5D86E=Er   )r   z
str | None)r'   r	   r   r   r(   r   rW   rX   )r'   r   r   r   r(   r   rW   rX   )r'   r   r(   r   rW   rX   )__name__
__module____qualname__r   r)   r%   r&    r   r   r   r      s^    3	.	.%8	.@P	.		.(
(
 %(
 	(

 
(
TDr   r   )r   r   rW   r   )
__future__r   r\   r8   rI   hypercorn.typingr   r   r   r   r   r	   r   r   rh   r   r   <module>rk      s.    "    
PD PDr   