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/.
dexter gerrit-no-reply at lists.osmocom.orgdexter has uploaded this change for review. ( 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, 21 insertions(+), 7 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/10/24010/1
diff --git a/pySim/cards.py b/pySim/cards.py
index 719bf0c..71cc3b8 100644
--- a/pySim/cards.py
+++ b/pySim/cards.py
@@ -29,6 +29,19 @@
from smartcard.util import toBytes
from pytlv.TLV import *
+def format_addr(addr, addr_type='00'):
+ """helper function to format an FQDN or IPv4 address into a printable string"""
+ 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):
def __init__(self, scc):
@@ -299,7 +312,8 @@
def read_epdgid(self):
(res, sw) = self._scc.read_binary(EF_USIM_ADF_map['ePDGId'])
if sw == '9000':
- return (dec_addr_tlv(res), sw)
+ addr, addr_type = dec_addr_tlv(res)
+ return (format_addr(addr, addr_type), sw)
else:
return (None, sw)
@@ -358,7 +372,8 @@
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)
+ addr, addr_type = dec_addr_tlv(res)
+ 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 bcfa2ac..b788826 100644
--- a/pySim/utils.py
+++ b/pySim/utils.py
@@ -606,8 +606,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)
@@ -632,15 +630,16 @@
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')
- 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: 1
Gerrit-Owner: dexter <pmaier at sysmocom.de>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20210430/f1c594b3/attachment.htm>