comparison simtool/hlread.c @ 184:8d073ff62c48

fc-simtool: imsi command does higher-level parsing, the old version is now imsi-raw
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 06 Mar 2021 05:44:17 +0000
parents 2aa92dfcb4b5
children 43b57865fdb5
comparison
equal deleted inserted replaced
183:2545dd27ca38 184:8d073ff62c48
38 fprintf(outf, "%s\n", buf); 38 fprintf(outf, "%s\n", buf);
39 return(0); 39 return(0);
40 } 40 }
41 41
42 cmd_imsi(argc, argv, outf) 42 cmd_imsi(argc, argv, outf)
43 char **argv;
44 FILE *outf;
45 {
46 int rc;
47 char buf[17], *endp;
48
49 rc = select_op(DF_GSM);
50 if (rc < 0)
51 return(rc);
52 rc = select_op(EF_IMSI);
53 if (rc < 0)
54 return(rc);
55 rc = parse_ef_select_response();
56 if (rc < 0)
57 return(rc);
58 if (curfile_structure != 0x00 || curfile_total_size != 9) {
59 fprintf(stderr, "error: expected transparent EF of 9 bytes\n");
60 return(-1);
61 }
62 rc = readbin_op(0, 9);
63 if (rc < 0)
64 return(rc);
65 if (sim_resp_data[0] < 1 || sim_resp_data[0] > 8) {
66 malformed: fprintf(stderr, "error: malformed EF_IMSI record\n");
67 return(-1);
68 }
69 decode_reversed_nibbles(sim_resp_data + 1, sim_resp_data[0], buf);
70 endp = buf + (sim_resp_data[0] << 1);
71 switch (buf[0]) {
72 case '1':
73 if (sim_resp_data[0] == 1)
74 goto malformed;
75 *--endp = '\0';
76 break;
77 case '9':
78 *endp = '\0';
79 break;
80 default:
81 goto malformed;
82 }
83 fprintf(outf, "%s\n", buf + 1);
84 return(0);
85 }
86
87 cmd_imsi_raw(argc, argv, outf)
43 char **argv; 88 char **argv;
44 FILE *outf; 89 FILE *outf;
45 { 90 {
46 int rc; 91 int rc;
47 char buf[17]; 92 char buf[17];