U
    ÷Ê	f=  ã                   @  sŒ   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œd	d
„Z	dddœdd„Z
dddœdd„Zdddœdd„Zdddœdd„ZdS )é    )ÚannotationsN)ÚWWWScopec                   @  s   e Zd ZdS )ÚClientDisconnectedN)Ú__name__Ú
__module__Ú__qualname__© r   r   úZ/var/www/html/apigroqsegura/apigroq/lib/python3.8/site-packages/uvicorn/protocols/utils.pyr   	   s   r   zasyncio.Transportztuple[str, int] | None)Ú	transportÚreturnc                 C  s¢   |   d¡}|d k	rZz0| ¡ }t|tƒr>t|d ƒt|d ƒfnd W S  tk
rX   Y d S X |   d¡}|d k	ržt|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
   Zsocket_infoÚinfor   r   r	   Úget_remote_addr   s    
(
"r   c                 C  sˆ   |   d¡}|d k	r@| ¡ }t|tƒr<t|d ƒt|d ƒfS d S |   d¡}|d k	r„t|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   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!   r   r   )Úscoper   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"   Zpath_with_query_stringr   r   r	   Úget_path_with_query_string5   s    r/   )Ú
__future__r   ÚasyncioÚurllib.parser*   Úuvicorn._typesr   ÚIOErrorr   r   r   r!   r&   r/   r   r   r   r	   Ú<module>   s   