view simtool/telsum.c @ 53:fbedb67d234f

serial: fix parity for inverse coding convention Important note: it is my (Mother Mychaela's) understanding that SIM cards with inverse coding convention are extremely rare, and I have never seen such a card. Therefore, our support for the inverse coding convention will likely remain forever untested.
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 21 Mar 2021 20:46:09 +0000
parents ddd767f6e15b
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 "simresp.h"
#include "curfile.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);
}