From d572edef1e96539b79df8675a0adfbb1816099bb Mon Sep 17 00:00:00 2001 From: Supreeth Herle Date: Sun, 22 Mar 2020 09:55:04 +0100 Subject: [PATCH] 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 --- pySim/utils.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/pySim/utils.py b/pySim/utils.py index ee4d2f39..dbc73378 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