a
    ^ŠÝgv  ã                   @  sÄ  d dl mZ d dlZd dlmZ d dlmZmZmZ d dl	m
Z
 d dlmZ d dlmZmZ d dlmZ d d	lmZ d d
lmZmZmZ ddlmZmZmZ ddlmZmZmZ ddlm Z  ee!eef Z"e#e!e$f Z%ee%e!f Z&e#e'e%f Z(e#e'e!f Z)edƒZ*G dd„ dƒZ+G dd„ deƒZ,G dd„ deƒZ-G dd„ dee-ƒZ.G dd„ de.ƒZ/G dd„ dee. e-ƒZ0G dd„ dee( e-ƒZ1G dd „ d ee' e-ƒZ2G d!d"„ d"ee) e-ƒZ3G d#d$„ d$ee' e-ƒZ4dS )%é    )ÚannotationsN)Úabstractmethod)ÚCallableÚ
CollectionÚMapping)ÚAsyncExitStack)ÚIOBase)ÚIPv4AddressÚIPv6Address)ÚAddressFamily)ÚTracebackType)ÚAnyÚTypeVarÚUnioné   )ÚTypedAttributeProviderÚTypedAttributeSetÚtyped_attributeé   )Ú
ByteStreamÚListenerÚUnreliableObjectStream)Ú	TaskGroupÚT_Retvalc                   @  s.   e Zd Zddœdd„Zddddd	œd
d„ZdS )Ú_NullAsyncContextManagerÚNone©Úreturnc                 Ã  s   d S ©N© ©Úselfr   r   ú`/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/anyio/abc/_sockets.pyÚ
__aenter__   s    z#_NullAsyncContextManager.__aenter__ztype[BaseException] | NonezBaseException | NonezTracebackType | Nonezbool | None)Úexc_typeÚexc_valÚexc_tbr   c                 Ã  s   d S r   r   )r!   r$   r%   r&   r   r   r"   Ú	__aexit__!   s    z"_NullAsyncContextManager.__aexit__N)Ú__name__Ú
__module__Ú__qualname__r#   r'   r   r   r   r"   r      s   r   c                   @  sb   e Zd ZU eƒ Zded< eƒ Zded< eƒ Zded< eƒ Zded< eƒ Z	ded	< eƒ Z
ded
< dS )ÚSocketAttributer   ÚfamilyÚSockAddrTypeÚlocal_addressÚintÚ
local_portúsocket.socketÚ
raw_socketÚremote_addressÚremote_portN)r(   r)   r*   r   r,   Ú__annotations__r.   r0   r2   r3   r4   r   r   r   r"   r+   *   s   
r+   c                   @  s4   e Zd Zeddœdd„ƒZeeddœdd„ƒƒZdS )	Ú_SocketProviderzMapping[Any, Callable[[], Any]]r   c                   sÌ   ddl m‰  tj‡fdd„tj‡ ‡fdd„tj‡fdd„i}zˆ ˆj ¡ ƒ‰W n tyd   d ‰Y n0 ˆd ur€‡fdd„|tj	< ˆjjt
jt
jfv rÈ‡fdd„|tj< ˆd urÈˆd	 ‰‡fd
d„|tj< |S )Nr   )Úconvert_ipv6_sockaddrc                     s   ˆ j jS r   )Ú_raw_socketr,   r   r    r   r"   Ú<lambda>?   ó    z2_SocketProvider.extra_attributes.<locals>.<lambda>c                     s   ˆ ˆj  ¡ ƒS r   ©r8   Úgetsocknamer   )Úconvertr!   r   r"   r9   @   s   ÿc                     s   ˆ j S r   )r8   r   r    r   r"   r9   C   r:   c                     s   ˆ S r   r   r   )Úpeernamer   r"   r9   L   r:   c                     s   ˆ j  ¡ d S )Nr   r;   r   r    r   r"   r9   Q   r:   r   c                     s   ˆ S r   r   r   )r4   r   r"   r9   U   r:   )Z_core._socketsr7   r+   r,   r.   r2   r8   ÚgetpeernameÚOSErrorr3   r   ÚAF_INETÚAF_INET6r0   r4   )r!   Ú
attributesr   )r=   r>   r4   r!   r"   Úextra_attributes:   s$    û

ÿz _SocketProvider.extra_attributesr1   c                 C  s   d S r   r   r    r   r   r"   r8   Y   s    z_SocketProvider._raw_socketN)r(   r)   r*   ÚpropertyrD   r   r8   r   r   r   r"   r6   9   s
   r6   c                   @  s   e Zd ZdZdS )ÚSocketStreamzu
    Transports bytes over a socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    N©r(   r)   r*   Ú__doc__r   r   r   r"   rF   _   s   rF   c                   @  s8   e Zd Zeddddœdd„ƒZedddd	œd
d„ƒZdS )ÚUNIXSocketStreamÚbyteszCollection[int | IOBase]r   )ÚmessageÚfdsr   c                 Ã  s   dS )zð
        Send file descriptors along with a message to the peer.

        :param message: a non-empty bytestring
        :param fds: a collection of files (either numeric file descriptors or open file
            or socket objects)
        Nr   )r!   rK   rL   r   r   r"   Úsend_fdsh   s    zUNIXSocketStream.send_fdsr/   ztuple[bytes, list[int]])ÚmsglenÚmaxfdsr   c                 Ã  s   dS )a  
        Receive file descriptors along with a message from the peer.

        :param msglen: length of the message to expect from the peer
        :param maxfds: maximum number of file descriptors to expect from the peer
        :return: a tuple of (message, file descriptors)
        Nr   )r!   rN   rO   r   r   r"   Úreceive_fdsr   s    zUNIXSocketStream.receive_fdsN)r(   r)   r*   r   rM   rP   r   r   r   r"   rI   g   s   	rI   c                   @  s6   e Zd ZdZeddœdd„ƒZdddd	d
œdd„ZdS )ÚSocketListenerz}
    Listens to incoming socket connections.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    rF   r   c                 Ã  s   dS )zAccept an incoming connection.Nr   r    r   r   r"   Úaccept„   s    zSocketListener.acceptNzCallable[[SocketStream], Any]zTaskGroup | Noner   )ÚhandlerÚ
task_groupr   c              	   Ã  s€   ddl m} tƒ 4 I d H šL}|d u r6| |ƒ ¡I d H }|  ¡ I d H }| ||¡ q6W d   ƒI d H  q|1 I d H sr0    Y  d S )Nr   )Úcreate_task_group)Ú rU   r   Úenter_async_contextrR   Z
start_soon)r!   rS   rT   rU   ÚstackÚstreamr   r   r"   Úserveˆ   s    zSocketListener.serve)N)r(   r)   r*   rH   r   rR   rZ   r   r   r   r"   rQ   }   s
    ýrQ   c                   @  s$   e Zd ZdZdddddœdd„Zd	S )
Ú	UDPSocketz{
    Represents an unconnected UDP socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    rJ   Ústrr/   r   )ÚdataÚhostÚportr   c                 Ã  s   |   |||ff¡I dH S )z^
        Alias for :meth:`~.UnreliableObjectSendStream.send` ((data, (host, port))).

        N©Úsend)r!   r]   r^   r_   r   r   r"   ÚsendtoŸ   s    zUDPSocket.sendtoN©r(   r)   r*   rH   rb   r   r   r   r"   r[   ˜   s   r[   c                   @  s   e Zd ZdZdS )ÚConnectedUDPSocketzy
    Represents an connected UDP socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    NrG   r   r   r   r"   rd   §   s   rd   c                   @  s"   e Zd ZdZddddœdd„ZdS )	ÚUNIXDatagramSocketz…
    Represents an unconnected Unix datagram socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    rJ   r\   r   )r]   Úpathr   c                 Ã  s   |   ||f¡I dH S )zCAlias for :meth:`~.UnreliableObjectSendStream.send` ((data, path)).Nr`   )r!   r]   rf   r   r   r"   rb   ¸   s    zUNIXDatagramSocket.sendtoNrc   r   r   r   r"   re   ¯   s   re   c                   @  s   e Zd ZdZdS )ÚConnectedUNIXDatagramSocketz‚
    Represents a connected Unix datagram socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    NrG   r   r   r   r"   rg   ½   s   rg   )5Ú
__future__r   ÚsocketÚabcr   Úcollections.abcr   r   r   Ú
contextlibr   Úior   Ú	ipaddressr	   r
   r   Útypesr   Útypingr   r   r   Z_core._typedattrr   r   r   Z_streamsr   r   r   Ú_tasksr   r\   ZIPAddressTypeÚtupler/   ZIPSockAddrTyper-   rJ   ZUDPPacketTypeZUNIXDatagramPacketTyper   r   r+   r6   rF   rI   rQ   r[   rd   re   rg   r   r   r   r"   Ú<module>   s<   &
ÿ