FreeCalypso > hg > fc-pcsc-tools
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]; |
