
    'h                        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      j-                  ej.                          G d d	ej0                        Z G d
 d      Zy)    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j	                  t        |                   y )NaddresszServerThread ({}))servergetattrsuper__init__formatrepr)selfr   r   	__class__s      h/var/www/html/scrapers/gsc/venv/lib/python3.12/site-packages/seleniumwire/thirdparty/mitmproxy/master.pyr   zServerThread.__init__   s9    $++y$7,33DMBC    c                 8    | j                   j                          y N)r   serve_foreverr   s    r   runzServerThread.run#   s    !!#r   )__name__
__module____qualname__r   r"   __classcell__)r   s   @r   r   r      s    D
$r   r   c                   t    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y)Masterz9
    The master handles mitmproxy's main event loop.
    c                    t        j                         | _        t        j                  | || j                        | _        |xs t        j                         | _        t        j                  |       | _
        t        j                  |       | _        d | _        g | _        t!        j"                  |       | _        | t$        _        | j                   t$        _        | j                  t$        _        y 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0A..t4"//5774=# HH $r   c                     | j                   S r   )r4   r!   s    r   r   zMaster.server?   s    ||r   c                 H    |j                  | j                         || _        y r   )set_channelr.   r4   )r   r   s     r   r   zMaster.serverC   s    4<<(r   c                     | j                   j                          | j                  r$t        | j                        j	                          y y r   )r,   clearr   r   startr!   s    r   r@   zMaster.startH   s5     ;;%++- r   c                 B   K   | j                   j                  d       y w)Nrunning)r3   triggerr!   s    r   rB   zMaster.runningM   s     I&s   c                    | j                          t        j                  | j                         |       d }	 |j	                          | j                  j                         s| j                          |j                         sot        j                  dk\  rt        j                  |      nt        j                  j                  |      }|D ]  }|j!                           |j#                          	 |rt%        |t        j&                         | j(                  j+                  d       y # t
        $ r t        j                         }Y w xY w# | j                  j                         s| j                          |j                         sot        j                  dk\  rt        j                  |      nt        j                  j                  |      }|D ]  }|j!                           |j#                          w w xY w)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   ss   

dlln48	 ##**,>>#363C3Cv3M))$/SZS_S_SiSijnSo AHHJ

#CJJ'F#  	)&&(C	) ##**,>>#363C3Cv3M))$/SZS_S_SiSijnSo AHHJ

	 $s$   D+ +EE EE B+G:c                    K   | j                   j                          | j                  r| j                  j                          t	        j
                         }|j                          y wr   )r,   setr   rQ   r   get_event_loopstop)r   rF   s     r   	_shutdownzMaster._shutdowng   sF     ;;KK  "%%'		s   A&A(c                    | j                   j                         s| j                   j                          t        j                  | j                         | j                  j                        }| j                  j                  j                         s:	 | j                  j                  j                  t        j                  |             yyy# t        $ r Y yw xY w)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     &&(  "224>>3C$,,J[J[\C <<$$//1LL%%889L9LS9QR 2 ) $ s   8C 	CCc                 8   | j                   j                  j                  d      rut        j                  | j                   j                        \  }}|j
                  \  |j                  _        |j                  _        |j                  |j                  _	        yy)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~   sn     <<''
3*::4<<;L;LMA}-:-B-B*AIINAIIN,33AII 4r   c                   K   t        |t        j                        r:| j                  |       d|j                  v r| j
                  j                  |       t        |t        j                        r| j
                  D cg c]!  }|j                  |j                  d   k(  s |# }}|rC|d   }||_
        | j
                  j                  |       | j                  |j                         nt        j                  dd      |_
        t        j                         |_        t        j                   |      D ])  \  }}| j"                  j%                  ||       d{    + yc c}w 7 w)zD
        Loads a flow and links websocket & handshake flows
        r
   websocket_handshaker   N)
isinstancer   HTTPFlowrv   metadatar5   appendr
   WebSocketFlowidhandshake_flowremover   
DummyReplyreplyr   iterater3   handle_lifecycle)r   rs   hfhfseos         r   	load_flowzMaster.load_flow   s&    
 a'%%a(ajj(""))!,a001 $ 2 2a"beeqzzJ_?`6`2aCaV#% ""))"-))!*:*:; $(==t#< '')!))!, 	5DAq++..q!444	5 b 5s%   A=E)?!E"!E"%B5E)E'E)N)r#   r$   r%   __doc__r   propertyr   setterr@   rB   r^   rc   rQ   rv   r    r   r   r(   r(   '   s[    -&   ]] .
'$. 	4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      sp      
  	 	 	 C = "   )  % %g&6&6 7$:(( $y5 y5r   