a
    kÄ#d#
  ã                   @   s€   d Z ddlmZmZmZ ddlmZ G dd„ deƒZG dd„ dƒZ	e	ƒ Z
G dd	„ d	eƒZG d
d„ deeƒZG dd„ deeƒZdS )ag  
.. centered::
    NOTICE
    This software/technical data was produced for the U.S. Government
    under Prime Contract No. NASA-03001 and JPL Contract No. 1295026
    and is subject to FAR 52.227-14 (6/87) Rights in Data General,
    and Article GP-51, Rights in Data  General, respectively.
    This software is publicly released under MITRE case #12-3054
é    )ÚFieldÚFieldLenFieldÚLenField)Úrawc                   @   s   e Zd Zdd„ ZdS )ÚSDNVValueErrorc                 C   s
   || _ d S ©N©ÚmaxValue©Úselfr	   © r   úI/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/contrib/sdnv.pyÚ__init__   s    zSDNVValueError.__init__N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r      s   r   c                   @   s6   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚSDNVì   ÿÿ c                 C   s
   || _ d S r   r   r
   r   r   r   r      s    zSDNV.__init__c                 C   s
   || _ d S r   r   r
   r   r   r   ÚsetMax#   s    zSDNV.setMaxc                 C   s   | j S r   r   )r   r   r   r   ÚgetMax&   s    zSDNV.getMaxc                 C   sn   || j krt| j ƒ‚tƒ }| |d@ ¡ |d? }|dkrj|d@ }|dO }|d? }tƒ }| |¡ || }q0|S )Né   é   r   é€   )r	   r   Ú	bytearrayÚappend)r   ÚnumberZfooZthisByteÚtempr   r   r   Úencode)   s    



zSDNV.encodec                 C   s~   d}d}|| }|d@ }|d@ dkrb|d> }|| j kr@t| j ƒ‚|||  }||d@ 7 }|d7 }q|| j krvt| j ƒ‚||fS )Nr   é   r   r   r   )r	   r   )r   ÚbaÚoffsetr   ZnumBytesÚbr   r   r   Údecode;   s    




zSDNV.decodeN)r   )r   r   r   r   r   r   r   r"   r   r   r   r   r      s
   
r   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚSDNV2z SDNV2 field c                 C   s   |t t |¡ƒ S r   )r   ÚSDNVUtilr   ©r   ÚpktÚsÚvalr   r   r   ÚaddfieldS   s    zSDNV2.addfieldc                 C   s(   t |ƒ}t |d¡\}}||d … |fS )Nr   )r   r$   r"   )r   r&   r'   r!   r(   Úlenr   r   r   ÚgetfieldV   s    zSDNV2.getfieldN)r   r   r   Ú__doc__r)   r+   r   r   r   r   r#   P   s   r#   c                   @   s   e Zd Zdd„ ZdS )ÚSDNV2FieldLenFieldc              	   C   s   |t t t | ||¡¡ƒ S r   )r   r$   r   r   Úi2mr%   r   r   r   r)   ]   s    zSDNV2FieldLenField.addfieldN©r   r   r   r)   r   r   r   r   r-   \   s   r-   c                   @   s   e Zd Zdd„ ZdS )ÚSDNV2LenFieldc              	   C   s   |t t t | ||¡¡ƒ S r   )r   r$   r   r   r.   r%   r   r   r   r)   b   s    zSDNV2LenField.addfieldNr/   r   r   r   r   r0   a   s   r0   N)r,   Zscapy.fieldsr   r   r   Zscapy.compatr   Ú	Exceptionr   r   r$   r#   r-   r0   r   r   r   r   Ú<module>   s   /