
    Mh3                       U d dl mZ d dlZd dl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mZ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" ejF                  dk\  rd dlm$Z$ nd dl%m$Z$ ee&eef   Z'de(d<   e)e&e*f   Z+de(d<   ee+e&f   Z,de(d<   e)e-e+f   Z.de(d<   e)e-e&f   Z/de(d<    ed      Z0ejb                  fddd	 	 	 	 	 	 	 	 	 	 	 d.dZ2 G d de      Z3 G d de      Z4 G d  d!ee4      Z5 G d" d#e5      Z6 G d$ d%ee5   e4      Z7 G d& d'e e.   e4      Z8 G d( d)e e-   e4      Z9 G d* d+e e/   e4      Z: G d, d-e e-   e4      Z;y)/    )annotationsN)abstractmethod)Callable
CollectionMapping)AsyncExitStack)IOBase)IPv4AddressIPv6Address)AddressFamily)AnyTypeVarUnion   )get_async_backend)TypedAttributeProviderTypedAttributeSettyped_attribute   )
ByteStreamListenerUnreliableObjectStream)	TaskGroup)   
   )	TypeAliasr   IPAddressTypeIPSockAddrTypeSockAddrTypeUDPPacketTypeUNIXDatagramPacketTypeT_RetvalF)require_connectedrequire_boundc               f   t        | t              r	 t        j                  |       }n?t        | t        j                        r| }n"t        dt        |       j                   d      	 |r	 |j                          |r^	 |j                  t        j                  t        j                  fv r|j                         d   }n|j                         }|st        d      |t        j                  k7  r>|j                  |k7  r/t        d|j                    d	|j                  j                          |j                  |k7  r/t        d
|j                    d	|j                  j                          	 |j'                  d       |S # t        $ rK}|j                  t        j
                  k(  rt        d      ||rt        d      ||rt        d      | d }~ww xY w# t        $ r}t        d      |d }~ww xY w# t        $ r d }Y 2w xY w# t"        $ r" t        | t              r|j%                           w xY w)N)filenoz.the file descriptor does not refer to a socketzthe socket must be connectedz+the socket must be bound to a local addresszexpected an int or socket, got z insteadr   z"address family mismatch: expected z, got zsocket type mismatch: expected F)
isinstanceintsocketOSErrorerrnoENOTSOCK
ValueError	TypeErrortype__qualname__getpeernamefamilyAF_INETAF_INET6getsockname	AF_UNSPECnameBaseExceptiondetachsetblocking)
sock_or_fd	sock_typeaddr_familyr#   r$   sockexc
bound_addrs           j/var/www/pru.catia.catastroantioquia-mas.com/valormasv2/lib/python3.12/site-packages/anyio/abc/_sockets.py_validate_socketrB   $   s"    *c"	==
3D 
J	.-d:.>.K.K-LHU
 	
"J  " ";;6>>6??"CC!%!1!1!3A!6J!%!1!1!3J  !NOO&***t{{k/I4[5E5E4Ff;;##$& 
 99	!1)..1A		GWX  " 	UKo  
	yyENN* D # !?@cI !NOUXX
	,  J !?@cIJ  "!
"   j#&KKMsn   E? )H ,G <H ?AG3 BH ?	GAGG	G0G++G00H 3H>H HH +H0c                      e Zd ZU dZ 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)SocketAttributea  
    .. attribute:: family
        :type: socket.AddressFamily

        the address family of the underlying socket

    .. attribute:: local_address
        :type: tuple[str, int] | str

        the local address the underlying socket is connected to

    .. attribute:: local_port
        :type: int

        for IP based sockets, the local port the underlying socket is bound to

    .. attribute:: raw_socket
        :type: socket.socket

        the underlying stdlib socket object

    .. attribute:: remote_address
        :type: tuple[str, int] | str

        the remote address the underlying socket is connected to

    .. attribute:: remote_port
        :type: int

        for IP based sockets, the remote port the underlying socket is connected to
    r   r2   r   local_addressr(   
local_portsocket.socket
raw_socketremote_addressremote_portN)__name__
__module__r0   __doc__r   r2   __annotations__rE   rF   rH   rI   rJ        rA   rD   rD   i   sX    @ ,-FM-"1"3M<3%'J' / 1J1#2#4NL4&(K(rP   rD   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 N)_raw_socketr2   selfs   rA   <lambda>z2_SocketProvider.extra_attributes.<locals>.<lambda>   s    D,<,<,C,C rP   c                 D      j                   j                               S rV   rW   r5   )convertrY   s   rA   rZ   z2_SocketProvider.extra_attributes.<locals>.<lambda>   s    7  ,,.4 rP   c                      j                   S rV   )rW   rX   s   rA   rZ   z2_SocketProvider.extra_attributes.<locals>.<lambda>   s    0@0@ rP   c                      S rV   rO   )peernames   rA   rZ   z2_SocketProvider.extra_attributes.<locals>.<lambda>   s     rP   c                 >     j                   j                         d   S )Nr   r\   rX   s   rA   rZ   z2_SocketProvider.extra_attributes.<locals>.<lambda>   s    ((446q9 rP   r   c                      S rV   rO   )rJ   s   rA   rZ   z2_SocketProvider.extra_attributes.<locals>.<lambda>   s    + rP   )_core._socketsrT   rD   r2   rE   rH   rW   r1   r*   rI   r   r3   r4   rF   rJ   )rY   
attributesr]   r`   rJ   s   ` @@@rA   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 rV   rO   rX   s    rA   rW   z_SocketProvider._raw_socket   s     	rP   N)returnzMapping[Any, Callable[[], Any]])rg   rG   )rK   rL   r0   propertyre   r   rW   rO   rP   rA   rR   rR      s0     <   rP   rR   c                  "    e Zd ZdZedd       Zy)SocketStreamzu
    Transports bytes over a socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    c                   K   t        |t        j                  d      }t               j	                  |       d{   S 7 w)aH  
        Wrap an existing socket object or file descriptor as a socket stream.

        The newly created socket wrapper takes ownership of the socket being passed in.
        The existing socket must already be connected.

        :param sock_or_fd: a socket object or file descriptor
        :return: a socket stream

        Tr#   N)rB   r)   SOCK_STREAMr   wrap_stream_socketclsr;   r>   s      rA   from_socketzSocketStream.from_socket   s7       
F,>,>RVW&(;;DAAAA   9AA AN)r;   socket.socket | intrg   rj   rK   rL   r0   rM   classmethodrq   rO   rP   rA   rj   rj      s     B BrP   rj   c                  B    e Zd Zedd       Zedd       Zedd       Zy)UNIXSocketStreamc                   K   t        |t        j                  t        j                  d      }t	               j                  |       d{   S 7 w)aR  
        Wrap an existing socket object or file descriptor as a UNIX socket stream.

        The newly created socket wrapper takes ownership of the socket being passed in.
        The existing socket must already be connected.

        :param sock_or_fd: a socket object or file descriptor
        :return: a UNIX socket stream

        Trl   N)rB   r)   rm   AF_UNIXr   wrap_unix_stream_socketro   s      rA   rq   zUNIXSocketStream.from_socket   sA       **FNNd
 '(@@FFFF   AA
AAc                   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)
        NrO   )rY   messagefdss      rA   send_fdszUNIXSocketStream.send_fds           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)
        NrO   )rY   msglenmaxfdss      rA   receive_fdszUNIXSocketStream.receive_fds   r   r   N)r;   rs   rg   rw   )r}   bytesr~   zCollection[int | IOBase]rg   None)r   r(   r   r(   rg   ztuple[bytes, list[int]])rK   rL   r0   ru   rq   r   r   r   rO   rP   rA   rw   rw      s>    G G     rP   rw   c                  R    e Zd ZdZe	 	 	 	 d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   t        |t        j                  d      }t               j	                  |       d{   S 7 w)a  
        Wrap an existing socket object or file descriptor as a socket listener.

        The newly created listener takes ownership of the socket being passed in.

        :param sock_or_fd: a socket object or file descriptor
        :return: a socket listener

        Tr$   N)rB   r)   rm   r   wrap_listener_socketro   s      rA   rq   zSocketListener.from_socket   s6       
F,>,>dS&(==dCCCCrr   c                   K   yw)zAccept an incoming connection.NrO   rX   s    rA   acceptzSocketListener.accept  r   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) r   r   enter_async_contextr   
start_soon)rY   handler
task_groupr   stackstreams         rA   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;   rs   rg   r   )rg   rj   rV   )r   zCallable[[SocketStream], Any]r   zTaskGroup | Nonerg   r   )	rK   rL   r0   rM   ru   rq   r   r   r   rO   rP   rA   r   r      sk     D'D 
D D  - - (,7.7 %7 
	7rP   r   c                  *    e Zd ZdZedd       ZddZy)	UDPSocketz{
    Represents an unconnected UDP socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    c                   K   t        |t        j                  d      }t               j	                  |       d{   S 7 w)aI  
        Wrap an existing socket object or file descriptor as a UDP socket.

        The newly created socket wrapper takes ownership of the socket being passed in.
        The existing socket must be bound to a local address.

        :param sock_or_fd: a socket object or file descriptor
        :return: a UDP socket

        Tr   N)rB   r)   
SOCK_DGRAMr   wrap_udp_socketro   s      rA   rq   zUDPSocket.from_socket)  s6       
F,=,=TR&(88>>>>rr   c                H   K   | j                  |||ff       d{   S 7 w)z^
        Alias for :meth:`~.UnreliableObjectSendStream.send` ((data, (host, port))).

        Nsend)rY   datahostports       rA   sendtozUDPSocket.sendto8  s&     
 YYtTl34444s   " "N)r;   rs   rg   r   )r   r   r   strr   r(   rg   r   rK   rL   r0   rM   ru   rq   r   rO   rP   rA   r   r   "  s      ? ?5rP   r   c                  "    e Zd ZdZedd       Zy)ConnectedUDPSocketzy
    Represents an connected UDP socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    c                   K   t        |t        j                  d      }t               j	                  |       d{   S 7 w)aV  
        Wrap an existing socket object or file descriptor as a connected UDP socket.

        The newly created socket wrapper takes ownership of the socket being passed in.
        The existing socket must already be connected.

        :param sock_or_fd: a socket object or file descriptor
        :return: a connected UDP socket

        Trl   N)rB   r)   r   r   wrap_connected_udp_socketro   s      rA   rq   zConnectedUDPSocket.from_socketG  s=       "

 '(BB4HHHHrr   N)r;   rs   rg   r   rt   rO   rP   rA   r   r   @  s     I IrP   r   c                  2    e Zd ZdZe	 	 	 	 dd       ZddZy)UNIXDatagramSocketz
    Represents an unconnected Unix datagram socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    c                   K   t        |t        j                  t        j                        }t	               j                  |       d{   S 7 w)a'  
        Wrap an existing socket object or file descriptor as a UNIX datagram
        socket.

        The newly created socket wrapper takes ownership of the socket being passed in.

        :param sock_or_fd: a socket object or file descriptor
        :return: a UNIX datagram socket

        N)rB   r)   r   ry   r   wrap_unix_datagram_socketro   s      rA   rq   zUNIXDatagramSocket.from_socketd  s:       
F,=,=v~~N&(BB4HHHHs   AAA	Ac                D   K   | j                  ||f       d{   S 7 w)zCAlias for :meth:`~.UnreliableObjectSendStream.send` ((data, path)).Nr   )rY   r   paths      rA   r   zUNIXDatagramSocket.sendtov  s     YYd|,,,,s     N)r;   rs   rg   r   )r   r   r   r   rg   r   r   rO   rP   rA   r   r   [  s6     I'I 
I I"-rP   r   c                  *    e Zd ZdZe	 	 	 	 dd       Zy)ConnectedUNIXDatagramSocketz
    Represents a connected Unix datagram socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    c                   K   t        |t        j                  t        j                  d      }t	               j                  |       d{   S 7 w)ar  
        Wrap an existing socket object or file descriptor as a connected UNIX datagram
        socket.

        The newly created socket wrapper takes ownership of the socket being passed in.
        The existing socket must already be connected.

        :param sock_or_fd: a socket object or file descriptor
        :return: a connected UNIX datagram socket

        Trl   N)rB   r)   r   ry   r   #wrap_connected_unix_datagram_socketro   s      rA   rq   z'ConnectedUNIXDatagramSocket.from_socket  sA        ))6>>T
 '(LLTRRRRr{   N)r;   rs   rg   r   rt   rO   rP   rA   r   r   {  s1     S'S 
%S SrP   r   )r;   rs   r<   zsocket.SocketKindr=   zsocket.AddressFamilyr#   boolr$   r   rg   rG   )<
__future__r   r+   r)   sysabcr   collections.abcr   r   r   
contextlibr   ior	   	ipaddressr
   r   r   typingr   r   r   _core._eventloopr   _core._typedattrr   r   r   _streamsr   r   r   _tasksr   version_infor   typing_extensionsr   r   rN   tupler(   r   r   r   r    r!   r"   r6   rB   rD   rR   rj   rw   r   r   r   r   r   rO   rP   rA   <module>r      s   "   
  9 9 %  .   & & 0 
 C B w + k;!>?y ?!#s(O	 + 34i 4 !67y 7$)%*$5 	 5: )/(8(8B
 $B#B B &B
 B B BJ&)' &)R#, #LB: B.$| $N)7Xl+_ )7X5&}5 5<I/6 I6-12O-@S"8"? SrP   