UAC Registrant Module
     __________________________________________________________

   Table of Contents

   1. Admin Guide

        1.1. Overview
        1.2. Dependencies

              1.2.1. OpenSIPS Modules
              1.2.2. External Libraries or Applications

        1.3. Exported Parameters

              1.3.1. hash_size (integer)
              1.3.2. timer_interval (integer)
              1.3.3. failure_retry_interval (integer)
              1.3.4. enable_clustering (integer)
              1.3.5. db_url (string)
              1.3.6. table_name (string)
              1.3.7. registrar_column (string)
              1.3.8. proxy_column (string)
              1.3.9. aor_column (string)
              1.3.10. third_party_registrant_column (string)
              1.3.11. username_column (string)
              1.3.12. password_column (string)
              1.3.13. binding_URI_column (string)
              1.3.14. binding_params_column (string)
              1.3.15. expiry_column (string)
              1.3.16. forced_socket_column (string)
              1.3.17. cluster_shtag_column (string)
              1.3.18. state_column (string)
              1.3.19. reregister_expiry_percentage (integer)

        1.4. Exported Functions
        1.5. Exported MI Functions

              1.5.1. uac_registrant:list
              1.5.2. uac_registrant:reload
              1.5.3. uac_registrant:enable
              1.5.4. uac_registrant:disable
              1.5.5. uac_registrant:force_register
              1.5.6. uac_registrant:upsert
              1.5.7. uac_registrant:delete

        1.6. Exported Events

              1.6.1. E_REGISTRANT_REGISTERING
              1.6.2. E_REGISTRANT_AUTHENTICATING
              1.6.3. E_REGISTRANT_REGISTERED
              1.6.4. E_REGISTRANT_REGISTER_TIMEOUT
              1.6.5. E_REGISTRANT_INTERNAL_ERROR
              1.6.6. E_REGISTRANT_WRONG_CREDENTIALS
              1.6.7. E_REGISTRANT_REGISTRAR_ERROR
              1.6.8. E_REGISTRANT_UNREGISTERING
              1.6.9. E_REGISTRANT_AUTHENTICATING_UNREGISTER

        1.7. Exported Status/Report Identifiers

   2. Contributors

        2.1. By Commit Statistics
        2.2. By Commit Activity

   3. Documentation

        3.1. Contributors

   List of Tables

   2.1. Top contributors by DevScore^(1), authored commits^(2) and
          lines added/removed^(3)

   2.2. Most recently active contributors^(1) to this module

   List of Examples

   1.1. Set hash_size parameter
   1.2. Set timer_interval parameter
   1.3. Set failure_retry_interval parameter
   1.4. Set enable_clustering parameter
   1.5. Set “db_url” parameter
   1.6. Set “table_name” parameter
   1.7. Set “registrar_column” parameter
   1.8. Set “proxy_column” parameter
   1.9. Set “aor_column” parameter
   1.10. Set “third_party_registrant_column” parameter
   1.11. Set “username_column” parameter
   1.12. Set “password_column” parameter
   1.13. Set “binding_URI_column” parameter
   1.14. Set “binding_params_column” parameter
   1.15. Set “expiry_column” parameter
   1.16. Set “forced_socket_column” parameter
   1.17. Set “cluster_shtag_column” parameter
   1.18. Set “state_column” parameter
   1.19. Set “reregister_expiry_percentage” parameter

Chapter 1. Admin Guide

1.1. Overview

   The module enable OpenSIPS to register itself on a remote SIP
   registrar.

   At startup, the registrant records are loaded into a hash table
   in memory and a timer is started. The hash index is computed
   over the AOR field.

   The timer interval for checking records in a hash bucket is
   computed by dividing the timer_interval module param by the
   number of hash buckets. When the timer fires for the first
   time, the first hash bucket will be checked and REGISTERs will
   be sent out for each record that is found. On the next timeout
   fire, the second hash bucket will be checked and so on. If the
   configured timer_interval module param is lower then the number
   of buckets, the module will fail to start.

   Example: setting the timer_interval module to 8 with a
   hash_size of 2, will result in having 4 hash buckets (2^2=4)
   and buckets will be checked one by one every 2s (8/4=2).

   Each registrant has it's own state. Registrant's status can be
   inspected via "uac_registrant:list" MI command.

   UAC registrant states:
     * 0 - NOT_REGISTERED_STATE - the initial state (no REGISTER
       has been sent out yet);
     * 1 - REGISTERING_STATE - waiting for a reply from the
       registrar after a REGISTER without authentication header
       was sent;
     * 2 - AUTHENTICATING_STATE - waiting for a reply from the
       registrar after a REGISTER with authentication header was
       sent;
     * 3 - REGISTERED_STATE - the uac is successfully registered;
     * 4 - REGISTER_TIMEOUT_STATE : no reply received from the
       registrar;
     * 5 - INTERNAL_ERROR_STATE - some errors were
       found/encountered during the processing of a reply;
     * 6 - WRONG_CREDENTIALS_STATE - credentials rejected by the
       registrar;
     * 7 - REGISTRAR_ERROR_STATE - error reply received from the
       registrar;
     * 8 - UNREGISTERING_STATE - waiting for a reply from the
       registrar after an unREGISTER without authentication header
       was sent;
     * 9 - AUTHENTICATING_UNREGISTER_STATE - waiting for a reply
       from the registrar after an unREGISTER with authentication
       header was sent;

1.2. Dependencies

1.2.1. OpenSIPS Modules

   The following modules must be loaded before this module:
     * uac_auth - UAC authentication module

1.2.2. External Libraries or Applications

   None.

1.3. Exported Parameters

1.3.1. hash_size (integer)

   The size of the hash table internally used to keep the
   registrants. A larger table distributes better the registration
   load in time but consumes more memory. The hash size is a power
   of number two.

   Default value is 1.

   Example 1.1. Set hash_size parameter
...
modparam("uac_registrant", "hash_size", 2)
...

1.3.2. timer_interval (integer)

   Defines the periodic timer for checking the registrations
   status.

   Default value is 100.

   Example 1.2. Set timer_interval parameter
...
modparam("uac_registrant", "timer_interval", 120)
...

1.3.3. failure_retry_interval (integer)

   Defines a custom interval to retry the registration upon
   error/failure. Normally, after any kind of failure (timeout,
   credentials, internal error), the registration is re-taken
   after "expires" seconds. The parameter here, if set, overrides
   that value.

   Default value is 0 (not set).

   Example 1.3. Set failure_retry_interval parameter
...
modparam("uac_registrant", "failure_retry_interval", 3600)
...

1.3.4. enable_clustering (integer)

   This parameter enables the clustering support in the module.
   This is used to share this registration between all the nodes
   in the cluster. When using this option, you should define (for
   each registrant record) a sharing tag - this sharing tag will
   control at the cluster level which node is entitled to perform
   the registation (only the node having that tag as active will
   do the registation, the onther nodes being idle).

   Default value is 0 / off.

   Example 1.4. Set enable_clustering parameter
...
modparam("uac_registrant", "enable_clustering", 1)
...

1.3.5. db_url (string)

   Database where to load the registrants from.

   Default value is “NULL” (use default DB URL from core).

   Example 1.5. Set “db_url” parameter
...
modparam("uac_registrant", "db_url", "mysql://user:passw@localhost/datab
ase")
...

1.3.6. table_name (string)

   The database table that holds the registrant records.

   Default value is “registrant”.

   Example 1.6. Set “table_name” parameter
...
modparam("uac_registrant", "table_name", "my_registrant")
...

1.3.7. registrar_column (string)

   The column's name in the database storing the URI pointing to
   the remote registrar (mandatory field). OpenSIPS expects a
   valid URI.

   Default value is “registrar”.

   Example 1.7. Set “registrar_column” parameter
...
modparam("uac_registrant", "registrar_column", "registrant_uri")
...

1.3.8. proxy_column (string)

   The column's name in the database storing the URI pointing to
   the outbond proxy (not mandatory field). An empty or NULL value
   means no outbound proxy, otherwise OpenSIPS expects a valid
   URI.

   Default value is “proxy”.

   Example 1.8. Set “proxy_column” parameter
...
modparam("uac_registrant", "proxy_column", "proxy_uri")
...

1.3.9. aor_column (string)

   The column's name in the database storing the URI defining the
   address of record (mandatory field). The URI stored here will
   be used in the To URI of the REGISTER. OpenSIPS expects a valid
   URI.

   Default value is “aor”.

   Example 1.9. Set “aor_column” parameter
...
modparam("uac_registrant", "aor_column", "to_uri")
...

1.3.10. third_party_registrant_column (string)

   The column's name in the database storing the URI defining the
   third party registrant (not mandatory field). The URI stored
   here will be used in the From URI of the REGISTER. An empty or
   NULL value means no third party registration (the From URI will
   be identical to To URI), otherwise OpenSIPS expects a valid
   URI.

   Default value is “third_party_registrant”.

   Example 1.10. Set “third_party_registrant_column” parameter
...
modparam("uac_registrant", "third_party_registrant_column", "from_uri")
...

1.3.11. username_column (string)

   The column's name in the database storing the username for
   authentication (mandatory if the registrar requires
   authentication).

   Default value is “username”.

   Example 1.11. Set “username_column” parameter
...
modparam("uac_registrant", "username_column", "auth_username")
...

1.3.12. password_column (string)

   The column's name in the database storing the password for
   authentication (mandatory if the registrar requires
   authntication).

   Default value is “password”.

   Example 1.12. Set “password_column” parameter
...
modparam("uac_registrant", "password_column", "auth_passowrd")
...

1.3.13. binding_URI_column (string)

   The column's name in the database storing the binding URI in
   REGISTER (mandatory field). The URI stored here will be used in
   the Contact URI of the REGISTER. OpenSIPS expects a valid URI.

   Default value is “binding_URI”.

   Example 1.13. Set “binding_URI_column” parameter
...
modparam("uac_registrant", "binding_URI_column", "contact_uri")
...

1.3.14. binding_params_column (string)

   The column's name in the database storing the binding params in
   REGISTER (not mandatory field). If not NULL or not empty, the
   string stored here will be added as params to the Contact URI
   in REGISTER (it MUST start with “;”.

   If the following two params are present, then the binding will
   be enforced to be unique (if two bindings are received in a
   200ok, a complete binding removal will be performed before
   re-registering):
     * reg-id
     * +sip.instance

   Example of params that will force unique binding:
;reg-id=1;+sip.instance="<urn:uuid:11111111-AABBCCDDEEFF>"

   Default value is “binding_params”.

   Example 1.14. Set “binding_params_column” parameter
...
modparam("uac_registrant", "binding_params_column", "contact_params")
...

1.3.15. expiry_column (string)

   The column's name in the database storing the expiration time
   (not mandatory).

   Default value is “expiry”.

   Example 1.15. Set “expiry_column” parameter
...
modparam("uac_registrant", "expiry_column", "registration_timeout")
...

1.3.16. forced_socket_column (string)

   The column's name in the database storing the socket for
   sending the REGISTER (not mandatory). If a forced socket is
   provided, the socket MUST be explicitely set as a global
   listening socket in the config (see “socket” core parameter).

   Default value is “forced_socket”.

   Example 1.16. Set “forced_socket_column” parameter
...
modparam("uac_registrant", "forced_socket_column", "fs")
...

1.3.17. cluster_shtag_column (string)

   The column's name in the database storing the cluster sharing
   tag in [tag_name/cluster_id] format (not mandatory). If a
   cluster sharing tag is provided, the REGISTER requests will be
   fired out only when the tag is active.

   Default value is “cluster_shtag”.

   Example 1.17. Set “cluster_shtag_column” parameter
...
modparam("uac_registrant", "cluster_shtag_column", "sh")
...

1.3.18. state_column (string)

   The column's name in the database storing the current state of
   the registrant. When a registrant is disabled, OpenSIPS will no
   longer send REGISTERs for it. A value of 0 for this column
   means enabled and 1 disabled.

   Default value is “state”.

   Example 1.18. Set “state_column” parameter
...
modparam("uac_registrant", "state_column", "status")
...

1.3.19. reregister_expiry_percentage (integer)

   Percentage describing how much sooner a RE-REGISTER needs to be
   send based on the Expiry. a 100 value means the RE-REGISTER
   will be send right on the edge of expiry ( old behavior ),
   which might lead to registration loss. a 90 value means the
   RE-REGISTER will be sent sooner , at 90% of the Expiry, etc.

   Default value is “100”.

   Example 1.19. Set “reregister_expiry_percentage” parameter
...
modparam("uac_registrant", "reregister_expiry_percentage", 90)
...

1.4. Exported Functions

   None to be used in configuration file.

1.5. Exported MI Functions

1.5.1. uac_registrant:list

   Replaces obsolete MI command: reg_list.

   Lists the registrant records and their status.

   Name: uac_registrant:list

   Parameters:
     * aor (optional) - URI defining the address of record. If
       provided, contact and registrar parameters are also
       required and only a specific record will be listed.
     * contact (optional) - Contact URI. If provided, aor and
       registrar parameters are also required and only a specific
       record will be listed.
     * registrar (optional) - URI pointing to the remote
       registrar. If provided, aor and contact parameters are also
       required and only a specific record will be listed.

   MI FIFO Command Format:
opensips-cli -x mi uac_registrant:list
...
opensips-cli -x mi uac_registrant:list sip:alice@opensips.org  sip:alice
@127.0.0.1:5060 sip:opensips.org

1.5.2. uac_registrant:reload

   Replaces obsolete MI command: reg_reload.

   Reloads the registrant records from the database.

   Name: uac_registrant:reload

   Parameters: none
     * aor (optional) - URI defining the address of record. If
       provided, contact and registrar parameters are also
       required and only a specific record will be reloaded.
     * contact (optional) - Contact URI. If provided, aor and
       registrar parameters are also required and only a specific
       record will be reloaded.
     * registrar (optional) - URI pointing to the remote
       registrar. If provided, aor and contact parameters are also
       required and only a specific record will be reloaded.

   MI FIFO Command Format:
opensips-cli -x mi uac_registrant:reload
...
opensips-cli -x mi reg_leload sip:alice@opensips.org  sip:alice@127.0.0.
1:5060 sip:opensips.org

1.5.3. uac_registrant:enable

   Replaces obsolete MI command: reg_enable.

   Enables a specific registrant. OpenSIPS will immediately send a
   REGISTER if the registrant was previously disabled and will
   update the state in the database.

   Name: uac_registrant:enable

   Parameters: none
     * aor - URI defining the address of record.
     * contact - Contact URI.
     * registrar - URI pointing to the remote registrar.

   MI FIFO Command Format:
opensips-cli -x mi uac_registrant:enable sip:alice@opensips.org  sip:ali
ce@127.0.0.1:5060 sip:opensips.org

1.5.4. uac_registrant:disable

   Replaces obsolete MI command: reg_disable.

   Disables a specific registrant. OpenSIPS will immediately send
   an unREGISTER if the registrant was previously enabled and will
   update the state in the database.

   Name: uac_registrant:disable

   Parameters: none
     * aor - URI defining the address of record. If provided,
       contact and registrar parameters are also required and only
       a specific record will be disabled.
     * contact - Contact URI. If provided, aor and registrar
       parameters are also required and only a specific record
       will be disabled.
     * registrar - URI pointing to the remote registrar. If
       provided, aor and contact parameters are also required and
       only a specific record will be disabled.

   MI FIFO Command Format:
opensips-cli -x mi uac_registrant:disable sip:alice@opensips.org  sip:al
ice@127.0.0.1:5060 sip:opensips.org

1.5.5. uac_registrant:force_register

   Replaces obsolete MI command: reg_force_register.

   Forces the re-registration (or registation) of a specific
   registrant (depending on its state). Note that the registrant
   must be enabled.

   Name: uac_registrant:force_register

   Parameters:
     * aor - URI defining the address of record. If provided,
       contact and registrar parameters are also required and only
       a specific record will be forced to re-register.
     * contact - Contact URI. If provided, aor and registrar
       parameters are also required and only a specific record
       will be forced to re-register.
     * registrar - URI pointing to the remote registrar. If
       provided, aor and contact parameters are also required and
       only a specific record will be forced to re-register.

   MI FIFO Command Format:
opensips-cli -x mi uac_registrant:force_register sip:alice@opensips.org
 sip:alice@127.0.0.1:5060 sip:opensips.org

1.5.6. uac_registrant:upsert

   Replaces obsolete MI command: reg_upsert.

   Inserts or updates the in-memory contents of the
   AOR/Contact/Registrar. No Database queries are done when
   calling this MI command, all parameters are passed via MI

   Name: uac_registrant:upsert

   Parameters:
     * aor - URI defining the address
     * contact - Contact URI
     * registrar - URI pointing to the remote registrar
     * proxy - URI of a registration proxy
     * third_party_registrant - 3rd party registrant
     * username - the username for auth purposes
     * password - the password for auth purposes
     * binding_params - params to be added to the registration
     * expiry - number of seconds that the registration will be
       valid
     * forced_socket - opensips socket to send out the register
       out through
     * cluster_shtag - the sharing tag for this registration
     * state - 0 for enabled, 1 for disabled

   MI FIFO Command Format:
opensips-cli -x mi uac_registrant:upsert aor=sip:vlad@test.com contact=s
ip:test@localhost registrar=sip:127.0.0.1:5061 proxy="" third_party_regi
strant="" username="vlad" password="1234" binding_params="" expiry=60 fo
rced_socket="" cluster_shtag="" state=0

1.5.7. uac_registrant:delete

   Replaces obsolete MI command: reg_delete.

   Deletes the in-memory contents of the AOR/Contact/Registrar. No
   Database queries are done when calling this MI command, all
   parameters are passed via MI

   Name: uac_registrant:delete

   Parameters:
     * aor - URI defining the address
     * contact - Contact URI
     * registrar - URI pointing to the remote registrar

   MI FIFO Command Format:
opensips-cli -x mi uac_registrant:delete aor=sip:vlad@test.com contact=s
ip:test@localhost registrar=sip:127.0.0.1:5061

1.6. Exported Events

1.6.1.  E_REGISTRANT_REGISTERING

   This event is raised when the module sent the initial REGISTER
   and started the registration process.

   Parameters:
     * aor - the AOR
     * contact - the Contact
     * registrar - the Registrar

1.6.2.  E_REGISTRANT_AUTHENTICATING

   This event is raised when the initial REGISTER has been
   challenged and a new REGISTER with credentials has been sent
   out.

   Parameters:
     * aor - the AOR
     * contact - the Contact
     * registrar - the Registrar

1.6.3.  E_REGISTRANT_REGISTERED

   This event is raised when a REGISTER has been 200 OKd.

   Parameters:
     * aor - the AOR
     * contact - the Contact
     * registrar - the Registrar

1.6.4.  E_REGISTRANT_REGISTER_TIMEOUT

   This event is raised when a REGISTER received no reply from the
   registrar.

   Parameters:
     * aor - the AOR
     * contact - the Contact
     * registrar - the Registrar

1.6.5.  E_REGISTRANT_INTERNAL_ERROR

   This event is raised when a REGISTER procesing was stopped due
   to an internal OpenSIPS error.

   Parameters:
     * aor - the AOR
     * contact - the Contact
     * registrar - the Registrar

1.6.6.  E_REGISTRANT_WRONG_CREDENTIALS

   This event is raised when a REGISTER with credentials was still
   rejected by the registrar

   Parameters:
     * aor - the AOR
     * contact - the Contact
     * registrar - the Registrar

1.6.7.  E_REGISTRANT_REGISTRAR_ERROR

   This event is raised when a REGISTER is rejected by the
   registrar with a non-standard sip code.

   Parameters:
     * aor - the AOR
     * contact - the Contact
     * registrar - the Registrar

1.6.8.  E_REGISTRANT_UNREGISTERING

   This event is raised when a de-REGISTER is sent by OpenSIPS.

   Parameters:
     * aor - the AOR
     * contact - the Contact
     * registrar - the Registrar

1.6.9.  E_REGISTRANT_AUTHENTICATING_UNREGISTER

   This event is raised when a de-REGISTER is challenged and auth
   is sent by OpenSIPS.

   Parameters:
     * aor - the AOR
     * contact - the Contact
     * registrar - the Registrar

1.7. Exported Status/Report Identifiers

   The module provides the "uac_registrant" Status/Report group,
   where each UAC registrant is defined as a separate SR
   identifier.

   The name of each individual identitfier is built as follows:
   "aor=_AOR_;contact=_SIP_CONTACT_URI_;registrar=_SIP_REGISTAR_URI_"
   Ex:
   "aor=sip:vlad@test.com;contact=sip:test@mycontact.com;registrar=sip:1
27.0.0.1:5061"

   In terms of status, the following values will be reported:
     * STATUS_READY, if REGISTERED
     * STATUS_LOADING_DATA, if REGISTERING, UNREGISTERING,
       AUTHENTICATING
     * STATUS_NOT_READY, any other state of the registrant

   As reports, each identifier may provide information like:

# opensips-cli -x mi  sr_list_reports uac_registrant
[
   {
       "Name": "aor=sip:vlad@test.com;contact=sip:test@mycontact.com;reg
istrar=sip:127.0.0.1:5061",
       "Reports": [
           {
               "Timestamp": 1769604697,
               "Date": "Wed Jan 28 14:51:37 2026",
               "Log": "created with state NOT_REGISTERED_STATE\n"
           },
           {
               "Timestamp": 1769604707,
               "Date": "Wed Jan 28 14:51:47 2026",
               "Log": "state changed to REGISTERING_STATE\n"
           },
           {
               "Timestamp": 1769604712,
               "Date": "Wed Jan 28 14:51:52 2026",
               "Log": "state changed to REGISTER_TIMEOUT_STATE\n"
           }
       ]
   }
]

   For how to access and use the Status/Report information, please
   see
   https://www.opensips.org/Documentation/Interface-StatusReport-3
   -6.

Chapter 2. Contributors

2.1. By Commit Statistics

   Table 2.1. Top contributors by DevScore^(1), authored
   commits^(2) and lines added/removed^(3)
     Name DevScore Commits Lines ++ Lines --
   1. Ovidiu Sas (@ovidiusas) 144 41 5688 3268
   2. Vlad Paiu (@vladpaiu) 25 10 1258 240
   3. Bogdan-Andrei Iancu (@bogdan-iancu) 22 16 525 52
   4. Liviu Chircu (@liviuchircu) 17 14 57 68
   5. Razvan Crainea (@razvancrainea) 16 13 99 82
   6. Vlad Patrascu (@rvlad-patrascu) 16 7 732 118
   7. Nick Altmann (@nikbyte) 5 3 43 4
   8. Maksym Sobolyev (@sobomax) 5 3 20 16
   9. James Stanley 4 2 21 14
   10. sagarmalam 3 1 15 1

   All remaining contributors: Walter Doekes (@wdoekes), James
   Stanley, Peter Lemenkov (@lemenkov), okhowang(王沛文).

   (1) DevScore = author_commits + author_lines_added /
   (project_lines_added / project_commits) + author_lines_deleted
   / (project_lines_deleted / project_commits)

   (2) including any documentation-related commits, excluding
   merge commits. Regarding imported patches/code, we do our best
   to count the work on behalf of the proper owner, as per the
   "fix_authors" and "mod_renames" arrays in
   opensips/doc/build-contrib.sh. If you identify any
   patches/commits which do not get properly attributed to you,
   please submit a pull request which extends "fix_authors" and/or
   "mod_renames".

   (3) ignoring whitespace edits, renamed files and auto-generated
   files

2.2. By Commit Activity

   Table 2.2. Most recently active contributors^(1) to this module
                      Name                   Commit Activity
   1.  Bogdan-Andrei Iancu (@bogdan-iancu) Dec 2012 - Apr 2026
   2.  Razvan Crainea (@razvancrainea)     Sep 2011 - Mar 2026
   3.  Vlad Paiu (@vladpaiu)               Jul 2011 - Jan 2026
   4.  Nick Altmann (@nikbyte)             Nov 2015 - Mar 2025
   5.  okhowang(王沛文)                       Jul 2024 - Jul 2024
   6.  James Stanley                       Dec 2023 - Jun 2024
   7.  Ovidiu Sas (@ovidiusas)             Feb 2011 - Dec 2023
   8.  Maksym Sobolyev (@sobomax)          Mar 2021 - Nov 2023
   9.  James Stanley                       Mar 2023 - Mar 2023
   10. Liviu Chircu (@liviuchircu)         Mar 2014 - Jul 2021

   All remaining contributors: Walter Doekes (@wdoekes),
   sagarmalam, Vlad Patrascu (@rvlad-patrascu), Peter Lemenkov
   (@lemenkov).

   (1) including any documentation-related commits, excluding
   merge commits

Chapter 3. Documentation

3.1. Contributors

   Last edited by: Razvan Crainea (@razvancrainea), Bogdan-Andrei
   Iancu (@bogdan-iancu), Vlad Paiu (@vladpaiu), Vlad Patrascu
   (@rvlad-patrascu), Ovidiu Sas (@ovidiusas), Peter Lemenkov
   (@lemenkov), Liviu Chircu (@liviuchircu).

   Documentation Copyrights:

   Copyright © 2011-2014 VoIP Embedded, Inc.
