view smsc-sendmt/smsc_addr.c @ 9:dfe99a061249

smsc-daemon: fflush the log file after writing MO SM to it
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 25 Aug 2023 15:48:08 -0800
parents 18b7f75fed9b
children 7543aa173634
line wrap: on
line source

/*
 * This C module is being stashed here temporarily until we figure out
 * where this function ultimately needs to go.  The parsing of the SMSC
 * address is being moved out of proto-smsc-daemon to proto-smsc-sendmt,
 * but we haven't started putting together the latter program yet.
 */

#include <ctype.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

char smsc_addr_num[21];		/* maximum of 20 digits per GSM 04.11 */
uint8_t smsc_addr_ton_npi;

void parse_smsc_addr_arg(char *arg)
{
	char *cp, *dp, *endp;
	unsigned ndig;

	cp = arg;
	dp = smsc_addr_num;
	ndig = 0;
	while (isdigit(*cp)) {
		if (ndig >= 20) {
			fprintf(stderr,
	"error: SMSC address argument exceeds GSM 04.11 limit of 20 digits\n");
			exit(1);
		}
		*dp++ = *cp++;
		ndig++;
	}
	if (!ndig) {
invalid:	fprintf(stderr,
			"error: SMSC address argument \"%s\" is invalid\n",
			arg);
		exit(1);
	}
	if (!*cp) {
		/* default to TON=1, NPI=1, i.e., a pretend Global Title */
		smsc_addr_ton_npi = 0x91;
		return;
	}
	if (*cp++ != ',')
		goto invalid;
	if (!*cp)
		goto invalid;
	smsc_addr_ton_npi = strtoul(cp, &endp, 0);
	if (*endp)
		goto invalid;
}