comparison simtool/miscadm.c @ 181:63b640562e21

simtool/miscadm.c: code refactoring in preparation for adding shorthand ICCID and IMSI write commands
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 06 Mar 2021 04:51:56 +0000
parents 105aa3d1a494
children f4edccd4b583
comparison
equal deleted inserted replaced
180:ba8c35ecf796 181:63b640562e21
7 #include <sys/types.h> 7 #include <sys/types.h>
8 #include <stdio.h> 8 #include <stdio.h>
9 #include "curfile.h" 9 #include "curfile.h"
10 #include "file_id.h" 10 #include "file_id.h"
11 11
12 cmd_write_iccid(argc, argv) 12 static
13 char **argv; 13 write_iccid_bin(binrec)
14 u_char *binrec;
14 { 15 {
15 int rc; 16 int rc;
16 u_char nibbles[20], binrec[10];
17 17
18 rc = parse_decimal_string_arg(argv[1], nibbles, 20);
19 if (rc < 0)
20 return(rc);
21 pack_reversed_nibbles(nibbles, binrec, 10);
22 rc = select_op(FILEID_MF); 18 rc = select_op(FILEID_MF);
23 if (rc < 0) 19 if (rc < 0)
24 return(rc); 20 return(rc);
25 rc = select_op(EF_ICCID); 21 rc = select_op(EF_ICCID);
26 if (rc < 0) 22 if (rc < 0)
32 fprintf(stderr, 28 fprintf(stderr,
33 "error: EF_ICCID is not a transparent EF of 10 bytes\n"); 29 "error: EF_ICCID is not a transparent EF of 10 bytes\n");
34 return(-1); 30 return(-1);
35 } 31 }
36 return update_bin_op(0, binrec, 10); 32 return update_bin_op(0, binrec, 10);
33 }
34
35 cmd_write_iccid(argc, argv)
36 char **argv;
37 {
38 int rc;
39 u_char nibbles[20], binrec[10];
40
41 rc = parse_decimal_string_arg(argv[1], nibbles, 20);
42 if (rc < 0)
43 return(rc);
44 pack_reversed_nibbles(nibbles, binrec, 10);
45 return write_iccid_bin(binrec);
46 }
47
48 static
49 write_imsi_bin(binrec)
50 u_char *binrec;
51 {
52 int rc;
53
54 rc = select_op(DF_GSM);
55 if (rc < 0)
56 return(rc);
57 rc = select_op(EF_IMSI);
58 if (rc < 0)
59 return(rc);
60 rc = parse_ef_select_response();
61 if (rc < 0)
62 return(rc);
63 if (curfile_structure != 0x00 || curfile_total_size != 9) {
64 fprintf(stderr,
65 "error: EF_IMSI is not a transparent EF of 9 bytes\n");
66 return(-1);
67 }
68 return update_bin_op(0, binrec, 9);
37 } 69 }
38 70
39 cmd_write_imsi(argc, argv) 71 cmd_write_imsi(argc, argv)
40 char **argv; 72 char **argv;
41 { 73 {
51 nibbles[0] = 9; 83 nibbles[0] = 9;
52 else 84 else
53 nibbles[0] = 1; 85 nibbles[0] = 1;
54 binrec[0] = (ndig + 2) >> 1; 86 binrec[0] = (ndig + 2) >> 1;
55 pack_reversed_nibbles(nibbles, binrec + 1, 8); 87 pack_reversed_nibbles(nibbles, binrec + 1, 8);
56 rc = select_op(DF_GSM); 88 return write_imsi_bin(binrec);
57 if (rc < 0)
58 return(rc);
59 rc = select_op(EF_IMSI);
60 if (rc < 0)
61 return(rc);
62 rc = parse_ef_select_response();
63 if (rc < 0)
64 return(rc);
65 if (curfile_structure != 0x00 || curfile_total_size != 9) {
66 fprintf(stderr,
67 "error: EF_IMSI is not a transparent EF of 9 bytes\n");
68 return(-1);
69 }
70 return update_bin_op(0, binrec, 9);
71 } 89 }