aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xpySim-read.py2
-rw-r--r--pySim/cards.py4
-rw-r--r--pySim/utils.py21
3 files changed, 14 insertions, 13 deletions
diff --git a/pySim-read.py b/pySim-read.py
index 2be34bd..c8b1a5d 100755
--- a/pySim-read.py
+++ b/pySim-read.py
@@ -35,7 +35,7 @@ from pySim.ts_31_103 import EF_IST_map
from pySim.commands import SimCardCommands
from pySim.cards import card_detect, Card
from pySim.utils import h2b, swap_nibbles, rpad, dec_imsi, dec_iccid, dec_msisdn
-from pySim.utils import format_xplmn_w_act, dec_spn, dec_st, init_reader, dec_epdgid
+from pySim.utils import format_xplmn_w_act, dec_spn, dec_st, init_reader, dec_addr_tlv
from pySim.utils import h2s, format_ePDGSelection
def parse_options():
diff --git a/pySim/cards.py b/pySim/cards.py
index 1036717..1662fc5 100644
--- a/pySim/cards.py
+++ b/pySim/cards.py
@@ -267,12 +267,12 @@ class UsimCard(Card):
def read_epdgid(self):
(res, sw) = self._scc.read_binary(EF_USIM_ADF_map['ePDGId'])
if sw == '9000':
- return (dec_epdgid(res), sw)
+ return (dec_addr_tlv(res), sw)
else:
return (None, sw)
def update_epdgid(self, epdgid):
- epdgid_tlv = enc_epdgid(epdgid)
+ epdgid_tlv = enc_addr_tlv(epdgid)
data, sw = self._scc.update_binary(
EF_USIM_ADF_map['ePDGId'], epdgid_tlv)
return sw
diff --git a/pySim/utils.py b/pySim/utils.py
index cdb2926..38cc580 100644
--- a/pySim/utils.py
+++ b/pySim/utils.py
@@ -500,19 +500,19 @@ def enc_st(st, service, state=1):
return s
-def dec_epdgid(hexstr):
+def dec_addr_tlv(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.
+ Decode hex string to get EF.P-CSCF Address or EF.ePDGId or EF.ePDGIdEm.
+ See 3GPP TS 31.102 version 13.4.0 Release 13, section 4.2.8, 4.2.102 and 4.2.104.
"""
# Convert from hex str to int bytes list
- epdgid_bytes = h2i(hexstr)
+ addr_tlv_bytes = h2i(hexstr)
s = ""
# Get list of tuples containing parsed TLVs
- tlvs = TLV_parser(epdgid_bytes)
+ tlvs = TLV_parser(addr_tlv_bytes)
for tlv in tlvs:
# tlv = (T, L, [V])
@@ -531,6 +531,7 @@ def dec_epdgid(hexstr):
# First byte in the value has the address type
addr_type = tlv[2][0]
# TODO: Support parsing of IPv4 and IPv6
+ # Address Type: 0x00 (FQDN), 0x01 (IPv4), 0x02 (IPv6), other (Reserved)
if addr_type == 0x00: #FQDN
# Skip address tye byte i.e. first byte in value list
content = tlv[2][1:]
@@ -538,20 +539,20 @@ def dec_epdgid(hexstr):
return s
-def enc_epdgid(epdg_addr, addr_type='00'):
+def enc_addr_tlv(addr, addr_type='00'):
"""
- Encode ePDG Id so it can be stored to EF.ePDGId or EF.ePDGIdEm.
- See 3GPP TS 31.102 version 13.4.0 Release 13, section 4.2.102 and 4.2.104.
+ Encode address TLV object used in EF.P-CSCF Address, EF.ePDGId and EF.ePDGIdEm.
+ See 3GPP TS 31.102 version 13.4.0 Release 13, section 4.2.8, 4.2.102 and 4.2.104.
Default values:
- - addr_type: 00 - FQDN format of ePDG Address
+ - addr_type: 00 - FQDN format of Address
"""
s = ""
# TODO: Encoding of IPv4 and IPv6 address
if addr_type == '00':
- hex_str = s2h(epdg_addr)
+ hex_str = s2h(addr)
s += '80' + ('%02x' % ((len(hex_str)//2)+1)) + '00' + hex_str
return s