a
    þd/  ã                   @   sž   d dl Z d dlZd dlmZmZ d dlmZ e jeee	e
f  dœdd„Ze jeee	e
f  dœdd„Ze jedœd	d
„Zde	dœdd„Zde	dœdd„ZdS )é    N)ÚOptionalÚTuple)ÚWWWScope)Ú	transportÚreturnc                 C   s    |   d¡}|d urXz0| ¡ }t|tƒr>t|d ƒt|d ƒfnd W S  tyV   Y d S 0 |   d¡}|d urœt|ttfƒrœt|ƒdkrœt|d ƒt|d ƒfS d S )NÚsocketr   é   Zpeernameé   )	Úget_extra_infoÚgetpeernameÚ
isinstanceÚtupleÚstrÚintÚOSErrorÚlistÚlen©r   Zsocket_infoÚinfo© r   ú`/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/uvicorn/protocols/utils.pyÚ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r„t|ttfƒr„t|ƒdkr„t|d ƒt|d ƒfS d S )Nr   r   r   Zsocknamer	   )r
   Úgetsocknamer   r   r   r   r   r   r   r   r   r   Úget_local_addr   s    
&
"r   c                 C   s   t |  d¡ƒS )NZ
sslcontext)Úboolr
   )r   r   r   r   Úis_ssl%   s    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ÚpathZquery_stringz{}?{}Úascii)ÚurllibÚparseÚquoteÚformatÚdecode)r   Zpath_with_query_stringr   r   r   Úget_path_with_query_string0   s    ÿr(   )ZasyncioÚurllib.parser#   Útypingr   r   Zuvicorn._typesr   Ú	Transportr   r   r   r   r   r   r    r(   r   r   r   r   Ú<module>   s   