
    RPf}                        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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      Z+ G d de      Z, G d de      Z- G d dee-      Z. G d de.      Z/ G d dee.   e-      Z0 G d dee(   e-      Z1 G d d ee'   e-      Z2 G d! d"ee)   e-      Z3 G d# d$ee'   e-      Z4y)%    )annotationsN)abstractmethod)Callable
CollectionMapping)AsyncExitStack)IOBase)IPv4AddressIPv6Address)AddressFamily)TracebackType)AnyTupleTypeVarUnion   )TypedAttributeProviderTypedAttributeSettyped_attribute   )
ByteStreamListenerUnreliableObjectStream)	TaskGroupT_Retvalc                  ,    e Zd ZddZ	 	 	 	 	 	 	 	 ddZy)_NullAsyncContextManagerc                   K   y wN selfs    L/var/www/fastapitest/venv/lib/python3.12/site-packages/anyio/abc/_sockets.py
__aenter__z#_NullAsyncContextManager.__aenter__   s	        c                   K   y wr   r    )r"   exc_typeexc_valexc_tbs       r#   	__aexit__z"_NullAsyncContextManager.__aexit__!   s      r%   N)returnNone)r'   ztype[BaseException] | Noner(   zBaseException | Noner)   zTracebackType | Noner+   zbool | None)__name__
__module____qualname__r$   r*   r        r#   r   r      s2    , & %	
 
r0   r   c                      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
<   y)SocketAttributer   familySockAddrTypelocal_addressint
local_portsocket.socket
raw_socketremote_addressremote_portN)r-   r.   r/   r   r3   __annotations__r5   r7   r9   r:   r;   r    r0   r#   r2   r2   *   sP    +-FM-"1"3M<3%'J' / 1J1#2#4NL4&(K(r0   r2   c                  :    e Zd Zedd       Zeedd              Zy)_SocketProviderc                    ddl m t        j                   fdt        j                   fdt        j
                   fdi}	   j                  j                               fd|t        j                  <    j                  j                  t        j                  t        j                  fv r3 fd|t        j                  <   d   fd	|t        j                  <   |S # t        $ r d Y w xY w)
Nr   )convert_ipv6_sockaddrc                 0     j                   j                  S r   )_raw_socketr3   r!   s   r#   <lambda>z2_SocketProvider.extra_attributes.<locals>.<lambda>?   s    D,<,<,C,C r0   c                 D      j                   j                               S r   rB   getsockname)convertr"   s   r#   rC   z2_SocketProvider.extra_attributes.<locals>.<lambda>@   s    7  ,,.4 r0   c                      j                   S r   )rB   r!   s   r#   rC   z2_SocketProvider.extra_attributes.<locals>.<lambda>C   s    0@0@ r0   c                      S r   r    )peernames   r#   rC   z2_SocketProvider.extra_attributes.<locals>.<lambda>L   s     r0   c                 >     j                   j                         d   S )Nr   rE   r!   s   r#   rC   z2_SocketProvider.extra_attributes.<locals>.<lambda>Q   s    ((446q9 r0   r   c                      S r   r    )r;   s   r#   rC   z2_SocketProvider.extra_attributes.<locals>.<lambda>U   s    + r0   )_core._socketsr@   r2   r3   r5   r9   rB   getpeernameOSErrorr:   r   AF_INETAF_INET6r7   r;   )r"   
attributesrG   rJ   r;   s   ` @@@r#   extra_attributesz _SocketProvider.extra_attributes:   s    E ""$C)) , &&(@4

	/6t7G7G7S7S7U/VH
 9IJ556 ""}'<'<m>T>T&UU9 112 #&qk:M
?667!  	H	s    C+ +C98C9c                     y r   r    r!   s    r#   rB   z_SocketProvider._raw_socketY   s     	r0   N)r+   zMapping[Any, Callable[[], Any]])r+   r8   )r-   r.   r/   propertyrS   r   rB   r    r0   r#   r>   r>   9   s0     <   r0   r>   c                      e Zd ZdZy)SocketStreamzu
    Transports bytes over a socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    Nr-   r.   r/   __doc__r    r0   r#   rW   rW   _       r0   rW   c                  0    e Zd Zedd       Zedd       Zy)UNIXSocketStreamc                   K   yw)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"   messagefdss      r#   send_fdszUNIXSocketStream.send_fdsh        r%   c                   K   yw)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"   msglenmaxfdss      r#   receive_fdszUNIXSocketStream.receive_fdsr   ra   r%   N)r^   bytesr_   zCollection[int | IOBase]r+   r,   )rc   r6   rd   r6   r+   ztuple[bytes, list[int]])r-   r.   r/   r   r`   re   r    r0   r#   r\   r\   g   s(       r0   r\   c                  8    e Zd ZdZedd       Z	 d	 	 	 	 	 ddZy)SocketListenerz}
    Listens to incoming socket connections.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    c                   K   yw)zAccept an incoming connection.Nr    r!   s    r#   acceptzSocketListener.accept   ra   r%   Nc                
  K   ddl m} t               4 d {   }||j                   |              d {   }	 | j	                          d {   }|j                  ||       +7 P7 27 # 1 d {  7  sw Y   y xY ww)Nr   )create_task_group) rl   r   enter_async_contextrj   
start_soon)r"   handler
task_grouprl   stackstreams         r#   servezSocketListener.serve   s     
 	)!# 	7 	7u!#(#<#<=N=P#QQ
#{{},%%gv6 		7Q -	7 	7 	7sT   BA(BA.A*A.A,A.(B*A.,A..B 4A75B <B)r+   rW   r   )rp   zCallable[[SocketStream], Any]rq   zTaskGroup | Noner+   r,   )r-   r.   r/   rY   r   rj   rt   r    r0   r#   rh   rh   }   sA     - - (,7.7 %7 
	7r0   rh   c                      e Zd ZdZddZy)	UDPSocketz{
    Represents an unconnected UDP socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    c                H   K   | j                  |||ff       d{   S 7 w)z^
        Alias for :meth:`~.UnreliableObjectSendStream.send` ((data, (host, port))).

        Nsend)r"   datahostports       r#   sendtozUDPSocket.sendto   s&     
 YYtTl34444s   " "N)rz   rf   r{   strr|   r6   r+   r,   r-   r.   r/   rY   r}   r    r0   r#   rv   rv      s    5r0   rv   c                      e Zd ZdZy)ConnectedUDPSocketzy
    Represents an connected UDP socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    NrX   r    r0   r#   r   r      rZ   r0   r   c                      e Zd ZdZddZy)UNIXDatagramSocketz
    Represents an unconnected Unix datagram socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    c                D   K   | j                  ||f       d{   S 7 w)zCAlias for :meth:`~.UnreliableObjectSendStream.send` ((data, path)).Nrx   )r"   rz   paths      r#   r}   zUNIXDatagramSocket.sendto   s     YYd|,,,,s     N)rz   rf   r   r~   r+   r,   r   r    r0   r#   r   r      s    -r0   r   c                      e Zd ZdZy)ConnectedUNIXDatagramSocketz
    Represents a connected Unix datagram socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    NrX   r    r0   r#   r   r      rZ   r0   r   )5
__future__r   socketabcr   collections.abcr   r   r   
contextlibr   ior	   	ipaddressr
   r   r   typesr   typingr   r   r   r   _core._typedattrr   r   r   _streamsr   r   r   _tasksr   r~   IPAddressTyper6   IPSockAddrTyper4   rf   UDPPacketTypeUNIXDatagramPacketTyper   r   r2   r>   rW   r\   rh   rv   r   r   r   r    r0   r#   <module>r      s7   "   9 9 %  .    - - 
 C B c;34sCx^S()e^+,ucz* :
 
)' )#, #L: | ,7Xl+_ 765&}5 5/6 -12O-"8"? r0   