|
1 | 1 | import io |
| 2 | +import logging |
2 | 3 | import os |
3 | 4 | import pathlib |
4 | 5 | import time |
|
7 | 8 | import asn1tools |
8 | 9 | from asn1tools.compiler import Specification |
9 | 10 |
|
| 11 | +logging.basicConfig(format='%(asctime)s %(message)s') |
| 12 | +LOG = logging.getLogger(__name__) |
| 13 | +LOG.setLevel(level=os.getenv('LOG_LEVEL', 'INFO').upper()) |
| 14 | + |
10 | 15 | FIELD_ERROR_MESSAGE = 'errorMessage' |
11 | 16 | FIELD_RESULT = 'result' |
12 | 17 | FIELD_TEST_FLAG = 'testFlag' |
@@ -163,7 +168,8 @@ def get_data(self) -> dict: |
163 | 168 | data[FIELD_APPLICATION_DATA_ENCODING] = self.application_data_encoding |
164 | 169 | self.add_optional_field_to_data(data, FIELD_TEST_FLAG, self.test_flag) |
165 | 170 | 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() |
167 | 173 |
|
168 | 174 | return data |
169 | 175 |
|
@@ -454,21 +460,35 @@ def encode_request(self, message: MessageV2) -> str: |
454 | 460 | return result.upper() |
455 | 461 |
|
456 | 462 | def decode_response(self, message: str, decoded_message: MessageV2) -> None: |
| 463 | + LOG.debug(f'Message length in bytes: {len(message[5:])/2}') |
457 | 464 | buffered_message_bytes = io.BytesIO(bytes.fromhex(message[5:])) |
458 | 465 |
|
459 | 466 | header = decoded_message.header |
460 | 467 | header_bytes = buffered_message_bytes.read(self.header_length) |
461 | 468 | header.protocol_version = int(header_bytes[0]) |
| 469 | + LOG.debug(f'Protocol version: {header.protocol_version}') |
462 | 470 | header.dispatcher_message_length = int(header_bytes[1]) |
| 471 | + LOG.debug(f'Dispatcher message length: {header.dispatcher_message_length}') |
463 | 472 | header.dispatcher_body_encoding = int(header_bytes[2]) |
464 | 473 |
|
465 | 474 | 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) |
466 | 486 |
|
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) |
468 | 488 | message_body_dict = self.asn1_tool_uper.decode('MPDispatcherBody', dispatcher_message_bytes) |
469 | 489 | message_body = decoded_message.body |
470 | 490 | message_body.init_from_dict(message_body_dict) |
471 | | - if( |
| 491 | + if ( |
472 | 492 | message_body.application_data_length > 0 |
473 | 493 | and decoded_message.application_data is not None |
474 | 494 | ): |
|
0 commit comments