
    ,ilG                       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 d d	lmZ ej>                  ej@                  z  Z!d
e"d<   d dZ#d!dZ$d!dZ%d"dZ&d#dZ'ejP                   G d d             Z)ejP                   G d d             Z*ejP                   G d d             Z+ejP                   G d dejX                  jZ                               Z.ejP                   G d dejX                  j^                               Z0e G d d             Z1e G d dej                  jd                  e             Z3y)$    )annotationsN)TYPE_CHECKINGAnyNoReturn	TypeAliasoverload)NoPublicConstructorfinal)Iterable)AddressFamily
SocketKind)TracebackType)BufferSelf)AddressFormatr   	IPAddressc                    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)ips    e/var/www/system.tvplus.app.br/jogos/scrap/venv/lib/python3.12/site-packages/trio/testing/_fake_net.py_family_forr   %   sN    "i++,{{"""	B	--	.{{###
A
BB    c                    | 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   familys    r   _wildcard_ip_forr)   -   sT    $$$##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_forr-   6   sT    $$$##K00	4;;''	'##E**
;
<<r    c                @    t        | t        j                  |             N)OSErrorosstrerror)codes    r   	_fake_errr4   >   s    
$D)
**r    c                    d}|D ]^  }| ||t        |      j                  z    }t        |      5 }||d t        |       d d d        |t        |      z  }|t        |       k(  s] |S  |S # 1 sw Y   ,xY w)Nr   )
memoryviewnbyteslen)databufferswrittenbuf
next_piecembufs         r   _scatterr?   B   s    G 'Gjo.D.D$DE
_ 	1&0D"3z?#	13z?"c$iN N	1 	1s   A((A1	c                  D    e Zd ZU ded<   ded<   ddZe	 	 	 	 d	d       Zy)
UDPEndpointr   r   intportc                    | j                   j                  | j                  f}t        | j                   t        j
                        r|dz  }|S )Nr   r   )r   
compressedrC   r   r   r   )selfsockaddrs     r   as_python_sockaddrzUDPEndpoint.as_python_sockaddrS   sC    GGIIA
 dggy445Hr    c                L    |d d \  }} | t        j                  |      |      S )N   )r   rC   )r   r&   )clsrH   r   rC   s       r   from_python_sockaddrz UDPEndpoint.from_python_sockaddr\   s+    
 BQ<Di**2.T::r    Nreturn+tuple[str, int] | tuple[str, int, int, int])rH   rP   rO   rA   )__name__
__module____qualname____annotations__rI   classmethodrM    r    r   rA   rA   N   s7    M
I ;=; 
; ;r    rA   c                      e Zd ZU ded<   y)
UDPBindingrA   localN)rQ   rR   rS   rT   rV   r    r   rX   rX   e   s    r    rX   c                  \    e Zd ZU ded<   ded<    ej
                  d       Zded<   d
dZy	)	UDPPacketrA   sourcedestinationc                "    | j                         S r/   )hex)ps    r   <lambda>zUDPPacket.<lambda>o   s     r    )reprbytespayloadc                F    t        | j                  | j                  |      S )Nr\   r]   rd   )r[   r]   r\   )rG   rd   s     r   replyzUDPPacket.replyr   s"    ##
 	
r    N)rd   rc   rO   r[   )rQ   rR   rS   rT   attrsfieldrd   rg   rV   r    r   r[   r[   k   s)     U[[&78GU8
r    r[   c                       e Zd ZU ded<   ddZy)FakeSocketFactoryFakeNetfake_netc                F    t         j                  | j                  |||      S r/   )
FakeSocket_createrm   )rG   r(   type_protos       r   r   zFakeSocketFactory.socket~   s    !!$--FFr    N)r(   rB   rq   rB   rr   rB   rO   ro   )rQ   rR   rS   rT   r   rV   r    r   rk   rk   z   s    Gr    rk   c                  X    e Zd ZU ded<   	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZy)	FakeHostnameResolverrl   rm   c                    K   t        d      wNzFakeNet doesn't do fake DNS yetr   )rG   hostrC   r(   typerr   flagss          r   getaddrinfoz FakeHostnameResolver.getaddrinfo   s     " ""CDD   c                    K   t        d      wrv   rw   )rG   rH   rz   s      r   getnameinfoz FakeHostnameResolver.getnameinfo   s     
 ""CDDr|   N)r   r   r   r   )rx   zbytes | NonerC   zbytes | str | int | Noner(   rB   ry   rB   rr   rB   rz   rB   rO   zqlist[tuple[AddressFamily, SocketKind, int, str, tuple[str, int] | tuple[str, int, int, int] | tuple[int, bytes]]])rH   rP   rz   rB   rO   ztuple[str, str])rQ   rR   rS   rT   r{   r~   rV   r    r   rt   rt      s     EE 'E 	E
 E E E
E&E=E E 
	Er    rt   c                  4    e Zd ZddZddZddZd	dZd	dZy)
rl   c                    t        j                  d      j                         | _        t        j                  d      j                         | _        t        t        dd            | _        i | _	        d | _
        y )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rG   s    r   __init__zFakeNet.__init__   s]    (44[AGGI(44X>DDF#E%$7846 r    c                p    || j                   v rt        t        j                         || j                   |<   y r/   )r   r4   errno
EADDRINUSE)rG   bindingr   s      r   _bindzFakeNet._bind   s*    dkk!e&&'%Gr    c                    t         j                  j                  t        |              t         j                  j	                  t        |              y r/   )r   r   set_custom_socket_factoryrk   set_custom_hostname_resolverrt   r   s    r   enablezFakeNet.enable   s2    --.?.EF001Ed1KLr    c                b    | j                   | j                  |       y | j                  |       y r/   )r   deliver_packetrG   packets     r   send_packetzFakeNet.send_packet   s*    $'f%r    c                    t        |j                        }|| j                  v r| j                  |   j                  |       y y )NrY   )rX   r]   r   _deliver_packet)rG   r   r   s      r   r   zFakeNet.deliver_packet   s:    6#5#56dkk!KK 008 r    NrO   None)r   rX   r   ro   rO   r   r   r[   rO   r   )rQ   rR   rS   r   r   r   r   r   rV   r    r   rl   rl      s    !&
M&r    rl   c                     e Zd Z	 	 	 	 	 	 	 	 	 	 d)dZed*d       Zed+d       Zed,d       Zd-dZd-dZ		 	 	 	 	 	 d.dZ
d/dZd0d	Zd1d
Z	 	 	 d2	 	 	 	 	 	 	 	 	 d3dZej                   dk7  ses eej&                  d      reZ	 	 d4	 	 	 	 	 	 	 d5dZej                   dk7  ses eej&                  d      reZd6dZd6dZed7d       Zed8d       Z	 d9	 	 	 	 	 	 	 d:dZed;d       Ze	 	 	 	 	 	 	 	 	 	 d<d       Z	 d9	 	 	 	 	 	 	 	 	 d=dZd>dZ	 	 	 	 	 	 	 	 d?dZd@dAdZe	 	 	 	 	 	 dBd       Ze	 	 	 	 	 	 	 	 dCd       Z	 	 	 	 dDdZd@dEdZ d4dFdZ!	 d@	 	 	 	 	 dGd Z"	 	 d4	 	 	 	 	 	 	 dHd!Z#	 	 d4	 	 	 	 	 	 	 dId"Z$ej                   dk7  ses eej&                  d      re$Z%d,d#Z&d,d$Z'dJd%Z(dKd&Z)ej                   dk(  ses eej&                  d'      rdLd(Z*yyy)Mro   c                
   || _         |st        j                  j                  }|st        j                  j                  }|t        j                  j                  t        j                  j
                  fvrt        d|       |t        j                  j                  k7  rt        d|       || _        || _	        || _
        d| _        t        j                  t           t        d            \  | _        | _        d | _        y )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)rG   rm   r(   ry   rr   s        r   r   z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                    | j                   S r/   )r   r   s    r   ry   zFakeSocket.type   s    zzr    c                    | j                   S r/   )r   r   s    r   r(   zFakeSocket.family   s    ||r    c                    | j                   S r/   )r   r   s    r   rr   zFakeSocket.proto   s    {{r    c                P    | j                   rt        t        j                         y y r/   )r   r4   r   EBADFr   s    r   _check_closedzFakeSocket._check_closed   s    <<ekk" r    c                    | j                   ry d| _         | j                  !| j                  j                  | j                  = | j                  j                          y )NT)r   r   r   r   r   closer   s    r   r   zFakeSocket.close   sE    <<==$%%dmm4##%r    c                  K   t         j                  j                  | j                  | j                  | j
                  |d|       d {   S 7 w)NF)addressipv6_v6onlyrY   )r   _socket_resolve_address_nocpry   r(   rr   )rG   r   rY   s      r   r   z FakeSocket._resolve_address_nocp   sL      \\77IIKKJJ 8 
 
 	
 
s   AA	A
Ac                    t        j                  t        j                        5  | j                  j                  |       d d d        y # 1 sw Y   y xY wr/   )
contextlibsuppressr   BrokenResourceErrorr   send_nowaitr   s     r   r   zFakeSocket._deliver_packet  s?      !9!9: 	4++F3	4 	4 	4s   A		Ac                  K   | j                          | j                  t        t        j                         t
        j                  j                          d {    | j                  |d       d {   ^}}}|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                  j%                  ||        || _        y 7 7 w)	NTr   zTODO: handle other values?r"   r+   r#   r,   r   )r   r   r4   r   EINVALr   lowlevel
checkpointr   r   r&   r   r(   nextr   r   rX   rA   r   )rG   addrip_strrC   _r   r   s          r   bindz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;r4#89Wd+ 	)Ms%   AE5E0E54E35C<E53E5c                    K   t        d      w)Nz0FakeNet does not (yet) support connected socketsrw   )rG   peers     r   connectzFakeSocket.connect,  s     !"TUUr|   Nc                  K   | j                          t        j                  j                          d {    || j	                  |d       d {   }|rt        d      |rt        d|       |t        t        j                         t        j                  |      }| j                  8| j                  t        | j                        j                  df       d {    dj!                  |      }| j                  J t#        | j                  j$                  ||      }| j&                  j)                  |       t+        |      S 7 7 7 pw)NFr   &FakeNet doesn't support ancillary dataz"FakeNet send flags must be 0, not r   r    rf   )r   r   r   r   r   r   r4   r   ENOTCONNrA   rM   r   r   r)   r(   rF   joinr[   rY   r   r   r8   )rG   r:   ancdatarz   r   r]   rd   r   s           r   _sendmsgz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                  K   |dk7  rt        d      |dk7  rt        d      | j                  t        d      | j                          g }d}| j                  j	                          d {   }|j
                  j                         }t        |j                  |      }|t        |j                        k  r|t        j                  j                  z  }||||fS 7 ow)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\   rI   r?   rd   r8   r   r   	MSG_TRUNC)	rG   r:   
ancbufsizerz   r   	msg_flagsr   r   r;   s	            r   _recvmsg_intoz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G33 7s   A)C+C,A0Cc                &   | j                          | j                  $| j                  j                  j                         S | j                  t
        j                  j                  k(  ry| j                  t
        j                  j                  k(  sJ y)N)r"   r   )r#   r   )	r   r   rY   rI   r(   r   r   r   r   r   s    r   getsocknamezFakeSocket.getsockname  si    ==$==&&99;;[[DKK///!;;$++"6"6666r    c                r   | j                          | j                  t        | j                  d      sJ d       | j                  j                  Ot	        | j                  j                  t
              sJ d       | j                  j                  j                         S t        t        j                         y )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   rI   r4   r   r   r   s    r   getpeernamezFakeSocket.getpeername  s    ==$ Y YY  }}##/!MM(( B BB  }}++>>@@%..!r    c                    y r/   rV   )rG   leveloptnames      r   
getsockoptzFakeSocket.getsockopt  s    >Ar    c                    y r/   rV   rG   r   r   buflens       r   r   zFakeSocket.getsockopt  s    MPr    c               F    | j                          t        d| d| d      )Nz%FakeNet doesn't implement getsockopt(, ))r   r0   r   s       r   r   zFakeSocket.getsockopt  s+     	=eWBwiqQRRr    c                    y r/   rV   )rG   r   r   values       r   
setsockoptzFakeSocket.setsockopt  s    TWr    c                    y r/   rV   rG   r   r   r   optlens        r   r   zFakeSocket.setsockopt  s     r    c                   | j                          ||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   r0   r   s        r   r   zFakeSocket.setsockopt  sh     	7KK$$KK## 
 
 %&KLL=eWBwivVWWr    c                    | S r/   rV   r   s    r   	__enter__zFakeSocket.__enter__  s    r    c                $    | j                          y r/   )r   )rG   exc_type	exc_value	tracebacks       r   __exit__zFakeSocket.__exit__  s     	

r    c                D   K   | j                  ||d        d {   S 7 wr/   )sendto)rG   r9   rz   s      r   sendzFakeSocket.send  s     [[ud3333s     c                   K   y wr/   rV   )rG   _FakeSocket__data_FakeSocket__addresss      r   r   zFakeSocket.sendto  s     
    c                   K   y wr/   rV   )rG   r   _FakeSocket__flagsr  s       r   r   zFakeSocket.sendto  s      r  c                   K   t        |      dk(  r|\  }}d}n t        |      dk(  r|\  }}}nt        d      | j                  |gg ||       d {   S 7 w)NrK   r      zwrong number of arguments)r8   	TypeErrorr   )rG   argsr9   r   rz   s        r   r   zFakeSocket.sendto  sa      t9> MD'EY!^#' D%788]]D62ug>>>>s   AAAAc                L   K   | j                  ||       d {   \  }}|S 7 	wr/   )recvfrom)rG   bufsizerz   r9   _addresss        r   recvzFakeSocket.recv  s'     #}}We<<h =s   $"
$c                N   K   | j                  |||       d {   \  }}|S 7 	wr/   )recvfrom_into)rG   r<   r7   rz   	got_bytesr  s         r   	recv_intozFakeSocket.recv_into  s.     $($6$6sFE$JJ	8 Ks   %#
%c                T   K   | j                  ||       d {   \  }}}}||fS 7 wr/   )_recvmsg)rG   r  rz   r9   _ancdata
_msg_flagsr   s          r   r
  zFakeSocket.recvfrom  s4     
 59MM'54Q.Q+h
GW} /Rs   (&(c                   K   |dk7  r#|t        |      j                  k7  rt        d      | j                  |gd|       d {   \  }}}}||fS 7 w)Nr   zpartial recvfrom_into)r6   r7   r   r   )rG   r<   r7   rz   
got_nbytesr  r  r   s           r   r  zFakeSocket.recvfrom_into  sg      Q;6Z_%;%;;%&=>>:>:L:LE;
 5
1
Hj'
 7""5
s   A AAAc                   K   t        |      }| j                  |g||       d {   \  }}}}t        |d |       |||fS 7 wr/   )	bytearrayr   rc   )	rG   r  r   rz   r<   r  r   r   r   s	            r   r  zFakeSocket._recvmsg#  s]       8<8J8JE9
 3
/
GY
 c+:&')WEE3
s   #AAAc                    t        d      )Nz&can't get fileno() for FakeNet socketsrw   r   s    r   filenozFakeSocket.fileno6  s    !"JKKr    c                    t        d      )Nzcan't detach() a FakeNet socketrw   r   s    r   detachzFakeSocket.detach9  s    !"CDDr    c                     y)NFrV   r   s    r   get_inheritablezFakeSocket.get_inheritable<  s    r    c                    |rt        d      y )Nz&FakeNet can't make inheritable socketsrw   )rG   inheritables     r   set_inheritablezFakeSocket.set_inheritable?  s    %&NOO r    sharec                    t        d      )NzFakeNet can't share socketsrw   )rG   
process_ids     r   r#  zFakeSocket.shareG  s    %&CDDr    )
rm   rl   r(   r   ry   r   rr   rB   rO   r   )rO   r   )rO   r   )rO   rB   r   )r   objectrY   boolrO   ztuple[str, int]r   )r   r&  rO   r   )r   r&  rO   r   )rV   r   N)
r:   Iterable[Buffer]r   z!Iterable[tuple[int, int, Buffer]]rz   rB   r   zAddressFormat | NonerO   rB   rE   )r:   r(  r   rB   rz   rB   rO   zZtuple[int, list[tuple[int, int, bytes]], int, tuple[str, int] | tuple[str, int, int, int]]rN   )r   rB   r   rB   rO   rB   )r   rB   r   rB   r   rB   rO   rc   r/   )r   rB   r   rB   r   
int | NonerO   zint | bytes)r   rB   r   rB   r   zint | BufferrO   r   )
r   rB   r   rB   r   r   r   rB   rO   r   )
r   rB   r   rB   r   zint | Buffer | Noner   r)  rO   r   )rO   r   )r   z#builtins.type[BaseException] | Noner   zBaseException | Noner   zTracebackType | NonerO   r   )r   )r9   r   rz   rB   rO   rB   )r   r   r  z!tuple[object, ...] | str | BufferrO   rB   )r   r   r  rB   r  z(tuple[object, ...] | str | Buffer | NonerO   rB   )r  r   rO   rB   )r  rB   rz   rB   rO   rc   )r<   r   r7   rB   rz   rB   rO   rB   )r  rB   rz   rB   rO   ztuple[bytes, AddressFormat])r<   r   r7   rB   rz   rB   rO   ztuple[int, AddressFormat])r  rB   r   rB   rz   rB   rO   z>tuple[bytes, list[tuple[int, int, bytes]], int, AddressFormat])rO   r'  )r!  r'  rO   r   )r%  rB   rO   rc   )+rQ   rR   rS   r   propertyry   r(   rr   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  recvmsgr  r  r  r"  r#  rV   r    r   ro   ro      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    ro   )	metaclass)r   r   rO   rB   )r(   rB   rO   r   )r3   rB   rO   r   )r9   rc   r:   r(  rO   rB   )4
__future__r   r   r   r   r1   r   r+  typingr   r   r   r   r   rh   r   
trio._utilr	   r
   builtinscollections.abcr   r   r   typesr   typing_extensionsr   r   trio._socketr   r   r   r   rT   r   r)   r-   r4   r?   frozenrA   rX   r[   abcSocketFactoryrk   HostnameResolverrt   rl   
SocketTypero   rV   r    r   <module>r=     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    