
    hg                     
   d dl Z d dl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mZmZ d dlmZ d dlmZ ddlmZ  ej        d                              ej                    G d d	ej                  Z G d
 d          ZdS )    N)addonmanagercommand
controllereventsequencehttplogoptions	websocket)
basethread)server_spec   )ctxasyncioc                   $     e Zd Z fdZd Z xZS )ServerThreadc                     || _         t          | j         dd           }t                                          d                    t          |                               d S )NaddresszServerThread ({}))servergetattrsuper__init__formatrepr)selfr   r   	__class__s      a/var/www/fb-scrape/myenv/lib/python3.11/site-packages/seleniumwire/thirdparty/mitmproxy/master.pyr   zServerThread.__init__   sP    $+y$77,33DMMBBCCCCC    c                 8    | j                                          d S N)r   serve_foreverr   s    r   runzServerThread.run#   s    !!#####r   )__name__
__module____qualname__r   r"   __classcell__)r   s   @r   r   r      sL        D D D D D
$ $ $ $ $ $ $r   r   c                   x    e Zd ZdZd Zed             Zej        d             Zd Zd Z	d Z
d Zd	 Zd
 Zd ZdS )Masterz9
    The master handles mitmproxy's main event loop.
    c                    t          j                    | _        t          j        | || j                  | _        |pt          j                    | _        t          j	        |           | _
        t          j        |           | _        d | _        g | _        t!          j        |           | _        | t$          _        | j        t$          _        | j        t$          _        d S r   )	threadingEventshould_exitr   Channelchannelr	   Optionsr   CommandManagercommandsr   AddonManageraddons_serverwaiting_flowsr   Logmitmproxy_ctxmaster)r   
event_loopoptss      r   r   zMaster.__init__,   s    $?,,!)
 
 )-(A0A0A.t44"/5574==# H $r   c                     | j         S r   )r4   r!   s    r   r   zMaster.server?   s
    |r   c                 H    |                     | j                   || _        d S r   )set_channelr.   r4   )r   r   s     r   r   zMaster.serverC   s#    4<(((r   c                     | j                                          | j        r(t          | j                                                   d S d S r   )r,   clearr   r   startr!   s    r   r@   zMaster.startH   sM       ; 	.%%++-----	. 	.r   c                 >   K   | j                             d           d S )Nrunning)r3   triggerr!   s    r   rB   zMaster.runningM   s"      I&&&&&r   c                 4   |                                   t          j        |                                 |           d }	 |                                 n## t
          $ r t          j                    }Y nw xY w| j        	                                s| 
                                 |                                spt          j        dk    rt          j        |          nt          j                            |          }|D ]}|                                 |                                 n# | j        	                                s| 
                                 |                                sqt          j        dk    rt          j        |          nt          j                            |          }|D ]}|                                 |                                 w w xY w|rt%          |t          j                   | j                            d           d S )Nloop)      )filedone)r@   r   ensure_futurerB   run_forever	Exception	traceback
format_excr,   is_setshutdown	is_closedsysversion_info	all_tasksTaskcancelcloseprintstderrr3   rC   )r   rF   exctasksps        r   run_loopzMaster.run_loopP   s   

dllnn48888	 	) 	) 	)&((CCC	) #**,,  >>## 363Cv3M3M)$///SZS_SiSijnSoSo  AHHJJJJ

 #**,,  >>## 363Cv3M3M)$///SZS_SiSijnSoSo  AHHJJJJ

	  	(#CJ''''F#####s+    A D* A52D* 4A55D* *B4Gc                    K   | j                                          | j        r| j                                         t	          j                    }|                                 d S r   )r,   setr   rQ   r   get_event_loopstop)r   rF   s     r   	_shutdownzMaster._shutdowng   sX      ; 	#K  """%''		r   c                    | j                                         s| j                                          t          j        |                                 | j        j                  }| j        j                                        sG	 | j        j        	                    t          j
        |                     dS # t          $ r Y dS w xY wdS dS )zF
        Shut down the mitmproxy. This method is thread-safe.
        rE   N)r,   rP   r`   r   run_coroutine_threadsaferc   r.   rF   
is_runningrun_until_completewrap_futureRuntimeError)r   rets     r   rQ   zMaster.shutdownn   s     &&(( 
	  """24>>3C3C$,J[\\\C <$//11 L%889LS9Q9QRRRRR#   DD
	 
	 s   1B7 7
CCc                     | j         j                            d          rRt          j        | j         j                  \  }}|j        \  |j        _        |j        _        |j	        |j        _	        dS dS )z
        When we load flows in reverse mitmproxy mode, we adjust the target host to
        the reverse mitmproxy destination for all flows we load. This makes it very
        easy to replay saved flows against a different host.
        zreverse:N)
r	   mode
startswithr   parse_with_moder   requesthostportscheme)r   f_upstream_specs       r   _change_reverse_hostzMaster._change_reverse_host~   sk     <''
33 	4*:4<;LMMA}-:-B*AINAIN,3AI	4 	4r   c                 p  K   t          t          j                  r8|                                dj        v r| j                                       t          t          j                  rsfd| j        D             }|rD|d         }|_	        | j        
                    |           |                     j	                   nt          j        dd          _	        t          j                    _        t          j                  D ]&\  }}| j                            ||           d{V  'dS )zD
        Loads a flow and links websocket & handshake flows
        r
   c                 @    g | ]}|j         j        d          k    |S )websocket_handshake)idmetadata).0hfrs   s     r   
<listcomp>z$Master.load_flow.<locals>.<listcomp>   s-    aaa"beqzJ_?`6`6`26`6`6`r   r   N)
isinstancer   HTTPFlowrv   r{   r5   appendr
   WebSocketFlowhandshake_flowremover   
DummyReplyreplyr   iterater3   handle_lifecycle)r   rs   hfsr}   eos    `    r   	load_flowzMaster.load_flow   sK     
 a'' 	-%%a(((aj(("))!,,,a011 		=aaaa 2aaaC =V#% "))"---))!*:;;;; $(=t#<#< '))!)!,, 	5 	5DAq+..q!4444444444	5 	5r   N)r#   r$   r%   __doc__r   propertyr   setterr@   rB   r^   rc   rQ   rv   r    r   r   r(   r(   '   s         - - -&   X ]  ]. . .
' ' '$ $ $.     	4 	4 	45 5 5 5 5r   r(   )r   loggingrS   r*   rN   !seleniumwire.thirdparty.mitmproxyr   r   r   r   r   r   r	   r
   +seleniumwire.thirdparty.mitmproxy.coretypesr   %seleniumwire.thirdparty.mitmproxy.netr    r   r7   	getLoggersetLevelCRITICAL
BaseThreadr   r(   r   r   r   <module>r      sd     



        	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 C B B B B B = = = = = = " " " " " "  )   % %g&6 7 7 7$ $ $ $ $:( $ $ $y5 y5 y5 y5 y5 y5 y5 y5 y5 y5r   