U
    �Acj	  ã                   @   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ÚdataZ
ihlversionZfrag_offr   r   © r   ú3/tmp/pip-unpacked-wheel-nrvc_22y/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   /   s    zIPProtocol.__init__c                 C   sR   t  |¡}|dk rtdƒ‚|tkr*tdƒ‚|| jkr>g | j|< | j|  |¡ d S )Nr   z'Added protocol must be positive or zeroz"Added protocol must fit in 32 bits)r   ZIRawDatagramProtocolÚ	TypeErrorÚMAX_SIZEr$   Úappend)r   ÚnumÚprotor   r   r   ÚaddProto2   s    


zIPProtocol.addProtoc                 C   sh   t |ƒ}| j |jd¡D ]J}|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+   r-   r,   r   Úheaderr)   r   r   r   r/   <   s$    
òzIPProtocol.datagramReceivedN)r    r!   r"   r   r*   r/   r   r   r   r   r#   -   s   
r#   )Ú__doc__r   r   Zzope.interfacer   Ztwisted.internetr   Ztwisted.pairr   r   r&   ZIRawPacketProtocolZAbstractDatagramProtocolr#   r   r   r   r   Ú<module>   s   