opensips/enum-isn.diff

Mon, 18 Jan 2010 19:59:51 +0100

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

Introduce ISN formatting and lookup logic into the ENUM module.
A detailed description of these changes is provided in enum-isn.txt.

michael@13 1 Index: modules/enum/enum_mod.h
michael@13 2 diff -Nau modules/enum/enum_mod.h.orig modules/enum/enum_mod.h
michael@13 3 --- modules/enum/enum_mod.h.orig 2010-01-18 15:54:52.842465412 +0100
michael@13 4 +++ modules/enum/enum_mod.h 2010-01-18 15:55:20.812190874 +0100
michael@13 5 @@ -41,5 +41,7 @@
michael@13 6 extern str i_branchlabel; /* the label branching off the infrastructure tree */
michael@13 7 extern str i_bl_alg; /* how to know where to branch off */
michael@13 8
michael@13 9 +extern str isnsuffix; /* str version of isn_suffix */
michael@13 10 +
michael@13 11
michael@13 12 #endif /* ENUM_MOD_H */
michael@13 13 Index: modules/enum/enum_mod.c
michael@13 14 diff -Nau modules/enum/enum_mod.c.orig modules/enum/enum_mod.c
michael@13 15 --- modules/enum/enum_mod.c.orig 2010-01-18 15:52:57.316263519 +0100
michael@13 16 +++ modules/enum/enum_mod.c 2010-01-18 15:52:42.844229824 +0100
michael@13 17 @@ -55,6 +55,8 @@
michael@13 18 char* i_enum_suffix = "e164.arpa.";
michael@13 19 char* bl_algorithm = "cc";
michael@13 20
michael@13 21 +char* isn_suffix = "freenum.org.";
michael@13 22 +
michael@13 23
michael@13 24 /*
michael@13 25 * Internal module variables
michael@13 26 @@ -67,6 +69,8 @@
michael@13 27 str i_branchlabel;
michael@13 28 str i_bl_alg;
michael@13 29
michael@13 30 +str isnsuffix;
michael@13 31 +
michael@13 32
michael@13 33 /*
michael@13 34 * Exported functions
michael@13 35 @@ -94,6 +98,11 @@
michael@13 36 REQUEST_ROUTE},
michael@13 37 {"i_enum_query", (cmd_function)i_enum_query_2, 2, fixup_str_str, 0,
michael@13 38 REQUEST_ROUTE},
michael@13 39 + {"isn_query", (cmd_function)isn_query_0, 0, 0, 0, REQUEST_ROUTE},
michael@13 40 + {"isn_query", (cmd_function)isn_query_1, 1, fixup_str_null,
michael@13 41 + fixup_free_str_null, REQUEST_ROUTE},
michael@13 42 + {"isn_query", (cmd_function)isn_query_2, 2, fixup_str_str,
michael@13 43 + fixup_free_str_str, REQUEST_ROUTE},
michael@13 44 {0, 0, 0, 0, 0, 0}
michael@13 45 };
michael@13 46
michael@13 47 @@ -107,6 +116,7 @@
michael@13 48 {"branchlabel", STR_PARAM, &branchlabel},
michael@13 49 {"i_enum_suffix", STR_PARAM, &i_enum_suffix},
michael@13 50 {"bl_algorithm", STR_PARAM, &bl_algorithm},
michael@13 51 + {"isn_suffix", STR_PARAM, &isn_suffix},
michael@13 52 {0, 0, 0}
michael@13 53 };
michael@13 54
michael@13 55 @@ -152,6 +162,9 @@
michael@13 56 i_bl_alg.s = bl_algorithm;
michael@13 57 i_bl_alg.len = strlen(bl_algorithm);
michael@13 58
michael@13 59 + isnsuffix.s = isn_suffix;
michael@13 60 + isnsuffix.len = strlen(isn_suffix.s);
michael@13 61 +
michael@13 62 return 0;
michael@13 63 }
michael@13 64
michael@13 65 Index: modules/enum/enum.h
michael@13 66 diff -Nau modules/enum/enum.h.orig modules/enum/enum.h
michael@13 67 --- modules/enum/enum.h.orig 2010-01-18 15:54:40.361624448 +0100
michael@13 68 +++ modules/enum/enum.h 2010-01-18 15:54:43.090330399 +0100
michael@13 69 @@ -66,5 +66,13 @@
michael@13 70 int i_enum_query_1(struct sip_msg* _msg, char* _suffix, char* _str2);
michael@13 71 int i_enum_query_2(struct sip_msg* _msg, char* _suffix, char* _service);
michael@13 72
michael@13 73 +/*
michael@13 74 + * Make ISN query and if query succeeds, replace current uri with the
michael@13 75 + * result of the query
michael@13 76 + */
michael@13 77 +int isn_query_0(struct sip_msg* _msg, char* _str1, char* _str2);
michael@13 78 +int isn_query_1(struct sip_msg* _msg, char* _suffix, char* _str2);
michael@13 79 +int isn_query_2(struct sip_msg* _msg, char* _suffix, char* _service);
michael@13 80 +
michael@13 81
michael@13 82 #endif /* ENUM_H */
michael@13 83 Index: modules/enum/enum.c
michael@13 84 diff -Nau modules/enum/enum.c.orig modules/enum/enum.c
michael@13 85 --- modules/enum/enum.c.orig 2010-01-18 15:57:10.995902181 +0100
michael@13 86 +++ modules/enum/enum.c 2010-01-18 15:46:19.642209178 +0100
michael@13 87 @@ -736,6 +736,84 @@
michael@13 88 }
michael@13 89
michael@13 90
michael@13 91 +/*
michael@13 92 + * Call isn_query_2 with module parameter suffix and default service.
michael@13 93 + */
michael@13 94 +int isn_query_0(struct sip_msg* _msg, char* _str1, char* _str2)
michael@13 95 +{
michael@13 96 + return isn_query_2(_msg, (char *)(&isnsuffix), (char *)(&service));
michael@13 97 +}
michael@13 98 +
michael@13 99 +
michael@13 100 +/*
michael@13 101 + * Call isn_query_2 with given suffix and default service.
michael@13 102 + */
michael@13 103 +int isn_query_1(struct sip_msg* _msg, char* _suffix, char* _str2)
michael@13 104 +{
michael@13 105 + return isn_query_2(_msg, _suffix, (char *)(&service));
michael@13 106 +}
michael@13 107 +
michael@13 108 +
michael@13 109 +/*
michael@13 110 + * See documentation in README file.
michael@13 111 + */
michael@13 112 +int isn_query_2(struct sip_msg* _msg, char* _suffix, char* _service)
michael@13 113 +{
michael@13 114 + char *user_s = NULL;
michael@13 115 + int user_len, i, j;
michael@13 116 + char name[MAX_DOMAIN_SIZE] = {0};
michael@13 117 + char string[17] = {0};
michael@13 118 + char szItad[17] = {0};
michael@13 119 + size_t nItlen = 0;
michael@13 120 +
michael@13 121 + str *suffix, *service;
michael@13 122 +
michael@13 123 + suffix = (str*)_suffix;
michael@13 124 + service = (str*)_service;
michael@13 125 +
michael@13 126 + if (parse_sip_msg_uri(_msg) < 0) {
michael@13 127 + LM_ERR("Parsing of R-URI failed\n");
michael@13 128 + return -1;
michael@13 129 + }
michael@13 130 +
michael@13 131 + user_s = _msg->parsed_uri.user.s;
michael@13 132 + user_len = _msg->parsed_uri.user.len;
michael@13 133 +
michael@13 134 + memcpy(&(string[0]), user_s, user_len);
michael@13 135 + string[user_len] = (char)0;
michael@13 136 +
michael@13 137 + /* Do primitive test for correct ISN format, */
michael@13 138 + /* and set szItad to the ISN ITAD (RFC 3872/2871). */
michael@13 139 + /* Correct ISN format guessed from freenum.org and IANA */
michael@13 140 + /* doc http://www.iana.org/assignments/trip-parameters/ */
michael@13 141 + {
michael@13 142 + char *pAster = strchr(string, '*');
michael@13 143 + if (pAster && (nItlen = strspn(pAster + sizeof(char), "0123456789")))
michael@13 144 + strncpy(szItad, pAster + sizeof(char), nItlen);
michael@13 145 + else {
michael@13 146 + LM_ERR("R-URI user does not contain a valid ISN\n");
michael@13 147 + return -1;
michael@13 148 + }
michael@13 149 + }
michael@13 150 +
michael@13 151 + /* Ammend the original ENUM E.164 string logic to process */
michael@13 152 + /* ISN numbers instead, which include a nonreversed ITAD. */
michael@13 153 + i = user_len - nItlen - sizeof(char); /* Ex: *1212 */
michael@13 154 + j = 0;
michael@13 155 + while (i--) {
michael@13 156 + name[j] = user_s[i];
michael@13 157 + name[j + 1] = '.';
michael@13 158 + j = j + 2;
michael@13 159 + }
michael@13 160 +
michael@13 161 + strcat(name + j, szItad); /* Copy the unreversed ITAD, */
michael@13 162 + name[j + nItlen] = '.'; /* and append a trailing dot. */
michael@13 163 + memcpy(name + j + nItlen + sizeof(char), suffix->s, suffix->len + 1);
michael@13 164 +
michael@13 165 + return do_query(_msg, string, name, service);
michael@13 166 +}
michael@13 167 +
michael@13 168 +
michael@13 169 /*********** INFRASTRUCTURE ENUM ***************/
michael@13 170
michael@13 171 /*
michael@13 172 Index: modules/enum/README
michael@13 173 diff -Nau modules/enum/README.orig modules/enum/README
michael@13 174 --- modules/enum/README.orig 2010-01-18 17:59:52.034172367 +0100
michael@13 175 +++ modules/enum/README 2010-01-18 18:01:30.730633377 +0100
michael@13 176 @@ -10,8 +10,8 @@
michael@13 177
michael@13 178 Copyright © 2002, 2003 Juha Heinanen
michael@13 179 Revision History
michael@13 180 - Revision $Revision: 5906 $ $Date: 2009-07-21 10:45:05 +0300
michael@13 181 - (Tue, 21 Jul 2009) $
michael@13 182 + Revision $Revision: 5907 $ $Date: 2010-01-18 10:45:05 +0100
michael@13 183 + (Mon, 18 Jan 2010) $
michael@13 184 __________________________________________________________
michael@13 185
michael@13 186 Table of Contents
michael@13 187 @@ -25,28 +25,32 @@
michael@13 188 1.3.1. domain_suffix (string)
michael@13 189 1.3.2. tel_uri_params (string)
michael@13 190 1.3.3. i_enum_suffix (string)
michael@13 191 - 1.3.4. branchlabel (string)
michael@13 192 - 1.3.5. bl_algorithm (string)
michael@13 193 + 1.3.4. isn_suffix (string)
michael@13 194 + 1.3.5. branchlabel (string)
michael@13 195 + 1.3.6. bl_algorithm (string)
michael@13 196
michael@13 197 1.4. Exported Functions
michael@13 198
michael@13 199 1.4.1. enum_query(["suffix"[,"service"]])
michael@13 200 1.4.2. enum_pv_query("pvar"[,"suffix"[,"service"]])
michael@13 201 1.4.3. i_enum_query(["suffix"[,"service"]])
michael@13 202 - 1.4.4. is_from_user_enum()
michael@13 203 + 1.4.4. isn_query(["suffix"[,"service"]])
michael@13 204 + 1.4.5. is_from_user_enum()
michael@13 205
michael@13 206 List of Examples
michael@13 207
michael@13 208 1.1. Setting domain_suffix module parameter
michael@13 209 1.2. Setting tel_uri_params module parameter
michael@13 210 1.3. Setting i_enum_suffix module parameter
michael@13 211 - 1.4. Setting brachlabel module parameter
michael@13 212 - 1.5. Zone file example
michael@13 213 + 1.4. Setting isn_query usage module parameter
michael@13 214 + 1.5. Setting branchlabel module parameter
michael@13 215 1.6. Zone file example
michael@13 216 - 1.7. Setting the bl_algorithm module parameter
michael@13 217 - 1.8. enum_query usage
michael@13 218 - 1.9. enum_pv_query usage
michael@13 219 - 1.10. is_from_user_enum usage
michael@13 220 + 1.7. Zone file example
michael@13 221 + 1.8. Setting the bl_algorithm module parameter
michael@13 222 + 1.9. enum_query usage
michael@13 223 + 1.10. enum_pv_query usage
michael@13 224 + 1.11. isn_query usage
michael@13 225 + 1.12. is_from_user_enum usage
michael@13 226
michael@13 227 Chapter 1. Admin Guide
michael@13 228
michael@13 229 @@ -113,6 +117,22 @@
michael@13 230 function does an enum lookup on the from user and returns true
michael@13 231 if found, false otherwise.
michael@13 232
michael@13 233 + In addition to standard ENUM, support for ISN (ITAD Subscriber
michael@13 234 + Numbers) is provided as well. To allow ISN lookups to resolve,
michael@13 235 + a different formatting algorithm is expected by the DNS server.
michael@13 236 + Whereas a ENUM NAPTR record expects a DNS query of the form
michael@13 237 + 9.8.7.6.5.4.3.2.1.<suffix>, ISN method expects a DNS query of
michael@13 238 + the form 6.5.1212.<suffix>. That is, a valid ISN number includes
michael@13 239 + a prefix of '56' in the example. The rest of the number is a
michael@13 240 + ITAD (Internet Telephony Administrative Domain) as defined
michael@13 241 + in RFCs 3872 and 2871, and as allocated by the IANA in
michael@13 242 + http://www.iana.org/assignments/trip-parameters. The ITAD is
michael@13 243 + left intact and not refersed as ENUM requires. To learn more
michael@13 244 + about ISN please refer to documents at www.freenum.org.
michael@13 245 +
michael@13 246 + To complete a ISN lookup on the user part of the Request-URI,
michael@13 247 + isn_query() is used instead of enum_query().
michael@13 248 +
michael@13 249 1.2. Dependencies
michael@13 250
michael@13 251 The module depends on the following modules (in the other words
michael@13 252 @@ -158,17 +178,27 @@
michael@13 253 Example 1.3. Setting i_enum_suffix module parameter
michael@13 254 modparam("enum", "i_enum_suffix", "e1234.arpa.")
michael@13 255
michael@13 256 -1.3.4. branchlabel (string)
michael@13 257 +1.3.4. isn_suffix (string)
michael@13 258 +
michael@13 259 + The domain suffix to be used for isn_query() lookups. Can be
michael@13 260 + overridden by a parameter to isn_query.
michael@13 261 +
michael@13 262 + Default value is "freenum.org."
michael@13 263 +
michael@13 264 + Example 1.4. Setting isn_suffix module parameter
michael@13 265 +modparam("enum", "isn_suffix", "freenum.org.")
michael@13 266 +
michael@13 267 +1.3.5. branchlabel (string)
michael@13 268
michael@13 269 This parameter determines which label i_enum_query() will use
michael@13 270 to branch off to the infrastructure ENUM tree.
michael@13 271
michael@13 272 Default value is ""i""
michael@13 273
michael@13 274 - Example 1.4. Setting brachlabel module parameter
michael@13 275 + Example 1.5. Setting branchlabel module parameter
michael@13 276 modparam("enum", "branchlabel", "i")
michael@13 277
michael@13 278 -1.3.5. bl_algorithm (string)
michael@13 279 +1.3.6. bl_algorithm (string)
michael@13 280
michael@13 281 This parameter determines which algorithm i_enum_query() will
michael@13 282 use to select the position in the DNS tree where the
michael@13 283 @@ -182,7 +212,7 @@
michael@13 284 [branchlabel].[reverse-country-code].[i_enum_suffix] to
michael@13 285 indicate after how many digits the label should in inserted.
michael@13 286
michael@13 287 - Example 1.5. Zone file example
michael@13 288 + Example 1.6. Zone file example
michael@13 289 i.1.e164.arpa. IN TXT "4"
michael@13 290 9.9.9.8.7.6.5.i.4.3.2.1.e164.arpa. IN NAPTR "NAPTR content for +1 234 5
michael@13 291 678 999"
michael@13 292 @@ -196,7 +226,7 @@
michael@13 293 allocated yet. This version of the code uses 65300. See
michael@13 294 resolve.h.
michael@13 295
michael@13 296 - Example 1.6. Zone file example
michael@13 297 + Example 1.7. Zone file example
michael@13 298 i.1.e164.arpa. TYPE65300 \# 14 (
michael@13 299 04 ; position
michael@13 300 01 69 ; separator
michael@13 301 @@ -208,7 +238,7 @@
michael@13 302
michael@13 303 Default value is "cc"
michael@13 304
michael@13 305 - Example 1.7. Setting the bl_algorithm module parameter
michael@13 306 + Example 1.8. Setting the bl_algorithm module parameter
michael@13 307 modparam("enum", "bl_algorithm", "txt")
michael@13 308
michael@13 309 1.4. Exported Functions
michael@13 310 @@ -225,7 +255,7 @@
michael@13 311
michael@13 312 This function can be used from REQUEST_ROUTE.
michael@13 313
michael@13 314 - Example 1.8. enum_query usage
michael@13 315 + Example 1.9. enum_query usage
michael@13 316 ...
michael@13 317 # search for "e2u+sip" in freenum.org
michael@13 318 enum_query("freenum.org.");
michael@13 319 @@ -262,7 +292,7 @@
michael@13 320
michael@13 321 This function can be used from REQUEST_ROUTE.
michael@13 322
michael@13 323 - Example 1.9. enum_pv_query usage
michael@13 324 + Example 1.10. enum_pv_query usage
michael@13 325 ...
michael@13 326 # search for "e2u+sip" in freenum.org
michael@13 327 enum_pv_query("$avp(i:100)", "freenum.org.");
michael@13 328 @@ -296,14 +326,42 @@
michael@13 329 ftp://ftp.rfc-editor.org/in-notes/internet-drafts/draft-haberle
michael@13 330 r-carrier-enum-01.txt for the rationale behind this function.
michael@13 331
michael@13 332 -1.4.4. is_from_user_enum()
michael@13 333 +1.4.4. isn_query(["suffix"[,"service"]])
michael@13 334 +
michael@13 335 + The function performs a ISN query and rewrites the
michael@13 336 + Request-URI with the result of the query. See Section 1.1,
michael@13 337 + "Overview" for more information.
michael@13 338 +
michael@13 339 + Meaning of the parameters is as follows:
michael@13 340 + * suffix - Suffix to be appended to the domain name.
michael@13 341 + * service - Service string to be used in the service field.
michael@13 342 +
michael@13 343 + This function can be used from REQUEST_ROUTE.
michael@13 344 +
michael@13 345 + See ftp://www.ietf.org/rfc/rfc3872.txt and
michael@13 346 + ftp://www.ietf.org/rfc/rfc2871.txt for information
michael@13 347 + regarding the ITAD part of the ISN string.
michael@13 348 +
michael@13 349 + Example 1.11. isn_query usage
michael@13 350 +...
michael@13 351 +# search for "e2u+sip" in freenum.org
michael@13 352 +isn_query("freenum.org.");
michael@13 353 +...
michael@13 354 +# search for "e2u+sip" in default tree (configured as parameter)
michael@13 355 +enum_query();
michael@13 356 +...
michael@13 357 +# search for "e2u+voice:sip" in freenum.org
michael@13 358 +enum_query("freenum.org.","voice");
michael@13 359 +...
michael@13 360 +
michael@13 361 +1.4.5. is_from_user_enum()
michael@13 362
michael@13 363 Checks if the user part of from URI is found in an enum lookup.
michael@13 364 Returns 1 if yes and -1 if not.
michael@13 365
michael@13 366 This function can be used from REQUEST_ROUTE.
michael@13 367
michael@13 368 - Example 1.10. is_from_user_enum usage
michael@13 369 + Example 1.12. is_from_user_enum usage
michael@13 370 ...
michael@13 371 if (is_from_user_enum()) {
michael@13 372 ....
michael@13 373 Index: modules/enum/doc/enum.xml
michael@13 374 diff -Nau modules/enum/doc/enum.xml.orig modules/enum/doc/enum.xml
michael@13 375 --- modules/enum/doc/enum.xml.orig 2009-10-16 02:31:52.000000000 +0200
michael@13 376 +++ modules/enum/doc/enum.xml 2010-01-18 18:01:15.954172402 +0100
michael@13 377 @@ -33,8 +33,8 @@
michael@13 378 </copyright>
michael@13 379 <revhistory>
michael@13 380 <revision>
michael@13 381 - <revnumber>$Revision: 5901 $</revnumber>
michael@13 382 - <date>$Date: 2009-07-21 10:45:05 +0300 (Tue, 21 Jul 2009) $</date>
michael@13 383 + <revnumber>$Revision: 5907 $</revnumber>
michael@13 384 + <date>$Date: 2010-01-18 10:45:05 +0100 (Mon, 18 Jan 2010) $</date>
michael@13 385 </revision>
michael@13 386 </revhistory>
michael@13 387 </bookinfo>
michael@13 388 Index: modules/enum/doc/enum_admin.xml
michael@13 389 diff -Nau modules/enum/doc/enum_admin.xml.orig modules/enum/doc/enum_admin.xml
michael@13 390 --- modules/enum/doc/enum_admin.xml.orig 2010-01-18 12:33:30.053644000 +0100
michael@13 391 +++ modules/enum/doc/enum_admin.xml 2010-01-18 18:14:59.583157910 +0100
michael@13 392 @@ -75,6 +75,24 @@
michael@13 393 and -1 if not.
michael@13 394 </para>
michael@13 395 <para>
michael@13 396 + In addition to standard ENUM, support for ISN (ITAD Subscriber
michael@13 397 + Numbers) is provided as well. To allow ISN lookups to resolve,
michael@13 398 + a different formatting algorithm is expected by the DNS server.
michael@13 399 + Whereas a ENUM NAPTR record expects a DNS query of the form
michael@13 400 + 9.8.7.6.5.4.3.2.1.<suffix>, ISN method expects a DNS query of
michael@13 401 + the form 6.5.1212.<suffix>. That is, a valid ISN number includes
michael@13 402 + a prefix of '56' in the example. The rest of the number is a
michael@13 403 + ITAD (Internet Telephony Administrative Domain) as defined
michael@13 404 + in RFCs 3872 and 2871, and as allocated by the IANA in
michael@13 405 + http://www.iana.org/assignments/trip-parameters. The ITAD is
michael@13 406 + left intact and not refersed as ENUM requires. To learn more
michael@13 407 + about ISN please refer to documents at www.freenum.org.
michael@13 408 + </para>
michael@13 409 + <para>
michael@13 410 + To complete a ISN lookup on the user part of the Request-URI,
michael@13 411 + isn_query() is used instead of enum_query().
michael@13 412 + </para>
michael@13 413 + <para>
michael@13 414 Enum module also implements is_from_user_enum function.
michael@13 415 This function does an enum lookup on the from user and
michael@13 416 returns true if found, false otherwise.
michael@13 417 @@ -153,6 +171,22 @@
michael@13 418 </example>
michael@13 419 </section>
michael@13 420 <section>
michael@13 421 + <title><varname>isn_suffix</varname> (string)</title>
michael@13 422 + <para>
michael@13 423 + The domain suffix to be used for isn_query() lookups. Can
michael@13 424 + be overridden by a parameter to isn_query.
michael@13 425 + </para>
michael@13 426 + <para>
michael@13 427 + Default value is <quote>freenum.org.</quote>
michael@13 428 + </para>
michael@13 429 + <example>
michael@13 430 + <title>Setting isn_suffix module parameter</title>
michael@13 431 + <programlisting format="linespecific">
michael@13 432 +modparam("enum", "isn_suffix", "freenum.org.")
michael@13 433 +</programlisting>
michael@13 434 + </example>
michael@13 435 + </section>
michael@13 436 + <section>
michael@13 437 <title><varname>branchlabel</varname> (string)</title>
michael@13 438 <para>
michael@13 439 This parameter determines which label i_enum_query() will use
michael@13 440 @@ -162,7 +196,7 @@
michael@13 441 Default value is <quote>"i"</quote>
michael@13 442 </para>
michael@13 443 <example>
michael@13 444 - <title>Setting brachlabel module parameter</title>
michael@13 445 + <title>Setting branchlabel module parameter</title>
michael@13 446 <programlisting format="linespecific">
michael@13 447 modparam("enum", "branchlabel", "i")
michael@13 448 </programlisting>
michael@13 449 @@ -353,6 +387,53 @@
michael@13 450 </section>
michael@13 451
michael@13 452 <section>
michael@13 453 + <title>
michael@13 454 + <function moreinfo="none">isn_query(["suffix"[,"service"]])</function>
michael@13 455 + </title>
michael@13 456 + <para>
michael@13 457 + The function performs a ISN query and rewrites the Request-URI with
michael@13 458 + the result of the query. See <xref linkend="sec-overview"/> for more
michael@13 459 + information.
michael@13 460 + </para>
michael@13 461 + <para>Meaning of the parameters is as follows:</para>
michael@13 462 + <itemizedlist>
michael@13 463 + <listitem>
michael@13 464 + <para><emphasis>suffix</emphasis> - Suffix to be appended to the
michael@13 465 + domain name.
michael@13 466 + </para>
michael@13 467 + </listitem>
michael@13 468 + <listitem>
michael@13 469 + <para><emphasis>service</emphasis> - Service string to be used in
michael@13 470 + the service field.
michael@13 471 + </para>
michael@13 472 + </listitem>
michael@13 473 + </itemizedlist>
michael@13 474 + <para>
michael@13 475 + This function can be used from REQUEST_ROUTE.
michael@13 476 + </para>
michael@13 477 + <para>
michael@13 478 + See ftp://www.ietf.org/rfc/rfc3872.txt and
michael@13 479 + ftp://www.ietf.org/rfc/rfc2871.txt for information
michael@13 480 + regarding the ITAD part of the ISN string.
michael@13 481 + </para>
michael@13 482 + <example>
michael@13 483 + <title><function moreinfo="none">isn_query</function> usage</title>
michael@13 484 + <programlisting format="linespecific">
michael@13 485 +...
michael@13 486 +# search for "e2u+sip" in freenum.org
michael@13 487 +isn_query("freenum.org.");
michael@13 488 +...
michael@13 489 +# search for "e2u+sip" in default tree (configured as parameter)
michael@13 490 +isn_query();
michael@13 491 +...
michael@13 492 +# search for "e2u+voice:sip" in freenum.org
michael@13 493 +isn_query("freenum.org.","voice");
michael@13 494 +...
michael@13 495 +</programlisting>
michael@13 496 + </example>
michael@13 497 + </section>
michael@13 498 +
michael@13 499 + <section>
michael@13 500 <title><function moreinfo="none">is_from_user_enum()</function></title>
michael@13 501 <para>
michael@13 502 Checks if the user part of from <abbrev>URI</abbrev>

mercurial