FreeCalypso > hg > freecalypso-hwlab
comparison simtool/dispatch.c @ 124:6c4567dd8946
fc-simtool: add non-interactive one-shot command (or script) mode
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 28 Jan 2021 18:56:34 +0000 |
parents | b391204d3cd5 |
children | 141489d31667 |
comparison
equal
deleted
inserted
replaced
123:b391204d3cd5 | 124:6c4567dd8946 |
---|---|
1 /* | 1 /* |
2 * This module implements the command dispatch for fc-simtool | 2 * This module implements the command dispatch for fc-simtool |
3 */ | 3 */ |
4 | 4 |
5 #include <sys/types.h> | |
6 #include <ctype.h> | 5 #include <ctype.h> |
7 #include <stdio.h> | 6 #include <stdio.h> |
8 #include <string.h> | 7 #include <string.h> |
9 #include <strings.h> | 8 #include <strings.h> |
10 #include <stdlib.h> | 9 #include <stdlib.h> |
11 #include <pcsclite.h> | |
12 #include <winscard.h> | |
13 #include "globals.h" | |
14 | 10 |
15 extern int cmd_change_chv(); | 11 extern int cmd_change_chv(); |
16 extern int cmd_disable_chv(); | 12 extern int cmd_disable_chv(); |
17 extern int cmd_enable_chv(); | 13 extern int cmd_enable_chv(); |
18 extern int cmd_exec(); | 14 extern int cmd_exec(); |
41 extern int cmd_update_bin_imm(); | 37 extern int cmd_update_bin_imm(); |
42 extern int cmd_update_rec(); | 38 extern int cmd_update_rec(); |
43 extern int cmd_verify_chv(); | 39 extern int cmd_verify_chv(); |
44 | 40 |
45 extern int display_sim_resp_in_hex(); | 41 extern int display_sim_resp_in_hex(); |
46 | 42 extern int good_exit(); |
47 cmd_exit() | |
48 { | |
49 SCardDisconnect(hCard, SCARD_UNPOWER_CARD); | |
50 SCardReleaseContext(hContext); | |
51 exit(0); | |
52 } | |
53 | 43 |
54 static struct cmdtab { | 44 static struct cmdtab { |
55 char *cmd; | 45 char *cmd; |
56 int minargs; | 46 int minargs; |
57 int maxargs; | 47 int maxargs; |
64 {"disable-chv", 1, 1, cmd_disable_chv}, | 54 {"disable-chv", 1, 1, cmd_disable_chv}, |
65 {"disable-pin", 1, 1, cmd_disable_chv}, | 55 {"disable-pin", 1, 1, cmd_disable_chv}, |
66 {"enable-chv", 1, 1, cmd_enable_chv}, | 56 {"enable-chv", 1, 1, cmd_enable_chv}, |
67 {"enable-pin", 1, 1, cmd_enable_chv}, | 57 {"enable-pin", 1, 1, cmd_enable_chv}, |
68 {"exec", 1, 1, cmd_exec}, | 58 {"exec", 1, 1, cmd_exec}, |
69 {"exit", 0, 0, cmd_exit}, | 59 {"exit", 0, 0, good_exit}, |
70 {"fix-sysmo-msisdn", 0, 0, cmd_fix_sysmo_msisdn}, | 60 {"fix-sysmo-msisdn", 0, 0, cmd_fix_sysmo_msisdn}, |
71 {"iccid", 0, 0, cmd_iccid}, | 61 {"iccid", 0, 0, cmd_iccid}, |
72 {"imsi", 0, 0, cmd_imsi}, | 62 {"imsi", 0, 0, cmd_imsi}, |
73 {"pb-dump", 1, 2, cmd_pb_dump}, | 63 {"pb-dump", 1, 2, cmd_pb_dump}, |
74 {"pb-dump-rec", 2, 3, cmd_pb_dump_rec}, | 64 {"pb-dump-rec", 2, 3, cmd_pb_dump_rec}, |
76 {"pb-erase-one", 2, 2, cmd_pb_erase_one}, | 66 {"pb-erase-one", 2, 2, cmd_pb_erase_one}, |
77 {"pb-erase-range", 3, 3, cmd_pb_erase_range}, | 67 {"pb-erase-range", 3, 3, cmd_pb_erase_range}, |
78 {"pb-update", 2, 2, cmd_pb_update}, | 68 {"pb-update", 2, 2, cmd_pb_update}, |
79 {"pb-update-imm", 3, 4, cmd_pb_update_imm}, | 69 {"pb-update-imm", 3, 4, cmd_pb_update_imm}, |
80 {"pb-update-imm-hex", 4, 4, cmd_pb_update_imm_hex}, | 70 {"pb-update-imm-hex", 4, 4, cmd_pb_update_imm_hex}, |
81 {"quit", 0, 0, cmd_exit}, | 71 {"quit", 0, 0, good_exit}, |
82 {"readbin", 2, 2, cmd_readbin}, | 72 {"readbin", 2, 2, cmd_readbin}, |
83 {"readef", 1, 1, cmd_readef}, | 73 {"readef", 1, 1, cmd_readef}, |
84 {"readrec", 1, 2, cmd_readrec}, | 74 {"readrec", 1, 2, cmd_readrec}, |
85 {"restore-file", 2, 2, cmd_restore_file}, | 75 {"restore-file", 2, 2, cmd_restore_file}, |
86 {"savebin", 2, 2, cmd_savebin}, | 76 {"savebin", 2, 2, cmd_savebin}, |
167 return(-1); | 157 return(-1); |
168 } | 158 } |
169 *ap = 0; | 159 *ap = 0; |
170 return tp->func(ap - argv, argv); | 160 return tp->func(ap - argv, argv); |
171 } | 161 } |
162 | |
163 dispatch_ready_argv(argc, argv) | |
164 char **argv; | |
165 { | |
166 struct cmdtab *tp; | |
167 | |
168 for (tp = cmdtab; tp->cmd; tp++) | |
169 if (!strcmp(tp->cmd, argv[0])) | |
170 break; | |
171 if (!tp->func) { | |
172 fprintf(stderr, "error: no such command\n"); | |
173 return(-1); | |
174 } | |
175 if (argc - 1 > tp->maxargs) { | |
176 fprintf(stderr, "error: too many arguments\n"); | |
177 return(-1); | |
178 } | |
179 if (argc - 1 < tp->minargs) { | |
180 fprintf(stderr, "error: too few arguments\n"); | |
181 return(-1); | |
182 } | |
183 return tp->func(argc, argv); | |
184 } |