Change in pysim[master]: utils: split string formatting from dec_addr_tlv

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

laforge gerrit-no-reply at lists.osmocom.org
Sun May 23 10:05:51 UTC 2021


laforge has submitted this change. ( https://gerrit.osmocom.org/c/pysim/+/24010 )

Change subject: utils: split string formatting from dec_addr_tlv
......................................................................

utils: split string formatting from dec_addr_tlv

The function dec_addr_tlv() takes an encoded FQDN or IPv4 address and
fromats it into a human readable string that contains the human readable
form and the encoded hex form. Unfortunately this limits the usecase of
dec_addr_tlv. Lets split the string generation into a separate function
so that we can use dec_addr_tlv universally

Change-Id: Id017b0786089adac4d6c5be688742eaa9699e529
Related: OS#4963
---
M pySim/cards.py
M pySim/utils.py
2 files changed, 36 insertions(+), 7 deletions(-)

Approvals:
  laforge: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/pySim/cards.py b/pySim/cards.py
index 7744c7a..c41f343 100644
--- a/pySim/cards.py
+++ b/pySim/cards.py
@@ -32,6 +32,24 @@
 from smartcard.util import toBytes
 from pytlv.TLV import *
 
+def format_addr(addr:str, addr_type:str) -> str:
+	"""
+	helper function to format an FQDN (addr_type = '00') or IPv4
+	(addr_type = '01') address string into a printable string that
+	contains the hexadecimal representation and the original address
+	string (addr)
+	"""
+	res = ""
+	if addr_type == '00': #FQDN
+		res += "\t%s # %s\n" % (s2h(addr), addr)
+	elif addr_type == '01': #IPv4
+		octets = addr.split(".")
+		addr_hex = ""
+		for o in octets:
+			addr_hex += ("%02x" % int(o))
+		res += "\t%s # %s\n" % (addr_hex, addr)
+	return res
+
 class Card(object):
 
 	name = 'SIM'
@@ -316,7 +334,12 @@
 	def read_epdgid(self):
 		(res, sw) = self._scc.read_binary(EF_USIM_ADF_map['ePDGId'])
 		if sw == '9000':
-			return (dec_addr_tlv(res), sw)
+			try:
+				addr, addr_type = dec_addr_tlv(res)
+			except:
+				addr = None
+				addr_type = None
+			return (format_addr(addr, addr_type), sw)
 		else:
 			return (None, sw)
 
@@ -378,7 +401,12 @@
 		for i in range(0, rec_cnt):
 			(res, sw) = self._scc.read_record(EF_ISIM_ADF_map['PCSCF'], i + 1)
 			if sw == '9000':
-				content = dec_addr_tlv(res)
+				try:
+					addr, addr_type = dec_addr_tlv(res)
+				except:
+					addr = None
+					addr_type = None
+				content = format_addr(addr, addr_type)
 				pcscf_recs += "%s" % (len(content) and content or '\tNot available\n')
 			else:
 				pcscf_recs += "\tP-CSCF: Can't read, response code = %s\n" % (sw)
diff --git a/pySim/utils.py b/pySim/utils.py
index 3a8ddac..ff55642 100644
--- a/pySim/utils.py
+++ b/pySim/utils.py
@@ -692,8 +692,6 @@
 	# Convert from hex str to int bytes list
 	addr_tlv_bytes = h2i(hexstr)
 
-	s = ""
-
 	# Get list of tuples containing parsed TLVs
 	tlvs = TLV_parser(addr_tlv_bytes)
 
@@ -718,15 +716,18 @@
 		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 (i2s(content), '00')
+
 		elif addr_type == 0x01: #IPv4
 			# Skip address tye byte i.e. first byte in value list
 			# Skip the unused byte in Octect 4 after address type byte as per 3GPP TS 31.102
 			ipv4 = tlv[2][2:]
 			content = '.'.join(str(x) for x in ipv4)
-			s += "\t%s # %s\n" % (i2h(ipv4), content)
+			return (content, '01')
+		else:
+			raise ValueError("Invalid address type")
 
-	return s
+	return (None, None)
 
 def enc_addr_tlv(addr, addr_type='00'):
 	"""

-- 
To view, visit https://gerrit.osmocom.org/c/pysim/+/24010
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: Id017b0786089adac4d6c5be688742eaa9699e529
Gerrit-Change-Number: 24010
Gerrit-PatchSet: 8
Gerrit-Owner: dexter <pmaier at sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge at osmocom.org>
Gerrit-Reviewer: pespin <pespin at sysmocom.de>
Gerrit-CC: fixeria <vyanitskiy at sysmocom.de>
Gerrit-MessageType: merged
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20210523/17f2aa48/attachment.htm>


More information about the gerrit-log mailing list