opensips/modules/enum/README

Mon, 18 Jan 2010 19:47:23 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Mon, 18 Jan 2010 19:47:23 +0100
changeset 12
a3ac912f2857
child 13
b63f281afe6b
permissions
-rw-r--r--

Import unmodified vendor sources for correction and improvement.

     1 Enum Module
     3 Juha Heinanen
     5    <jh@song.fi>
     7 Otmar Lendl
     9    <lendl@nic.at>
    11    Copyright © 2002, 2003 Juha Heinanen
    12    Revision History
    13    Revision $Revision: 5906 $ $Date: 2009-07-21 10:45:05 +0300
    14                               (Tue, 21 Jul 2009) $
    15      __________________________________________________________
    17    Table of Contents
    19    1. Admin Guide
    21         1.1. Overview
    22         1.2. Dependencies
    23         1.3. Exported Parameters
    25               1.3.1. domain_suffix (string)
    26               1.3.2. tel_uri_params (string)
    27               1.3.3. i_enum_suffix (string)
    28               1.3.4. branchlabel (string)
    29               1.3.5. bl_algorithm (string)
    31         1.4. Exported Functions
    33               1.4.1. enum_query(["suffix"[,"service"]])
    34               1.4.2. enum_pv_query("pvar"[,"suffix"[,"service"]])
    35               1.4.3. i_enum_query(["suffix"[,"service"]])
    36               1.4.4. is_from_user_enum()
    38    List of Examples
    40    1.1. Setting domain_suffix module parameter
    41    1.2. Setting tel_uri_params module parameter
    42    1.3. Setting i_enum_suffix module parameter
    43    1.4. Setting brachlabel module parameter
    44    1.5. Zone file example
    45    1.6. Zone file example
    46    1.7. Setting the bl_algorithm module parameter
    47    1.8. enum_query usage
    48    1.9. enum_pv_query usage
    49    1.10. is_from_user_enum usage
    51 Chapter 1. Admin Guide
    53 1.1. Overview
    55    Enum module implements [i_]enum_query functions that make an
    56    enum query based on the user part of the current Request-URI.
    57    These functions assume that the user part consists of an
    58    international phone number of the form +decimal-digits, where
    59    the number of digits is at least 2 and at most 15. Out of this
    60    number enum_query forms a domain name, where the digits are in
    61    reverse order and separated by dots followed by domain suffix
    62    that by default is "e164.arpa.". For example, if the user part
    63    is +35831234567, the domain name will be
    64    "7.6.5.4.3.2.1.3.8.5.3.e164.arpa.". i_enum_query operates in a
    65    similar fashion. The only difference is that it adds a label
    66    (default "i") to branch off from the default, user-ENUM tree to
    67    an infrastructure ENUM tree.
    69    After forming the domain name, enum_query queries DNS for its
    70    NAPTR records. From the possible response enum_query chooses
    71    those records, whose flags field has string value "u", and
    72    whose services field has string value "e2u+[service:]sip" or
    73    "e2u+type[:subtype][+type[:subtype]...]" (case is ignored in
    74    both cases), and whose regexp field is of the form
    75    !pattern!replacement!.
    77    Then enum_query sorts the chosen NAPTR records based on their
    78    <order, preference>. After sorting, enum_query replaces the
    79    current Request URI by applying regexp of the most preferred
    80    NAPTR record its user part and appends to the request new
    81    branches by applying regexp of each remaining NAPTR record to
    82    the user part of the current Request URI. If a new URI is a tel
    83    URI, enum_query appends to it as tel URI parameters the value
    84    of tel_uri_params module parameter. Finally, enum_query
    85    associates a q value with each new URI based on the <order,
    86    preference> of the corresponding NAPTR record.
    88    When using enum_query without any parameters, it searches for
    89    NAPTRs with service type "e2u+sip" in the default enum tree.
    90    When using enum_query with a single parameter, this parameter
    91    will be used as enum tree. When using enum_query with two
    92    parameters, the functionality depends on the first letter in
    93    the second parameter. When the first letter is not a '+' sign,
    94    the second parameter will be used to search for NAPTRs with
    95    service type "e2u+parameter:sip". When the second parameter
    96    starts with a '+' sign, the ENUM lookup also supports compound
    97    NAPTRs (e.g. "e2u+voice:sip+video:sip") and searching for
    98    multiple service types within one lookup. Multiple service
    99    types must be separeted by a '+' sign.
   101    Most of the time you want to route based on the RURI. On rare
   102    occasions you may wish to route based on something else. The
   103    function enum_pv_query mimics the behavior of the enum_query
   104    function except the E.164 number in its pseudo variable
   105    argument is used for the enum lookup instead of the user part
   106    of the RURI. Obviously the user part of the RURI is still used
   107    in the NAPTR regexp.
   109    Enum query returns 1 if the current Request URI was replaced
   110    and -1 if not.
   112    Enum module also implements is_from_user_enum function. This
   113    function does an enum lookup on the from user and returns true
   114    if found, false otherwise.
   116 1.2. Dependencies
   118    The module depends on the following modules (in the other words
   119    the listed modules must be loaded before this module):
   120      * No dependencies.
   122 1.3. Exported Parameters
   124 1.3.1. domain_suffix (string)
   126    The domain suffix to be added to the domain name obtained from
   127    the digits of an E164 number. Can be overridden by a parameter
   128    to enum_query.
   130    Default value is "e164.arpa."
   132    Example 1.1. Setting domain_suffix module parameter
   133 modparam("enum", "domain_suffix", "e1234.arpa.")
   135 1.3.2. tel_uri_params (string)
   137    A string whose contents is appended to each new tel URI in the
   138    request as tel URI parameters.
   140 Note
   142    Currently OpenSIPS does not support tel URIs. This means that
   143    at present tel_uri_params is appended as URI parameters to
   144    every URI.
   146    Default value is ""
   148    Example 1.2. Setting tel_uri_params module parameter
   149 modparam("enum", "tel_uri_params", ";npdi")
   151 1.3.3. i_enum_suffix (string)
   153    The domain suffix to be used for i_enum_query() lookups. Can be
   154    overridden by a parameter to i_enum_query.
   156    Default value is "e164.arpa."
   158    Example 1.3. Setting i_enum_suffix module parameter
   159 modparam("enum", "i_enum_suffix", "e1234.arpa.")
   161 1.3.4. branchlabel (string)
   163    This parameter determines which label i_enum_query() will use
   164    to branch off to the infrastructure ENUM tree.
   166    Default value is ""i""
   168    Example 1.4. Setting brachlabel module parameter
   169 modparam("enum", "branchlabel", "i")
   171 1.3.5. bl_algorithm (string)
   173    This parameter determines which algorithm i_enum_query() will
   174    use to select the position in the DNS tree where the
   175    infrastructure tree branches off the user ENUM tree.
   177    If set to "cc", i_enum_query() will always inserts the label at
   178    the country-code level. Examples: i.1.e164.arpa,
   179    i.3.4.e164.arpa, i.2.5.3.e164.arpa
   181    If set to "txt", i_enum_query() will look for a TXT record at
   182    [branchlabel].[reverse-country-code].[i_enum_suffix] to
   183    indicate after how many digits the label should in inserted.
   185    Example 1.5. Zone file example
   186 i.1.e164.arpa.                     IN TXT   "4"
   187 9.9.9.8.7.6.5.i.4.3.2.1.e164.arpa. IN NAPTR "NAPTR content for  +1 234 5
   188 678 999"
   190    If set to "ebl", i_enum_query() will look for an EBL (ENUM
   191    Branch Label) record at
   192    [branchlabel].[reverse-country-code].[i_enum_suffix]. See
   193    http://www.ietf.org/internet-drafts/draft-lendl-enum-branch-loc
   194    ation-record-00.txt for a description of that record and the
   195    meaning of the fields. The RR type for the EBL has not been
   196    allocated yet. This version of the code uses 65300. See
   197    resolve.h.
   199    Example 1.6. Zone file example
   200 i.1.e164.arpa.     TYPE65300  \# 14 (
   201                               04    ; position
   202                               01 69 ; separator
   203                               04 65 31 36 34 04 61 72 70 61 00 ; e164.ar
   204 pa
   205 ;                               )
   206 9.9.9.8.7.6.5.i.4.3.2.1.e164.arpa. IN NAPTR "NAPTR content for  +1 234 5
   207 678 999"
   209    Default value is "cc"
   211    Example 1.7. Setting the bl_algorithm module parameter
   212 modparam("enum", "bl_algorithm", "txt")
   214 1.4. Exported Functions
   216 1.4.1.  enum_query(["suffix"[,"service"]])
   218    The function performs an enum query and rewrites the
   219    Request-URI with the result of the query. See Section 1.1,
   220    "Overview" for more information.
   222    Meaning of the parameters is as follows:
   223      * suffix - Suffix to be appended to the domain name.
   224      * service - Service string to be used in the service field.
   226    This function can be used from REQUEST_ROUTE.
   228    Example 1.8. enum_query usage
   229 ...
   230 # search for "e2u+sip" in freenum.org
   231 enum_query("freenum.org.");
   232 ...
   233 # search for "e2u+sip" in default tree (configured as parameter)
   234 enum_query();
   235 ...
   236 # search for "e2u+voice:sip" in e164.arpa
   237 enum_query("e164.arpa.","voice");
   238 ...
   239 # search for service type "sip" or "voice:sip" or "video:sip"
   240 # note the '+' sign in front of the second parameter
   241 enum_query("e164.arpa.","+sip+voice:sip+video:sip");
   242 ...
   243 # quering for service sip and voice:sip
   244 enum_query("e164.arpa.");
   245 enum_query("e164.arpa.","voice");
   246 # or use instead
   247 enum_query("e164.arpa.","+sip+voice:sip");
   248 ...
   250 1.4.2.  enum_pv_query("pvar"[,"suffix"[,"service"]])
   252    The function performs an enum query on E.164 number stored in
   253    its pseudo variable argument and rewrites the Request-URI with
   254    the result of the query. See Section 1.1, "Overview" for more
   255    information.
   257    Meaning of the parameters is as follows:
   258      * pvar - Pseudo variable that holds an E.164 number on which
   259        enum query is performed.
   260      * suffix - Suffix to be appended to the domain name.
   261      * service - Service string to be used in the service field.
   263    This function can be used from REQUEST_ROUTE.
   265    Example 1.9. enum_pv_query usage
   266 ...
   267 # search for "e2u+sip" in freenum.org
   268 enum_pv_query("$avp(i:100)", "freenum.org.");
   269 ...
   270 # search for "e2u+sip" in default tree (configured as parameter)
   271 enum_pv_query("$fU");
   272 ...
   273 # search for "e2u+voice:sip" in e164.arpa
   274 enum_pv_query("$avp(i:100)","e164.arpa.","voice");
   275 ...
   276 # search for service type "sip" or "voice:sip" or "video:sip"
   277 # note the '+' sign in front of the second parameter
   278 enum_pv_query("$fU","e164.arpa.","+sip+voice:sip+video:sip");
   279 ...
   280 # quering for service sip and voice:sip
   281 enum_pv_query("$avp(i:100)","e164.arpa.");
   282 enum_pv_query("$avp(i:100)","e164.arpa.","voice");
   283 # or use instead
   284 enum_pv_query("$avp(i:100)","e164.arpa.","+sip+voice:sip");
   285 ...
   287 1.4.3.  i_enum_query(["suffix"[,"service"]])
   289    The function performs an enum query and rewrites the
   290    Request-URI with the result of the query. This the
   291    Infrastructure-ENUM version of enum_query(). The only
   292    difference to enum_query() is in the calculation of the FQDN
   293    where NAPTR records are looked for.
   295    See
   296    ftp://ftp.rfc-editor.org/in-notes/internet-drafts/draft-haberle
   297    r-carrier-enum-01.txt for the rationale behind this function.
   299 1.4.4. is_from_user_enum()
   301    Checks if the user part of from URI is found in an enum lookup.
   302    Returns 1 if yes and -1 if not.
   304    This function can be used from REQUEST_ROUTE.
   306    Example 1.10. is_from_user_enum usage
   307 ...
   308 if (is_from_user_enum()) {
   309         ....
   310 };
   311 ...

mercurial