FreeCalypso > hg > freecalypso-hwlab
view simtool/pbcommon.c @ 132:5af88fa11b54
fc-uicc-tool: SELECT response parsing implemented (basic)
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 04 Feb 2021 01:36:54 +0000 |
parents | b1bf0ec6fff5 |
children |
line wrap: on
line source
/* * 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\n", 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); }