changeset 360:68c8cf672ecd

uptools/libcoding: implemented generation of SMS-SUBMIT PDUs
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 04 Mar 2018 06:24:36 +0000
parents 061f8d75083d
children ae2556e256a4
files uptools/libcoding/Makefile uptools/libcoding/sms_submit.c
diffstat 2 files changed, 49 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/uptools/libcoding/Makefile	Sun Mar 04 05:16:34 2018 +0000
+++ b/uptools/libcoding/Makefile	Sun Mar 04 06:24:36 2018 +0000
@@ -3,7 +3,7 @@
 OBJS=	alpha_addr.o decode_helpers.o grokdcs.o gsm7_decode.o \
 	gsm7_decode_tables.o gsm7_encode.o gsm7_encode_table.o gsm7_pack.o \
 	gsm7_unpack.o gsmtime.o hexdecode.o hexdump.o number_decode.o \
-	number_encode.o scaddr.o ucs2_decode.o utf8_decode.o
+	number_encode.o scaddr.o sms_submit.o ucs2_decode.o utf8_decode.o
 LIB=	libcoding.a
 
 all:	${LIB}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uptools/libcoding/sms_submit.c	Sun Mar 04 06:24:36 2018 +0000
@@ -0,0 +1,48 @@
+/*
+ * This library module implements the function for constructing outgoing
+ * SMS-SUBMIT PDUs.
+ */
+
+#include <sys/types.h>
+#include <strings.h>
+
+make_sms_submit_pdu(da, textsrc, textlen, udh, udhl, outbuf)
+	u_char *da, *textsrc, *udh, *outbuf;
+	unsigned textlen, udhl;
+{
+	u_char *outp = outbuf;
+	unsigned addr_field_len;
+	unsigned udh_octets, udh_chars;
+	u_char ud7[160];
+	unsigned udl, udl_octets;
+
+	if (udh)
+		*outp++ = 0x41;
+	else
+		*outp++ = 0x01;
+	*outp++ = 0;
+	addr_field_len = ((da[0] + 1) >> 1) + 2;
+	bcopy(da, outp, addr_field_len);
+	outp += addr_field_len;
+	*outp++ = 0;
+	*outp++ = 0;
+	if (udh) {
+		udh_octets = udhl + 1;
+		udh_chars = (udh_octets * 8 + 6) / 7;
+	} else {
+		udh_octets = 0;
+		udh_chars = 0;
+	}
+	udl = udh_chars + textlen;
+	*outp++ = udl;
+	udl_octets = (udl * 7 + 7) / 8;
+	bzero(ud7, 160);
+	bcopy(textsrc, ud7 + udh_chars, textlen);
+	gsm7_pack(ud7, outp, udl_octets);
+	if (udh) {
+		*outp = udhl;
+		bcopy(udh, outp + 1, udhl);
+	}
+	outp += udl_octets;
+	return (outp - outbuf);
+}