diff uptools/libcoding/sms_submit.c @ 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
children d1fa771abeb8
line wrap: on
line diff
--- /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);
+}