Enum Module Juha Heinanen Copyright © 2002, 2003 Juha Heinanen _________________________________________________________ Table of Contents 1. User's Guide 1.1. Overview 1.2. Dependencies 1.3. Exported Parameters 1.3.1. domain_suffix (string) 1.4. Exported Functions 1.4.1. enum_query(service) 1.4.2. is_from_user_e164() 2. Developer's Guide 3. Frequently Asked Questions List of Examples 1-1. Setting domain_suffix module parameter 1-2. enum_query usage 1-3. is_from_user_e164 usage _________________________________________________________ Chapter 1. User's Guide 1.1. Overview Enum module implements enum_query function that makes an enum query based on the user part of the current request URI. The function assumes that the user part consists of an international phone number of the form +decimal-digits, where the number of digits is at least 2 and at most 15. Out of this number enum_query forms a domain name, where the digits are in reverse order and separated by dots followed by domain suffix that by default is "e164.arpa.". For example, if the user part is +35831234567, the domain name will be "7.6.5.4.3.2.1.3.8.5.3.e164.arpa.". After forming the name, enum_queryenum_query queries from DNS its NAPTR records. From the possible response the current version of enum_query chooses the FIRST record, whose flags field has string value "u" and whose services field has string value "e2u+[service:]sip" (case is ignored in both cases). "service" is given to enum_query as a parameter. If its value is "", then "e2u+sip" is looked for. If no such record is found, enum_query returns -1. If such a record is found, enum_query checks if its regexp field is of the form !pattern!replacement!. If yes, enum_query replaces the current Request-URI with replacement, which it assumes to contain a SIP or SIPS type URI, and returns value 1. If the regexp field is not of the form !pattern!replacement!, enum_query returns -1. In addition to enum_query, enum module implements is_from_user_e164 function that checks if the user part of from URI is an E164 number. TODO: In enum_query, proper implementation of the NAPTR record selection algorithm could be implemented by taking into account the order and preference fields (see draft-ietf-sipping-e164-02). _________________________________________________________ 1.2. Dependencies The module depends on the following modules (in the other words the listed modules must be loaded before this module): * No dependencies. _________________________________________________________ 1.3. Exported Parameters 1.3.1. domain_suffix (string) The domain suffix to be added to the domain name obtained from the digits of an E164 number. Default value is "e164.arpa." Example 1-1. Setting domain_suffix module parameter modparam("enum", "domain_suffix", "e1234.arpa.") _________________________________________________________ 1.4. Exported Functions 1.4.1. enum_query(service) Replaces the current Request-URI with the result of a successful enum query on the user part of the current Request-URI, which is assumed to be of the form +up-to-15-decimal-digits. An NAPTR record whose flags field has string value "u" and whose services field has string value "e2u+service:sip" or "e2u+sip" (if service string == "") is looked for. Returns -1 if enum_query fails and 1 otherwise. Meaning of the parameters is as follows: * service - service string to be used in the service field. Example 1-2. enum_query usage ... enum_query(""); ... _________________________________________________________ 1.4.2. is_from_user_e164() Checks if the user part of from URI an E164 number of the form +[0-9]{2,15}. Returns 1 if yes and -1 if not. Example 1-3. is_from_user_e164 usage ... if (is_from_user_e164()) { .... }; ... _________________________________________________________ Chapter 2. Developer's Guide To be done. _________________________________________________________ Chapter 3. Frequently Asked Questions 3.1. What is the meaning of life ? 3.1. What is the meaning of life ? 42