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