view gen-pdu/settings.c @ 10:17dd30989c0b

sms-gen-tpdu: fix bug in GSM7 data source
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 05 Aug 2023 07:47:22 +0000
parents 003660a57f99
children 5854e48d0ef7
line wrap: on
line source

/*
 * This module implements functions for various settings that come before
 * msg or msg-udh lines.
 */

#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include "error.h"

extern int dir_mo, include_sca;
extern u_char sc_addr[12], user_addr[12];
extern u_char mr_byte, pid_byte, dcs_byte;
extern u_char scts_buf[7];
extern int is_septet, scts_is_set;

extern int input_lineno;

void
set_sc_addr(argc, argv)
	char **argv;
{
	int rc;

	if (!include_sca) {
		fprintf(stderr, ERR_PREFIX
			"sc-addr is not allowed in bare TPDU mode\n",
			input_lineno);
		exit(1);
	}
	rc = encode_phone_number_arg(argv[1], sc_addr, 0);
	if (rc < 0) {
		fprintf(stderr, ERR_PREFIX "invalid phone number argument\n",
			input_lineno);
		exit(1);
	}
}

void
set_user_addr(argc, argv)
	char **argv;
{
	int rc;

	rc = encode_phone_number_arg(argv[1], user_addr, 1);
	if (rc < 0) {
		fprintf(stderr, ERR_PREFIX "invalid phone number argument\n",
			input_lineno);
		exit(1);
	}
}

void
set_mr_byte(argc, argv)
	char **argv;
{
	char *endp;

	if (!dir_mo) {
		fprintf(stderr, ERR_PREFIX "mr is not allowed in MT mode\n",
			input_lineno);
		exit(1);
	}
	mr_byte = strtoul(argv[1], &endp, 0);
	if (*endp) {
		fprintf(stderr, ERR_PREFIX "invalid byte value argument\n",
			input_lineno);
		exit(1);
	}
}

void
set_pid_byte(argc, argv)
	char **argv;
{
	char *endp;

	pid_byte = strtoul(argv[1], &endp, 0);
	if (*endp) {
		fprintf(stderr, ERR_PREFIX "invalid byte value argument\n",
			input_lineno);
		exit(1);
	}
}

void
set_dcs(argc, argv)
	char **argv;
{
	char *endp;

	dcs_byte = strtoul(argv[1], &endp, 0);
	if (*endp) {
		fprintf(stderr, ERR_PREFIX "invalid byte value argument\n",
			input_lineno);
		exit(1);
	}
	if (!strcmp(argv[2], "septet"))
		is_septet = 1;
	else if (!strcmp(argv[2], "octet"))
		is_septet = 0;
	else {
		fprintf(stderr, ERR_PREFIX "invalid septet/octet mode kw\n",
			input_lineno);
		exit(1);
	}
}

void
set_scts(argc, argv)
	char **argv;
{
	int rc;

	if (dir_mo) {
		fprintf(stderr, ERR_PREFIX "sc-ts is not allowed in MO mode\n",
			input_lineno);
		exit(1);
	}
	rc = encode_gsm_sms_abstime(argv[1], scts_buf);
	if (rc < 0) {
		fprintf(stderr, ERR_PREFIX "invalid timestamp argument\n",
			input_lineno);
		exit(1);
	}
	scts_is_set = 1;
}