aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOliver Smith <osmith@sysmocom.de>2020-02-24 11:36:31 +0100
committerOliver Smith <osmith@sysmocom.de>2020-02-24 12:28:50 +0100
commit2259cb9fd75bd98a31ec8cf2d76b5a50ee257605 (patch)
treea2f500ad68b741c38a3e58adec2171619a2926fb
parent0f7c8bb3ccb0136a5e378c821b1ccea34ca0e350 (diff)
IMSIPseudo: implement "Show IMSI" (WIP)
This will need some adjustments before it actually works.
-rwxr-xr-xsim-applet/src/org/osmocom/IMSIPseudo/IMSIPseudo.java28
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);