o
    ¯b	  ã                   @   sj   d Z ddl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	dZ
eejƒG d	d
„ d
ejƒƒZdS )z,Support for working directly with IP packetsé    N)Úimplementer)Úprotocol)Úrawc                   @   s   e Zd Zdd„ ZdS )ÚIPHeaderc              
   C   s’   t  d|d d… ¡\
}| _| _| _}| _| _| _}}t 	|¡| _
t 	|¡| _|d@ | _|d@ d? d> | _|d@ | _|d@ d	k| _|d
@ d	k| _d S )Nz!BBHHHBBH4s4sé   é   éð   é   é   iÿ  i @  r   i    )ÚstructÚunpackÚtosÚtot_lenÚfragment_idÚttlr   ÚcheckÚsocketÚ	inet_ntoaÚsaddrÚdaddrÚversionÚihlÚfragment_offsetÚdont_fragmentÚmore_fragments)ÚselfÚdataÚ
ihlversionÚfrag_offr   r   © r   ú1/usr/lib/python3/dist-packages/twisted/pair/ip.pyÚ__init__   s&   õ

zIPHeader.__init__N)Ú__name__Ú
__module__Ú__qualname__r!   r   r   r   r    r      s    r   l        c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú
IPProtocolc                 C   s
   i | _ d S )N)ÚipProtos)r   r   r   r    r!   0   s   
zIPProtocol.__init__c                 C   sR   t  |¡}|dk rtdƒ‚|tkrtdƒ‚|| jvrg | j|< | j|  |¡ d S )Nr   z'Added protocol must be positive or zeroz"Added protocol must fit in 32 bits)r   ÚIRawDatagramProtocolÚ	TypeErrorÚMAX_SIZEr&   Úappend)r   ÚnumÚprotor   r   r    ÚaddProto3   s   


zIPProtocol.addProtoc                 C   sh   t |ƒ}| j |jd¡D ]%}|j|dd … ||j|j|j|j|j|j	|j
|j|j|j|j|jd� qd S )Nr   r   )r   ÚpartialÚsourceÚdestr   r   r   r   r   r   r   r   r   r   )r   r&   Úgetr   ÚdatagramReceivedr   r   r   r   r   r   r   r   r   r   r   )r   r   r.   r0   r/   r   Úheaderr,   r   r   r    r2   =   s&   
òÿzIPProtocol.datagramReceivedN)r"   r#   r$   r!   r-   r2   r   r   r   r    r%   .   s    
r%   )Ú__doc__r   r   Úzope.interfacer   Útwisted.internetr   Útwisted.pairr   r   r)   ÚIRawPacketProtocolÚAbstractDatagramProtocolr%   r   r   r   r    Ú<module>   s   