
    \d                         d Z ddlZddlmZ ddlmZ ddlmZ  G d d          Z eej	                   G d d	ej
                              ZdS )
z1
Implementation of raw packet interfaces for UDP
    N)implementer)protocol)rawc                       e Zd Zd ZdS )	UDPHeaderc                 r    t          j        d|d d                   \  | _        | _        | _        | _        d S )Nz!HHHH   )structunpacksourcedestlencheck)selfdatas     3lib/python3.11/site-packages/twisted/pair/rawudp.py__init__zUDPHeader.__init__   s5    9?T"1"X:
 :
6di4:::    N)__name__
__module____qualname__r    r   r   r   r      s#        
 
 
 
 
r   r   c                        e Zd Zd Zd Zd ZdS )RawUDPProtocolc                     i | _         d S )N)	udpProtos)r   s    r   r   zRawUDPProtocol.__init__   s    r   c                    t          |t          j                  st          d          |dk     rt          d          |dk    rt          d          || j        vr
g | j        |<   | j        |                             |           d S )Nz6Added protocol must be an instance of DatagramProtocolr   z'Added protocol must be positive or zeroi   z"Added protocol must fit in 16 bits)
isinstancer   DatagramProtocol	TypeErrorr   append)r   numprotos      r   addProtozRawUDPProtocol.addProto   s    %!:;; 	VTUUU77EFFF'>>@AAAdn$$"$DN3s""5)))))r   c                     t          |          }| j                            |j        d          D ]'}|                    |dd          ||j        f           (d S )Nr   r	   )r   r   getr   datagramReceivedr   )r   r   partialr   r   r   versionihltostot_lenfragment_idfragment_offsetdont_fragmentmore_fragmentsttlheaderr#   s                    r   r'   zRawUDPProtocol.datagramReceived)   sh    " 4^''R88 	F 	FE""48ffm-DEEEE	F 	Fr   N)r   r   r   r   r$   r'   r   r   r   r   r      sF          	* 	* 	*F F F F Fr   r   )__doc__r
   zope.interfacer   twisted.internetr   twisted.pairr   r   IRawDatagramProtocolAbstractDatagramProtocolr   r   r   r   <module>r9      s   
   & & & & & & % % % % % %      
 
 
 
 
 
 
 
 S%&&"F "F "F "F "FX6 "F "F '&"F "F "Fr   