ó
    Ö›‘hO@  ã                   óÊ  • S r SSKrSSKJr  SSKJr  SSKJrJr  SSK	J
r
Jr  SSKJrJr  SSKJrJrJrJr  SS	KJr  SS
KJrJr  SSKJr  SSKJr  SSKJrJr  SSK J!r!J"r"  SSK#J$r$  SSK%J&r&   " S S\5      r' " S S5      r( " S S\\(\'5      r) " S S\\(\'5      r*\+" 5       RY                  \)R[                  5       5        \+" 5       RY                  \*R[                  5       5        g)zU
Tests for implementations of L{IReactorUDP} and the UDP parts of
L{IReactorSocket}.
é    N)Úimplementer)ÚverifyObject)ÚdeferÚerror)ÚIPv4AddressÚIPv6Address)ÚDeferredÚmaybeDeferred)ÚIListeningPortÚILoggingContextÚIReactorSocketÚIReactorUDP)ÚDatagramProtocol)ÚLogObserverMixinÚfindFreePort)ÚReactorBuilder)Úcontext)ÚILogContextÚerr)Ú
GoodClientÚServer)ÚskipWithoutIPv6)ÚSkipTestc                   ó*   • \ rS rSrSrS rS rS rSrg)ÚDatagramTransportTestsMixiné"   zH
Mixin defining tests which apply to any port/datagram based transport.
c                 ó$  • U R                  5       nU R                  5       n[        [        5       " S S[        5      5       nU" 5       nU R                  X$5      nSUR                  5       R                  4-  nU R                  U4US   S   5        g)z]
When a port starts, a message including a description of the associated
protocol is logged.
c                   ó   • \ rS rSrS rSrg)ÚQDatagramTransportTestsMixin.test_startedListeningLogMessage.<locals>.SomeProtocolé/   c                 ó   • g)NzCrazy Protocol© ©Úselfs    ÚbC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/internet/test/test_udp.pyÚ	logPrefixÚ[DatagramTransportTestsMixin.test_startedListeningLogMessage.<locals>.SomeProtocol.logPrefix1   s   € Ø'ó    r"   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r&   Ú__static_attributes__r"   r(   r%   ÚSomeProtocolr   /   s   † õ(r(   r.   zCrazy Protocol starting on %dr   ÚmessageN)	ÚobserveÚbuildReactorr   r   r   ÚgetListeningPortÚgetHostÚportÚassertEqual)r$   ÚloggedMessagesÚreactorr.   ÚprotocolÚpÚexpectedMessages          r%   Útest_startedListeningLogMessageÚ;DatagramTransportTestsMixin.test_startedListeningLogMessage'   s‹   € ð
 Ÿ™›ˆØ×#Ñ#Ó%ˆä	”_Ó	%ô	(Ô+ó 	(ó 
&ð	(ñ  “>ˆà×!Ñ! 'Ó4ˆØ9¸Q¿Y¹Y»[×=MÑ=MÐ<OÑOˆØ×Ñ˜/Ð+¨^¸AÑ->¸yÑ-IÕJr(   c                 óN  ^^^^• U R                  5       mU R                  5       mU R                  T[        5       5      mSTR	                  5       R
                   S3nU4S jmUUU4S jnTR                  U5        U R                  T5        U R                  U4TS   S   5        g)z{
When a connection is lost a message is logged containing an
address identifying the port and the fact that it was closed.
z
(UDP Port z Closed)c                 ó&   >• TR                  5         g ©N©Ústop©Úignoredr7   s    €r%   ÚstopReactorÚNDatagramTransportTestsMixin.test_connectionLostLogMessage.<locals>.stopReactorD   s   ø€ Ø�L‰L�Nr(   c                  óX   >• T S S 2	 [        TR                  5      R                  T5        g r?   )r
   ÚstopListeningÚaddCallback)r6   r9   rD   s   €€€r%   ÚdoStopListeningÚRDatagramTransportTestsMixin.test_connectionLostLogMessage.<locals>.doStopListeningG   s"   ø€ ØšqÐ!Ü˜!Ÿ/™/Ó*×6Ñ6°{ÕCr(   r   r/   N)	r0   r1   r2   r   r3   r4   ÚcallWhenRunningÚ
runReactorr5   )r$   r:   rI   r6   r9   r7   rD   s      @@@@r%   Útest_connectionLostLogMessageÚ9DatagramTransportTestsMixin.test_connectionLostLogMessage:   s“   û€ ð
 Ÿ™›ˆØ×#Ñ#Ó%ˆØ×!Ñ! 'Ô+;Ó+=Ó>ˆØ& q§y¡y£{×'7Ñ'7Ð&8¸ÐAˆõ	÷	Dð 	×Ñ Ô0Ø�‰˜Ô à×Ñ˜/Ð+¨^¸AÑ->¸yÑ-IÕJr(   c                 ó@  ^•  " U4S jS[         5      nU R                  5       mU" 5       nU R                  TU5        U R                  T5        U R	                  UR
                  5        U R	                  UR                  5        U R                  UR                  5        g)z�
L{DatagramProtocol.stopProtocol} is called asynchronously (ie, not
re-entrantly) when C{stopListening} is used to stop the datagram
transport.
c                   ó8   >• \ rS rSrSrSrSrSrS rU 4S jr	Sr
g)ÚVDatagramTransportTestsMixin.test_stopProtocolScheduling.<locals>.DisconnectingProtocoléW   Fc                 ób   • SU l         SU l        U R                  R                  5         SU l        g )NTF)ÚstartedÚinStartProtocolÚ	transportrG   r#   s    r%   ÚstartProtocolÚdDatagramTransportTestsMixin.test_stopProtocolScheduling.<locals>.DisconnectingProtocol.startProtocol]   s)   € Ø#�”Ø'+�Ô$Ø—‘×,Ñ,Ô.Ø',�Õ$r(   c                 óV   >• SU l         U R                  U l        TR                  5         g )NT)ÚstoppedrU   ÚstoppedInStartrA   ©r$   r7   s    €r%   ÚstopProtocolÚcDatagramTransportTestsMixin.test_stopProtocolScheduling.<locals>.DisconnectingProtocol.stopProtocolc   s!   ø€ Ø#�”Ø&*×&:Ñ&:�Ô#Ø—‘•r(   )rU   rT   rZ   r[   N)r)   r*   r+   r,   rT   rZ   rU   r[   rW   r]   r-   )r7   s   €r%   ÚDisconnectingProtocolrQ   W   s&   ø† ØˆGØˆGØ#ˆOØ"ˆNò-÷ð r(   r_   N)	r   r1   r2   rL   Ú
assertTruerT   rZ   ÚassertFalser[   )r$   r_   r8   r7   s      @r%   Útest_stopProtocolSchedulingÚ7DatagramTransportTestsMixin.test_stopProtocolSchedulingP   s|   ø€ ÷	Ô$4ô 	ð" ×#Ñ#Ó%ˆÙ(Ó*ˆØ×Ñ˜g xÔ0Ø�‰˜Ô à�‰˜×(Ñ(Ô)Ø�‰˜×(Ñ(Ô)Ø×Ñ˜×0Ñ0Õ1r(   r"   N)	r)   r*   r+   r,   Ú__doc__r;   rM   rb   r-   r"   r(   r%   r   r   "   s   † ñòKò&Kõ,2r(   r   c                   ó¤   • \ rS rSrSrS rS r\S 5       rS r	S r
S rS	 rS
 r\S 5       r\S 5       rS r\S 5       r\S 5       rS rS rSrg)ÚUDPPortTestsMixinér   zM
Tests for L{IReactorUDP.listenUDP} and
L{IReactorSocket.adoptDatagramPort}.
c                 ó–   • U R                  5       nU R                  U[        5       5      nU R                  [	        [
        U5      5        g)zI
L{IReactorUDP.listenUDP} returns an object providing L{IListeningPort}.
N)r1   r2   r   r`   r   r   ©r$   r7   r4   s      r%   Útest_interfaceÚ UDPPortTestsMixin.test_interfacex   s;   € ð ×#Ñ#Ó%ˆØ×$Ñ$ WÔ.>Ó.@ÓAˆØ�‰œ¤^°TÓ:Õ;r(   c                 óÜ   • [        [        R                  S9u  pU R                  5       nU R	                  U[        5       X!S9nU R                  UR                  5       [        SX5      5        g)z“
L{IListeningPort.getHost} returns an L{IPv4Address} giving a
dotted-quad of the IPv4 address the port is listening on as well as
the port number.
)Útype)r4   Ú	interfaceÚUDPN)	r   ÚsocketÚ
SOCK_DGRAMr1   r2   r   r5   r3   r   )r$   ÚhostÚ
portNumberr7   r4   s        r%   Útest_getHostÚUDPPortTestsMixin.test_getHost€   sd   € ô (¬V×->Ñ->Ñ?ÑˆØ×#Ñ#Ó%ˆØ×$Ñ$ØÔ%Ó'¨jð %ð 
ˆð 	×Ñ˜Ÿ™›¬°U¸DÓ)MÕNr(   c                 óÚ   • U R                  5       nU R                  U[        5       SS9nUR                  5       nU R	                  UR
                  S5        U R                  U[        5        g)zZ
L{IListeningPort.getHost} returns an L{IPv6Address} when listening on
an IPv6 interface.
ú::1©rn   N)r1   r2   r   r3   r5   rr   ÚassertIsInstancer   )r$   r7   r4   Úaddrs       r%   Útest_getHostIPv6Ú"UDPPortTestsMixin.test_getHostIPv6�   s\   € ð ×#Ñ#Ó%ˆØ×$Ñ$ WÔ.>Ó.@ÈEÐ$ÐRˆØ�|‰|‹~ˆØ×Ñ˜Ÿ™ EÔ*Ø×Ñ˜d¤KÕ0r(   c                 óŠ   • U R                  5       nU R                  [        R                  UR                  [        5       SSS9  g)zr
An L{InvalidAddressError} is raised when trying to listen on an address
that isn't a valid IPv4 or IPv6 address.
r   zexample.comrx   N)r1   ÚassertRaisesr   ÚInvalidAddressErrorÚ	listenUDPr   r\   s     r%   Útest_invalidInterfaceÚ'UDPPortTestsMixin.test_invalidInterface™   sC   € ð
 ×#Ñ#Ó%ˆØ×ÑÜ×%Ñ%Ø×ÑÜÓØØ#ð 	ò 	
r(   c                 ó’  ^ ^•  " S S[         5      nT R                  5       mU" S5      nUR                  nT R                  TU5      nUR	                  5       nU 4S jnUR                  U5        UR                  [        5        UR                  U4S j5        UR                  SSUR                  45        T R                  T5        g)	zz
Datagram transports implement L{ILoggingContext.logPrefix} to return a
message reflecting the protocol they are running.
c                   ó&   • \ rS rSrS rS rS rSrg)ÚIUDPPortTestsMixin.test_logPrefix.<locals>.CustomLogPrefixDatagramProtocolé­   c                 ó.   • Xl         [        5       U l        g r?   )Ú_prefixr	   Úsystem)r$   Úprefixs     r%   Ú__init__ÚRUDPPortTestsMixin.test_logPrefix.<locals>.CustomLogPrefixDatagramProtocol.__init__®   s   € Ø%”Ü&›j�•r(   c                 ó   • U R                   $ r?   )rˆ   r#   s    r%   r&   ÚSUDPPortTestsMixin.test_logPrefix.<locals>.CustomLogPrefixDatagramProtocol.logPrefix²   s   € Ø—|‘|Ð#r(   c                 óž   • U R                   b@  U R                   nS U l         UR                  [        R                  " [        5      S   5        g g )Nr‰   )r‰   Úcallbackr   Úgetr   )r$   Úbytesrz   r‰   s       r%   ÚdatagramReceivedÚZUDPPortTestsMixin.test_logPrefix.<locals>.CustomLogPrefixDatagramProtocol.datagramReceivedµ   s;   € Ø—;‘;Ñ*Ø!Ÿ[™[�FØ"&�D”KØ—O‘O¤G§K¢K´Ó$<¸XÑ$FÕGð +r(   )rˆ   r‰   N)r)   r*   r+   r,   r‹   r&   r“   r-   r"   r(   r%   ÚCustomLogPrefixDatagramProtocolr…   ­   s   † ò)ò$õHr(   r•   zCustom Datagramsc                 ó*   >• TR                  SU 5        g )NzCustom Datagrams (UDP))r5   )r‰   r$   s    €r%   Ú	gotSystemÚ3UDPPortTestsMixin.test_logPrefix.<locals>.gotSystemÁ   s   ø€ Ø×ÑÐ5°vÕ>r(   c                 ó$   >• TR                  5       $ r?   r@   rB   s    €r%   Ú<lambda>Ú2UDPPortTestsMixin.test_logPrefix.<locals>.<lambda>Æ   s   ø€  g§l¡l¤nr(   s
   some bytesú	127.0.0.1N)r   r1   r‰   r2   r3   rH   Ú
addErrbackr   Úwriter4   rL   )r$   r•   r8   Údr4   Úaddressr—   r7   s   `      @r%   Útest_logPrefixÚ UDPPortTestsMixin.test_logPrefix§   s¢   ù€ ô	HÔ.>ô 	Hð ×#Ñ#Ó%ˆÙ2Ð3EÓFˆØ�O‰OˆØ×$Ñ$ W¨hÓ7ˆØ—,‘,“.ˆõ	?ð 	
�‰�iÔ Ø	�‰”SÔØ	�‰Ô4Ô5à�
‰
�= ;°·±Ð"=Ô>Ø�‰˜Õ r(   c                 óž  ^ ^^•  " S S[         5      nT R                  5       mU" 5       nUR                  nT R                  TU5      nUR	                  5       nSmUU 4S jnUR
                  " U5        UR                  " [        5        UR
                  " U4S j5        UR                  TSUR                  45        T R                  T5        g)z8
Write a sequence of L{bytes} to a L{DatagramProtocol}.
c                   ó    • \ rS rSrS rS rSrg)ÚDUDPPortTestsMixin.test_writeSequence.<locals>.SimpleDatagramProtocoléÐ   c                 ó"   • [        5       U l        g r?   )r	   r   r#   s    r%   r‹   ÚMUDPPortTestsMixin.test_writeSequence.<locals>.SimpleDatagramProtocol.__init__Ñ   s   € Ü%›Z�•
r(   c                 ó:   • U R                   R                  U5        g r?   )r   r�   )r$   Údatarz   s      r%   r“   ÚUUDPPortTestsMixin.test_writeSequence.<locals>.SimpleDatagramProtocol.datagramReceivedÔ   s   € Ø—
‘
×#Ñ# DÕ)r(   )r   N)r)   r*   r+   r,   r‹   r“   r-   r"   r(   r%   ÚSimpleDatagramProtocolr¥   Ð   s   † ò(õ*r(   r¬   )s   somes   bytess   tos   writec                 óH   >• TR                  SR                  T5      U 5        g )Nr(   )r5   Újoin)rª   ÚdataToWriter$   s    €€r%   ÚgotDataÚ5UDPPortTestsMixin.test_writeSequence.<locals>.gotDataÞ   s   ø€ Ø×Ñ˜SŸX™X kÓ2°DÕ9r(   c                 ó$   >• TR                  5       $ r?   r@   rB   s    €r%   rš   Ú6UDPPortTestsMixin.test_writeSequence.<locals>.<lambda>ã   s   ø€ ¨'¯,©,¬.r(   rœ   N)r   r1   r   r2   r3   rH   r�   r   ÚwriteSequencer4   rL   )	r$   r¬   r8   r   r4   r    r°   r¯   r7   s	   `      @@r%   Útest_writeSequenceÚ$UDPPortTestsMixin.test_writeSequenceË   sª   ú€ ô
	*Ô%5ô 	*ð ×#Ñ#Ó%ˆÙ)Ó+ˆØ—‘ˆØ×$Ñ$ W¨hÓ7ˆØ—,‘,“.ˆØ:ˆö	:ð 	×Ò˜'Ô"Ø×ÒœÔØ×ÒÔ8Ô9Ø×Ñ˜;¨°g·l±lÐ(CÔDØ�‰˜Õ r(   c                 óÐ   • U R                  5       nU R                  U[        5       5      nU R                  [	        UR                  5       R                  5      [	        U5      5        g)zA
C{str()} on the listening port object includes the port number.
N)r1   r2   r   ÚassertInÚstrr3   r4   ri   s      r%   Útest_strÚUDPPortTestsMixin.test_strç   sK   € ð ×#Ñ#Ó%ˆØ×$Ñ$ WÔ.>Ó.@ÓAˆØ�‰”c˜$Ÿ,™,›.×-Ñ-Ó.´°D³	Õ:r(   c                 óÐ   • U R                  5       nU R                  U[        5       5      nU R                  [	        UR                  5       R                  5      [        U5      5        g)zB
C{repr()} on the listening port object includes the port number.
N)r1   r2   r   r¸   Úreprr3   r4   r¹   ri   s      r%   Ú	test_reprÚUDPPortTestsMixin.test_reprï   sK   € ð ×#Ñ#Ó%ˆØ×$Ñ$ WÔ.>Ó.@ÓAˆØ�‰”d˜4Ÿ<™<›>×.Ñ.Ó/´°T³Õ;r(   c                 ó„  ^^	^
• U R                  5       m	[        5       m
[        R                  " 5       =nT
l        U R                  T	T
SS9  [        5       m[        R                  " 5       =nTl        U R                  T	TSS9  TR                  R                  5       nUU
4S jnU	4S jn[        R                  " X/5      nUR                  U5        UR                  U5        UR                  [        5        U R                  T	5        T
R                  S   nU R                  USUR                   UR"                  445        g)zC
Writing to an IPv6 UDP socket on the loopback interface succeeds.
rw   rx   c                 óÀ   >• TR                   R                  SSTR                   R                  5       R                  45        [        R
                  " 5       =nTl        U$ )ú¿
Send a datagram from the client once it's started.

@param ignored: a list of C{[None, None]}, which is ignored
@returns: a deferred which fires when the server has received a
    datagram.
ó   spamrw   )rV   rž   r3   r4   r   r	   ÚpacketReceived©rC   ÚserverReceivedÚclientÚservers     €€r%   ÚcbClientStartedÚDUDPPortTestsMixin.test_writeToIPv6Interface.<locals>.cbClientStarted  sO   ø€ ð ×Ñ×"Ñ" 7¨U°F×4DÑ4D×4LÑ4LÓ4N×4SÑ4SÐ,TÔUÜ5:·^²^Ó5EÐEˆN˜VÔ2Ø!Ð!r(   c                 ó&   >• TR                  5         g©zm
Stop the reactor after a datagram is received.

@param ignored: L{None}, which is ignored
@returns: L{None}
Nr@   rB   s    €r%   ÚcbServerReceivedÚEUDPPortTestsMixin.test_writeToIPv6Interface.<locals>.cbServerReceived  s   ø€ ð �L‰L�Nr(   r   rÃ   N©r1   r   r   r	   ÚstartedDeferredr2   r   rV   r3   ÚgatherResultsrH   r�   r   rL   Úpacketsr5   rr   r4   ©r$   ÚserverStartedÚclientStartedÚcAddrrÉ   rÍ   rŸ   ÚpacketrÇ   r7   rÈ   s           @@@r%   Útest_writeToIPv6InterfaceÚ+UDPPortTestsMixin.test_writeToIPv6Interface÷   s  ú€ ð
 ×#Ñ#Ó%ˆÜ“ˆÜ16·²Ó1AÐAˆ˜Ô.Ø×Ñ˜g v¸ÐÑ?ä“ˆÜ16·²Ó1AÐAˆ˜Ô.Ø×Ñ˜g v¸ÐÑ?Ø× Ñ ×(Ñ(Ó*ˆö
	"õ	ô ×Ò Ð >Ó?ˆØ	�‰�oÔ&Ø	�‰Ð&Ô'Ø	�‰”SÔØ�‰˜Ô à—‘ Ñ"ˆØ×Ñ˜ '¨E¯J©J¸¿
¹
Ð+CÐ!DÕEr(   c                 ó„  ^^	^
• U R                  5       m	[        5       m
[        R                  " 5       =nT
l        U R                  T	T
SS9  [        5       m[        R                  " 5       =nTl        U R                  T	TSS9  TR                  R                  5       nUU
4S jnU	4S jn[        R                  " X/5      nUR                  U5        UR                  U5        UR                  [        5        U R                  T	5        T
R                  S   nU R                  USUR                   UR"                  445        g)zx
An IPv6 address can be passed as the C{interface} argument to
L{listenUDP}. The resulting Port accepts IPv6 datagrams.
rw   rx   c                 óò   >• TR                   R                  STR                   R                  5       R                  5        TR                   R	                  S5        [
        R                  " 5       =nTl        U$ )rÂ   rw   rÃ   )rV   Úconnectr3   r4   rž   r   r	   rÄ   rÅ   s     €€r%   rÉ   ÚMUDPPortTestsMixin.test_connectedWriteToIPv6Interface.<locals>.cbClientStarted4  s^   ø€ ð ×Ñ×$Ñ$ U¨F×,<Ñ,<×,DÑ,DÓ,F×,KÑ,KÔLØ×Ñ×"Ñ" 7Ô+Ü5:·^²^Ó5EÐEˆN˜VÔ2Ø!Ð!r(   c                 ó&   >• TR                  5         grÌ   r@   rB   s    €r%   rÍ   ÚNUDPPortTestsMixin.test_connectedWriteToIPv6Interface.<locals>.cbServerReceivedB  s   ø€ ð �L‰L�Nr(   r   rÃ   NrÏ   rÓ   s           @@@r%   Ú"test_connectedWriteToIPv6InterfaceÚ4UDPPortTestsMixin.test_connectedWriteToIPv6Interface$  s  ú€ ð ×#Ñ#Ó%ˆÜ“ˆÜ16·²Ó1AÐAˆ˜Ô.Ø×Ñ˜g v¸ÐÑ?ä“ˆÜ16·²Ó1AÐAˆ˜Ô.Ø×Ñ˜g v¸ÐÑ?Ø× Ñ ×(Ñ(Ó*ˆö	"õ	ô ×Ò Ð >Ó?ˆØ	�‰�oÔ&Ø	�‰Ð&Ô'Ø	�‰”SÔØ�‰˜Ô à—‘ Ñ"ˆØ×Ñ˜ '¨E¯J©J¸¿
¹
Ð+CÐ!DÕEr(   c                 ó°   • U R                  5       nU R                  U[        5       5      nU R                  [        R
                  UR                  SS5        g)zV
Writing to a hostname instead of an IP address will raise an
L{InvalidAddressError}.
Úspam)úexample.invalidé   N©r1   r2   r   r~   r   r   rž   ri   s      r%   Ú/test_writingToHostnameRaisesInvalidAddressErrorÚAUDPPortTestsMixin.test_writingToHostnameRaisesInvalidAddressErrorU  sJ   € ð
 ×#Ñ#Ó%ˆØ×$Ñ$ WÔ.>Ó.@ÓAˆØ×ÑÜ×%Ñ% t§z¡z°6Ð;Qõ	
r(   c                 ó®   • U R                  5       nU R                  U[        5       SS9nU R                  [        R
                  UR                  SS5        g)úT
Writing to an IPv6 address on an IPv4 socket will raise an
L{InvalidAddressError}.
rœ   rx   rã   )rw   rå   Nræ   ri   s      r%   Ú1test_writingToIPv6OnIPv4RaisesInvalidAddressErrorÚCUDPPortTestsMixin.test_writingToIPv6OnIPv4RaisesInvalidAddressError`  sK   € ð ×#Ñ#Ó%ˆØ×$Ñ$ WÔ.>Ó.@ÈKÐ$ÐXˆØ×Ñœ%×3Ñ3°T·Z±ZÀÈÕTr(   c                 ó®   • U R                  5       nU R                  U[        5       SS9nU R                  [        R
                  UR                  SS5        g)rê   rw   rx   rã   )rœ   rå   Nræ   ri   s      r%   Ú1test_writingToIPv4OnIPv6RaisesInvalidAddressErrorÚCUDPPortTestsMixin.test_writingToIPv4OnIPv6RaisesInvalidAddressErrorj  sO   € ð ×#Ñ#Ó%ˆØ×$Ñ$ WÔ.>Ó.@ÈEÐ$ÐRˆØ×ÑÜ×%Ñ% t§z¡z°6Ð;Kõ	
r(   c                 ó°   • U R                  5       nU R                  U[        5       5      nU R                  [        R
                  UR                  SS5        g)zY
Connecting to a hostname instead of an IP address will raise an
L{InvalidAddressError}.
rä   rå   N)r1   r2   r   r~   r   r   rÜ   ri   s      r%   Ú2test_connectingToHostnameRaisesInvalidAddressErrorÚDUDPPortTestsMixin.test_connectingToHostnameRaisesInvalidAddressErrorv  sH   € ð
 ×#Ñ#Ó%ˆØ×$Ñ$ WÔ.>Ó.@ÓAˆØ×Ñœ%×3Ñ3°T·\±\ÐCTÐVWÕXr(   c                 ó¸   • U R                  5       nU R                  U[        5       5      nUR                  S5        U R	                  UR                  5       5        g)zS
L{IListeningPort.setBroadcastAllowed} sets broadcast to be allowed
on the socket.
TN)r1   r2   r   ÚsetBroadcastAllowedr`   ÚgetBroadcastAllowedri   s      r%   Útest_allowBroadcastÚ%UDPPortTestsMixin.test_allowBroadcast  sK   € ð
 ×#Ñ#Ó%ˆØ×$Ñ$ WÔ.>Ó.@ÓAˆØ× Ñ  Ô&Ø�‰˜×0Ñ0Ó2Õ3r(   r"   N)r)   r*   r+   r,   rd   rj   rt   r   r{   r�   r¡   rµ   rº   r¾   rØ   rà   rç   rë   rî   rñ   rö   r-   r"   r(   r%   rf   rf   r   s¨   † ñò
<òOð ñ	1ó ð	1ò
ò"!òH!ò8;ò<ð ñ*Fó ð*FðX ñ.Fó ð.Fò`	
ð ñUó ðUð ñ	
ó ð	
òYõ4r(   rf   c                   ó*   • \ rS rSrSr\4r SS jrSrg)ÚUDPServerTestsBuilderiŠ  zA
Run L{UDPPortTestsMixin} tests using newly created UDP
sockets.
c                 ó"   • UR                  X2XES9$ )a
  
Get a UDP port from a reactor.

@param reactor: A reactor used to build the returned
    L{IListeningPort} provider.
@type reactor: L{twisted.internet.interfaces.IReactorUDP}

@see: L{twisted.internet.IReactorUDP.listenUDP} for other
    argument and return types.
)rn   ÚmaxPacketSize)r€   )r$   r7   r8   r4   rn   rû   s         r%   r2   Ú&UDPServerTestsBuilder.getListeningPort”  s!   € ð × Ñ Ø ið !ð 
ð 	
r(   r"   N©r   Ú i    )	r)   r*   r+   r,   rd   r   ÚrequiredInterfacesr2   r-   r"   r(   r%   rù   rù   Š  s   † ñð
 &˜Ðð FJ÷
r(   rù   c                   ó*   • \ rS rSrSr\4r SS jrSrg)ÚUDPFDServerTestsBuilderi¦  z;
Run L{UDPPortTestsMixin} tests using adopted UDP sockets.
c                 óJ  • [         R                  " U5      (       aÙ  SU;   a-  [        R                  n[        R                  " XC5      S   S   nO[        R
                  nXC4n[        R                  " U[        R                  5      nUR                  U5        UR                  S5         UR                  UR                  5       UR                  X%5      UR                  5         UR                  5         $ [        S5      e! UR                  5         UR                  5         f = f)aL  
Get a UDP port from a reactor, wrapping an already-initialized file
descriptor.

@param reactor: A reactor used to build the returned
    L{IListeningPort} provider.
@type reactor: L{twisted.internet.interfaces.IReactorSocket}

@param port: A port number to which the adopted socket will be
    bound.
@type port: C{int}

@param interface: The local IPv4 or IPv6 address to which the
    adopted socket will be bound.  defaults to '', ie all IPv4
    addresses.
@type interface: C{str}

@see: L{twisted.internet.IReactorSocket.adoptDatagramPort} for other
    argument and return types.
Ú:r   é   Fz'Reactor does not provide IReactorSocket)r   Ú
providedByrp   ÚAF_INET6ÚgetaddrinfoÚAF_INETrq   ÚbindÚsetblockingÚadoptDatagramPortÚfilenoÚfamilyÚcloser   )	r$   r7   r8   r4   rn   rû   Údomainr    ÚportSocks	            r%   r2   Ú(UDPFDServerTestsBuilder.getListeningPort¯  sä   € ô. ×$Ò$ W×-Ñ-Ø�iÓÜŸ™�Ü ×,Ò,¨YÓ=¸aÑ@ÀÑC‘äŸ™�Ø$Ð+�Ü—}’} V¬V×->Ñ->Ó?ˆHØ�M‰M˜'Ô"Ø× Ñ  Ô'ð
!Ø×0Ñ0Ø—O‘OÓ% x§¡¸óð —‘Ô!ð —‘Õ äÐDÓEÐEøð —‘Ô!ð —‘Õ ús   Â**D  Ä "D"r"   Nrý   )	r)   r*   r+   r,   rd   r   rÿ   r2   r-   r"   r(   r%   r  r  ¦  s   † ñð )Ð*Ðð FJ÷-Fr(   r  ).rd   rp   Úzope.interfacer   Úzope.interface.verifyr   Útwisted.internetr   r   Útwisted.internet.addressr   r   Útwisted.internet.deferr	   r
   Útwisted.internet.interfacesr   r   r   r   Útwisted.internet.protocolr   Ú&twisted.internet.test.connectionmixinsr   r   Ú#twisted.internet.test.reactormixinsr   Útwisted.pythonr   Útwisted.python.logr   r   Útwisted.test.test_udpr   r   Útwisted.test.testutilsr   Útwisted.trial.unittestr   r   rf   rù   r  ÚglobalsÚupdateÚmakeTestCaseClassesr"   r(   r%   Ú<module>r#     s¾   ðñó å &Ý .ç )ß =ß :÷ó õ 7ß QÝ >Ý "ß /ß 4Ý 2Ý +ôM2Ð"2ô M2÷`U4ñ U4ôp
ØÐ%Ð'Bô
ô86FØÐ%Ð'Bô6Fñr ƒ	× Ñ Ð&×:Ñ:Ó<Ô =Ù ƒ	× Ñ Ð(×<Ñ<Ó>Õ ?r(   