
    @OOf                     ~   d dl mZ d dlmZ d dlmZ d dlm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  ed       G d d             Z ed       G d d             Ze G d d             Z G d dej4                        Zdeeez     deej:                     fdZy)    )defaultdict)Iterator)	dataclass)fieldN)Buffer)BufferReadError)parse_settings)Setting   )
is_h3_alpn   )base)ViewHexDump)flow)tcpT)frozenc                   ,    e Zd ZU dZeed<   eed<   d Zy)Framez"Representation of an HTTP/3 frame.typedatac                    d| j                   dd}| j                   dk(  rd}n| j                   dk(  rM	 t        j                  dd      j                  d| j                        d   }d	ggt        j                  |      S | j                   dk(  rvg }	 t        | j                        }|j                         D ]2  \  }}	 t        |      j                  }|j                  |d|df       4 dggt        j                  |      S d|fggt        j                  | j                        S # t        $ r}d
| d}Y d }~9d }~ww xY w# t        $ r	 d|d}Y w xY w# t        $ r}d| d}Y d }~jd }~ww xY w)N0xxz Framer   z
DATA Framer   i      )headerzHEADERS FramezHEADERS Frame (error: )   )r   zSETTINGS FramezSETTINGS Frame (error: r   )r   	pylsqpackDecoderfeed_headerr   r   format_pairs	Exceptionr	   itemsr
   name
ValueErrorappendr   _format)	self
frame_namehdrsesettingsskvkeys	            ]/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/mitmproxy/contentviews/http3.pyprettyzFrame.pretty   s   $))Af-
99>%JYY!^; ((r2>>q$))LQO45P8I8I$8OPP YY!^HV"499- GGI 7DAq)%ajoo OOSBqe*$567 66U9J9J89TUU
#$
  +
 	
!  ;5aS:
; & ) "1Q%j)  <6qc;
<sB   AD* E >E*	E3D>>EEE	E4$E//E4N)__name__
__module____qualname____doc__int__annotations__bytesr2        r1   r   r      s    ,
I
K
r;   r   c                   "    e Zd ZU dZeed<   d Zy)
StreamTypez)Representation of an HTTP/3 stream types.r   c                 n    dddddj                  | j                  d| j                  dd      }d	|fggS )
NzControl StreamzPush StreamzQPACK Encoder StreamzQPACK Decoder Stream)r   r   r      r   r   z Streamr   )getr   )r(   stream_types     r1   r2   zStreamType.pretty>   sL    "((	

 #dii2dii]'2
3 	 K()**r;   N)r3   r4   r5   r6   r7   r8   r2   r:   r;   r1   r=   r=   8   s    3
I+r;   r=   c                       e Zd ZU dZeed<    ee      Zeee	e
ez     f   ed<    ee      Zeed<    ee      Zeed<   y)ConnectionStater   message_count)default_factoryframes
client_buf
server_bufN)r3   r4   r5   rD   r7   r8   r   dictrF   listr   r=   	bytearrayrG   rH   r:   r;   r1   rC   rC   H   sM    M3272MFDd5:-../M!)<J	<!)<J	<r;   rC   c                       e Zd ZdZd
dZ	 	 ddej                  dz  dej                  dz  fdZ		 dde
dej                  dz  defd	Zy)	ViewHttp3zHTTP/3 FramesreturnNc                 ,    t        t              | _        y N)r   rC   connections)r(   s    r1   __init__zViewHttp3.__init__S   s    FQG
r;   r   tcp_messagec                 6   t        |t        j                        sJ |sJ | j                  |   }|j                  |j
                  d  D ]w  }|j                  r|j                  }n|j                  }||j                  z  }|j
                  dk(  re|j                  d   rVt        t        |d d             }|j                         }	|j                         }
|d |
= t        |	      g|j                   d<   	 t        t        |d d             }	 |j                         }|j                         }|j                         }
t%        |      |
|z   k  rn[t        ||
|
|z          }t'        ||      }|j                   j)                  |j
                  g       j+                  |       |d |
|z   = |xj
                  dz  c_        z |j                   j-                  |j                  j/                  |      g       }|sdg fS dt1        |      fS # t"        $ r Y kw xY w)Nr   quic_is_unidirectional   )r   r   r   zHTTP/3)
isinstancer   TCPFlowrQ   messagesrD   from_clientrG   rH   contentmetadatar   r9   pull_uint_vartellr=   rF   r   lenr   
setdefaultr&   r@   index
fmt_frames)r(   r   r   rS   r\   statemessagebufh3_bufrA   consumed
frame_type
frame_size
frame_dataframerF   s                   r1   __call__zViewHttp3.__call__X   s    $,,,{  &}}U%8%8%:; #	%G""&&&&7??"C""a'DMM:R,SU3r7^4$224!;;=		N#-k#:";QU3s8_5!'!5!5!7J!'!5!5!7J ";;=s8h33"3x(Z2G#HI
j*5''(;(;R@GGN/(Z//0' * 1$G#	%J !!$--"5"5k"BBG 
 Z///3 ' s    H	HHr   c                     dt        t        |xr t        |j                  j                                    z  t        t        |t        j                              z  S )Nr   )floatboolr   client_connalpnrW   r   rX   )r(   r   r   r\   s       r1   render_priorityzViewHttp3.render_priority   sM     DC*T-=-=-B-B"CDEFJtS[[123	
r;   )rN   N)NNrP   )r3   r4   r5   r$   rR   r   Flowr   
TCPMessagerl   r9   rn   rr   r:   r;   r1   rM   rM   P   sk    D
 "&-1	80 ii$80 ^^d*	80v 59

!%T!1
	
r;   rM   rF   rN   c              #   z   K   t        |       D ]'  \  }}|dkD  rdg |j                         E d {    ) y 7 w)Nr   )text )	enumerater2   )rF   irk   s      r1   rb   rb      sA     f% "5q5. <<>!!" 	"s   /;9;)collectionsr   collections.abcr   dataclassesr   r   r   aioquic.bufferr   r   aioquic.h3.connectionr	   r
   proxy.layers.httpr   rw   r   hexr   	mitmproxyr   r   r   r=   rC   ViewrM   rJ   	TViewLinerb   r:   r;   r1   <module>r      s    # $ !   ! * 0 ) *     $!
 !
 !
H $+ + + = = =I
		 I
X"tEJ./ "HT^^4L "r;   