
    Egsw                     V   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
 d dlZd dlmZmZ d dlZd dlmZmZmZ d dlmZ d dlmZ d dlmZ d dlmZmZmZ d d	lmZmZ d d
l m!Z!  G d dej"                  Z# G d dej$                  Z%d Z& G d dej'        ej(                  Z)dS )    N)AnyCallableDictListOptional)
connectionevents)connections
exceptionshttp)flow)
basethread)tcp)headershttp2url)r   base)humanc                        e Zd Z fdZdedefdZdedefdZdeeef         fdZ	d	e
ded
ej        fdZdd	e
dedee         fdZ xZS )SafeH2Connectionc                 x     t                      j        |i | || _        t          j                    | _        d S N)super__init__conn	threadingRLocklock)selfr   argskwargs	__class__s       l/var/www/sysmax/venv/lib/python3.11/site-packages/seleniumwire/thirdparty/mitmproxy/server/protocol/http2.pyr   zSafeH2Connection.__init__   s9    $)&)))	O%%			    acknowledged_size	stream_idc                     |dk    rd S | j         5  |                     ||           | j                            |                                            d d d            d S # 1 swxY w Y   d S Nr   )r   acknowledge_received_datar   senddata_to_send)r   r%   r&   s      r#   safe_acknowledge_received_dataz/SafeH2Connection.safe_acknowledge_received_data   s    !!FY 	0 	0**+<iHHHINN4,,..///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   AA  A$'A$
error_codec                    | j         5  	 |                     ||           n# t          j        j        $ r Y nw xY w| j                            |                                            d d d            d S # 1 swxY w Y   d S r   )r   reset_streamh2r   StreamClosedErrorr   r*   r+   )r   r&   r-   s      r#   safe_reset_streamz"SafeH2Connection.safe_reset_stream$   s    Y 	0 	0!!)Z8888=2    INN4,,..///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s,   A4!A48A48/A44A8;A8new_settingsc                     | j         5  |                     |           | j                            |                                            d d d            d S # 1 swxY w Y   d S r   )r   update_settingsr   r*   r+   )r   r3   s     r#   safe_update_settingsz%SafeH2Connection.safe_update_settings-   s    Y 	0 	0  ...INN4,,..///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   AAAAraise_zombier   c                     | j         5   |              | j        ||j        fi | | j                            |                                            d d d            d S # 1 swxY w Y   d S r   )r   send_headersfieldsr   r*   r+   )r   r7   r&   r   r!   s        r#   safe_send_headersz"SafeH2Connection.safe_send_headers2   s    Y 	0 	0LNNNDiBB6BBBINN4,,..///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   AA  A$'A$Tchunksc                    |D ]Y}d}|t          |          k     r@| j                                          || j        j                   | j        }||||z            }|                     |          t          |          k     r.| j                                         t          j        d           |                     ||           	 | j	        
                    |                                            n# t          $ r}	|	d }	~	ww xY w	 | j                                         n# | j                                         w xY w||z  }|t          |          k     @[|rm| j        5   |             |                     |           | j	        
                    |                                            d d d            d S # 1 swxY w Y   d S d S )Nr   皙?)lenr   acquirereleasemax_outbound_frame_sizelocal_flow_control_windowtimesleep	send_datar   r*   r+   	Exception
end_stream)
r   r7   r&   r<   rH   chunkpositionrB   frame_chunkes
             r#   safe_send_bodyzSafeH2Connection.safe_send_body8   s'    	4 	4EHSZZ''	!!###TY.///*.*F'#HX8O-O$OP11)<<s;?O?OOOI%%'''JsOOOy+666(INN4#4#4#6#67777    G 8 I%%''''DI%%''''33! SZZ''"  	4 4 4	***	t00223334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4	4 	4s=   	,C65D%6
D DDD%%E 'AG  GG)T)__name__
__module____qualname__r   intr,   r2   r   r   r6   r   r   Headersr;   r   bytesrM   __classcell__r"   s   @r#   r   r      s        & & & & &
0 0PS 0 0 0 003 0C 0 0 0 00c3h 0 0 0 0
0h 03 0QXQ` 0 0 0 04 48 4 4TRW[ 4 4 4 4 4 4 4 4r$   r   c                        e Zd ZU 	  G d d          Zdeddf fdZ	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z xZS )
Http2LayerFNclient_connc                        e Zd Zd Zd Zd ZdS )Http2Layer.H2ConnLoggerc                 "    || _         || _        d S r   )namelog)r   r\   r]   s      r#   r   z Http2Layer.H2ConnLogger.__init__Z   s    DIDHHHr$   c                 n    d                     | j        ||z            }|                     |d           d S )NzH2Conn {}: {}debug)formatr\   r]   )r   fmtstrr    msgs       r#   r_   zHttp2Layer.H2ConnLogger.debug^   s7    !((FTMBBCHHS'"""""r$   c                     d S r    )r   ra   r    s      r#   tracezHttp2Layer.H2ConnLogger.traceb   s    Dr$   N)rN   rO   rP   r   r_   re   rd   r$   r#   H2ConnLoggerrZ   Y   sA        	 	 		# 	# 	#	 	 	 	 	r$   rf   modereturnc           
      v   t                                          |           || _        t                      | _        t          dg          | _        i | _        t          j        	                    dddd| 
                    d| j                            }t          | j        |          | j        | j        <   d S )N)r   r   Fclientclient_sideheader_encodingvalidate_outbound_headersvalidate_inbound_headersloggerconfig)r   r   rg   dictstreamsserver_to_client_stream_idsr
   r0   rr   H2Configurationrf   r]   r   rX   )r   ctxrg   rr   r"   s       r#   r   zHttp2Layer.__init__e   s    	:>&&;?>>(;=**!&+%*$$Xtx88 + : : .>d>NW]-^-^-^)***r$   c           
         | j                                         r`t          j                            dddd|                     d| j                            }t          | j         |          | j        | j         <   | j        | j                  	                                 | j         
                    | j        | j                                                             d S )NTFserverrk   rq   )server_conn	connectedr0   rr   rv   rf   r]   r   r
   initiate_connectionr*   r+   )r   rr   s     r#   _initiate_server_connz Http2Layer._initiate_server_connt   s    %%'' 	cY..  %*/).((48<< / > >F 2B$BR[a1b1b1bDT-.)*>>@@@d.t/?@MMOOPPPPPr$   c                 N   | j         j                            d          }| j        | j                                                   | j        | j                                      |           | j                             | j        | j                                                             d S )N   )rX   rfilereadr
   r|   receive_datar*   r+   )r   preambles     r#   _complete_handshakezHttp2Layer._complete_handshake   s    #)..r22)*>>@@@)*77AAAd.t/?@MMOOPPPPPr$   c                     t                      r   )NotImplementedErrorr   s    r#   
next_layerzHttp2Layer.next_layer   s     "###r$   c                    |                      d                    |rdnd          dt          |          g           d }t          |d          r*|r!|j        dz  dk    r| j        |j                 }n|j        }t          |t          j                  r| 	                    ||          S t          |t          j
                  r|                     ||          S t          |t          j                  r|                     |||          S t          |t          j                  r|                     |          S t          |t          j                  r|                     ||||          S t          |t          j                  r|                     ||          S t          |t          j                  r|                     ||          S t          |t          j                  r|                     |          S t          |t          j                  r|                     ||          S t          |t          j                  r|                     ||||          S dS )	NzHTTP2 Event from {}ry   rj   r_   r&         T)r]   r`   reprhasattrr&   ru   
isinstancer	   RequestReceived_handle_request_receivedResponseReceived_handle_response_receivedDataReceived_handle_data_receivedStreamEnded_handle_stream_endedStreamReset_handle_stream_resetRemoteSettingsChanged_handle_remote_settings_changedConnectionTerminated_handle_connection_terminatedPushedStreamReceived_handle_pushed_stream_receivedPriorityUpdated_handle_priority_updatedTrailersReceived_handle_trailers)r   eventsource_conn
other_conn	is_servereids         r#   _handle_eventzHttp2Layer._handle_event   sO   !((Y)LHMM%[[M	
 	
 	
 5+&& 	& &U_q0A556uGoeV344 	L00e<<<v677 	L11#u===v233 	L--c5+FFFv122 	L,,S111v122 	L,,S%JOOOv;<< 		L77zJJJv:;; 	L55eYGGGv:;; 	L66u===v566 	L00e<<<v677 	L((eY
KKK tr$   c                    t           j        j        j        j                            d |j        D                       }t          | | j        | j	                 ||          | j
        |<   t          j                    | j
        |         _        |j        k|j        j        | j
        |         _        |j        j        | j
        |         _        |j        j        | j
        |         _        |j        | j
        |         _        | j
        |                                          | j
        |         j        j                                         dS )Nc                     g | ]	\  }}||g
S rd   rd   .0kvs      r#   
<listcomp>z7Http2Layer._handle_request_received.<locals>.<listcomp>   #    EgEgEgQUQRTUq!fEgEgEgr$   T)seleniumwire
thirdparty	mitmproxynetr   rR   r   Http2SingleStreamLayerr
   rX   rt   rD   timestamp_startpriority_updated	exclusivepriority_exclusive
depends_onpriority_depends_onweightpriority_weighthandled_priority_eventstartrequest_messagearrivedsetr   r   r   r   s       r#   r   z#Http2Layer._handle_request_received   s   )37<DDEgEgY^YfEgEgEghh249I$JZ9[]`bijjS,0IKKS)!-383I3SDL0494J4UDL1050F0MDL-7<7MDL4S!!!S)155777tr$   c                 j   t           j        j        j        j                            d |j        D                       }d| j        |         _        t          j	                    | j        |         _
        || j        |         j        _        | j        |         j        j                                         dS )Nc                     g | ]	\  }}||g
S rd   rd   r   s      r#   r   z8Http2Layer._handle_response_received.<locals>.<listcomp>   r   r$   r   T)r   r   r   r   r   rR   r   rt   queued_data_lengthrD   r   response_messager   r   r   s       r#   r   z$Http2Layer._handle_response_received   s    )37<DDEgEgY^YfEgEgEghh/0S,,0IKKS)5<S*2S*266888tr$   c                    t          j        | j        j        j                  }|r| j        |         j        |k    r| j        |                                          | j        |         	                    |j
        t          j        j        j                   |                     d                    |          d           nW| j        |         j                            |j                   | j        |         xj        t)          |j                  z  c_        | j        |                             |j        |j
                   dS )Nz!HTTP body too large. Limit is {}.infoT)r   
parse_sizerr   optionsbody_size_limitrt   r   killr
   r2   r&   r0   errors
ErrorCodesREFUSED_STREAMr]   r`   
data_queueputdatar?   r,   flow_controlled_length)r   r   r   r   bsls        r#   r   z Http2Layer._handle_data_received   s   t{2BCC 		D4<$7#==L""$$$[);;	$3   HH8??DDfMMMML(,,UZ888L00C
OOC00 	%DD(O	
 	
 	
 tr$   c                     t          j                     | j        |         _        | j        |         j                                         dS NT)rD   rt   timestamp_endstream_endedr   )r   r   s     r#   r   zHttp2Layer._handle_stream_ended   s8    *.)++S'S&**,,,tr$   c                     || j         v rn| j         |                                          |r| j         |         j        }n| j         |         j        }|&| j        |                             ||j                   dS r   )rt   r   client_stream_idserver_stream_idr
   r2   r-   )r   r   r   r   r   other_stream_ids         r#   r   zHttp2Layer._handle_stream_reset   s~    $,L""$$$ E"&,s"3"D"&,s"3"D* ,>>PUP`aaatr$   c                     t           j        j        j        j                            d |j        D                       }|| j        |         _        dS )Nc                     g | ]	\  }}||g
S rd   rd   r   s      r#   r   z/Http2Layer._handle_trailers.<locals>.<listcomp>   s#    FhFhFhRVRSUV1vFhFhFhr$   T)	r   r   r   r   r   rR   r   rt   trailers)r   r   r   r   r   r   s         r#   r   zHttp2Layer._handle_trailers   sH    *48=EEFhFhZ_ZgFhFhFhii%-S"tr$   c                     t          d |j                                        D                       }| j        |                             |           dS )Nc                 &    g | ]\  }}||j         fS rd   )	new_value)r   keycss      r#   r   z>Http2Layer._handle_remote_settings_changed.<locals>.<listcomp>   s#    aaaYc2c2<0aaar$   T)rs   changed_settingsitemsr
   r6   )r   r   r   r3   s       r#   r   z*Http2Layer._handle_remote_settings_changed   sN    aa%BXB^B^B`B`aaabb$99,GGGtr$   c                    |                      d                    |rdnd|j        |j        |j                  d           |j        t
          j        j        j        k    r| j	        | j
                                     |j        |j        |j                   | j
                            | j	        | j
                                                            |                                  n	 dS )Nz[HTTP/2 connection terminated by {}: error code: {}, last stream id: {}, additional data: {}ry   rj   r   )r-   last_stream_idadditional_dataF)r]   r`   r-   r   r   r0   r   r   NO_ERRORr
   rX   close_connectionr*   r+   _kill_all_streams)r   r   r   s      r#   r   z(Http2Layer._handle_connection_terminated   s    nuu!/HHx !	# # %+		, 	, 	, ry3<<<T-.?? +$3 % 5 @   
 !!$"243C"D"Q"Q"S"STTT""$$$$ ur$   c                 D   | j         |j                 }| j        | j                 j        5  | j        | j                                     ||j        |j                   | j                            | j        | j                 	                                           d d d            n# 1 swxY w Y   t          j        j        j        j                            d |j        D                       }t!          | | j        | j                 |j        |          }|| j        |j        <   t%          j                    | j        |j                 _        d| j        |j                 _        || j        |j                 _        t%          j                    | j        |j                 _        | j        |j                 j        j                                         | j        |j                 j        j                                         | j        |j                                                  dS )Nc                     g | ]	\  }}||g
S rd   rd   r   s      r#   r   z=Http2Layer._handle_pushed_stream_received.<locals>.<listcomp>  r   r$   T)ru   parent_stream_idr
   rX   r   push_streampushed_stream_idr   r*   r+   r   r   r   r   r   rR   r   rt   rD   r   pushedr   r   r   r   r   r   )r   r   
parent_eidr   layers        r#   r   z)Http2Layer._handle_pushed_stream_received  s    5e6LM
d./4 	U 	UT-.:::uG]_d_lmmm!!$"243C"D"Q"Q"S"STTT	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U )37<DDEgEgY^YfEgEgEghh&tT-=d>N-OQVQgipqq/4U+,?Cy{{U+,<6:U+,3@JU+,==AY[[U+,:U+,<DHHJJJU+,<IMMOOOU+,22444ts   A.B$$B(+B(c           	         | j         j        j        s|                     dd           dS || j        v r| j        |         j        |u rdS | j        | j                 j        5  |j	        }|| j        v r$| j        |         j
        r| j        |         j
        }|| j        v rE|j        | j        |         _        |j        | j        |         _        |j        | j        |         _        | j        | j                                     ||j        |                     ||j                  |j                   | j                            | j        | j                                                            d d d            n# 1 swxY w Y   dS )NzLHTTP/2 PRIORITY frame suppressed. Use --http2-priority to enable forwarding.r_   T)r   r   r   )rr   r   http2_priorityr]   rt   r   r
   rz   r   r&   r   r   r   r   r   r   r   
prioritize_map_depends_on_stream_idr*   r+   )r   r   r   mapped_stream_ids       r#   r   z#Http2Layer._handle_priority_updated   s   {"1 	HHcelmmm4$,4<#4#Ku#T#T 4d./4 	U 	U$4<//DLAQ4R4c/ $(<0@#A#R dl""7<S!48=8HS!549LS!1T-.99 |99:JEL\]]/	 :    !!$"243C"D"Q"Q"S"STTT%	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U& ts    DE77E;>E;c                 z    |}|| j         v r$| j         |         j        r| j         |         j        }||k    r|dz  }|S )Nr   )rt   r   )r   r&   r   mapped_depends_ons       r#   r   z$Http2Layer._map_depends_on_stream_id?  sW    &,,>O1P1a, !%-> ? P))) "  r$   c                     t          j                     dz
  d t          | j                                                  D             }fd|D             }|D ]}| j                            |d            d S )N
   c                 *    g | ]\  }}|j         ||fS rd   zombie)r   r&   streams      r#   r   z/Http2Layer._cleanup_streams.<locals>.<listcomp>N  s+    sss2C)Vekers9f-sssr$   c                 0    g | ]\  }}|j         k    |S rd   r   )r   r&   r  
death_times      r#   r   z/Http2Layer._cleanup_streams.<locals>.<listcomp>O  s-    mmm*;)VQWQ^blQlQlIQlQlQlr$   )rD   listrt   r   pop)r   zombie_streamsoutdated_streamsr&   r  s       @r#   _cleanup_streamszHttp2Layer._cleanup_streamsK  s    Y[[2%
sstDLL^L^L`L`GaGasssmmmm~mmm) 	. 	.ILY----	. 	.r$   c                 f    | j                                         D ]}|                                 d S r   )rt   valuesr   )r   r  s     r#   r   zHttp2Layer._kill_all_streamsT  s8    l))++ 	 	FKKMMMM	 	r$   c           	         |                                   |                                  d | j                                        D             }	 	 t	          j        |d          }|D ]}|| j        j        k    r| j        n| j        }|| j        j        k    r| j        n| j        }|| j        k    }| j        |         j	        5  	 d
                    t          j        |j                            }n(#  |                                  Y d d d             d S xY w| j        |         j        j        t"          j        j        j        k    r%|                     dd           	 d d d             d S | j        |                             |          }|                    | j        |                                                    |D ]=}	|                     |	|||          s#|                                   d d d             d S >	 d d d            n# 1 swxY w Y   |                                  ǐ# t4          $ rB}
|                     t7          |
          d           |                                  Y d }
~
d S d }
~
ww xY w)Nc                     g | ]	}|j         
S rd   )r   )r   cs     r#   r   z'Http2Layer.__call__.<locals>.<listcomp>\  s    ???!???r$   Tr>   r$   z.HTTP/2 connection entered closed state alreadyr_   r   )r}   r   r
   keysr   ssl_read_selectrX   r   rz   r   joinr   read_raw_framer   r   state_machinestater0   ConnectionStateCLOSEDr]   r   r*   r+   r   r	  rG   r   )r   connsrr   r   r   r   	raw_frameincoming_eventsr   rL   s              r#   __call__zHttp2Layer.__call__X  s=   ""$$$  """??t'7'<'<'>'>??? 	%,'s33 , ,D6:d>N>Y6Y6Y$"2"2_c_oK59T=M=X5X5X!1!1^b^nJ!,0@!@I)+6; ' '#(+1EkFW1X1X(Y(YII# 22444"' ' ' ' ' ' ' ' '  +K8FLPRP]PmPttt HH%UW^___"' ' ' ' ' ' ' ' ' +/*:;*G*T*TU^*_*_#(()9+)F)S)S)U)UVVV%4 ' 'E#'#5#5e[*V_#`#` ' $ 6 6 8 8 8 &'' ' ' ' ' ' ' ' ' ''' ' ' ' ' ' ' ' ' ' ' ' ' ' '* ))++++9,:  	% 	% 	%HHT!WWf%%%""$$$$$$$$$	%s{   A4H. H,C0/H0DHH. A	HH. ,BH/H. =H?H. H	H. H	H. .
I:87I55I:)rN   rO   rP   rX   r
   ClientConnection__annotations__rf   strr   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	  r   r  rT   rU   s   @r#   rW   rW   S   s        9
 
 
 
 
 
 
 
_# _$ _ _ _ _ _ _
Q 
Q 
QQ Q Q$ $ $
$ $ $L      (  
	 	 	  
  
  .  *  >
! 
! 
!. . .  &% &% &% &% &% &% &%r$   rW   c                 F     t          j                    fd            }|S )Nc                 p    |                                    | g|R i |}|                                   |S r   )r7   )r   r    r!   resultfuncs       r#   wrapperz%detect_zombie_stream.<locals>.wrapper  sK    d,T,,,V,,r$   )	functoolswraps)r"  r#  s   ` r#   detect_zombie_streamr&    s8    _T     Nr$   c                   f    e Zd Z G d d          Zdedej        j        j        j	        j
        ddf fdZd Zd	 Zd
 Zd Zd Zed             Zed             Zej        d             Zed             Zed             Zej        d             Zd$dZed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Z ed             Z!ed             Z"ed             Z#ed             Z$ed              Z%d! Z&d" Z'd# Z( xZ)S )%r   c                       e Zd ZddZdS )Http2SingleStreamLayer.MessageNc                     || _         t          j                    | _        d| _        d | _        t          j                    | _        t          j                    | _	        d S r(   )
r   queueQueuer   r   r   r   Eventr   r   )r   r   s     r#   r   z'Http2SingleStreamLayer.Message.__init__  sJ    Y`DL27+--DO&'D#Z^DM$?,,DL ) 1 1Dr$   r   )rN   rO   rP   r   rd   r$   r#   Messager)    s(        	2 	2 	2 	2 	2 	2r$   r.  r&   request_headersrh   Nc                 j   t                                          |d                    |                     || _        d | _        || _        d | _        d| _        d | _        d | _	        | 
                    |          | _        | 
                                | _        |  d | _        d | _        d | _        d S )NzHttp2SingleStreamLayer-{})r\   F)r   r   r`   h2_connectionr  r   r   r   r   r   r.  r   r   r   r   r   )r   rw   r1  r&   r/  r"   s        r#   r   zHttp2SingleStreamLayer.__init__  s    188CC 	 	
 	
 	
 +'+%./304.2#||O<< $%26 .2+/###r$   c                 8   | j         st          j                    | _         | j        j                                         | j        j                                         | j        j                                         | j        j                                         d S d S r   )r  rD   r   r   r   r   r   r   s    r#   r   zHttp2SingleStreamLayer.kill  s    { 	5)++DK -11333 (,,...!)--///!.2244444	5 	5r$   c                 *    t          j        d          )Nz-HTTP2 layer should already have a connection.r   Http2ProtocolExceptionr   s    r#   connectzHttp2SingleStreamLayer.connect  s    /0_```r$   c                 *    t          j        d          )Nz.Cannot dis- or reconnect in HTTP2 connections.r4  r   s    r#   
disconnectz!Http2SingleStreamLayer.disconnect  s    /0`aaar$   c                 D    t          j        t          |                    r   )r   SetServerNotAllowedExceptionr   )r   addresss     r#   
set_serverz!Http2SingleStreamLayer.set_server  s    5d7mmDDDr$   c                     dS r   rd   )r   r   s     r#   check_close_connectionz-Http2SingleStreamLayer.check_close_connection  s	     tr$   c                 n    | j         j                                        r| j         j        S | j        j        S r   )r   r   is_setr   r   r   s    r#   r   z!Http2SingleStreamLayer.data_queue  s4     (//11 	3(33'22r$   c                 n    | j         j                                        r| j         j        S | j        j        S r   )r   r   r@  r   r   r   s    r#   r   z)Http2SingleStreamLayer.queued_data_length  s4     (//11 	;(;;'::r$   c                     || j         _        d S r   )r   r   r   r   s     r#   r   z)Http2SingleStreamLayer.queued_data_length  s    23///r$   c                 n    | j         j                                        r| j         j        S | j        j        S r   )r   r   r@  r   r   r   s    r#   r   z#Http2SingleStreamLayer.stream_ended  s6      (//11 	5(55'44r$   c                 n    | j         j                                        r| j         j        S | j        j        S r   r   r   r@  r   r   r   s    r#   r   zHttp2SingleStreamLayer.trailers  s4     (//11 	1(11'00r$   c                 v    | j         j                                        r|| j         _        d S || j        _        d S r   rF  rC  s     r#   r   zHttp2SingleStreamLayer.trailers  s>     (//11 	.-.D!***,-D )))r$   c                     | j         j        j        t          j        j        j        k    }| j        |r9|
 |             t          j	        d
                    | j        |                    d S )Nz)Connection or stream already dead: {}, {})r1  r  r  r0   r   r  r  r  r   Http2ZombieExceptionr`   )r   pre_commandconnection_closeds      r#   r7   z#Http2SingleStreamLayer.raise_zombie  s     .<BbmFcFjj;"&7"&12]2d2deiep  sD  3E  3E  F  F  F #"r$   c                    | j         j                                         |                                  | j        r
d|j        d<   | j         j                            dd          }| j         j                            d          }| j         j                            d          }| j         j                            d          }t          j	        |d          \  }}|pt          j
        |          pd	}t          j        |||                                |                                |                                |                                d
| j         j        d d | j        | j                  S )NTzh2-pushed-stream
:authority :method:scheme:path)checkr      HTTP/2.0)r   r   waitr7   r   metadatar   r  r   parse_authoritydefault_portr   HTTPRequestencoder   r   )r   r   	authoritymethodschemepathhostports           r#   read_request_headersz+Http2SingleStreamLayer.read_request_headers  sG   $))+++; 	504DM,- (044\2FF	%-11)<<%-11)<<#+//88($???
d4s'//41MMOOMMOOKKMM ( 
 
 	
r$   c              #     K   |j         s| j        j                                         	 	 | j        j                            d          V  n# t          j        $ r Y nw xY w| j        j                                        rz| 	                                 | j        j        
                                dk    rB| j        j                                        V  | j        j        
                                dk    Bd S | 	                                 NTr>   )timeoutr   )r  r   r   rT  r   getr+  Emptyr@  r7   qsizer   requests     r#   read_request_bodyz(Http2SingleStreamLayer.read_request_body  s     ~ 	5 -22444
	 *599#9FFFFFF;   #07799 !!###*5;;==AA.9==????? *5;;==AA
	 s   "A AAc                     | j         j        S r   )r   r   rg  s     r#   read_request_trailersz,Http2SingleStreamLayer.read_request_trailers$  s    #,,r$   c           	         | j         rd S 	 |                                  | j        | j                 j                                         | j        | j                 j        j        }| j        | j                 j        dz   |k    r>| j        | j                 j        	                                 t          j        d           	 |                                  | j        | j                                                 | _        | j        | j        | j        <   |j                                        }|j        r |j        dd|j                    |j        dd|j                    |j        dd|j                    |j        dd|j                   d }d }d }| j        rV| j        j        j        s|                     d	d
           n.| j        }|                     | j        | j                  }| j        }	 | j        | j                                      | j        | j        ||j!        s|j"        s|j#        rdnd|||           n# tH          $ r}|d }~ww xY w	 |                                  | j        | j                 j        	                                 d S # |                                  | j        | j                 j        	                                 w xY w)NTr   r>   r   rM  rQ  rO  rP  zcHTTP/2 PRIORITY information in HEADERS frame suppressed. Use --http2-priority to enable forwarding.r_   F)rH   r   r   r   )%r   r7   r
   rz   r   r@   remote_settingsmax_concurrent_streamsopen_outbound_streamsrA   rD   rE   get_next_available_stream_idr   r   ru   r   copyrZ  insertr]  r[  r\  r   rr   r   r   r]   r   r   r   r   r;   contentr   r  rG   )r   rh  max_streamsr   r   r   r   rL   s           r#   send_request_headersz+Http2SingleStreamLayer.send_request_headers(  s   ; 	F	T-.3;;===*4+;<LcK 01G!K{ZZ !127??AAA
3  	 $ 01A B _ _ a aBFBW()>?/&&(( 	?GN1lG,=>>>q'7<000q)W^444q)W^444!"& 	7 ;&5 7~  AH  I  I  I  I%)%<"&*&D&DTEZ\`\t&u&u#"&"6	>T-.@@!%%,_d8HdGNdEE`d#5$7 / A      	 	 	G	 T-.3;;===== T-.3;;====s+   2AI  ?J  
I
IIJ ?Kc                     | j         rd S t          |t          j                  s
|rD|d         r>| j        | j                                     | j        | j        ||j	        d u            d S d S d S )Nr   rH   )
r   r   typesGeneratorTyper
   rz   rM   r7   r   r   )r   rh  r<   s      r#   send_request_bodyz(Http2SingleStreamLayer.send_request_bodyf  s    ; 	Ffe122 	v 	&) 	T-.==!%#,4	 >     	 	 	 	r$   c                 F    |                      | j        |j                   d S r   )_send_trailersrz   r   rg  s     r#   send_request_trailersz,Http2SingleStreamLayer.send_request_trailerst  s$    D,g.>?????r$   c                     |                      |           |                     ||j        g           |                     |           d S r   )ru  rz  rs  r}  rg  s     r#   send_requestz#Http2SingleStreamLayer.send_requestx  sK    !!'***w(9:::""7+++++r$   c           
      j   | j         j                                         |                                  t	          | j         j                            dd                    }| j         j                                        } |j        dd            t          j
        d|d|d d | j        | j                  S )N:statusi  rS  r$   )http_versionstatus_codereasonr   rs  r   r   r   )r   r   rT  r7   rQ   r   rd  rq  r  r   HTTPResponser   r   )r   r  r   s      r#   read_response_headersz,Http2SingleStreamLayer.read_response_headers~  s    %**,,,$/7;;IsKKLL'/4466It$$$ $# 0,	
 	
 	
 		
r$   c              #     K   	 	 | j         j                            d          V  n# t          j        $ r Y nw xY w| j         j                                        rz|                                  | j         j                                        dk    rB| j         j                                        V  | j         j                                        dk    Bd S |                                  rb  )	r   r   rd  r+  re  r   r@  r7   rf  r   rh  responses      r#   read_response_bodyz)Http2SingleStreamLayer.read_response_body  s      
	 +6::3:GGGGGG;   $188:: !!###+6<<>>BB/:>>@@@@@ +6<<>>BB
	 s   "( ::c                     | j         j        S r   )r   r   r  s      r#   read_response_trailersz-Http2SingleStreamLayer.read_response_trailers  s    $--r$   c                 B   |j                                         } |j        ddt          |j                             | j        | j                 j        5  | j        | j                                     | j	        | j
        |           d d d            d S # 1 swxY w Y   d S )Nr   r  )r   rq  rr  r  r  r
   rX   r   r;   r7   r   )r   r  r   s      r#   send_response_headersz,Http2SingleStreamLayer.send_response_headers  s    "''))q)S)=%>%>???d./4 	 	T-.@@!%  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   2BBBc                 z    | j         | j                                     | j        | j        ||j        d u            d S )Nrw  )r
   rX   rM   r7   r   r   )r   r  r<   s      r#   send_response_bodyz)Http2SingleStreamLayer.send_response_body  sN    )*99! )T1	 	: 	
 	
 	
 	
 	
r$   c                 F    |                      | j        |j                   d S r   )r|  rX   r   )r   r  s     r#   send_response_trailersz-Http2SingleStreamLayer.send_response_trailers  s$    D,h.?@@@@@r$   c                     |sd S | j         |         j        5  | j         |                             | j        | j        |d           d d d            d S # 1 swxY w Y   d S )NTrw  )r
   r   r;   r7   r   )r   r   r   s      r#   r|  z%Http2SingleStreamLayer._send_trailers  s     	Fd#( 	 	T"44!%	 5   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   /AAAc                      t          d          )Nz,Http2SingleStreamLayer must be run as thread)EnvironmentErrorr   s    r#   r  zHttp2SingleStreamLayer.__call__  s    MNNNr$   c                    t          j        | | j                  }	  |             n# t          j        $ r Y d S t          j        $ r-}|                     t          |          d           Y d }~n}d }~wt          j        $ r3}|                     d	                    |          d           Y d }~n=d }~wt          j
        $ r( |                     t          j        j        d           Y nw xY w|                                  d S )Nr   z?Changing the Host server for HTTP/2 connections not allowed: {})httpbase	HttpLayerrg   r   rI  ProtocolExceptionr]   r   r:  r`   Killr   ErrorKILLED_MESSAGEr   )r   r   rL   s      r#   runzHttp2SingleStreamLayer.run  s%   "433
	8EGGGG. 	 	 	FF+ 	& 	& 	&HHT!WWf%%%%%%%%6 	j 	j 	jHHV]]^_``bhiiiiiiii 	8 	8 	8HHTZ.77777	8 			s,   
' C)C)#A//C))B//7C)(C)r   )*rN   rO   rP   r.  rQ   r   r   r   r   r   rR   r   r   r6  r8  r<  r>  propertyr   r   setterr   r   r7   r&  r`  ri  rk  ru  rz  r}  r  r  r  r  r  r  r  r|  r  r  rT   rU   s   @r#   r   r     sE       2 2 2 2 2 2 2 20c 0LLcLmLqLvL~ 0  DH 0 0 0 0 0 0*5 5 5a a ab b bE E E  
 3 3 X3 ; ; X; 4 4 4 5 5 X5 1 1 X1 _. . _.F F F F 
 
 
>        - - - ;> ;> ;>z    @ @ @ , , ,
 
 
 
(       . . .    
 
 
 A A A	 	 	O O O      r$   r   )*r$  r+  r   rD   rx  typingr   r   r   r   r   h2.exceptionsr0   r   r	   *seleniumwire.thirdparty.mitmproxy.net.httpr   !seleniumwire.thirdparty.mitmproxyr
   r   r   r   +seleniumwire.thirdparty.mitmproxy.coretypesr   %seleniumwire.thirdparty.mitmproxy.netr   r   r   r   1seleniumwire.thirdparty.mitmproxy.server.protocolr  r   'seleniumwire.thirdparty.mitmproxy.utilsr   H2Connectionr   LayerrW   r&  _HttpTransmissionLayer
BaseThreadr   rd   r$   r#   <module>r     s              6 6 6 6 6 6 6 6 6 6 6 6 6 6     ! ! ! ! ! ! ! ! 1 1 1 1 K K K K K K K K K K 2 2 2 2 2 2 B B B B B B 5 5 5 5 5 5 J J J J J J J J J J T T T T T T T T 9 9 9 9 9 9;4 ;4 ;4 ;4 ;4z. ;4 ;4 ;4|k% k% k% k% k% k% k% k%\	  N N N N NX<j>S N N N N Nr$   