jolly has uploaded this change for review.

View Change

Corrected decoding of MSISDN IE and IMEI IE

1 2 3 4 5 6 7 8
+-------------------------------+
| MSISDN IE type |Res| octet 1
+-------------------------------+
| Length of IE content | octet 2
+-------------------------------+
| Length of BCD content | octet 3
+-------------------------------+
| Digit 1 | Digit 2 | octet 4..n
| .... | |
+-------------------------------+

The length of the BCD content specifies how many subsequent octets
contain BCD data, but it does not indicate the number of digits.
This length must be less than the total length of the IE content.
Any octets following the BCD content shall be ignored.

Related: OS#6797
Change-Id: Idd2bee3d8f662d028001392cfd0332a265fbc91a
---
M src/osmocom/gsup/message.py
1 file changed, 2 insertions(+), 3 deletions(-)

git pull ssh://gerrit.osmocom.org:29418/python/pyosmocom refs/changes/23/40423/1
diff --git a/src/osmocom/gsup/message.py b/src/osmocom/gsup/message.py
index 8ab7881..e48cd54 100644
--- a/src/osmocom/gsup/message.py
+++ b/src/osmocom/gsup/message.py
@@ -133,8 +133,7 @@
_construct = None # empty

class MSISDN(GSUP_TLV_IE, tag=0x08):
- # TODO: do all existing implementations use ton/npi?
- _construct = Struct('ton_npi'/TonNpi, 'digits'/PaddedBcdAdapter(GreedyBytes))
+ _construct = Struct('bcd_len'/Byte, 'digits'/PaddedBcdAdapter(Bytes(this.bcd_len)))

class HlrNumber(GSUP_TLV_IE, tag=0x09):
_construct = Struct('ton_npi'/TonNpi, 'digits'/PaddedBcdAdapter(GreedyBytes))
@@ -185,7 +184,7 @@
_construct = Enum(Int8ub, ms_present=1, memory_available=2)

class IMEI(GSUP_TLV_IE, tag=0x50):
- _construct = PaddedBcdAdapter(GreedyBytes)
+ _construct = Struct('bcd_len'/Byte, 'digits'/PaddedBcdAdapter(Bytes(this.bcd_len)))

class ImeiCheckResult(GSUP_TLV_IE, tag=0x51):
_construct = Enum(Int8ub, ack=0, nack=1)

To view, visit change 40423. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-MessageType: newchange
Gerrit-Project: python/pyosmocom
Gerrit-Branch: master
Gerrit-Change-Id: Idd2bee3d8f662d028001392cfd0332a265fbc91a
Gerrit-Change-Number: 40423
Gerrit-PatchSet: 1
Gerrit-Owner: jolly <andreas@eversberg.eu>