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   f/var/www/html/construction_image-detection-poc/venv/lib/python3.10/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   )_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.   propertyrL   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"   rO   _       rO   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!   rT   rV   r   r   r"   send_fdsh   rB   zUNIXSocketStream.send_fdsmsglenr3   maxfdstuple[bytes, list[int]]c                   rX   )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!   rZ   r[   r   r   r"   receive_fdsr   rB   zUNIXSocketStream.receive_fdsN)rT   rU   rV   rW   r   r   )rZ   r3   r[   r3   r   r\   )r,   r-   r.   r   rY   r]   r   r   r   r"   rS   g   s
    	rS   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   rO   c                   rX   )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) rd   r   enter_async_contextr_   
start_soon)r!   r`   rb   rd   stackstreamr   r   r"   serve   s   zSocketListener.serve)r   rO   r   )r`   ra   rb   rc   r   r   )r,   r-   r.   rQ   r   r_   rj   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`.
    datarU   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!   rl   rm   ro   r   r   r"   sendto   s   zUDPSocket.sendtoN)rl   rU   rm   rn   ro   r3   r   r   r,   r-   r.   rQ   rr   r   r   r   r"   rk      s    rk   c                   @  rN   )ConnectedUDPSocketzy
    Represents an connected UDP socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    NrP   r   r   r   r"   rt      rR   rt   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`.
    rl   rU   pathrn   r   r   c                   s   |  ||fI dH S )zCAlias for :meth:`~.UnreliableObjectSendStream.send` ((data, path)).Nrp   )r!   rl   rv   r   r   r"   rr      s   zUNIXDatagramSocket.sendtoN)rl   rU   rv   rn   r   r   rs   r   r   r   r"   ru      s    ru   c                   @  rN   )ConnectedUNIXDatagramSocketz
    Represents a connected Unix datagram socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    NrP   r   r   r   r"   rw      rR   rw   )5
__future__r   socketabcr   collections.abcr   r   r   
contextlibr   ior   	ipaddressr	   r
   r   typesr   typingr   r   r   _core._typedattrr   r   r   _streamsr   r   r   _tasksr   rn   IPAddressTypetupler3   IPSockAddrTyper1   rU   UDPPacketTypeUNIXDatagramPacketTyper   r   r/   r:   rO   rS   r^   rk   rt   ru   rw   r   r   r   r"   <module>   s>    &
