JANUS Module
     __________________________________________________________

   Table of Contents

   1. Admin Guide

        1.1. Overview
        1.2. External Libraries or Applications

              1.2.1. OpenSIPS Modules

        1.3. Exported Parameters

              1.3.1. janus_send_timeout (integer)
              1.3.2. janus_max_msg_chunks (integer)
              1.3.3. janus_cmd_timeout (integer)
              1.3.4. janus_cmd_polling_itv (integer)
              1.3.5. janus_ping_interval (integer)
              1.3.6. janus_db_url (string)
              1.3.7. janus_db_table (string)

        1.4. Exported Functions

              1.4.1. janus_send_requeest(janus_id, janus_command[,
                      response_var])

              1.4.2. Exported Events

   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. Setting the janus_send_timeout parameter
   1.2. Setting the janus_max_msg_chunks parameter
   1.3. Setting the janus_cmd_timeout parameter
   1.4. Setting the janus_cmd_polling_itv parameter
   1.5. Setting the janus_ping_interval parameter
   1.6. Setting the janus_db_url parameter
   1.7. Setting the janus_db_table parameter
   1.8. janus_send_request() usage
   1.9. E_JANUS_EVENT example

Chapter 1. Admin Guide

1.1. Overview

   The "janus" module is a C driver for the Janus websocket
   protocol. It can interact with one or more Janus servers either
   by issuing commands to them, or by receiving events from them.

   This driver can be seen as a centralized Janus connection
   manager. It will connect to each Janus server, establish the
   connection hanler ID and the clients can be transparent from
   the connection handler ID point of view, simply passing the
   desired Janus commands that they want to run.

1.2. External Libraries or Applications

1.2.1. OpenSIPS Modules

   The following modules must be loaded together with this module:
     * an SQL DB module

   The following libraries or applications must be installed
   before running OpenSIPS with this module loaded:
     * None

1.3. Exported Parameters

1.3.1. janus_send_timeout (integer)

   Time in milliseconds after a Janus WebSocket connection will be
   closed if it is not available for blocking writing in this
   interval (and OpenSIPS wants to send something on it).

   Default value is “1000” (milliseconds).

   Example 1.1. Setting the janus_send_timeout parameter
...
modparam("janus", "janus_send_timeout", 2000)
...

1.3.2. janus_max_msg_chunks (integer)

   The maximum number of chunks in which a Janus message is
   expected to arrive via WebSocket. If a received packet is more
   fragmented than this, the connection is dropped

   Default value is “4”

   Example 1.2. Setting the janus_max_msg_chunks parameter
...
modparam("janus", "janus_max_msg_chunks", 8)
...

1.3.3. janus_cmd_timeout (integer)

   The maximally allowed duration for the execution of an Janus
   command. This interval does not include the connect duration.

   Default value is “5000” (milliseconds).

   Example 1.3. Setting the janus_cmd_timeout parameter
...
modparam("janus", "janus_cmd_timeout", 3000)
...

1.3.4. janus_cmd_polling_itv (integer)

   The sleep interval used when polling for an Janus command
   response. Since the value of this parameter imposes a minimal
   duration for any Janus command, you should run OpenSIPS in
   debug mode in order to first determine an expected response
   time for an arbitrary Janus command, then tune this parameter
   accordingly.

   Default value is “1000” (microseconds).

   Example 1.4. Setting the janus_cmd_polling_itv parameter
...
modparam("janus", "janus_cmd_polling_itv", 3000)
...

1.3.5. janus_ping_interval (integer)

   The time interval at which OpenSIPS will do keepalive pinging
   on the Janus connect

   Default value is “5” (seconds).

   Example 1.5. Setting the janus_ping_interval parameter
...
modparam("janus", "janus_ping_interval", 10)
...

1.3.6. janus_db_url (string)

   The DB URL from where OpenSIPS will load the list of Janus
   connection

   Default value is “"none"” (needs to be set for the module to
   start).

   Example 1.6. Setting the janus_db_url parameter
...
modparam("janus", "janus_db_url", "mysql://root@localhost/opensips")
...

1.3.7. janus_db_table (string)

   The DB Table from where OpenSIPS will load the list of Janus
   connection

   Default value is “janus”

   Example 1.7. Setting the janus_db_table parameter
...
modparam("janus", "janus_db_table", "my_janus_table")
...

1.4. Exported Functions

1.4.1.  janus_send_requeest(janus_id, janus_command[, response_var])

   Run an arbitrary command on an arbitrary Janus socket. The
   janus_id must be defined in the database

   The current OpenSIPS worker will block until an answer from
   Janus arrives. The timeout for this operation can be controlled
   via the janus_cmd_timeout param.

   Meaning of the parameters is as follows:
     * janus_id (string) - the ID of the janus connection as
       defined in the databsae.
     * janus_command (string) - the JANUS command to run.
     * response_var (var, optional) - a variable which will hold
       the text result of the Janus command.

   Return value
     * 1 (success) - the Janus command executed successfully and
       any output variables were successfully written to. Note
       that this does not say anything about the nature of the
       Janus answer (it may well be a "-ERR" type of response)
     * -1 (failure) - internal error or the Janus command failed
       to execute

   This function can be used from any route.

   Example 1.8.  janus_send_request() usage
...
# if the DB contains:
#       id: 1
# janus_id: test_janus
# janus_url: janusws://my_janus_host:80/janus?room=abcd

        $var(rc) = janus_send_request("test_janus", "{
  "janus": "attach",
  "plugin": "janus.plugin.videoroom",
  "transaction": "abcdef123456",
  "session_id": 987654321
}", $var(response));
        if (!$var(rc)) {
                xlog("failed to execute Janus command ($var(rc))\n");
                return -1;
        }
        xlog("Janus response is $var(response) \n");
...
...

1.4.2. Exported Events

1.4.2.1.  E_JANUS_EVENT

   This event is raised when a notification is received from a
   Janus server.

   Parameters represent the janus_id and the janus_url that
   originated the notification, and the full janus_body of the
   event received
     * janus_id - the janus id as defined in the database
     * janus_url - the janus url as defined in the database
     * janus_body - full body of the notification received from
       janus

   Example 1.9.  E_JANUS_EVENT example
...
# if the DB contains:
#       id: 1
# janus_id: test_janus
# janus_url: janusws://my_janus_host:80/janus?room=abcd

event_route[E_JANUS_EVENT] {
        xlog("Received janus event from $param(janus_id) - $param(janus_
url) - $param(janus_body) \n");
        $json(janus_body) := $param(janus_body);
        $avp(janus_sender) =  $json(janus_body/sender);
        if ($avp(janus_sender) != NULL) {
                xlog("Received event from sender $avp(janus_sender) \n")
;
        }
}
...
...

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. Vlad Paiu (@vladpaiu)              45       7      4390      5
   2. Razvan Crainea (@razvancrainea)    4        2       1        3
   3. Nick Altmann (@nikbyte)            3        1       1        1

   (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. Vlad Paiu (@vladpaiu)           Dec 2024 - May 2025
   2. Razvan Crainea (@razvancrainea) Mar 2025 - Mar 2025
   3. Nick Altmann (@nikbyte)         Feb 2025 - Feb 2025

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

Chapter 3. Documentation

3.1. Contributors

   Last edited by: Vlad Paiu (@vladpaiu).

   Documentation Copyrights:

   Copyright © 2024 OpenSIPS Project;
