a
    kÄ#d=  ã                   @   sZ  d Z ddlm  mZ ddlmZmZmZ ddlm	Z	m
Z
mZmZmZmZmZ ddlmZ ddlmZ ddlmZmZ dd	d
ddddddddddddddœZdddddddd œZd!d"d#œZg d$¢Zg d%¢Zi Zd&d'„ ZG d(d)„ d)eƒZG d*d+„ d+eƒZd,d-„ Z G d.d/„ d/eƒZ!eee!d0d1� eee!d0d2� eee!d3d1� eee!d3d2� eee!d0d0d4� dS )5ag  
.. 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
é    N)ÚPacketÚbind_layersÚbind_top_down)ÚBitEnumFieldÚBitFieldÚBitFieldLenFieldÚByteEnumFieldÚConditionalFieldÚPacketListFieldÚStrLenField)ÚUDP)Úconf)ÚSDNV2ÚSDNV2FieldLenFieldz+0x0 Red data, NOT (Checkpoint, EORP or EOB)z+0x1 Red data, Checkpoint, NOT (EORP or EOB)z'0x2 Red data, Checkpoint, EORP, NOT EOBz#0x3 Red data, Checkpoint, EORP, EOBz0x4 Green data, NOT EOBz0x5 Green data, undefinedz0x6 Green data, undefinedz0x7 Green data, EOBz0x8 Report segmentz 0x9 Report-acknowledgment segmenz0xA Control segment, undefinedz0xB Control segment, undefinedz$0xC Cancel segment from block senderz10xD Cancel-acknowledgment segment to block senderz&0xE Cancel segment from block receiverz30xF Cancel-acknowledgment segment to block receiver)r   é   é   é   é   é   é   é   é   é	   é
   é   é   é   é   é   z-USR_CNCLD  - Client service canceled session.z(UNREACH    - Unreachable client service.z+RLEXC      - Retransmission limit exceeded.z)MISCOLORED - Received miscolored segment.z$SYS_CNCLD  - System error condition.z6RXMTCYCEXC - Exceeded the retransmission cycles limit.ZRESERVED)r   r   r   r   r   r   r   zLTP authentication extensionzLTP cookie extension)r   r   )r   r   r   r   r   r   r   r   )r   r   r   c                 C   s   |t | < dS )zÎBind payload class to the LTP packets.

    :param cls: the class to bind
    :param lambd: lambda that will be called to check
        whether or not the cls should be used
        ex: lambda pkt: ...
    N)Ú_ltp_payload_conditions)ÚclsÚlambd© r"   úH/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/contrib/ltp.pyÚltp_bind_payloadE   s    r$   c                   @   sB   e Zd ZdZeddeƒedddd�eddd	d
„ d�gZdd„ Z	dS )ÚLTPexzLTP ExtensionZExTagr   ÚExLengthNZExData©Z	length_ofÚ c                 C   s   | j S ©N)r&   ©Úxr"   r"   r#   Ú<lambda>V   ó    zLTPex.<lambda>)Úlength_fromc                 C   s   t jS r)   ©r   Zpadding_layer©ÚselfZpayr"   r"   r#   Údefault_payload_classY   s    zLTPex.default_payload_class)
Ú__name__Ú
__module__Ú__qualname__Únamer   Ú_ltp_extension_tagr   r   Úfields_descr2   r"   r"   r"   r#   r%   P   s   
ür%   c                   @   s,   e Zd ZdZeddƒeddƒgZdd„ ZdS )ÚLTPReceptionClaimzLTP Reception ClaimZReceptionClaimOffsetr   ZReceptionClaimLengthc                 C   s   t jS r)   r/   r0   r"   r"   r#   r2   b   s    z'LTPReceptionClaim.default_payload_classN)r3   r4   r5   r6   r   r8   r2   r"   r"   r"   r#   r9   ]   s
   ÿr9   c                 G   s*   t  t¡D ]\}}|| ƒr
|  S q
tjS r)   )ÚsixÚ	iteritemsr   r   Z	raw_layer)ZpktÚargsÚkÚvr"   r"   r#   Ú_ltp_guess_payloadf   s    
r?   c                   @   sÂ  e Zd Zd Zedddƒedddeƒeddƒeddƒedddd	d
�eddddd
�e	d	g e
dd„ d�eeddƒdd„ ƒeeddƒdd„ ƒeedddd�dd„ ƒeeddƒdd„ ƒeeddƒdd„ ƒee	ddedd„ d�dd„ ƒeeddƒd d„ ƒeed!dƒd"d„ ƒeed#dƒd$d„ ƒeed%dƒd&d„ ƒeed'dd(d
�d)d„ ƒee	d(g ed*d„ d�d+d„ ƒeed,d-eƒd.d„ ƒeed/d-eƒd0d„ ƒeed1dƒd2d„ ƒeed3dƒd4d„ ƒe	dg e
d5d„ d�gZd6d7„ ZdS )8ÚLTPÚversionr   r   ÚflagsZSessionOriginatorZSessionNumberÚHeaderExtensionCountNZHeaderExtensions)Zcount_ofÚTrailerExtensionCountZTrailerExtensionsc                 C   s   | j S r)   )rC   r*   r"   r"   r#   r,   v   r-   zLTP.<lambda>)Z
count_fromZDATA_ClientServiceIDc                 C   s
   | j tv S r)   ©rB   Ú_ltp_data_segmentr*   r"   r"   r#   r,   {   r-   ZDATA_PayloadOffsetc                 C   s
   | j tv S r)   rE   r*   r"   r"   r#   r,   }   r-   ÚDATA_PayloadLengthZLTP_Payloadr'   c                 C   s
   | j tv S r)   rE   r*   r"   r"   r#   r,      r-   ZCheckpointSerialNoc                 C   s
   | j tv S r)   ©rB   Ú_ltp_checkpoint_segmentr*   r"   r"   r#   r,   „   r-   ZReportSerialNoc                 C   s   | j tv p| j dkS ©Nr   rH   r*   r"   r"   r#   r,   ‰   s   
c                 C   s   | j S r)   )rG   r*   r"   r"   r#   r,   �   r-   )Znext_cls_cbr.   c                 C   s
   | j tv S r)   rE   r*   r"   r"   r#   r,   �   r-   ZRA_ReportSerialNoc                 C   s
   | j dkS )Nr   ©rB   r*   r"   r"   r#   r,   •   r-   ZReportCheckpointSerialNoc                 C   s
   | j dkS rJ   rK   r*   r"   r"   r#   r,   ›   r-   ZReportUpperBoundc                 C   s
   | j dkS rJ   rK   r*   r"   r"   r#   r,   �   r-   ZReportLowerBoundc                 C   s
   | j dkS rJ   rK   r*   r"   r"   r#   r,   Ÿ   r-   ÚReportReceptionClaimCountZReportReceptionClaimsc                 C   s
   | j dkS rJ   rK   r*   r"   r"   r#   r,   ¡   r-   c                 C   s   | j S r)   )rL   r*   r"   r"   r#   r,   £   r-   c                 C   s   | j dko| j p| jdkS )Nr   r   )rB   rL   r*   r"   r"   r#   r,   ¤   r-   ZCancelFromSenderReasonr   c                 C   s
   | j dkS )Nr   rK   r*   r"   r"   r#   r,   ª   r-   ZCancelFromReceiverReasonc                 C   s
   | j dkS )Nr   rK   r*   r"   r"   r#   r,   ­   r-   ZCancelAckToBlockSenderc                 C   s
   | j dkS )Nr   rK   r*   r"   r"   r#   r,   ²   r-   ZCancelAckToBlockReceiverc                 C   s
   | j dkS )Nr   rK   r*   r"   r"   r#   r,   ´   r-   c                 C   s   | j S r)   )rD   r*   r"   r"   r#   r,   ¸   r-   c                 C   s   |   d¡tgfS )NzLTP %SessionNumber%)Zsprintfr   )r1   r"   r"   r#   Ú	mysummary»   s    zLTP.mysummary)r3   r4   r5   r6   r   r   Ú_ltp_flag_valsr   r   r
   r%   r	   r   r?   r9   r   Ú_ltp_cancel_reasonsr8   rM   r"   r"   r"   r#   r@   m   s†   

ÿ
ÿÿ
ÿ
ÿ
ÿþ
ÿ
ÿ
ÿ
ÿÿ
ÿþÿþÿþ
ÿ
ÿ·Lr@   iY  )Úsport)ÚdportiA  )rP   rQ   )"Ú__doc__Zscapy.libs.sixZlibsr:   Zscapy.packetr   r   r   Zscapy.fieldsr   r   r   r   r	   r
   r   Zscapy.layers.inetr   Zscapy.configr   Zscapy.contrib.sdnvr   r   rN   rO   r7   rF   rI   r   r$   r%   r9   r?   r@   r"   r"   r"   r#   Ú<module>   s^   $ðùþ	R