diff options
author | Oliver Smith <osmith@sysmocom.de> | 2020-02-24 11:36:31 +0100 |
---|---|---|
committer | Oliver Smith <osmith@sysmocom.de> | 2020-02-24 12:28:50 +0100 |
commit | 2259cb9fd75bd98a31ec8cf2d76b5a50ee257605 (patch) | |
tree | a2f500ad68b741c38a3e58adec2171619a2926fb | |
parent | 0f7c8bb3ccb0136a5e378c821b1ccea34ca0e350 (diff) |
IMSIPseudo: implement "Show IMSI" (WIP)
This will need some adjustments before it actually works.
-rwxr-xr-x | sim-applet/src/org/osmocom/IMSIPseudo/IMSIPseudo.java | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/sim-applet/src/org/osmocom/IMSIPseudo/IMSIPseudo.java b/sim-applet/src/org/osmocom/IMSIPseudo/IMSIPseudo.java index 63f840f..3b95f12 100755 --- a/sim-applet/src/org/osmocom/IMSIPseudo/IMSIPseudo.java +++ b/sim-applet/src/org/osmocom/IMSIPseudo/IMSIPseudo.java @@ -9,6 +9,7 @@ public class IMSIPseudo extends Applet implements ToolkitInterface, ToolkitConst // which has a limited number of write cycles. private byte STKServicesMenuId; + private SIMView gsmFile; static byte[] LUCounter = new byte[] { '0', 'x', ' ', 'L', 'U' }; /* Main menu */ @@ -27,6 +28,8 @@ public class IMSIPseudo extends Applet implements ToolkitInterface, ToolkitConst private Object[] itemListChangeIMSI = {changeIMSI, setDigit1, setDigit2}; private IMSIPseudo() { + gsmFile = SIMSystem.getTheSIMView(); + /* Register menu and trigger on location updates */ ToolkitRegistry reg = ToolkitRegistry.getEntry(); STKServicesMenuId = reg.initMenuEntry(title, (short)0, (short)title.length, PRO_CMD_SELECT_ITEM, false, @@ -88,6 +91,29 @@ public class IMSIPseudo extends Applet implements ToolkitInterface, ToolkitConst return; } + private void showIMSI() { + /* 3GPP TS 31.102 4.2.2: IMSI */ + byte[] IMSI = new byte[9]; + byte[] msg = {'C', 'u', 'r', 'r', 'e', 'n', 't', ' ', 'I', 'M', 'S', 'I', ':', ' ', + '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_'}; + + gsmFile.select((short) SIMView.FID_DF_GSM); + gsmFile.select((short) SIMView.FID_EF_IMSI); + gsmFile.readBinary((short)0, IMSI, (short)0, (short)9); + + for (byte i = (byte)0; i < (byte)15; i++) { + byte msg_i = (byte)(14 + i); + if (i >= IMSI[0]) { + msg[msg_i] = ' '; + } else if (i % (byte)2 == (byte)0) { + msg[msg_i] = (byte)('0' + (IMSI[i / (byte)2] & 0x0f)); + } else { + msg[msg_i] = (byte)('0' + (IMSI[i / (byte)2] >>> 4)); + } + } + showMsg(msg); + } + private void handleMenuResponseMain() { ProactiveResponseHandler rspHdlr = ProactiveResponseHandler.getTheHandler(); @@ -96,7 +122,7 @@ public class IMSIPseudo extends Applet implements ToolkitInterface, ToolkitConst showMsg(LUCounter); break; case 2: /* Show IMSI */ - /* TODO */ + showIMSI(); break; case 3: /* Change IMSI */ showMenu(itemListChangeIMSI, (byte)3); |