jolly submitted this 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 (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(-)
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.