o
    ;'hv  ã                   @  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„Zddd„ZdS )Ú_NullAsyncContextManagerÚreturnÚNonec                 Ã  ó   �d S ©N© ©Úselfr   r   úHC:\Users\shubh\Videos\agent\nova\Lib\site-packages\anyio/abc/_sockets.pyÚ
__aenter__   s   €z#_NullAsyncContextManager.__aenter__Úexc_typeútype[BaseException] | NoneÚexc_valúBaseException | NoneÚexc_tbúTracebackType | Noneúbool | Nonec                 Ã  r   r   r   )r!   r$   r&   r(   r   r   r"   Ú	__aexit__!   s   €z"_NullAsyncContextManager.__aexit__N)r   r   )r$   r%   r&   r'   r(   r)   r   r*   )Ú__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   r0   Ú__annotations__r2   r4   r6   r7   r8   r   r   r   r"   r/   *   s   
 r/   c                   @  s,   e Zd Zed	dd„ƒZeed
dd„ƒƒZdS )Ú_SocketProviderr   úMapping[Any, Callable[[], Any]]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y2   d ‰Y nw ˆd ur@‡fdd„|tj	< ˆjjt
jt
jfv rd‡fdd„|tj< ˆd urdˆd	 ‰‡fd
d„|tj< |S )Nr   )Úconvert_ipv6_sockaddrc                     s   ˆ j jS r   )Ú_raw_socketr0   r   r    r   r"   Ú<lambda>?   s    z2_SocketProvider.extra_attributes.<locals>.<lambda>c                     s   ˆ ˆj  ¡ ƒS r   ©r=   Úgetsocknamer   )Úconvertr!   r   r"   r>   @   s    ÿc                     s   ˆ j S r   )r=   r   r    r   r"   r>   C   ó    c                     ó   ˆ S r   r   r   )Úpeernamer   r"   r>   L   ó    c                     s   ˆ j  ¡ d S )Nr   r?   r   r    r   r"   r>   Q   s    r   c                     rC   r   r   r   )r8   r   r"   r>   U   rE   )Z_core._socketsr<   r/   r0   r2   r6   r=   ÚgetpeernameÚOSErrorr7   r   ÚAF_INETÚAF_INET6r4   r8   )r!   Ú
attributesr   )rA   rD   r8   r!   r"   Úextra_attributes:   s&   ûÿ
ÿz _SocketProvider.extra_attributesr5   c                 C  s   d S r   r   r    r   r   r"   r=   Y   s   z_SocketProvider._raw_socketN)r   r;   )r   r5   )r,   r-   r.   ÚpropertyrK   r   r=   r   r   r   r"   r:   9   s    r:   c                   @  ó   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"   rN   _   ó    rN   c                   @  s(   e Zd Zeddd„ƒZeddd„ƒZdS )ÚUNIXSocketStreamÚmessageÚbytesÚfdsúCollection[int | IOBase]r   r   c                 Ã  ó   �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!   rS   rU   r   r   r"   Úsend_fdsh   rB   zUNIXSocketStream.send_fdsÚmsglenr3   Úmaxfdsútuple[bytes, list[int]]c                 Ã  rW   )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!   rY   rZ   r   r   r"   Úreceive_fdsr   rB   zUNIXSocketStream.receive_fdsN)rS   rT   rU   rV   r   r   )rY   r3   rZ   r3   r   r[   )r,   r-   r.   r   rX   r\   r   r   r   r"   rR   g   s
    	rR   c                   @  s,   e Zd ZdZeddd„ƒZ	dddd„ZdS )ÚSocketListenerz}
    Listens to incoming socket connections.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    r   rN   c                 Ã  rW   )zAccept an incoming connection.Nr   r    r   r   r"   Úaccept„   rB   zSocketListener.acceptNÚhandlerúCallable[[SocketStream], Any]Ú
task_groupúTaskGroup | Noner   c              	   Ã  sp   �ddl m} tƒ 4 I d H š}|d u r| |ƒ ¡I d H }	 |  ¡ I d H }| ||¡ q1 I d H s1w   Y  d S )Nr   )Úcreate_task_group)Ú rc   r   Úenter_async_contextr^   Z
start_soon)r!   r_   ra   rc   ÚstackÚstreamr   r   r"   Úserveˆ   s   €þüzSocketListener.serve)r   rN   r   )r_   r`   ra   rb   r   r   )r,   r-   r.   rP   r   r^   rh   r   r   r   r"   r]   }   s    ýr]   c                   @  s   e Zd ZdZdd
d„ZdS )Ú	UDPSocketz{
    Represents an unconnected UDP socket.

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

        N©Úsend)r!   rj   rk   rm   r   r   r"   ÚsendtoŸ   s   €zUDPSocket.sendtoN)rj   rT   rk   rl   rm   r3   r   r   ©r,   r-   r.   rP   rp   r   r   r   r"   ri   ˜   s    ri   c                   @  rM   )ÚConnectedUDPSocketzy
    Represents an connected UDP socket.

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

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    rj   rT   Úpathrl   r   r   c                 Ã  s   �|   ||f¡I dH S )zCAlias for :meth:`~.UnreliableObjectSendStream.send` ((data, path)).Nrn   )r!   rj   rt   r   r   r"   rp   ¸   s   €zUNIXDatagramSocket.sendtoN)rj   rT   rt   rl   r   r   rq   r   r   r   r"   rs   ¯   s    rs   c                   @  rM   )ÚConnectedUNIXDatagramSocketz‚
    Represents a connected Unix datagram socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    NrO   r   r   r   r"   ru   ½   rQ   ru   )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   rl   ZIPAddressTypeÚtupler3   ZIPSockAddrTyper1   rT   ZUDPPacketTypeZUNIXDatagramPacketTyper   r   r/   r:   rN   rR   r]   ri   rr   rs   ru   r   r   r   r"   Ú<module>   s>    &
ÿ