
    Ϫf                         d Z ddlZddlmZ ddlmZ ddlmZ  G d d      Z eej                         G d d	ej                               Zy)
z1
Implementation of raw packet interfaces for UDP
    N)implementer)protocol)rawc                       e Zd Zd Zy)	UDPHeaderc                 h    t        j                  d|d d       \  | _        | _        | _        | _        y )Nz!HHHH   )structunpacksourcedestlencheck)selfdatas     5/usr/lib/python3/dist-packages/twisted/pair/rawudp.py__init__zUDPHeader.__init__   s,    9?T"1X:
6di4:    N)__name__
__module____qualname__r    r   r   r   r      s    
r   r   c                       e Zd Zd Zd Zd Zy)RawUDPProtocolc                     i | _         y )N)	udpProtos)r   s    r   r   zRawUDPProtocol.__init__   s	    r   c                    t        |t        j                        st        d      |dk  rt        d      |dk\  rt        d      || j                  vrg | j                  |<   | j                  |   j                  |       y )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protos      r   addProtozRawUDPProtocol.addProto   su    %!:!:;TUU7EFF%<@AAdnn$"$DNN3s""5)r   c                     t        |      }| j                  j                  |j                  d      D ]#  }|j	                  |dd  ||j
                  f       % y )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#   s                    r   r'   zRawUDPProtocol.datagramReceived(   sR    " 4^^''R8 	FE""48ffmm-DE	Fr   N)r   r   r   r   r$   r'   r   r   r   r   r      s    	*Fr   r   )__doc__r
   zope.interfacer   twisted.internetr   twisted.pairr   r   IRawDatagramProtocolAbstractDatagramProtocolr   r   r   r   <module>r9      sQ   
  & % 
 
 S%%&"FX66 "F '"Fr   