
    9Cg9                    r    d dl mZ d dlZd dlZd dlmZ  G d de          Zdd
Z	ddZ
ddZddZddZdS )    )annotationsN)WWWScopec                      e Zd ZdS )ClientDisconnectedN)__name__
__module____qualname__     I/var/www/api/venv/lib/python3.11/site-packages/uvicorn/protocols/utils.pyr   r   	   s          r   r   	transportasyncio.Transportreturntuple[str, int] | Nonec                   |                      d          }|g	 |                                }t          |t                    r*t	          |d                   t          |d                   fnd S # t          $ r Y d S w xY w|                      d          }|Yt          |t          t          f          r=t          |          dk    r*t	          |d                   t          |d                   fS d S )Nsocketr      peername   )	get_extra_infogetpeername
isinstancetuplestrintOSErrorlistlenr   socket_infoinfos      r   get_remote_addrr"      s    **844K	**,,D3=dE3J3JTCQLL#d1g,,//PTT 	 	 	 44	
 ##J//DJtdE];;D		QDGc$q'll++4s   AA. .
A<;A<c                   |                      d          }|U|                                }t          |t                    r*t	          |d                   t          |d                   fnd S |                      d          }|Yt          |t          t          f          r=t          |          dk    r*t	          |d                   t          |d                   fS d S )Nr   r   r   socknamer   )r   getsocknamer   r   r   r   r   r   r   s      r   get_local_addrr&      s    **844K&&((/9$/F/FPDGc$q'll++DP##J//DJtdE];;D		QDGc$q'll++4r   boolc                F    t          |                     d                    S )N
sslcontext)r'   r   )r   s    r   is_sslr*   )   s    	((66777r   scoper   r   c                >    |                      d          }|sdS d|z  S )Nclient z%s:%d)get)r+   r-   s     r   get_client_addrr0   -   s+    YYx  F rVr   c                    t           j                            | d                   }| d         r/d                    || d                             d                    }|S )Npathquery_stringz{}?{}ascii)urllibparsequoteformatdecode)r+   path_with_query_strings     r   get_path_with_query_stringr;   4   sY    #\//f>>^ o!(0FnH]HdHdelHmHm!n!n!!r   )r   r   r   r   )r   r   r   r'   )r+   r   r   r   )
__future__r   asynciourllib.parser5   uvicorn._typesr   r   r   r"   r&   r*   r0   r;   r
   r   r   <module>r@      s    " " " " " "      # # # # # # ' & & & & & & &   "	 	 	 	8 8 8 8   " " " " " "r   