Voip Think- Voice over IP - Asterisk and SER - SIP IAX and H323

3CX VoIP Phone System, IP PBX for Windows
3CX PBX and Phone System for Windows
Download free edition


  • VoIP Protocols

  • Telephones

  • QoS (Quality of Service)

  • Codecs

  • Asterisk

  • 3CX PBX

  • SER (Sip Express Router)

  • More information


      SER (Sip Express Router)  

        Introduction   SER vs Asterisk   Linux Installation   FreeBSD Installation   Installation + MySQL   Errors + Solutions    

    SER (Sip Express Router) installation with MYSQL

    Now we are going to install SER (SIP express Router) using MYSQL. It is supposed that MySQL is correctly installed in the machine. In addition we have followed the steps of the basic installation of the previous chapters and we have SER installed with the basic configuration.


    1) Execute ser_mysql.sh script

    VERY IMPORTANT: we must be root to execute the script. A simple sudo is not valid. we must be log as root. In other way an error like
    "/usr/local/sbin/ser_mysql.sh : line 160: gen_ha1 command not found HA1 calculation failed." will be displayed.

    # /usr/local/sbin/ser_mysql.sh create

    Next fill the following gaps:

    MySQL Password for root: root password of MySQL
    Domain for the default user 'admin' : localhost (or the one we have chosen)
    Enter password: blank and Enter. It will take the default password.

    2 ) Configure ser.cfg file

    ser.cfgis the configuration file of SER server. We are going to speak about it in the following chapters.

    this file is placed in /usr/local/etc/ser/

    In order to use MySQl we have to modify the ser.cfg file in the following way. We must uncomment some lines. Pay attention at the lines in bold.

    # $Id: ser.cfg,v 2005/02/18 14:30:44 andrei Exp $
    # simple quick-start config script

    # ----------- global configuration parameters ------------------------

    #debug=3 # debug level (cmd line: -dddddddddd)
    #log_stderror=no # (cmd line: -E)

    /* Uncomment these lines to enter debugging mode

    check_via=no # (cmd. line: -v)
    dns=no # (cmd. line: -r)
    rev_dns=no # (cmd. line: -R)

    # ------------------ module loading ----------------------------------

    # Uncomment this if you want to use SQL database
    loadmodule "/usr/local/lib/ser/modules/mysql.so"

    loadmodule "/usr/local/lib/ser/modules/sl.so"
    loadmodule "/usr/local/lib/ser/modules/tm.so"
    loadmodule "/usr/local/lib/ser/modules/rr.so"
    loadmodule "/usr/local/lib/ser/modules/maxfwd.so"
    loadmodule "/usr/local/lib/ser/modules/usrloc.so"
    loadmodule "/usr/local/lib/ser/modules/registrar.so"
    loadmodule "/usr/local/lib/ser/modules/textops.so"

    # Uncomment this if you want digest authentication
    # mysql.so must be loaded !
    loadmodule "/usr/local/lib/ser/modules/auth.so"
    loadmodule "/usr/local/lib/ser/modules/auth_db.so"

    # ----------------- setting module-specific parameters ---------------

    # -- usrloc params --

    #modparam("usrloc", "db_mode", 0)

    # Uncomment this if you want to use SQL database
    # for persistent storage and comment the previous line
    modparam("usrloc", "db_mode", 2)

    # -- auth params --
    # Uncomment if you are using auth module
    modparam("auth_db", "calculate_ha1", yes)
    # If you set "calculate_ha1" parameter to yes (which true in this config),
    # uncomment also the following parameter)
    modparam("auth_db", "password_column", "password")

    # -- rr params --
    # add value to ;lr param to make some broken UAs happy
    modparam("rr", "enable_full_lr", 1)

    # SQL settings

    #the deafult database name is "ser" . dbhost can be "localhost"
    modparam("usrloc", "db_url","mysql://mysqluser:mysqlpassword@dbhost/dbname")
    modparam("auth_db", "db_url","mysql://mysqluser:mysqlpassword@dbhost/dbname")

             # initial sanity checks  messages with
             # max_forwards==0, or excessively long requests
             if (!mf_process_maxfwd_header("10")) {
                     sl_send_reply("483","Too Many Hops");
             if ( msg:len > max_len ) {
                     sl_send_reply("513", "Message too big");
             # we record-route all messages — to make sure that
             # subsequent messages will go through our proxy; that's
             # particularly good if upstream and downstream entities
             # use different transport protocol
             # loose-route processing
             if (loose_route()) {
             # if the request is for other domain use UsrLoc
             # (in case, it does not work, use the following command
             # with proper names and addresses in it)
             if (uri==myself) {
                     if (method=="REGISTER") {
     # Uncomment this if you want to use digest authentication
                             if (!www_authorize("localhost", "subscriber")) {
                                     www_challenge("localhost", "0");
                     # native SIP destinations are handled using our USRLOC DB
                     if (!lookup("location")) {
                             sl_send_reply("404", "Not Found");
             # forward to current uri now; use stateful forwarding; that
             # works reliably even if we forward from TCP to UDP
             if (!t_relay()) {

    3) Some comments of the lines added

    - The default port of SER server is 5060 (same as Asterisk). We can modify it at


    - these lines added

    modparam("usrloc", "db_url","mysql://user:password@localhost/ser")
    modparam("auth_db", "db_url","mysql://user:password@localhost/ser")

    are for versions up to 0.9.3. For lower versions:

    modparam("usrloc", "db_url","sql://user:password@localhost/ser")
    modparam("auth_db", "db_url","sql://user:password@localhost/ser")

    4) Restart SER server

    # /usr/local/sbin/serctl restart

    Remember to export the SIP_DOMAIN variable if you have restarted the machine

    # export SIP_DOMAIN="localhost"

    5) Configure a softphone to verify

    In this case it is neccessary the user and password

    The default name is "admin" and the password "heslo"

    6) Add a new user

    # /usr/local/sbin/serctl add <name> <password> <email>

    If a password is asked it must be "heslo" and if an error like "/usr/local/sbin/ser_mysql.sh : line 160: gen_ha1 command not found HA1 calculation failed." appears remember that it is necessary to log as root (not sudo)

    You can verify that the new user can register in your ser server with your softphone.

    7) Add a line to the startup file of mysql

    This is advisory in order the SER server can manage multiple connections to the database. You have to add the following line to the file my.cnf of MySQL in the [mysqld] part

    max_connections = 500

    * The SER (SIP Express Router) is just working with MySQL. This


    Spanish   |   About us    |   Contact   |   Collaborate  |   Advertising