
    kj                         d dl Z d dlZ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  ej                   e      Z G d
 d      Z G d de      Zy)    N)BinaryIO)Optional)command)ctx)
exceptions)
flowfilter)io)asyncio_utilsc                       e Zd ZdZd Zd Zd ZdedefdZ	de
defd	Zd
e
ddfdZd Z ej                  d      defd       Zy)ReadFilez=
    An addon that handles reading from file on startup.
    c                      d | _         d | _        y N)filter
_read_taskselfs    b/home/ubuntu/.cache/pipx/cdb5059130eadca/lib/python3.12/site-packages/mitmproxy/addons/readfile.py__init__zReadFile.__init__   s    /3    c                     |j                  dt        t           d d       |j                  dt        t           d d       y )NrfilezRead flows from file.readfile_filterzRead only matching flows.)
add_optionr   str)r   loaders     r   loadzReadFile.load   s7    '8C=$8OPx}d4O	
r   c                    d|v rVt         j                  j                  r4	 t        j                  t         j                  j                        | _        y d | _        y y # t        $ r$}t        j                  t        |            |d }~ww xY w)Nr   )
r   optionsr   r   parser   
ValueErrorr   OptionsErrorr   )r   updatedes      r   	configurezReadFile.configure!   sr    '{{**A","2"23;;3N3N"ODK # ( " A$11#a&9q@As   2A 	B	%BB	foreturnc                   K   d}t        j                  |      }	 |j                         D ]L  }| j                  r| j                  |      s!t        j
                  j                  |       d {    |dz  }N 	 |S 7 # t        t        j                  f$ rT}|rt        j                  d|z         nt        j                  d       t        j                  t        |            |d }~ww xY ww)Nr      z&Flow file corrupted - loaded %i flows.zFlow file corrupted.)r	   
FlowReaderstreamr   r   master	load_flowOSErrorr   FlowReadExceptionloggingwarningerrorr   )r   r%   cntfreaderflowr#   s         r   
load_flowszReadFile.load_flows+   s     --#	( ;;t{{4'8jj**4000q	 J 1556 	> H3 NO45..s1v6A=	>s<   C/AA? .A=/A? ;C/=A? ?C,AC''C,,C/pathc                 T  K   t         j                  j                  |      }	 t        |d      5 }| j	                  |       d {   cd d d        S 7 # 1 sw Y   y xY w# t
        $ r<}t        j                  d|        t        j                  t        |            |d }~ww xY ww)NrbzCannot load flows: )osr6   
expanduseropenr5   r-   r/   r1   r   r.   r   )r   r6   fr#   s       r   load_flows_from_pathzReadFile.load_flows_from_path=   s     ww!!$'	>dD! 0Q!__Q//0 0/0 0 	>MM/s34..s1v6A=	>s]    B(A  AAA	A  B(AAA  B(A   	B%)7B  B%%B(r   Nc                    K   	 | j                  |       d {    y 7 # t        j                  $ r=}t        j	                  dt
        j                  j                   d|        Y d }~y d }~ww xY ww)NzFailed to read z: )r=   r   r.   logger	exceptionr   r   r   )r   r   r#   s      r   doreadzReadFile.doreadF   s`     	I++E222++ 	Is{{/@/@.AA3GHH	Is6   A3    A3  A03A+&A3+A00A3c                     t         j                  j                  rEt        j                  | j                  t         j                  j                        dd      | _        y y )NreadfileF)namekeep_ref)r   r   r   r
   create_taskrA   r   r   s    r   runningzReadFile.runningL   sB    ;;+77CKK--.DO r   zreadfile.readingc                 f    t        | j                  xr | j                  j                                S r   )boolr   doner   s    r   readingzReadFile.readingT   s&    DOOBDOO,@,@,B(BCCr   )__name__
__module____qualname____doc__r   r   r$   r   intr5   r   r=   rA   rG   r   rI   rK    r   r   r   r      s    4
#8  $>s >s >I# I$ I W__'(D D )Dr   r   c                   ,     e Zd ZdZdedef fdZ xZS )ReadFileStdinz6Support the special case of "-" for reading from stdinr6   r&   c                    K   |dk(  r1| j                  t        j                  j                         d {   S t        |   |       d {   S 7 7 w)N-)r5   sysstdinbuffersuperr=   )r   r6   	__class__s     r   r=   z"ReadFileStdin.load_flows_from_path\   sH     3; )9)9:::5d;;; ;;s!   2AAAAAA)rL   rM   rN   rO   r   rP   r=   __classcell__)rZ   s   @r   rS   rS   Y   s    @<s <s < <r   rS   )asyncior/   os.pathr9   rV   typingr   r   	mitmproxyr   r   r   r   r	   mitmproxy.utilsr
   	getLoggerrL   r?   r   rS   rQ   r   r   <module>rb      sV       
          )			8	$DD DDN	<H 	<r   