ó
    Ö›‘h‘B  ã                  óü  • S r SSKJr  SSKrSSKrSSKJr  SSKJr  SSK	J
r
  SSKJr  SSKJr  SS	KJr  \S
:X  a3  SSKJr  SSKJr  SSKJrJrJrJrJrJrJr  \\\\/r\\\\/r\r\r\r \r!OSSKJ r JrJ!r!JrJrJ"r"  \ \!\"/r\/rSSK#J$r$J%r%J&r&J'r'J(r(J)r)  SSK*J+r+  \" \)RX                  \)RZ                  \)R\                  5       " S S\&R^                  5      5       r0\" \)Rb                  5       " S S\
\05      5       r2g)a�  
Various asynchronous UDP classes.

Please do not use this module directly.

@var _sockErrReadIgnore: list of symbolic error constants (from the C{errno}
    module) representing socket errors where the error is temporary and can be
    ignored.

@var _sockErrReadRefuse: list of symbolic error constants (from the C{errno}
    module) representing socket errors that indicate connection refused.
é    )ÚannotationsN)ÚOptional)Úimplementer)ÚMulticastMixin)ÚIReactorMulticast)ÚAbstractDatagramProtocol)ÚplatformTypeÚwin32)ÚWSAEINPROGRESS)ÚWSAEWOULDBLOCK)ÚWSAECONNREFUSEDÚWSAECONNRESETÚWSAEINTRÚWSAEMSGSIZEÚWSAENETRESETÚWSAENOPROTOOPTÚWSAETIMEDOUT)ÚEAGAINÚECONNREFUSEDÚEINTRÚEMSGSIZEÚENOPROTOOPTÚEWOULDBLOCK)ÚabstractÚaddressÚbaseÚdeferÚerrorÚ
interfaces)Úlogc                  ó  • \ rS rSr% Sr\R                  rS\S'   \R                  r
S\S'   SrSrS	\S
'   SrS!S jr\S 5       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#S r$g)$ÚPorté@   ay  
UDP port, listening for packets.

@ivar maxThroughput: Maximum number of bytes read in one event
    loop iteration.

@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.

@ivar _realPortNumber: Actual port number being listened on. The
    value will be L{None} until this L{Port} is listening.

@ivar _preexistingSocket: If not L{None}, a L{socket.socket} instance which
    was created and initialized outside of the reactor and will be used to
    listen for connections (instead of a new socket being created by this
    L{Port}).
zsocket.AddressFamilyÚaddressFamilyzsocket.SocketKindÚ
socketTypei   NzOptional[int]Ú_realPortNumberc                óÀ   • [         R                  R                  X5        Xl        X l        X@l        X0l        U R                  5         SU l        U R                  5         g)a�  
@param port: A port number on which to listen.
@type port: L{int}

@param proto: A C{DatagramProtocol} instance which will be
    connected to the given C{port}.
@type proto: L{twisted.internet.protocol.DatagramProtocol}

@param interface: The local IPv4 or IPv6 address to which to bind;
    defaults to '', ie all IPv4 addresses.
@type interface: L{str}

@param maxPacketSize: The maximum packet size to accept.
@type maxPacketSize: L{int}

@param reactor: A reactor which will notify this C{Port} when
    its socket is ready for reading or writing. Defaults to
    L{None}, ie the default global reactor.
@type reactor: L{interfaces.IReactorFDSet}
N)
r   ÚBasePortÚ__init__ÚportÚprotocolÚmaxPacketSizeÚ	interfaceÚ	setLogStrÚ_connectedAddrÚ_setAddressFamily)Úselfr*   Úprotor-   r,   Úreactors         ÚXC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/internet/udp.pyr)   ÚPort.__init__]   sI   € ô* 	�‰×Ñ˜tÔ-ØŒ	ØŒØ*ÔØ"ŒØ�‰ÔØ"ˆÔØ×ÑÕ ó    c                óŽ   • [         R                  " X#U R                  5      nUR                  5       S   nU " SUUUUS9nXhl        U$ )aè  
Create a new L{Port} based on an existing listening
I{SOCK_DGRAM} socket.

@param reactor: A reactor which will notify this L{Port} when
    its socket is ready for reading or writing. Defaults to
    L{None}, ie the default global reactor.
@type reactor: L{interfaces.IReactorFDSet}

@param fd: An integer file descriptor associated with a listening
    socket.  The socket must be in non-blocking mode.  Any additional
    attributes desired, such as I{FD_CLOEXEC}, must also be set already.
@type fd: L{int}

@param addressFamily: The address family (sometimes called I{domain}) of
    the existing socket.  For example, L{socket.AF_INET}.
@type addressFamily: L{int}

@param protocol: A C{DatagramProtocol} instance which will be
    connected to the C{port}.
@type protocol: L{twisted.internet.protocol.DatagramProtocol}

@param maxPacketSize: The maximum packet size to accept.
@type maxPacketSize: L{int}

@return: A new instance of C{cls} wrapping the socket given by C{fd}.
@rtype: L{Port}
r   N)r-   r3   r,   )ÚsocketÚfromfdr%   ÚgetsocknameÚ_preexistingSocket)	Úclsr3   Úfdr$   r+   r,   r*   r-   r1   s	            r4   Ú_fromListeningDescriptorÚPort._fromListeningDescriptor{   sR   € ô@ �}Š}˜R°·±Ó?ˆØ×$Ñ$Ó& qÑ)ˆ	ÙØØØØØ'ñ
ˆð #'ÔØˆr6   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__©r1   s    r4   Ú__repr__ÚPort.__repr__§   sO   € Ø×ÑÑ+Ø�t—}‘}×.Ñ.Ð/¨t°D×4HÑ4HÐ3IÈÐKÐKà�t—}‘}×.Ñ.Ð/¨Ð?Ð?r6   c                ó   • U R                   $ )z
Return a socket object.
)r8   rD   s    r4   Ú	getHandleÚPort.getHandle­   ó   € ð �{‰{Ðr6   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Ú_connectToProtocolrD   s    r4   ÚstartListeningÚPort.startListening³   s   € ð 	×ÑÔØ×ÑÕ!r6   c                ó2  • U R                   c9   U R                  5       nUR                  U R                  U R                  45        OU R                   nSU l         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)a  
Prepare and assign a L{socket.socket} instance to
C{self.socket}.

Either creates a new SOCK_DGRAM L{socket.socket} bound to
C{self.interface} and C{self.port} or takes an existing
L{socket.socket} provided via the
L{interfaces.IReactorSocket.adoptDatagramPort} interface.
Né   z starting on )r;   ÚcreateInternetSocketÚbindr-   r*   ÚOSErrorr   ÚCannotListenErrorr:   r&   r    ÚmsgÚ_getLogPrefixr+   Ú	connectedr8   Úfileno©r1   ÚsktÚles      r4   rL   ÚPort._bindSocket½   sä   € ð ×"Ñ"Ñ*ðMØ×/Ñ/Ó1�Ø—‘˜$Ÿ.™.¨$¯)©)Ð4Õ5ð
 ×)Ñ)ˆCØ&*ˆDÔ#ð  #Ÿ™Ó0°Ñ3ˆÔä�Šà×!Ñ! $§-¡-Ö0°$×2FÓ2FðHô	
ð
 ˆŒØŒØ—k‘k×(Ñ(ˆ�øô% ó MÜ×-Ò-¨d¯n©n¸d¿i¹iÈÓLÐLûðMús   �7C Ã
DÃ%,DÄDc                óZ   • U R                   R                  U 5        U R                  5         g ©N)r+   ÚmakeConnectionÚstartReadingrD   s    r4   rM   ÚPort._connectToProtocolà   s    € Ø�‰×$Ñ$ TÔ*Ø×ÑÕr6   c                óT  • SnXR                   :  a‡   U R                  R                  U R                  5      u  p#U[	        U5      -  nU R
                  [        R                  :X  a  USS n U R                  R                  X#5        XR                   :  a  M†  gg! [         a    [        R                  " 5          N4f = f! [         a^  nUR                  S   nU[        ;   a   SnAgU[        ;   a0  U R                   (       a  U R                  R#                  5          SnAge SnAff = f)z-
Called when my socket is ready for reading.
r   Né   )ÚmaxThroughputr8   Úrecvfromr,   Úlenr$   ÚAF_INET6r+   ÚdatagramReceivedÚBaseExceptionr    ÚerrrT   ÚargsÚ_sockErrReadIgnoreÚ_sockErrReadRefuser/   ÚconnectionRefused)r1   ÚreadÚdataÚaddrÚseÚnos         r4   ÚdoReadÚPort.doReadä   sö   € ð ˆØ×'Ñ'Ó'ðØ!Ÿ[™[×1Ñ1°$×2DÑ2DÓE‘
�ð œ˜D›	Ñ!�Ø×%Ñ%¬¯©Ó8ð    ˜8�DðØ—M‘M×2Ñ2°4Ô>ð/ ×'Ñ'×'øô0 %ó Ü—G’G–Iðûô+ ó Ø—W‘W˜Q‘Z�ØÔ+Ó+ÜØÔ+Ó+Ø×*×*ØŸ™×7Ñ7Ô9ÜØûðús5   “'B? Á,B ÂB<Â;B<Â?
D'Ã	D"Ã'5D"Ä!D"Ä"D'c                óì  • U R                   (       a0  USU R                   4;   d   e U R                  R                  U5      $ US:w  d   e[        R                  " US   5      (       dA  [        R                  " US   5      (       d#  US   S:w  a  [        R                   " US   S5      e[        R                  " US   5      (       d	  US   S:X  a8  U R"                  [        R$                  :X  a  [        R                   " US   S5      e[        R                  " 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[
        :X  a  U R                  U5      s SnA$ U[        :X  a  [        R                  " S5      eU[        :X  a  U R                  R                  5          SnAge SnAff = f! [         ad  nUR                  S   nU[
        :X  a  U R                  X5      s SnA$ U[        :X  a  [        R                  " S5      eU[        :X  a   SnAge SnAff = f)a:  
Write a datagram.

@type datagram: L{bytes}
@param datagram: The datagram to be sent.

@type addr: L{tuple} containing L{str} as first element and L{int} as
    second element, or L{None}
@param addr: A tuple of (I{stringified IPv4 or IPv6 address},
    I{integer port number}); can be L{None} in connected mode.
Nr   zmessage too longz<broadcast>z0write() only accepts IP addresses, not hostnamesz7IPv6 port write() called with IPv4 or broadcast addressz*IPv4 port write() called with IPv6 address)r/   r8   ÚsendrT   rl   r   Úwriter   r   ÚMessageLengthErrorr   r+   ro   r   ÚisIPAddressÚisIPv6AddressÚInvalidAddressErrorr$   rh   ÚAF_INETÚsendto)r1   Údatagramrr   rs   rt   s        r4   ry   Ú
Port.write  s  € ð ××Ø˜D $×"5Ñ"5Ð6Ó6Ð6Ð6ðØ—{‘{×'Ñ'¨Ó1Ð1ð ˜4“<Ð�<ä×(Ò(¨¨a©×1Ñ1Ü ×.Ò.¨t°A©w×7Ñ7Ø˜‘G˜}Ó,ä×/Ò/Ø˜‘GÐOóð ô ×$Ò$ T¨!¡W×-Ñ-°°a±¸MÓ1IØ×$Ñ$¬¯©Ó7Ü×/Ò/Ø˜‘GÐVóð ô ×%Ò% d¨1¡g×.Ñ.°4×3EÑ3EÌÏÉÓ3WÜ×/Ò/Ø˜‘GÐIóð ðØ—{‘{×)Ñ)¨(Ó9Ð9øô? ó 	Ø—W‘W˜Q‘Z�Øœ“;ØŸ:™: hÓ/Õ/Øœ8“^Ü×2Ò2Ð3EÓFÐFØœ<Ó'Ø—M‘M×3Ñ3×5Ñ5àûð	ûô@ ó Ø—W‘W˜Q‘Z�Øœ“;ØŸ:™: hÓ5Õ5Øœ8“^Ü×2Ò2Ð3EÓFÐFØœ<Ó'ô àûðúsT   §E: ÅH Å:
HÆ)G=Æ-HÆ3AG=Ç<G=Ç=HÈ
I3È)I.È8I3È>*I.É-I.É.I3c                óF   • U R                  SR                  U5      U5        g)a“  
Write a datagram constructed from an iterable of L{bytes}.

@param seq: The data that will make up the complete datagram to be
    written.
@type seq: an iterable of L{bytes}

@type addr: L{tuple} containing L{str} as first element and L{int} as
    second element, or L{None}
@param addr: A tuple of (I{stringified IPv4 or IPv6 address},
    I{integer port number}); can be L{None} in connected mode.
r6   N)ry   Újoin)r1   Úseqrr   s      r4   ÚwriteSequenceÚPort.writeSequenceB  s   € ð 	�
‰
�3—8‘8˜C“= $Õ'r6   c                ó  • U R                   (       a  [        S5      e[        R                  " U5      (       d2  [        R                  " 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únot an IPv4 or IPv6 address.N)	r/   ÚRuntimeErrorr   r{   r|   r   r}   r8   Úconnect)r1   Úhostr*   s      r4   rŠ   ÚPort.connectQ  sr   € ð ××ÜØLóð ô ×#Ò# D×)Ñ)´(×2HÒ2HÈ×2NÑ2NÜ×+Ò+¨DÐ2PÓQÐQØ#˜lˆÔØ�‰×Ñ˜T˜LÕ)r6   c                ó”   • U R                  5         U R                  (       a'  U R                  R                  SU R                  5        g g )Nr   )ÚstopReadingrX   r3   Ú	callLaterÚconnectionLostrD   s    r4   Ú_loseConnectionÚPort._loseConnection^  s4   € Ø×ÑÔØ�>�>Ø�L‰L×"Ñ" 1 d×&9Ñ&9Õ:ð r6   c                ó„   • U R                   (       a  [        R                  " 5       =ol        OS nU R	                  5         U$ r_   )rX   r   ÚDeferredÚdr‘   )r1   Úresults     r4   ÚstopListeningÚPort.stopListeningc  s0   € Ø�>�>Ü#ŸnšnÓ.Ð.ˆF•VàˆFØ×ÑÔØˆr6   c                óX   • [         R                  " S[        SS9  U R                  5         g )Nz-Please use stopListening() to disconnect portrd   )Ú
stacklevel)ÚwarningsÚwarnÚDeprecationWarningr—   rD   s    r4   ÚloseConnectionÚPort.loseConnectionk  s%   € Ü�ŠØ;ÜØò	
ð
 	×ÑÕr6   c                ór  • [         R                  " SU R                  -  5        SU l        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)Néÿÿÿÿr•   )r    rV   r&   re   r   r(   r�   r+   ÚdoStopr8   ÚcloserY   Úhasattrr•   Úcallback)r1   Úreasons     r4   r�   ÚPort.connectionLosts  s�   € ô 	�ŠÐ&¨×)=Ñ)=Ñ=Ô>Ø#ˆÔØˆÔÜ�‰×$Ñ$ TÔ2Ø�‰×ÑÔØ�‰×ÑÔØˆKØˆKÜ�4˜×ÑØ�F‰F�O‰O˜DÔ!Ø‘ð r6   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)rW   r+   Úlogstr)r1   Ú	logPrefixs     r4   r.   ÚPort.setLogStrƒ  s$   € ð ×&Ñ& t§}¡}Ó5ˆ	Ø  9Ñ,ˆ�r6   c                óT  • [         R                  " U R                  5      (       a  [        R                  U l        g[         R                  " 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.
rˆ   N)
r   r|   r-   r8   rh   r$   r{   r~   r   r}   rD   s    r4   r0   ÚPort._setAddressFamilyŠ  so   € ô ×!Ò! $§.¡.×1Ñ1Ü!'§¡ˆDÕÜ×!Ò! $§.¡.×1Ñ1Ü!'§¡ˆDÕØ�^�^Ü×+Ò+Ø—‘Ð >óð ð r6   c                ó   • U R                   $ )z 
Return the prefix to log with.
)r©   rD   s    r4   rª   ÚPort.logPrefix—  rJ   r6   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}
ÚUDPNrd   )r8   r:   r$   r~   r   ÚIPv4Addressrh   ÚIPv6Address)r1   rr   s     r4   ÚgetHostÚPort.getHost�  sq   € ð �{‰{×&Ñ&Ó(ˆØ×Ñ¤§¡Ó/Ü×&Ò& uÐ4¨tÒ4Ð4Ø×Ñ¤6§?¡?Ó2Ü×&Ò& uÐ:°°R°a°Ò:Ð:ð 3r6   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)r8   Ú
setsockoptÚ
SOL_SOCKETÚSO_BROADCAST)r1   Úenableds     r4   ÚsetBroadcastAllowedÚPort.setBroadcastAllowedª  s&   € ð 	�‰×Ñœv×0Ñ0´&×2EÑ2EÀwÕOr6   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}
)Úboolr8   Ú
getsockoptr¸   r¹   rD   s    r4   ÚgetBroadcastAllowedÚPort.getBroadcastAllowed³  s,   € ô �D—K‘K×*Ñ*¬6×+<Ñ+<¼f×>QÑ>QÓRÓSÐSr6   )r/   r;   r&   r$   rX   r•   rY   r-   r©   r,   re   r*   r+   r8   )Ú é    N)ÚreturnÚstrr_   )%Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r8   r~   r$   Ú__annotations__Ú
SOCK_DGRAMr%   re   r&   r;   r)   Úclassmethodr>   rE   rH   rN   rL   rM   ru   ry   r…   rŠ   r‘   r—   rž   r�   r.   r0   rª   r´   r»   rÀ   Ú__static_attributes__© r6   r4   r"   r"   @   s½   ‡ ñð$ +1¯.©.€MÐ'Ó8Ø$*×$5Ñ$5€JÐ!Ó5Ø€Mà%)€O�]Ó)ØÐô!ð< ñ)ó ð)ôV@òò"ò!)òFòô@<ò|(ò*ò;ò
òôò -òòò;òPõTr6   r"   c                  óR   • \ rS rSrSr    S             SS jjrS	S jrSrg)
ÚMulticastPorti½  z&
UDP Port that supports multicasting.
Nc                ó>   • [         R                  XX#XE5        X`l        g)zH
@see: L{twisted.internet.interfaces.IReactorMulticast.listenMulticast}
N)r"   r)   ÚlistenMultiple)r1   r*   r2   r-   r,   r3   rÓ   s          r4   r)   ÚMulticastPort.__init__Ã  s   € ô 	�‰�d %°MÔKØ,Õr6   c                ó˜  • [         R                  U 5      nU R                  (       av  UR                  [        R
                  [        R                  S5        [        [        S5      (       a2   UR                  [        R
                  [        R                  S5        U$ U$ ! [         a   nUR                  [        :X  a   SnAU$ e SnAff = f)z�
Override L{Port.createInternetSocket} to configure the socket to honor
the C{listenMultiple} argument to L{IReactorMulticast.listenMultiple}.
rQ   ÚSO_REUSEPORTN)r"   rR   rÓ   r·   r8   r¸   ÚSO_REUSEADDRr¤   rÖ   rT   Úerrnor   rZ   s      r4   rR   Ú"MulticastPort.createInternetSocketÒ  sŸ   € ô
 ×'Ñ'¨Ó-ˆØ××Ø�N‰Nœ6×,Ñ,¬f×.AÑ.AÀ1ÔEÜ”v˜~×.Ñ.ðØ—N‘N¤6×#4Ñ#4´f×6IÑ6IÈ1ÔMð ˆ
ˆsˆ
øô ó à—x‘x¤;Ó.Ûð ˆ
ð ûðús   Á,/B Â
C	Â)CÃCÃC	)rÓ   )rÂ   rÃ   NF)r*   Úintr2   r   r-   rÅ   r,   rÚ   r3   zIReactorMulticast | NonerÓ   r¾   rÄ   ÚNone)rÄ   zsocket.socket)rÆ   rÇ   rÈ   rÉ   rÊ   r)   rR   rÎ   rÏ   r6   r4   rÑ   rÑ   ½  sc   † ñð Ø!Ø,0Ø$ð-àð-ð (ð-ð ð	-ð
 ð-ð *ð-ð ð-ð 
õ-÷r6   rÑ   )3rÊ   Ú
__future__r   r8   r›   Útypingr   Úzope.interfacer   Útwisted.internet._multicastr   Útwisted.internet.interfacesr   Útwisted.internet.protocolr   Útwisted.python.runtimer	   rØ   r   r   r   r   r   r   r   r   r   r   rm   rn   r   r   r   r   r   Útwisted.internetr   r   r   r   r   r   Útwisted.pythonr    ÚIListeningPortÚIUDPTransportÚISystemHandler(   r"   ÚIMulticastTransportrÑ   rÏ   r6   r4   Ú<module>ré      s  ðñ
õ #ó Û Ý å &å 6Ý 9Ý >Ý /à�7ÓÝ$Ý$÷÷ ñ ð # N°KÀÐPÐØ)¨=¸,ÈÐUÐð €HØ"€LØ€FØ�EçU×Uà  %¨Ð5ÐØ&˜Ð÷ O× NÝ ñ Ø×Ñ˜z×7Ñ7¸×9QÑ9QóôwTˆ4�=‰=ó wTóðwTñt ˆZ×+Ñ+Ó,ô%�N Dó %ó -ñ%r6   