diff libcommon/number_decode.c @ 8:4a9bf783491d

phone number decoding factored out
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 12 Feb 2021 00:07:24 +0000
parents
children f5a26c1d0b93
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libcommon/number_decode.c	Fri Feb 12 00:07:24 2021 +0000
@@ -0,0 +1,37 @@
+/*
+ * This module implements functions for decoding phone numbers.
+ */
+
+#include <sys/types.h>
+
+static char gsm_address_digits[16] =
+	{'0','1','2','3','4','5','6','7','8','9','*','#','a','b','c','?'};
+
+decode_phone_number(data, nbytes, out)
+	u_char *data;
+	unsigned nbytes;
+	char *out;
+{
+	u_char *dp, *endp;
+	int c;
+
+	dp = data;
+	endp = data + nbytes;
+	while (dp < endp) {
+		c = *dp & 0xF;
+		if (c == 0xF)
+			return(-1);
+		*out++ = gsm_address_digits[c];
+		c = *dp >> 4;
+		if (c == 0xF) {
+			if (dp + 1 == endp)
+				break;
+			else
+				return(-1);
+		}
+		*out++ = gsm_address_digits[c];
+		dp++;
+	}
+	*out = '\0';
+	return(0);
+}