ó
    Ö›‘hˆ1  ã                  óª  • S r SSKJr  SSKrSSKrSSKrSSKrSSKJrJ	r	  SSK
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Jr  SS
KJrJrJr  SSKJr  SSK J!r!  SSK"J#r#  \(       a  SSK$J%r%  \" \\RL                  \RN                  \RP                  5       " S S\RR                  5      5       r*\" \RV                  5       " S S\\*5      5       r,g)z
UDP support for IOCP reactor
é    )ÚannotationsN)ÚTYPE_CHECKINGÚOptional)Úimplementer)ÚaddressÚdeferÚerrorÚ
interfaces)ÚMulticastMixin)ÚisIPAddressÚisIPv6Address)ÚabstractÚiocpsupport)ÚERROR_CONNECTION_REFUSEDÚERROR_IO_PENDINGÚERROR_PORT_UNREACHABLE)ÚIReadWriteHandle)ÚAbstractDatagramProtocol)Úlog)ÚIOCPReactorc                  ó$  • \ rS rSr% SrS\S'   \R                  r\R                  r
SrSrS\S'      S!           S"S	 jjrS
 rS#S jrS rS rS$S jrS rS rS rS rS rS%S jrS rS rS rS rS rS%S jrS rS r S r!S r"S r#S r$g)&ÚPorté#   z¸
UDP port, listening for packets.

@ivar addressFamily: L{socket.AF_INET} or L{socket.AF_INET6}, depending on
    whether this port is listening on an IPv4 address or an IPv6 address.
r   ÚreactorFNzOptional[int]Ú_realPortNumberc                óÆ  • Xl         X l        X@l        X0l        U R	                  5         SU l        U R                  5         [        R                  R                  X5        [        R                  " U R                  U R                  5      n[        R                  " UR                  5       5      n[!        U5      U l        [!        [$        R&                  " S5      5      U l        g)z.
Initialize with a numeric port to listen on.
NÚi)ÚportÚprotocolÚreadBufferSizeÚ	interfaceÚ	setLogStrÚ_connectedAddrÚ_setAddressFamilyr   Ú
FileHandleÚ__init__ÚsocketÚaddressFamilyÚ
socketTypeÚ_iocpÚ
maxAddrLenÚfilenoÚ	bytearrayÚaddressBufferÚstructÚcalcsizeÚaddressLengthBuffer)Úselfr   Úprotor!   ÚmaxPacketSizer   ÚsktÚaddrLens           ÚdC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/internet/iocpreactor/udp.pyr&   ÚPort.__init__:   sž   € ð Œ	ØŒØ+ÔØ"ŒØ�‰ÔØ"ˆÔØ×ÑÔ ä×Ñ×$Ñ$ TÔ3ä�mŠm˜D×.Ñ.°·±Ó@ˆÜ×"Ò" 3§:¡:£<Ó0ˆÜ& wÓ/ˆÔä#,¬V¯_ª_¸SÓ-AÓ#BˆÕ ó    c                ó(  • [        U R                  5      (       a  [        R                  U l        g[        U R                  5      (       a  [        R                  U l        gU R                  (       a!  [        R                  " U R                  S5      eg)z(
Resolve address family for the socket.
znot an IPv4 or IPv6 addressN)	r   r!   r'   ÚAF_INET6r(   r   ÚAF_INETr	   ÚInvalidAddressError©r2   s    r7   r$   ÚPort._setAddressFamilyU   sc   € ô ˜Ÿ™×(Ñ(Ü!'§¡ˆDÕÜ˜Ÿ™×(Ñ(Ü!'§¡ˆDÕØ�^�^Ü×+Ò+Ø—‘Ð =óð ð r9   c                óž   • U R                   b'  SU R                  R                   SU R                    S3$ SU R                  R                   S3$ )NÚ<z on Ú>z not connected>)r   r   Ú	__class__r>   s    r7   Ú__repr__ÚPort.__repr__b   sO   € Ø×ÑÑ+Ø�t—}‘}×.Ñ.Ð/¨t°D×4HÑ4HÐ3IÈÐKÐKà�t—}‘}×.Ñ.Ð/¨Ð?Ð?r9   c                ó   • U R                   $ )z
Return a socket object.
)r'   r>   s    r7   Ú	getHandleÚPort.getHandleh   ó   € ð �{‰{Ðr9   c                óD   • U R                  5         U R                  5         g)z°
Create and bind my socket, and begin listening on it.

This is called on unserialization, and must be called after creating a
server to begin listening on the specified port.
N)Ú_bindSocketÚ_connectToProtocolr>   s    r7   ÚstartListeningÚPort.startListeningn   s   € ð 	×ÑÔØ×ÑÕ!r9   c                ób   • U R                   R                  U R                  U R                  5      $ ©N)r   ÚcreateSocketr(   r)   r>   s    r7   rQ   ÚPort.createSocketx   s#   € Ø�|‰|×(Ñ(¨×);Ñ);¸T¿_¹_ÓMÐMr9   c                óð  •  U R                  5       nUR                  U R                  U R                  45        UR                  5       S   U l        [        R                  " U R                  U R                  5      < SU R                  < 35        SU l        Xl        U R                  R                  U l        g ! [         a1  n[
        R                  " U R                  U R                  U5      eS nAff = f)Né   z starting on T)rQ   Úbindr!   r   ÚOSErrorr	   ÚCannotListenErrorÚgetsocknamer   r   ÚmsgÚ_getLogPrefixr   Ú	connectedr'   r,   ÚgetFileHandle)r2   r5   Úles      r7   rK   ÚPort._bindSocket{   sÂ   € ð	IØ×#Ñ#Ó%ˆCØ�H‰H�d—n‘n d§i¡iÐ0Ô1ð  #Ÿ™Ó0°Ñ3ˆÔä�Šà×!Ñ! $§-¡-Ö0°$×2FÓ2FðHô	
ð
 ˆŒØŒØ!Ÿ[™[×/Ñ/ˆÕøô ó 	IÜ×)Ò)¨$¯.©.¸$¿)¹)ÀRÓHÐHûð	Iús   ‚7B: Â:
C5Ã,C0Ã0C5c                ó�   • U R                   R                  U 5        U R                  5         U R                  R	                  U 5        g rP   )r   ÚmakeConnectionÚstartReadingr   ÚaddActiveHandler>   s    r7   rL   ÚPort._connectToProtocol�   s2   € Ø�‰×$Ñ$ TÔ*Ø×ÑÔØ�‰×$Ñ$ TÕ*r9   c                ól   • U R                   (       a#  U R                  XU5        U R                  5         g g rP   )ÚreadingÚ
handleReadÚdoRead©r2   ÚrcÚdataÚevts       r7   ÚcbReadÚPort.cbRead”   s%   € Ø�<�<Ø�O‰O˜B cÔ*Ø�K‰K�Mð r9   c                ó0  • U[         R                  [         R                  [        [        4;   a-  U R
                  (       a  U R                  R                  5         g g U(       a>  [        R                  " S[         R                  R                  US5      < SU< S35        g  U R                  R                  [        UR                  S U 5      [        R                   " UR"                  5      5        g ! [$         a    [        R&                  " 5          g f = f)Nzerror in recvfrom -- zunknown errorz (Ú))ÚerrnoÚWSAECONNREFUSEDÚWSAECONNRESETr   r   r#   r   ÚconnectionRefusedr   rY   Ú	errorcodeÚgetÚdatagramReceivedÚbytesÚbuffr*   ÚmakesockaddrÚ	addr_buffÚBaseExceptionÚerrrh   s       r7   rf   ÚPort.handleRead™   sÆ   € ØÜ×!Ñ!Ü×ÑÜ$Ü"ð	
ó 
ð ×"×"Ø—‘×/Ñ/Õ1ð #æÜ�G‹Gä—?‘?×&Ñ& r¨?Ö;»RðAõð
Ø—‘×.Ñ.Ü˜#Ÿ(™( 5 D˜/Ó*¬E×,>Ò,>¸s¿}¹}Ó,Mõøô !ó Ü—’–	ðús   Â"AC3 Ã3DÄDc                ó„  • [         R                  " U R                  U 5      nU R                  S   =Ul        nU R
                  =Ul        nU R                  =Ul        n[         R                  " U R                  5       X#XA5      u  pVU(       a4  U[        :w  a)  U R                  R                  SU R                  XVU5        g g g ©Nr   )r*   ÚEventrl   Ú_readBuffersrx   r.   rz   r1   Úaddr_len_buffÚrecvfromr\   r   r   Ú	callLater)r2   rk   rx   rz   r‚   ri   rj   s          r7   rg   ÚPort.doRead¯   s¤   € Ü�kŠk˜$Ÿ+™+ tÓ,ˆà×+Ñ+¨AÑ.Ð.ˆŒ�4Ø$(×$6Ñ$6Ð6ˆŒ˜	Ø,0×,DÑ,DÐDˆÔ˜MÜ—>’>Ø×ÑÓ  $°=ó
‰ˆö �"Ô(Ó(ð �L‰L×"Ñ" 1 d§k¡k°2¸SÕAð )ˆ2r9   c                ób  • U R                   (       a0  USU R                   4;   d   e U R                  R                  U5      $ US:w  d   e[#        US   5      (       d6  [%        US   5      (       d#  US   S:w  a  [        R&                  " US   S5      e[#        US   5      (       a8  U R(                  [        R*                  :X  a  [        R&                  " US   S5      e[%        US   5      (       a8  U R(                  [        R,                  :X  a  [        R&                  " US   S5      e U R                  R/                  X5      $ ! [         a¶  nUR                  S   nU[
        R                  :X  a  U R                  U5      s SnA$ U[
        R                  :X  a  [        R                  " S5      eU[
        R                  [
        R                  [        [        4;   a  U R                  R!                  5          SnAge SnAff = f! [         aœ  nUR                  S   nU[
        R                  :X  a  U R                  X5      s SnA$ U[
        R                  :X  a  [        R                  " S5      eU[
        R                  [
        R                  [        [        4;   a   SnAge SnAff = f)z^
Write a datagram.

@param addr: should be a tuple (ip, port), can be None in connected
mode.
Nr   zmessage too longz<broadcast>z0write() only accepts IP addresses, not hostnamesz*IPv6 port write() called with IPv4 addressz*IPv4 port write() called with IPv6 address)r#   r'   ÚsendrV   Úargsrp   ÚWSAEINTRÚwriteÚWSAEMSGSIZEr	   ÚMessageLengthErrorrq   rr   r   r   r   rs   r   r   r=   r(   r;   r<   Úsendto)r2   ÚdatagramÚaddrÚseÚnos        r7   rŠ   Ú
Port.writeÁ   sL  € ð ××Ø˜D $×"5Ñ"5Ð6Ó6Ð6Ð6ðØ—{‘{×'Ñ'¨Ó1Ð1ð" ˜4“<Ð�<ä  Q¡×(Ñ(Ü% d¨1¡g×.Ñ.Ø˜‘G˜}Ó,ä×/Ò/Ø˜‘GÐOóð ô ˜4 ™7×#Ñ#¨×(:Ñ(:¼f¿o¹oÓ(MÜ×/Ò/Ø˜‘GÐIóð ô ˜T !™W×%Ñ%¨$×*<Ñ*<ÄÇÁÓ*NÜ×/Ò/Ø˜‘GÐIóð ðØ—{‘{×)Ñ)¨(Ó9Ð9øôE ó Ø—W‘W˜Q‘Z�ØœŸ™Ó'ØŸ:™: hÓ/Õ/Øœ5×,Ñ,Ó,Ü×2Ò2Ð3EÓFÐFØÜ×)Ñ)Ü×'Ñ'Ü,Ü*ð	ó ð —M‘M×3Ñ3×5Ñ5àûðûôF ó Ø—W‘W˜Q‘Z�ØœŸ™Ó'ØŸ:™: hÓ5Õ5Øœ5×,Ñ,Ó,Ü×2Ò2Ð3EÓFÐFØÜ×)Ñ)Ü×'Ñ'Ü,Ü*ð	ó ô àûð#úsU   §E Ä*H Å
HÅ3H ÆHÆA2H Ç?H È HÈ
J.È3J)ÉJ.ÉAJ)Ê(J)Ê)J.c                óF   • U R                  SR                  U5      U5        g )Nr9   )rŠ   Újoin)r2   Úseqr�   s      r7   ÚwriteSequenceÚPort.writeSequence  s   € Ø�
‰
�3—8‘8˜C“= $Õ'r9   c                óò   • U R                   (       a  [        S5      e[        U5      (       d'  [        U5      (       d  [        R
                  " US5      eX4U l         U R                  R                  X45        g)z
'Connect' to remote server.
z\already connected, reconnecting is not currently supported (talk to itamar if you want this)znot an IPv4 or IPv6 address.N)r#   ÚRuntimeErrorr   r   r	   r=   r'   Úconnect)r2   Úhostr   s      r7   rš   ÚPort.connect  sh   € ð ××Üð4óð ô ˜4× Ñ ¬°t×)<Ñ)<Ü×+Ò+¨DÐ2PÓQÐQØ#˜lˆÔØ�‰×Ñ˜T˜LÕ)r9   c                óÊ   • U R                  5         U R                  R                  U 5        U R                  (       a'  U R                  R	                  SU R
                  5        g g r   )ÚstopReadingr   ÚremoveActiveHandler[   r„   ÚconnectionLostr>   s    r7   Ú_loseConnectionÚPort._loseConnection  sF   € Ø×ÑÔØ�‰×'Ñ'¨Ô-Ø�>�>Ø�L‰L×"Ñ" 1 d×&9Ñ&9Õ:ð r9   c                ó„   • U R                   (       a  [        R                  " 5       =ol        OS nU R	                  5         U$ rP   )r[   r   ÚDeferredÚdr¡   )r2   Úresults     r7   ÚstopListeningÚPort.stopListening  s0   € Ø�>�>Ü#ŸnšnÓ.Ð.ˆF•VàˆFØ×ÑÔØˆr9   c                óX   • [         R                  " S[        SS9  U R                  5         g )Nz-Please use stopListening() to disconnect porté   )Ú
stacklevel)ÚwarningsÚwarnÚDeprecationWarningr§   r>   s    r7   ÚloseConnectionÚPort.loseConnection!  s%   € Ü�ŠØ;ÜØò	
ð
 	×ÑÕr9   c                ód  • [         R                  " SU R                  -  5        SU l        [        R                  R                  X5        U R                  R                  5         U R                  R                  5         U ?U ?
[        U S5      (       a  U R                  R                  S5        U ?gg)z
Cleans up my socket.
z(UDP Port %s Closed)Nr¥   )r   rY   r   r   r%   r    r   ÚdoStopr'   Úcloser\   Úhasattrr¥   Úcallback)r2   Úreasons     r7   r    ÚPort.connectionLost)  sŠ   € ô 	�ŠÐ&¨×)=Ñ)=Ñ=Ô>Ø#ˆÔÜ×Ñ×*Ñ*¨4Ô8Ø�‰×ÑÔØ�‰×ÑÔØˆKØÐÜ�4˜×ÑØ�F‰F�O‰O˜DÔ!Ø‘ð r9   c                óN   • U R                  U R                  5      nSU-  U l        g)z@
Initialize the C{logstr} attribute to be used by C{logPrefix}.
z%s (UDP)N)rZ   r   Úlogstr)r2   Ú	logPrefixs     r7   r"   ÚPort.setLogStr8  s$   € ð ×&Ñ& t§}¡}Ó5ˆ	Ø  9Ñ,ˆ�r9   c                ó   • U R                   $ )z;
Returns the name of my class, to prefix log entries with.
)r¹   r>   s    r7   rº   ÚPort.logPrefix?  rI   r9   c                ó  • U R                   R                  5       nU R                  [         R                  :X  a  [        R
                  " S/UQ76 $ U R                  [         R                  :X  a  [        R                  " S/USS Q76 $ g)zŒ
Return the local address of the UDP connection

@returns: the local address of the UDP connection
@rtype: L{IPv4Address} or L{IPv6Address}
ÚUDPNrª   )r'   rX   r(   r<   r   ÚIPv4Addressr;   ÚIPv6Address)r2   r�   s     r7   ÚgetHostÚPort.getHostE  sq   € ð �{‰{×&Ñ&Ó(ˆØ×Ñ¤§¡Ó/Ü×&Ò& uÐ4¨tÒ4Ð4Ø×Ñ¤6§?¡?Ó2Ü×&Ò& uÐ:°°R°a°Ò:Ð:ð 3r9   c                óv   • U R                   R                  [         R                  [         R                  U5        g)z‹
Set whether this port may broadcast. This is disabled by default.

@param enabled: Whether the port may broadcast.
@type enabled: L{bool}
N)r'   Ú
setsockoptÚ
SOL_SOCKETÚSO_BROADCAST)r2   Úenableds     r7   ÚsetBroadcastAllowedÚPort.setBroadcastAllowedR  s&   € ð 	�‰×Ñœv×0Ñ0´&×2EÑ2EÀwÕOr9   c                ó„   • [        U R                  R                  [        R                  [        R                  5      5      $ )zs
Checks if broadcast is currently allowed on this port.

@return: Whether this port may broadcast.
@rtype: L{bool}
)Úboolr'   Ú
getsockoptrÆ   rÇ   r>   s    r7   ÚgetBroadcastAllowedÚPort.getBroadcastAllowed[  s,   € ô �D—K‘K×*Ñ*¬6×+<Ñ+<¼f×>QÑ>QÓRÓSÐSr9   )r#   r   r.   r(   r1   r[   r¥   r\   r!   r¹   r   r   r    r'   )Ú é    N)r   Úintr3   r   r!   Ústrr4   rÒ   r   úIOCPReactor | NoneÚreturnÚNone)rÕ   rÓ   ©rÕ   zsocket.socketrP   )%Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__r'   r<   r(   Ú
SOCK_DGRAMr)   ÚdynamicReadBuffersr   r&   r$   rD   rG   rM   rQ   rK   rL   rl   rf   rg   rŠ   r–   rš   r¡   r§   r¯   r    r"   rº   rÂ   rÉ   rÎ   Ú__static_attributes__© r9   r7   r   r   #   sú   ‡ ñð ÓØ—N‘N€MØ×"Ñ"€JØÐð &*€O�]Ó)ð Ø!Ø&*ðCàðCð (ðCð ð	Cð
 ðCð $ðCð 
õCò6ô@òò"ôNò0ò(+ò
ò
ò,Bô$?òB(ò*ò;òòôò-òò;òPõTr9   r   c                  óR   • \ rS rSrSr    S             SS jjrS	S jrSrg)
ÚMulticastPortie  z&
UDP Port that supports multicasting.
Nc                ó>   • [         R                  XX#XE5        X`l        g rP   )r   r&   ÚlistenMultiple)r2   r   r3   r!   r4   r   rå   s          r7   r&   ÚMulticastPort.__init__k  s   € ô 	�‰�d %°MÔKØ,Õr9   c                ó8  • [         R                  U 5      nU R                  (       as  UR                  [        R
                  [        R                  S5        [        [        S5      (       a/  UR                  [        R
                  [        R                  S5        U$ )NrT   ÚSO_REUSEPORT)	r   rQ   rå   rÅ   r'   rÆ   ÚSO_REUSEADDRr´   rè   )r2   r5   s     r7   rQ   ÚMulticastPort.createSocketw  se   € Ü×Ñ Ó%ˆØ××Ø�N‰Nœ6×,Ñ,¬f×.AÑ.AÀ1ÔEÜ”v˜~×.Ñ.Ø—‘œv×0Ñ0´&×2EÑ2EÀqÔIØˆ
r9   )rå   )rÐ   rÑ   NF)r   rÒ   r3   r   r!   rÓ   r4   rÒ   r   rÔ   rå   rÌ   rÕ   rÖ   r×   )rØ   rÙ   rÚ   rÛ   rÜ   r&   rQ   rà   rá   r9   r7   rã   rã   e  sc   † ñð Ø!Ø&*Ø$ð
-àð
-ð (ð
-ð ð	
-ð
 ð
-ð $ð
-ð ð
-ð 
õ
-÷r9   rã   )-rÜ   Ú
__future__r   rp   r'   r/   r¬   Útypingr   r   Úzope.interfacer   Útwisted.internetr   r   r	   r
   Útwisted.internet._multicastr   Útwisted.internet.abstractr   r   Útwisted.internet.iocpreactorr   r   r*   Ú"twisted.internet.iocpreactor.constr   r   r   Ú'twisted.internet.iocpreactor.interfacesr   Útwisted.internet.protocolr   Útwisted.pythonr   Ú$twisted.internet.iocpreactor.reactorr   ÚIListeningPortÚIUDPTransportÚISystemHandler%   r   ÚIMulticastTransportrã   rá   r9   r7   Ú<module>rû      s¿   ðñõ #ã Û Û Û ß *å &ç >Ó >Ý 6ß @ß G÷ñ õ
 EÝ >Ý æÝ@ñ ØØ×ÑØ×ÑØ×Ñó	ôyTˆ8×Ñó yTóðyTñx	 ˆZ×+Ñ+Ó,ô�N Dó ó -ñr9   