FreeCalypso > hg > freecalypso-hwlab
diff simtool/pbcommon.c @ 104:a60645b75a57
fc-simtool: phonebook dump implemented
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 25 Jan 2021 05:55:40 +0000 |
parents | |
children | b1bf0ec6fff5 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/simtool/pbcommon.c Mon Jan 25 05:55:40 2021 +0000 @@ -0,0 +1,71 @@ +/* + * This module implements the common functions for all phonebook commands. + */ + +#include <sys/types.h> +#include <string.h> +#include <strings.h> +#include <stdio.h> +#include <stdlib.h> +#include <pcsclite.h> +#include <winscard.h> +#include "globals.h" +#include "file_id.h" + +static struct map { + char *user_name; + char *canon_name; + int file_id; +} phonebook_map[] = { + {"adn", "EF_ADN", EF_ADN}, + {"ADN", "EF_ADN", EF_ADN}, + {"EF_ADN", "EF_ADN", EF_ADN}, + {"fdn", "EF_FDN", EF_FDN}, + {"FDN", "EF_FDN", EF_FDN}, + {"EF_FDN", "EF_FDN", EF_FDN}, + {"sdn", "EF_SDN", EF_SDN}, + {"SDN", "EF_SDN", EF_SDN}, + {"EF_SDN", "EF_SDN", EF_SDN}, + {"msisdn", "EF_MSISDN", EF_MSISDN}, + {"MSISDN", "EF_MSISDN", EF_MSISDN}, + {"EF_MSISDN", "EF_MSISDN", EF_MSISDN}, + /* table search terminator */ + {0, 0, -1} +}; + +phonebook_op_common(reqname) + char *reqname; +{ + struct map *tp; + int rc; + + for (tp = phonebook_map; *tp->user_name; tp++) + if (!strcmp(tp->user_name, reqname)) + break; + if (!tp->canon_name) { + fprintf(stderr, "error: phone book name \"%s\" not known", + reqname); + return(-1); + } + rc = select_op(DF_TELECOM); + if (rc < 0) + return(rc); + rc = select_op(tp->file_id); + if (rc < 0) + return(rc); + rc = parse_ef_select_response(); + if (rc < 0) + return(rc); + if (curfile_structure != 0x01) { + fprintf(stderr, "error: %s is not linear fixed\n", + tp->canon_name); + return(-1); + } + if (curfile_record_len < 14) { + fprintf(stderr, + "error: %s has record length of %u bytes, less than minimum 14\n", + tp->canon_name, curfile_record_len); + return(-1); + } + return(0); +}