
    kj                        d dl Z 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 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e	j*                  fdZ	 d+de
j.                  fdZ	 d,dej2                  fdZddddddddej6                  dz  dej8                  dz  dej:                  dz  deej:                  z  deej>                  z  dedej@                  fdZ!dddddddddej6                  dz  dej8                  dz  dejD                  dz  deejF                  z  deej>                  z  deejH                  z  dedej2                  fd Z% G d! d"ejL                        Z'd-de'fd#Z(dej6                  fd$Z)dej8                  fd%Z*d.d&e+dej>                  fd'Z,d/d(edejH                  fd)Z-de.ejL                     fd*Z/y)0    N)Opcode)
connection)dns)flow)http)tcp)udp)	websocket)ConnectionState)	ProxyMode)tdnsreq)tdnsresp)treq)trespTreturnc                 6   | du r
t               } |du r
t               }|du r.t        j                  ddd      t        j                  ddd      g}|du r
t	               }t        j
                  | |      }| j                  |_        ||_        ||_	        d|_
        |S NTs   hellog6AF   it's meg  @6A)tclient_conntserver_connr   
TCPMessageterrTCPFlowtimestamp_starttimestamp_createdmessageserrorliveclient_connserver_connr   errfs        ]/home/ubuntu/.cache/pipx/cdb5059130eadca/lib/python3.12/site-packages/mitmproxy/test/tflow.pyttcpflowr%           d"nd"n4NN4;7NN5*k:
 d{fK-A%55AAJAGAFH    c                 6   | du r
t               } |du r
t               }|du r.t        j                  ddd      t        j                  ddd      g}|du r
t	               }t        j
                  | |      }| j                  |_        ||_        ||_	        d|_
        |S r   )r   r   r	   
UDPMessager   UDPFlowr   r   r   r   r   r   s        r$   tudpflowr+   ,   r&   r'   c                     t        j                  t               t                     }t        j                  dddddddt        j
                  dd	d
d      dd dd      |_        t        j                  dddt        j
                  dd	d      dd dd      |_        t               |_
        ||j                  _        |||j                  _        n'|du rd|j                  _        nd|j                  _        d|_        |S )Nzexample.comP   s   GETs   https   example.coms   /wss   HTTP/1.1upgrader
   131234)r   r.   sec_websocket_versionsec_websocket_keyr'   p5m8q5m8)headerscontenttrailersr   timestamp_ende   s   Switching Protocols)r   r.   sec_websocket_acceptr5m8s5m8)reasonr5   r6   r7   r   r8   Ti    )r   HTTPFlowr   r   RequestHeadersrequestResponseresponse
twebsocketr
   close_reason
close_coder   )r   r"   rG   rF   r   s        r$   twebsocketflowrH   C   s     ==8D<<
 "&$	
 !#DL& MM% !$

 !DM  \DN".DNN$.!$;(,DNN% )-DNN%DIKr'   F)r    r!   reqrespr"   r   r    r!   rI   rJ   r"   r   c                    | +t               } t        j                  d      | _        d| _        |t               }d|_        |
t               }|du r
t               }|du r
t               }|du st        |t        j                        sJ |du st        |t        j                        sJ t        j                  | |      }|j                  xs t!        j                          |_        ||_        |xs d|_        |xs d|_        ||_        |S )zCreate a DNS flow for testing.Nr   r	   TF)r   r   parse
proxy_modetransport_protocolr   r   r   r   
isinstancer   
DNSMessager   ErrorDNSFlow	timestamptimer   rB   rD   r   r   )r    r!   rI   rJ   r"   r   r#   s          r$   tdnsflowrU   {   s     "n!*!7).&"n).&
{it|z
d{f5=JtS^^<<<%<:c4::666K-A--6499;AAIAJkTAGAFHr'   )r    r!   rI   rJ   r"   wsr   rV   c                    | 
t               } |
t               }|
t               }|du r
t               }|du r
t	               }|du r
t               }|du st        |t        j                        sJ |du st        |t        j                        sJ |du st        |t        j                        sJ t        j                  | |      }|j                  |_        ||_        |xs d|_        |xs d|_        |xs d|_        ||_        |S )zCreate a flow for testing.NTF)r   r   r   r   r   rE   rO   r   rC   r   rQ   r
   WebSocketDatar?   r   r   rB   rD   r   r   )r    r!   rI   rJ   r"   rV   r   r#   s           r$   tflowrY      s     "n"n
{ft|w
d{f	Tz\5=JtT]];;;%<:c4::666;*R)@)@AAAk;/A--AAIAJkTAG*AKAFHr'   c                       e Zd ZdZy)	DummyFlowz$A flow that is neither HTTP nor TCP.N)__name__
__module____qualname____doc__ r'   r$   r[   r[      s    .r'   r[   c                     | du r
t               } |du r
t               }|du r
t               }t        | |      }||_        d|_        |S )NT)r   r   r   r[   r   r   )r    r!   r"   r#   s       r$   
tdummyflowrb      sM    d"nd"n
d{f+{+AAGAFHr'   c            	         t        j                  di dt        t        j                               dddddd ddd	d
dddddddddddt
        j                  dd dddg dg dg dt        j                  d      } | S )Nidpeername)z	127.0.0.1   sockname) r   mitmcertr   r3   timestamp_tls_setupr4   r8   iv5m8sniaddresscipheralpns   http/1.1tls_versionTLSv1.2stater   tlsFcertificate_listalpn_offerscipher_listrM   regularr`   )	r   Clientstruuiduuid4r   OPENr   rL   cs    r$   r   r      s     	tzz|	"	 	 		
 "	 &	  	 	 	 	 	 ""	 	 	 	  !	" #	$ ??9-%	A( Hr'   c            	          t        j                  di dt        t        j                               ddddddddd	d
dddddddd dddd dt
        j                  dd dddg dg dd dg } | S )Nrd   rl   )rl   rf   re   )z192.168.0.1rf   rg   r   r;   timestamp_tcp_setupr<   rj   t5m8r8   u5m8rk   rn   ro   rp   viarq   r   rr   Frs   rt   rm   ru   r`   )r   Serverrx   ry   rz   r   CLOSEDr|   s    r$   r   r      s     	tzz|		 %	 !		
 "	 &	 &	  	 	 	 	 	 $$	 	 	  !	" #	$ %	& '	A* Hr'   r6   c                 2    t        j                  | d      }|S )Niw5m8)r   rQ   )r6   r"   s     r$   r   r   
  s    
**Wi
(CJr'   r   c                 V   t        j                         }| rvt        j                  t        j                  ddd      t        j                  t        j
                  ddd      t        j                  t        j
                  ddd      g|_        d	|_        d
|_        d|_	        d|_
        |S )NTs   hello binaryr<   s
   hello textr   Fr   r   zClose Reasonr>   )r
   rX   WebSocketMessager   BINARYTEXTr   rF   rG   closed_by_clientr8   )r   rV   s     r$   rE   rE     s    		 	 	"B&&v}}dOYW&&v{{D-S&&v{{E:yQ

 %BOBMB BIr'   c                      t        d      t        d      t        d      t               t        d      t               t        d      t        d      t        t	        g             t        d      g
S )NT)rJ   )r"   )rV   )	questions)rI   )rY   r%   r+   rU   r   r`   r'   r$   tflowsr      sY    4$
T
TdWr*+T r'   )TTTN)TNNrh   )TTN)r   )T)0rT   ry   wsproto.frame_protocolr   	mitmproxyr   r   r   r   r   r	   r
   mitmproxy.connectionr   mitmproxy.proxy.mode_specsr   mitmproxy.test.tutilsr   r   r   r   r   r%   r*   r+   r?   rH   rw   r   rP   boolrQ   rR   rU   r@   rC   rX   rY   Flowr[   rb   r   r   rx   r   rE   listr   r`   r'   r$   <module>r      s<     )         0 0 ) * & ' <@[[0 <@[[0 <>5	]]5t -1,0!%"'""""T)" ""T)" 
$		"
 
" 


	" " 	[["N -1,0#!&").$""T)$ ""T)$ 
		$
 
$ 


	$ 	y&&&$ $ 
]]$N/		 /	 j'' 0j'' 2# DJJ 
 )@)@ "TYY r'   