U
    
W[#
                     @   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)protocol)raw)implementerc                   @   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    )structZunpacktostot_lenfragment_idttlr   ZchecksocketZ	inet_ntoasaddrdaddrversionihlfragment_offsetdont_fragmentmore_fragments)selfdataZ
ihlversionZ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   $   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   Znumprotor   r   r   addProto'   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+   1   s"    zIPProtocol.datagramReceivedN)r   r   r   r   r&   r+   r   r   r   r   r    "   s   
r    )__doc__r   r   Ztwisted.internetr   Ztwisted.pairr   Zzope.interfacer   r   r#   ZIRawPacketProtocolZAbstractDatagramProtocolr    r   r   r   r   <module>   s   