1. RR Module

Jan Janak

   FhG FOKUS

   Copyright © 2003 FhG FOKUS
     __________________________________________________________________

   1.1. Overview
   1.2. Parameters

        1.2.1. enable_full_lr (integer)
        1.2.2. append_fromtag (integer)
        1.2.3. enable_double_rr (integer)
        1.2.4. user_part_avp (string)
        1.2.5. next_route_avp (string)
        1.2.6. cookie_secret (string)
        1.2.7. force_send_socket (integer)

   1.3. Functions

        1.3.1. loose_route()
        1.3.2. strict_route() -- deprecated
        1.3.3. record_route()
        1.3.4. record_route_preset(string)

1.1. Overview

   The module contains record routing logic

1.2. Parameters

1.2.1. enable_full_lr (integer)

   If set to 1 then ;lr=on instead of just ;lr will be used. This is to
   overcome problems with broken UAs which strip ;lr parameter when
   generating Route header fields from Record-Route (;lr=on seems to
   help).

   Default value is 0 (no).

   Example 1. Set enable_full_lr parameter
...
modparam("rr", "enable_full_lr", 1)
...

1.2.2. append_fromtag (integer)

   if turned on, request's from-tag is appended to record-route; that's
   useful for understanding whether subsequent requests (such as BYE) come
   from caller (route's from-tag==BYE's from-tag) or callee (route's
   from-tag==BYE's to-tag)

   Default value is 1 (yes).

   Example 2. Set append_fromtag parameter
...
modparam("rr", "append_fromtag", 0)
...

1.2.3. enable_double_rr (integer)

   There are some situations when the server needs to insert two
   Record-Route header fields instead of one. For example when using two
   disconnected networks or doing cross-protocol forwarding from UDP->TCP.
   This parameter enables inserting of 2 Record-Routes. The server will
   later remove both of them.

   Default value is 1 (yes).

   Example 3. Set enable_double_rr parameter
...
modparam("rr", "enable_double_rr", 0)
...

1.2.4. user_part_avp (string)

   If this parameter is set, the loose_route call stores the user part of
   the route URI in the AVP, which is identified by the parameter value.
   It can be utilized later in the routing script.

   Default value is NULL (do not insert user part into avps).

   Example 4. Set user_part_avp parameter, later use
...
modparam("rr", "user_part_avp", "route_user")
...
route{
...
        if (loose_route()) {
                t_relay();
        }

        if ($route_user == "my_user") {
                ...
        }
...
}

1.2.5. next_route_avp (string)

   If this parameter is set, the loose_route call stores the URI of the
   next hop in the AVP, which is identified by the parameter value. It can
   be then utilized in the routing script.

   Default value is NULL (do not insert next route into avps).

   Example 5. Set next_route_avp parameter, later use
...
modparam("rr", "next_route_avp", "route_next")
...
route{
...
        loose_route();

        if ($route_next=~"101.102.103.1[0-9][0-9]") {
                t_relay();
        }

1.2.6. cookie_secret (string)

   Secret to distinguish cookies from different servers.

   Default value is empty string.

   Example 6. Set cookie_secret parameter, later use
...
modparam("rr", "cookie_secret", "bflmpsvz")
...

1.2.7. force_send_socket (integer)

   If set to 1 and two Record-Route headers have been inserted by the
   proxy before then the outgoing socket is forced by loose_route() to be
   the address of the second Route header in the in-dialog requests.
   Useful on multihomed hosts.

   Default value is 1 (yes).

   Example 7. Set force_send_socket parameter
...
modparam("rr", "force_send_socket", 1)
...

1.3. Functions

1.3.1.  loose_route()

   The function performs loose routing as defined in RFC3261 and will set
   Avp value passed in Route header that were created by record_route. If
   ftag!=tag.from then from/to are flipped.

   Example 8. loose_route usage
...
loose_route();
...

1.3.2.  strict_route() -- deprecated

   If there are any Route HFs in the message, the function takes the first
   one, rewrites Request-URI with it's value and removes the first URI
   from Route HFs.

   Example 9. strict_route usage
...
strict_route();
...

1.3.3.  record_route()

   The function adds a new Record-Route header field. The header field
   will be inserted in the message before any other Record-Route header
   fields. Avp marked using setavpflag, flag dialog_cookie will be
   inserted as serialized parameter of record-route header. Note that only
   user class AVPs should be passed as cookies, i.e. domain and global
   should be avoided.

   Example 10. record_route usage
avpflags
        dialog_cookie;  # must be declared when used in script
...
setavpflag($cookie, "dialog_cookie");
setavpflag("$f./^dlg_/", "dialog_cookie");
record_route();
...

1.3.4.  record_route_preset(string)

   This function will put the string into Record-Route, don't use unless
   you know what you are doing.

   Meaning of the parameters is as follows:
     * string - String to be inserted into the header field.

   Example 11. record_route_preset usage
...
record_route_preset("1.2.3.4:5090");
...