opensips/enum-isn.diff

changeset 19
3374f578f080
parent 18
8ec65b8f6e2c
child 20
2ff1f58715ce
     1.1 --- a/opensips/enum-isn.diff	Wed Feb 10 21:25:01 2010 +0100
     1.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.3 @@ -1,502 +0,0 @@
     1.4 -Index: modules/enum/enum_mod.h
     1.5 -diff -Nau modules/enum/enum_mod.h.orig modules/enum/enum_mod.h
     1.6 ---- modules/enum/enum_mod.h.orig	2010-01-18 15:54:52.842465412 +0100
     1.7 -+++ modules/enum/enum_mod.h	2010-01-18 15:55:20.812190874 +0100
     1.8 -@@ -41,5 +41,7 @@
     1.9 - extern str i_branchlabel;    /* the label branching off the infrastructure tree */
    1.10 - extern str i_bl_alg;         /* how to know where to branch off */
    1.11 - 
    1.12 -+extern str isnsuffix;        /* str version of isn_suffix */
    1.13 -+
    1.14 - 
    1.15 - #endif /* ENUM_MOD_H */
    1.16 -Index: modules/enum/enum_mod.c
    1.17 -diff -Nau modules/enum/enum_mod.c.orig modules/enum/enum_mod.c
    1.18 ---- modules/enum/enum_mod.c.orig	2010-01-18 15:52:57.316263519 +0100
    1.19 -+++ modules/enum/enum_mod.c	2010-01-18 15:52:42.844229824 +0100
    1.20 -@@ -55,6 +55,8 @@
    1.21 - char* i_enum_suffix = "e164.arpa.";
    1.22 - char* bl_algorithm = "cc";
    1.23 - 
    1.24 -+char* isn_suffix = "freenum.org.";
    1.25 -+
    1.26 - 
    1.27 - /*
    1.28 -  * Internal module variables
    1.29 -@@ -67,6 +69,8 @@
    1.30 - str i_branchlabel;
    1.31 - str i_bl_alg;
    1.32 - 
    1.33 -+str isnsuffix;
    1.34 -+
    1.35 - 
    1.36 - /*
    1.37 -  * Exported functions
    1.38 -@@ -94,6 +98,11 @@
    1.39 - 	 REQUEST_ROUTE},
    1.40 - 	{"i_enum_query", (cmd_function)i_enum_query_2, 2, fixup_str_str, 0,
    1.41 - 	 REQUEST_ROUTE},
    1.42 -+	{"isn_query", (cmd_function)isn_query_0, 0, 0, 0, REQUEST_ROUTE},
    1.43 -+	{"isn_query", (cmd_function)isn_query_1, 1, fixup_str_null,
    1.44 -+	 fixup_free_str_null, REQUEST_ROUTE},
    1.45 -+	{"isn_query", (cmd_function)isn_query_2, 2, fixup_str_str, 
    1.46 -+	 fixup_free_str_str, REQUEST_ROUTE},
    1.47 - 	{0, 0, 0, 0, 0, 0}
    1.48 - };
    1.49 - 
    1.50 -@@ -107,6 +116,7 @@
    1.51 - 	{"branchlabel", STR_PARAM, &branchlabel},
    1.52 - 	{"i_enum_suffix", STR_PARAM, &i_enum_suffix},
    1.53 - 	{"bl_algorithm", STR_PARAM, &bl_algorithm},
    1.54 -+	{"isn_suffix", STR_PARAM, &isn_suffix},
    1.55 - 	{0, 0, 0}
    1.56 - };
    1.57 - 
    1.58 -@@ -152,6 +162,9 @@
    1.59 - 	i_bl_alg.s = bl_algorithm;
    1.60 - 	i_bl_alg.len = strlen(bl_algorithm);
    1.61 - 
    1.62 -+	isnsuffix.s = isn_suffix;
    1.63 -+	isnsuffix.len = strlen(isn_suffix.s);
    1.64 -+
    1.65 - 	return 0;
    1.66 - }
    1.67 - 
    1.68 -Index: modules/enum/enum.h
    1.69 -diff -Nau modules/enum/enum.h.orig modules/enum/enum.h
    1.70 ---- modules/enum/enum.h.orig	2010-01-18 15:54:40.361624448 +0100
    1.71 -+++ modules/enum/enum.h	2010-01-18 15:54:43.090330399 +0100
    1.72 -@@ -66,5 +66,13 @@
    1.73 - int i_enum_query_1(struct sip_msg* _msg, char* _suffix, char* _str2);
    1.74 - int i_enum_query_2(struct sip_msg* _msg, char* _suffix, char* _service);
    1.75 - 
    1.76 -+/*
    1.77 -+ * Make ISN query and if query succeeds, replace current uri with the
    1.78 -+ * result of the query
    1.79 -+ */
    1.80 -+int isn_query_0(struct sip_msg* _msg, char* _str1, char* _str2);
    1.81 -+int isn_query_1(struct sip_msg* _msg, char* _suffix, char* _str2);
    1.82 -+int isn_query_2(struct sip_msg* _msg, char* _suffix, char* _service);
    1.83 -+
    1.84 - 
    1.85 - #endif /* ENUM_H */
    1.86 -Index: modules/enum/enum.c
    1.87 -diff -Nau modules/enum/enum.c.orig modules/enum/enum.c
    1.88 ---- modules/enum/enum.c.orig	2010-01-18 15:57:10.995902181 +0100
    1.89 -+++ modules/enum/enum.c	2010-01-18 15:46:19.642209178 +0100
    1.90 -@@ -736,6 +736,84 @@
    1.91 - }
    1.92 - 
    1.93 - 
    1.94 -+/*
    1.95 -+ * Call isn_query_2 with module parameter suffix and default service.
    1.96 -+ */
    1.97 -+int isn_query_0(struct sip_msg* _msg, char* _str1, char* _str2)
    1.98 -+{
    1.99 -+	return isn_query_2(_msg, (char *)(&isnsuffix), (char *)(&service));
   1.100 -+}
   1.101 -+
   1.102 -+
   1.103 -+/*
   1.104 -+ * Call isn_query_2 with given suffix and default service.
   1.105 -+ */
   1.106 -+int isn_query_1(struct sip_msg* _msg, char* _suffix, char* _str2)
   1.107 -+{
   1.108 -+	return isn_query_2(_msg, _suffix, (char *)(&service));
   1.109 -+}
   1.110 -+
   1.111 -+
   1.112 -+/*
   1.113 -+ * See documentation in README file.
   1.114 -+ */
   1.115 -+int isn_query_2(struct sip_msg* _msg, char* _suffix, char* _service)
   1.116 -+{
   1.117 -+	char *user_s = NULL;
   1.118 -+	int user_len, i, j;
   1.119 -+	char name[MAX_DOMAIN_SIZE] = {0};
   1.120 -+	char string[17] = {0};
   1.121 -+	char szItad[17] = {0};
   1.122 -+	size_t nItlen = 0;
   1.123 -+
   1.124 -+	str *suffix, *service;
   1.125 -+
   1.126 -+	suffix = (str*)_suffix;
   1.127 -+	service = (str*)_service;
   1.128 -+
   1.129 -+	if (parse_sip_msg_uri(_msg) < 0) {
   1.130 -+		LM_ERR("Parsing of R-URI failed\n");
   1.131 -+		return -1;
   1.132 -+	}
   1.133 -+
   1.134 -+	user_s = _msg->parsed_uri.user.s;
   1.135 -+	user_len = _msg->parsed_uri.user.len;
   1.136 -+
   1.137 -+	memcpy(&(string[0]), user_s, user_len);
   1.138 -+	string[user_len] = (char)0;
   1.139 -+
   1.140 -+	/* Do primitive test for correct ISN format, */
   1.141 -+	/* and set szItad to the ISN ITAD (RFC 3872/2871). */
   1.142 -+	/* Correct ISN format guessed from freenum.org and IANA */
   1.143 -+	/* doc http://www.iana.org/assignments/trip-parameters/ */
   1.144 -+	{
   1.145 -+		char *pAster = strchr(string, '*');
   1.146 -+		if (pAster && (nItlen = strspn(pAster + sizeof(char), "0123456789")))
   1.147 -+			strncpy(szItad, pAster + sizeof(char), nItlen);
   1.148 -+		else {
   1.149 -+			LM_ERR("R-URI user does not contain a valid ISN\n");
   1.150 -+			return -1;
   1.151 -+		}
   1.152 -+	}
   1.153 -+
   1.154 -+	/* Ammend the original ENUM E.164 string logic to process */
   1.155 -+	/* ISN numbers instead, which include a nonreversed ITAD. */
   1.156 -+	i = user_len - nItlen - sizeof(char); /* Ex: *1212 */
   1.157 -+	j = 0;
   1.158 -+	while (i--) {
   1.159 -+		name[j] = user_s[i];
   1.160 -+		name[j + 1] = '.';
   1.161 -+		j = j + 2;
   1.162 -+	}
   1.163 -+
   1.164 -+	strcat(name + j, szItad);  /* Copy the unreversed ITAD, */
   1.165 -+	name[j + nItlen] = '.';    /* and append a trailing dot. */
   1.166 -+	memcpy(name + j + nItlen + sizeof(char), suffix->s, suffix->len + 1);
   1.167 -+
   1.168 -+	return do_query(_msg, string, name, service);
   1.169 -+}
   1.170 -+
   1.171 -+
   1.172 - /*********** INFRASTRUCTURE ENUM ***************/
   1.173 - 
   1.174 - /*
   1.175 -Index: modules/enum/README
   1.176 -diff -Nau modules/enum/README.orig modules/enum/README
   1.177 ---- modules/enum/README.orig	2010-01-18 17:59:52.034172367 +0100
   1.178 -+++ modules/enum/README	2010-01-18 18:01:30.730633377 +0100
   1.179 -@@ -10,8 +10,8 @@
   1.180 - 
   1.181 -    Copyright © 2002, 2003 Juha Heinanen
   1.182 -    Revision History
   1.183 --   Revision $Revision: 5906 $ $Date: 2009-07-21 10:45:05 +0300
   1.184 --                              (Tue, 21 Jul 2009) $
   1.185 -+   Revision $Revision: 5907 $ $Date: 2010-01-18 10:45:05 +0100
   1.186 -+                              (Mon, 18 Jan 2010) $
   1.187 -      __________________________________________________________
   1.188 - 
   1.189 -    Table of Contents
   1.190 -@@ -25,28 +25,32 @@
   1.191 -               1.3.1. domain_suffix (string)
   1.192 -               1.3.2. tel_uri_params (string)
   1.193 -               1.3.3. i_enum_suffix (string)
   1.194 --              1.3.4. branchlabel (string)
   1.195 --              1.3.5. bl_algorithm (string)
   1.196 -+              1.3.4. isn_suffix (string)
   1.197 -+              1.3.5. branchlabel (string)
   1.198 -+              1.3.6. bl_algorithm (string)
   1.199 - 
   1.200 -         1.4. Exported Functions
   1.201 - 
   1.202 -               1.4.1. enum_query(["suffix"[,"service"]])
   1.203 -               1.4.2. enum_pv_query("pvar"[,"suffix"[,"service"]])
   1.204 -               1.4.3. i_enum_query(["suffix"[,"service"]])
   1.205 --              1.4.4. is_from_user_enum()
   1.206 -+              1.4.4. isn_query(["suffix"[,"service"]])
   1.207 -+              1.4.5. is_from_user_enum()
   1.208 - 
   1.209 -    List of Examples
   1.210 - 
   1.211 -    1.1. Setting domain_suffix module parameter
   1.212 -    1.2. Setting tel_uri_params module parameter
   1.213 -    1.3. Setting i_enum_suffix module parameter
   1.214 --   1.4. Setting brachlabel module parameter
   1.215 --   1.5. Zone file example
   1.216 -+   1.4. Setting isn_query usage module parameter
   1.217 -+   1.5. Setting branchlabel module parameter
   1.218 -    1.6. Zone file example
   1.219 --   1.7. Setting the bl_algorithm module parameter
   1.220 --   1.8. enum_query usage
   1.221 --   1.9. enum_pv_query usage
   1.222 --   1.10. is_from_user_enum usage
   1.223 -+   1.7. Zone file example
   1.224 -+   1.8. Setting the bl_algorithm module parameter
   1.225 -+   1.9. enum_query usage
   1.226 -+   1.10. enum_pv_query usage
   1.227 -+   1.11. isn_query usage
   1.228 -+   1.12. is_from_user_enum usage
   1.229 - 
   1.230 - Chapter 1. Admin Guide
   1.231 - 
   1.232 -@@ -113,6 +117,22 @@
   1.233 -    function does an enum lookup on the from user and returns true
   1.234 -    if found, false otherwise.
   1.235 - 
   1.236 -+   In addition to standard ENUM, support for ISN (ITAD Subscriber
   1.237 -+   Numbers) is provided as well. To allow ISN lookups to resolve,
   1.238 -+   a different formatting algorithm is expected by the DNS server.
   1.239 -+   Whereas a ENUM NAPTR record expects a DNS query of the form
   1.240 -+   9.8.7.6.5.4.3.2.1.<suffix>, ISN method expects a DNS query of
   1.241 -+   the form 6.5.1212.<suffix>. That is, a valid ISN number includes
   1.242 -+   a prefix of '56' in the example. The rest of the number is a
   1.243 -+   ITAD (Internet Telephony Administrative Domain) as defined
   1.244 -+   in RFCs 3872 and 2871, and as allocated by the IANA in
   1.245 -+   http://www.iana.org/assignments/trip-parameters. The ITAD is
   1.246 -+   left intact and not refersed as ENUM requires. To learn more
   1.247 -+   about ISN please refer to documents at www.freenum.org.
   1.248 -+
   1.249 -+   To complete a ISN lookup on the user part of the Request-URI,
   1.250 -+   isn_query() is used instead of enum_query().
   1.251 -+
   1.252 - 1.2. Dependencies
   1.253 - 
   1.254 -    The module depends on the following modules (in the other words
   1.255 -@@ -158,17 +178,27 @@
   1.256 -    Example 1.3. Setting i_enum_suffix module parameter
   1.257 - modparam("enum", "i_enum_suffix", "e1234.arpa.")
   1.258 - 
   1.259 --1.3.4. branchlabel (string)
   1.260 -+1.3.4. isn_suffix (string)
   1.261 -+
   1.262 -+   The domain suffix to be used for isn_query() lookups. Can be
   1.263 -+   overridden by a parameter to isn_query.
   1.264 -+
   1.265 -+   Default value is "freenum.org."
   1.266 -+
   1.267 -+   Example 1.4. Setting isn_suffix module parameter
   1.268 -+modparam("enum", "isn_suffix", "freenum.org.")
   1.269 -+
   1.270 -+1.3.5. branchlabel (string)
   1.271 - 
   1.272 -    This parameter determines which label i_enum_query() will use
   1.273 -    to branch off to the infrastructure ENUM tree.
   1.274 - 
   1.275 -    Default value is ""i""
   1.276 - 
   1.277 --   Example 1.4. Setting brachlabel module parameter
   1.278 -+   Example 1.5. Setting branchlabel module parameter
   1.279 - modparam("enum", "branchlabel", "i")
   1.280 - 
   1.281 --1.3.5. bl_algorithm (string)
   1.282 -+1.3.6. bl_algorithm (string)
   1.283 - 
   1.284 -    This parameter determines which algorithm i_enum_query() will
   1.285 -    use to select the position in the DNS tree where the
   1.286 -@@ -182,7 +212,7 @@
   1.287 -    [branchlabel].[reverse-country-code].[i_enum_suffix] to
   1.288 -    indicate after how many digits the label should in inserted.
   1.289 - 
   1.290 --   Example 1.5. Zone file example
   1.291 -+   Example 1.6. Zone file example
   1.292 - i.1.e164.arpa.                     IN TXT   "4"
   1.293 - 9.9.9.8.7.6.5.i.4.3.2.1.e164.arpa. IN NAPTR "NAPTR content for  +1 234 5
   1.294 - 678 999"
   1.295 -@@ -196,7 +226,7 @@
   1.296 -    allocated yet. This version of the code uses 65300. See
   1.297 -    resolve.h.
   1.298 - 
   1.299 --   Example 1.6. Zone file example
   1.300 -+   Example 1.7. Zone file example
   1.301 - i.1.e164.arpa.     TYPE65300  \# 14 (
   1.302 -                               04    ; position
   1.303 -                               01 69 ; separator
   1.304 -@@ -208,7 +238,7 @@
   1.305 - 
   1.306 -    Default value is "cc"
   1.307 - 
   1.308 --   Example 1.7. Setting the bl_algorithm module parameter
   1.309 -+   Example 1.8. Setting the bl_algorithm module parameter
   1.310 - modparam("enum", "bl_algorithm", "txt")
   1.311 - 
   1.312 - 1.4. Exported Functions
   1.313 -@@ -225,7 +255,7 @@
   1.314 - 
   1.315 -    This function can be used from REQUEST_ROUTE.
   1.316 - 
   1.317 --   Example 1.8. enum_query usage
   1.318 -+   Example 1.9. enum_query usage
   1.319 - ...
   1.320 - # search for "e2u+sip" in freenum.org
   1.321 - enum_query("freenum.org.");
   1.322 -@@ -262,7 +292,7 @@
   1.323 - 
   1.324 -    This function can be used from REQUEST_ROUTE.
   1.325 - 
   1.326 --   Example 1.9. enum_pv_query usage
   1.327 -+   Example 1.10. enum_pv_query usage
   1.328 - ...
   1.329 - # search for "e2u+sip" in freenum.org
   1.330 - enum_pv_query("$avp(i:100)", "freenum.org.");
   1.331 -@@ -296,14 +326,42 @@
   1.332 -    ftp://ftp.rfc-editor.org/in-notes/internet-drafts/draft-haberle
   1.333 -    r-carrier-enum-01.txt for the rationale behind this function.
   1.334 - 
   1.335 --1.4.4. is_from_user_enum()
   1.336 -+1.4.4.  isn_query(["suffix"[,"service"]])
   1.337 -+
   1.338 -+   The function performs a ISN query and rewrites the
   1.339 -+   Request-URI with the result of the query. See Section 1.1,
   1.340 -+   "Overview" for more information.
   1.341 -+
   1.342 -+   Meaning of the parameters is as follows:
   1.343 -+     * suffix - Suffix to be appended to the domain name.
   1.344 -+     * service - Service string to be used in the service field.
   1.345 -+
   1.346 -+   This function can be used from REQUEST_ROUTE.
   1.347 -+
   1.348 -+   See ftp://www.ietf.org/rfc/rfc3872.txt and
   1.349 -+   ftp://www.ietf.org/rfc/rfc2871.txt for information
   1.350 -+   regarding the ITAD part of the ISN string.
   1.351 -+
   1.352 -+   Example 1.11. isn_query usage
   1.353 -+...
   1.354 -+# search for "e2u+sip" in freenum.org
   1.355 -+isn_query("freenum.org.");
   1.356 -+...
   1.357 -+# search for "e2u+sip" in default tree (configured as parameter)
   1.358 -+enum_query();
   1.359 -+...
   1.360 -+# search for "e2u+voice:sip" in freenum.org
   1.361 -+enum_query("freenum.org.","voice");
   1.362 -+...
   1.363 -+
   1.364 -+1.4.5. is_from_user_enum()
   1.365 - 
   1.366 -    Checks if the user part of from URI is found in an enum lookup.
   1.367 -    Returns 1 if yes and -1 if not.
   1.368 - 
   1.369 -    This function can be used from REQUEST_ROUTE.
   1.370 - 
   1.371 --   Example 1.10. is_from_user_enum usage
   1.372 -+   Example 1.12. is_from_user_enum usage
   1.373 - ...
   1.374 - if (is_from_user_enum()) {
   1.375 -         ....
   1.376 -Index: modules/enum/doc/enum.xml
   1.377 -diff -Nau modules/enum/doc/enum.xml.orig modules/enum/doc/enum.xml
   1.378 ---- modules/enum/doc/enum.xml.orig	2009-10-16 02:31:52.000000000 +0200
   1.379 -+++ modules/enum/doc/enum.xml	2010-01-18 18:01:15.954172402 +0100
   1.380 -@@ -33,8 +33,8 @@
   1.381 - 	</copyright>
   1.382 - 	<revhistory>
   1.383 - 	    <revision>
   1.384 --		<revnumber>$Revision: 5901 $</revnumber>
   1.385 --		<date>$Date: 2009-07-21 10:45:05 +0300 (Tue, 21 Jul 2009) $</date>
   1.386 -+		<revnumber>$Revision: 5907 $</revnumber>
   1.387 -+		<date>$Date: 2010-01-18 10:45:05 +0100 (Mon, 18 Jan 2010) $</date>
   1.388 - 	    </revision>
   1.389 - 	</revhistory>
   1.390 -     </bookinfo>
   1.391 -Index: modules/enum/doc/enum_admin.xml
   1.392 -diff -Nau modules/enum/doc/enum_admin.xml.orig modules/enum/doc/enum_admin.xml
   1.393 ---- modules/enum/doc/enum_admin.xml.orig	2010-01-18 12:33:30.053644000 +0100
   1.394 -+++ modules/enum/doc/enum_admin.xml	2010-01-18 18:14:59.583157910 +0100
   1.395 -@@ -75,6 +75,24 @@
   1.396 - 		and -1 if not.
   1.397 - 	</para>
   1.398 - 	<para>
   1.399 -+		In addition to standard ENUM, support for ISN (ITAD Subscriber
   1.400 -+		Numbers) is provided as well. To allow ISN lookups to resolve,
   1.401 -+		a different formatting algorithm is expected by the DNS server.
   1.402 -+		Whereas a ENUM NAPTR record expects a DNS query of the form
   1.403 -+		9.8.7.6.5.4.3.2.1.<suffix>, ISN method expects a DNS query of
   1.404 -+		the form 6.5.1212.<suffix>. That is, a valid ISN number includes
   1.405 -+		a prefix of '56' in the example. The rest of the number is a
   1.406 -+		ITAD (Internet Telephony Administrative Domain) as defined
   1.407 -+		in RFCs 3872 and 2871, and as allocated by the IANA in
   1.408 -+		http://www.iana.org/assignments/trip-parameters. The ITAD is
   1.409 -+		left intact and not refersed as ENUM requires. To learn more
   1.410 -+		about ISN please refer to documents at www.freenum.org.
   1.411 -+	</para>
   1.412 -+	<para>
   1.413 -+		To complete a ISN lookup on the user part of the Request-URI,
   1.414 -+		isn_query() is used instead of enum_query().
   1.415 -+	</para>
   1.416 -+	<para>
   1.417 - 		Enum module also implements is_from_user_enum function.
   1.418 - 		This function does an enum lookup on the from user and
   1.419 - 		returns true if found, false otherwise.
   1.420 -@@ -153,6 +171,22 @@
   1.421 -                 </example>
   1.422 -         </section>
   1.423 -         <section>
   1.424 -+                <title><varname>isn_suffix</varname> (string)</title>
   1.425 -+                <para>
   1.426 -+                The domain suffix to be used for isn_query() lookups. Can
   1.427 -+                be overridden by a parameter to isn_query.
   1.428 -+                </para>
   1.429 -+                <para>
   1.430 -+                Default value is <quote>freenum.org.</quote>
   1.431 -+                </para>
   1.432 -+                <example>
   1.433 -+                <title>Setting isn_suffix module parameter</title>
   1.434 -+                <programlisting format="linespecific">
   1.435 -+modparam("enum", "isn_suffix", "freenum.org.")
   1.436 -+</programlisting>
   1.437 -+                </example>
   1.438 -+        </section>
   1.439 -+        <section>
   1.440 -                 <title><varname>branchlabel</varname> (string)</title>
   1.441 -                 <para>
   1.442 -                 This parameter determines which label i_enum_query() will use
   1.443 -@@ -162,7 +196,7 @@
   1.444 -                 Default value is <quote>"i"</quote>
   1.445 -                 </para>
   1.446 -                 <example>
   1.447 --                <title>Setting brachlabel module parameter</title>
   1.448 -+                <title>Setting branchlabel module parameter</title>
   1.449 -                 <programlisting format="linespecific">
   1.450 - modparam("enum", "branchlabel", "i")
   1.451 - </programlisting>
   1.452 -@@ -353,6 +387,53 @@
   1.453 -         </section>
   1.454 - 
   1.455 - 	<section>
   1.456 -+		<title>
   1.457 -+		<function moreinfo="none">isn_query(["suffix"[,"service"]])</function>
   1.458 -+		</title>
   1.459 -+		<para>
   1.460 -+		The function performs a ISN query and rewrites the Request-URI with 
   1.461 -+		the result of the query. See <xref linkend="sec-overview"/> for more 
   1.462 -+		information.
   1.463 -+		</para>
   1.464 -+		<para>Meaning of the parameters is as follows:</para>
   1.465 -+		<itemizedlist>
   1.466 -+		<listitem>
   1.467 -+			<para><emphasis>suffix</emphasis> - Suffix to be appended to the 
   1.468 -+			domain name.
   1.469 -+			</para>
   1.470 -+		</listitem>
   1.471 -+		<listitem>
   1.472 -+			<para><emphasis>service</emphasis> - Service string to be used in 
   1.473 -+			the service field.
   1.474 -+			</para>
   1.475 -+		</listitem>
   1.476 -+		</itemizedlist>
   1.477 -+		<para>
   1.478 -+			This function can be used from REQUEST_ROUTE.
   1.479 -+		</para>
   1.480 -+		<para>
   1.481 -+			See ftp://www.ietf.org/rfc/rfc3872.txt and
   1.482 -+			ftp://www.ietf.org/rfc/rfc2871.txt for information
   1.483 -+			regarding the ITAD part of the ISN string.
   1.484 -+		</para>
   1.485 -+		<example>
   1.486 -+		<title><function moreinfo="none">isn_query</function> usage</title>
   1.487 -+		<programlisting format="linespecific">
   1.488 -+...
   1.489 -+# search for "e2u+sip" in freenum.org 
   1.490 -+isn_query("freenum.org.");
   1.491 -+...
   1.492 -+# search for "e2u+sip" in default tree (configured as parameter)
   1.493 -+isn_query();
   1.494 -+...
   1.495 -+# search for "e2u+voice:sip" in freenum.org
   1.496 -+isn_query("freenum.org.","voice");
   1.497 -+...
   1.498 -+</programlisting>
   1.499 -+		</example>
   1.500 -+	</section>
   1.501 -+
   1.502 -+	<section>
   1.503 - 		<title><function moreinfo="none">is_from_user_enum()</function></title>
   1.504 - 		<para>
   1.505 - 		Checks if the user part of from <abbrev>URI</abbrev>

mercurial