
    hq                        d dl Z d dlmZmZ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mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZmZ 	 ej        d
         d         r	 n'# e$ r  ej         d           ddiej        d
<   Y nw xY w G d d
e          Z! G d de          Z" ee!e"d            G d de          Z# ee!e#d            G d de          Z$ ee!e$d            G d de          Z% ee!e%d            G d de          Z& ee!e&d            G d d e          Z' ee!e'd!            G d" d#e          Z( ee!e(d$            G d% d&e          Z) ee!e)d'            G d( d)e          Z* ee!e*d*            G d+ d,e          Z+ ee!e+d-            G d. d/e          Z, ee!e,d0            G d1 d2e          Z- ee!e-d3            G d4 d5e          Z. ee!e.d6            G d7 d8e          Z/ ee!e/d9            G d: d;e          Z0 ee!e0d<            G d= d>e          Z1 ee!e1d?            G d@ dAe          Z2 ee!e2dB            G dC dDe          Z3 ee!e3dE            G dF dGe          Z4 ee!e4dH            G dI dJe          Z5 ee!e5dK            G dL dMe          Z6 ee!e6dN            G dO dPe          Z7 ee!e7dQ            G dR dSe          Z8 ee!e8dT            G dU dVe          Z9 ee!e9dW            G dX dYe          Z: ee!e:dZ            G d[ d\e          Z; ee!e;d]            G d^ d_e          Z< ee!e<d`            G da dbe          Z= ee!e=dc            G dd dee          Z> ee!e>df            G dg dhe          Z? ee!e?di            G dj dke          Z@ ee!e@dl            G dm dne          ZA ee!eAdo            G dp dqe          ZB ee!eBdr            G ds dte          ZC ee!eCdu            G dv dwe          ZD ee!eDdx            G dy dze          ZE ee!eEd{            G d| d}e          ZF ee!eFd~            G d de          ZG ee!eGd            G d de          ZH ee!eHd            G d de          ZI ee!eId            G d de          ZJ ee!eJd            G d de          ZK ee!eKd            G d de          ZL ee!eLd            G d de          ZM ee!eMd            G d de          ZN ee!eNd            G d de          ZO ee!eOd            G d de          ZP ee!ePd            G d de          ZQ ee!eQd            G d de          ZR ee!eRd            G d de          ZS ee!eSd            G d de          ZT ee!eTd            G d de          ZU ee!eUd            G d de          ZV ee!eVd            G d de          ZWdS )    N)BitFieldByteEnumField	ByteFieldConditionalFieldMayEndObservableDictStrFieldX3BytesFieldXByteEnumField
XByteFieldXShortEnumField)Packetbind_layers	NoPayload)conf)log_loading)PeriodicSenderThread)_PacketIterable)ISOTP)DictAnyKWP treat-response-pending-as-answerzSpecify "conf.contribs['KWP'] = {'treat-response-pending-as-answer': True}" to treat a negative response 'requestCorrectlyReceived-ResponsePending' as answer of a request. 
The default value is False.Fc                      e Zd Z e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 d!d"i d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDi dEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdk          Zd Z edldme          gZdn Zdo Z	dpS )qr      StartDiagnosticSession   ECUReset   ClearDiagnosticInformation   "ReadStatusOfDiagnosticTroubleCodes   "ReadDiagnosticTroubleCodesByStatus   ReadECUIdentification!   ReadDataByLocalIdentifier"   ReadDataByIdentifier#   ReadMemoryByAddress'   SecurityAccess(    DisableNormalMessageTransmission)   EnableNormalMessageTransmission,    DynamicallyDefineLocalIdentifier.   WriteDataByIdentifier0   #InputOutputControlByLocalIdentifier1   StartRoutineByLocalIdentifier2   StopRoutineByLocalIdentifier3   &RequestRoutineResultsByLocalIdentifier4   RequestDownload5   RequestUpload6   TransferData7   RequestTransferExit;   WriteDataByLocalIdentifier=   WriteMemoryByAddress>   TesterPresent   ControlDTCSetting   ResponseOnEventP   &StartDiagnosticSessionPositiveResponseQ   ECUResetPositiveResponseT   *ClearDiagnosticInformationPositiveResponseW   2ReadStatusOfDiagnosticTroubleCodesPositiveResponseX   2ReadDiagnosticTroubleCodesByStatusPositiveResponseZ   %ReadECUIdentificationPositiveResponsea   )ReadDataByLocalIdentifierPositiveResponseb   $ReadDataByIdentifierPositiveResponsec   #ReadMemoryByAddressPositiveResponseg   SecurityAccessPositiveResponseh   0DisableNormalMessageTransmissionPositiveResponsei   /EnableNormalMessageTransmissionPositiveResponsel   0DynamicallyDefineLocalIdentifierPositiveResponsen   %WriteDataByIdentifierPositiveResponsep   3InputOutputControlByLocalIdentifierPositiveResponseq   -StartRoutineByLocalIdentifierPositiveResponser   ,StopRoutineByLocalIdentifierPositiveResponses   6RequestRoutineResultsByLocalIdentifierPositiveResponset   RequestDownloadPositiveResponseu   RequestUploadPositiveResponsev   TransferDataPositiveResponsew   #RequestTransferExitPositiveResponse{   *WriteDataByLocalIdentifierPositiveResponse}   $WriteMemoryByAddressPositiveResponseTesterPresentPositiveResponse!ControlDTCSettingPositiveResponseResponseOnEventPositiveResponseNegativeResponse)~            servicer   c                    t          |t          |                     sdS | j        dk    r| j                            |          S | j        |j        dz   k    rst          | j        t
                    st          |j        t
                    r t          |           t          |          k    S | j                            |j                  S dS )NFr   @   )
isinstancetyper   payloadanswersr   lenselfothers     `/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/contrib/automotive/kwp.pyr   zKWP.answerso   s    %d,, 	5<4<''...<EMD011$,	22 ;u}i88;4yyCJJ..|++EM:::u    c                     | j         dk    rt          j        d| j        dz            S t          j        d| j         dz            S )Nr   Bi)r   structpackrequestServiceId)r   s    r   hashretzKWP.hashret}   sB    <4;sD$9E$ABBB;sDL5$8999r   N)
__name__
__module____qualname__r   servicesnamer   fields_descr   r    r   r   r   r   1   sM       ~6	#' 6	#	z6	#	+6	# 
36	# 
3	6	#
 
&6	# 
*6	# 
%6	# 
$6	# 
6	# 
16	# 
06	# 
16	# 
&6	# 
46	# 
.6	#  
-!6	# 6	#" 
7#6	#$ 
 %6	#& 
'6	#( 
~)6	#* 
$+6	#, 
+-6	#. 
%/6	#0 
16	#2 
"36	#4 
 56	#6 
776	#8 
)96	#: 
;;6	#< 
C=6	#> 
C?6	#@ 
6A6	#B 
:C6	# 6	# 6	#D 
5E6	#F 
4G6	#H 
/I6	#J 
AK6	#L 
@M6	#N 
AO6	#P 
6Q6	#R 
DS6	#T 
>U6	#V 
=W6	#X 
GY6	#Z 
0[6	#\ 
.]6	#^ 
-_6	#` 
4a6	#b 
;c6	#d 
5e6	# 6	#f /20!m6	# 6	# 6	#7$ 7$Hp Dy!X..K  : : : : :r   c                   P    e Zd Z edddddd          ZdZ edd	e          gZd
S )KWP_SDSdefaultSessionprogrammingSessionstandBySessionEcuPassiveSessionextendedDiagnosticSession)   rM            r   diagnosticSessionr   N)r   r   r   r   diagnosticSessionTypesr   r   r   r   r   r   r   r      sZ        +^"!)-+ -+ , , $D)1.DEEKKKr   r   r   )r   c                   >    e Zd ZdZ eddej                  gZd ZdS )	KWP_SDSPRrR   r   r   c                 L    t          |t                    o|j        | j        k    S N)r   r   r   r   s     r   r   zKWP_SDSPR.answers   s'    %)) >#t'==	>r   N)	r   r   r   r   r   r   r   r   r   r   r   r   r   r      sI        3D)14	6 	6K
> > > > >r   r   rQ   c                   :    e Zd ZddddZdZ edde          gZdS )	KWP_ERreservedpowerOnResetnonvolatileMemoryReset)r         r   	resetModer   N)r   r   r   
resetModesr   r   r   r   r   r   r   r      sB        &( (J Dk1j11KKKr   r   r   c                       e Zd ZdZd ZdS )KWP_ERPRrT   c                 ,    t          |t                    S r   )r   r   r   s     r   r   zKWP_ERPR.answers       %(((r   Nr   r   r   r   r   r   r   r   r   r      s(        %D) ) ) ) )r   r   rS   c                   X    e Zd ZdZ edd           e edd          d           gZdS )KWP_SAr.   
accessModer   keyr   c                     | j         dz  dk    S )N   r   r   pkts    r   <lambda>zKWP_SA.<lambda>       S^a%71%< r   N)r   r   r   r   r   r   r	   r   r   r   r   r   r      sM        D	,""%--<<	> 	>KKKr   r   r-   c                   ^    e Zd ZdZ edd           e edd          d           gZd ZdS )	KWP_SAPRrd   r   r   seedr   c                     | j         dz  dk    S )Nr   r   r   r   s    r   r   zKWP_SAPR.<lambda>   r   r   c                 L    t          |t                    o|j        | j        k    S r   )r   r   r   r   s     r   r   zKWP_SAPR.answers   s&    %(( 4 DO3	4r   N)	r   r   r   r   r   r   r	   r   r   r   r   r   r   r      sb        +D	,""&#..<<	> 	>K4 4 4 4 4r   r   rc   c                   p    e Zd ZdZdddddddZ ed	d
           edd
e           eddd          gZdS )
KWP_IOCBLIr8   zReturn Control to ECUzReport Current StatezReset to DefaultzFreeze Current StatezShort Term AdjustmentzLong Term Adjustment)r   r               localIdentifierr   inputOutputControlParametercontrolStater   r   fmtN)	r   r   r   r   inputOutputControlParametersr   r   r	   r   r   r   r   r   r      sv        0D%$ $%$$ $  	
$a((4a3	5 	5#...	KKKr   r   r7   c                   n    e Zd ZdZ edd           eddej                   eddd          gZ	d	 Z
d
S )KWP_IOCBLIPRrn   r   r   r   r   r   r   r   c                 L    t          |t                    o|j        | j        k    S r   )r   r   r   r   s     r   r   zKWP_IOCBLIPR.answers   s'    %,, >%)==	>r   N)r   r   r   r   r   r   r   r   r	   r   r   r   r   r   r   r      so        @D
$a((4a!>	@ 	@#...	K> > > > >r   r   rm   c                   8    e Zd ZdddZdZ edde          gZdS )KWP_DNMTresponseRequired
noResponser   r   r0   r   Nr   r   r   responseTypesr   r   r   r   r   r   r   r     s@          M .D(!];;KKKr   r   r/   c                       e Zd ZdZd ZdS )
KWP_DNMTPRrf   c                 ,    t          |t                    S r   r   r   r   s     r   r   zKWP_DNMTPR.answers      %***r   Nr   r   r   r   r   r     s(        =D+ + + + +r   r   re   c                   8    e Zd ZdddZdZ edde          gZdS )KWP_ENMTr   r   r   r2   r   Nr   r   r   r   r   r   !  s@          M -D(!];;KKKr   r   r1   c                       e Zd ZdZd ZdS )
KWP_ENMTPRrh   c                 ,    t          |t                    S r   r   r   s     r   r   zKWP_ENMTPR.answers2  r   r   Nr   r   r   r   r   r   /  s(        <D+ + + + +r   r   rg   c                   8    e Zd ZdddZdZ edde          gZdS )KWP_TPr   r   r   rL   r   Nr   r   r   r   r   r   ;  s@          M D(!];;KKKr   r   rK   c                       e Zd ZdZd ZdS )KWP_TPPRr   c                 ,    t          |t                    S r   )r   r   r   s     r   r   zKWP_TPPR.answersL  r   r   Nr   r   r   r   r   r   I  s(        *D) ) ) ) )r   r   r   c                       e Zd ZdddZdddddd	Zd
dddZdZ edde           edde           edde          gZ	dS )	KWP_CDTCSr   r   r   allPowertrainDTCsallChassisDTCsallBodyDTCsallNetworkDTCsallDTCsr   i @  i   i   i   Reservedonoff)r   r   r   rN   r   
groupOfDTCr   DTCSettingModeN)
r   r   r   r   	DTCGroupsDTCSettingModesr   r   r   r   r   r   r   r   r   U  s          M
 $   I  O
 D(!];;a33&?;;KKKr   r   rM   c                       e Zd ZdZd ZdS )KWP_CDTCSPRr   c                 ,    t          |t                    S r   )r   r   r   s     r   r   zKWP_CDTCSPR.answerst  s    %+++r   Nr   r   r   r   r  r  q  s(        .D, , , , ,r   r  r   c            	           e Zd ZdddZdddddZd	d
dddddZdZ edde           edde           e edde                     e	dd           edde
j                   e	dd          gZdS )KWP_ROEr   r   r   r   testerPresentRequiredinfiniteTimeToResponsenoEventWindow)r   r   r      reportActivatedEventsstopResponseOnEventonNewDTConTimerInterruptonChangeOfRecordValueonComparisonOfValues)r  r   r            rP   r   eventWindowTimer   	eventTypeeventParameterserviceToRespondserviceParameterN)r   r   r   r   eventWindowTimes
eventTypesr   r   r   r   r   r   r   r   r   r   r
  r
  }  s          M
 %&	  &# %$ J D(!];;',<==}}[!Z8899	"A&&(!S\::	$a((KKKr   r
  rO   c                       e Zd ZdZ edd           e eddej                             eddej	                  gZ
d ZdS )	KWP_ROEPRr   numberOfActivatedEventsr   r  r  c                 L    t          |t                    o|j        | j        k    S r   )r   r
  r  r   s     r   r   zKWP_ROEPR.answers  s%    %)) 24>1	2r   N)r   r   r   r   r   r   r   r
  r  r  r   r   r   r   r   r   r     sr        ,D	+Q//}}.73KLLMMk1g&899	K2 2 2 2 2r   r   r   c                   ^    e Zd Z eddddddddd	d
ddd          ZdZ edde          gZdS )	KWP_RDBLIzDevelopment DatazECU Serial Numberz
DBCom DatazOperating System Versionz Ecu Reprogramming IdentificationzVehicle InformationzFlash Info 1zFlash Info 2z(System Diagnostic general parameter dataz'System Diagnostic global parameter datazEcu ConfigurationzDiagnostic Protocol Information)                                    r(   recordLocalIdentifierr   N)r   r   r   r   localIdentifiersr   r   r   r   r   r   r$  r$    so        %~ !(0#87!/' '   'D.3CDDKKKr   r$  r'   c                   >    e Zd ZdZ eddej                  gZd ZdS )KWP_RDBLIPRr^   r1  r   c                 L    t          |t                    o| j        |j        k    S r   )r   r$  r1  r   s     r   r   zKWP_RDBLIPR.answers  )    %++ J*e.II	Jr   N	r   r   r   r   r   r$  r2  r   r   r   r   r   r4  r4    sI        6D.93MNNKJ J J J Jr   r4  r]   c                   8    e Zd ZdZ eddej                  gZdS )	KWP_WDBLIrH   r1  r   N)r   r   r   r   r   r$  r2  r   r   r   r   r9  r9    s/        'D.93MNNKKKr   r9  rG   c                   >    e Zd ZdZ eddej                  gZd ZdS )KWP_WDBLIPRr~   r1  r   c                 L    t          |t                    o| j        |j        k    S r   )r   r9  r1  r   s     r   r   zKWP_WDBLIPR.answers  r6  r   Nr7  r   r   r   r;  r;    sI        7D.93MNNKJ J J J Jr   r;  r}   c                   B    e Zd Z e            ZdZ edde          gZdS )KWP_RDBIr*   
identifierr   N)r   r   r   r   dataIdentifiersr   r   r   r   r   r   r>  r>    s8        $n&&O!Da99KKKr   r>  r)   c                   >    e Zd ZdZ eddej                  gZd ZdS )
KWP_RDBIPRr`   r?  r   c                 L    t          |t                    o| j        |j        k    S r   )r   r>  r?  r   s     r   r   zKWP_RDBIPR.answers  s&    %** 45#33	4r   N	r   r   r   r   r   r>  r@  r   r   r   r   r   rB  rB    sC        1Da)ABBK4 4 4 4 4r   rB  r_   c                   B    e Zd ZdZ edd           edd          gZdS )KWP_RMBAr,   memoryAddressr   
memorySizeN)r   r   r   r   r
   r   r   r   r   r   rF  rF    s8         D_a((	,""KKKr   rF  r+   c                   6    e Zd ZdZ eddd          gZd ZdS )
KWP_RMBAPRrb   
dataRecordr   r   r   c                 ,    t          |t                    S r   )r   rF  r   s     r   r   zKWP_RMBAPR.answers   r   r   Nr   r   r   r   r	   r   r   r   r   r   rJ  rJ    sC        0Ds,,,K+ + + + +r   rJ  ra   c                   l    e Zd ZdZdddddZ edd           ed	de           ed
dd          gZdS )KWP_DDLIr4   defineByLocalIdentifierdefineByMemoryAddressdefineByIdentifier&clearDynamicallyDefinedLocalIdentifier)r   r      r    dynamicallyDefineLocalIdentifierr   definitionModerK  r   r   r   N)	r   r   r   r   definitionModesr   r   r	   r   r   r   r   rO  rO  +  sl        -D530DF FO
 	
5q99&?;;s,,,KKKr   rO  r3   c                   2    e Zd ZdZ edd          gZd ZdS )
KWP_DDLIPRrj   rU  r   c                 L    t          |t                    o|j        | j        k    S r   )r   rO  rU  r   s     r   r   zKWP_DDLIPR.answersA  s)    %** \2d6[[	\r   N)r   r   r   r   r   r   r   r   r   r   rY  rY  ;  sD        =D
5q99K\ \ \ \ \r   rY  ri   c                   8    e Zd ZdZ eddej                  gZdS )KWP_WDBIr6   r?  r   N)r   r   r   r   r   r>  r@  r   r   r   r   r\  r\  K  s.        "Da)ABBKKKr   r\  r5   c                   >    e Zd ZdZ eddej                  gZd ZdS )
KWP_WDBIPRrl   r?  r   c                 L    t          |t                    o|j        | j        k    S r   )r   r\  r?  r   s     r   r   zKWP_WDBIPR.answers[  s&    %** 4 DO3	4r   NrD  r   r   r   r^  r^  U  sC        2Da)ABBK4 4 4 4 4r   r^  rk   c                   \    e Zd ZdZ edd           edd           eddd          gZd	S )
KWP_WMBArJ   rG  r   rH  rK  r   r   r   N)r   r   r   r   r
   r   r	   r   r   r   r   ra  ra  e  sL        !D_a((	,""s,,,KKKr   ra  rI   c                   2    e Zd ZdZ edd          gZd ZdS )
KWP_WMBAPRr   rG  r   c                 L    t          |t                    o|j        | j        k    S r   )r   ra  rG  r   s     r   r   zKWP_WMBAPR.answersw  s'    %** 64#55	6r   N)r   r   r   r   r
   r   r   r   r   r   rc  rc  q  s>        1D_a((K6 6 6 6 6r   rc  r   c                   >    e Zd ZddddddZdZ edd	e          gZd
S )KWP_CDIr   r   r   r   r   r   r    r  r   N)r   r   r   r  r   r   r   r   r   r   rf  rf    sH        #   I (Da33KKKr   rf  r   c                   >    e Zd ZdZ eddej                  gZd ZdS )	KWP_CDIPRrV   r  r   c                 L    t          |t                    o| j        |j        k    S r   )r   rf  r  r   s     r   r   zKWP_CDIPR.answers  s&    %)) 0Ou//	0r   N)	r   r   r   r   r   rf  r  r   r   r   r   r   rh  rh    sE        7D 	a):;;K0 0 0 0 0r   rh  rU   c                   8    e Zd ZdZ eddej                  gZdS )
KWP_RSODTCr"   r  r   N)r   r   r   r   r   rf  r  r   r   r   r   rk  rk    s.        /Da):;;KKKr   rk  r!   c                   2    e Zd ZdZ edd          gZd ZdS )KWP_RSODTCPRrX   numberOfDTCr   c                 ,    t          |t                    S r   )r   rk  r   s     r   r   zKWP_RSODTCPR.answers  s    %,,,r   N)r   r   r   r   r   r   r   r   r   r   rm  rm    s@        ?D 		-##K- - - - -r   rm  rW   c                   `    e Zd ZdZ edddddddd	d
ddddd          Z edde          gZdS )	KWP_RECUIr&   zDCS ECU IdentificationzDCX / MMC ECU IdentificationzVIN (Original)zDiagnostic Variant CodezVIN (Current)zCalibration IdentificationzCalibration Verification NumberzECU Code FingerprintzECU Data Fingerprintz ECU Code Software Identificationz ECU Data Software Identificationz ECU Boot Software IdentificationzECU Boot Fingerprint)rO         r   r                           r   r   N)r   r   r   r   r   r2  r   r   r   r   r   rq  rq    sr        "D%~&,'*/$$000$' '    	(!-=>>KKKr   rq  r%   c                   >    e Zd ZdZ eddej                  gZd ZdS )KWP_RECUIPRr\   r   r   c                 L    t          |t                    o| j        |j        k    S r   )r   rq  r   r   s     r   r   zKWP_RECUIPR.answers  s'    %++ : E$99	:r   N)	r   r   r   r   r   rq  r2  r   r   r   r   r   r}  r}    sF        2D 	(!Y-GHHK: : : : :r   r}  r[   c                   Z    e Zd Z eddddddddd	d
d
          ZdZ edde          gZdS )	KWP_SRBLIFlashEraseRoutineFlashCheckRoutinezTell-TaleRetentionStack RequestDTCsFromShadowErrorMemory+RequestEnvironmentDataFromShadowErrorMemoryRequestEventInformationRequestEventEnvironmentData RequestSoftwareModuleInformationzClearTell-TaleRetentionStackClearEventInformation)
r%  r&  r'  r(  r)  r*  r+  r,  r-  r.  r:   routineLocalIdentifierr   N)r   r   r   r   routineLocalIdentifiersr   r   r   r   r   r   r  r    si        ,n!!'0;'+0,%. .   +D/4KLLKKKr   r  r9   c                   >    e Zd ZdZ eddej                  gZd ZdS )KWP_SRBLIPRrp   r  r   c                 L    t          |t                    o|j        | j        k    S r   )r   r  r  r   s     r   r   zKWP_SRBLIPR.answers  s)    %++ L,0KK	Lr   N	r   r   r   r   r   r  r  r   r   r   r   r   r  r    sN        :D/ 8	: 	:K
L L L L Lr   r  ro   c                   8    e Zd ZdZ eddej                  gZdS )
KWP_STRBLIr<   r  r   Nr   r   r   r   r   r  r  r   r   r   r   r  r    s4        )D/ 8	: 	:KKKr   r  r;   c                   >    e Zd ZdZ eddej                  gZd ZdS )KWP_STRBLIPRrr   r  r   c                 L    t          |t                    o|j        | j        k    S r   )r   r  r  r   s     r   r   zKWP_STRBLIPR.answers   )    %,, L,0KK	Lr   Nr  r   r   r   r  r    sN        9D/ 8	: 	:K
L L L L Lr   r  rq   c                   8    e Zd ZdZ eddej                  gZdS )
KWP_RRRBLIr>   r  r   Nr  r   r   r   r  r  *  s4        3D/ 8	: 	:KKKr   r  r=   c                   >    e Zd ZdZ eddej                  gZd ZdS )KWP_RRRBLIPRrt   r  r   c                 L    t          |t                    o|j        | j        k    S r   )r   r  r  r   s     r   r   zKWP_RRRBLIPR.answers<  r  r   Nr  r   r   r   r  r  5  sN        CD/ 8	: 	:K
L L L L Lr   r  rs   c                   r    e Zd ZdZ edd           eddd           eddd           edd          gZdS )	KWP_RDr@   rG  r   compressionr   
encryptionuncompressedMemorySizeNr   r   r   r   r
   r   r   r   r   r   r  r  F  s[        D_a((1%%q!$$-q11	KKKr   r  r?   c                   6    e Zd ZdZ eddd          gZd ZdS )KWP_RDPRrv   maxNumberOfBlockLengthr   r   r   c                 ,    t          |t                    S r   )r   r  r   s     r   r   zKWP_RDPR.answersY  r   r   NrM  r   r   r   r  r  S  sD        ,D)3C888K) ) ) ) )r   r  ru   c                   r    e Zd ZdZ edd           eddd           eddd           edd          gZdS )	KWP_RUrB   rG  r   r  r   r  r  Nr  r   r   r   r  r  b  s[        D_a((1%%q!$$-q11	KKKr   r  rA   c                   6    e Zd ZdZ eddd          gZd ZdS )KWP_RUPRrx   r  r   r   r   c                 ,    t          |t                    S r   )r   r  r   s     r   r   zKWP_RUPR.answersu  r   r   NrM  r   r   r   r  r  o  sD        *D)3C888K) ) ) ) )r   r  rw   c                   F    e Zd ZdZ edd           eddd          gZdS )	KWP_TDrD   blockSequenceCounterr   transferDataRequestParameterr   r   r   N)r   r   r   r   r   r	   r   r   r   r   r  r  ~  s?        D	(!,,/#>>>KKKr   r  rC   c                   L    e Zd ZdZ edd           eddd          gZd Zd	S )
KWP_TDPRrz   r  r   r  r   r   r   c                 L    t          |t                    o|j        | j        k    S r   )r   r  r  r   s     r   r   zKWP_TDPR.answers  s)    %(( H*d.GG	Hr   N)r   r   r   r   r   r	   r   r   r   r   r   r  r    sY        )D	(!,,/#>>>K
H H H H Hr   r  ry   c                   0    e Zd ZdZ eddd          gZdS )KWP_RTErF   r  r   r   r   N)r   r   r   r   r	   r   r   r   r   r  r    s/         D/#>>>KKKr   r  rE   c                   6    e Zd ZdZ eddd          gZd ZdS )	KWP_RTEPRr|   r  r   r   r   c                 ,    t          |t                    S r   )r   r  r   s     r   r   zKWP_RTEPR.answers  s    %)))r   NrM  r   r   r   r  r    sD        0D/#>>>K* * * * *r   r  r{   c                       e Z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 d!d"d#d$d%d&d'Zd(Z e ed)dej                             e	d*de          gZ
d+ Zd,S )-KWP_NRr   positiveResponser   generalRejectr   serviceNotSupported   z%subFunctionNotSupported-InvalidFormatr'   busyRepeatRequestr)   z)conditionsNotCorrect-RequestSequenceErrorr+   routineNotCompleter9   requestOutOfRanger=   z,securityAccessDenied-SecurityAccessRequestedrA   
invalidKeyrC   exceedNumberOfAttemptsrE   requiredTimeDelayNotExpiredr   downloadNotAcceptedrQ   uploadNotAcceptedro   transferSuspendedx   z(requestCorrectlyReceived-ResponsePendingr  0subFunctionNotSupportedInActiveDiagnosticSessiondataDecompressionFaileddataDecryptionFailedEcuNotRespondingEcuAddressUnknown)rv     r     r   r   negativeResponseCodec                 h    | j         |j        k    o"| j        dk    pt          j        d         d         S )Nr  r   r   )r   r   r  r   contribsr   s     r   r   zKWP_NR.answers  s<    $5 G&$. F]5!"DE	Gr   N)r   r   r   negativeResponseCodesr   r   r   r   r   r   r   r   r   r   r   r  r    sc        o 	# 	5	
 	! 	9 	" 	! 	< 	l 	& 	+ 	# 	! 	!  	8!" 	@#$ ($ !+  . D~~0!S\BBCC,a1FGGKG G G G Gr   r  r   c                   J    e Zd Z e             ed          z  dfdZd ZdS )KWP_TesterPresentSenderr   )r   c                 4    t          j        | |||           dS )z Thread that sends TesterPresent packets periodically

        :param sock: socket where packet is sent periodically
        :param pkt: packet to send
        :param interval: interval between two packets
        N)r   __init__)r   sockr   intervals       r   r  z KWP_TesterPresentSender.__init__  s!     	%dD#x@@@@@r   c                 J   | j                                         s| j        D ]f}| j                            |dd           | j                             | j                   | j                                         s| j        j        r ng| j                                         d S d S )Ng333333?F)timeoutverbose)r  )_stoppedis_set_pkts_socketsr1wait	_intervalclosed)r   ps     r   runzKWP_TesterPresentSender.run  s    -&&(( 	Z    C ???""4>":::='')) T\-@ E	 -&&(( 	 	 	 	 	r   N)r   r   r   r   r   r  r  r   r   r   r  r    sY        !$)F)F)F!F	A 	A 	A 	A    r   r  )Xr   scapy.fieldsr   r   r   r   r   r   r	   r
   r   r   r   scapy.packetr   r   r   scapy.configr   scapy.errorr   scapy.utilsr   scapy.plistr   scapy.contrib.isotpr   typingr   r   r  KeyErrorinfor   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r
  r   r$  r4  r9  r;  r>  rB  rF  rJ  rO  rY  r\  r^  ra  rc  rf  rh  rk  rm  rq  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   <module>r     s/                             8 7 7 7 7 7 7 7 7 7       # # # # # # , , , , , , ' ' ' ' ' ' % % % % % %       	G}U>?  G G GK 3 4 4 4
 ?FDM%GQ: Q: Q: Q: Q:% Q: Q: Q:j
 
 
 
 
f 
 
 
 C$ ' ' ' '
> 
> 
> 
> 
> 
> 
> 
> CD ) ) ) )    V    C & & & &) ) ) ) )v ) ) ) C4 ( ( ( (    V    C & & & &4 4 4 4 4v 4 4 4 C4 ( ( ( (       $ CT * * * *> > > > >6 > > > Ct , , , ,    v    C4 ( ( ( (+ + + + + + + + CT * * * *    v    C4 ( ( ( (+ + + + + + + + CT * * * *    V    C & & & &) ) ) ) )v ) ) ) C4 ( ( ( (       2 CD ) ) ) ), , , , ,& , , , Cd + + + +    f   > C$ ' ' ' '2 2 2 2 2 2 2 2 CD ) ) ) )       * CD ) ) ) )	J 	J 	J 	J 	J& 	J 	J 	J Cd + + + +        CD ) ) ) )	J 	J 	J 	J 	J& 	J 	J 	J Cd + + + +    v    C4 ( ( ( (	4 	4 	4 	4 	4 	4 	4 	4 CT * * * *    v    C4 ( ( ( (+ + + + + + + + CT * * * *
 
 
 
 
v 
 
 
 C4 ( ( ( (	\ 	\ 	\ 	\ 	\ 	\ 	\ 	\ CT * * * *    v    C4 ( ( ( (	4 	4 	4 	4 	4 	4 	4 	4 CT * * * *    v    C4 ( ( ( (	6 	6 	6 	6 	6 	6 	6 	6 CT * * * *    f    C$ ' ' ' '
0 
0 
0 
0 
0 
0 
0 
0 CD ) ) ) )        CT * * * *	- 	- 	- 	- 	-6 	- 	- 	- Ct , , , ,       , CD ) ) ) )
: 
: 
: 
: 
:& 
: 
: 
: Cd + + + +       & CD ) ) ) )
L 
L 
L 
L 
L& 
L 
L 
L Cd + + + +        CT * * * *
L 
L 
L 
L 
L6 
L 
L 
L Ct , , , ,        CT * * * *
L 
L 
L 
L 
L6 
L 
L 
L Ct , , , ,    V    C & & & &) ) ) ) )v ) ) ) C4 ( ( ( (    V    C & & & &) ) ) ) )v ) ) ) C4 ( ( ( (    V    C & & & &
H 
H 
H 
H 
Hv 
H 
H 
H C4 ( ( ( (    f    C$ ' ' ' '* * * * * * * * CD ) ) ) )#G #G #G #G #GV #G #G #GL C & & & &    2     s   A% %!B	B	