Skip to content

Commit c41ab4e

Browse files
author
Thomas Salm
committed
Validation of the dispatcher message bytes value.
1 parent 3e2ec4d commit c41ab4e

File tree

2 files changed

+23
-4
lines changed

2 files changed

+23
-4
lines changed

src/saic_ismart_client/common_model.py

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import io
2+
import logging
23
import os
34
import pathlib
45
import time
@@ -7,6 +8,10 @@
78
import asn1tools
89
from asn1tools.compiler import Specification
910

11+
logging.basicConfig(format='%(asctime)s %(message)s')
12+
LOG = logging.getLogger(__name__)
13+
LOG.setLevel(level=os.getenv('LOG_LEVEL', 'INFO').upper())
14+
1015
FIELD_ERROR_MESSAGE = 'errorMessage'
1116
FIELD_RESULT = 'result'
1217
FIELD_TEST_FLAG = 'testFlag'
@@ -163,7 +168,8 @@ def get_data(self) -> dict:
163168
data[FIELD_APPLICATION_DATA_ENCODING] = self.application_data_encoding
164169
self.add_optional_field_to_data(data, FIELD_TEST_FLAG, self.test_flag)
165170
self.add_optional_field_to_data(data, FIELD_RESULT, self.result)
166-
self.add_optional_field_to_data(data, FIELD_ERROR_MESSAGE, self.error_message)
171+
if self.error_message:
172+
data[FIELD_ERROR_MESSAGE] = self.error_message.decode()
167173

168174
return data
169175

@@ -454,21 +460,35 @@ def encode_request(self, message: MessageV2) -> str:
454460
return result.upper()
455461

456462
def decode_response(self, message: str, decoded_message: MessageV2) -> None:
463+
LOG.debug(f'Message length in bytes: {len(message[5:])/2}')
457464
buffered_message_bytes = io.BytesIO(bytes.fromhex(message[5:]))
458465

459466
header = decoded_message.header
460467
header_bytes = buffered_message_bytes.read(self.header_length)
461468
header.protocol_version = int(header_bytes[0])
469+
LOG.debug(f'Protocol version: {header.protocol_version}')
462470
header.dispatcher_message_length = int(header_bytes[1])
471+
LOG.debug(f'Dispatcher message length: {header.dispatcher_message_length}')
463472
header.dispatcher_body_encoding = int(header_bytes[2])
464473

465474
decoded_message.reserved = buffered_message_bytes.read(self.reserved_size)
475+
netto_message_size = len(message[5:])/2 - self.header_length - self.reserved_size
476+
LOG.debug(f'Message size without header and reserved bytes: {netto_message_size}')
477+
dispatcher_message_size = header.dispatcher_message_length - self.header_length
478+
LOG.debug(f'Dispatcher message bytes: {dispatcher_message_size}')
479+
480+
if int(netto_message_size) == dispatcher_message_size:
481+
dispatcher_message_bytes_to_read = dispatcher_message_size
482+
else:
483+
LOG.debug(f'Calculated message size {int(netto_message_size)} does not match '
484+
+ f'with header size information {dispatcher_message_size}. Using calculated size.')
485+
dispatcher_message_bytes_to_read = int(netto_message_size)
466486

467-
dispatcher_message_bytes = buffered_message_bytes.read(header.dispatcher_message_length - self.header_length)
487+
dispatcher_message_bytes = buffered_message_bytes.read(dispatcher_message_bytes_to_read)
468488
message_body_dict = self.asn1_tool_uper.decode('MPDispatcherBody', dispatcher_message_bytes)
469489
message_body = decoded_message.body
470490
message_body.init_from_dict(message_body_dict)
471-
if(
491+
if (
472492
message_body.application_data_length > 0
473493
and decoded_message.application_data is not None
474494
):

src/saic_ismart_client/saic_api.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
from saic_ismart_client.ota_v3_0.data_model import OtaChrgCtrlReq, OtaChrgCtrlStsResp, OtaChrgHeatReq, \
2424
OtaChrgHeatResp, OtaChrgMangDataResp, OtaChrgRsvanReq, OtaChrgSetngReq, OtaChrgSetngResp, OtaChrgRsvanResp
2525
from saic_ismart_client.rest_v2.api import SaicRestV2Api
26-
from saic_ismart_client.rest_v2.model import TimeZoneEntity
2726

2827
UID_INIT = '0000000000000000000000000000000000000000000000000#'
2928
AVG_SMS_DELIVERY_TIME = 15

0 commit comments

Comments
 (0)