opensips/modules/enum/README

Mon, 18 Jan 2010 20:35:22 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Mon, 18 Jan 2010 20:35:22 +0100
changeset 15
7ae8da2fe7c8
parent 13
b63f281afe6b
permissions
-rw-r--r--

Correct FTP URLs.

michael@12 1 Enum Module
michael@12 2
michael@12 3 Juha Heinanen
michael@12 4
michael@12 5 <jh@song.fi>
michael@12 6
michael@12 7 Otmar Lendl
michael@12 8
michael@12 9 <lendl@nic.at>
michael@12 10
michael@12 11 Copyright © 2002, 2003 Juha Heinanen
michael@12 12 Revision History
michael@13 13 Revision $Revision: 5907 $ $Date: 2010-01-18 10:45:05 +0100
michael@13 14 (Mon, 18 Jan 2010) $
michael@12 15 __________________________________________________________
michael@12 16
michael@12 17 Table of Contents
michael@12 18
michael@12 19 1. Admin Guide
michael@12 20
michael@12 21 1.1. Overview
michael@12 22 1.2. Dependencies
michael@12 23 1.3. Exported Parameters
michael@12 24
michael@12 25 1.3.1. domain_suffix (string)
michael@12 26 1.3.2. tel_uri_params (string)
michael@12 27 1.3.3. i_enum_suffix (string)
michael@13 28 1.3.4. isn_suffix (string)
michael@13 29 1.3.5. branchlabel (string)
michael@13 30 1.3.6. bl_algorithm (string)
michael@12 31
michael@12 32 1.4. Exported Functions
michael@12 33
michael@12 34 1.4.1. enum_query(["suffix"[,"service"]])
michael@12 35 1.4.2. enum_pv_query("pvar"[,"suffix"[,"service"]])
michael@12 36 1.4.3. i_enum_query(["suffix"[,"service"]])
michael@13 37 1.4.4. isn_query(["suffix"[,"service"]])
michael@13 38 1.4.5. is_from_user_enum()
michael@12 39
michael@12 40 List of Examples
michael@12 41
michael@12 42 1.1. Setting domain_suffix module parameter
michael@12 43 1.2. Setting tel_uri_params module parameter
michael@12 44 1.3. Setting i_enum_suffix module parameter
michael@13 45 1.4. Setting isn_query usage module parameter
michael@13 46 1.5. Setting branchlabel module parameter
michael@12 47 1.6. Zone file example
michael@13 48 1.7. Zone file example
michael@13 49 1.8. Setting the bl_algorithm module parameter
michael@13 50 1.9. enum_query usage
michael@13 51 1.10. enum_pv_query usage
michael@13 52 1.11. isn_query usage
michael@13 53 1.12. is_from_user_enum usage
michael@12 54
michael@12 55 Chapter 1. Admin Guide
michael@12 56
michael@12 57 1.1. Overview
michael@12 58
michael@12 59 Enum module implements [i_]enum_query functions that make an
michael@12 60 enum query based on the user part of the current Request-URI.
michael@12 61 These functions assume that the user part consists of an
michael@12 62 international phone number of the form +decimal-digits, where
michael@12 63 the number of digits is at least 2 and at most 15. Out of this
michael@12 64 number enum_query forms a domain name, where the digits are in
michael@12 65 reverse order and separated by dots followed by domain suffix
michael@12 66 that by default is "e164.arpa.". For example, if the user part
michael@12 67 is +35831234567, the domain name will be
michael@12 68 "7.6.5.4.3.2.1.3.8.5.3.e164.arpa.". i_enum_query operates in a
michael@12 69 similar fashion. The only difference is that it adds a label
michael@12 70 (default "i") to branch off from the default, user-ENUM tree to
michael@12 71 an infrastructure ENUM tree.
michael@12 72
michael@12 73 After forming the domain name, enum_query queries DNS for its
michael@12 74 NAPTR records. From the possible response enum_query chooses
michael@12 75 those records, whose flags field has string value "u", and
michael@12 76 whose services field has string value "e2u+[service:]sip" or
michael@12 77 "e2u+type[:subtype][+type[:subtype]...]" (case is ignored in
michael@12 78 both cases), and whose regexp field is of the form
michael@12 79 !pattern!replacement!.
michael@12 80
michael@12 81 Then enum_query sorts the chosen NAPTR records based on their
michael@12 82 <order, preference>. After sorting, enum_query replaces the
michael@12 83 current Request URI by applying regexp of the most preferred
michael@12 84 NAPTR record its user part and appends to the request new
michael@12 85 branches by applying regexp of each remaining NAPTR record to
michael@12 86 the user part of the current Request URI. If a new URI is a tel
michael@12 87 URI, enum_query appends to it as tel URI parameters the value
michael@12 88 of tel_uri_params module parameter. Finally, enum_query
michael@12 89 associates a q value with each new URI based on the <order,
michael@12 90 preference> of the corresponding NAPTR record.
michael@12 91
michael@12 92 When using enum_query without any parameters, it searches for
michael@12 93 NAPTRs with service type "e2u+sip" in the default enum tree.
michael@12 94 When using enum_query with a single parameter, this parameter
michael@12 95 will be used as enum tree. When using enum_query with two
michael@12 96 parameters, the functionality depends on the first letter in
michael@12 97 the second parameter. When the first letter is not a '+' sign,
michael@12 98 the second parameter will be used to search for NAPTRs with
michael@12 99 service type "e2u+parameter:sip". When the second parameter
michael@12 100 starts with a '+' sign, the ENUM lookup also supports compound
michael@12 101 NAPTRs (e.g. "e2u+voice:sip+video:sip") and searching for
michael@12 102 multiple service types within one lookup. Multiple service
michael@12 103 types must be separeted by a '+' sign.
michael@12 104
michael@12 105 Most of the time you want to route based on the RURI. On rare
michael@12 106 occasions you may wish to route based on something else. The
michael@12 107 function enum_pv_query mimics the behavior of the enum_query
michael@12 108 function except the E.164 number in its pseudo variable
michael@12 109 argument is used for the enum lookup instead of the user part
michael@12 110 of the RURI. Obviously the user part of the RURI is still used
michael@12 111 in the NAPTR regexp.
michael@12 112
michael@12 113 Enum query returns 1 if the current Request URI was replaced
michael@12 114 and -1 if not.
michael@12 115
michael@12 116 Enum module also implements is_from_user_enum function. This
michael@12 117 function does an enum lookup on the from user and returns true
michael@12 118 if found, false otherwise.
michael@12 119
michael@13 120 In addition to standard ENUM, support for ISN (ITAD Subscriber
michael@13 121 Numbers) is provided as well. To allow ISN lookups to resolve,
michael@13 122 a different formatting algorithm is expected by the DNS server.
michael@13 123 Whereas a ENUM NAPTR record expects a DNS query of the form
michael@13 124 9.8.7.6.5.4.3.2.1.<suffix>, ISN method expects a DNS query of
michael@13 125 the form 6.5.1212.<suffix>. That is, a valid ISN number includes
michael@13 126 a prefix of '56' in the example. The rest of the number is a
michael@13 127 ITAD (Internet Telephony Administrative Domain) as defined
michael@13 128 in RFCs 3872 and 2871, and as allocated by the IANA in
michael@13 129 http://www.iana.org/assignments/trip-parameters. The ITAD is
michael@13 130 left intact and not refersed as ENUM requires. To learn more
michael@13 131 about ISN please refer to documents at www.freenum.org.
michael@13 132
michael@13 133 To complete a ISN lookup on the user part of the Request-URI,
michael@13 134 isn_query() is used instead of enum_query().
michael@13 135
michael@12 136 1.2. Dependencies
michael@12 137
michael@12 138 The module depends on the following modules (in the other words
michael@12 139 the listed modules must be loaded before this module):
michael@12 140 * No dependencies.
michael@12 141
michael@12 142 1.3. Exported Parameters
michael@12 143
michael@12 144 1.3.1. domain_suffix (string)
michael@12 145
michael@12 146 The domain suffix to be added to the domain name obtained from
michael@12 147 the digits of an E164 number. Can be overridden by a parameter
michael@12 148 to enum_query.
michael@12 149
michael@12 150 Default value is "e164.arpa."
michael@12 151
michael@12 152 Example 1.1. Setting domain_suffix module parameter
michael@12 153 modparam("enum", "domain_suffix", "e1234.arpa.")
michael@12 154
michael@12 155 1.3.2. tel_uri_params (string)
michael@12 156
michael@12 157 A string whose contents is appended to each new tel URI in the
michael@12 158 request as tel URI parameters.
michael@12 159
michael@12 160 Note
michael@12 161
michael@12 162 Currently OpenSIPS does not support tel URIs. This means that
michael@12 163 at present tel_uri_params is appended as URI parameters to
michael@12 164 every URI.
michael@12 165
michael@12 166 Default value is ""
michael@12 167
michael@12 168 Example 1.2. Setting tel_uri_params module parameter
michael@12 169 modparam("enum", "tel_uri_params", ";npdi")
michael@12 170
michael@12 171 1.3.3. i_enum_suffix (string)
michael@12 172
michael@12 173 The domain suffix to be used for i_enum_query() lookups. Can be
michael@12 174 overridden by a parameter to i_enum_query.
michael@12 175
michael@12 176 Default value is "e164.arpa."
michael@12 177
michael@12 178 Example 1.3. Setting i_enum_suffix module parameter
michael@12 179 modparam("enum", "i_enum_suffix", "e1234.arpa.")
michael@12 180
michael@13 181 1.3.4. isn_suffix (string)
michael@13 182
michael@13 183 The domain suffix to be used for isn_query() lookups. Can be
michael@13 184 overridden by a parameter to isn_query.
michael@13 185
michael@13 186 Default value is "freenum.org."
michael@13 187
michael@13 188 Example 1.4. Setting isn_suffix module parameter
michael@13 189 modparam("enum", "isn_suffix", "freenum.org.")
michael@13 190
michael@13 191 1.3.5. branchlabel (string)
michael@12 192
michael@12 193 This parameter determines which label i_enum_query() will use
michael@12 194 to branch off to the infrastructure ENUM tree.
michael@12 195
michael@12 196 Default value is ""i""
michael@12 197
michael@13 198 Example 1.5. Setting branchlabel module parameter
michael@12 199 modparam("enum", "branchlabel", "i")
michael@12 200
michael@13 201 1.3.6. bl_algorithm (string)
michael@12 202
michael@12 203 This parameter determines which algorithm i_enum_query() will
michael@12 204 use to select the position in the DNS tree where the
michael@12 205 infrastructure tree branches off the user ENUM tree.
michael@12 206
michael@12 207 If set to "cc", i_enum_query() will always inserts the label at
michael@12 208 the country-code level. Examples: i.1.e164.arpa,
michael@12 209 i.3.4.e164.arpa, i.2.5.3.e164.arpa
michael@12 210
michael@12 211 If set to "txt", i_enum_query() will look for a TXT record at
michael@12 212 [branchlabel].[reverse-country-code].[i_enum_suffix] to
michael@12 213 indicate after how many digits the label should in inserted.
michael@12 214
michael@13 215 Example 1.6. Zone file example
michael@12 216 i.1.e164.arpa. IN TXT "4"
michael@12 217 9.9.9.8.7.6.5.i.4.3.2.1.e164.arpa. IN NAPTR "NAPTR content for +1 234 5
michael@12 218 678 999"
michael@12 219
michael@12 220 If set to "ebl", i_enum_query() will look for an EBL (ENUM
michael@12 221 Branch Label) record at
michael@12 222 [branchlabel].[reverse-country-code].[i_enum_suffix]. See
michael@12 223 http://www.ietf.org/internet-drafts/draft-lendl-enum-branch-loc
michael@12 224 ation-record-00.txt for a description of that record and the
michael@12 225 meaning of the fields. The RR type for the EBL has not been
michael@12 226 allocated yet. This version of the code uses 65300. See
michael@12 227 resolve.h.
michael@12 228
michael@13 229 Example 1.7. Zone file example
michael@12 230 i.1.e164.arpa. TYPE65300 \# 14 (
michael@12 231 04 ; position
michael@12 232 01 69 ; separator
michael@12 233 04 65 31 36 34 04 61 72 70 61 00 ; e164.ar
michael@12 234 pa
michael@12 235 ; )
michael@12 236 9.9.9.8.7.6.5.i.4.3.2.1.e164.arpa. IN NAPTR "NAPTR content for +1 234 5
michael@12 237 678 999"
michael@12 238
michael@12 239 Default value is "cc"
michael@12 240
michael@13 241 Example 1.8. Setting the bl_algorithm module parameter
michael@12 242 modparam("enum", "bl_algorithm", "txt")
michael@12 243
michael@12 244 1.4. Exported Functions
michael@12 245
michael@12 246 1.4.1. enum_query(["suffix"[,"service"]])
michael@12 247
michael@12 248 The function performs an enum query and rewrites the
michael@12 249 Request-URI with the result of the query. See Section 1.1,
michael@12 250 "Overview" for more information.
michael@12 251
michael@12 252 Meaning of the parameters is as follows:
michael@12 253 * suffix - Suffix to be appended to the domain name.
michael@12 254 * service - Service string to be used in the service field.
michael@12 255
michael@12 256 This function can be used from REQUEST_ROUTE.
michael@12 257
michael@13 258 Example 1.9. enum_query usage
michael@12 259 ...
michael@12 260 # search for "e2u+sip" in freenum.org
michael@12 261 enum_query("freenum.org.");
michael@12 262 ...
michael@12 263 # search for "e2u+sip" in default tree (configured as parameter)
michael@12 264 enum_query();
michael@12 265 ...
michael@12 266 # search for "e2u+voice:sip" in e164.arpa
michael@12 267 enum_query("e164.arpa.","voice");
michael@12 268 ...
michael@12 269 # search for service type "sip" or "voice:sip" or "video:sip"
michael@12 270 # note the '+' sign in front of the second parameter
michael@12 271 enum_query("e164.arpa.","+sip+voice:sip+video:sip");
michael@12 272 ...
michael@12 273 # quering for service sip and voice:sip
michael@12 274 enum_query("e164.arpa.");
michael@12 275 enum_query("e164.arpa.","voice");
michael@12 276 # or use instead
michael@12 277 enum_query("e164.arpa.","+sip+voice:sip");
michael@12 278 ...
michael@12 279
michael@12 280 1.4.2. enum_pv_query("pvar"[,"suffix"[,"service"]])
michael@12 281
michael@12 282 The function performs an enum query on E.164 number stored in
michael@12 283 its pseudo variable argument and rewrites the Request-URI with
michael@12 284 the result of the query. See Section 1.1, "Overview" for more
michael@12 285 information.
michael@12 286
michael@12 287 Meaning of the parameters is as follows:
michael@12 288 * pvar - Pseudo variable that holds an E.164 number on which
michael@12 289 enum query is performed.
michael@12 290 * suffix - Suffix to be appended to the domain name.
michael@12 291 * service - Service string to be used in the service field.
michael@12 292
michael@12 293 This function can be used from REQUEST_ROUTE.
michael@12 294
michael@13 295 Example 1.10. enum_pv_query usage
michael@12 296 ...
michael@12 297 # search for "e2u+sip" in freenum.org
michael@12 298 enum_pv_query("$avp(i:100)", "freenum.org.");
michael@12 299 ...
michael@12 300 # search for "e2u+sip" in default tree (configured as parameter)
michael@12 301 enum_pv_query("$fU");
michael@12 302 ...
michael@12 303 # search for "e2u+voice:sip" in e164.arpa
michael@12 304 enum_pv_query("$avp(i:100)","e164.arpa.","voice");
michael@12 305 ...
michael@12 306 # search for service type "sip" or "voice:sip" or "video:sip"
michael@12 307 # note the '+' sign in front of the second parameter
michael@12 308 enum_pv_query("$fU","e164.arpa.","+sip+voice:sip+video:sip");
michael@12 309 ...
michael@12 310 # quering for service sip and voice:sip
michael@12 311 enum_pv_query("$avp(i:100)","e164.arpa.");
michael@12 312 enum_pv_query("$avp(i:100)","e164.arpa.","voice");
michael@12 313 # or use instead
michael@12 314 enum_pv_query("$avp(i:100)","e164.arpa.","+sip+voice:sip");
michael@12 315 ...
michael@12 316
michael@12 317 1.4.3. i_enum_query(["suffix"[,"service"]])
michael@12 318
michael@12 319 The function performs an enum query and rewrites the
michael@12 320 Request-URI with the result of the query. This the
michael@12 321 Infrastructure-ENUM version of enum_query(). The only
michael@12 322 difference to enum_query() is in the calculation of the FQDN
michael@12 323 where NAPTR records are looked for.
michael@12 324
michael@12 325 See
michael@12 326 ftp://ftp.rfc-editor.org/in-notes/internet-drafts/draft-haberle
michael@12 327 r-carrier-enum-01.txt for the rationale behind this function.
michael@12 328
michael@13 329 1.4.4. isn_query(["suffix"[,"service"]])
michael@13 330
michael@13 331 The function performs a ISN query and rewrites the
michael@13 332 Request-URI with the result of the query. See Section 1.1,
michael@13 333 "Overview" for more information.
michael@13 334
michael@13 335 Meaning of the parameters is as follows:
michael@13 336 * suffix - Suffix to be appended to the domain name.
michael@13 337 * service - Service string to be used in the service field.
michael@13 338
michael@13 339 This function can be used from REQUEST_ROUTE.
michael@13 340
michael@15 341 See ftp://ftp.ietf.org/rfc/rfc3872.txt and
michael@15 342 ftp://ftp.ietf.org/rfc/rfc2871.txt for information
michael@13 343 regarding the ITAD part of the ISN string.
michael@13 344
michael@13 345 Example 1.11. isn_query usage
michael@13 346 ...
michael@13 347 # search for "e2u+sip" in freenum.org
michael@13 348 isn_query("freenum.org.");
michael@13 349 ...
michael@13 350 # search for "e2u+sip" in default tree (configured as parameter)
michael@13 351 enum_query();
michael@13 352 ...
michael@13 353 # search for "e2u+voice:sip" in freenum.org
michael@13 354 enum_query("freenum.org.","voice");
michael@13 355 ...
michael@13 356
michael@13 357 1.4.5. is_from_user_enum()
michael@12 358
michael@12 359 Checks if the user part of from URI is found in an enum lookup.
michael@12 360 Returns 1 if yes and -1 if not.
michael@12 361
michael@12 362 This function can be used from REQUEST_ROUTE.
michael@12 363
michael@13 364 Example 1.12. is_from_user_enum usage
michael@12 365 ...
michael@12 366 if (is_from_user_enum()) {
michael@12 367 ....
michael@12 368 };
michael@12 369 ...

mercurial