
    @OOfy1                        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eef   ZddiZ edi e G d dej>                  e             Z  edddde G d de              Z! edddde 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     U/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/mitmproxy/connection.pyr   r      s    5FHIiDr   r   )tcpudpkw_onlyTc                      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>>   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.connectedx   s     zz_1111r   c                     | j                   duS )zC*Read-only:* `True` if TLS has been established, `False` otherwise.N)r>   rA   s    r   tls_establishedzConnection.tls_established}   s     ''t33r   c                 V    t        |t              r| j                  |j                  k(  S y)NF)
isinstancer!   r0   )rB   others     r   __eq__zConnection.__eq__   s"    eZ(77ehh&&r   c                 ,    t        | j                        S r)   )hashr0   rA   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)r0   addressr9   <z	 ciphers>r0   u   …i())dataclassesfieldsgetattrnamer%   lentyper   )rB   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DeprecationWarningr6   rA   s    r   alpn_proto_negotiatedz Connection.alpn_proto_negotiated   s%     	Z	

 yyr   )'r   r   r   r   Address__annotations__r   r   r   r'   r0   r*   r2   TransportProtocolr3   r4   boolr5   r   r	   Certr6   bytesr7   r8   r9   r:   r;   r<   floatr=   r>   propertyrC   rE   rI   rL   r[   rb   r   r   r   r!   r!   (   s    n>n;"&&+u1EE?  (
 $=>B>3,1%,@)@)E3: C
 .0huzz*/ D%$,U#%K%%5FC$JP!#K##B"Kt"!Ct %)OUT\("&M54<&2(,,E24 2 2 4 4 4
3  ut|  r   r!   )	metaclassF)eqreprc                      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regularr1   
proxy_moder.   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=rQ   )	r6   decoderE   r'   rU   r   format_addressr"   lower)rB   	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   r]   r_   r`   ra   r"   rA   s    r   rN   zClient.address   s%     	H	

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

 r   r?   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   r]   )r_   r`   ra   r8   rA   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   r]   r   Nr_   r`   ra   r5   rA   s    r   
clientcertzClient.clientcert   s8     	S	

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

 %(ED!$&D!r   )r   r   r   r   rc   rd   rp   r	   rg   r   r   	ProxyModeparserr   timer<   ri   r   rj   rN   setterr*   r   r   r   r   r   ro   ro      s   6;"&Hejj4& (-$$**95(J
$$  D"499=OU='	b   ^^  S4Z   
EJJ- 
 
 	' 	'r   ro   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.NrN   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 )Nrt   ru   rv   rx   ry   z, src_port=r   zServer(rz   rQ   )
r6   r{   rE   r#   r'   rU   r   r|   rN   r}   )rB   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)rN   r   r'   zCannot change server.z on open connection.)__dict__getr   r   r   RuntimeErrorsuper__setattr__)rB   rU   valueconnection_openattr_changed	__class__s        r   r   zServer.__setattr__0  s    %%!!'?+A+AB"''( 
  ==,,T2e;L<"%:4&@T#UVVw"4//r   r?   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   r]   r   rA   s    r   
ip_addresszServer.ip_address<  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   r]   r   Nr   rA   s    r   certzServer.certF  s8     	M	

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

 %(ED!$&D!r   )r   r   r   r   rc   rd   r"   r#   r<   ri   r   r   r   
ServerSpecr   r   rj   r   r	   rg   r   r   __classcell__)r   s   @r   r   r      s    @t^  $Hgn#  $Hgn#$(OUT\(
 )-,()-C		$	&-`m
0 GdN   
ejj4' 
 
 
[[	' 	'r   r   )r!   ro   r   r   r   )$rR   r   r+   r_   abcr   collections.abcr   r   r   enumr   typingr   	mitmproxyr	   mitmproxy.coretypesr
   mitmproxy.netr   mitmproxy.proxyr   mitmproxy.utilsr   r   re   tupler*   intrc   r   SerializableDataclassr!   ro   r   __all__r   r   r   <module>r      s         $ !     , % & ! d   L)  S/d
 Wy33w y yz +e%+7+T'Z T' ,T'p +e%+7+]'Z ]' ,]'@ @r   