HEX
Server: Apache
System: Linux scp1.abinfocom.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: confeduphaar (1010)
PHP: 8.1.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //usr/lib/python3/dist-packages/twisted/internet/iocpreactor/__pycache__/udp.cpython-38.pyc
U

��W[�6�@sdZddlZddlZddlZddlZddlZddlmZddlm	Z	m
Z
mZmZddl
mZmZddlmZmZddlmZddlmZdd	lmZdd
lmZddlmZmZeeejejej�Gdd
�d
ej ��Z!Gdd�d�Z"eej#�Gdd�de"e!��Z$dS)z
UDP support for IOCP reactor
�N)�implementer)�defer�address�error�
interfaces)�isIPAddress�
isIPv6Address)�log�failure)�ERROR_IO_PENDING)�ERROR_CONNECTION_REFUSED)�ERROR_PORT_UNREACHABLE)�IReadWriteHandle)�iocpsupport�abstractc@s�eZdZdZejZejZdZ	dZ
d4dd�Zdd	�Zd
d�Z
dd
�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd5dd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd6d(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Z d2d3�Z!dS)7�Portz�
    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.
    FN�� cCsx||_||_||_||_|��d|_|��tj�	||�t
�
|j|j�}t
�|���}t|�|_tt�d��|_dS)z>
        Initialize with a numeric port to listen on.
        N�i)�port�protocolZreadBufferSize�	interface�	setLogStr�_connectedAddr�_setAddressFamilyr�
FileHandle�__init__�socket�
addressFamily�
socketType�_iocpZ
maxAddrLen�fileno�	bytearray�
addressBuffer�structZcalcsize�addressLengthBuffer)�selfr�protor�
maxPacketSize�reactor�sktZaddrLen�r+�B/usr/lib/python3/dist-packages/twisted/internet/iocpreactor/udp.pyr*s
z
Port.__init__cCs@t|j�rtj|_n(t|j�r(tj|_n|jr<t�|jd��dS)z8
        Resolve address family for the socket.
        znot an IPv4 or IPv6 addressN)	rrr�AF_INET6rr�AF_INETr�InvalidAddressError�r&r+r+r,r@s



�zPort._setAddressFamilycCs.|jdk	rd|jj|jfSd|jjfSdS)Nz
<%s on %s>z<%s not connected>)�_realPortNumberr�	__class__r0r+r+r,�__repr__Ms

�z
Port.__repr__cCs|jS)z)
        Return a socket object.
        )rr0r+r+r,�	getHandleUszPort.getHandlecCs|��|��dS)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�_connectToProtocolr0r+r+r,�startListening\szPort.startListeningcCs|j�|j|j�S�N)r)�createSocketrrr0r+r+r,r9gszPort.createSocketc
Cs�z|��}|�|j|jf�Wn6tjk
rT}zt�|j|j|��W5d}~XYnX|��d|_t	�
d|�|j�|jf�d|_
||_|jj|_dS)N�z%s starting on %sT)r9ZbindrrrrZCannotListenError�getsocknamer1r	�msg�
_getLogPrefixr�	connectedr!�
getFileHandle)r&r*�ler+r+r,r5ks$
�zPort._bindSocketcCs$|j�|�|��|j�|�dSr8)rZmakeConnectionZstartReadingr)ZaddActiveHandler0r+r+r,r6~szPort._connectToProtocolcCs |jr|�|||�|��dSr8)Zreading�
handleRead�doRead�r&�rc�data�evtr+r+r,�cbRead�szPort.cbReadcCs�|tjtjttfkr&|jr�|j��n`|rHt�	dtj
�|d�|f�n>z(|j�t
|jd|��t�|j��Wnt��YnXdS)Nzerror in recvfrom -- %s (%s)z
unknown error)�errno�WSAECONNREFUSED�
WSAECONNRESETrr
rr�connectionRefusedr	r<Z	errorcode�getZdatagramReceived�bytes�buffr Zmakesockaddr�	addr_buff�errrCr+r+r,rA�s 
��
�zPort.handleReadcCsnt�|j|�}|jd|_}|j|_}|j|_}t�	|�
�||||�\}}|rj|tkrj|�|||�dS�Nr)
r ZEventrGZ_readBuffersrNr#rOr%�
addr_len_buffZrecvfromr?rrA)r&rFrNrOrRrDrEr+r+r,rB�s�zPort.doReadc
Cs�|jr�|d|jfkst�z|j�|�WStjk
r�}zb|jd}|tjkr`|�|�WY�>S|tj	krvt�
d��n"|tjtjt
tfkr�|j��n�W5d}~XYnX�n4|dks�t�t|d�s�t|d�s�|ddkr�t�|dd��t|d��r|jtjk�rt�|dd��t|d��rF|jtjk�rFt�|dd��z|j�||�WStjk
�r�}zh|jd}|tjk�r�|�||�WY�@S|tj	k�r�t�
d��n"|tjtjt
tfk�r�WY�
dS�W5d}~XYnXdS)z~
        Write a datagram.

        @param addr: should be a tuple (ip, port), can be None in connected
        mode.
        Nrzmessage 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�AssertionErrorr�sendr�argsrHZWSAEINTR�writeZWSAEMSGSIZEZMessageLengthErrorrIrJrr
rrKrrr/rr-r.Zsendto)r&Zdatagram�addrZseZnor+r+r,rV�s`



�
����

�
z
Port.writecCs|�d�|�|�dS)N�)rV�join)r&�seqrWr+r+r,�
writeSequence�szPort.writeSequencecCsH|jrtd��t|�s*t|�s*t�|d��||f|_|j�||f�dS)z-
        'Connect' to remote server.
        z\already connected, reconnecting is not currently supported (talk to itamar if you want this)znot an IPv4 or IPv6 address.N)r�RuntimeErrorrrrr/r�connect)r&Zhostrr+r+r,r]�s��
zPort.connectcCs.|��|j�|�|jr*|j�d|j�dSrQ)ZstopReadingr)ZremoveActiveHandler>Z	callLater�connectionLostr0r+r+r,�_loseConnection�szPort._loseConnectioncCs&|jrt��}|_nd}|��|Sr8)r>rZDeferred�dr_)r&�resultr+r+r,�
stopListening�s
zPort.stopListeningcCstjdtdd�|��dS)Nz-Please use stopListening() to disconnect port�)�
stacklevel)�warnings�warn�DeprecationWarningrbr0r+r+r,�loseConnection�s
�zPort.loseConnectioncCs^t�d|j�d|_tj�||�|j��|j�	�|`|`
t|d�rZ|j�
d�|`dS)z&
        Cleans up my socket.
        z(UDP Port %s Closed)Nr`)r	r<r1rrr^rZdoStopr�closer?�hasattrr`�callback)r&�reasonr+r+r,r^s


zPort.connectionLostcCs|�|j�}d||_dS)zP
        Initialize the C{logstr} attribute to be used by C{logPrefix}.
        z%s (UDP)N)r=r�logstr)r&�	logPrefixr+r+r,rszPort.setLogStrcCs|jS)zK
        Returns the name of my class, to prefix log entries with.
        )rmr0r+r+r,rnszPort.logPrefixcCsJ|j��}|jtjkr$tjd|��S|jtjkrFtjd|dd���SdS)z�
        Return the local address of the UDP connection

        @returns: the local address of the UDP connection
        @rtype: L{IPv4Address} or L{IPv6Address}
        �UDPNrc)ro)ro)rr;rr.rZIPv4Addressr-ZIPv6Address�r&rWr+r+r,�getHost$s

zPort.getHostcCs|j�tjtj|�dS)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)r&�enabledr+r+r,�setBroadcastAllowed2s
�zPort.setBroadcastAllowedcCst�|j�tjtj��S)z�
        Checks if broadcast is currently allowed on this port.

        @return: Whether this port may broadcast.
        @rtype: L{bool}
        )�operator�truthr�
getsockoptrsrtr0r+r+r,�getBroadcastAllowed=s�zPort.getBroadcastAllowed)rrN)N)N)"�__name__�
__module__�__qualname__�__doc__rr.rZ
SOCK_DGRAMrZdynamicReadBuffersr1rrr3r4r7r9r5r6rGrArBrVr[r]r_rbrhr^rrnrqrvrzr+r+r+r,rs<�


5	
rc@sleZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
ddd�Zdd�Zdd�Z
ddd�ZdS)�MulticastMixinz,
    Implement multicast functionality.
    cCs$|j�tjtj�}t�t�d|��S)Nz@i)rry�
IPPROTO_IP�IP_MULTICAST_IFZ	inet_ntoar$�pack)r&rr+r+r,�getOutgoingInterfaceOsz#MulticastMixin.getOutgoingInterfacecCs|j�|��|j�S)z.
        Returns Deferred of success.
        )r)�resolve�addCallback�
_setInterfacerpr+r+r,�setOutgoingInterfaceTsz#MulticastMixin.setOutgoingInterfacecCs"t�|�}|j�tjtj|�dS)Nr:)r�	inet_atonrrr�r�)r&rWrr+r+r,r�[s
zMulticastMixin._setInterfacecCs|j�tjtj�Sr8)rryr��IP_MULTICAST_LOOPr0r+r+r,�getLoopbackModeas
�zMulticastMixin.getLoopbackModecCs*t�dt�|��}|j�tjtj|�dS)N�b)r$r�rwrxrrrr�r�)r&�moder+r+r,�setLoopbackModefs�zMulticastMixin.setLoopbackModecCs|j�tjtj�Sr8)rryr��IP_MULTICAST_TTLr0r+r+r,�getTTLls
�zMulticastMixin.getTTLcCs$t�d|�}|j�tjtj|�dS)N�B)r$r�rrrr�r�)r&Zttlr+r+r,�setTTLqszMulticastMixin.setTTLrcCs|j�|��|j|d�S)zF
        Join a multicast group. Returns Deferred of success.
        r:�r)r�r��
_joinAddr1�r&rWrr+r+r,�	joinGroupvs�zMulticastMixin.joinGroupcCs|j�|��|j||�Sr8)r)r�r��
_joinAddr2)r&rWrrYr+r+r,r�~s�zMulticastMixin._joinAddr1c
Cs�t�|�}t�|�}|r tj}ntj}z|j�tj|||�WnBtjk
r�}z"t�tj	||f|j
���WY�Sd}~XYnXdSr8)rr�ZIP_ADD_MEMBERSHIPZIP_DROP_MEMBERSHIPrrr�rr
ZFailureZMulticastJoinErrorrU)r&rrWrY�cmd�er+r+r,r��s

�zMulticastMixin._joinAddr2cCs|j�|��|j|d�S)zD
        Leave multicast group, return Deferred of success.
        rr�r�r+r+r,�
leaveGroup�s�zMulticastMixin.leaveGroupN)r)r)r{r|r}r~r�r�r�r�r�r�r�r�r�r�r�r+r+r+r,rIs
rc@s"eZdZdZd
dd�Zdd	�ZdS)�
MulticastPortz.
    UDP Port that supports multicasting.
    rrNFcCst�||||||�||_dSr8)rr�listenMultiple)r&rr'rr(r)r�r+r+r,r�szMulticastPort.__init__cCsBt�|�}|jr>|�tjtjd�ttd�r>|�tjtjd�|S)Nr:�SO_REUSEPORT)	rr9r�rrrrsZSO_REUSEADDRrjr�)r&r*r+r+r,r9�s

zMulticastPort.createSocket)rrNF)r{r|r}r~rr9r+r+r+r,r��s�
r�)%r~rrwr$rerHZzope.interfacerZtwisted.internetrrrrZtwisted.internet.abstractrrZtwisted.pythonr	r
Z"twisted.internet.iocpreactor.constrrr
Z'twisted.internet.iocpreactor.interfacesrZtwisted.internet.iocpreactorrr rZIListeningPortZ
IUDPTransportZ
ISystemHandlerrrZIMulticastTransportr�r+r+r+r,�<module>s((�1Q