Kannel Sqlbox
Kannel Sqlbox
03 Users Guide
SQL-Based queue engine for Kannel
Renee Kluwen
Sqlbox Author Chimit rene.kluwen at chimit dot nl http://www.chimit.nl/
Martin Conte
Standalone Version and Patches reejo at gmail dot com
Alejandro Guerrieri
Maintainer, Documentation and Patches Magicom aguerrieri at kannel dot org http://www.blogalex.com/
sqlbox cvs-2008.11.03 Users Guide : SQL-Based queue engine for Kannel by Renee Kluwen, Martin Conte, and Alejandro Guerrieri
Abstract This document describes how to install and use sqlbox, the SQL-Based queue engine for Kannel.
Table of Contents
1. Introduction............................................................................................................................................1 Overview ............................................................................................................................................1 Features ..............................................................................................................................................1 Requirements .....................................................................................................................................1 2. Installing sqlbox .....................................................................................................................................3 Getting the source code......................................................................................................................3 Finding the documentation.................................................................................................................3 Compiling sqlbox ...............................................................................................................................3 Installing Sqlbox ................................................................................................................................4 Using pre-compiled binary packages .................................................................................................5 Installing Sqlbox from RPM packages.....................................................................................5 Installing Sqlbox from DEB packages .....................................................................................5 3. Using sqlbox ...........................................................................................................................................6 Conguring Sqlbox ............................................................................................................................6 Conguration le syntax ..........................................................................................................6 Inclusion of conguration les.................................................................................................7 Sqlbox conguration ................................................................................................................7 The DB Connection ...........................................................................................................................9 Database Connection Conguration.........................................................................................9 MySQL Storage......................................................................................................................10 PostgreSQL Storage ...............................................................................................................10 Running Sqlbox................................................................................................................................11 Starting the box.......................................................................................................................11 Command line options............................................................................................................11 Database Tables ......................................................................................................................12 Inserting MT messages by SQL.......................................................................................................12 Database Structure..................................................................................................................13 Example..................................................................................................................................19 4. Getting help and reporting bugs.........................................................................................................20 A. Upgrading notes ..................................................................................................................................21 Upgrading from different sqlbox versions .......................................................................................21
iv
List of Tables
3-1. Sqlbox Group Variables........................................................................................................................8 3-2. Sqlbox Database connection conguration variables...........................................................................9 3-3. Sqlbox Command Line Options .........................................................................................................11 3-4. Sqlbox Database structure ..................................................................................................................13
Chapter 1. Introduction
Sqlbox is a special Kannel box that sits between bearerbox and smsbox and uses a database queue to store and forward messages.
Overview
Sqlbox behaves similar to other Kannel boxes and share a compatible conguration le format and command line options. It works between bearerbox and smsbox, intercept all messages and use a couple of database tables to process messages. Messages are queued on a congurable table (defaults to send_sms) and moved to another table (defaults to sent_sms) afterwards. You can also manually insert messages into the send_sms table and they will be sent and moved to the sent_sms table as well. This allows for fast and easy injection of large amounts of messages into kannel.
Features
Modular architecture: Easily integrates into Kannel infrastructure. Compatible conguration le format and command line arguments. Supports most Kannel features.
Requirements
sqlbox is being developed on Linux and OSX systems, and should be fairly easy to export to other Unix-like systems. However, we dont yet support other platforms, due to lack of time, although it should be working without major problems on Windows (through Cygwin), Mac OSX, Solaris and FreeBSD. sqlbox requires the following software environment:
Kannel libraries (gwlib) installed. C compiler and libraries for ANSI C, with normal Unix extensions such as BSD sockets and related tools. (GNUs GCC tool-chain is recommended) GNU Make. An implementation of POSIX threads ( pthread.h ).
Chapter 1. Introduction
DocBook processing tools: DocBook style-sheets, jade, jadetex, etc; see README , section Documentation, for more information (pre-formatted versions of the documentation are available, and you can compile Sqlbox itself even without the documentation tools). GNU autoconf
1. Users Guide , i.e., the one youre reading at the moment. 2. The README and various other text les in the source tree.
You can also nd general information on Kannels website (http://www.kannel.org) and information about existing problems at our bugtracker (http://bugs.kannel.org) . We intend to cover everything you need to install and use Sqlbox is in Users Guide , but the guide is still incomplete in this respect. The README is not supposed to be very important, nor contain much information. Instead, it will just point at the other documentation.
Compiling sqlbox
If you are using Sqlbox on a supported platform, or one that is similar enough to one, compiling Sqlbox should be trivial. After you have unpacked the source package of your choose, or after you have checked
Chapter 2. Installing sqlbox out the source code from CVS, enter the following commands:
./bootstrap ./configure make
The bootstrap script uses autoconf to generate the les needed to build the module. The configure script investigates various things on your computer for the Sqlbox compilation needs, and writes out the Makefile used to compile the module. make then runs the commands to actually compile it. If either command writes out an error message and stops before it nishes its job, you have a problem, and you either need to x it yourself, if you can, or report the problem to the Kannel project. See Chapter 4 for details. For detailed instruction on using the conguration script, see le INSTALL . That le is a generic documentation for congure . Sqlbox denes a few additional options:
--with-kannel-dir= DIR
Where to look for Kannel Gateway libs and header les DIR points to the Kannel installation directory. Defaults to /usr/local Use this option if you dont have DocBook installed and/or you want to save some time and CPU cycles. Pre-generated documentation is available on Kannels site. Default behavior is to build documentation, b.e., converting the User Guide from the DocBook markup language to PostScript and HTML if DocBook is available. When building documentation, include the sections marked as draft .
--with-ctlib=DIR
/opt/sybase.
--with-freetds=DIR Include FreeTDS Ct-Lib support. DIR is the FreeTDS install directory,
defaults to /usr/local.
The above, for instance, seems to be required on FreeBSD. If you want to develop Sqlbox, you probably want to add CFLAGS that make your compiler use warning messages. For example, for GCC:
CFLAGS=-Wall -O2 -g ./configure
Installing Sqlbox
After you have compiled Kannel, you need to install the sqlbox binary in a suitable place. This is most easily done by using make again:
make bindir=/path/to/directory install
Replace /path/to/directory with the pathname of the actual directory where the programs should be installed. This install the sqlbox binary:
gw/sqlbox
Conguring Sqlbox
The conguration le can be divided into two parts: sqlbox conguration and database connection. Details of each part are in appropriate sections later on this documentation.
Conguration le syntax
The syntax used for the conguration le is the same used in Kannel. Skip this section if you are already familiar with it. Otherwise, keep on reading: A conguration le consists of groups of conguration variables. Groups are separated by empty lines, and each variable is dened on its own line. Each group in Sqlbox conguration is distinguished with a group variable. Comments are lines that begin with a number sign ( # ) and are ignored (they dont, for example, separate groups of variables). A variable denition line has the name of the variable, and equals sign ( = ) and the value of the variable. The name of the variable can contain any characters except whitespace and equals. The value of the variable is a string, with or without quotation marks ( ) around it. Quotation marks are needed if the variable needs to begin or end with whitespace or contain special characters. Normal C escape character syntax works inside quotation marks. Perhaps an example will make things easier to comprehend:
01 # Sqlbox configuration 02 group = sqlbox 03 id = "my-sqlbox" 04 smsbox-id = "sqlbox" ... 11 log-level = 0 12 log-file = "/var/log/kannel/kannel-sqlbox.log" 13 14 #MySQL Connection 15 group = mysql-connection 16 id = "my-sqlbox" 17 host = localhost ...
The above snippet denes an sqlbox instance with id my-sqlbox that identies with bearerbox as sqlbox and also sets the log-level and le location. It also denes a MySQL connection to localhost. Lines 1 and 14 are comment lines. Line 13 separates the two groups. The remaining lines dene variables. The group type is dened by the group variable value.
Chapter 3. Using sqlbox The various variables that are understood in each type of conguration group are explained below. Some variable values are marked as bool. The value for variable can be like true, false, yes, no, on, off, 0 or 1. Other values are treated as true while if the variable is not present at all, it is treated as being false.
Above is the main sqlbox.conf conguration le that includes the following dbconn.conf le with all required directives for the database connection.
group = mysql-connection id = my-sqlbox host = localhost username = myuser password = mypass database = kannel
The above include statement may be dened at any point in the conguration le and at any inclusion depth. Hence you can cascade numerous inclusions if necessary. At process start time inclusion of conguration les breaks if either the included le can not be opened and processed or the included le has been processed already in the stack and a recursive cycling has been detected.
Sqlbox conguration
The conguration le MUST always include an sqlbox group for general conguration. This group should be the rst group in the conguration le. As its simplest form, sqlbox group looks like this:
group = sqlbox id = sqlbox bearerbox-port = 13001
Chapter 3. Using sqlbox Naturally this is usually not sufcient for any real use. Thus, one or more of the optional conguration variables are used. In following list (as in any other similar lists), all mandatory variables are marked with (m), while conditionally mandatory (variables which must be set in certain cases) are marked with (c) . Table 3-1. Sqlbox Group Variables Variable
group (m) smsbox-id (m)
Value
sqlbox
Description This is a mandatory variable This is the box id. If no explicit number is given, this number is used when sending messages. This is the host where bearerbox is running. This is the port number used to connect to bearerbox. This is the port number to which the smsboxes, if any, connect. This can be anything you want. Must be set if you want to handle any SMS trafc. If set to true, the smsbox connection module will be SSL-enabled. Your smsboxes will have to connect using SSL to sqlbox then. This is used to secure communication between sqlbox and smsboxes in case they are in separate networks operated and the TCP communication is not secured on a lower network layer. Defaults to "no". Indicates the table where messages are copied after being sent. Defaults to sent_sms. Indicates the table where messages should be inserted to sent. Defaults to send_sms. A le in which to write a log. This in addition to stdout and any log le dened in command line.
string
smsbox-port (c)
port-number
smsbox-port-ssl (o)
bool
sql-log-table
table-name
sql-insert-table
table-name
log-file
lename
Chapter 3. Using sqlbox Variable Value Description Minimum level of log-le events logged. 0 is for debug, 1 info, 2 warning, 3 error and 4 panic (see Command Line Options)
log-level
number 0..5
The DB Connection
sqlbox needs a connection to a supported DB engine to operate. This connection is established at
startup time and kept open until the box stops. At the moment, sqlbox only supports MySQL and PostgreSQL, with support for other engines being planned. The process of conguring a DB connection is simple: You need to create a [engine]-connection section (where [engine] is the DB engine name, either mysql or pgsql) and indicate a few parameters needed to establish the DB connection.
group
mysql-connection
group
pgsql-connection
Chapter 3. Using sqlbox Variable Value Description An id to identify which external connection should be used for Sqlbox storage. Any string is acceptable, but semicolon ; may cause problems, so avoid it and any other special non-alphabet characters. The hostname where the DB engine is running. The username used to connect to the DB engine. The password used to connect to the DB engine. The database name to use to store the data. Create a pool with this number of connections open.
id (m) host (m) username (m) password (m) database (m) max-connections
MySQL Storage
Uses a MySQL database to store the data. You need to specify the mysql-connection group. Here is an example conguration:
group = mysql-connection id = my-sqlbox host = localhost username = foo password = bar database = kannel max-connections = 1
PostgreSQL Storage
Uses a PostgreSQL database to store the data. You need to specify the pgsql-connection group. Here is an example conguration:
group = pgsql-connection id = pg-sqlbox host = localhost username = foo password = bar database = kannel max-connections = 1
10
Running Sqlbox
You need to start sqlbox after starting the bearerbox, otherwise it wont have a port open to connect to. The preferred way to do this is to include sqlbox into your Kannels startup script.
The -v 1 sets the logging level to INFO. This way, you wont see a large amount of debugging output (the default is DEBUG). Full explanation of Sqlbox command line arguments is below. [cong-le] is the name of the conguration le you are using with Sqlbox. The basic distribution packet comes with a sample conguration le you can use with some minor tweakings (check on the /examples folder. Feel free to edit the le to suit your needs. Of course you need to have the bearerbox running before starting the box. Without the bearer box, sqlbox wont even start.
Log to le named le-name, too. Does not overrun or affect any log-le dened in conguration le.
Set verbosity level for that extra log-le (default 0, which means debug). Does not affect verbosity level of the log-le dened in conguration le, not verbosity level of the stdout output. Only try to open HTTP sendsms interface; if it fails, only warn about that, do not exit. (smsbox only)
-H
11
--tryhttp
-g --generate
Dump all known cong groups and cong keys to stdout and exit.
-d --daemonize
Start process as daemon (detached from a current shell session). Note: Process will change CWD (Current working directory) to /, therefore you should ensure that all paths to binary/cong/cong-includes are absolute instead of relative. Start watcher process. This process watch a child process and if child process crashed will restart them automatically. Execute a given shell script or binary when child process crash detected. This option is usable only with --parachute/-P. Script will be executed with 2 arguments: scriptname processname respawn-count.
-P --parachute
Database Tables
Sqlbox creates its DB tables on the y if the tables are not present at that moment. If youre upgrading from a previous version, or happen to have tables with the same names as the ones Sqlbox uses, but having a different structure, this will probably cause problems and theres a good chance the process will panic and stop. In that case, rename/drop the offending tables or change the names Sqlbox uses by using the sql-log-table and sql-insert-table variables.
12
Chapter 3. Using sqlbox only need to care about send_sms. Sqlbox will move messages to the sent_sms table autmatically after processing it.
Database Structure
The tables structure is as follows: Table 3-4. Sqlbox Database structure Value Type Description This is the auto-incremented PRIMARY KEY and should be always left alone. Set it to NULL or do not include it in your INSERT query. Species if the message is either MO or MT. You should always use "MT" here. Phone number of the sender. If this variable is not set, sqlbox global-sender is used. Phone number of the receiver. Contents of the message, URL encoded as necessary. The content can be more than 160 characters, but then Kannels sendsms-user group must have max-messages set more than 1. Optional User Data Header (UDH) part of the message. Must be URL encoded.
sendsms equivale
sql_id
BIGINT(20)
momt
ENUM(MO, MT)
sender receiver
VARCHAR(20) VARCHAR(20)
from to
msgdata
TEXT
text
udhdata
BLOB
udh
13
time
BIGINT(20)
An integer timestamp. You can uses UNIX_TIMESTAMP() on MySQL or any similar function here. You can also leave the eld empty/alone if you dont care about having a timestamp on your messages. Optional virtual smsc-id from which the message is supposed to have arrived. This is used for routing purposes, if any denied or preferred SMS centers are set up in SMS center conguration. This variable can be overridden on Kannel with a forced-smsc conguration variable. Likewise, the
default-smsc
smsc_id
VARCHAR(255)
variable can be used to set the SMSC if it is not set otherwise. Optional. Service name from which the message is supposed to have arrived. This eld is logged as SVC in the log le so it allows you to do some accounting on it if your front end uses the same username for all services but wants to distinguish them in the log.
smsc
service
VARCHAR(255)
smsc
14
account
VARCHAR(255)
Optional. Account name or number to carry forward for billing purposes. This eld is logged as ACT in the log le so it allows you to do some accounting on it if your front end uses the same username for all services but wants to distinguish them in the log. In the case of a HTTP SMSC type the account name is prepended with the service-name (username) and a colon (:) and forwarded to the next instance of Kannel. This allows hierarchical accounting. Kannels internal message identier. This have no meaning when youre inserting your own messages, since Kannel doesnt have an identier on your message yet. Leave it alone. A numeric value indicating if its an MO, MT or DLR message. ALWAYS INSERT A "2" HERE (Meaning: MT), OTHERWISE KANNELS QUEUE WILL GET CORRUPTED IF YOU RESTART IT AND YOU HAVE PENDING MESSAGES.
account
id
BIGINT(20)
sms_type
BIGINT(20)
15
mclass
BIGINT(20)
Optional. Sets the Message Class in DCS eld. Accepts values between 0 and 3, for Message Class 0 to 3, A value of 0 sends the message directly to display, 1 sends to mobile, 2 to SIM and 3 to SIM toolkit. Optional. Sets Message Waiting Indicator bits in DCS eld. If given, the message will be encoded as a Message Waiting Indicator. The accepted values are 0,1,2 and 3 for activating the voice, fax, email and other indicator, or 4,5,6,7 for deactivating, respectively. a Optional. Sets the coding scheme bits in DCS eld. Accepts values 0 to 2, for 7bit, 8bit or UCS-2. If unset, defaults to 7 bits unless a udh is dened, which sets coding to 8bits. Optional. Sets the Compression bit in DCS Field.
mclass
mwi
BIGINT(20)
mwi
coding
BIGINT(20)
coding
compress
BIGINT(20)
compress
16
validity
BIGINT(20)
Optional. If given, Kannel will inform SMS Center that it should only try to send the message for this many minutes. If the destination mobile is off other situation that it cannot receive the sms, the smsc discards the message. Note: you must have your Kannel box time synchronized with the SMS Center. Optional. If given, the SMS center will postpone the message to be delivered at now plus this many minutes. Note: you must have your Kannel box time synchronized with the SMS Center. Optional. Request for delivery reports with the state of the sent message. The value is a bit mask composed of: 1: Delivered to phone, 2: Non-Delivered to Phone, 4: Queued on SMSC, 8: Delivered to SMSC, 16: Non-Delivered to SMSC. Must set dlr-url on sendsms-user group or use the sendsms dlr-url variable or Sqlbox column. Optional. If dlr-mask is given, this is the url to be fetched. (Must be url-encoded)
validity
deferred
BIGINT(20)
deferred
dlr-mask
BIGINT(20)
dlr-mask
dlr-url
VARCHAR(255)
dlr-url
17
Optional. Sets the PID value. (See ETSI Documentation). Ex: SIM Toolkit messages would use something like pid=127,
coding=1, alt-dcs=1, mclass=3
pid
BIGINT(20)
pid
alt-dcs
BIGINT(20)
Optional. If unset, Kannel uses the alt-dcs dened on smsc conguration, or 0X per default. If equals to 1, uses FX. If equals to 0, force 0X. Optional. Sets the Return Path Indicator (RPI) value. (See ETSI Documentation). Charset of text message. Used to convert to a format suitable for 7 bits or to UCS-2. Defaults to WINDOWS-1252 if coding is 7bits and UTF-16BE if coding is UCS-2. The bearerbox ID that should handle this message. You can usually leave this one alone.
alt-dcs
rpi
BIGINT(20)
rpi
charset
VARCHAR(255)
charset
boxc_id
VARCHAR(255)
charset
18
binfo
VARCHAR(255)
Optional. Billing identier/information proxy eld used to pass arbitrary billing transaction IDs or information to the specic SMSC modules. For EMI2 this is encapsulated into the XSer 0c eld, for SMPP this is encapsulated into the service_type of the submit_sm PDU.
binfo
not empty.
Example
As when youre using the sendsms interface, you dont need to specify all the columns in order to succesfully enqueue a message. Heres an example query you can use to send a simple message using Sqlbox:
INSERT INTO send_sms ( momt, sender, receiver, msgdata, sms_type ) VALUES ( MT, 1234, 1234567890, Hello world, 2 );
The former example would send a message with text "Hello world" to number "1234567890". If possible, the sender would be set to "1234". You can add other parameters to specify routing, charset encoding and any other settings your setup may require. Just remember, try to keep it simple whenever possible
19
20
21