
    @OOfa                         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  ej&                  e      Z G d d      Zy)    N   )ctx)termlog)ReverseMode)asyncio_utils)addonmanager)command)eventsequence)hooks)http)log)optionsc                       e Zd ZU dZej
                  ed<   dZej                  dz  ed<   	 	 dde
j                  dej
                  dz  defdZddZd	 Zdd
ZddZddZd Zy)Masterz9
    The master handles mitmproxy's main event loop.
    
event_loopN_termlog_addonoptswith_termlogc                    |xs t        j                         | _         t        j                  |       | _        t        j                  |       | _        |r>t        j                         | _
        | j                  j                  | j                         t        j                  |       | _        t        j                  |       | _        | j                  j!                          |xs t#        j$                         | _        t#        j(                         | _        | t,        _        | j                  t,        _        | j                   t,        _         y N)r   Optionsr	   CommandManagercommandsr   AddonManageraddonsr   TermLogr   addr   LogLegacyLogEvents_legacy_log_eventsinstallasyncioget_running_loopr   Eventshould_exitmitmproxy_ctxmaster)selfr   r   r   s       Q/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/mitmproxy/master.py__init__zMaster.__init__   s     )-(A0A..t4"//5")//"3DKKOOD//0774="%"5"5d";'')
 %B(@(@(B"==?# HH $    c           	        K   t        j                  | j                        5  t        j                         5  | j                  j                          | j                  j                  d      x}r|j                          d {    | j                  j                  d      x}rt        j                  t        j                  |j                               t        j                  | j                  j                               gt        j                         d {    | j                  j                         r	 d d d        d d d        y | j                  j                  d      x}r|j                          d {    	 | j                          d {    | j                  j                  d      x}r(|j                          d {    |j!                          | j                  j                          d {    | j#                          d {    	 d d d        d d d        y 7 7 7 7 7 j7 :7 $# | j#                          d {  7   w xY w# 1 sw Y   @xY w# 1 sw Y   y xY ww)N
errorcheckproxyserver)return_when)r   install_exception_handler_asyncio_exception_handlerset_eager_task_factoryr%   clearr   getshutdown_if_erroredr"   waitcreate_tasksetup_serversFIRST_COMPLETEDis_setrunningfinishdone)r(   ecpss      r)   runz
Master.run6   s    33D4S4ST#	"002#	" ""$ [[__\22r2,,...[[__]33r3ll++B,<,<,>?++D,<,<,A,A,CD !( 7 7   ##**,'#	" #	" #	"* 662600222"lln$$662600222IIK&&++--- iik!!G#	" #	" #	" / 3 % 3 . "diik!!G#	" #	" #	" #	"s    I0I$AIH*BIH-I:I$	I00I;H0<IH:H24H:	H4
1H:;H6<H: IH8II$!	I0*I-I0I2H:4H:6H:8I:IIIII!	I$$I-)I0c                 b    | j                   j                  | j                  j                         y)zB
        Shut down the proxy. This method is thread-safe.
        N)r   call_soon_threadsafer%   setr(   s    r)   shutdownzMaster.shutdown\   s"    
 	,,T-=-=-A-ABr+   c                 z   K   | j                   j                  t        j                                d {    y 7 wr   )r   trigger_eventr   RunningHookrD   s    r)   r;   zMaster.runningc   s'     kk''(9(9(;<<<s   1;9;c                    K   | j                   j                  t        j                                d {    | j                  j                          | j                  | j                  j                          y y 7 Fwr   )r   rG   r   DoneHookr    	uninstallr   rD   s    r)   r=   zMaster.donef   s_     kk''(8999))+*))+ + 	:s   1A<A:AA<c                     	 |d   }t        |t              r|j                  dk(  ry t        j	                  dt        |      ||j                  f       y # t        $ r t        j	                  d|        Y y w xY w)N	exceptioni6'  zUnhandled error in task.)exc_infozUnhandled asyncio error: )
isinstanceOSErrorerrnologgererrortype__traceback__KeyError)r(   loopcontextexcs       r)   r1   z!Master._asyncio_exception_handlerl   sz    
	$[1C #w'CII,>LL*s)S#*;*;<    	@LL4WI>?	@s   A !A98A9c                 ^  K   t        |t        j                        rt        | j                  j
                        dk(  r| j                  j
                  d   j                  d      rt        j                  | j                  j
                  d         }t        |t              sJ |j                  ^|j                  _        |j                  _        }|j                  |j                  _        t        j                  |      D ]%  }| j                   j#                  |       d{    ' y7 w)z
        Loads a flow
        r   r   zreverse:N)rO   r   HTTPFlowlenr   mode
startswithr   parseaddressrequesthostportschemer
   iterater   handle_lifecycle)r(   fr]   _es        r)   	load_flowzMaster.load_flowy   s      q$--(DLL%%&!+!!!$//
; $$T\\%6%6q%9:DdK00015.AIINAIINQ#{{AII&&q) 	2A++..q111	21s   D!D-#D+$D-)NF)returnN)__name__
__module____qualname____doc__r"   AbstractEventLoop__annotations__r   r   r   r   r   boolr*   r@   rE   r;   r=   r1   rj    r+   r)   r   r      s     )))-1NGOOd*1
 8<"	-oo- --4- 	-6$"LC=,2r+   r   )r"   logging r   r&   r   r   proxy.mode_specsr   utilsr   	mitmproxyr   r	   r
   r   r   r   r   	getLoggerrl   rR   r   rs   r+   r)   <module>rz      sJ      "  )   "  #    			8	$z2 z2r+   