
    @OOf                          d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dlm
Z
 d dlmZ d d	lmZ d d
lmZ  G d de      Z G d dej                        Z G d d      Zy)    N)auto)Enum)Union)
connection)commands)context)events)layer)Layerc                   D    e Zd Z e       Z e       Z e       Z e       Zy)TunnelStateN)__name__
__module____qualname__r   INACTIVEESTABLISHINGOPENCLOSED     W/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/mitmproxy/proxy/tunnel.pyr   r      s    vH6L6DVFr   r   c                   n    e Zd ZU dZej
                  ed<   ej                  ed<   	 ej                  ed<   	 e	j                  Ze	ed<   dZej                  dz  ed<   eej"                     ed<   	 d	ej&                  dej                  dej                  f fd
Zd Zdej"                  dej,                  d   fdZdedz  dej,                  d   fdZdej4                  dej,                  d   fdZdej"                  dej,                  d   fdZdej,                  d   fdZdedej,                  ee edz  f      fdZ!dedej,                  d   fdZ"dedej,                  d   fdZ#dej,                  d   fdZ$dedej,                  d   fdZ%dejL                  dej,                  d   fdZ' xZ(S )TunnelLayerz
    A specialized layer that simplifies the implementation of tunneling protocols such as SOCKS, upstream HTTP proxies,
    or TLS.
    child_layertunnel_connectionconntunnel_stateNcommand_to_reply_to_event_queuer   c                     t         |   |       || _        || _        t	        j
                  | j                        | _        g | _        y N)	super__init__r   r   r
   	NextLayerr   r   r   )selfr   r   r   	__class__s       r   r#   zTunnelLayer.__init__(   s>     	!!2	 ??4<<8r   c                 |    t        |       j                   d| j                  j                  j	                          dS )N())typer   r   namelowerr%   s    r   __repr__zTunnelLayer.__repr__4   s6    t*%%&a(9(9(>(>(D(D(F'GqIIr   eventreturnc              #     K   t        |t        j                        rw| j                  j                  t
        j                  j                  ur-t        j                  | _
        | j                         E d {    | j                  |      E d {    y t        |t        j                        r|j
                  | j                  k(  rt        |t        j                        rm| j                  t        j                  u r,| j                  |j                         E d {   \  }}|re| j"                  | j                  k7  rLt
        j                  j$                  | j"                  _        t'        j&                         | j"                  _        |r~| j"                  | j                  k7  rLt
        j                  j                  | j"                  _        t'        j&                         | j"                  _        | j+                  |      E d {    |s|rv| j-                  |      E d {    y | j/                  |j                         E d {    y t        |t        j0                        r| j"                  | j                  k7  r[| j"                  xj                  t
        j                  j2                   z  c_        t'        j&                         | j"                  _        | j                  t        j$                  u r| j7                         E d {    nP| j                  t        j                  u r4d}| j+                  |      E d {    | j-                  |      E d {    t        j                  | _
        y t9        d|       y | j                  |      E d {    y 7 /7 7 7 7 7 h7 7 p7 Y7 w)Nzconnection closedzUnexpected event: )
isinstancer	   Startr   stater   ConnectionStater   r   r   r   start_handshakeevent_to_childConnectionEventDataReceivedreceive_handshake_datadatar   r   timetimestamp_starton_handshake_error_handshake_finishedreceive_dataConnectionClosedCAN_READtimestamp_endreceive_closeAssertionError)r%   r/   doneerrs       r   _handle_eventzTunnelLayer._handle_event7   s    eV\\*%%++:3M3M3T3TT %0$<$<!//111**5111uf445  D$:$::%!4!45$$(@(@@+/+F+Fuzz+R RID#99(>(>>.8.H.H.M.MDIIO8<		DII599(>(>>.8.H.H.O.ODIIO8<		DII5#'#:#:3#???s#'#;#;C#@@@#00<<<E6#:#:;99 6 66IIOO
(B(B(K(K'KKO.2iikDII+$$(8(88#11333&&+*B*BB-C#66s;;;#77<<<$/$6$6!$'9%%ABB!  #$ **5111I 21 !S @@< 4 <<
 2s   A3N>5N$6N>N'BN>N* C)N>	N-
N>'N0(#N>N3CN>N67N>N8N> N:!=N>N<N>'N>*N>-N>0N>3N>6N>8N>:N><N>rG   c              #     K   |rt         j                  | _        nt         j                  | _        | j                  r?| j                  t        j                  | j                  |            E d {    d | _        y | j                  D ]  }| j                  |      E d {     | j                  j                          y 7 Q7 #wr!   )
r   r   r   r   r   r7   r	   OpenConnectionCompletedr   clear)r%   rG   evts      r   r?   zTunnelLayer._handshake_finishedd   s      + 2 2D + 0 0D##**..t/G/GM   (,D$(( 4..s3334##% 4s$   A,C.C //CC"CCcommandc              #     K   t        |t        j                        r|j                  | j                  k(  rt        |t        j
                        r$| j                  |j                        E d {    y t        |t        j                        r|| j                  | j                  k7  rI| j                  xj                  t        j                  j                   z  c_
        | j                  |_        | j                  |      E d {    y t        |t        j                        r|| _        t         j"                  | _        t        j                  | j                        }|rC| j'                  t)        j*                  ||            E d {    t         j,                  | _        y | j/                         E d {    y t1        d|       | y 7 d7 7 K7 w)NzUnexpected command: )r2   r   ConnectionCommandr   r   SendData	send_datar;   CloseConnectionr   r4   r5   	CAN_WRITE
send_closeOpenConnectionr   r   r   r   r7   r	   rJ   r   r6   rE   )r%   rM   rG   s      r   _handle_commandzTunnelLayer._handle_commands   sn     w : :;""dii/'8#4#45>>',,777GX%=%=>99 6 66IIOO
(B(B(L(L'LLO)-)?)?G&??7333GX%<%<=+2($/$<$<!$33D4J4JKK#2266wD    )4(:(:D%#33555$';G9%EFFM+ 8
 4
 6sJ   A.G0G1BGGBGG-G;G<GGGGc              #   
  K   | j                   t        j                  u r(| j                  s| j                  j                  |       y | j                  j                  |      D ]  }| j                  |      E d {     y 7 wr!   )	r   r   r   r   r   appendr   handle_eventrV   )r%   r/   rM   s      r   r7   zTunnelLayer.event_to_child   sq     !9!99,,$$U+''44U; 	5G++G444	54s   A7B9B:Bc              #   ~   K   | j                  t        j                  | j                  d            E d {    y 7 w)Nr   )rH   r	   r9   r   r-   s    r   r6   zTunnelLayer.start_handshake   s.     %%f&9&9$:P:PRU&VWWW   3=;=r;   c              #   $   K   dE d{    y7 w)zreturns a (done, err) tupler   N)TNr   r%   r;   s     r   r:   z"TunnelLayer.receive_handshake_data   s       	s   c              #   N   K   t        j                  | j                         yw)z`Called if either receive_handshake_data returns an error or we receive a close during handshake.N)r   rR   r   )r%   rG   s     r   r>   zTunnelLayer.on_handshake_error   s     &&t'='=>>s   #%c              #   ~   K   | j                  t        j                  | j                  |            E d {    y 7 wr!   )r7   r	   r9   r   r]   s     r   r@   zTunnelLayer.receive_data   s+     &&v':':499d'KLLLr[   c              #   |   K   | j                  t        j                  | j                              E d {    y 7 wr!   )r7   r	   rA   r   r-   s    r   rD   zTunnelLayer.receive_close   s)     &&v'>'>tyy'IJJJs   2<:<c              #   P   K   t        j                  | j                  |       y wr!   )r   rP   r   r]   s     r   rQ   zTunnelLayer.send_data   s      6 6==s   $&c              #      K   | y wr!   r   )r%   rM   s     r   rT   zTunnelLayer.send_close   s      s   ))r   r   r   __doc__r
   r   __annotations__r   
Connectionr   r   r   r   r   rU   listr	   Eventr   Contextr#   r.   CommandGeneratorrH   strr?   CommandrV   r7   r6   bytestupleboolr:   r>   r@   rD   rQ   rR   rT   __classcell__)r&   s   @r   r   r      s   
 !,,,G


8 + 4 4L+4:>0047>v||$$


 &00
 ##	
J+26<< +2E4J4J44P +2Z&sTz &e6L6LT6R &''				%>5FLL 5U5K5KD5Q 5X!7!7!= X			dC$J&6 7	8?c ?e.D.DT.J ?M M5+A+A$+G MKu55d; K>e >(>(>t(D >//				%r   r   c                   >    e Zd ZddZdedefdZdeed f   dd fdZy)	
LayerStackr0   Nc                     g | _         y r!   )_stackr-   s    r   r#   zLayerStack.__init__   s	    #%r   itemc                 8    | j                   j                  |      S r!   )rs   __getitem__)r%   rt   s     r   rv   zLayerStack.__getitem__   s    {{&&t,,r   otherc                 0   t        |t              r=| j                  r|| j                  d   _        | j                  j	                  |       | S | j                  r|d   | j                  d   _        | j                  j                  |j                         | S )Nr   )r2   r   rs   r   rX   extend)r%   rw   s     r   __truediv__zLayerStack.__truediv__   st    eU#{{.3B+KKu%
  {{.3AhB+KKu||,r   )r0   N)	r   r   r   r#   intr   rv   r   r{   r   r   r   rq   rq      s7    &- - -	ul':!; 	 	r   rq   )r<   enumr   r   typingr   	mitmproxyr   mitmproxy.proxyr   r   r	   r
   mitmproxy.proxy.layerr   r   r   rq   r   r   r   <module>r      sL          $ # " ! '$ a%++ aH r   