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. db_url (string)
              1.3.4. table_name (string)
              1.3.5. registrar_column (string)
              1.3.6. proxy_column (string)
              1.3.7. aor_column (string)
              1.3.8. third_party_registrant_column (string)
              1.3.9. username_column (string)
              1.3.10. password_column (string)
              1.3.11. binding_URI_column (string)
              1.3.12. binding_params_column (string)
              1.3.13. expiry_column (string)
              1.3.14. forced_socket_column (string)

        1.4. Exported Functions
        1.5. Exported MI Functions

              1.5.1. reg_list
              1.5.2. reg_reload

   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 “db_url” parameter
   1.4. Set “table_name” parameter
   1.5. Set “registrar_column” parameter
   1.6. Set “proxy_column” parameter
   1.7. Set “aor_column” parameter
   1.8. Set “third_party_registrant_column” parameter
   1.9. Set “username_column” parameter
   1.10. Set “password_column” parameter
   1.11. Set “binding_URI_column” parameter
   1.12. Set “binding_params_column” parameter
   1.13. Set “expiry_column” parameter
   1.14. Set “forced_socket_column” 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. Registranr's status can be
   inspected via "reg_list" MI comand.

   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;

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. db_url (string)

   Database where to load the registrants from.

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

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

1.3.4. table_name (string)

   The database table that holds the registrant records.

   Default value is “registrant”.

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

1.3.5. 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.5. Set “registrar_column” parameter
...
modparam("uac_registrant", "registrar_column", "registrant_uri")
...

1.3.6. 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.6. Set “proxy_column” parameter
...
modparam("uac_registrant", "proxy_column", "proxy_uri")
...

1.3.7. 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.7. Set “aor_column” parameter
...
modparam("uac_registrant", "aor_column", "to_uri")
...

1.3.8. 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.8. Set “third_party_registrant_column” parameter
...
modparam("uac_registrant", "third_party_registrant_column", "from_uri")
...

1.3.9. 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.9. Set “username_column” parameter
...
modparam("uac_registrant", "username_column", "auth_username")
...

1.3.10. 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.10. Set “password_column” parameter
...
modparam("uac_registrant", "password_column", "auth_passowrd")
...

1.3.11. 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.11. Set “binding_URI_column” parameter
...
modparam("uac_registrant", "binding_URI_column", "contact_uri")
...

1.3.12. 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 “;”. There is no validation on
   the string stored here.

   Default value is “binding_params”.

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

1.3.13. expiry_column (string)

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

   Default value is “expiry”.

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

1.3.14. 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 “listen” core parameter).

   Default value is “forced_socket”.

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

1.4. Exported Functions

   None to be used in configuration file.

1.5. Exported MI Functions

1.5.1. reg_list

   Lists the registrant records and their status.

   Name: reg_list

   Parameters: none

   MI FIFO Command Format:
:reg_list:_reply_fifo_file_
_empty_line_

1.5.2. reg_reload

   Reloads the registrant records from the database.

   Name: reg_reload

   Parameters: none

   MI FIFO Command Format:
:reg_reload:_reply_fifo_file_
_empty_line_

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) 135 33 5469 3245
   2. Liviu Chircu (@liviuchircu) 15 12 46 63
   3. Razvan Crainea (@razvancrainea) 8 6 14 12
   4. Bogdan-Andrei Iancu (@bogdan-iancu) 7 5 8 4
   5. Nick Altmann (@nikbyte) 4 2 35 4
   6. Vlad Paiu (@vladpaiu) 4 2 6 3
   7. Vlad Patrascu (@rvlad-patrascu) 2 1 1 0

   (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. Liviu Chircu (@liviuchircu)         Mar 2014 - Jan 2020
   2. Razvan Crainea (@razvancrainea)     Sep 2011 - Sep 2019
   3. Bogdan-Andrei Iancu (@bogdan-iancu) Dec 2012 - Jun 2018
   4. Vlad Patrascu (@rvlad-patrascu)     May 2017 - May 2017
   5. Ovidiu Sas (@ovidiusas)             Feb 2011 - May 2017
   6. Nick Altmann (@nikbyte)             Nov 2015 - Dec 2015
   7. Vlad Paiu (@vladpaiu)               Jul 2011 - Sep 2011

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

Chapter 3. Documentation

3.1. Contributors

   Last edited by: Bogdan-Andrei Iancu (@bogdan-iancu), Liviu
   Chircu (@liviuchircu), Ovidiu Sas (@ovidiusas).

   doc copyrights:

   Copyright © 2011-2014 VoIP Embedded, Inc.
