FreeCalypso > hg > fc-pcsc-tools
changeset 19:72a24b8538eb
meaty function of pb-dump moved back into simtool, out of libcommon
Upon further reflection, I am not going to keep any of the pb-*
commands in the new version of fc-uicc-tool: they are logically
incorrect for UICC/USIM anyway, as they access phonebook files
via old classic SIM paths, rather than their USIM paths. OTOH,
I am going to implement new SMSP commands in fc-simtool, and I
do not plan to replicate them in fc-uicc-tool either. Guts of
fc-simtool pb-dump belong in simtool/pbdump.c, not in libcommon,
just like the guts of the future smsp-dump command will belong
in its own respective implementation module.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 12 Feb 2021 03:33:26 +0000 |
parents | 2ef261371347 |
children | 90e7020df08a |
files | libcommon/Makefile libcommon/pbdumpfunc.c simtool/pbdump.c |
diffstat | 3 files changed, 54 insertions(+), 60 deletions(-) [+] |
line wrap: on
line diff
--- a/libcommon/Makefile Fri Feb 12 03:21:39 2021 +0000 +++ b/libcommon/Makefile Fri Feb 12 03:33:26 2021 +0000 @@ -3,7 +3,7 @@ OBJS= alpha_decode.o alpha_fromfile.o alpha_valid.o apdu.o atr.o \ cardconnect.o chkblank.o dumpdirfunc.o exit.o gsm7_encode.o \ gsm7_encode_table.o hexdump.o hexread.o hexstr.o names.o \ - number_decode.o number_encode.o pbdumpfunc.o pinentry.o revnibbles.o + number_decode.o number_encode.o pinentry.o revnibbles.o LIB= libcommon.a all: ${LIB}
--- a/libcommon/pbdumpfunc.c Fri Feb 12 03:21:39 2021 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,57 +0,0 @@ -/* - * This module implements the meaty function for pb-dump commands. - */ - -#include <sys/types.h> -#include <stdio.h> -#include "simresp.h" - -static -check_blank_area(dp, endp) - u_char *dp, *endp; -{ - while (dp < endp) - if (*dp++ != 0xFF) - return(-1); - return(0); -} - -void -dump_phonebook_record(recno, outf) - unsigned recno; - FILE *outf; -{ - int rc; - unsigned textlen; - u_char *fixp; - char digits[21]; - - fprintf(outf, "#%u: ", recno); - if (sim_resp_data_len > 14) { - rc = validate_alpha_field(sim_resp_data, - sim_resp_data_len - 14, - &textlen); - if (rc < 0) { -malformed: fprintf(outf, "malformed record\n"); - return; - } - } else - textlen = 0; - fixp = sim_resp_data + sim_resp_data_len - 14; - if (fixp[0] < 2 || fixp[0] > 11) - goto malformed; - rc = decode_phone_number(fixp + 2, fixp[0] - 1, digits); - if (rc < 0) - goto malformed; - rc = check_blank_area(fixp + 1 + fixp[0], fixp + 12); - if (rc < 0) - goto malformed; - /* all checks passed */ - fprintf(outf, "%s,0x%02X ", digits, fixp[1]); - if (fixp[12] != 0xFF) - fprintf(outf, "CCP=%u ", fixp[12]); - if (fixp[13] != 0xFF) - fprintf(outf, "EXT=%u ", fixp[13]); - print_alpha_field(sim_resp_data, textlen, outf); - putc('\n', outf); -}
--- a/simtool/pbdump.c Fri Feb 12 03:21:39 2021 +0000 +++ b/simtool/pbdump.c Fri Feb 12 03:33:26 2021 +0000 @@ -5,8 +5,59 @@ #include <sys/types.h> #include <stdio.h> #include <stdlib.h> +#include "simresp.h" #include "curfile.h" +static +check_blank_area(dp, endp) + u_char *dp, *endp; +{ + while (dp < endp) + if (*dp++ != 0xFF) + return(-1); + return(0); +} + +static void +dump_record(recno, outf) + unsigned recno; + FILE *outf; +{ + int rc; + unsigned textlen; + u_char *fixp; + char digits[21]; + + fprintf(outf, "#%u: ", recno); + if (sim_resp_data_len > 14) { + rc = validate_alpha_field(sim_resp_data, + sim_resp_data_len - 14, + &textlen); + if (rc < 0) { +malformed: fprintf(outf, "malformed record\n"); + return; + } + } else + textlen = 0; + fixp = sim_resp_data + sim_resp_data_len - 14; + if (fixp[0] < 2 || fixp[0] > 11) + goto malformed; + rc = decode_phone_number(fixp + 2, fixp[0] - 1, digits); + if (rc < 0) + goto malformed; + rc = check_blank_area(fixp + 1 + fixp[0], fixp + 12); + if (rc < 0) + goto malformed; + /* all checks passed */ + fprintf(outf, "%s,0x%02X ", digits, fixp[1]); + if (fixp[12] != 0xFF) + fprintf(outf, "CCP=%u ", fixp[12]); + if (fixp[13] != 0xFF) + fprintf(outf, "EXT=%u ", fixp[13]); + print_alpha_field(sim_resp_data, textlen, outf); + putc('\n', outf); +} + cmd_pb_dump(argc, argv) char **argv; { @@ -34,7 +85,7 @@ } if (check_simresp_all_blank()) continue; - dump_phonebook_record(recno, outf); + dump_record(recno, outf); } if (argv[2]) fclose(outf); @@ -76,7 +127,7 @@ return(rc); if (check_simresp_all_blank()) continue; - dump_phonebook_record(recno, stdout); + dump_record(recno, stdout); } return(0); }