
    gG                       U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z	m
Z
mZmZmZ d dlZd dlZd dlmZmZ e	r(d dl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 eej         ej!        f         Z"d
e#d<   d*dZ$d+dZ%d+dZ&d,dZ'd-dZ(ej)         G d d                      Z*ej)         G d d                      Z+ej)         G d d                       Z,ej)         G d! d"ej-        j.                              Z/ej)         G d# d$ej-        j0                              Z1e G d% d&                      Z2e G d' d(ej        j3        e)                      Z4dS ).    )annotationsN)TYPE_CHECKINGAnyNoReturnUnionoverload)NoPublicConstructorfinal)Iterable)AddressFamily
SocketKind)TracebackType)BufferSelf	TypeAlias)AddressFormatr   	IPAddressipreturnintc                    t          | t          j                  rt          j        j        S t          | t          j                  rt          j        j        S t          d          )Nz!Unhandled IPAddress instance type)	
isinstance	ipaddressIPv4AddresstriosocketAF_INETIPv6AddressAF_INET6NotImplementedError)r   s    b/var/www/html/nodeJS/PythonScripts/venv3.11/lib/python3.11/site-packages/trio/testing/_fake_net.py_family_forr"   +   sQ    "i+,, ${""	B	-	.	. ${##
A
B
BB    familyc                    | t           j        j        k    rt          j        d          S | t           j        j        k    rt          j        d          S t          d          )N0.0.0.0::Unhandled ip address familyr   r   r   r   
ip_addressr   r    r$   s    r!   _wildcard_ip_forr,   3   sS    $$$#I...	4;'	'	'#D)))
;
<
<<r#   c                    | t           j        j        k    rt          j        d          S | t           j        j        k    rt          j        d          S t          d          )N	127.0.0.1::1r(   r)   r+   s    r!   _localhost_ip_forr0   <   sS    $$$#K000	4;'	'	'#E***
;
<
<<r#   coder   c                F    t          | t          j        |                     N)OSErrorosstrerror)r1   s    r!   	_fake_errr7   D   s    
$D))
*
**r#   databytesbuffersIterable[Buffer]c                   d}|D ]}| ||t          |          j        z            }t          |          5 }||d t          |          <   d d d            n# 1 swxY w Y   |t          |          z  }|t          |           k    r n|S )Nr   )
memoryviewnbyteslen)r8   r:   writtenbuf
next_piecembufs         r!   _scatterrD   H   s    G  'Gjoo.D$DDE
__ 	1&0D"3z??"#	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	13z??"c$iiE  Ns   AA	A	c                  D    e Zd ZU ded<   ded<   ddZedd	            Zd
S )UDPEndpointr   r   r   portr   +tuple[str, int] | tuple[str, int, int, int]c                t    | j         j        | j        f}t          | j         t          j                  r|dz  }|S )Nr   r   )r   
compressedrG   r   r   r   )selfsockaddrs     r!   as_python_sockaddrzUDPEndpoint.as_python_sockaddrY   s?    GIA
 dgy455 	Hr#   rM   c                Z    |d d         \  }} | t          j        |          |          S )N   )r   rG   )r   r*   )clsrM   r   rG   s       r!   from_python_sockaddrz UDPEndpoint.from_python_sockaddrb   s5    
 BQB<Dsi*2..T::::r#   Nr   rH   )rM   rH   r   rF   )__name__
__module____qualname____annotations__rN   classmethodrR    r#   r!   rF   rF   T   s\         MMMIII    ; ; ; [; ; ;r#   rF   c                      e Zd ZU ded<   dS )
UDPBindingrF   localN)rT   rU   rV   rW   rY   r#   r!   r[   r[   k   s         r#   r[   c                  Z    e Zd ZU ded<   ded<    ej        d           Zded<   dd	Zd
S )	UDPPacketrF   sourcedestinationc                *    |                                  S r3   )hex)ps    r!   <lambda>zUDPPacket.<lambda>u   s     r#   )reprr9   payloadr   c                :    t          | j        | j        |          S )Nr_   r`   rf   )r^   r`   r_   )rL   rf   s     r!   replyzUDPPacket.replyx   s'    #
 
 
 	
r#   N)rf   r9   r   r^   )rT   rU   rV   rW   attrsfieldrf   ri   rY   r#   r!   r^   r^   q   sf          U[&7&7888G8888
 
 
 
 
 
r#   r^   c                  "    e Zd ZU ded<   dd	Zd
S )FakeSocketFactoryFakeNetfake_netr$   r   type_protor   
FakeSocketc                F    t                               | j        |||          S r3   )rr   _createro   )rL   r$   rp   rq   s       r!   r   zFakeSocketFactory.socket   s    !!$-FFFr#   N)r$   r   rp   r   rq   r   r   rr   )rT   rU   rV   rW   r   rY   r#   r!   rm   rm      s<         G G G G G Gr#   rm   c                  4    e Zd ZU ded<   	 	 	 	 dddZddZdS )FakeHostnameResolverrn   ro   r   hostbytes | NonerG   bytes | str | int | Noner$   r   typerq   flagsr   qlist[tuple[AddressFamily, SocketKind, int, str, tuple[str, int] | tuple[str, int, int, int] | tuple[int, bytes]]]c                $   K   t          d          NzFakeNet doesn't do fake DNS yetr    )rL   rw   rG   r$   rz   rq   r{   s          r!   getaddrinfoz FakeHostnameResolver.getaddrinfo   s      " ""CDDDr#   rM   rH   tuple[str, str]c                $   K   t          d          r~   r   )rL   rM   r{   s      r!   getnameinfoz FakeHostnameResolver.getnameinfo   s      
 ""CDDDr#   N)r   r   r   r   )rw   rx   rG   ry   r$   r   rz   r   rq   r   r{   r   r   r|   )rM   rH   r{   r   r   r   )rT   rU   rV   rW   r   r   rY   r#   r!   rv   rv      sh          E E E E E&E E E E E Er#   rv   c                  6    e Zd ZddZddZdd	ZddZddZdS )rn   r   Nonec                   t          j        d                                          | _        t          j        d                                          | _        t          t          dd                    | _        i | _	        d | _
        d S )Nz	1.0.0.0/8z1::/16iP  i  )r   IPv4Networkhosts_auto_ipv4_iterIPv6Network_auto_ipv6_iteriterrange_auto_port_iter_boundroute_packetrL   s    r!   __init__zFakeNet.__init__   so    (4[AAGGII(4X>>DDFF#E%$7$78846 r#   bindingr[   r   rr   c                ^    || j         v rt          t          j                   || j         |<   d S r3   )r   r7   errno
EADDRINUSE)rL   r   r   s      r!   _bindzFakeNet._bind   s2    dk!!e&'''%Gr#   c                    t           j                            t          |                      t           j                            t          |                      d S r3   )r   r   set_custom_socket_factoryrm   set_custom_hostname_resolverrv   r   s    r!   enablezFakeNet.enable   sF    --.?.E.EFFF001Ed1K1KLLLLLr#   packetr^   c                l    | j         |                     |           d S |                      |           d S r3   )r   deliver_packetrL   r   s     r!   send_packetzFakeNet.send_packet   s?    $'''''f%%%%%r#   c                    t          |j                  }|| j        v r"| j        |                             |           d S d S )Nr\   )r[   r`   r   _deliver_packet)rL   r   r   s      r!   r   zFakeNet.deliver_packet   sJ    6#5666dk!!K 0088888 Dr#   Nr   r   )r   r[   r   rr   r   r   r   r^   r   r   )rT   rU   rV   r   r   r   r   r   rY   r#   r!   rn   rn      s|        ! ! ! !& & & &
M M M M& & & &     r#   rn   c                     e Zd ZdjdZedkd            Zedld            Zedmd            ZdndZdndZ	dodZ
dpdZdqdZdrdZ	 	 	 dsdtd(Zej        d)k    ses eej        d*          reZ	 	 dudvd-Zej        d)k    ses eej        d*          reZdwd/Zdwd0Zedxd3            Zedyd6            Z	 dzd{d9Zed|d<            Zed}d>            Z	 dzd~d@ZddBZddIZdddLZeddP            ZeddS            ZddVZdddXZ dudd[Z!	 ddd]Z"	 	 dudd_Z#	 	 duddaZ$ej        d)k    ses eej        d*          re$Z%dmdbZ&dmdcZ'dddZ(ddfZ)ej        d)k    ses eej        dg          rddiZ*d!S d!S d!S )rr   ro   rn   r$   r   rz   r   rq   r   r   r   c                   || _         |st          j        j        }|st          j        j        }|t          j        j        t          j        j        fvrt          d|           |t          j        j        k    rt          d|           || _        || _	        || _
        d| _        t          j        t                   t          d                    \  | _        | _        d | _        d S )Nz%FakeNet doesn't (yet) support family=z#FakeNet doesn't (yet) support type=Finf)	_fake_netr   r   r   SOCK_STREAMr   r    
SOCK_DGRAM_family_type_proto_closedopen_memory_channelr^   float_packet_sender_packet_receiver_binding)rL   ro   r$   rz   rq   s        r!   r   zFakeSocket.__init__   s     " 	)[(F 	+;*D$+-t{/CDDD%&Vf&V&VWWW4;)))%&RD&R&RSSS
595M6

,,6 62T2
 ,0r#   c                    | j         S r3   )r   r   s    r!   rz   zFakeSocket.type   s
    zr#   c                    | j         S r3   )r   r   s    r!   r$   zFakeSocket.family   s
    |r#   c                    | j         S r3   )r   r   s    r!   rq   zFakeSocket.proto   s
    {r#   c                J    | j         rt          t          j                   d S d S r3   )r   r7   r   EBADFr   s    r!   _check_closedzFakeSocket._check_closed   s,    < 	#ek"""""	# 	#r#   c                    | j         rd S d| _         | j        | j        j        | j        = | j                                         d S )NT)r   r   r   r   r   closer   s    r!   r   zFakeSocket.close   sJ    < 	F=$%dm4##%%%%%r#   addressobjectr\   booltuple[str, int]c               z   K   t           j                            | j        | j        | j        |d|           d {V S )NF)r   ipv6_v6onlyr\   )r   _socket_resolve_address_nocprz   r$   rq   )rL   r   r\   s      r!   r   z FakeSocket._resolve_address_nocp  s]       \77IKJ 8 
 
 
 
 
 
 
 
 	
r#   r   r^   c                    t          j        t          j                  5  | j                            |           d d d            d S # 1 swxY w Y   d S r3   )
contextlibsuppressr   BrokenResourceErrorr   send_nowaitr   s     r!   r   zFakeSocket._deliver_packet  s     !9:: 	4 	4++F333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   AAAaddrc                  K   |                                   | j        t          t          j                   t
          j                                         d {V  |                     |d           d {V ^}}}|g k    s
J d            t          j
        |          }t          |          | j        k    sJ |t          j
        d          k    rt          j
        d          }n,|t          j
        d          k    rt          j
        d          }|dk    rt          | j        j                  }t!          t#          ||                    }| j                            ||            || _        d S )	NTr   zTODO: handle other values?r&   r.   r'   r/   r   )r   r   r7   r   EINVALr   lowlevel
checkpointr   r   r*   r"   r$   nextr   r   r[   rF   r   )rL   r   ip_strrG   _r   r   s          r!   bindzFakeSocket.bind  sj     =$el###m&&(((((((((!%!;!;D!;!M!MMMMMMMqBwww4www!&))2$+----%i0000%k22BB9'----%e,,B199677D;r4#8#8999Wd+++r#   peerr   c                $   K   t          d          )Nz0FakeNet does not (yet) support connected socketsr   )rL   r   s     r!   connectzFakeSocket.connect2  s      !"TUUUr#   rY   r   Nr:   r;   ancdata!Iterable[tuple[int, int, Buffer]]r{   AddressFormat | Nonec                  K   |                                   t          j                                         d {V  ||                     |d           d {V }|rt          d          |rt          d|           |t          t          j                   t          
                    |          }| j        4|                     t          | j                  j        df           d {V  d                    |          }| j        J t#          | j        j        ||          }| j                            |           t+          |          S )NFr   &FakeNet doesn't support ancillary dataz"FakeNet send flags must be 0, not r   r#   rh   )r   r   r   r   r   r    r7   r   ENOTCONNrF   rR   r   r   r,   r$   rK   joinr^   r\   r   r   r?   )rL   r:   r   r{   r   r`   rf   r   s           r!   _sendmsgzFakeSocket._sendmsg5  st      	m&&((((((((( 66we6LLLLLLLLG 	P%&NOOO 	T%&R5&R&RSSS?en%%%!66w??= ))-dk::EqIJJJJJJJJJ((7##}(((=&#
 
 
 	""6***7||r#   win32sendmsg
ancbufsizeZtuple[int, list[tuple[int, int, bytes]], int, tuple[str, int] | tuple[str, int, int, int]]c                  K   |dk    rt          d          |dk    rt          d          | j        t          d          |                                  g }d}| j                                         d {V }|j                                        }t          |j        |          }|t          |j                  k     r|t          j        j        z  }||||fS )Nr   r   z&FakeNet doesn't support any recv flagszThe code will most likely hang if you try to receive on a fakesocket without a binding. If that is not the case, or you explicitly want to test that, remove this warning.)r    r   r   r   receiver_   rN   rD   rf   r?   r   r   	MSG_TRUNC)	rL   r:   r   r{   r   	msg_flagsr   r   r@   s	            r!   _recvmsg_intozFakeSocket._recvmsg_intoa  s       ??%&NOOOA::%&NOOO=  &2   	02	,4466666666-22446>733S((((..IG33r#   rH   c                    |                                   | j        | j        j                                        S | j        t
          j        j        k    rdS | j        t
          j        j        k    sJ dS )N)r&   r   )r'   r   )	r   r   r\   rN   r$   r   r   r   r   r   s    r!   getsocknamezFakeSocket.getsockname  sg    =$=&99;;;[DK///!>;$+"666669r#   c                R   |                                   | j        rt          | j        d          s
J d            | j        j        Gt	          | j        j        t
                    s
J d            | j        j                                        S t          t          j	                   d S )NremotezGThis method seems to assume that self._binding has a remote UDPEndpointz,Self._binding.remote should be a UDPEndpoint)
r   r   hasattrr   r   rF   rN   r7   r   r   r   s    r!   getpeernamezFakeSocket.getpeername  s    =$  Y Y YY Y Y }#/!M(  B B BB B B }+>>@@@%.!!!!!r#   leveloptnamec                   d S r3   rY   )rL   r   r   s      r!   
getsockoptzFakeSocket.getsockopt  s    >Acr#   buflenr9   c                   d S r3   rY   rL   r   r   r   s       r!   r   zFakeSocket.getsockopt  s    MPSr#   
int | Noneint | bytesc               V    |                                   t          d| d| d          )Nz%FakeNet doesn't implement getsockopt(, ))r   r4   r   s       r!   r   zFakeSocket.getsockopt  s8     	QeQQwQQQRRRr#   valueint | Bufferc                   d S r3   rY   )rL   r   r   r   s       r!   
setsockoptzFakeSocket.setsockopt  s    TWTWr#   optlenc                   d S r3   rY   rL   r   r   r   r   s        r!   r   zFakeSocket.setsockopt  s	     sr#   int | Buffer | Nonec                   |                                   ||ft          j        j        t          j        j        fk    r|st          d          t          d| d| d          )Nz#FakeNet always has IPV6_V6ONLY=Truez%FakeNet doesn't implement setsockopt(r   z, ...))r   r   r   IPPROTO_IPV6IPV6_V6ONLYr    r4   r   s        r!   r   zFakeSocket.setsockopt  sz     	7K$K# 
 
 
 
 &&KLLLVeVVwVVVWWWr#   r   c                    | S r3   rY   r   s    r!   	__enter__zFakeSocket.__enter__  s    r#   exc_type#builtins.type[BaseException] | None	exc_valueBaseException | None	tracebackTracebackType | Nonec                .    |                                   d S r3   )r   )rL   r  r  r
  s       r!   __exit__zFakeSocket.__exit__  s     	

r#   r8   r   c                @   K   |                      ||d            d {V S r3   )sendto)rL   r8   r{   s      r!   sendzFakeSocket.send  s.      [[ud333333333r#   _FakeSocket__data_FakeSocket__address!tuple[object, ...] | str | Bufferc                
   K   d S r3   rY   )rL   r  r  s      r!   r  zFakeSocket.sendto  s      
 cr#   _FakeSocket__flags(tuple[object, ...] | str | Buffer | Nonec                
   K   d S r3   rY   )rL   r  r  r  s       r!   r  zFakeSocket.sendto  s       cr#   argsr   c                   K   t          |          dk    r|\  }}d}n)t          |          dk    r|\  }}}nt          d          |                     |gg ||           d {V S )NrP   r      zwrong number of arguments)r?   	TypeErrorr   )rL   r  r8   r   r{   s        r!   r  zFakeSocket.sendto  s       t99>> MD'EEYY!^^#' D%7888]]D62ug>>>>>>>>>r#   bufsizec                H   K   |                      ||           d {V \  }}|S r3   )recvfrom)rL   r  r{   r8   _addresss        r!   recvzFakeSocket.recv
  s4      #}}We<<<<<<<<hr#   rA   r>   c                J   K   |                      |||           d {V \  }}|S r3   )recvfrom_into)rL   rA   r>   r{   	got_bytesr  s         r!   	recv_intozFakeSocket.recv_into  s:      $($6$6sFE$J$JJJJJJJ	8r#   tuple[bytes, AddressFormat]c                P   K   |                      ||           d {V \  }}}}||fS r3   )_recvmsg)rL   r  r{   r8   _ancdata
_msg_flagsr   s          r!   r  zFakeSocket.recvfrom  s@      
 59MM'54Q4Q.Q.Q.Q.Q.Q.Q+h
GW}r#   tuple[int, AddressFormat]c                   K   |dk    r'|t          |          j        k    rt          d          |                     |gd|           d {V \  }}}}||fS )Nr   zpartial recvfrom_into)r=   r>   r    r   )rL   rA   r>   r{   
got_nbytesr(  r)  r   s           r!   r"  zFakeSocket.recvfrom_into  s       Q;;6Z__%;;;%&=>>>:>:L:LE;
 ;
 5
 5
 5
 5
 5
 5
1
Hj'
 7""r#   >tuple[bytes, list[tuple[int, int, bytes]], int, AddressFormat]c                   K   t          |          }|                     |g||           d {V \  }}}}t          |d |                   |||fS r3   )	bytearrayr   r9   )	rL   r  r   r{   rA   r,  r   r   r   s	            r!   r'  zFakeSocket._recvmsg)  s~         8<8J8JE9
 9
 3
 3
 3
 3
 3
 3
/
GY
 c+:+&'')WEEr#   c                     t          d          )Nz&can't get fileno() for FakeNet socketsr   r   s    r!   filenozFakeSocket.fileno<  s    !"JKKKr#   c                     t          d          )Nzcan't detach() a FakeNet socketr   r   s    r!   detachzFakeSocket.detach?  s    !"CDDDr#   c                    dS )NFrY   r   s    r!   get_inheritablezFakeSocket.get_inheritableB  s    ur#   inheritablec                (    |rt          d          d S )Nz&FakeNet can't make inheritable socketsr   )rL   r6  s     r!   set_inheritablezFakeSocket.set_inheritableE  s&     	P%&NOOO	P 	Pr#   share
process_idc                     t          d          )NzFakeNet can't share socketsr   )rL   r:  s     r!   r9  zFakeSocket.shareM  s    %&CDDDr#   )
ro   rn   r$   r   rz   r   rq   r   r   r   )r   r   )r   r   )r   r   r   )r   r   r\   r   r   r   r   )r   r   r   r   )r   r   r   r   )rY   r   N)
r:   r;   r   r   r{   r   r   r   r   r   rJ   )r:   r;   r   r   r{   r   r   r   rS   )r   r   r   r   r   r   )r   r   r   r   r   r   r   r9   r3   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )
r   r   r   r   r   r   r   r   r   r   )
r   r   r   r   r   r   r   r   r   r   )r   r   )r  r  r  r	  r
  r  r   r   )r   )r8   r   r{   r   r   r   )r  r   r  r  r   r   )r  r   r  r   r  r  r   r   )r  r   r   r   )r  r   r{   r   r   r9   )rA   r   r>   r   r{   r   r   r   )r  r   r{   r   r   r%  )rA   r   r>   r   r{   r   r   r*  )r  r   r   r   r{   r   r   r-  )r   r   )r6  r   r   r   )r:  r   r   r9   )+rT   rU   rV   r   propertyrz   r$   rq   r   r   r   r   r   r   r   sysplatformr   r   r   r   r   recvmsg_intor   r   r   r   r   r  r  r  r  r   r$  r  r"  r'  recvmsgr1  r3  r5  r8  r9  rY   r#   r!   rr   rr      s       0 0 0 0@    X    X    X# # # #& & & &
 
 
 
4 4 4 4       *V V V V 68(,% % % % %N |w %gfmY??  
 	"4 "4 "4 "4 "4H |w %gfmY??  %   " " " " AAA XAPPP XP "S S S S S WWW XW   X "X X X X X,      4 4 4 4 4    X    X? ? ? ?               	# # # # #$ 	F F F F F |w %gfmY??  L L L LE E E E   P P P P |w %gfmW== 	E 	E 	E 	E 	E 	E	 r#   rr   )	metaclass)r   r   r   r   )r$   r   r   r   )r1   r   r   r   )r8   r9   r:   r;   r   r   )5
__future__r   r   r   r   r5   r   r=  typingr   r   r   r   r   rj   r   
trio._utilr	   r
   builtinscollections.abcr   r   r   typesr   typing_extensionsr   r   r   trio._socketr   r   r   r   rW   r"   r,   r0   r7   rD   frozenrF   r[   r^   abcSocketFactoryrm   HostnameResolverrv   rn   
SocketTyperr   rY   r#   r!   <module>rO     s   # " " " " " "          				  



                1 1 1 1 1 1 1 1 +OOO((((((00000000######9999999999******Y2I4IIJ	 J J J JC C C C= = = == = = =+ + + +	 	 	 	 ; ; ; ; ; ; ; ;,        
 
 
 
 
 
 
 
 
 G G G G G. G G G E E E E E484 E E E<                F BE BE BE BE BE'3F BE BE BE BE BE BEr#   