
    kj2                        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 d d
lmZ d dlmZ d dlmZ  G d de      Zed   Zed   Zeeef   Z ed       G d dej>                  e             Z  eddd       G d de              Z! eddd       G d de              Z"g dZ#y)    N)ABCMeta)Sequence)	dataclass)field)Flag)Literal)certs)serializable)server_spec)
mode_specs)humanc                   &    e Zd ZdZdZdZdZeez  Zy)ConnectionStatez+The current state of the underlying socket.r         N)__name__
__module____qualname____doc__CLOSEDCAN_READ	CAN_WRITEOPEN     ]/home/ubuntu/.cache/pipx/cdb5059130eadca/lib/python3.12/site-packages/mitmproxy/connection.pyr   r      s    5FHIiDr   r   )tcpudp)	SSLv3TLSv1zTLSv1.1zTLSv1.2zTLSv1.3zDTLSv0.9DTLSv1zDTLSv1.2QUICv1T)kw_onlyc                      e Zd ZU dZedz  ed<   	 edz  ed<   	  eej                  ddi      Z	eed<   	  ed	 
      Z
eed<   	  ed      Zeed<   	 dZedz  ed<   	 dZeed<   	 dZeej(                     ed<   	 dZedz  ed<   	 dZee   ed<   	 dZedz  ed<   	 dZee   ed<   	 dZedz  ed<   	 dZedz  ed<   	 dZedz  ed<   dZedz  ed<   	 dZ edz  ed<   	 e!defd       Z"e!defd       Z#d Z$d  Z%d! Z&e!dedz  fd"       Z'y)#
Connectiona   
    Base class for client and server connections.

    The connection object only exposes metadata about the connection, but not the underlying socket object.
    This is intentional, all I/O should be handled by `mitmproxy.proxy.server` exclusively.
    Npeernamesockname	serializeF)defaultmetadatastatec                  <    t        t        j                               S N)struuiduuid4r   r   r   <lambda>zConnection.<lambda>G   s    C

,= r   default_factoryidr   r)   transport_protocolerrortlsr   certificate_listalpnalpn_offersciphercipher_listtls_versionsnitimestamp_starttimestamp_endtimestamp_tls_setupreturnc                 :    | j                   t        j                  u S )zS*Read-only:* `True` if Connection.state is ConnectionState.OPEN, `False` otherwise.)r+   r   r   selfs    r   	connectedzConnection.connected   s     zz_1111r   c                     | j                   duS )zC*Read-only:* `True` if TLS has been established, `False` otherwise.N)rB   rE   s    r   tls_establishedzConnection.tls_established   s     ''t33r   c                 V    t        |t              r| j                  |j                  k(  S y)NF)
isinstancer%   r4   )rF   others     r   __eq__zConnection.__eq__   s"    eZ(77ehh&&r   c                 ,    t        | j                        S r-   )hashr4   rE   s    r   __hash__zConnection.__hash__   s    DGG}r   c                 L   d d d}t        j                  |       D ]m  }t        | |j                        }||j                  k7  s)|j                  dk(  rdt        |       d}n|j                  dk(  rd|dd   }|||j                  <   o t        |       j                   d|d	S )
N)r4   addressr=   <z	 ciphers>r4   u   …i())dataclassesfieldsgetattrnamer)   lentyper   )rF   attrsfvals       r   __repr__zConnection.__repr__   s     

 ##D) 	$A$'Caii66]*c#hZy1CVVt^BCz*C #aff	$ t*%%&ay22r   c                 R    t        j                  dt        d       | j                  S )z4*Deprecated:* An outdated alias for Connection.alpn.zLConnection.alpn_proto_negotiated is deprecated, use Connection.alpn instead.r   
stacklevel)warningswarnDeprecationWarningr:   rE   s    r   alpn_proto_negotiatedz Connection.alpn_proto_negotiated   s%     	Z	

 yyr   )(r   r   r   r   Address__annotations__r   r   r   r+   r4   r.   r6   TransportProtocolr7   r8   boolr9   r   r	   Certr:   bytesr;   r<   r=   r>   
TlsVersionr?   r@   floatrA   rB   propertyrG   rI   rM   rP   r_   rf   r   r   r   r%   r%   1   s    n>n;"&&+u1EE?  (
 $=>B>3,1%,@)@)E3: C
 .0huzz*/ D%$,U#%K%%5FC$JP!#K##B%)Kd")!Ct %)OUT\("&M54<&2(,,E24 2 2 4 4 4
3  ut|  r   r%   )	metaclassF)eqreprr#   c                      e Zd ZU dZeed<   	 eed<   	 dZej                  dz  ed<   	  e	e
j                  j                  d            Ze
j                  ed<   	  e	ej                  	      Zeed
<   	 d Zed        Zej(                  d        Zededz  fd       Zedej                  dz  fd       Zej(                  d        Zy)Clientz,A connection between a client and mitmproxy.r&   r'   Nmitmcertregularr5   
proxy_moder2   r@   c                    | j                   r d| j                   j                  d       }n| j                  rd}nd}| j                  j                  }|sJ dt        j                  | j                         d|j                          | dS )	N, alpn=replaceerrors, tls zClient(, state=rU   )	r:   decoderI   r+   rY   r   format_addressr&   lower)rF   	tls_stater+   s      r   __str__zClient.__str__   s    99!$))"2"2)"2"D!EFI!!II

u--dmm<=Xekkm_U^T__`aar   c                 R    t        j                  dt        d       | j                  S )z4*Deprecated:* An outdated alias for Client.peername.:Client.address is deprecated, use Client.peername instead.r   ra   rc   rd   re   r&   rE   s    r   rR   zClient.address   s%     	H	

 }}r   c                 J    t        j                  dt        d       || _        y )Nr   r   ra   r   )rF   xs     r   rR   zClient.address   s     H	

 r   rC   c                 R    t        j                  dt        d       | j                  S )z6*Deprecated:* An outdated alias for Connection.cipher.z<Client.cipher_name is deprecated, use Client.cipher instead.r   ra   )rc   rd   re   r<   rE   s    r   cipher_namezClient.cipher_name   s%     	J	

 {{r   c                 r    t        j                  dt        d       | j                  r| j                  d   S y)zC*Deprecated:* An outdated alias for Connection.certificate_list[0].EClient.clientcert is deprecated, use Client.certificate_list instead.r   ra   r   Nrc   rd   re   r9   rE   s    r   
clientcertzClient.clientcert   s8     	S	

   ((++r   c                 `    t        j                  dt        d       |r	|g| _        y g | _        y )Nr   r   ra   r   rF   r^   s     r   r   zClient.clientcert   s.    S	

 %(ED!$&D!r   )r   r   r   r   rg   rh   ru   r	   rk   r   r   	ProxyModeparserw   timer@   rn   r   ro   rR   setterr.   r   r   r   r   r   rt   rt      s   6;"&Hejj4& (-$$**95(J
$$  D"499=OU='	b   ^^  S4Z   
EJJ- 
 
 	' 	'r   rt   c                   ,    e Zd ZU dZedz  ed<   	 dZedz  ed<   	 dZedz  ed<   dZe	dz  ed<   	 dZ
e	dz  ed<   	 dZej                  dz  ed<   	 d	 Z fd
Zededz  fd       Zedej&                  dz  fd       Zej*                  d        Z xZS )Serverz6A connection between mitmproxy and an upstream server.NrR   r&   r'   r@   timestamp_tcp_setupviac                 b   | j                   r d| j                   j                  d       }n| j                  rd}nd}| j                  rd| j                  d    }nd}| j                  j
                  }|sJ dt        j                  | j                         d	|j                          | | d
S )Nry   rz   r{   r}   r~   z, src_port=r   zServer(r   rU   )
r:   r   rI   r'   r+   rY   r   r   rR   r   )rF   r   
local_portr+   s       r   r   zServer.__str__(  s    99!$))"2"2)"2"D!EFI!!II==&t}}Q'7&89JJ

u--dll;<HU[[]OT]S^_i^jjkllr   c                    |dv rk| j                   j                  dt        j                        t        j                  u }| j                   j                  |      |k7  }|r|rt        d| d      t        |   ||      S )N)rR   r   r+   zCannot change server.z on open connection.)__dict__getr   r   r   RuntimeErrorsuper__setattr__)rF   rY   valueconnection_openattr_changed	__class__s        r   r   zServer.__setattr__7  s    %%!!'?+A+AB"''( 
  ==,,T2e;L<"%:4&@T#UVVw"4//r   rC   c                 R    t        j                  dt        d       | j                  S )z6*Deprecated:* An outdated alias for `Server.peername`.z=Server.ip_address is deprecated, use Server.peername instead.r   ra   r   rE   s    r   
ip_addresszServer.ip_addressC  s%     	K	

 }}r   c                 r    t        j                  dt        d       | j                  r| j                  d   S y)zE*Deprecated:* An outdated alias for `Connection.certificate_list[0]`.?Server.cert is deprecated, use Server.certificate_list instead.r   ra   r   Nr   rE   s    r   certzServer.certM  s8     	M	

   ((++r   c                 `    t        j                  dt        d       |r	|g| _        y g | _        y )Nr   r   ra   r   r   s     r   r   zServer.certZ  s.    M	

 %(ED!$&D!r   )r   r   r   r   rg   rh   r&   r'   r@   rn   r   r   r   
ServerSpecr   r   ro   r   r	   rk   r   r   __classcell__)r   s   @r   r   r     s    @t^  $Hgn#  $Hgn#$(OUT\(
 )-,()-C		$	&-`m
0 GdN   
ejj4' 
 
 
[[	' 	'r   r   )r%   rt   r   r   )$rV   r   r/   rc   abcr   collections.abcr   r   r   enumr   typingr   	mitmproxyr	   mitmproxy.coretypesr
   mitmproxy.netr   mitmproxy.proxyr   mitmproxy.utilsr   r   ri   rm   tupler.   intrg   SerializableDataclassr%   rt   r   __all__r   r   r   <module>r      s         $ !     , % & ! d   L)  

 S/ 4y33w y yx e%.T'Z T' /T'n e%.]'Z ]' /]'@ @r   