
    h                     `   d Z ddlmZ ddlmZ ddlmZ ddlmZm	Z	m
Z
mZmZmZmZmZmZ ddlmZmZ ddd	d
dZddddZi ddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1i d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXZ G dY dZe          Z G d[ d\e          Z G d] d^e          Z G d_ d`e          Z eeeda            eeedba            eeedca           ej                            ee           ddS )ez+
Default USB frames & Basic implementation
    )conf)chb)DLT_USBPCAP)		ByteField
XByteFieldByteEnumFieldLEShortFieldLEShortEnumField
LEIntFieldLEIntEnumFieldXLELongFieldLenField)Packetbind_top_downSuccessPendingHaltedError)r   i   @l        l        Isochronous	InterruptControl)r            URB_FUNCTION_CONTROL_TRANSFER	   'URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER
   URB_FUNCTION_ISOCH_TRANSFER   'URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE   %URB_FUNCTION_SET_DESCRIPTOR_TO_DEVICE   "URB_FUNCTION_SET_FEATURE_TO_DEVICE   %URB_FUNCTION_SET_FEATURE_TO_INTERFACE   $URB_FUNCTION_SET_FEATURE_TO_ENDPOINT   $URB_FUNCTION_CLEAR_FEATURE_TO_DEVICE   'URB_FUNCTION_CLEAR_FEATURE_TO_INTERFACE   &URB_FUNCTION_CLEAR_FEATURE_TO_ENDPOINT   #URB_FUNCTION_GET_STATUS_FROM_DEVICE   &URB_FUNCTION_GET_STATUS_FROM_INTERFACE   %URB_FUNCTION_GET_STATUS_FROM_ENDPOINT   URB_FUNCTION_VENDOR_DEVICE   URB_FUNCTION_VENDOR_INTERFACE   URB_FUNCTION_VENDOR_ENDPOINT   URB_FUNCTION_CLASS_DEVICE   URB_FUNCTION_CLASS_INTERFACE   URB_FUNCTION_CLASS_ENDPOINT   URB_FUNCTION_CLASS_OTHER    URB_FUNCTION_VENDOR_OTHER!   "URB_FUNCTION_GET_STATUS_FROM_OTHER"   #URB_FUNCTION_CLEAR_FEATURE_TO_OTHER#   !URB_FUNCTION_SET_FEATURE_TO_OTHER$   )URB_FUNCTION_GET_DESCRIPTOR_FROM_ENDPOINT%   'URB_FUNCTION_SET_DESCRIPTOR_TO_ENDPOINT&   URB_FUNCTION_GET_CONFIGURATION'   URB_FUNCTION_GET_INTERFACE(   *URB_FUNCTION_GET_DESCRIPTOR_FROM_INTERFACE)   (URB_FUNCTION_SET_DESCRIPTOR_TO_INTERFACE*   &URB_FUNCTION_GET_MS_FEATURE_DESCRIPTOR2    URB_FUNCTION_CONTROL_TRANSFER_EX7   9URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER_USING_CHAINED_MDLURB_FUNCTION_ABORT_PIPE,URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALLURB_FUNCTION_SYNC_RESET_PIPEURB_FUNCTION_SYNC_CLEAR_STALL)r      0   1   c                   (    e Zd ZdZ edd           edd           edd           edde           edde	           e
d	d           ed
d           edd           e
dd           edde           eddd          gZd Z fdZ xZS )USBpcapzUSBpcap URB	headerLenNresr   irpIdusbd_statusfunctioninfobusdeviceendpointtransfer
dataLengthz<I)fmtc                    | j         t          |          }t          | j        t          t
          t          f          r1|t          | j                  t          | j        j                  z
  z  }t          |          |dd          z   }||z   S )Nr   )rg   len
isinstancepayloadUSBpcapTransferIsochronousUSBpcapTransferInterruptUSBpcapTransferControlr   )selfppayrg   s       T/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/layers/usb.py
post_buildzUSBpcap.post_build^   s    >!AI$,)C)A)?)A B B K S..T\5I1J1JJJ	I122&A3w    c                 &   | j         dk    r(t          t          |                               |          S | j        dk    rt
          S | j        dk    rt          S | j        dk    rt          S t          t          |                               |          S )Nr>   r   r   r   )rg   superrf   guess_payload_classrp   rw   rx   ry   )rz   rv   	__class__s     r}   r   zUSBpcap.guess_payload_classh   s    >R$'';;GDDD=A--]a++]a))Wd##77@@@r   )__name__
__module____qualname__namer   r   r   _usbd_status_codesr
   _urb_functionsr   r	   r   _transfer_typesr   fields_descr~   r   __classcell__)r   s   @r}   rf   rf   P   s       D9[$//9UA&&<++!>-6HII##J>BB:fa((<q))<!,,:j!,, =Q@@8L$D999
;K  
A 
A 
A 
A 
A 
A 
A 
A 
Ar   rf   c                   Z    e Zd ZdZ edd           edd           edde          gZdS )rw   zUSBpcap Transfer Isochronousoffsetr   lengthrj   N)r   r   r   r   r   r   r   r    r   r}   rw   rw   u   sJ        )D
8Q
8Q}c+=>>KKKr   rw   c                   X    e Zd ZdZ edd           edd           edd          gZdS )rx   zUSBpcap Transfer Interrupt
startFramer   numberOfPackets
errorCountN)r   r   r   r   r   r   r   r   r}   rx   rx   ~   sH        'D
<##
$a((
<##KKKr   rx   c                   ,    e Zd ZdZ edd          gZdS )ry   zUSBpcap Transfer Controlstager   N)r   r   r   r   r   r   r   r   r}   ry   ry      s)        %D	'1KKKr   ry   )rp   r   r   N)__doc__scapy.configr   scapy.compatr   
scapy.datar   scapy.fieldsr   r   r   r	   r
   r   r   r   r   scapy.packetr   r   r   r   r   rf   rw   rx   ry   l2typesregisterr   r   r}   <module>r      s                " " " " " "                      / . . . . . . . 	   
		 '
+'
5' )' 5	'
 3' 0' 3' 2' 2' 5' 4' 1' 4' 3' ('  +!'" *#' '$ '%'& *''( ))'* &+', '-'. 0/'0 11'2 /3'4 75'6 57'8 ,9': (;'< 8='> 6?'@ 4A'B .C'D GE' 'F &:*+M' ' 'T"A "A "A "A "Af "A "A "AJ           v       V    g1A > > > > g/! < < < < g- : : : :   k7 + + + + +r   