1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
U
Z±di1ã@sZddlZddlZddlZddlmZddlZddlZddlmZm    Z    m
Z
ddl Z ddl m Z ddlmZmZeejejfZeedœdd„Zeed    œd
d „Zeed    œd d „Zdd„Zdd„ZejGdd„dƒƒZejGdd„dƒƒZejGdd„dƒƒZejGdd„dejjƒƒZ ejGdd„dejj!ƒƒZ"Gdd„dedZ#Gdd „d ej$j%edZ&dS)!éN)Údeque)ÚUnionÚListÚOptional)Úcontextmanager)ÚFinalÚNoPublicConstructor)ÚipÚreturncCs4t|tjƒrtjjSt|tjƒr(tjjSds0t‚dS©NF)    Ú
isinstanceÚ    ipaddressÚ IPv4AddressÚtrioÚsocketÚAF_INETÚ IPv6AddressÚAF_INET6ÚAssertionError)r    ©rúMd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\trio/testing/_fake_net.pyÚ _family_fors
  r)Úfamilyr
cCs8|tjjkrt d¡S|tjjkr,t d¡Sds4t‚dS)Nú0.0.0.0ú::F©rrrr Ú
ip_addressrr©rrrrÚ_wildcard_ip_for s
 
 
rcCs8|tjjkrt d¡S|tjjkr,t d¡Sds4t‚dS)Nú    127.0.0.1ú::1FrrrrrÚ_localhost_ip_for)s
 
 
r!cCst|t |¡ƒ‚dS©N)ÚOSErrorÚosÚstrerror)ÚcoderrrÚ    _fake_err2sr'c
Csfd}|D]X}|||t|ƒ…}t|ƒ}||dt|ƒ…<W5QRX|t|ƒ7}|t|ƒkrqbq|S)Nr)ÚlenÚ
memoryview)ÚdataÚbuffersÚwrittenÚbufZ
next_pieceZmbufrrrÚ_scatter6s
  r.c@s2eZdZUeed<eed<dd„Zedd„ƒZdS)Ú UDPEndpointr    ÚportcCs(|jj|jf}t|jtjƒr$|d7}|S)N)rr)r    Ú
compressedr0r r r)ÚselfÚsockaddrrrrÚas_python_sockaddrGszUDPEndpoint.as_python_sockaddrcCs"|dd…\}}|t |¡|dS)Né)r    r0)r r)Úclsr3r    r0rrrÚfrom_python_sockaddrMsz UDPEndpoint.from_python_sockaddrN)    Ú__name__Ú
__module__Ú __qualname__Ú    IPAddressÚ__annotations__Úintr4Ú classmethodr7rrrrr/Bs
 
r/c@seZdZUeed<dS)Ú
UDPBindingÚlocalN)r8r9r:r/r<rrrrr?Ss
r?c@s>eZdZUeed<eed<ejdd„dZeed<dd„Z    d    S)
Ú    UDPPacketÚsourceÚ destinationcCs| ¡Sr")Úhex)ÚprrrÚ<lambda>\ózUDPPacket.<lambda>)ÚreprÚpayloadcCst|j|j|dS)N©rBrCrI)rArCrB)r2rIrrrÚreply^s
ÿzUDPPacket.replyN)
r8r9r:r/r<ÚattrÚibrIÚbytesrKrrrrrAXs
rAc@s*eZdZUded<eeeddœdd„ZdS)ÚFakeSocketFactoryÚFakeNetÚfake_netÚ
FakeSocket)rÚtypeÚprotor
cCst |j|||¡Sr")rRÚ_createrQ)r2rrSrTrrrrhszFakeSocketFactory.socketN)r8r9r:r<r=rrrrrrOds
rOc@s>eZdZUded<d eeeefdœdd„Zedœdd    „Zd
S) ÚFakeHostnameResolverrPrQr)Úhostr0cÃs tdƒ‚dS©NzFakeNet doesn't do fake DNS yet©ÚNotImplementedError)r2rWr0rrSrTÚflagsrrrÚ getaddrinfopsz FakeHostnameResolver.getaddrinfo)r[cÃs tdƒ‚dSrXrY)r2r3r[rrrÚ getnameinfousz FakeHostnameResolver.getnameinfoN)rrrr)    r8r9r:r<Ústrrr=r\r]rrrrrVls
ÿ
ÿ rVc@sPeZdZdd„Zedddœdd„Zddœd    d
„Zddœd d „Zddœd d„ZdS)rPcCs@t d¡ ¡|_t d¡ ¡|_ttddƒƒ|_i|_d|_    dS)Nz    1.0.0.0/8z1::/16iPÃiÿÿ)
r Ú IPv4NetworkÚhostsZ_auto_ipv4_iterÚ IPv6NetworkÚiterÚrangeÚ_auto_port_iterÚ_boundÚ route_packet©r2rrrÚ__init__zs
zFakeNet.__init__rRN)Úbindingrr
cCs"||jkrttjƒ||j|<dSr")rer'ÚerrnoZ
EADDRINUSE)r2rirrrrÚ_bind„s
 
z FakeNet._bind)r
cCs$tj t|ƒ¡tj t|ƒ¡dSr")rrZset_custom_socket_factoryrOZset_custom_hostname_resolverrVrgrrrÚenable‰szFakeNet.enablecCs$|jdkr| |¡n
| |¡dSr")rfÚdeliver_packet©r2ÚpacketrrrÚ send_packets
 zFakeNet.send_packetcCs,t|jd}||jkr(|j| |¡ndS)N©r@)r?rCreÚ_deliver_packet)r2rorirrrrm“s 
zFakeNet.deliver_packet)    r8r9r:rhr?rkrlrprmrrrrrPys
 
rP)Ú    metaclassc@seZdZeeeedœdd„Zdd„Zdd„Zdd    „Ze    d
œd d „Z
d d„Z dd„Z dd„Z d;dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zd d!„Zd<d"d#„Zd$d%„Zd=d&d'„Zd>d(d)„Zd?d*d+„Zd@d,d-„ZdAd.d/„Zd0d1„Zd2d3„Zd4d5„Zd6d7„Zd8d9„Z d:S)BrR)rQrrSrTcCs’||_|stjj}|stjj}|tjjtjjfkr@td|›ƒ‚|tjjkrZtd|›ƒ‚||_||_    ||_
d|_ t  t dƒ¡\|_|_d|_dS)Nz%FakeNet doesn't (yet) support family=z#FakeNet doesn't (yet) support type=FÚinf)Ú    _fake_netrrrÚ SOCK_STREAMrrZÚ
SOCK_DGRAMrrSrTÚ_closedZopen_memory_channelÚfloatÚ_packet_senderÚ_packet_receiverÚ_binding)r2rQrrSrTrrrrhs" ÿ zFakeSocket.__init__cCs|jrttjƒdSr")rxr'rjÚEBADFrgrrrÚ _check_closed·szFakeSocket._check_closedcCs4|jr
dSd|_|jdk    r&|jj|j=|j ¡dS)NT)rxr|rurer{Úclosergrrrr»s 
 zFakeSocket.closecÃs$tjj|j|j|j|d|dIdHS)NF)ÚaddressZ ipv6_v6onlyr@)rÚ_socketÚ_resolve_address_nocprSrrT)r2r€r@rrrr‚Äsúz FakeSocket._resolve_address_nocp)rocCs,z|j |¡Wntjk
r&YnXdSr")rzZ send_nowaitrZBrokenResourceErrorrnrrrrrÎszFakeSocket._deliver_packetcÃsÎ| ¡|jdk    rttjƒtj ¡IdH|j|ddIdH\}}t     
|¡}t |ƒ|j ks`t ‚|t     
d¡krzt     
d¡}n|t     
d¡kr’t     
d¡}|dkr¦t|jjƒ}tt||ƒd}|j ||¡||_dS)NTrqrrrr r)r~r|Z _fake_errorrjÚEINVALrÚlowlevelÚ
checkpointr‚r rrrrÚnextrurdr?r/rk)r2ÚaddrÚip_strr0r    rirrrÚbindÙs 
 
 
 
 zFakeSocket.bindcÃs tdƒ‚dS)Nz0FakeNet does not (yet) support connected socketsrY)r2ZpeerrrrÚconnectìszFakeSocket.connectc    Çs6| ¡g}d}d}t|ƒdkr(|\}nPt|ƒdkr>|\}}n:t|ƒdkrV|\}}}n"t|ƒdkrp|\}}}}ntdƒ‚tj ¡IdH|dk    r¤|j|ddIdH}|r°td    ƒ‚|rÂtd
|›ƒ‚|dkrÔtt    j
ƒt   |¡}|j dkr| t|jƒjdf¡IdHd  |¡}t|j j||d }|j |¡t|ƒS) Nrér5ééúwrong number of argumentsFrqú&FakeNet doesn't support ancillary dataz"FakeNet send flags must be 0, not rGrJ)r~r(Ú    TypeErrorrr„r…r‚rZr'rjÚENOTCONNr/r7r|r‰rrr1ÚjoinrAr@rurp)    r2ÚargsÚancdatar[r€r+rCrIrorrrÚsendmsgïsB  
 
 
 
ý zFakeSocket.sendmsgrc    Ãs||dkrtdƒ‚|dkr tdƒ‚| ¡g}d}|j ¡IdH}|j ¡}t|j|ƒ}|t|jƒkrp|t    j
j O}||||fS)Nrrz&FakeNet doesn't support any recv flags) rZr~r{ZreceiverBr4r.rIr(rrÚ    MSG_TRUNC)    r2r+Ú
ancbufsizer[r”Ú    msg_flagsror€r,rrrÚ recvmsg_intos
  zFakeSocket.recvmsg_intocCsJ| ¡|jdk    r|jj ¡S|jtjjkr0dS|jtjjksBt    ‚dSdS)N)rr)rr)
r~r|r@r4rrrrrrrgrrrÚ getsockname2s
 zFakeSocket.getsocknamecCs8| ¡|jdk    r*|jjdk    r*|jj ¡SttjƒdSr")r~r|Úremoter4r'rjr‘rgrrrÚ getpeername<s
 
  zFakeSocket.getpeernamecCs"| ¡td|›d|›dƒ‚dS)Nz%FakeNet doesn't implement getsockopt(ú, ú))r~r#)r2ÚlevelÚitemrrrÚ
getsockoptCszFakeSocket.getsockoptcCsF| ¡||ftjjtjjfkr,|s,tdƒ‚td|›d|›dƒ‚dS)Nz#FakeNet always has IPV6_V6ONLY=Truez%FakeNet doesn't implement setsockopt(rz, ...))r~rrÚ IPPROTO_IPV6Ú IPV6_V6ONLYrZr#)r2rŸr ÚvaluerrrÚ
setsockoptGs
zFakeSocket.setsockoptcCs|Sr"rrgrrrÚ    __enter__TszFakeSocket.__enter__cGs | ¡dSr")r)r2Úexc_inforrrÚ__exit__WszFakeSocket.__exit__cÃs| ||d¡IdHSr")Úsendto)r2r*r[rrrÚsendZszFakeSocket.sendcÇsRt|ƒdkr|\}}d}n t|ƒdkr2|\}}}ntdƒ‚| |gg||¡IdHS)Nr5rrŒrŽ)r(rr•)r2r“r*r€r[rrrr©]s   zFakeSocket.sendtocÃs| ||¡IdH\}}|Sr")Úrecvfrom)r2Úbufsizer[r*r€rrrÚrecvgszFakeSocket.recvcÃs| |||¡IdH\}}|Sr")Ú recvfrom_into)r2r-Únbytesr[Z    got_bytesr€rrrÚ    recv_intokszFakeSocket.recv_intocÃs"| ||¡IdH\}}}}||fSr")Úrecvmsg)r2r¬r[r*r”r˜r€rrrr«oszFakeSocket.recvfromcÃsB|dkr|t|ƒkrtdƒ‚| |gd|¡IdH\}}}}||fS)Nrzpartial recvfrom_into)r(rZr™)r2r-r¯r[Ú
got_nbytesr”r˜r€rrrr®ssÿzFakeSocket.recvfrom_intoc    Ãs>t|ƒ}| |g||¡IdH\}}}}t|d|…ƒ|||fSr")Ú    bytearrayr™rN)    r2r¬r—r[r-r²r”r˜r€rrrr±{sÿzFakeSocket.recvmsgcCs tdƒ‚dS)Nz&can't get fileno() for FakeNet socketsrYrgrrrÚfileno‚szFakeSocket.filenocCs tdƒ‚dS)Nzcan't detach() a FakeNet socketrYrgrrrÚdetach…szFakeSocket.detachcCsdSr rrgrrrÚget_inheritableˆszFakeSocket.get_inheritablecCs|r tdƒ‚dS)Nz&FakeNet can't make inheritable socketsrY)r2Ú inheritablerrrÚset_inheritable‹szFakeSocket.set_inheritablecCs tdƒ‚dS)NzFakeNet can't share socketsrY)r2Z
process_idrrrÚshareszFakeSocket.shareN)rr)r)r)rr)r)rr)rr)!r8r9r:rPr=rhr~rr‚rArrr‰rŠr•r™ršrœr¡r¥r¦r¨rªr©r­r°r«r®r±r´rµr¶r¸r¹rrrrrRœs6    
 -
 
 
 
 
 
 
 
 
rR)'rrLr Ú collectionsrrjr$ÚtypingrrrÚenumÚ
contextlibrZ
trio._utilrrrrr;r=rrr!r'r.Úfrozenr/r?rAÚabcZ SocketFactoryrOZHostnameResolverrVrPrÚ
SocketTyperRrrrrÚ<module>    s6             #