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   