diff uptools/sms-pdu-decode/pcm-sms-decode.c @ 600:31e219088cd6

uptools/sms-pdu-decode: pcm-sms-decode utility added
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 08 Feb 2020 02:47:43 +0000
parents
children 3a80bfa87496
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uptools/sms-pdu-decode/pcm-sms-decode.c	Sat Feb 08 02:47:43 2020 +0000
@@ -0,0 +1,73 @@
+#include <sys/types.h>
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <strings.h>
+#include <unistd.h>
+
+extern int ascii_ext_mode, global_hexdump_mode;
+extern u_char pdu[176];
+extern unsigned pdu_length;
+
+static char *infname;
+static FILE *inf;
+
+static char *msgtype[4] = {"received", "received unread", "sent",
+			   "stored unsent"};
+
+static
+process_cmdline(argc, argv)
+	char **argv;
+{
+	int c;
+	extern int optind;
+
+	while ((c = getopt(argc, argv, "ehu")) != EOF)
+		switch (c) {
+		case 'e':
+			ascii_ext_mode = 1;
+			continue;
+		case 'h':
+			global_hexdump_mode = 1;
+			continue;
+		case 'u':
+			ascii_ext_mode = 2;
+			continue;
+		default:
+			fprintf(stderr, "%s: invalid option\n", argv[0]);
+			exit(1);
+		}
+	if (argc != optind + 1) {
+		fprintf(stderr, "usage: %s [options] pcm-sms-binfile\n",
+			argv[0]);
+		exit(1);
+	}
+	infname = argv[optind];
+}
+
+main(argc, argv)
+	char **argv;
+{
+	u_char record[176];
+	unsigned recno;
+
+	process_cmdline(argc, argv);
+	inf = fopen(infname, "r");
+	if (!inf) {
+		perror(infname);
+		exit(1);
+	}
+	pdu_length = 176;
+	for (recno = 0; fread(record, sizeof record, 1, inf); recno++) {
+		if (record[0] & 1) {
+			printf("Record #%u is %s message:\n", recno,
+				msgtype[(record[0] >> 1) & 3]);
+			bcopy(record + 1, pdu, 175);
+			process_pdu(0);
+			putchar('\n');
+		} else
+			printf("Record #%u is empty\n\n", recno);
+	}
+	exit(0);
+}