
    ilG                       % S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKJ	r	J
r
JrJrJr  S SKrS SKrS SKJrJr  \	(       a&  S SKrS SKJr  S SKJrJr  S SKJr  S SKJrJr  S S	KJr  \R>                  \R@                  -  r!S
\"S'   S S jr#S!S jr$S!S jr%S"S jr&S#S jr'\RP                   " S S5      5       r)\RP                   " S S5      5       r*\RP                   " S S5      5       r+\RP                   " S S\RX                  RZ                  5      5       r.\RP                   " S S\RX                  R^                  5      5       r0\ " S S5      5       r1\ " S S\R                  Rd                  \S95       r3g)$    )annotationsN)TYPE_CHECKINGAnyNoReturn	TypeAliasoverload)NoPublicConstructorfinal)Iterable)AddressFamily
SocketKind)TracebackType)BufferSelf)AddressFormatr   	IPAddressc                    [        U [        R                  5      (       a  [        R                  R
                  $ [        U [        R                  5      (       a  [        R                  R                  $ [        S5      e)Nz!Unhandled IPAddress instance type)	
isinstance	ipaddressIPv4AddresstriosocketAF_INETIPv6AddressAF_INET6NotImplementedError)ips    CC:\des-py\RoboSAPF\venv\Lib\site-packages\trio/testing/_fake_net.py_family_forr   %   sT    "i++,,{{"""	B	--	.	.{{###
A
BB    c                    U [         R                  R                  :X  a  [        R                  " S5      $ U [         R                  R
                  :X  a  [        R                  " S5      $ [        S5      e)N0.0.0.0::Unhandled ip address familyr   r   r   r   
ip_addressr   r   familys    r   _wildcard_ip_forr)   -   sT    $$$##I..	4;;''	'##D))
;
<<r    c                    U [         R                  R                  :X  a  [        R                  " S5      $ U [         R                  R
                  :X  a  [        R                  " S5      $ [        S5      e)N	127.0.0.1::1r$   r%   r'   s    r   _localhost_ip_forr-   6   sT    $$$##K00	4;;''	'##E**
;
<<r    c                B    [        U [        R                  " U 5      5      eN)OSErrorosstrerror)codes    r   	_fake_errr4   >   s    
$D)
**r    c                    SnU H^  nXU[        U5      R                  -    n[        U5       nXES [        U5      & S S S 5        U[        U5      -  nU[        U 5      :X  d  M]    U$    U$ ! , (       d  f       N4= f)Nr   )
memoryviewnbyteslen)databufferswrittenbuf
next_piecembufs         r   _scatterr?   B   sx    GGjo.D.D$DE
_&0"3z?# 3z?"c$iN  N _s   A))
A7	c                  P    \ rS rSr% S\S'   S\S'   S
S jr\    SS j5       rSrg	)UDPEndpointN   r   r   intportc                    U R                   R                  U R                  4n[        U R                   [        R
                  5      (       a  US-  nU$ )Nr   r   )r   
compressedrD   r   r   r   )selfsockaddrs     r   as_python_sockaddrUDPEndpoint.as_python_sockaddrS   sF    GGIIA
 dggy4455Hr    c                F    US S u  p#U " [         R                  " U5      US9$ )N   )r   rD   )r   r&   )clsrI   r   rD   s       r   from_python_sockaddr UDPEndpoint.from_python_sockaddr\   s)    
 BQ<i**2.T::r     Nreturn+tuple[str, int] | tuple[str, int, int, int])rI   rT   rS   rA   )	__name__
__module____qualname____firstlineno____annotations__rJ   classmethodrO   __static_attributes__rQ   r    r   rA   rA   N   s7    M
I ;=; 
; ;r    rA   c                       \ rS rSr% S\S'   Srg)
UDPBindinge   rA   localrQ   N)rU   rV   rW   rX   rY   r[   rQ   r    r   r]   r]   e   s    r    r]   c                  `    \ rS rSr% S\S'   S\S'   \R                  " S S9rS\S'   SS	 jrS
r	g)	UDPPacketk   rA   sourcedestinationc                "    U R                  5       $ r/   )hex)ps    r   <lambda>UDPPacket.<lambda>o   s
    r    )reprbytespayloadc                @    [        U R                  U R                  US9$ )Nrc   rd   rl   )ra   rd   rc   )rH   rl   s     r   replyUDPPacket.replyr   s"    ##
 	
r    rQ   N)rl   rk   rS   ra   )
rU   rV   rW   rX   rY   attrsfieldrl   ro   r[   rQ   r    r   ra   ra   k   s'    [[&78GU8
r    ra   c                  *    \ rS rSr% S\S'   SS jrSrg)FakeSocketFactoryz   FakeNetfake_netc                D    [         R                  U R                  XU5      $ r/   )
FakeSocket_createrw   )rH   r(   type_protos       r   r   FakeSocketFactory.socket~   s    !!$--FFr    rQ   N)r(   rC   r{   rC   r|   rC   rS   ry   )rU   rV   rW   rX   rY   r   r[   rQ   r    r   rt   rt   z   s    Gr    rt   c                  f    \ rS rSr% S\S'       S             S	S jjr      S
S jrSrg)FakeHostnameResolver   rv   rw   c                    #    [        S5      e7fNzFakeNet doesn't do fake DNS yetr   )rH   hostrD   r(   typer|   flagss          r   getaddrinfo FakeHostnameResolver.getaddrinfo   s     " ""CDD   c                    #    [        S5      e7fr   r   )rH   rI   r   s      r   getnameinfo FakeHostnameResolver.getnameinfo   s     
 ""CDDr   rQ   N)r   r   r   r   )r   zbytes | NonerD   zbytes | str | int | Noner(   rC   r   rC   r|   rC   r   rC   rS   zqlist[tuple[AddressFamily, SocketKind, int, str, tuple[str, int] | tuple[str, int, int, int] | tuple[int, bytes]]])rI   rT   r   rC   rS   ztuple[str, str])rU   rV   rW   rX   rY   r   r   r[   rQ   r    r   r   r      s     EE 'E 	E
 E E E
E&E=E E 
	Er    r   c                  F    \ rS rSrS	S jrS
S jrS	S jrSS jrSS jrSr	g)rv      c                    [         R                  " S5      R                  5       U l        [         R                  " S5      R                  5       U l        [        [        SS5      5      U l        0 U l	        S U l
        g )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rH   s    r   __init__FakeNet.__init__   s]    (44[AGGI(44X>DDF#E%$7846 r    c                p    XR                   ;   a  [        [        R                  5        X R                   U'   g r/   )r   r4   errno
EADDRINUSE)rH   bindingr   s      r   _bindFakeNet._bind   s&    kk!e&&'%Gr    c                    [         R                  R                  [        U 5      5        [         R                  R	                  [        U 5      5        g r/   )r   r   set_custom_socket_factoryrt   set_custom_hostname_resolverr   r   s    r   enableFakeNet.enable   s2    --.?.EF001Ed1KLr    c                d    U R                   c  U R                  U5        g U R                  U5        g r/   )r   deliver_packetrH   packets     r   send_packetFakeNet.send_packet   s*    $'f%r    c                    [        UR                  S9nX R                  ;   a  U R                  U   R                  U5        g g )Nr_   )r]   rd   r   _deliver_packet)rH   r   r   s      r   r   FakeNet.deliver_packet   s8    6#5#56kk!KK 008 r    )r   r   r   r   r   NrS   None)r   r]   r   ry   rS   r   r   ra   rS   r   )
rU   rV   rW   rX   r   r   r   r   r   r[   rQ   r    r   rv   rv      s    !&
M&r    rv   c                  t   \ rS rSr          S+S jr\S,S j5       r\S-S j5       r\S.S j5       rS/S jr	S/S jr
      S0S jrS1S	 jrS2S
 jrS3S jr   S4         S5S jjr\R"                  S:w  d  \(       d  \" \R(                  S5      (       a  \r  S6       S7S jjr\R"                  S:w  d  \(       d  \" \R(                  S5      (       a  \rS8S jrS8S jr\S9S j5       r\S:S j5       r S;       S<S jjr\S=S j5       r\          S>S j5       r S;         S?S jjrS@S jr        SAS jrSBSCS jjr\      SDS j5       r \        SES j5       r     SFS jr SBSGS jjr!S6SHS  jjr" SB     SIS! jjr#  S6       SJS" jjr$  S6       SKS# jjr%\R"                  S:w  d  \(       d  \" \R(                  S5      (       a  \%r&S.S$ jr'S.S% jr(SLS& jr)SMS' jr*\R"                  S:X  d  \(       d#  \" \R(                  S(5      (       a  SNS) jr+S*r,gS*r,gS*r,g)Ory      c                   Xl         U(       d  [        R                  R                  nU(       d  [        R                  R                  nU[        R                  R                  [        R                  R
                  4;  a  [        SU 35      eU[        R                  R                  :w  a  [        SU 35      eX l        X0l	        X@l
        SU l        [        R                  [           " [        S5      5      u  U l        U l        S U l        g )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_channelra   float_packet_sender_packet_receiver_binding)rH   rw   r(   r   r|   s        r   r   FakeSocket.__init__   s     "[[((F;;**D$++--t{{/C/CDD%(MfX&VWW4;;)))%(KD6&RSS
595M5M6

,62T2
 ,0r    c                    U R                   $ r/   )r   r   s    r   r   FakeSocket.type   s    zzr    c                    U R                   $ r/   )r   r   s    r   r(   FakeSocket.family   s    ||r    c                    U R                   $ r/   )r   r   s    r   r|   FakeSocket.proto   s    {{r    c                Z    U R                   (       a  [        [        R                  5        g g r/   )r   r4   r   EBADFr   s    r   _check_closedFakeSocket._check_closed   s    <<ekk" r    c                    U R                   (       a  g SU l         U R                  b!  U R                  R                  U R                  	 U R                  R                  5         g )NT)r   r   r   r   r   closer   s    r   r   FakeSocket.close   sE    <<==$%%dmm4##%r    c          	        #    [         R                  R                  U R                  U R                  U R
                  USUS9I S h  vN $  N7f)NF)addressipv6_v6onlyr_   )r   _socket_resolve_address_nocpr   r(   r|   )rH   r   r_   s      r   r    FakeSocket._resolve_address_nocp   sK      \\77IIKKJJ 8 
 
 	
 
s   AAAAc                    [         R                  " [        R                  5         U R                  R                  U5        S S S 5        g ! , (       d  f       g = fr/   )
contextlibsuppressr   BrokenResourceErrorr   send_nowaitr   s     r   r   FakeSocket._deliver_packet  s6      !9!9:++F3 ;::s   A


Ac                  #    U R                  5         U R                  b  [        [        R                  5        [
        R                  R                  5       I S h  vN   U R                  USS9I S h  vN tp#nU/ :X  d   S5       e[        R                  " U5      n[        U5      U R                  :X  d   eU[        R                  " S5      :X  a  [        R                  " S5      nO0U[        R                  " S5      :X  a  [        R                  " S5      nUS:X  a  [        U R                  R                  5      n[!        [#        XS5      S9nU R                  R%                  X`5        X`l        g  GN GN7f)	NTr   zTODO: handle other values?r"   r+   r#   r,   r   )r   r   r4   r   EINVALr   lowlevel
checkpointr   r   r&   r   r(   nextr   r   r]   rA   r   )rH   addrip_strrD   _r   r   s          r   bindFakeSocket.bind  s!    ==$ell#mm&&(((!%!;!;D!;!MMqBw444w!!&)2$++---%%i00%%k2B9''--%%e,B19667D;r#89W+ 	)Ms%   AE7E1E72E43C?E74E7c                    #    [        S5      e7f)Nz0FakeNet does not (yet) support connected socketsr   )rH   peers     r   connectFakeSocket.connect,  s     !"TUUr   Nc                  #    U R                  5         [        R                  R                  5       I S h  vN   Ub  U R	                  USS9I S h  vN nU(       a  [        S5      eU(       a  [        SU 35      eUc  [        [        R                  5        [        R                  U5      nU R                  c8  U R                  [        U R                  5      R                  S45      I S h  vN   SR!                  U5      nU R                  c   e[#        U R                  R$                  UUS9nU R&                  R)                  U5        [+        U5      $  GN" GN
 No7f)NFr   &FakeNet doesn't support ancillary dataz"FakeNet send flags must be 0, not r   r    rn   )r   r   r   r   r   r   r4   r   ENOTCONNrA   rO   r   r   r)   r(   rG   joinra   r_   r   r   r8   )rH   r:   ancdatar   r   rd   rl   r   s           r   _sendmsgFakeSocket._sendmsg/  s(     	mm&&((( 66we6LLG%&NOO%(J5'&RSS?enn%!66w?== ))-dkk:EEqIJJJ((7#}}(((==&&#
 	""6*7|9 	) M Ks5   2EEEEBE,E-A*EEEwin32sendmsgc                  #    US:w  a  [        S5      eUS:w  a  [        S5      eU R                  c  [        S5      eU R                  5         / nSnU R                  R	                  5       I S h  vN nUR
                  R                  5       n[        UR                  U5      nU[        UR                  5      :  a  U[        R                  R                  -  nXXW4$  Nn7f)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   receiverc   rJ   r?   rl   r8   r   r   	MSG_TRUNC)	rH   r:   
ancbufsizer   r   	msg_flagsr   r   r;   s	            r   _recvmsg_intoFakeSocket._recvmsg_into[  s      ?%&NOOA:%&NOO==  &2  	02	,,4466--2246>>73S((...I33 7s   A,C.C/A/Cc                ,   U R                  5         U R                  b$  U R                  R                  R                  5       $ U R                  [
        R                  R                  :X  a  gU R                  [
        R                  R                  :X  d   eg)N)r"   r   )r#   r   )	r   r   r_   rJ   r(   r   r   r   r   r   s    r   getsocknameFakeSocket.getsockname  si    ==$==&&99;;[[DKK///!;;$++"6"6666r    c                   U R                  5         U R                  b  [        U R                  S5      (       d   S5       eU R                  R                  bT  [	        U R                  R                  [
        5      (       d   S5       eU R                  R                  R                  5       $ [        [        R                  5        g )NremotezGThis method seems to assume that self._binding has a remote UDPEndpointz,Self._binding.remote should be a UDPEndpoint)
r   r   hasattrr  r   rA   rJ   r4   r   r   r   s    r   getpeernameFakeSocket.getpeername  s    ==$  Y YY  }}##/!MM((  B BB  }}++>>@@%..!r    c                   g r/   rQ   )rH   leveloptnames      r   
getsockoptFakeSocket.getsockopt  s    >Ar    c                   g r/   rQ   rH   r  r  buflens       r   r  r	    s    MPr    c               F    U R                  5         [        SU SU S35      e)Nz%FakeNet doesn't implement getsockopt(, ))r   r0   r  s       r   r  r	    s+     	=eWBwiqQRRr    c                   g r/   rQ   )rH   r  r  values       r   
setsockoptFakeSocket.setsockopt  s    TWr    c                   g r/   rQ   rH   r  r  r  optlens        r   r  r    s     r    c                   U R                  5         X4[        R                  R                  [        R                  R                  4:X  a  U(       d  [        S5      e[        SU SU S35      e)Nz#FakeNet always has IPV6_V6ONLY=Truez%FakeNet doesn't implement setsockopt(r  z, ...))r   r   r   IPPROTO_IPV6IPV6_V6ONLYr   r0   r  s        r   r  r    sf     	KK$$KK## 
 
 %&KLL=eWBwivVWWr    c                    U $ r/   rQ   r   s    r   	__enter__FakeSocket.__enter__  s    r    c                $    U R                  5         g r/   )r   )rH   exc_type	exc_value	tracebacks       r   __exit__FakeSocket.__exit__  s     	

r    c                B   #    U R                  XS 5      I S h  vN $  N7fr/   )sendto)rH   r9   r   s      r   sendFakeSocket.send  s     [[d3333s   c                   #    g 7fr/   rQ   )rH   _FakeSocket__data_FakeSocket__addresss      r   r$  FakeSocket.sendto  s
     
    c                   #    g 7fr/   rQ   )rH   r(  _FakeSocket__flagsr)  s       r   r$  r*    s
      r+  c                   #    [        U5      S:X  a  Uu  p#SnO [        U5      S:X  a  Uu  p$nO[        S5      eU R                  U// XC5      I S h  vN $  N7f)NrM   r      zwrong number of arguments)r8   	TypeErrorr   )rH   argsr9   r   r   s        r   r$  r*    sZ      t9> MDEY!^#' D788]]D62u>>>>s   AAAAc                H   #    U R                  X5      I S h  vN u  p4U$  N7fr/   )recvfrom)rH   bufsizer   r9   _addresss        r   recvFakeSocket.recv  s"     #}}W<< =s   " 	"c                J   #    U R                  XU5      I S h  vN u  pEU$  N7fr/   )recvfrom_into)rH   r<   r7   r   	got_bytesr5  s         r   	recv_intoFakeSocket.recv_into  s)     $($6$6sE$JJ	 Ks   #!	#c                L   #    U R                  X5      I S h  vN u  p4pVX64$  N
7fr/   )_recvmsg)rH   r4  r   r9   _ancdata
_msg_flagsr   s          r   r3  FakeSocket.recvfrom  s+     
 59MM'4Q.Q+
} /Rs   $"$c                   #    US:w  a$  U[        U5      R                  :w  a  [        S5      eU R                  U/SU5      I S h  vN u  pEpgXG4$  N
7f)Nr   zpartial recvfrom_into)r6   r7   r   r   )rH   r<   r7   r   
got_nbytesr?  r@  r   s           r   r9  FakeSocket.recvfrom_into  s`      Q;6Z_%;%;;%&=>>:>:L:LE;
 5
1
j
 ""5
s   AAAAc                   #    [        U5      nU R                  U/UU5      I S h  vN u  pVpx[        US U 5      XgU4$  N7fr/   )	bytearrayr   rk   )	rH   r4  r   r   r<   rC  r   r   r   s	            r   r>  FakeSocket._recvmsg#  sV       8<8J8JE9
 3
/
Y
 c+:&'WEE3
s   #A >A c                    [        S5      e)Nz&can't get fileno() for FakeNet socketsr   r   s    r   filenoFakeSocket.fileno6  s    !"JKKr    c                    [        S5      e)Nzcan't detach() a FakeNet socketr   r   s    r   detachFakeSocket.detach9  s    !"CDDr    c                    g)NFrQ   r   s    r   get_inheritableFakeSocket.get_inheritable<  s    r    c                (    U(       a  [        S5      eg )Nz&FakeNet can't make inheritable socketsr   )rH   inheritables     r   set_inheritableFakeSocket.set_inheritable?  s    %&NOO r    sharec                    [        S5      e)NzFakeNet can't share socketsr   )rH   
process_ids     r   rU  FakeSocket.shareG  s    %&CDDr    )r   r   r   r   r   r   r   r   )
rw   rv   r(   r   r   r   r|   rC   rS   r   )rS   r   )rS   r   )rS   rC   r   )r   objectr_   boolrS   ztuple[str, int]r   )r   rY  rS   r   )r   rY  rS   r   )rQ   r   N)
r:   Iterable[Buffer]r   z!Iterable[tuple[int, int, Buffer]]r   rC   r   zAddressFormat | NonerS   rC   rF   )r:   r[  r   rC   r   rC   rS   zZtuple[int, list[tuple[int, int, bytes]], int, tuple[str, int] | tuple[str, int, int, int]]rR   )r  rC   r  rC   rS   rC   )r  rC   r  rC   r  rC   rS   rk   r/   )r  rC   r  rC   r  
int | NonerS   zint | bytes)r  rC   r  rC   r  zint | BufferrS   r   )
r  rC   r  rC   r  r   r  rC   rS   r   )
r  rC   r  rC   r  zint | Buffer | Noner  r\  rS   r   )rS   r   )r  z#builtins.type[BaseException] | Noner  zBaseException | Noner   zTracebackType | NonerS   r   )r   )r9   r   r   rC   rS   rC   )r(  r   r)  z!tuple[object, ...] | str | BufferrS   rC   )r(  r   r-  rC   r)  z(tuple[object, ...] | str | Buffer | NonerS   rC   )r1  r   rS   rC   )r4  rC   r   rC   rS   rk   )r<   r   r7   rC   r   rC   rS   rC   )r4  rC   r   rC   rS   ztuple[bytes, AddressFormat])r<   r   r7   rC   r   rC   rS   ztuple[int, AddressFormat])r4  rC   r   rC   r   rC   rS   z>tuple[bytes, list[tuple[int, int, bytes]], int, AddressFormat])rS   rZ  )rR  rZ  rS   r   )rW  rC   rS   rk   )-rU   rV   rW   rX   r   propertyr   r(   r|   r   r   r   r   r   r   r   sysplatformr   r  r   r   r   recvmsg_intor   r  r   r  r  r  r!  r%  r$  r6  r;  r3  r9  r>  recvmsgrI  rL  rO  rS  rU  r[   rQ   r    r   ry   ry      s"   00 0 	0
 0 
0@      #&

 	

 

4 *V 68(,%!% 3% 	%
 &% 
%N ||wgfmmY??
 	"4!"4 "4 	"4

"4H ||wgfmmY??$" A AP P "S S 	S
 S 
S W W  	
   
  "X X 	X
 #X X 
X,5 ( (	
 
4  5 
	    <	
 
 ?? 
?    
%	 	## # 	#
 
##$ 	FF F 	F
 
HF ||wgfmmY??LEP ||wgfmmW==	E >Mr    ry   )	metaclass)r   r   rS   rC   )r(   rC   rS   r   )r3   rC   rS   r   )r9   rk   r:   r[  rS   rC   )4
__future__r   r   r   r   r1   r   r^  typingr   r   r   r   r   rq   r   
trio._utilr	   r
   builtinscollections.abcr   r   r   typesr   typing_extensionsr   r   trio._socketr   r   r   r   rY   r   r)   r-   r4   r?   frozenrA   r]   ra   abcSocketFactoryrt   HostnameResolverr   rv   
SocketTypery   rQ   r    r   <module>rp     sl   #    	  
 D D   1(0#.* ,,y/D/DD	9 DC==+	 ; ; ;,   
 
 
 
 G.. G G E48844 E E<      F BE''3F BE BEr    