+
    üÐj‘B  ã                  ó   € R t ^ RIHt ^ RIt^ RIt^ RIHt ^ RIHt ^ RI	H
t
 ^ RIHt ^ RIHt ^ RIHt ]R	8X  d4   ^ R
IHt ^ RIHt ^ RIHtHtHtHtHtHtHt ]]]].t]]]].t]t]t]t ]t!M^ RIH t HtH!t!HtHtH"t" ] ]!]".t].t^ RI#H$t$H%t%H&t&H't'H(t(H)t) ^ RI*H+t+ ]! ])PX                  ])PZ                  ])P\                  4       ! R R]&P^                  4      4       t0]! ])Pb                  4       ! R R]
]04      4       t2R# )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                  ó  € ] tR t^@t$ Rt]P                  tR]R&   ]P                  t
R]R&   R tRtR]R&   RtR!R	 lt]R
 4       tR R ltR tR tR tR tR tR"R ltR tR tR tR tR tR"R ltR tR tR t R t!R t"R t#Rt$R# )#ÚPortay  
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Ú
socketTypeNzOptional[int]Ú_realPortNumberc                óÂ   € \         P                  P                  W4       Wn        W n        W@n        W0n        V P                  4        RV n        V P                  4        R# )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   &&&&&&Ú6/usr/lib/python3/dist-packages/twisted/internet/udp.pyr'   ÚPort.__init__]   sI   € ô* 	�‰×Ñ˜tÔ-ØŒ	ØŒØ*ÔØ"ŒØ�‰ÔØ"ˆÔØ×ÑÖ ó    c                óœ   € \         P                  ! W#V P                  4      pVP                  4       ^ ,          pV ! RVVVVR7      pWhn        V# )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}
N)r+   r1   r*   )ÚsocketÚfromfdr#   ÚgetsocknameÚ_preexistingSocket)	Úclsr1   Úfdr"   r)   r*   r(   r+   r/   s	   &&&&&&   r2   Ú_fromListeningDescriptorÚPort._fromListeningDescriptor{   sR   € ô@ �}Š}˜R°·±Ó?ˆØ×$Ñ$Ó& qÕ)ˆ	ÙØØØØØ'ô
ˆð #'ÔØˆr4   c               ó   € V ^8„  d   QhRR/# )é   ÚreturnÚstr© )Úformats   "r2   Ú__annotate__ÚPort.__annotate__§   s   € ÷ @ñ @˜#ñ @r4   c                	ó    € V P                   e(   RV P                  P                   RV P                    R2# RV P                  P                   R2# )NÚ<z on Ú>z not connected>)r$   r)   Ú	__class__©r/   s   &r2   Ú__repr__ÚPort.__repr__§   sO   € Ø×ÑÒ+Ø�t—}‘}×.Ñ.Ð/¨t°D×4HÑ4HÐ3IÈÐKÐKà�t—}‘}×.Ñ.Ð/¨Ð?Ð?r4   c                ó   € V P                   # )z
Return a socket object.
)r6   rJ   s   &r2   Ú	getHandleÚPort.getHandle­   ó   € ð �{‰{Ðr4   c                óF   € V P                  4        V P                  4        R# )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Ú_connectToProtocolrJ   s   &r2   ÚstartListeningÚPort.startListening³   s   € ð 	×ÑÔØ×ÑÖ!r4   c                ó@  € V P                   f:    V P                  4       pVP                  V P                  V P                  34       MV P                   pRV n         VP                  4       ^,          V n	        \        P                  ! V P                  V P                  4      : RV P                  : 24       ^V n        Wn        V P                  P                   V n        R#   \
         d2   p\        P                  ! T P                  T P                  T4      hRp?ii ; i)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.
Nz starting on )r9   ÚcreateInternetSocketÚbindr+   r(   ÚOSErrorr   ÚCannotListenErrorr8   r$   r   ÚmsgÚ_getLogPrefixr)   Ú	connectedr6   Úfileno©r/   ÚsktÚles   &  r2   rR   Ú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                	ó\   € V P                   P                  V 4       V P                  4        R # ©N)r)   ÚmakeConnectionÚstartReadingrJ   s   &r2   rS   ÚPort._connectToProtocolà   s    € Ø�‰×$Ñ$ TÔ*Ø×ÑÖr4   c                ób  € ^ pWP                   8  d�    V P                  P                  V P                  4      w  r#V\	        V4      ,          pV P
                  \        P                  8X  d
   VR,          p V P                  P                  W#4       K�  R#   \         d    \        P                  ! 4         Kµ  i ; i  \         dh   pTP                  ^ ,          pT\        9   d    Rp?R# T\        9   d3   T P                   '       d   T P                  P#                  4         Rp?R# h Rp?ii ; i)z-
Called when my socket is ready for reading.
ºNr?   NN)ÚmaxThroughputr6   Úrecvfromr*   Úlenr"   ÚAF_INET6r)   ÚdatagramReceivedÚBaseExceptionr   ÚerrrY   ÚargsÚ_sockErrReadIgnoreÚ_sockErrReadRefuser-   ÚconnectionRefused)r/   ÚreadÚdataÚaddrÚseÚnos   &     r2   Ú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ÝØûðús;   ”'B< Á6B Â B9Â8B9Â<D.ÃD)Ã+D)ÄD)Ä(D)Ä)D.c                ón  € V P                   '       d2   VRV P                   39   g   Q h V P                  P                  V4      # VR8w  g   Q h\        P                  ! V^ ,          4      '       gP   \        P                  ! V^ ,          4      '       g-   V^ ,          R8w  d   \        P                   ! V^ ,          R4      h\        P                  ! V^ ,          4      '       g   V^ ,          R8X  d>   V P"                  \        P$                  8X  d   \        P                   ! V^ ,          R4      h\        P                  ! V^ ,          4      '       d>   V P"                  \        P&                  8X  d   \        P                   ! V^ ,          R4      h V P                  P)                  W4      #   \         d‡   pTP                  ^ ,          pT\
        8X  d   T P                  T4      u Rp?# T\        8X  d   \        P                  ! R4      hT\        8X  d!   T P                  P                  4         Rp?R# h Rp?ii ; i  \         dm   pTP                  ^ ,          pT\
        8X  d   T P                  Y4      u Rp?# T\        8X  d   \        P                  ! R4      hT\        8X  d    Rp?R# h Rp?ii ; i)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.
Nz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-   r6   ÚsendrY   rq   r   Úwriter   r   ÚMessageLengthErrorr   r)   rt   r   ÚisIPAddressÚisIPv6AddressÚInvalidAddressErrorr"   rm   ÚAF_INETÚsendto)r/   Údatagramrw   rx   ry   s   &&&  r2   r~   Ú
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   ©F) ÆH= Æ)H:Æ4.H5Ç"H:Ç(AH5È4H5È5H:È=J4É.J/É6J4É<,J/Ê.J/Ê/J4c                óH   € V P                  RP                  V4      V4       R# )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.
r4   N)r~   Újoin)r/   Úseqrw   s   &&&r2   ÚwriteSequenceÚPort.writeSequenceB  s   € ð 	�
‰
�3—8‘8˜C“= $Ö'r4   c                ó&  € V P                   '       d   \        R4      h\        P                  ! V4      '       g4   \        P                  ! V4      '       g   \
        P                  ! VR4      hW3V n         V P                  P                  W34       R# )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‚   r6   Úconnect)r/   Úhostr(   s   &&&r2   r�   ÚPort.connectQ  su   € ð ××ÐÜØLóð ô ×#Ò# D×)Ò)´(×2HÒ2HÈ×2NÒ2NÜ×+Ò+¨DÐ2PÓQÐQØ#˜lˆÔØ�‰×Ñ˜T˜LÖ)r4   c                	óš   € V P                  4        V P                  '       d)   V P                  P                  ^ V P                  4       R# R# )é    N)ÚstopReadingr]   r1   Ú	callLaterÚconnectionLostrJ   s   &r2   Ú_loseConnectionÚPort._loseConnection^  s6   € Ø×ÑÔØ�>�>ˆ>Ø�L‰L×"Ñ" 1 d×&9Ñ&9Ö:ñ r4   c                	ó†   € V P                   '       d   \        P                  ! 4       ;qn        MR pV P	                  4        V# rd   )r]   r   ÚDeferredÚdr—   )r/   Úresults   & r2   ÚstopListeningÚPort.stopListeningc  s2   € Ø�>�>ˆ>Ü#ŸnšnÓ.Ð.ˆF•VàˆFØ×ÑÔØˆr4   c                	ó`   € \         P                  ! R \        ^R7       V P                  4        R# )z-Please use stopListening() to disconnect port)Ú
stacklevelN)ÚwarningsÚwarnÚDeprecationWarningr�   rJ   s   &r2   ÚloseConnectionÚPort.loseConnectionk  s%   € Ü�ŠØ;ÜØõ	
ð
 	×ÑÖr4   c                ó€  € \         P                  ! RV P                  ,          4       RV n        RV n        \        P
                  P                  W4       V P                  P                  4        V P                  P                  4        V =	V =\        V R4      '       d    V P                  P                  R4       V =R# R# )z
Cleans up my socket.
z(UDP Port %s Closed)Nr›   éÿÿÿÿ)r   r[   r$   rj   r   r&   r–   r)   ÚdoStopr6   Úcloser^   Úhasattrr›   Úcallback)r/   Úreasons   &&r2   r–   ÚPort.connectionLosts  s�   € ô 	�ŠÐ&¨×)=Ñ)=Õ=Ô>Ø#ˆÔØˆÔÜ�‰×$Ñ$ TÔ2Ø�‰×ÑÔØ�‰×ÑÔØˆKØˆKÜ�4˜×ÒØ�F‰F�O‰O˜DÔ!Ø’ñ r4   c                óX   € V P                  V P                  4      pRV,          V n        R# )z@
Initialize the C{logstr} attribute to be used by C{logPrefix}.
z%s (UDP)N)r\   r)   Úlogstr)r/   Ú	logPrefixs   & r2   r,   ÚPort.setLogStrƒ  s$   € ð ×&Ñ& t§}¡}Ó5ˆ	Ø  9Õ,ˆŽr4   c                ó`  € \         P                  ! V P                  4      '       d   \        P                  V n        R# \         P                  ! V P                  4      '       d   \        P                  V n        R# V P                  '       d"   \        P                  ! V P                  R4      hR# )z(
Resolve address family for the socket.
r�   N)
r   r�   r+   r6   rm   r"   r€   rƒ   r   r‚   rJ   s   &r2   r.   ÚPort._setAddressFamilyŠ  sq   € ô ×!Ò! $§.¡.×1Ò1Ü!'§¡ˆDÖÜ×!Ò! $§.¡.×1Ò1Ü!'§¡ˆDÖØ�^�^ˆ^Ü×+Ò+Ø—‘Ð >óð ñ r4   c                ó   € V P                   # )z 
Return the prefix to log with.
)r¯   rJ   s   &r2   r°   ÚPort.logPrefix—  rP   r4   c                ó$  € V P                   P                  4       pV P                  \         P                  8X  d   \        P
                  ! R.VO5!  # V P                  \         P                  8X  d    \        P                  ! R.VR,          O5!  # R# )zŒ
Return the local address of the UDP connection

@returns: the local address of the UDP connection
@rtype: L{IPv4Address} or L{IPv6Address}
ÚUDPri   N)r6   r8   r"   rƒ   r   ÚIPv4Addressrm   ÚIPv6Address)r/   rw   s   & r2   ÚgetHostÚPort.getHost�  so   € ð �{‰{×&Ñ&Ó(ˆØ×Ñ¤§¡Ô/Ü×&Ò& uÐ4¨tÓ4Ð4Ø×Ñ¤6§?¡?Ô2Ü×&Ò& uÐ:°°RµÓ:Ð:ñ 3r4   c                óx   € V P                   P                  \         P                  \         P                  V4       R# )z‹
Set whether this port may broadcast. This is disabled by default.

@param enabled: Whether the port may broadcast.
@type enabled: L{bool}
N)r6   Ú
setsockoptÚ
SOL_SOCKETÚSO_BROADCAST)r/   Úenableds   &&r2   ÚsetBroadcastAllowedÚPort.setBroadcastAllowedª  s&   € ð 	�‰×Ñœv×0Ñ0´&×2EÑ2EÀwÖOr4   c                ó„   € \        V P                  P                  \        P                  \        P                  4      4      # )zs
Checks if broadcast is currently allowed on this port.

@return: Whether this port may broadcast.
@rtype: L{bool}
)Úboolr6   Ú
getsockoptr¾   r¿   rJ   s   &r2   ÚgetBroadcastAllowedÚPort.getBroadcastAllowed³  s,   € ô �D—K‘K×*Ñ*¬6×+<Ñ+<¼f×>QÑ>QÓRÓSÐSr4   )r-   r9   r$   r"   r]   r›   r^   r+   r¯   r*   rj   r(   r)   r6   i   )Ú é    Nrd   )%Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r6   rƒ   r"   Ú__annotations__Ú
SOCK_DGRAMr#   rj   r$   r9   r'   Úclassmethodr<   rK   rN   rT   rR   rS   rz   r~   rŠ   r�   r—   r�   r¤   r–   r,   r.   r°   rº   rÁ   rÆ   Ú__static_attributes__rB   r4   r2   r!   r!   @   s½   ‡ ñð$ +1¯.©.€MÐ'Ó8Ø$*×$5Ñ$5€JÐ!Ó5Ø€Mà%)€O�]Ó)ØÐô!ð< ñ)ó ð)õV@òò"ò!)òFòô@<ò|(ò*ò;ò
òôò -òòò;òPöTr4   r!   c                  ó6   € ] tR tRtRtR	R R lltR R ltRtR# )
ÚMulticastPorti½  z&
UDP Port that supports multicasting.
Nc               ó4   € V ^8„  d   QhRRRRRRRRRR	R
RRR/# )r?   r(   Úintr0   r   r+   rA   r*   r1   zIReactorMulticast | NoneÚlistenMultiplerÄ   r@   ÚNonerB   )rC   s   "r2   rD   ÚMulticastPort.__annotate__Ã  sP   € ÷ -ñ -àð-ð (ð-ð ð	-ð
 ð-ð *ð-ð ð-ð 
ñ-r4   c                ó@   € \         P                  WW#WE4       W`n        R# )zH
@see: L{twisted.internet.interfaces.IReactorMulticast.listenMulticast}
N)r!   r'   r×   )r/   r(   r0   r+   r*   r1   r×   s   &&&&&&&r2   r'   ÚMulticastPort.__init__Ã  s   € ô 	�‰�d %°MÔKØ,Ör4   c               ó   € V ^8„  d   QhRR/# )r?   r@   zsocket.socketrB   )rC   s   "r2   rD   rÙ   Ò  s   € ÷ ñ  mñ r4   c                ó   € \         P                  V 4      pV P                  '       dx   VP                  \        P
                  \        P                  ^4       \        \        R4      '       d3    VP                  \        P
                  \        P                  ^4       V# V#   \         d"   pTP                  \        8X  d    Rp?T# h Rp?ii ; i)z�
Override L{Port.createInternetSocket} to configure the socket to honor
the C{listenMultiple} argument to L{IReactorMulticast.listenMultiple}.
ÚSO_REUSEPORTN)r!   rW   r×   r½   r6   r¾   ÚSO_REUSEADDRrª   rÞ   rY   Úerrnor   r_   s   &  r2   rW   Ú"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Ê   rË   rÌ   rÍ   rÎ   r'   rW   rÒ   rB   r4   r2   rÔ   rÔ   ½  s   † ñ÷-÷ñ r4   rÔ   )3rÎ   Ú
__future__r   r6   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   rr   rs   r   r   r   r   r   Útwisted.internetr   r   r   r   r   r   Útwisted.pythonr   ÚIListeningPortÚIUDPTransportÚISystemHandler&   r!   ÚIMulticastTransportrÔ   rB   r4   r2   Ú<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ó %ó -ò%r4   