FreeCalypso > hg > freecalypso-tools
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); +}