a
    kÄ#dÓ  ã                   @   sÌ  d dl Z d dlmZ d dlT d dlT d dlT d dlT d dlT d dlm	Z	m
Z
 d dlmZ d dlmZ d dlmZ zejd d	 r€W n* ey¬   e d
¡ d	diejd< Y n0 G dd„ deƒZe	eedd� e	eedd� e	eedd� e	eedd� e	eedd� e	eedd� e	eedd� e	eedd� e	eedd� e	eedd� e	eedd� e	ee dd� e	ee!dd� e	ee"dd� e	ee#dd� e	ee$dd� e	ee%dd� e	ee&dd� e	ee'd d� dS )!é    N)Úlog_automotive)Ú*)Úbind_layersÚ	NoPayload)Úconf)ÚXByteEnumField)ÚISOTPÚOBDz treat-response-pending-as-answerzÈSpecify "conf.contribs['OBD'] = {'treat-response-pending-as-answer': True}" to treat a negative response 'requestCorrectlyReceived-ResponsePending' as answer of a request. 
The default value is False.Fc                   @   s^   e Zd Z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ddeƒgZdd„ Zdd„ ZdS )r	   Z&CurrentPowertrainDiagnosticDataRequestZ PowertrainFreezeFrameDataRequestZ,EmissionRelatedDiagnosticTroubleCodesRequestZ'ClearResetDiagnosticTroubleCodesRequestZ(OxygenSensorMonitoringTestResultsRequestZ#OnBoardMonitoringTestResultsRequestZ3PendingEmissionRelatedDiagnosticTroubleCodesRequestZControlOperationRequestZVehicleInformationRequestZ&PermanentDiagnosticTroubleCodesRequestZ'CurrentPowertrainDiagnosticDataResponseZ!PowertrainFreezeFrameDataResponseZ-EmissionRelatedDiagnosticTroubleCodesResponseZ(ClearResetDiagnosticTroubleCodesResponseZ)OxygenSensorMonitoringTestResultsResponseZ$OnBoardMonitoringTestResultsResponseZ4PendingEmissionRelatedDiagnosticTroubleCodesResponseZControlOperationResponseZVehicleInformationResponseZ'PermanentDiagnosticTroubleCodesResponseZNegativeResponse)é   é   é   é   é   é   é   é   é	   é
   éA   éB   éC   éD   éE   éF   éG   éH   éI   éJ   é   zOn-board diagnosticsÚservicer   c                 C   s.   | j dkrt d| jd@ ¡S t d| j d@ ¡S )Nr   ÚBi¿ÿÿÿ)r   ÚstructÚpackZrequest_service_id)Úself© r$   úW/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/contrib/automotive/obd/obd.pyÚhashretA   s    
zOBD.hashretc                 C   sd   |j | j krdS | jdkr&| j |¡S | j|jd kr`t| jtƒsNt|jtƒrRdS | j |j¡S dS )NFr   é@   T)Ú	__class__r   ÚpayloadÚanswersÚ
isinstancer   )r#   Úotherr$   r$   r%   r*   F   s    

ÿzOBD.answersN)	Ú__name__Ú
__module__Ú__qualname__ZservicesÚnamer   Zfields_descr&   r*   r$   r$   r$   r%   r	   #   s6   ë
ÿr
   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )(r!   Zscapy.contrib.automotiver   Z%scapy.contrib.automotive.obd.iid.iidsZ%scapy.contrib.automotive.obd.mid.midsZ%scapy.contrib.automotive.obd.pid.pidsZ%scapy.contrib.automotive.obd.tid.tidsZ%scapy.contrib.automotive.obd.servicesZscapy.packetr   r   Zscapy.configr   Zscapy.fieldsr   Zscapy.contrib.isotpr   ZcontribsÚKeyErrorÚinfor	   ZOBD_S01ZOBD_S02ZOBD_S03ZOBD_S04ZOBD_S06ZOBD_S07ZOBD_S08ZOBD_S09ZOBD_S0AZ
OBD_S01_PRZ
OBD_S02_PRZ
OBD_S03_PRZ
OBD_S04_PRZ
OBD_S06_PRZ
OBD_S07_PRZ
OBD_S08_PRZ
OBD_S09_PRZ
OBD_S0A_PRZOBD_NRr$   r$   r$   r%   Ú<module>
   sH   
3