Mon, 18 Jan 2010 20:35:22 +0100
Correct FTP URLs.
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> |