|
@@ -10,19 +10,19 @@
|
|
|
<!-- Module User's Guide -->
|
|
|
|
|
|
<chapter>
|
|
|
- <title>&adminguide;</title>
|
|
|
- <section>
|
|
|
+ <title>&adminguide;</title>
|
|
|
+ <section>
|
|
|
<title>Overview</title>
|
|
|
<para>
|
|
|
- SIP requests may be forwarded based on a location provided with the
|
|
|
+ SIP requests may be forwarded based on a location provided by the
|
|
|
request or retrieved from a specific location server using an identity
|
|
|
(HELD). This module implements the basic functionality to get or parse
|
|
|
location information (civic and geodetic) and to query a mapping service
|
|
|
- (LOST) in order to get next hop based on location and service urn either
|
|
|
- specified or provided with the request.
|
|
|
+ (LOST) to get the next hop based on location and service urn either
|
|
|
+ specified or provided with the request.
|
|
|
</para>
|
|
|
<para>
|
|
|
- This module implements protocol functions that use the http_client api
|
|
|
+ This module implements protocol functions that use the http_client API
|
|
|
to fetch data from external LOST and HELD servers. The module is using
|
|
|
the http_client concept of "connections" to define properties of HTTP
|
|
|
sessions. A connection has one or multiple servers and a set of settings
|
|
@@ -48,38 +48,38 @@
|
|
|
<para>
|
|
|
The function lost_query allows &kamailio; to assemble a LOST
|
|
|
findService request as defined in RFC5222
|
|
|
- (<ulink url="https://tools.ietf.org/html/rfc5255"/>) to query
|
|
|
+ (<ulink url="https://tools.ietf.org/html/rfc5255"/>) to query
|
|
|
routing information for a given (geodetic or civic) location and a service
|
|
|
- URN. Both, PIDF-LO and service URN may be provided as function parameter,
|
|
|
+ URN. Both, PIDF-LO and service URN may be provided as function parameters,
|
|
|
or are taken from the request message if applicable. The findServiceResponse
|
|
|
- is parsed and represented as display name and SIP URI typically used as next
|
|
|
+ is parsed and represented as display name and SIP URI typically used as the next
|
|
|
hop in a Route header.
|
|
|
</para>
|
|
|
<para>
|
|
|
- The http_client module uses the CURL library setting up connections.
|
|
|
- The CURL library by default use the system configured DNS resolver,
|
|
|
+ The http_client module uses the CURL library to set up connections.
|
|
|
+ The CURL library by default uses the system-configured DNS resolver,
|
|
|
not the Kamailio resolver.
|
|
|
</para>
|
|
|
<para>
|
|
|
The module is limited to using HTTP and HTTPS protocols.
|
|
|
</para>
|
|
|
- </section>
|
|
|
- <section>
|
|
|
- <title>Dependencies</title>
|
|
|
- <section>
|
|
|
- <title>&kamailio; Modules</title>
|
|
|
- <para>
|
|
|
- The following modules must be loaded before this module:
|
|
|
+ </section>
|
|
|
+ <section>
|
|
|
+ <title>Dependencies</title>
|
|
|
+ <section>
|
|
|
+ <title>&kamailio; Modules</title>
|
|
|
+ <para>
|
|
|
+ The following modules must be loaded before this module:
|
|
|
<itemizedlist>
|
|
|
<listitem><para>
|
|
|
HTTP_CLIENT - the http_client module should be
|
|
|
- loaded first in order to initialize connections properly.
|
|
|
+ loaded first to initialize connections properly.
|
|
|
</para></listitem>
|
|
|
<listitem><para>
|
|
|
- TLS - if you use TLS connections (https) the tls module
|
|
|
+ TLS - if you use TLS connections (https) the TLS module
|
|
|
should be loaded first in order to initialize &openssl; properly.
|
|
|
</para></listitem>
|
|
|
- </itemizedlist>
|
|
|
+ </itemizedlist>
|
|
|
</para>
|
|
|
</section>
|
|
|
<section>
|
|
@@ -101,12 +101,12 @@
|
|
|
</itemizedlist>
|
|
|
</para>
|
|
|
</section>
|
|
|
- </section>
|
|
|
- <section id="lost.p.general">
|
|
|
- <title>Parameters</title>
|
|
|
+ </section>
|
|
|
+ <section id="lost.p.general">
|
|
|
+ <title>Parameters</title>
|
|
|
<para>
|
|
|
Besides parameters listed, this module uses <emphasis>http_client</emphasis>
|
|
|
- therefore according parameters may apply.
|
|
|
+ therefore appropriate module parameters may apply.
|
|
|
</para>
|
|
|
<section id="lost.p.exact_type">
|
|
|
<title><varname>exact_type</varname> (int)</title>
|
|
@@ -129,13 +129,13 @@
|
|
|
<section id="lost.p.response_time">
|
|
|
<title><varname>response_time</varname> (int)</title>
|
|
|
<para>
|
|
|
- A time value indicating to the location server how long the client is
|
|
|
+ A time value informs the location server how long the client is
|
|
|
prepared to wait for a response.
|
|
|
</para>
|
|
|
<para>
|
|
|
- The value is expressed as integer, either -1 'emergencyDispatch', 0 'emergencyRouting',
|
|
|
+ The value is expressed as an integer, either -1 'emergencyDispatch', 0 'emergencyRouting',
|
|
|
a non-negative integer (>0) in units of milliseconds.
|
|
|
- Note: The time value is indicative only.
|
|
|
+ Note: The time value is indicative only.
|
|
|
</para>
|
|
|
<para>
|
|
|
Default: 0 ('emergencyRouting')
|
|
@@ -155,7 +155,7 @@
|
|
|
The "locationType" element contains a list of types that are requested.
|
|
|
Values are "any", "geodetic", "civic" or "locationURI" and combinations.
|
|
|
</para>
|
|
|
- <itemizedlist>
|
|
|
+ <itemizedlist>
|
|
|
<listitem><para>
|
|
|
<emphasis>any</emphasis> - returns location information in all forms available
|
|
|
</para></listitem>
|
|
@@ -206,7 +206,7 @@
|
|
|
profile or combinations. A LoST <emphasis>findService</emphasis> contains only one location, which
|
|
|
is selected via this parameter as follows:
|
|
|
</para>
|
|
|
- <itemizedlist>
|
|
|
+ <itemizedlist>
|
|
|
<listitem><para>
|
|
|
<emphasis>0</emphasis> - takes the first location of any type
|
|
|
</para></listitem>
|
|
@@ -228,6 +228,38 @@
|
|
|
<programlisting format="linespecific">
|
|
|
...
|
|
|
modparam("lost", "location_profile, 2)
|
|
|
+ ...
|
|
|
+ </programlisting>
|
|
|
+ </example>
|
|
|
+ </section>
|
|
|
+ <section id="lost.p.location_3d">
|
|
|
+ <title><varname>location_3d</varname> (int)</title>
|
|
|
+ <para>
|
|
|
+ A Presence Information Data Format Location Object (PIDF-LO) may
|
|
|
+ contain one of the shape types as listed in RFC5491
|
|
|
+ (<ulink url="https://tools.ietf.org/html/rfc5491"/>).
|
|
|
+ A LoST <emphasis>findService</emphasis> request currently contains only
|
|
|
+ a profile for two-dimensional geodetic location information, which
|
|
|
+ is the default setting for this parameter. The parameter can be set
|
|
|
+ to 1 if a LoST server supports 3d, otherwise a 3d location is reduced
|
|
|
+ to 2d by the module.
|
|
|
+ </para>
|
|
|
+ <itemizedlist>
|
|
|
+ <listitem><para>
|
|
|
+ <emphasis>0</emphasis> - two-dimensional (2d) shape representations only
|
|
|
+ </para></listitem>
|
|
|
+ <listitem><para>
|
|
|
+ <emphasis>1</emphasis> - three-dimensional (3d) volume representations allowed
|
|
|
+ </para></listitem>
|
|
|
+ </itemizedlist>
|
|
|
+ <para>
|
|
|
+ Default: 0 (2d representations).
|
|
|
+ </para>
|
|
|
+ <example>
|
|
|
+ <title>Set <varname>location_3d</varname> parameter</title>
|
|
|
+ <programlisting format="linespecific">
|
|
|
+ ...
|
|
|
+ modparam("lost", "location_3d, 1)
|
|
|
...
|
|
|
</programlisting>
|
|
|
</example>
|
|
@@ -242,7 +274,7 @@
|
|
|
or an http(s) URI pointing to an external source. This parameter
|
|
|
supports filtering of the following types:
|
|
|
</para>
|
|
|
- <itemizedlist>
|
|
|
+ <itemizedlist>
|
|
|
<listitem><para>
|
|
|
<emphasis>0 (any)</emphasis> - any URI (first or last)
|
|
|
</para></listitem>
|
|
@@ -272,7 +304,7 @@
|
|
|
<title><varname>geoheader_order</varname> (int)</title>
|
|
|
<para>
|
|
|
A Geolocation header may include a list of locationValues. This
|
|
|
- parameter sets the order of the URI used to retrieve location
|
|
|
+ parameter sets the order of the URI used to retrieve the location
|
|
|
information, either the first element of a certain type or the
|
|
|
last. Values are 0 (first) or 1 (last).
|
|
|
</para>
|
|
@@ -292,7 +324,7 @@
|
|
|
<title><varname>recursion</varname> (int)</title>
|
|
|
<para>
|
|
|
A Geolocation header may include a list of locationValues. This
|
|
|
- parameter sets the order of the URI used to retrieve location
|
|
|
+ parameter sets the order of the URI used to retrieve the location
|
|
|
information, either the first element of a certain type or the
|
|
|
last. Values are 0 (first) or 1 (last).
|
|
|
</para>
|
|
@@ -337,53 +369,53 @@
|
|
|
</programlisting>
|
|
|
</example>
|
|
|
</section>
|
|
|
- </section>
|
|
|
- <section>
|
|
|
- <title>Functions</title>
|
|
|
- <section id="lost.f.lost_held_query">
|
|
|
- <title>
|
|
|
- <function moreinfo="none">lost_held_query(con, [id,] pidf-lo, url, error)</function>
|
|
|
- </title>
|
|
|
- <para>
|
|
|
- Sends a HELD locationRequest to a given connection. The device identity is either
|
|
|
+ </section>
|
|
|
+ <section>
|
|
|
+ <title>Functions</title>
|
|
|
+ <section id="lost.f.lost_held_query">
|
|
|
+ <title>
|
|
|
+ <function moreinfo="none">lost_held_query(con, [id,] pidf-lo, url, error)</function>
|
|
|
+ </title>
|
|
|
+ <para>
|
|
|
+ Sends a HELD locationRequest to a given connection. The device identity is either
|
|
|
specified, or the P-A-I header value, or the From header value.
|
|
|
- </para>
|
|
|
- <itemizedlist>
|
|
|
- <listitem><para>
|
|
|
- <emphasis>con</emphasis> - the name of an existing
|
|
|
- HTTP connection, defined by a httpcon modparam
|
|
|
- </para></listitem>
|
|
|
+ </para>
|
|
|
+ <itemizedlist>
|
|
|
<listitem><para>
|
|
|
- <emphasis>id</emphasis> - the device id used in the HELD
|
|
|
+ <emphasis>con</emphasis> - the name of an existing
|
|
|
+ HTTP connection, defined by a httpcon modparam
|
|
|
+ </para></listitem>
|
|
|
+ <listitem><para>
|
|
|
+ <emphasis>id</emphasis> - the device id used in the HELD
|
|
|
locationRequest
|
|
|
</para></listitem>
|
|
|
<listitem><para>
|
|
|
- <emphasis>pidf-lo</emphasis> - the PIDF-LO returned in the
|
|
|
+ <emphasis>pidf-lo</emphasis> - the PIDF-LO returned in the
|
|
|
HELD locationRequest response
|
|
|
</para></listitem>
|
|
|
<listitem><para>
|
|
|
- <emphasis>url</emphasis> - the location reference returned
|
|
|
+ <emphasis>url</emphasis> - the location reference returned
|
|
|
in the HELD locationRequest response - this reference may be
|
|
|
added as Geolocation header value and forwarded downstream.
|
|
|
Note: to work properly, it is required to include "locationURI"
|
|
|
in the location_type parameter.
|
|
|
</para></listitem>
|
|
|
<listitem><para>
|
|
|
- <emphasis>error</emphasis> - any error code returned in the
|
|
|
+ <emphasis>error</emphasis> - any error code returned in the
|
|
|
HELD response
|
|
|
</para></listitem>
|
|
|
- </itemizedlist>
|
|
|
- <para>
|
|
|
- The return value is 200 on success, 400 if an internal error occurred, or 500 if an
|
|
|
+ </itemizedlist>
|
|
|
+ <para>
|
|
|
+ The return value is 200 on success, 400 if an internal error occurred, or 500 if an
|
|
|
error code is returned in the HELD locationRequest response.
|
|
|
- </para>
|
|
|
- <para>
|
|
|
- This function can be used from REQUEST_ROUTE,
|
|
|
- ONREPLY_ROUTE, FAILURE_ROUTE, and BRANCH_ROUTE.
|
|
|
- </para>
|
|
|
- <example>
|
|
|
- <title><function>lost_held_query()</function> usage</title>
|
|
|
- <programlisting format="linespecific">
|
|
|
+ </para>
|
|
|
+ <para>
|
|
|
+ This function can be used from REQUEST_ROUTE,
|
|
|
+ ONREPLY_ROUTE, FAILURE_ROUTE, and BRANCH_ROUTE.
|
|
|
+ </para>
|
|
|
+ <example>
|
|
|
+ <title><function>lost_held_query()</function> usage</title>
|
|
|
+ <programlisting format="linespecific">
|
|
|
...
|
|
|
modparam("http_client", "httpcon", "heldsrv=>http://service.org/api/held");
|
|
|
...
|
|
@@ -395,44 +427,44 @@ xlog("L_INFO", "HELD locationRequest: Result code $var(res)\nUrl: $var(url)\n$va
|
|
|
$var(res) = lost_held_query("heldsrv", "$var(pidf)", "$var(url)", "$var(err)");
|
|
|
xlog("L_INFO", "HELD locationRequest: Result code $var(res)\nUrl: $var(url)\n$var(pidf)\n");
|
|
|
...
|
|
|
- </programlisting>
|
|
|
- </example>
|
|
|
- </section>
|
|
|
- <section id="lost.f.lost_held_dereference">
|
|
|
- <title>
|
|
|
- <function moreinfo="none">lost_held_dereference(url, rtime, rtype, pidf-lo, error)</function>
|
|
|
- </title>
|
|
|
- <para>
|
|
|
- Sends a HELD POST locationRequest to a given URL. Attributes are responseTime and responseType.
|
|
|
+ </programlisting>
|
|
|
+ </example>
|
|
|
+ </section>
|
|
|
+ <section id="lost.f.lost_held_dereference">
|
|
|
+ <title>
|
|
|
+ <function moreinfo="none">lost_held_dereference(url, rtime, rtype, pidf-lo, error)</function>
|
|
|
+ </title>
|
|
|
+ <para>
|
|
|
+ Sends a HELD POST locationRequest to a given URL. Attributes are responseTime and responseType.
|
|
|
The <emphasis>locationType</emphasis> property "exact" is set to "false".
|
|
|
- </para>
|
|
|
- <itemizedlist>
|
|
|
+ </para>
|
|
|
+ <itemizedlist>
|
|
|
<listitem><para>
|
|
|
- <emphasis>url</emphasis> - a URL received via Geolocation header to dereference
|
|
|
+ <emphasis>url</emphasis> - a URL received via Geolocation header to dereference
|
|
|
location
|
|
|
</para></listitem>
|
|
|
- <listitem><para>
|
|
|
- <emphasis>rtime</emphasis> - the response time as defined
|
|
|
+ <listitem><para>
|
|
|
+ <emphasis>rtime</emphasis> - the response time as defined
|
|
|
in <xref linkend="lost.p.response_time"/>
|
|
|
- </para></listitem>
|
|
|
+ </para></listitem>
|
|
|
<listitem><para>
|
|
|
- <emphasis>rtype</emphasis> - the response type (location) as defined
|
|
|
+ <emphasis>rtype</emphasis> - the response type (location) as defined
|
|
|
in <xref linkend="lost.p.location_type"/>
|
|
|
</para></listitem>
|
|
|
<listitem><para>
|
|
|
- <emphasis>pidf-lo</emphasis> - the PIDF-LO returned in the
|
|
|
+ <emphasis>pidf-lo</emphasis> - the PIDF-LO returned in the
|
|
|
HELD locationRequest response
|
|
|
</para></listitem>
|
|
|
<listitem><para>
|
|
|
- <emphasis>error</emphasis> - any error code returned in the
|
|
|
+ <emphasis>error</emphasis> - any error code returned in the
|
|
|
HELD response
|
|
|
</para></listitem>
|
|
|
- </itemizedlist>
|
|
|
- <para>
|
|
|
- The return value is 200..203 on success, 400 if an internal error occurred, or 500 if an
|
|
|
+ </itemizedlist>
|
|
|
+ <para>
|
|
|
+ The return value is 200..203 on success, 400 if an internal error occurred, or 500 if an
|
|
|
error code is returned in the HELD response. Success codes in detail are as follows:
|
|
|
- </para>
|
|
|
- <itemizedlist>
|
|
|
+ </para>
|
|
|
+ <itemizedlist>
|
|
|
<listitem><para>
|
|
|
<emphasis>200</emphasis> - received 200 OK, but neither location-info nor locationURI element found
|
|
|
</para></listitem>
|
|
@@ -445,14 +477,14 @@ xlog("L_INFO", "HELD locationRequest: Result code $var(res)\nUrl: $var(url)\n$va
|
|
|
<listitem><para>
|
|
|
<emphasis>203</emphasis> - received 200 OK with location-info and locationURI element
|
|
|
</para></listitem>
|
|
|
- </itemizedlist>
|
|
|
- <para>
|
|
|
- This function can be used from REQUEST_ROUTE,
|
|
|
- ONREPLY_ROUTE, FAILURE_ROUTE, and BRANCH_ROUTE.
|
|
|
- </para>
|
|
|
- <example>
|
|
|
- <title><function>lost_held_dereference()</function> usage</title>
|
|
|
- <programlisting format="linespecific">
|
|
|
+ </itemizedlist>
|
|
|
+ <para>
|
|
|
+ This function can be used from REQUEST_ROUTE,
|
|
|
+ ONREPLY_ROUTE, FAILURE_ROUTE, and BRANCH_ROUTE.
|
|
|
+ </para>
|
|
|
+ <example>
|
|
|
+ <title><function>lost_held_dereference()</function> usage</title>
|
|
|
+ <programlisting format="linespecific">
|
|
|
...
|
|
|
# HELD location dereference
|
|
|
if ($hdr(Geolocation)=~"^<http.*$") {
|
|
@@ -461,19 +493,19 @@ if ($hdr(Geolocation)=~"^<http.*$") {
|
|
|
xlog("L_INFO", "HELD location dereference: Result code $var(res)\n$var(pidf)");
|
|
|
...
|
|
|
}
|
|
|
- </programlisting>
|
|
|
- </example>
|
|
|
- </section>
|
|
|
- <section id="lost.f.lost_query">
|
|
|
- <title>
|
|
|
- <function moreinfo="none">lost_query(con, [pidf-lo, urn,] uri, name, error)</function>
|
|
|
- </title>
|
|
|
- <para>
|
|
|
- Sends a LOST findService request to a given connection. PIDF-LO and URN are either specified,
|
|
|
+ </programlisting>
|
|
|
+ </example>
|
|
|
+ </section>
|
|
|
+ <section id="lost.f.lost_query">
|
|
|
+ <title>
|
|
|
+ <function moreinfo="none">lost_query(con, [pidf-lo, urn,] uri, name, error)</function>
|
|
|
+ </title>
|
|
|
+ <para>
|
|
|
+ Sends a LOST findService request to a given connection. PIDF-LO and URN are either specified,
|
|
|
or, if omitted, parsed from the message body (PIDF-LO) and request line (URN). Either "pidf-lo"
|
|
|
- or "urn" can be set to an empty string in order to be ignored.
|
|
|
- </para>
|
|
|
- <itemizedlist>
|
|
|
+ or "urn" can be set to an empty string to be ignored.
|
|
|
+ </para>
|
|
|
+ <itemizedlist>
|
|
|
<listitem><para>
|
|
|
<emphasis>con</emphasis> - the name of an existing
|
|
|
HTTP connection defined by a httpcon modparam
|
|
@@ -498,18 +530,18 @@ if ($hdr(Geolocation)=~"^<http.*$") {
|
|
|
<emphasis>error</emphasis> - any error code returned in the
|
|
|
LOST findServiceResponse
|
|
|
</para></listitem>
|
|
|
- </itemizedlist>
|
|
|
- <para>
|
|
|
- The return value is 200 on success, 400 if an internal error occurred, or 500 if an
|
|
|
+ </itemizedlist>
|
|
|
+ <para>
|
|
|
+ The return value is 200 on success, 400 if an internal error occurred, or 500 if an
|
|
|
error code is returned in the LOST findServiceResponse.
|
|
|
- </para>
|
|
|
- <para>
|
|
|
- This function can be used from REQUEST_ROUTE,
|
|
|
- ONREPLY_ROUTE, FAILURE_ROUTE, and BRANCH_ROUTE.
|
|
|
- </para>
|
|
|
- <example>
|
|
|
- <title><function>lost()</function> usage</title>
|
|
|
- <programlisting format="linespecific">
|
|
|
+ </para>
|
|
|
+ <para>
|
|
|
+ This function can be used from REQUEST_ROUTE,
|
|
|
+ ONREPLY_ROUTE, FAILURE_ROUTE, and BRANCH_ROUTE.
|
|
|
+ </para>
|
|
|
+ <example>
|
|
|
+ <title><function>lost()</function> usage</title>
|
|
|
+ <programlisting format="linespecific">
|
|
|
...
|
|
|
modparam("http_client", "httpcon", "heldsrv=>http://service.org/api/held");
|
|
|
modparam("http_client", "httpcon", "lostsrv=>http://service.org/api/lost");
|
|
@@ -535,24 +567,24 @@ xlog("L_INFO", "LOST findService: Result code $var(res)\nUri: $var(uri)\nName: $
|
|
|
$var(res) = lost_query("lostsrv", "$var(uri)", "$var(name)", "$var(err)");
|
|
|
xlog("L_INFO", "LOST findService: Result code $var(res)\nUri: $var(uri)\nName: $var(name)\n");
|
|
|
...
|
|
|
- </programlisting>
|
|
|
- </example>
|
|
|
- </section>
|
|
|
+ </programlisting>
|
|
|
+ </example>
|
|
|
+ </section>
|
|
|
|
|
|
</section>
|
|
|
<section id="lost.s.counters">
|
|
|
- <title>Counters</title>
|
|
|
+ <title>Counters</title>
|
|
|
<para>
|
|
|
This module has no specific counters but uses http_client therefore
|
|
|
according counters may apply.
|
|
|
</para>
|
|
|
- </section>
|
|
|
+ </section>
|
|
|
|
|
|
<section id="lost.s.remarks">
|
|
|
<title>Remarks</title>
|
|
|
<para>
|
|
|
Note: libcurl leak in CentOS 6 - this module uses libcurl library
|
|
|
- (via http_client) and in case if you are using CentOS 6, be aware that
|
|
|
+ (via http_client) and in case you are using CentOS 6, be aware that
|
|
|
standard libcurl-7.19.7-52 has a memory leak. To fix this memory, install
|
|
|
libcurl from city-fan repository. More details at:
|
|
|
<ulink url="https://www.digitalocean.com/community/questions/how-to-upgrade-curl-in-centos6"></ulink>.
|
|
@@ -573,7 +605,7 @@ xlog("L_INFO", "LOST findService: Result code $var(res)\nUri: $var(uri)\nName: $
|
|
|
</para>
|
|
|
<para>
|
|
|
Note: in case modparam "geoheader_type" is set to 2 (http), the module may
|
|
|
- use 3 (https) as fallback and vice versa.
|
|
|
+ use 3 (https) as a fallback and vice versa.
|
|
|
</para>
|
|
|
</section>
|
|
|
</chapter>
|