U
    
W[  ã                   @   s^   d Z ddlZddlmZ ddlmZ ddlmZ G dd„ dƒZeej	ƒG dd	„ d	ej
ƒƒZdS )
z1
Implementation of raw packet interfaces for UDP
é    N)Úprotocol)Úraw)Úimplementerc                   @   s   e Zd Zdd„ ZdS )Ú	UDPHeaderc                 C   s(   t  d|d d… ¡\| _| _| _| _d S )Nz!HHHHé   )ÚstructZunpackÚsourceÚdestÚlenZcheck)ÚselfÚdata© r   ú5/usr/lib/python3/dist-packages/twisted/pair/rawudp.pyÚ__init__   s    ÿzUDPHeader.__init__N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r      s   r   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚRawUDPProtocolc                 C   s
   i | _ d S )N)Ú	udpProtos)r   r   r   r   r      s    zRawUDPProtocol.__init__c                 C   s\   t |tjƒstdƒ‚|dk r$tdƒ‚|dkr4tdƒ‚|| jkrHg | 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   ZDatagramProtocolÚ	TypeErrorr   Úappend)r   ZnumÚprotor   r   r   ÚaddProto   s    

zRawUDPProtocol.addProtoc                 C   s<   t |ƒ}| j |jd¡D ]}| |dd … ||jf¡ qd S )Nr   r   )r   r   Úgetr	   ÚdatagramReceivedr   )r   r   Úpartialr   r	   r   ÚversionZihlZtosZtot_lenZfragment_idZfragment_offsetZdont_fragmentZmore_fragmentsZttlÚheaderr   r   r   r   r   )   s
    ÿzRawUDPProtocol.datagramReceivedN)r   r   r   r   r   r   r   r   r   r   r      s   r   )Ú__doc__r   Ztwisted.internetr   Ztwisted.pairr   Zzope.interfacer   r   ZIRawDatagramProtocolZAbstractDatagramProtocolr   r   r   r   r   Ú<module>   s   