view simtool/telsum.c @ 150:54e33e9238b6

fc-simtool: harmonize hex string code with fc-uicc-tool
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 07 Feb 2021 00:06:50 +0000
parents 66c0cb0e9876
children
line wrap: on
line source

/*
 * This module implements the telecom-sum (summary info) command.
 */

#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <pcsclite.h>
#include <winscard.h>
#include "globals.h"
#include "file_id.h"

static
do_phonebook_file(file_id, book_name)
	unsigned file_id;
	char *book_name;
{
	int rc;

	rc = select_op(file_id);
	if (rc < 0) {
		printf("%s not present\n", book_name);
		return(rc);
	}
	rc = parse_ef_select_response();
	if (rc < 0) {
		fprintf(stderr, "error occurred on SELECT of EF_%s\n",
			book_name);
		return(rc);
	}
	if (curfile_structure != 0x01) {
		fprintf(stderr, "error: EF_%s is not linear fixed\n",
			book_name);
		return(-1);
	}
	if (curfile_record_len < 14) {
		fprintf(stderr,
	"error: EF_%s has record length of %u bytes, less than minimum 14\n",
			book_name, curfile_record_len);
		return(-1);
	}
	printf("%s has %u entries, %u bytes of alpha tag\n", book_name,
		curfile_record_count, curfile_record_len - 14);
	return(0);
}

static
do_sms_store()
{
	int rc;

	rc = select_op(EF_SMS);
	if (rc < 0) {
		printf("EF_SMS not present\n");
		return(rc);
	}
	rc = parse_ef_select_response();
	if (rc < 0) {
		fprintf(stderr, "error occurred on SELECT of EF_SMS\n");
		return(rc);
	}
	if (curfile_structure != 0x01 || curfile_record_len != 176) {
		fprintf(stderr,
		"error: EF_SMS is not linear fixed with 176-byte records\n");
		return(-1);
	}
	printf("SMS store has %u entries\n", curfile_record_count);
	return(0);
}

cmd_telecom_sum()
{
	int rc;

	rc = select_op(DF_TELECOM);
	if (rc < 0)
		return(rc);
	do_phonebook_file(EF_ADN, "ADN");
	do_phonebook_file(EF_FDN, "FDN");
	do_phonebook_file(EF_SDN, "SDN");
	do_phonebook_file(EF_MSISDN, "MSISDN");
	do_sms_store();
	return(0);
}