
    kj                     6   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      Z e       Zy)    )defaultdict)	dataclass)fieldN)Buffer)BufferReadError)parse_settings)Setting   )
is_h3_alpn)tcp)Contentview)Metadata)hex_dumpT)frozenc                   2    e Zd ZU dZeed<   eed<   defdZy)Framez"Representation of an HTTP/3 frame.typedatareturnc                    d| j                   dd}| j                   dk(  rd}n| j                   dk(  rO	 t        j                  dd      j                  d| j                        d   }d	d
j                  d |D              z   S | j                   dk(  rqg }	 t        | j                        }|j                         D ]2  \  }}	 t        |      j                  }|j                  | d|d       4 dd
j                  |      z   S | d
t        j                  | j                  t                     z   S # t        $ r}d| d}Y d }~Bd }~ww xY w# t        $ r	 d|d}Y w xY w# t        $ r}d| d}Y d }~sd }~ww xY w)N0xxz Framer   z
DATA Frame   i      zHEADERS Frame

c              3   p   K   | ].  \  }}|j                  d        d|j                  d         0 yw)backslashreplace)errorsz: N)decode).0kvs      k/home/ubuntu/.cache/pipx/cdb5059130eadca/lib/python3.12/site-packages/mitmproxy/contentviews/_view_http3.py	<genexpr>zFrame.pretty.<locals>.<genexpr>    sA      61 xx'9x:;2ahhN`h>a=bc6s   46zHEADERS Frame (error: )   z: 0xzSETTINGS Frame
zSETTINGS Frame (error: )r   	pylsqpackDecoderfeed_headerr   join	Exceptionr   itemsr	   name
ValueErrorappendr   prettifyr   )	self
frame_namehdrsesettingssr!   r"   keys	            r#   prettyzFrame.pretty   s   $))Af-
99>%JYY!^; ((r2>>q$))LQO(DII 6 $6 -   YY!^H@"499- GGI 7DAq)%ajoo OOse4!u$567 *DIIh,???R 8#4#4TYY
#KKK!  ;5aS:
; & ) "1Q%j)  <6qc;
<sB   AD0 E!  E0	E	9EE	EE!	E:*E55E:N)	__name__
__module____qualname____doc__int__annotations__bytesstrr8        r#   r   r      s    ,
I
KL LrB   r   c                   (    e Zd ZU dZeed<   defdZy)
StreamTypez)Representation of an HTTP/3 stream types.r   r   c                 f    dddddj                  | j                  d| j                  dd      }|S )	NzControl StreamzPush StreamzQPACK Encoder StreamzQPACK Decoder Stream)r   r   r
      r   r   z Stream)getr   )r1   stream_types     r#   r8   zStreamType.pretty=   sA    "((	

 #dii2dii]'2
3 	 rB   N)r9   r:   r;   r<   r=   r>   r@   r8   rA   rB   r#   rD   rD   7   s    3
I rB   rD   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)r9   r:   r;   rK   r=   r>   r   dictrM   listr   rD   	bytearrayrN   rO   rA   rB   r#   rJ   rJ   G   sM    M3272MFDd5:-../M!)<J	<!)<J	<rB   rJ   c                   R    e Zd Zd	dZedefd       ZdededefdZ	dedede
fdZy)
Http3Contentviewr   Nc                 ,    t        t              | _        y N)r   rJ   connectionsr1   s    r#   __init__zHttp3Contentview.__init__P   s    FQG
rB   c                      y)NzHTTP/3 FramesrA   rX   s    r#   r-   zHttp3Contentview.nameU   s    rB   r   metadatac                 v   |j                   }|j                  }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$                  j1                  |j                  j3                  |      g       }|sydj5                  d	 |D              S # t&        $ r Y sw xY w)
Nr   quic_is_unidirectional   )r   r   r    z

c              3   <   K   | ]  }|j                           y wrV   )r8   )r    frames     r#   r$   z,Http3Contentview.prettify.<locals>.<genexpr>   s     B%u||~Bs   )flowtcp_message
isinstancer   TCPFlowrW   messagesrK   from_clientrN   rO   contentr[   r   r?   pull_uint_vartellrD   rM   r   lenr   
setdefaultr/   rG   indexr*   )r1   r   r[   rb   rc   statemessagebufh3_bufrH   consumed
frame_type
frame_size
frame_datara   rM   s                   r#   r0   zHttp3Contentview.prettifyY   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;;B6BBB- ' s   ' H,,	H87H8c                     |j                   }dt        t        |xr t        |j                  j
                                    z  t        t        |t        j                              z  S )Nr
   )	rb   floatboolr   client_connalpnrd   r   re   )r1   r   r[   rb   s       r#   render_priorityz Http3Contentview.render_priority   sV    
 }}DC*T-=-=-B-B"CDEFJtS[[123	
rB   )r   N)r9   r:   r;   rY   propertyr@   r-   r?   r   r0   rw   r{   rA   rB   r#   rT   rT   O   sb    

 c  1CU 1Ch 1C3 1Cf



 

 
	

rB   rT   )collectionsr   dataclassesr   r   r'   aioquic.bufferr   r   aioquic.h3.connectionr   r	   proxy.layers.httpr   	mitmproxyr   mitmproxy.contentviews._apir   r   mitmproxy_rs.contentviewsr   r   rD   rJ   rT   http3rA   rB   r#   <module>r      s    # !   ! * 0 ) *  3 0 . $!L !L !LH $   = = =G
{ G
T 	rB   