
    	h3                       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j#        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j1        fdddd9d&Z2 G d' d(e          Z3 G d) d*e          Z4 G d+ d,ee4          Z5 G d- d.e5          Z6 G d/ d0ee5         e4          Z7 G d1 d2e e.         e4          Z8 G d3 d4e e-         e4          Z9 G d5 d6e e/         e4          Z: G d7 d8e e-         e4          Z;dS ):    )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_bound
sock_or_fdsocket.socket | int	sock_typesocket.SocketKindaddr_familysocket.AddressFamilyr#   boolr$   returnsocket.socketc               r   t          | t                    rs	 t          j        |           }n# t          $ rO}|j        t          j        k    rt          d          ||rt          d          ||rt          d          | d }~ww xY wt          | t          j                  r| }n%t          dt          |           j	         d          	 |r8	 |
                                 n"# t          $ r}t          d          |d }~ww xY w|rs	 |j        t          j        t          j        fv r|                                d         }n|                                }n# t          $ r d }Y nw xY w|st          d          |t          j        k    r/|j        |k    r$t          d|j         d	|j        j                   |j        |k    r$t          d
|j         d	|j        j                   n8# t"          $ r+ t          | t                    r|                                  w xY w|                    d           |S )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)r%   r'   r)   r#   r$   sockexc
bound_addrs           _/var/www/html/web-builder-api.evdpl.com/venv/lib/python3.11/site-packages/anyio/abc/_sockets.py_validate_socketrH   $   s    *c"" 
	=
333DD 
	 
	 
	yEN** D  #  !?@@cI  !NOOUXX
	 
J	.	. 
Ud:.>.>.KUUU
 
 	
" 	JJ  """" J J J !?@@cIJ  
	P";6>6?"CCC!%!1!1!3!3A!6JJ!%!1!1!3!3J " " "!


"  P !NOOO&***t{k/I/I&[5E & &;#& &  
 9	!!X).XX	XX   "    j#&& 	KKMMM 	UKsk   - 
BA
BBG* C$ #G* $
D.C>>DG* 	AE G* E'$G* &E''BG* *5H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<   dS )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   r;   r   local_addressr1   
local_portr-   
raw_socketremote_addressremote_portN)__name__
__module__r9   __doc__r   r;   __annotations__rK   rL   rM   rN   rO        rG   rJ   rJ   i   s          @ ,O--F----"1/"3"3M3333%o''J'''' / 1 1J1111#2?#4#4N4444&((K((((((rU   rJ   c                  N    e Zd Zedd            Zeedd                        ZdS )	_SocketProviderr,   Mapping[Any, Callable[[], Any]]c                    ddl m t          j         fdt          j         fdt          j         fdi}	   j                                                  n# t          $ r d Y nw xY wfd|t          j	        <    j        j        t          j        t          j        fv r. fd|t          j        <   d         fd	|t          j        <   |S )
Nr   )convert_ipv6_sockaddrc                      j         j        S N)_raw_socketr;   selfs   rG   <lambda>z2_SocketProvider.extra_attributes.<locals>.<lambda>   s    D,<,C rU   c                 H      j                                                   S r\   r]   r>   )convertr_   s   rG   r`   z2_SocketProvider.extra_attributes.<locals>.<lambda>   s%    77 ,,..4 4 rU   c                      j         S r\   )r]   r^   s   rG   r`   z2_SocketProvider.extra_attributes.<locals>.<lambda>   s
    0@ rU   c                      S r\   rT   )peernames   rG   r`   z2_SocketProvider.extra_attributes.<locals>.<lambda>   s     rU   c                 B     j                                         d         S )Nr   rb   r^   s   rG   r`   z2_SocketProvider.extra_attributes.<locals>.<lambda>   s    (4466q9 rU   r   c                      S r\   rT   )rO   s   rG   r`   z2_SocketProvider.extra_attributes.<locals>.<lambda>   s    + rU   )_core._socketsrZ   rJ   r;   rK   rM   r]   r:   r3   rN   r   r<   r=   rL   rO   )r_   
attributesrc   rf   rO   s   ` @@@rG   extra_attributesz _SocketProvider.extra_attributes   s1   EEEEEE "$C$C$C$C) , , , , , &(@(@(@(@4

	/6wt7G7S7S7U7U/V/VHH 	 	 	HHH	 9I9I9I9IJ56 "}'<m>T&UUU9999 12 #&qk:M:M:M:M
?67s   "A A.-A.r-   c                    d S r\   rT   r^   s    rG   r]   z_SocketProvider._raw_socket   s	     	rU   N)r,   rX   )r,   r-   )rP   rQ   r9   propertyrk   r   r]   rT   rU   rG   rW   rW      s\           X<    ^ X  rU   rW   c                  *    e Zd ZdZedd            ZdS )SocketStreamzu
    Transports bytes over a socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    r%   r&   r,   c                   K   t          |t          j        d          }t                                          |           d{V S )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)rH   r2   SOCK_STREAMr   wrap_stream_socketclsr%   rD   s      rG   from_socketzSocketStream.from_socket   sL        
F,>RVWWW&((;;DAAAAAAAAArU   N)r%   r&   r,   ro   rP   rQ   r9   rR   classmethodrv   rT   rU   rG   ro   ro      sD          B B B [B B BrU   ro   c                  V    e Zd Zedd            Zedd
            Zedd            ZdS )UNIXSocketStreamr%   r&   r,   c                   K   t          |t          j        t          j        d          }t	                                          |           d{V S )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

        Trq   N)rH   r2   rr   AF_UNIXr   wrap_unix_stream_socketrt   s      rG   rv   zUNIXSocketStream.from_socket   sX        *FNd
 
 
 '((@@FFFFFFFFFrU   messagebytesfdsCollection[int | IOBase]Nonec                
   K   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)
        NrT   )r_   r~   r   s      rG   send_fdszUNIXSocketStream.send_fds   
        rU   msglenr1   maxfdstuple[bytes, list[int]]c                
   K   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)
        NrT   )r_   r   r   s      rG   receive_fdszUNIXSocketStream.receive_fds   r   rU   N)r%   r&   r,   rz   )r~   r   r   r   r,   r   )r   r1   r   r1   r,   r   )rP   rQ   r9   rx   rv   r   r   r   rT   rU   rG   rz   rz      sv        G G G [G     ^    ^  rU   rz   c                  N    e Zd ZdZedd            Zedd            Z	 dddZdS )SocketListenerz}
    Listens to incoming socket connections.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    r%   r&   r,   c                   K   t          |t          j        d          }t                                          |           d{V S )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)rH   r2   rr   r   wrap_listener_socketrt   s      rG   rv   zSocketListener.from_socket   sK        
F,>dSSS&((==dCCCCCCCCCrU   ro   c                
   K   dS )zAccept an incoming connection.NrT   r^   s    rG   acceptzSocketListener.accept  r   rU   NhandlerCallable[[SocketStream], Any]
task_groupTaskGroup | Noner   c                  K   ddl m} t                      4 d {V }|#|                     |                       d {V }	 |                                  d {V }|                    ||           1# 1 d {V swxY w Y   d S )Nr   )create_task_group) r   r   enter_async_contextr   
start_soon)r_   r   r   r   stackstreams         rG   servezSocketListener.serve  s     
 	)(((((!## 	7 	7 	7 	7 	7 	7 	7u!#(#<#<=N=N=P=P#Q#QQQQQQQ
7#{{}},,,,,,%%gv6667		7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s   AA55
A?A?)r%   r&   r,   r   )r,   ro   r\   )r   r   r   r   r,   r   )	rP   rQ   r9   rR   rx   rv   r   r   r   rT   rU   rG   r   r      s          D D D [D  - - - ^- (,7 7 7 7 7 7 7rU   r   c                  2    e Zd ZdZedd            ZddZdS )	UDPSocketz{
    Represents an unconnected UDP socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    r%   r&   r,   c                   K   t          |t          j        d          }t                                          |           d{V S )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)rH   r2   
SOCK_DGRAMr   wrap_udp_socketrt   s      rG   rv   zUDPSocket.from_socket)  sK        
F,=TRRR&((88>>>>>>>>>rU   datar   hoststrportr1   r   c                D   K   |                      |||ff           d{V S )z^
        Alias for :meth:`~.UnreliableObjectSendStream.send` ((data, (host, port))).

        Nsend)r_   r   r   r   s       rG   sendtozUDPSocket.sendto8  s5      
 YYtTl3444444444rU   N)r%   r&   r,   r   )r   r   r   r   r   r1   r,   r   rP   rQ   r9   rR   rx   rv   r   rT   rU   rG   r   r   "  sR          ? ? ? [?5 5 5 5 5 5rU   r   c                  *    e Zd ZdZedd            ZdS )ConnectedUDPSocketzy
    Represents an connected UDP socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    r%   r&   r,   c                   K   t          |t          j        d          }t                                          |           d{V S )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

        Trq   N)rH   r2   r   r   wrap_connected_udp_socketrt   s      rG   rv   zConnectedUDPSocket.from_socketG  sV        "
 
 

 '((BB4HHHHHHHHHrU   N)r%   r&   r,   r   rw   rT   rU   rG   r   r   @  sD          I I I [I I IrU   r   c                  2    e Zd ZdZedd            ZddZdS )UNIXDatagramSocketz
    Represents an unconnected Unix datagram socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    r%   r&   r,   c                   K   t          |t          j        t          j                  }t	                                          |           d{V S )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)rH   r2   r   r|   r   wrap_unix_datagram_socketrt   s      rG   rv   zUNIXDatagramSocket.from_socketd  sJ        
F,=v~NN&((BB4HHHHHHHHHrU   r   r   pathr   r   c                @   K   |                      ||f           d{V S )zCAlias for :meth:`~.UnreliableObjectSendStream.send` ((data, path)).Nr   )r_   r   r   s      rG   r   zUNIXDatagramSocket.sendtov  s.      YYd|,,,,,,,,,rU   N)r%   r&   r,   r   )r   r   r   r   r,   r   r   rT   rU   rG   r   r   [  sV          I I I [I"- - - - - -rU   r   c                  *    e Zd ZdZedd            ZdS )ConnectedUNIXDatagramSocketz
    Represents a connected Unix datagram socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    r%   r&   r,   c                   K   t          |t          j        t          j        d          }t	                                          |           d{V S )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

        Trq   N)rH   r2   r   r|   r   #wrap_connected_unix_datagram_socketrt   s      rG   rv   z'ConnectedUNIXDatagramSocket.from_socket  sX         )6>T
 
 
 '((LLTRRRRRRRRRrU   N)r%   r&   r,   r   rw   rT   rU   rG   r   r   {  sD          S S S [S S SrU   r   )r%   r&   r'   r(   r)   r*   r#   r+   r$   r+   r,   r-   )<
__future__r   r4   r2   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   rS   tupler1   r   r   r   r    r!   r"   r?   rH   rJ   rW   ro   rz   r   r   r   r   r   rT   rU   rG   <module>r      s   " " " " " " "   



       9 9 9 9 9 9 9 9 9 9 % % % % % %       . . . . . . . .             & & & & & & & & & & 0 0 0 0 0 0         
 C B B B B B B B B B      w       ++++++ k;!>? ? ? ? ?!#s(O + + + + 34 4 4 4 4 !67 7 7 7 7$)%*$5  5 5 5 57: )/(8B
 $B B B B B BJ&) &) &) &) &)' &) &) &)R# # # # #, # # #LB B B B B: B B B.$ $ $ $ $| $ $ $N)7 )7 )7 )7 )7Xl+_ )7 )7 )7X5 5 5 5 5&}5 5 5 5<I I I I I/6 I I I6- - - - -12O- - -@S S S S S"8"? S S S S SrU   