- Reformatting the app_sms help text from html to txt to comply with the rest of...
authorOlle Johansson <oej@edvina.net>
Fri, 30 Dec 2005 11:20:13 +0000 (11:20 +0000)
committerOlle Johansson <oej@edvina.net>
Fri, 30 Dec 2005 11:20:13 +0000 (11:20 +0000)
- Renaming help files to README.<name>

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@7674 65c4cc65-6c06-0410-ace0-fbb531ad65f3

doc/README.app_sms [new file with mode: 0644]
doc/README.channels [moved from doc/channel.txt with 94% similarity]
doc/README.linkedlists [moved from doc/linkedlists.README with 100% similarity]
doc/app_sms.html [deleted file]

diff --git a/doc/README.app_sms b/doc/README.app_sms
new file mode 100644 (file)
index 0000000..22ca3fd
--- /dev/null
@@ -0,0 +1,470 @@
+
+                               * Application SMS
+
+   The SMS module for Asterisk was developed by Adrian Kennard, and is an
+   implementation of the ETSI specification for landline SMS, ETSI ES 201
+   912, which is available from www.etsi.org. Landline SMS is starting to
+   be available in various parts of Europe, and is available from BT in
+   the UK. However, Asterisk would allow gateways to be created in other
+   locations such as the US, and use of SMS capable phones such as the
+   Magic Messenger. SMS works using analogue or ISDN lines.
+
+Background
+
+   Short Message Service (SMS), or texting is very popular between mobile
+   phones. A message can be sent between two phones, and normally
+   contains 160 characters. There are ways in which various types of data
+   can be encoded in a text message such as ring tones, and small
+   graphic, etc. Text messaging is being used for voting and
+   competitions, and also SPAM...
+   Sending a message involves the mobile phone contacting a message
+   centre (SMSC) and passing the message to it. The message centre then
+   contacts the destination mobile to deliver the message. The SMSC is
+   responsible for storing the message and trying to send it until the
+   destination mobile is available, or a timeout.
+   Landline SMS works in basically the same way. You would normally have
+   a suitable text capable landline phone, or a separate texting box such
+   as a Magic Messenger on your phone line. This sends a message to a
+   message centre your telco provides by making a normal call and sending
+   the data using 1200 Baud FSK signaling according to the ETSI spec. To
+   receive a message the message centre calls the line with a specific
+   calling number, and the text capable phone answers the call and
+   receives the data using 1200 Baud FSK signaling. This works
+   particularly well in the UK as the calling line identity is sent
+   before the first ring, so no phones in the house would ring when a
+   message arrives.
+
+Typical use with Asterisk
+
+   Sending messages from an Asterisk box can be used for a variety of
+   reasons, including notification from any monitoring systems, email
+   subject lines, etc.
+   Receiving messages to an Asterisk box is typically used just to email
+   the messages to someone appropriate - we email and texts that are
+   received to our direct numbers to the appropriate person. Received
+   messages could also be used to control applications, manage
+   competitions, votes, post items to IRC, anything.
+   Using a terminal such as a magic messenger, an Asterisk box could ask
+   as a message centre sending messages to the terminal, which will beep
+   and pop up the message (and remember 100 or so messages in its
+   memory).
+
+Terminology
+
+   SMS
+   Short Message Service
+   i.e. text messages
+   SMSC
+   Short Message Service Centre
+   The system responsible for storing and forwarding messages
+   MO
+   Mobile Originated
+   A message on its way from a mobile or landline device to the SMSC
+   MT
+   Mobile Terminated
+   A message on its way from the SMSC to the mobile or landline device
+   RX
+   Receive
+   A message coming in to the Asterisk box
+   TX
+   Transmit
+   A message going out of the Asterisk box
+
+Sub address
+
+   When sending a message to a landline, you simply send to the landline
+   number. In the UK, all of the mobile operators (bar one) understand
+   sending messages to landlines and pass the messages to the BTText
+   system for delivery to the landline.
+   The specification for landline SMS allows for the possibility of more
+   than one device on a single landline. These can be configured with Sub
+   addresses which are a single digit. To send a message to a specific
+   device the message is sent to the landline number with an extra digit
+   appended to the end. The telco can define a default sub address (9 in
+   the UK) which is used when the extra digit is not appended to the end.
+   When the call comes in, part of the calling line ID is the sub
+   address, so that only one device on the line answers the call and
+   receives the message.
+   Sub addresses also work for outgoing messages. Part of the number
+   called by the device to send a message is its sub address. Sending
+   from the default sub address (9 in the UK) means the message is
+   delivered with the sender being the normal landline number. Sending
+   from any other sub address makes the sender the landline number with
+   an extra digit on the end.
+   Using Asterisk, you can make use of the sub addresses for sending and
+   receiving messages. Using DDI (DID, i.e. multiple numbers on the line
+   on ISDN) you can also make use of many different numbers for SMS.
+
+Build / installation
+
+   app_sms.c is included in the Asterisk source apps directory and is
+   included in the object list (app_sms.so) in apps/Makefile.
+   smsq.c is a stand alone helper application which is used to send SMSs
+   from the command line. It uses the popt library. A line for your make
+   file is:-
+smsq: smsq.c
+        cc -O -o smsq smsq.c -lpopt
+
+extensions.conf
+
+   The following contexts are recommended.
+; Mobile Terminated, RX. This is used when an incoming call from the SMS arrive
+s, with the queue (called number and sub address) in ${EXTEN}
+; Running an app after receipt of the text allows the app to find all messages 
+in the queue and handle them, e.g. email them.
+; The app may be something like   smsq --process=somecommand --queue=${EXTEN}  
+to run a command for each received message
+; See below for usage
+[smsmtrx]
+exten = _X.,1, SMS(${EXTEN}|a)
+exten = _X.,2,System("someapptohandleincomingsms ${EXTEN}")
+exten = _X.,3,Hangup
+; Mobile originated, RX. This is receiving a message from a device, e.g. a Magi
+c Messenger on a sip extension
+; Running an app after receipt of the text allows the app to find all messages 
+in the queue and handle then, e.g. sending them to the public SMSC
+; The app may be something like   smsq --process=somecommand --queue=${EXTEN}  
+to run a command for each received message
+; See below for example usage
+[smsmorx]
+exten = _X.,1, SMS(${EXTEN}|sa)
+exten = _X.,2,System("someapptohandlelocalsms ${EXTEN}")
+exten = _X.,3,Hangup
+
+   smsmtrx is normally accessed by an incoming call from the SMSC. In the
+   UK this call is from a CLI of 080058752X0 where X is the sub address.
+   As such a typical usage in the extensions.conf at the point of
+   handling an incoming call is:-
+exten = _X./8005875290,1,Goto(smsmtrx,${EXTEN},1)
+exten = _X./_80058752[0-8]0,1,Goto(smsmtrx,${EXTEN}-${CALLERIDNUM:8:1},1)
+
+   Alternatively, if you have the correct national prefix on incoming
+   CLI, e.g. using zaphfc, you might use:-
+exten = _X./08005875290,1,Goto(smsmtrx,${EXTEN},1)
+exten = _X./_080058752[0-8]0,1,Goto(smsmtrx,${EXTEN}-${CALLERIDNUM:9:1},1)
+
+   smsmorx is normally accessed by a call from a local sip device
+   connected to a Magic Messenger. It could however by that you are
+   operating Asterisk as a message centre for calls from outside. Either
+   way, you look at the called number and goto smsmorx. In the UK, the
+   SMSC number that would be dialed is 1709400X where X is the caller sub
+   address. As such typical usage in extension.config at the point of
+   handling a call from a sip phone is:-
+exten = 17094009,1,Goto(smsmorx,${CALLERIDNUM},1)
+exten = _1709400[0-8],1,Goto(smsmorx,${CALLERIDNUM}-{EXTEN:7:1},1)
+
+Using smsq
+
+   smsq is a simple helper application designed to make it easy to send
+   messages from a command line. it is intended to run on the Asterisk
+   box and have direct access to the queue directories for SMS and for
+   Asterisk.
+   In its simplest form you can send an SMS by a command such as
+   smsq 0123456789 This is a test to 0123456789
+   This would create a queue file for a mobile originated TX message in
+   queue 0 to send the text "This is a test to 0123456789" to 0123456789.
+   It would then place a file in the /var/spool/asterisk/outgoing
+   directory to initiate a call to 17094009 (the default message centre
+   in smsq) attached to application SMS with argument of the queue name
+   (0).
+   Normally smsq will queue a message ready to send, and will then create
+   a file in the Asterisk outgoing directory causing Asterisk to actually
+   connect to the message centre or device and actually send the pending
+   message(s).
+   Using --process, smsq can however be used on received queues to run a
+   command for each file (matching the queue if specified) with various
+   environment variables set based on the message (see below);
+   smsq options:-
+
+   --help
+   Show help text
+   --usage
+   Show usage
+   --queue
+   -q
+   Specify a specific queue
+   In no specified, messages are queued under queue "0"
+   --da
+   -d
+   Specify destination address
+   --oa
+   -o
+   Specify originating address
+   This also implies that we are generating a mobile terminated message
+   --ud
+   -m
+   Specify the actual message
+   --ud-file
+   -f
+   Specify a file to be read for the context of the message
+   A blank filename (e.g. --ud-file= on its own) means read stdin. Very
+   useful when using via ssh where command line parsing could mess up the
+   message.
+   --mt
+   -t
+   Mobile terminated message to be generated
+   --mo
+   Mobile originated message to be generated
+   Default
+   --tx
+   Transmit message
+   Default
+   --rx
+   -r
+   Generate a message in the receive queue
+   --UTF-8
+   Treat the file as UTF-8 encoded (default)
+   --UCS-1
+   Treat the file as raw 8 bit UCS-1 data, not UTF-8 encoded
+   --UCS-2
+   Treat the file as raw 16 bit bigendian USC-2 data
+   --process
+   Specific a command to process for each file in the queue
+   Implies --rx and --mt if not otherwise specified.
+   Sets environment variables for every possible variable, and also ud,
+   ud8 (USC-1 hex), and ud16 (USC-2 hex) for each call. Removes files.
+   --motx-channel
+   Specify the channel for motx calls
+   May contain X to use sub address based on queue name or may be full
+   number
+   Default is Local/1709400X
+   --motx-callerid
+   Specify the caller ID for motx calls
+   The default is the queue name without -X suffix
+   --motx-wait
+   Wait time for motx call
+   Default 10
+   --motx-delay
+   Retry time for motx call
+   Default 1
+   --motx-retries
+   Retries for motx call
+   Default 10
+   --mttx-channel
+   Specify the channel for mttx calls
+   Default is Local/ and the queue name without -X suffix
+   --mtttx-callerid
+   Specify the callerid for mttx calls
+   May include X to use sub address based on queue name or may be full
+   number
+   Default is 080058752X0
+   --mttx-wait
+   Wait time for mttx call
+   Default 10
+   --mttx-delay
+   Retry time for mttx call
+   Default 30
+   --mttx-retries
+   Retries for mttx call
+   Default 100
+   --default-sub-address
+   The default sub address assumed (e.g. for X in CLI and dialled numbers
+   as above) when none added (-X) to queue
+   Default 9
+   --no-dial
+   -x
+   Create queue, but do not dial to send message
+   --no-wait
+   Do not wait if a call appears to be in progress
+   This could have a small window where a mesdsage is queued but not
+   sent, so regular calls to smsq should be done to pick up any missed
+   messages
+   --concurrent
+   How many concurrent calls to allow (per queue), default 1
+   --mr
+   -n
+   Message reference
+   --pid
+   -p
+   Protocol ID
+   --dcs
+   Data coding scheme
+   --udh
+   Specific hex string of user data header specified (not including the
+   initial length byte)
+   May be a blank string to indicate header is included in the user data
+   already but user data header indication to be set.
+   --srr
+   Status report requested
+   --rp
+   Return path requested
+   --vp
+   Specify validity period (seconds)
+   --scts
+   Specify timestamp (YYYY-MM-DDTHH:MM:SS)
+   --spool-dir
+   Spool dir (in which sms and outgoing are found)
+   Default /var/spool/asterisk
+
+   Other arguments starting '-' or '--' are invalid and will cause an
+   error. Any trailing arguments are processed as follows:-
+     * If the message is mobile originating and no destination address
+       has been specified, then the first argument is assumed to be a
+       destination address
+     * If the message is mobile terminating and no destination address
+       has been specified, then the first argument is assumed to be the
+       queue name
+     * If there is no user data, or user data file specified, then any
+       following arguments are assumed to be the message, which are
+       concatenated.
+     * If no user data is specified, then no message is sent. However,
+       unless --no-dial is specified, smsq checks for pending messages
+       and generates an outgoing anyway
+
+   Note that when smsq attempts to make a file in
+   /var/spool/asterisk/outgoing, it checks if there is already a call
+   queued for that queue. It will try several filenames, up to the
+   --concorrent setting. If these files exists, then this means Asterisk
+   is already queued to send all messages for that queue, and so Asterisk
+   should pick up the message just queued. However, this alone could
+   create a race condition, so if the files exist then smsq will wait up
+   to 3 seconds to confirm it still exists or if the queued messages have
+   been sent already. The --no-wait turns off this behaviour. Basically,
+   this means that if you have a lot of messages to send all at once,
+   Asterisk will not make unlimited concurrent calls to the same message
+   centre or device for the same queue. This is because it is generally
+   more efficient to make one call and send all of the messages one after
+   the other.
+   smsq can be used with no arguments, or with a queue name only, and it
+   will check for any pending messages and cause an outgoing if there are
+   any. It only sets up one outgoing call at a time based on the first
+   queued message it finds. A outgoing call will normally send all queued
+   messages for that queue. One way to use smsq would be to run with no
+   queue name (so any queue) every minute or every few seconds to send
+   pending message. This is not normally necessary unless --no-dial is
+   selected. Note that smsq does only check motx or mttx depending on the
+   options selected, so it would need to be called twice as a general
+   check.
+   UTF-8 is used to parse command line arguments for user data, and is
+   the default when reading a file. If an invalid UTF-8 sequence is
+   found, it is treated as UCS-1 data (i.e, as is).
+   The --process option causes smsq to scan the specified queue (default
+   is mtrx) for messages (matching the queue specified, or any if queue
+   not specified) and run a command and delete the file. The command is
+   run with a number of environment variables set as follows. Note that
+   these are unset if not needed and not just taken from the calling
+   environment. This allows simple processing of incoming messages
+
+   $queue
+   Set if a queue specified
+   $?srr
+   srr is set (to blank) if srr defined and has value 1.
+   $?rp
+   rp is set (to blank) if rp defined and has value 1.
+   $ud
+   User data, UTF-8 encoding, including any control characters, but with
+   nulls stripped out
+   Useful for the content of emails, for example, as it includes any
+   newlines, etc.
+   $ude
+   User data, escaped UTF-8, including all characters, but control
+   characters \n, \r, \t, \f, \xxx and \ is escaped as \\
+   Useful fGuaranteed one line printable text, so useful in Subject lines
+   of emails, etc
+   $ud8
+   Hex UCS-1 coding of user data (2 hex digits per character)
+   Present only if all user data is in range U+0000 to U+00FF
+   $ud16
+   Hex UCS-2 coding of user data (4 hex digits per chartacter)
+   other
+   Other fields set using their field name, e.g. mr, pid, dcs, etc. udh
+   is a hex byte string
+
+File formats
+
+   By default all queues are held in a director /var/spool/asterisk/sms.
+   Within this directory are sub directories mtrx, mttx, morx, motx which
+   hold the received messages and the messages ready to send. Also,
+   /var/log/asterisk/sms is a log file of all messages handled.
+   The file name in each queue directory starts with the queue parameter
+   to SMS which is normally the CLI used for an outgoing message or the
+   called number on an incoming message, and may have -X (X being sub
+   address) appended. If no queue ID is known, then 0 is used by smsq by
+   default. After this is a dot, and then any text. Files are scanned for
+   matching queue ID and a dot at the start. This means temporary files
+   being created can be given a different name not starting with a queue
+   (we recommend a . on the start of the file name for temp files).
+   Files in these queues are in the form of a simple text file where each
+   line starts with a keyword and an = and then data. udh and ud have
+   options for hex encoding, see below.
+   UTF-8. The user data (ud) field is treated as being UTF-8 encoded
+   unless the DCS is specified indicating 8 bit formart. If 8 bit format
+   is specified then the user data is sent as is.
+   The keywords are as follows:-
+
+   oa Originating address
+   The phone number from which the message came
+   Present on mobile terminated messages and is the CLI for morx messages
+   da
+   Destination Address
+   The phone number to which the message is sent
+   Present on mobile originated messages
+   scts
+   The service centre time stamp
+   Format YYYY-MM-DDTHH:MM:SS
+   Present on mobile terminated messages
+   pid
+   One byte decimal protocol ID
+   See GSM specs for more details
+   Normally 0 or absent
+   dcs
+   One byte decimal data coding scheme
+   If omitted, a sensible default is used (see below)
+   See GSM specs for more details
+   mr
+   One byte decimal message reference
+   Present on mobile originated messages, added by default if absent
+   srr
+   0 or 1 for status report request
+   Does not work in UK yet, not implemented in app_sms yet
+   rp
+   0 or 1 return path
+   See GSM specs for details
+   vp
+   Validity period in seconds
+   Does not work in UK yet
+   udh
+   Hex string of user data header prepended to the SMS contents,
+   excluding initial length byte.
+   Consistent with ud, this is specified as udh# rather than udh=
+   If blank, this means that the udhi flag will be set but any user data
+   header must be in the ud field
+   ud
+   User data, may be text, or hex, see below
+
+   udh is specified as as udh# followed by hex (2 hex digits per byte).
+   If present, then the user data header indicator bit is set, and the
+   length plus the user data header is added to the start of the user
+   data, with padding if necessary (to septet boundary in 7 bit format).
+   User data can hold an USC character codes U+0000 to U+FFFF. Any other
+   characters are coded as U+FEFF
+   ud can be specified as ud= followed by UTF-8 encoded text if it
+   contains no control characters, i.e. only (U+0020 to U+FFFF). Any
+   invalid UTF-8 sequences are treated as is (U+0080-U+00FF).
+   ud can also be specified as ud# followed by hex (2 hex digits per
+   byte) containing characters U+0000 to U+00FF only.
+   ud can also be specified as ud## followed by hex (4 hex digits per
+   byte) containing UCS-2 characters.
+   When written by app_sms (e.g. incoming messages), the file is written
+   with ud= if it can be (no control characters). If it cannot, the a
+   comment line ;ud= is used to show the user data for human readability
+   and ud# or ud## is used.
+
+Delivery reports
+
+   The SMS specification allows for delivery reports. These are requested
+   using the srr bit. However, as these do not work in the UK yet they
+   are not fully implemented in this application. If anyone has a telco
+   that does implement these, please let me know. BT in the UK have a non
+   standard way to do this by starting the message with *0#, and so this
+   application may have a UK specific bodge in the near future to handle
+   these.
+   The main changes that are proposed for delivery report handling are :-
+     * New queues for sent messages, one file for each destination
+       address and message reference.
+     * New field in message format, user reference, allowing applications
+       to tie up their original message with a report.
+     * Handling of the delivery confirmation/rejection and connecting to
+       the outgoing message - the received message file would then have
+       fields for the original outgoing message and user reference
+       allowing applications to handle confirmations better.
similarity index 94%
rename from doc/channel.txt
rename to doc/README.channels
index 4cef6a4..b907a92 100644 (file)
@@ -38,3 +38,7 @@ what the translator API does with its channel.
 
 When the PBX is finished with the line, it will hang up the line, at which
 point it the hardware should again be monitored by the monitoring thread.
+
+---------------
+For more information, please consult the Asterisk Developer's Documentation
+on http://www.asterisk.org
diff --git a/doc/app_sms.html b/doc/app_sms.html
deleted file mode 100644 (file)
index 0d28b6e..0000000
+++ /dev/null
@@ -1,834 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-</head>
-<body>
-<h1>* Application SMS</h1>
-The SMS module for asterisk was developed by Adrian Kennard, and is an
-implementation of the ETSI specification for landline SMS, ETSI ES 201
-912, which is available from www.etsi.org. Landline SMS is starting to
-be available in various parts of Europe, and is available from BT in
-the UK. However, asterisk would allow gateways to be created in other
-locations such as the US, and use of SMS capable phones such as the
-Magic Messenger. SMS works using analogue or ISDN lines.<br>
-<h2>Background</h2>
-Short Message Service (SMS), or <span style="font-style: italic;">texting</span>
-is very popular between mobile phones. A message can be sent between
-two phones, and normally contains 160 characters. There are ways in
-which various types of data can be encoded in a text message such as
-ring tones, and small graphic, etc. Text messaging is being used for
-voting and competitions, and also SPAM...<br>
-<br>
-Sending a message involves the mobile phone contacting a message centre
-(SMSC) and passing the message to it. The message centre then contacts
-the destination mobile to deliver the message. The SMSC is responsible
-for storing the message and trying to send it until the destination
-mobile is available, or a timeout.<br>
-<br>
-Landline SMS works in basically the same way. You would normally have a
-suitable text capable landline phone, or a separate texting box such as
-a Magic Messenger on your phone line. This sends a message to a message
-centre your telco provides by making a normal call and sending the data
-using 1200 Baud FSK signaling according to the ETSI spec. To receive a
-message the message centre calls the line with a specific calling
-number, and the text capable phone answers the call and receives the
-data using 1200 Baud FSK signaling. This works particularly well in the
-UK as the calling line identity is sent before the first ring, so no
-phones in the house would ring when a message arrives.<br>
-<h2>Typical use with asterisk</h2>
-Sending messages from an asterisk box can be used for a variety of
-reasons, including notification from any monitoring systems, email
-subject lines, etc.<br>
-Receiving messages to an asterisk box is typically used just to email
-the messages to someone appropriate - we email and texts that are
-received to our direct numbers to the appropriate person. Received
-messages could also be used to control applications, manage
-competitions, votes, post items to IRC, anything.<br>
-Using a terminal such as a magic messenger, an asterisk box could ask
-as a message centre sending messages to the terminal, which will beep
-and pop up the message (and remember 100 or so messages in its memory).<br>
-<h2>Terminology</h2>
-<table style="text-align: left;" border="1" cellpadding="2"
- cellspacing="2">
-  <tbody>
-    <tr>
-      <td style="vertical-align: top;">SMS<br>
-      </td>
-      <td style="vertical-align: top;">Short Message Service<br>
-      </td>
-      <td style="vertical-align: top;">i.e. text messages<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">SMSC<br>
-      </td>
-      <td style="vertical-align: top;">Short Message Service Centre<br>
-      </td>
-      <td style="vertical-align: top;">The system responsible for
-storing and forwarding messages<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">MO<br>
-      </td>
-      <td style="vertical-align: top;">Mobile Originated<br>
-      </td>
-      <td style="vertical-align: top;">A message on its way from a
-mobile or landline device to the SMSC<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">MT<br>
-      </td>
-      <td style="vertical-align: top;">Mobile Terminated<br>
-      </td>
-      <td style="vertical-align: top;">A message on its way from the
-SMSC to the mobile or landline device<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">RX<br>
-      </td>
-      <td style="vertical-align: top;">Receive<br>
-      </td>
-      <td style="vertical-align: top;">A message coming in to the
-asterisk box<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">TX<br>
-      </td>
-      <td style="vertical-align: top;">Transmit<br>
-      </td>
-      <td style="vertical-align: top;">A message going out of the
-asterisk box<br>
-      </td>
-    </tr>
-  </tbody>
-</table>
-<h2>Sub address</h2>
-When sending a message to a landline, you simply send to the landline
-number. In the UK, all of the mobile operators (bar one) understand
-sending messages to landlines and pass the messages to the BTText
-system for delivery to the landline.<br>
-<br>
-The specification for landline SMS allows for the possibility of more
-than one device on a single landline. These can be configured with <span
- style="font-style: italic;">Sub addresses</span> which are a single
-digit. To send a message to a specific device the message is sent to
-the landline number with an extra digit appended to the end. The telco
-can define a default sub address (9 in the UK) which is used when the
-extra digit is not appended to the end. When the call comes in, part of
-the calling line ID is the sub address, so that only one device on the
-line answers the call and receives the message.<br>
-<br>
-Sub addresses also work for outgoing messages. Part of the number
-called by the device to send a message is its sub address. Sending from
-the default sub address (9 in the UK) means the message is delivered
-with the <span style="font-style: italic;">sender </span>being the
-normal landline number. Sending from any other sub address makes the <span
- style="font-style: italic;">sender</span> the landline number with an
-extra digit on the end.<br>
-<br>
-Using asterisk, you can make use of the sub addresses for sending and
-receiving messages. Using DDI (DID, i.e. multiple numbers on the line
-on ISDN) you can also make use of many different numbers for SMS.<br>
-<h2>Build / installation</h2>
-<span style="font-weight: bold;">app_sms.c</span> is included in 
-the Asterisk source <span
- style="font-weight: bold;">apps</span> directory and is included in
-the object list (<span style="font-weight: bold;">app_sms.so</span>) in
-<span style="font-weight: bold;">apps/Makefile</span>.<br>
-<span style="font-weight: bold;">smsq.c</span> is a stand alone helper
-application which is used to send SMSs from the command line. It uses
-the <span style="font-weight: bold;">popt</span> library. A line for
-your make file is:-<br>
-<pre>smsq: smsq.c<br>  cc -O -o smsq smsq.c -lpopt<br></pre>
-<span style="font-family: monospace;"></span>
-<h2>extensions.conf</h2>
-The following contexts are recommended.<br>
-<pre>; Mobile Terminated, RX. This is used when an incoming call from the SMS arrives, with the queue (called number and sub address) in ${EXTEN}<br>; Running an app after receipt of the text allows the app to find all messages in the queue and handle them, e.g. email them.<br>; The app may be something like   smsq --process=somecommand --queue=${EXTEN}  to run a command for each received message<br>; See below for usage<br>[smsmtrx]<br>exten = _X.,1, SMS(${EXTEN}|a)<br>exten = _X.,2,System("someapptohandleincomingsms ${EXTEN}")<br>exten = _X.,3,Hangup<br><br>; Mobile originated, RX. This is receiving a message from a device, e.g. a Magic Messenger on a sip extension<br>; Running an app after receipt of the text allows the app to find all messages in the queue and handle then, e.g. sending them to the public SMSC<br>; The app may be something like   smsq --process=somecommand --queue=${EXTEN}  to run a command for each received message<br>; See below for example usage<br>[smsmorx]<br>exten = _X.,1, SMS(${EXTEN}|sa)<br>exten = _X.,2,System("someapptohandlelocalsms ${EXTEN}")<br>exten = _X.,3,Hangup<span
- style="font-family: sans-serif;"></span><span
- style="font-family: sans-serif;"></span></pre>
-<span style="font-family: sans-serif;"></span><span
- style="font-weight: bold;">smsmtrx</span> is normally accessed by an
-incoming call from the SMSC. In the UK this call is from a CLI of
-080058752X0 where X is the sub address. As such a typical usage in the
-extensions.conf at the point of handling an incoming call is:-<br>
-<pre>exten = _X./8005875290,1,Goto(smsmtrx,${EXTEN},1)<br>exten = _X./_80058752[0-8]0,1,Goto(smsmtrx,${EXTEN}-${CALLERIDNUM:8:1},1)<br></pre>
-Alternatively, if you have the correct national prefix on incoming CLI,
-e.g. using zaphfc, you might use:-<br>
-<pre>exten = _X./08005875290,1,Goto(smsmtrx,${EXTEN},1)<br>exten = _X./_080058752[0-8]0,1,Goto(smsmtrx,${EXTEN}-${CALLERIDNUM:9:1},1)</pre>
-<span style="font-weight: bold;">smsmorx</span> is normally accessed by
-a call from a local sip device connected to a Magic Messenger. It could
-however by that you are operating asterisk as a message centre for
-calls from outside. Either way, you look at the called number and goto
-smsmorx. In the UK, the SMSC number that would be dialed is 1709400X
-where X is the caller sub address. As such typical usage in
-extension.config at the point of handling a call from a sip phone is:-<br>
-<pre>exten = 17094009,1,Goto(smsmorx,${CALLERIDNUM},1)<br>exten = _1709400[0-8],1,Goto(smsmorx,${CALLERIDNUM}-{EXTEN:7:1},1)<br></pre>
-<h2>Using smsq</h2>
-<span style="font-weight: bold;">smsq</span> is a simple helper
-application designed to make it easy to send messages from a command
-line. it is intended to run on the asterisk box and have direct access
-to the queue directories for SMS and for asterisk.<br>
-<br>
-In its simplest form you can send an SMS by a command such as <br>
-<br>
-smsq 0123456789 This is a test to 0123456789<br>
-<br>
-This would create a queue file for a mobile originated TX message in
-queue 0 to send the text "This is a test to 0123456789" to 0123456789.
-It would then place a file in the /var/spool/asterisk/outgoing
-directory to initiate a call to 17094009 (the default message centre in
-smsq) attached to application SMS with argument of the queue name (0).<br>
-<br>
-Normally smsq will queue a message ready to send, and will then create
-a file in the asterisk outgoing directory causing asterisk to actually
-connect to the message centre or device and actually send the pending
-message(s).<br>
-<br>
-Using --process, smsq can however be used on received queues to run a
-command for each file (matching the queue if specified) with various
-environment variables set based on the message (see below);<br>
-<br>
-smsq options:-<br>
-<br>
-<table style="text-align: left;" border="1" cellpadding="2"
- cellspacing="2">
-  <tbody>
-    <tr>
-      <td style="vertical-align: top;">--help</td>
-      <td style="vertical-align: top;"><br>
-      </td>
-      <td style="vertical-align: top;">Show help text<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--usage<br>
-      </td>
-      <td style="vertical-align: top;"><br>
-      </td>
-      <td style="vertical-align: top;">Show usage<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--queue<br>
-      </td>
-      <td style="vertical-align: top;">-q<br>
-      </td>
-      <td style="vertical-align: top;">Specify a specific queue<br>
-In no specified, messages are queued under queue "0"<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--da<br>
-      </td>
-      <td style="vertical-align: top;">-d<br>
-      </td>
-      <td style="vertical-align: top;">Specify destination address<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--oa<br>
-      </td>
-      <td style="vertical-align: top;">-o<br>
-      </td>
-      <td style="vertical-align: top;">Specify originating address<br>
-This also implies that we are generating a mobile terminated message<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--ud<br>
-      </td>
-      <td style="vertical-align: top;">-m<br>
-      </td>
-      <td style="vertical-align: top;">Specify the actual message<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--ud-file<br>
-      </td>
-      <td style="vertical-align: top;">-f<br>
-      </td>
-      <td style="vertical-align: top;">Specify a file to be read for
-the context of the message<br>
-A blank filename (e.g. --ud-file= on its own) means read stdin. Very
-useful when using via ssh where command line parsing could mess up the
-message.<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--mt<br>
-      </td>
-      <td style="vertical-align: top;">-t<br>
-      </td>
-      <td style="vertical-align: top;">Mobile terminated message to be
-generated<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--mo<br>
-      </td>
-      <td style="vertical-align: top;"><br>
-      </td>
-      <td style="vertical-align: top;">Mobile originated message to be
-generated<br>
-Default<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--tx<br>
-      </td>
-      <td style="vertical-align: top;"><br>
-      </td>
-      <td style="vertical-align: top;">Transmit message<br>
-Default<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--rx<br>
-      </td>
-      <td style="vertical-align: top;">-r<br>
-      </td>
-      <td style="vertical-align: top;">Generate a message in the
-receive queue<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--UTF-8<br>
-      </td>
-      <td style="vertical-align: top;"><br>
-      </td>
-      <td style="vertical-align: top;">Treat the file as UTF-8 encoded
-(default) </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--UCS-1<br>
-      </td>
-      <td style="vertical-align: top;"><br>
-      </td>
-      <td style="vertical-align: top;">Treat the file as raw 8 bit
-UCS-1 data, not UTF-8 encoded<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--UCS-2<br>
-      </td>
-      <td style="vertical-align: top;"><br>
-      </td>
-      <td style="vertical-align: top;">Treat the file as raw 16 bit
-bigendian USC-2 data<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--process<br>
-      </td>
-      <td style="vertical-align: top;"><br>
-      </td>
-      <td style="vertical-align: top;">Specific a command to process
-for each file in the queue<br>
-Implies --rx and --mt if not otherwise specified.<br>
-Sets environment variables for every possible variable,
-and also ud, ud8 (USC-1 hex), and ud16 (USC-2 hex) for each call.
-Removes files.<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--motx-channel<br>
-      </td>
-      <td style="vertical-align: top;"><br>
-      </td>
-      <td style="vertical-align: top;">Specify the channel for motx
-calls<br>
-May contain X to use sub address based on queue name or may be full
-number<br>
-Default is Local/1709400X<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--motx-callerid<br>
-      </td>
-      <td style="vertical-align: top;"><br>
-      </td>
-      <td style="vertical-align: top;">Specify the caller ID for motx
-calls<br>
-The default is the queue name without -X suffix<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--motx-wait<br>
-      </td>
-      <td style="vertical-align: top;"><br>
-      </td>
-      <td style="vertical-align: top;">Wait time for motx call<br>
-Default 10<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--motx-delay<br>
-      </td>
-      <td style="vertical-align: top;"><br>
-      </td>
-      <td style="vertical-align: top;">Retry time for motx call<br>
-Default 1<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--motx-retries<br>
-      </td>
-      <td style="vertical-align: top;"><br>
-      </td>
-      <td style="vertical-align: top;">Retries for motx call<br>
-Default 10<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--mttx-channel<br>
-      </td>
-      <td style="vertical-align: top;"><br>
-      </td>
-      <td style="vertical-align: top;">Specify the channel for mttx
-calls<br>
-Default is Local/ and the queue name without -X suffix<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--mtttx-callerid<br>
-      </td>
-      <td style="vertical-align: top;"><br>
-      </td>
-      <td style="vertical-align: top;">Specify the callerid for mttx
-calls<br>
-May include X to use sub address based on queue name or may be full
-number<br>
-Default is 080058752X0<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--mttx-wait<br>
-      </td>
-      <td style="vertical-align: top;"><br>
-      </td>
-      <td style="vertical-align: top;">Wait time for mttx call<br>
-Default 10<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--mttx-delay<br>
-      </td>
-      <td style="vertical-align: top;"><br>
-      </td>
-      <td style="vertical-align: top;">Retry time for mttx call<br>
-Default 30<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--mttx-retries<br>
-      </td>
-      <td style="vertical-align: top;"><br>
-      </td>
-      <td style="vertical-align: top;">Retries for mttx call<br>
-Default 100<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--default-sub-address<br>
-      </td>
-      <td style="vertical-align: top;"><br>
-      </td>
-      <td style="vertical-align: top;">The default sub address assumed
-(e.g. for X in CLI and dialled numbers as above) when none added (-X)
-to queue<br>
-Default 9<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--no-dial<br>
-      </td>
-      <td style="vertical-align: top;">-x<br>
-      </td>
-      <td style="vertical-align: top;">Create queue, but do not dial to
-send message<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--no-wait<br>
-      </td>
-      <td style="vertical-align: top;"><br>
-      </td>
-      <td style="vertical-align: top;">Do not wait if a call appears to
-be in progress<br>
-This could have a small window where a mesdsage is queued but not sent,
-so regular calls to smsq should be done to pick up any missed messages<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--concurrent<br>
-      </td>
-      <td style="vertical-align: top;"><br>
-      </td>
-      <td style="vertical-align: top;">How many concurrent calls to
-allow (per queue), default 1<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--mr<br>
-      </td>
-      <td style="vertical-align: top;">-n<br>
-      </td>
-      <td style="vertical-align: top;">Message reference<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--pid<br>
-      </td>
-      <td style="vertical-align: top;">-p<br>
-      </td>
-      <td style="vertical-align: top;">Protocol ID<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--dcs<br>
-      </td>
-      <td style="vertical-align: top;"><br>
-      </td>
-      <td style="vertical-align: top;">Data coding scheme<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--udh<br>
-      </td>
-      <td style="vertical-align: top;"><br>
-      </td>
-      <td style="vertical-align: top;">Specific hex string of user data
-header specified (not including the initial length byte)<br>
-May be a blank string to indicate header is included in the user data
-already but user data header indication to be set.<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--srr<br>
-      </td>
-      <td style="vertical-align: top;"><br>
-      </td>
-      <td style="vertical-align: top;">Status report requested<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--rp<br>
-      </td>
-      <td style="vertical-align: top;"><br>
-      </td>
-      <td style="vertical-align: top;">Return path requested<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--vp<br>
-      </td>
-      <td style="vertical-align: top;"><br>
-      </td>
-      <td style="vertical-align: top;">Specify validity period (seconds)<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--scts<br>
-      </td>
-      <td style="vertical-align: top;"><br>
-      </td>
-      <td style="vertical-align: top;">Specify timestamp
-(YYYY-MM-DDTHH:MM:SS)<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">--spool-dir<br>
-      </td>
-      <td style="vertical-align: top;"><br>
-      </td>
-      <td style="vertical-align: top;">Spool dir (in which sms and
-outgoing are found)<br>
-Default /var/spool/asterisk<br>
-      </td>
-    </tr>
-  </tbody>
-</table>
-<p>Other arguments starting '-' or '--' are invalid and will cause an
-error. Any trailing arguments are processed as follows:-<br>
-</p>
-<ul>
-  <li>If the message is mobile originating and no destination address
-has been specified, then the first argument is assumed to be a
-destination address</li>
-  <li>If the message is mobile terminating and no destination address
-has been specified, then the first argument is assumed to be the queue
-name</li>
-  <li>If there is no user data, or user data file specified, then any
-following arguments are assumed to be the message, which are
-concatenated.</li>
-  <li>If no user data is specified, then no message is sent. However,
-unless --no-dial is specified, smsq checks for pending messages and
-generates an outgoing anyway</li>
-</ul>
-Note that when smsq attempts to make a file in
-/var/spool/asterisk/outgoing, it checks if there is already a call
-queued for that queue. It will try several filenames, up to the
---concorrent setting. If these files
-exists, then this means asterisk is already queued to send all messages
-for that queue, and so asterisk should pick up the message just queued.
-However, this alone could create a race condition, so if the files
-exist then smsq will wait up to 3 seconds to confirm it still exists or
-if the queued messages have been sent already.
-The --no-wait turns off this behaviour. Basically, this means that if
-you have a lot of messages to send all at
-once, asterisk will not make unlimited concurrent calls to the same
-message centre or device for the same queue. This is because it is
-generally more efficient to make one call and send all of the messages
-one after the other.<br>
-<br>
-smsq can be used with no arguments, or with a queue name only, and it
-will check for any pending messages and cause an outgoing if there are
-any. It only sets up one outgoing call at a time based on the first
-queued message it finds. A outgoing call will normally send all queued
-messages for that queue. One way to use smsq would be to run with no
-queue name (so any queue) every minute or every few seconds to send
-pending message. This is not normally necessary unless --no-dial is
-selected. Note that smsq does only check motx or mttx depending on the
-options selected, so it would need to be called twice as a general
-check.<br>
-<br>
-UTF-8 is used to parse command line arguments for user data, and is the
-default when reading a file. If an invalid UTF-8 sequence is found, it
-is treated as UCS-1 data (i.e, as is).<br>
-<br>
-The --process option causes smsq to scan the specified queue (default
-is mtrx) for messages (matching the queue specified, or any if queue
-not specified) and run a command and delete the file. The command is
-run with a number of environment variables set as follows. Note that
-these are unset if not needed and not just taken from the calling
-environment. This allows simple processing of incoming messages<br>
-<br>
-<table style="text-align: left;" border="1" cellpadding="2"
- cellspacing="2">
-  <tbody>
-    <tr>
-      <td style="vertical-align: top;">$queue<br>
-      </td>
-      <td style="vertical-align: top;">Set if a queue specified<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">$?srr<br>
-      </td>
-      <td style="vertical-align: top;">srr is set (to blank) if srr
-defined and has value 1.<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">$?rp<br>
-      </td>
-      <td style="vertical-align: top;">rp is set (to blank) if rp
-defined and has value 1.<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">$ud<br>
-      </td>
-      <td style="vertical-align: top;">User data, UTF-8 encoding,
-including any control characters, but with nulls stripped out<br>
-Useful for the content of emails, for example, as it includes any
-newlines, etc.<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">$ude<br>
-      </td>
-      <td style="vertical-align: top;">User data, escaped UTF-8,
-including all characters, but control characters \n, \r, \t, \f, \xxx
-and \ is escaped as \\<br>
-Useful fGuaranteed one line printable text, so useful in Subject lines
-of emails, etc<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">$ud8<br>
-      </td>
-      <td style="vertical-align: top;">Hex UCS-1 coding of user data (2
-hex digits per character)<br>
-Present only if all user data is in range U+0000 to U+00FF<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">$ud16<br>
-      </td>
-      <td style="vertical-align: top;">Hex UCS-2 coding of user data (4
-hex digits per chartacter)<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;"><span style="font-style: italic;">other</span><br>
-      </td>
-      <td style="vertical-align: top;">Other fields set using their
-field name, e.g. mr, pid, dcs, etc. udh is a hex byte string<br>
-      </td>
-    </tr>
-  </tbody>
-</table>
-<h2>File formats</h2>
-By default all queues are held in a director /var/spool/asterisk/sms.
-Within this directory are sub directories mtrx, mttx, morx, motx which
-hold the received messages and the messages ready to send. Also,
-/var/log/asterisk/sms is a log file of all messages handled.<br>
-<br>
-The file name in each queue directory starts with the queue parameter
-to SMS which is normally the CLI used for an outgoing message or the
-called number on an incoming message, and may have -X (X being sub
-address) appended. If no queue ID is known, then 0 is used by smsq by
-default. After this is a dot, and then any text. Files are scanned for
-matching queue ID and a dot at the start. This means temporary files
-being created can be given a different name not starting with a queue
-(we recommend a . on the start of the file name for temp files).<br>
-<br>
-Files in these queues are in the form of a simple text file where each
-line starts with a keyword and an = and then data. udh and ud have
-options for hex encoding, see below.<br>
-<br>
-UTF-8. The user data (ud) field is treated as being UTF-8 encoded
-unless the DCS is specified indicating 8 bit formart. If 8 bit format
-is specified then the user data is sent as is.<br>
-<br>
-The keywords are as
-follows:-<br>
-<table style="text-align: left;" border="1" cellpadding="2"
- cellspacing="2">
-  <tbody>
-    <tr>
-      <td style="vertical-align: top;">oa</td>
-      <td style="vertical-align: top;">Originating address<br>
-The phone number from which the message came<br>
-Present on mobile terminated messages and is the CLI for morx messages<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">da<br>
-      </td>
-      <td style="vertical-align: top;">Destination Address<br>
-The phone number to which the message is sent<br>
-Present on mobile originated messages<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">scts<br>
-      </td>
-      <td style="vertical-align: top;">The service centre time stamp<br>
-Format YYYY-MM-DDTHH:MM:SS<br>
-Present on mobile terminated messages<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">pid<br>
-      </td>
-      <td style="vertical-align: top;">One byte decimal protocol ID<br>
-See GSM specs for more details<br>
-Normally 0 or absent<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">dcs<br>
-      </td>
-      <td style="vertical-align: top;">One byte decimal data coding
-scheme<br>
-If omitted, a sensible default is used (see below)<br>
-See GSM specs for more details<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">mr<br>
-      </td>
-      <td style="vertical-align: top;">One byte decimal message
-reference<br>
-Present on mobile originated messages, added by default if absent<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">srr<br>
-      </td>
-      <td style="vertical-align: top;">0 or 1 for status report request<br>
-Does not work in UK yet, not implemented in app_sms yet<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">rp<br>
-      </td>
-      <td style="vertical-align: top;">0 or 1 return path<br>
-See GSM specs for details<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">vp<br>
-      </td>
-      <td style="vertical-align: top;">Validity period in seconds<br>
-Does not work in UK yet<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">udh<br>
-      </td>
-      <td style="vertical-align: top;">Hex string of user data header
-prepended to the SMS contents, excluding initial length byte.<br>
-Consistent with ud, this is specified as udh# rather than udh=<br>
-If blank, this means that the udhi flag will be set but any user data
-header must be in the ud field<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">ud<br>
-      </td>
-      <td style="vertical-align: top;">User data, may be text, or hex,
-see below<br>
-      </td>
-    </tr>
-  </tbody>
-</table>
-<br>
-udh is specified as as udh# followed by hex (2 hex digits per byte). If
-present, then the user data header indicator bit is set, and the length
-plus the user data header is added to the start of the user data, with
-padding if necessary (to septet boundary in 7 bit format).<br>
-<br>
-User data can hold an USC character codes U+0000 to U+FFFF. Any other
-characters are coded as U+FEFF<br>
-ud can be specified as ud= followed by UTF-8 encoded text if it
-contains no control characters, i.e. only (U+0020 to U+FFFF). Any
-invalid UTF-8 sequences are treated as is (U+0080-U+00FF).<br>
-ud can also be specified as ud# followed by hex (2 hex digits per byte)
-containing characters U+0000 to U+00FF only.<br>
-ud can also be specified as ud## followed by hex (4 hex digits per
-byte) containing UCS-2 characters.<br>
-When written by app_sms (e.g. incoming messages), the file is written
-with ud= if it can be (no control characters). If it cannot, the a
-comment line ;ud= is used to show the user data for human readability
-and ud# or ud## is used.<br>
-<h2>Delivery reports</h2>
-The SMS specification allows for delivery reports. These are requested
-using the srr bit. However, as these do not work in the UK yet they are
-not fully implemented in this application. If anyone has a telco that
-does implement these, please let me know. BT in the UK have a non
-standard way to do this by starting the message with *0#, and so this
-application may have a UK specific bodge in the near future to handle
-these.<br>
-<br>
-The main changes that are proposed for delivery report handling are :-<br>
-<ul>
-  <li>New queues for sent messages, one file for each destination
-address and message reference.</li>
-  <li>New field in message format, user reference, allowing
-applications to tie up their original message with a report.</li>
-  <li>Handling of the delivery confirmation/rejection and connecting to
-the outgoing message - the received message file would then have fields
-for the original outgoing message and user reference allowing
-applications to handle confirmations better.<br>
-  </li>
-</ul>
-<br>
-</body>
-</html>