aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSupreeth Herle <herlesupreeth@gmail.com>2020-03-22 09:55:04 +0100
committerSupreeth Herle <herlesupreeth@gmail.com>2020-05-11 10:53:18 +0200
commitd572edef1e96539b79df8675a0adfbb1816099bb (patch)
tree1ad313d0f94b366fe923ffe8978f8d9141b7cb3d
parent7d77d2d5d01574d242712ad1aa8b8e4ef95fe77b (diff)
utils.py: Add helper method to parse ePDG Identifier from hex string
The hex string consists of contains zero or more ePDG identifier data objects. Each ePDG Identifier TLV data object consists of tag value of '80', length, address type, identifier. TS 31.102 version 13.4.0 Release 13. The same parsing method applies for both EF.ePDGId and EF.ePDGIdEm Change-Id: I96fb129d178cfd7ec037989526da77899ae8d344
-rw-r--r--pySim/utils.py34
1 files changed, 34 insertions, 0 deletions
diff --git a/pySim/utils.py b/pySim/utils.py
index ee4d2f3..dbc7337 100644
--- a/pySim/utils.py
+++ b/pySim/utils.py
@@ -402,3 +402,37 @@ def TLV_parser(bytelist):
else:
bytelist = bytelist[ L+2 : ]
return ret
+
+def dec_epdgid(hexstr):
+ """
+ Decode ePDG Id to get EF.ePDGId or EF.ePDGIdEm.
+ See 3GPP TS 31.102 version 13.4.0 Release 13, section 4.2.102 and 4.2.104.
+ """
+
+ # Convert from hex str to int bytes list
+ epdgid_bytes = h2i(hexstr)
+
+ s = ""
+
+ # Get list of tuples containing parsed TLVs
+ tlvs = TLV_parser(epdgid_bytes)
+
+ for tlv in tlvs:
+ # tlv = (T, L, [V])
+ # T = Tag
+ # L = Length
+ # [V] = List of value
+
+ # Invalid Tag value scenario
+ if tlv[0] != 0x80:
+ continue
+
+ # First byte in the value has the address type
+ addr_type = tlv[2][0]
+ # TODO: Support parsing of IPv4 and IPv6
+ if addr_type == 0x00: #FQDN
+ # Skip address tye byte i.e. first byte in value list
+ content = tlv[2][1:]
+ s += "\t%s # %s\n" % (i2h(content), i2s(content))
+
+ return s