o
    •º¥g9  ã                   @  sn   d dl mZ d dlZd dlZd dlmZ G dd„ deƒZdd
d„Z	ddd„Z
ddd„Zddd„Zddd„ZdS )é    )ÚannotationsN)ÚWWWScopec                   @  s   e Zd ZdS )ÚClientDisconnectedN)Ú__name__Ú
__module__Ú__qualname__© r   r   úN/var/www/visachat/venv/lib/python3.10/site-packages/uvicorn/protocols/utils.pyr   	   s    r   Ú	transportúasyncio.TransportÚreturnútuple[str, int] | Nonec                 C  s¢   |   d¡}|d ur-z| ¡ }t|tƒr t|d ƒt|d ƒfW S d W S  ty,   Y d S w |   d¡}|d urOt|ttfƒrOt|ƒdkrOt|d ƒt|d ƒfS d S )NÚsocketr   é   Úpeernameé   )	Úget_extra_infoÚgetpeernameÚ
isinstanceÚtupleÚstrÚintÚOSErrorÚlistÚlen©r
   Úsocket_infoÚinfor   r   r	   Úget_remote_addr   s   
*ý
"r   c                 C  sˆ   |   d¡}|d ur | ¡ }t|tƒrt|d ƒt|d ƒfS d S |   d¡}|d urBt|ttfƒrBt|ƒdkrBt|d ƒt|d ƒfS d S )Nr   r   r   Úsocknamer   )r   Úgetsocknamer   r   r   r   r   r   r   r   r   r	   Úget_local_addr   s   
&
"r!   Úboolc                 C  s   t |  d¡ƒS )NÚ
sslcontext)r"   r   )r
   r   r   r	   Úis_ssl)   s   r$   Úscoper   r   c                 C  s   |   d¡}|s	dS d| S )NÚclientÚ z%s:%d)Úget)r%   r&   r   r   r	   Úget_client_addr-   s   
r)   c                 C  s2   t j | d ¡}| d rd || d  d¡¡}|S )NÚpathÚquery_stringz{}?{}Úascii)ÚurllibÚparseÚquoteÚformatÚdecode)r%   Úpath_with_query_stringr   r   r	   Úget_path_with_query_string4   s   r3   )r
   r   r   r   )r
   r   r   r"   )r%   r   r   r   )Ú
__future__r   ÚasyncioÚurllib.parser-   Úuvicorn._typesr   r   r   r   r!   r$   r)   r3   r   r   r   r	   Ú<module>   s    



