Sqlbox is a special Kannel box that sits between bearerbox and smsbox and uses a database queue to store and forward messages.
Sqlbox behaves similar to other Kannel boxes and share a compatible configuration file 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 configurable 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. Modular architecture: Easily integrates into Kannel infrastructure.Compatible configuration file format and command line arguments.Supports most Kannel features. sqlbox is being developed on Linux and OSX systems, and should be fairly easy to export to other Unix-like systems. However, we don't 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. (GNU's GCC tool-chain is recommended)GNU Make. An implementation of POSIX threads ( pthread.h ). 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 This chapter explains how to build and install sqlbox from source or from a binary package. The goal of this chapter is to get the module compiled and all the files in the correct places; the next chapter will explain how to configure it. If you are upgrading from a previous version, please look at for any important information. The source code to Sqlbox is available for download at . It is available in various formats and you can choose to download either the latest release version or the daily snapshot of the development source tree for the next release version, depending on whether you want to use Sqlbox for production use or to participate in the development. If you're serious about development, you probably want to use CVS, the version control system used by the Kannel project. This allows you to participate in Sqlbox development much more easily than by downloading the latest release and integrating any changes you've made every day. CVS does that for you. (See the Kannel web site for more information on how to use CVS.) The documentation for Sqlbox consists of two parts: User's Guide , i.e., the one you're reading at the moment. The README and various other text files in the source tree. You can also find general information on Kannel's and information about existing problems at . We intend to cover everything you need to install and use Sqlbox is in User's 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. 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 out the source code from CVS, enter the following commands: ./bootstrap ./configure make The bootstrap script uses autoconf to generate the files 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 finishes its job, you have a problem, and you either need to fix it yourself, if you can, or report the problem to the Kannel project. See for details. For detailed instruction on using the configuration script, see file INSTALL . That file is a generic documentation for configure . Sqlbox defines a few additional options: --with-kannel-dir= DIR Where to look for Kannel Gateway libs and header files DIR points to the Kannel installation directory. Defaults to /usr/local --disable-docs (default is --enable-docs) Use this option if you don't have DocBook installed and/or you want to save some time and CPU cycles. Pre-generated documentation is available on Kannel's 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. --enable-drafts (default is --disable-drafts) When building documentation, include the sections marked as draft . --with-ctlib=DIR Include Ct-Lib support. DIR is the Ct-Lib install directory, defaults to /opt/sybase. --with-freetds=DIR Include FreeTDS Ct-Lib support. DIR is the FreeTDS install directory, defaults to /usr/local. You may need to add compilations flags to configure: CFLAGS='-pthread' ./configure 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 (You may, at your preference, use even stricter checking options.) 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 To be doneTo be doneTo be doneThis chapter explains how to configure and run Sqlbox and also how to tell if it's running from Kannel's HTTP interface.There is only one configuration file for Sqlbox, and that file commands all aspects of its execution.The configuration file can be divided into two parts: sqlbox configuration and database connection.Details of each part are in appropriate sections later on this documentation.The syntax used for the configuration file is the same used in Kannel. Skip this section if you are already familiar with it. Otherwise, keep on reading: A configuration file consists of groups of configuration variables. Groups are separated by empty lines, and each variable is defined on its own line. Each group in Sqlbox configuration is distinguished with a group variable. Comments are lines that begin with a number sign ( # ) and are ignored (they don't, for example, separate groups of variables). A variable definition 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 defines an sqlbox instance with id my-sqlbox that identifies with bearerbox as sqlbox and also sets the log-level and file location. It also defines a MySQL connection to localhost. Lines 1 and 14 are comment lines. Line 13 separates the two groups. The remaining lines define variables. The group type is defined by the group variable value.The various variables that are understood in each type of configuration 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'. A configuration file may contain a special directive called include to include other file or a directory with files to the configuration processing. This allows to segment the specific configuration groups required for several services and boxes to different files and hence to have more control in larger setups. Here is an example that illustrates the include statement : group = sqlbox id = my-sqlbox smsbox-id = sqlbox ... log-file = "/var/log/kannel/kannel-sqlbox.log" log-level = 0 include = "dbconn.conf" Above is the main sqlbox.conf configuration file that includes the following dbconn.conf file 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 defined at any point in the configuration file and at any inclusion depth. Hence you can cascade numerous inclusions if necessary. At process start time inclusion of configuration files breaks if either the included file can not be opened and processed or the included file has been processed already in the stack and a recursive cycling has been detected. The configuration file MUST always include an 'sqlbox' group for general configuration. This group should be the first group in the configuration file. As its simplest form, 'sqlbox' group looks like this: group = sqlbox id = sqlbox bearerbox-port = 13001 Naturally this is usually not sufficient for any real use. Thus, one or more of the optional configuration 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) . A sample more complex 'sqlbox' group could be something like this: group = sqlbox id = sqlbox-db smsbox-id = sqlbox #global-sender = "" bearerbox-host = localhost bearerbox-port = 13001 smsbox-port = 13005 smsbox-port-ssl = false sql-log-table = sent_sms sql-insert-table = send_sms log-file = "/var/log/kannel/kannel-sqlbox.log" log-level = 0 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 supports MySQL, Oracle, PostgreSQL, LibSDB, MS-SQL, Sybase, Sqlite2 and Sqlite3, though only MySQL and PostgreSQL are tested enough to be considered stable.The process of configuring a DB connection is simple: You need to create a [engine]-connection section (where [engine] is the DB engine name, either mysql, oracle, pgsql, sdb, sqlite or sqlite3) and indicate a few parameters needed to establish the DB connection.Uses a MySQL database to store the data. You need to specify the mysql-connection group.Example configuration:group = mysql-connection id = my-sqlbox host = localhost username = foo password = bar database = kannel max-connections = 1Uses an MS-SQL or Sybase database to store the data. You need to specify the mssql-connection group.Example configuration:group = oracle-connection server = myserver username = foo password = bar max-connections = 1Uses an Oracle database to store the data. You need to specify the oracle-connection group.Example configuration:group = oracle-connection tnsname = //localhost:1521/XE username = foo password = bar max-connections = 1Uses a PostgreSQL database to store the data. You need to specify the pgsql-connection group.Example configuration:group = pgsql-connection id = pg-sqlbox host = localhost username = foo password = bar database = kannel max-connections = 1Uses the LibSDB database abstraction layer to transparently connect to a database that stores the data. You need to specify the sdb-connection group.Example configuration:group = sdb-connection id = sd-sqlbox #url = mysql:host=localhost:db=kannel:uid=myuser:pwd=mypass #url = sqlite:db=/path/to/kannel.db url = sqlite3:db=/path/to/kannel3.db max-connections = 1Uses a Sqlite 2.x database to store the data. You need to specify the sqlite-connection group.Example configuration:group = sqlite-connection id = s2-sqlbox host = localhost database = /path/to/kannel.db lock-timeout = 5 max-connections = 1Uses a Sqlite 3.x database to store the data. You need to specify the sqlite3-connection group.Example configuration:group = sqlite3-connection id = s3-sqlbox host = localhost database = /path/to/kannel3.db lock-timeout = 5 max-connections = 1You need to start sqlbox after starting the bearerbox, otherwise it won't have a port open to connect to. The preferred way to do this is to include sqlbox into your Kannel's startup script. If you want to start it from command line (for testing, for example), give the following command: /path/to/sqlbox -v 1 [config-file] The -v 1 sets the logging level to INFO. This way, you won't see a large amount of debugging output (the default is DEBUG). Full explanation of Sqlbox command line arguments is below.[config-file] is the name of the configuration file you are using with Sqlbox. The basic distribution packet comes with a sample configuration file you can use with some minor tweakings (check on the /examples folder. Feel free to edit the file to suit your needs.Of course you need to have the bearerbox running before starting the box. Without the bearer box, sqlbox won't even start.Sqlbox accept certain command line options and arguments when they are launched. These arguments are:Sqlbox creates it's DB tables on the fly if the tables are not present at that moment. If you're 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 there's 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.One of the nice features Sqlbox provides is the ability to insert MT messages into Kannel's queue by inserting rows into the send_sms table. Keep in mind that both tables have the same schema, but you only need to care about send_sms. Sqlbox will move messages to the sent_sms table autmatically after processing it.The tables structure is as follows:As when you're using the sendsms interface, you don't need to specify all the columns in order to succesfully enqueue a message.Here's 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 possibleThis chapter explains where to find help with problems related to the gateway, and the preferred procedure for reporting bugs and sending corrections to them.The Kannel development mailing list is devel@kannel.org. To subscribe, send mail to . This is currently the best location for asking help and reporting bugs. Please include configuration file and version number.This appendix includes pertinent information about required changes on upgrades. As a general rule, always check the ChangeLog file before upgrading, because it may contain important information worth knowing before making any changes.Sqlbox is a simple module that usually upgrades easily and without requiring any other changes.In some cases, a change on the DB structure takes place and this requires changes on the DB schemas as well. Since sqlbox automatically generates its tables, the best approach for this kind of upgrades is to make sure that there's no messages pending, backup the tables contents (if there's no messages pending only the sent_sms table will have records), drop the tables and let sqlbox create the tables again. Alternatively you can check what changes are necessary and ALTER the tables yourself.