o
    ¯b  ã                   @   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)Úimplementer)Úprotocol)Úrawc                   @   s   e Zd Zdd„ ZdS )Ú	UDPHeaderc                 C   s(   t  d|d d… ¡\| _| _| _| _d S )Nz!HHHHé   )ÚstructÚunpackÚsourceÚdestÚlenÚ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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Ú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   ÚversionÚihlÚtosÚtot_lenÚfragment_idÚfragment_offsetÚdont_fragmentÚmore_fragmentsÚ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   Úzope.interfacer   Útwisted.internetr   Útwisted.pairr   r   ÚIRawDatagramProtocolÚAbstractDatagramProtocolr   r   r   r   r   Ú<module>   s   