view doc/Tool-workflow @ 28:6e925aa54727

libcoding: more sensible naming of GSM time encoding and decoding modules
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 13 Jun 2024 02:32:11 +0000
parents f0139d74d3aa
children
line wrap: on
line source

The present sms-coding-utils suite consists of two principal programs:
sms-encode-text and sms-gen-tpdu.  There is also a shell script named
gen-sms-deliver-pdu that serves as a wrapper around sms-gen-tpdu for one
important use case of network-side testing of MT SMS.

sms-encode-text encodes only the user text body of SMS (either single or
concatenated) and does not deal with any of the headers.  The output from
sms-encode-text is designed to be fed into sms-gen-tpdu with some additional
prepended lines, either by way of a wrapper shell script like
gen-sms-deliver-pdu or by way of an intermediate file: redirect the output of
sms-encode-text into a file, manually edit that file to add user-addr and
possibly other header lines, and then feed it to sms-gen-tpdu.

The intermediate format in which SMS user data payload is passed from
sms-encode-text to sms-gen-tpdu is long hex strings, with the following
peculiarities:

* In the most common case of GSM7 encoding, the conversion from ASCII to
  GSM 03.38 has already been done (for example, character '@' will be encoded
  as 00 rather than 40 in these hex strings, and '[' will be escape-encoded as
  1B3C), but the packing of septets into octets has NOT been done yet - instead
  a string of binary septets is emitted, with the high bit clear in each hex
  byte.

* In the case of GSM7-encoded message segments that begin with UDH (used for
  concatenated SMS), the UDH part is encoded as octets, followed by septets for
  the text part.  The recipient of this intermediate format will need to extract
  UDHL from the first octet of the hex string and use this length to locate the
  boundary between octet-encoded UDH and septet-encoded text.

This peculiar format was chosen because it is the representation format used in
SMPP transport, and in any case it is a necessary intermediate step between
ASCII input and the final GSM 03.40 TPDU form.  The Mother had to write another
test program for SMPP (smpp-send in themwi-system-sw repository), and that
program is front-fed with the same sms-encode-text preliminary.

sms-encode-text usage
=====================

The basic usage synopsis is:

sms-encode-text [options] [message-text]

If the message text to be encoded is given on the command line, it must be a
single argument, i.e., quotes will need to be used at the shell level.  If no
message text is given on the command line, it will be read from stdin instead.
The operation of this program generally mirrors fcup-smsend from FreeCalypso
host tools - please read User-phone-tools document in freecalypso-tools
repository.  Allowed options are -c, -C, -e, -u and -U, and they work exactly
the same as in fcup-smsend.

Just like fcup-smsend, sms-encode-text can generate either single SMS (if the
message text fits within 160 characters for GSM7 or 70 characters for UCS-2) or
concatenated SMS.  To enable the possibility of concatenated SMS, you have to
invoke the program with either -c or -C option; the difference between these
two options is in how the reference number for concatenated SMS is obtained.
With -C you specify this reference number explicitly; with -c the program
implements the same $HOME/.concat_sms_refno logic as fcup-smsend.

In the case of single SMS, the output from sms-encode-text consists of two
lines: a mode-setting line that reads either 'dcs 0 septet' or 'dcs 8 octet',
followed by a message line.  The single message line consists of 'msg' keyword
followed by a long hex string as explained in the previous section.

In the case of concatenated SMS, the output from sms-encode-text consists of 3
or more lines: a dcs line that is the same as for single SMS, followed by 2 or
more msg-udh lines.  Each msg-udh line carries a TP-UD field that consists of
UDH followed by text, and the msg-udh keyword (as distinct from plain 'msg')
conveys the UDHI bit.

sms-gen-tpdu usage
==================

sms-gen-tpdu takes only one command argument: a mode keyword selecting which
type of PDU needs to be generated.  The 4 choices are:

mo	Generate a pure GSM 03.40 SMS-SUBMIT TPDU
mt	Generate a pure GSM 03.40 SMS-DELIVER TPDU
sc-mo	Generate SMS-SUBMIT with a prepended SC-address
sc-mt	Generate SMS-DELIVER with a prepended SC-address

sc-mo and sc-mt forms are intended for the mobile side of GSM, as this format
is written into EF_SMS on SIMs and exchanged in GSM 07.05 PDU mode.  Plain mt
format is intended for generating SMS-DELIVER TPDUs for MT SMS testing from the
network side (SMSC development), and plain mo format exists for completeness.

All other bits beyond the above mode selection are read from stdin.  The input
is line-based and is expected to consist of setting lines followed by message
lines.  Each msg or msg-udh line in the input results in a TPDU being generated,
but in order to produce valid message PDUs for anything other than an MO draft
that hasn't had its To address set yet, these message lines need to be preceded
by some setting lines.  Usually only user-addr setting needs to be given before
sms-encode-text output; other settings may be given as part of more advanced
experiments.

The following settings are supported:

dcs INTEGER (septet|octet)

Set TP-DCS.  The first argument is the value to be put into the TP-DCS octet in
the TPDU; the second argument is a mode keyword that tells sms-gen-tpdu whether
it should operate in septet or octet mode when encoding TP-UDL and TP-UD.

lp

Set TP-LP; valid only in MT mode.

mms

Set TP-MMS; valid only in MT mode.  Note that the bit encoding this Boolean flag
is inverted: when no TP-MMS is set, the bit is 1, and when 'mms' setting is
given, the bit becomes 0.

mr INTEGER

Set TP-MR; valid only in MO mode.  The default in the absence of this setting
is 0xFF.

pid INTEGER

Set TP-PID.  The default in the absence of this setting is 0.

rd

Set TP-RD; valid only in MO mode.

rp

Set TP-RP.

sc-addr NUMBER[,INTEGER]

Valid only in sc-mo and sc-mt modes: set the SC-address to be prepended before
the GSM 03.40 TPDU.  If this setting is omitted, a null SC-address (a single
length octet of 0) is emitted.  The latter approach works with GSM 07.05 at
least with FreeCalypso firmware - the MS firmware replaces this null SC-address
with the one programmed on the SIM.

sc-ts YY/MM/DD,HH:MM:SS[+-]TZ

Set TP-SCTS; valid only in MT mode.  If this setting is not given, the current
local time is used to generate TP-SCTS.

sr

Set TP-SRI or TP-SRR (different names for the same bit).

user-addr NUMBER[,INTEGER]

Set TP-DA in SMS-SUBMIT or TP-OA in SMS-DELIVER.

user-addr alpha:STRING

This special form of user-addr sets TP-OA (or TP-DA - we provide mechanism, not
policy) in the special alphanumeric address format (TON=5, NPI=0).  The alpha
address can be up to 11 GSM7 characters; the GSM7 string is given in standard
FreeCalypso representation defined in the SIM-data-formats specification in
freecalypso-docs.

vp-abs YY/MM/DD,HH:MM:SS[+-]TZ

Set TP-VP in absolute format; valid only in MO mode.

vp-rel INTEGER

Set TP-VP in relative format; valid only in MO mode.

INTEGER format: decimal by default, hexadecimal if prefixed with 0x.

NUMBER[,INTEGER] phone number entry format for user-addr and sc-addr
--------------------------------------------------------------------

The same convention is used as elsewhere in FreeCalypso queendom, e.g., in
fcup-smsend and fc-simtool:

* If no comma-separated TON/NPI byte is given, it defaults to 0x91 if the number
  begins with '+' or 0x81 otherwise.

* If the number is suffixed with a comma and a byte-sized integer (decimal by
  default or 0x prefix for hex), the TON/NPI byte is set explicitly.