
    @OOf$                     2   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 G d
 dej                               Ze G d dej                               Ze G d dej                               Z G d de
j&                        Zy)    N)	dataclass)dns)flow)commands)events)layer)Context)expectc                   0    e Zd ZU dZej
                  ed<   y)DnsRequestHookz(
    A DNS query has been received.
    r   N__name__
__module____qualname____doc__r   DNSFlow__annotations__     [/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/mitmproxy/proxy/layers/dns.pyr   r           ++r   r   c                   0    e Zd ZU dZej
                  ed<   y)DnsResponseHookz2
    A DNS response has been received or set.
    r   Nr   r   r   r   r   r      r   r   r   c                   0    e Zd ZU dZej
                  ed<   y)DnsErrorHookz#
    A DNS error has occurred.
    r   Nr   r   r   r   r   r      r   r   r   c                   x    e Zd ZU dZeeej                  f   ed<   de	f fdZ
dej                  dej                  dej                  d   fd	Zdej                  dej                  dej                  d   fd
Zdej                  dedej                  d   fdZ eej(                        dej                  d   fd       Z eej,                  ej.                        dej0                  dej                  d   fd       Z eej,                  ej.                        dej                  d   fd       ZeZ xZS )DNSLayerz3
    Layer that handles resolving DNS queries.
    flowscontextc                 2    t         |   |       i | _        y N)super__init__r   )selfr   	__class__s     r   r#   zDNSLayer.__init__/   s    !
r   r   msgreturnNc              #   z  K   ||_         t        |       |j                  r%| j                  ||j                        E d {    y | j                  j
                  j                  s| j                  |d      E d {    y | j                  j
                  j                  sQt        j                  | j                  j
                        }|r$| j                  |t        |            E d {    y t        j                  | j                  j
                  |j                   j                         y 7 7 7 Jw)Nz;No hook has set a response and there is no upstream server.)requestr   responsehandle_responser   serveraddresshandle_error	connectedr   OpenConnectionstrSendDatapacked)r$   r   r&   errs       r   handle_requestzDNSLayer.handle_request3   s      T""==++D$--@@@$$,,((S   <<&&00$33DLL4G4GHH#00s3x@@@##DLL$7$79L9LMM A As8   A D;D5:D;=D7>A0D;.D9/AD;7D;9D;c              #      K   ||_         t        |       |j                   rAt        j                  | j                  j
                  |j                   j                         y y wr!   )r*   r   r   r2   r   clientr3   )r$   r   r&   s      r   r+   zDNSLayer.handle_responseG   sM      d##==##DLL$7$79M9MNN s   A#A%r4   c              #   Z   K   t        j                  |      |_        t        |       y wr!   )mflowErrorerrorr   )r$   r   r4   s      r   r.   zDNSLayer.handle_errorO   s!     [[%
4  s   )+c              #   F   K   | j                   | _        dE d {    y 7 wNr   )state_query_handle_eventr$   _s     r   state_startzDNSLayer.state_startS   s     !--s   !!eventc              #     K   t        |t        j                        sJ |j                  | j                  j
                  u }t        |t        j                        r|	 t        j                  j                  |j                        }	 | j                  |j                     }|r| j!                  ||      E d {    y | j#                  ||      E d {    y t        |t        j2                        r|r| j                  j                  n| j                  j
                  }|j4                  rt)        j,                  |       | j.                  | _        | j                  j7                         D ]	  }d|_         y t;        d|       # t        $ r] t        j                  | j                  j
                  | j                  j                  d      }|| j                  |j                  <   Y Nw xY w7 ;7 ## t$        j&                  $ rb}t)        j*                  |j                   d|        t)        j,                  |j                         | j.                  | _        Y d }~y d }~ww xY ww)NT)livez sent an invalid message: FzUnexpected event: )
isinstancer   ConnectionEvent
connectionr   r7   DataReceivedr   Messageunpackdatar   idKeyErrorr   r,   r5   r+   structr;   r   LogCloseConnection
state_doner?   ConnectionClosedr/   valuesrE   AssertionError)r$   rC   from_clientr&   r   e
other_conns          r   r>   zDNSLayer.state_queryX   s    %!7!7888&&$,,*=*==eV001?kk((4.::cff-D #224===#33D#>>>v6670;,,ATATJ##..z::!%D

))+ "!	" !#5eW!=>>'   .;;++T\\-@-@tD *.DJJsvv&	. >> << 5lle&6&6%77QRSQT#UVV..u/?/?@@%)__""5so   AI/)G7 F I/6G17I/G4B6I/A"G.*I/-G..I/4I/7I,
AI'"I/'I,,I/c              #   $   K   dE d {    y 7 wr=   r   r@   s     r   rR   zDNSLayer.state_done|   s     s   )r   r   r   r   dictintr   r   r   r	   r#   rJ   r   CommandGeneratorr5   r+   r1   r.   r
   r   StartrB   rI   rS   Eventr>   rR   r?   __classcell__)r%   s   @r   r   r   (   sp    S[[ !! NKKN&)kkN				%N(OKKO&)kkO				%O! !3 !5;Q;QRV;W ! FLL 6 6t <   F!8!89!? !?%2H2H2N !? :!?F F!8!89u55d;  :  Mr   r   )rO   dataclassesr   	mitmproxyr   r   r9   mitmproxy.proxyr   r   r   mitmproxy.proxy.contextr	   mitmproxy.proxy.utilsr
   	StartHookr   r   r   Layerr   r   r   r   <module>rg      s     !  # $ " ! + ( X''   h((   8%%  X u{{ X r   