Mobile Location Protocol

The Mobile Location Protocol (MLP) is an application-level protocol for receiving the position of Mobile Stations (MS: mobile phones, wireless devices, etc.) independent of underlying network technology.

The MLP serves as the interface between a Location Server and a location-based application. Basic MLP Services are based on location services defined by 3GPP. The Mobile Location Protocol (MLP) is described in LIF TS 101 Specification.

Background
The purpose of this technology is to define a simple and secure access method that allows mobile application to query location information from a wireless network, regardless of its underlying network technology and positioning methods.

The MLP can be used by a location-based application to request mobile station location information from a location server (GMLC/MPC or other entity in the wireless network). This protocol has been prepared by Location Interoperability Forum (LIF: Open Mobile Alliance in nowadays) to provide a simple and secure API (Application Programmer’s Interface), but also could be used for other kinds of location servers and entities in the wireless network.

The API is based on XML and is defined to be transported in HTTP or SOAP. Only mapping to HTTP is defined in present days. For security reasons Secure Socket Layer (SSL) or Transport Layer Security (TLS) cryptographic protocols can be used to carry HTTP (HTTPS). Apart from HTTPS Mobile Location Protocol which uses authentication by user and password, the information is carried in header part of MLP message.

Features:
Last draft of MLP specification is OMA-TS-MLP v 3.3 from March 2009. Version 3.3 provides these features:

Standard Location Immediate Service (SLIS)
Used for requesting the location of one or more Mobile Subscribers (MS). It is used when immediate response is required. Response can be returned in more than one message if the request contained more Mobile Subscribers.

Emergency Location Immediate Service (ELIS)
Used for requesting the location of one or more MS involved in an emergency call. Response can be returned in more than one message if the server supports it.

Standard Location Reporting Service (SLRS)
This service is initiated by MS by sending Mobile Originated Location Request [TS23271] through wireless network. It is performed when Mobile Subscriber wants an LCS client to receive MS location.

Emergency Location Reporting Service (ELRS)
This service is initiated by network when MS initiates or releases emergency call. Report is generated and sent from Location Server to predefined LCS client.

Triggered Location Reporting Service (TLRS)
This service is used when LCS client wants to track several MS. Triggers can be timers or MS events like change of location.

Historic Location Immediate Service (HLIS)
This service is used to request reporting of historic locations of one MS when large amount of data is expected.

== Common Element Definitions: ==

Identity Element Definitions
<!ELEMENT msid (#PCDATA)> <!ATTLIST msid type (MSISDN | IMSI | IMEI | MIN | MDN | EME_MSID | IPV4 | IPV6) "MSISDN" enc (ASC | B64 | CRP) "ASC"> <!ELEMENT msid_range (start_msid, stop_msid)> <!ATTLIST msid_range type (MSISDN | IMSI | IMEI | MIN | MDN | EME_MSID | IPV4 | IPV6) "MSISDN" enc (ASC | B64 | CRP) "ASC"> <!ELEMENT msids ((msid, session? | msid_range)+)> <!ELEMENT esrd (#PCDATA)> <!ATTLIST esrd type (NA) "NA"> <!ELEMENT esrk (#PCDATA)> <!ATTLIST esrk type (NA) "NA"> <!ELEMENT session (#PCDATA) session Type (APN | dial) #REQUIRED> <!ELEMENT start_msid (#PCDATA)> <!ELEMENT stop_msid (#PCDATA)>

Function Element Definitions
<!ELEMENT add_info (#PCDATA)> <!ELEMENT eme_event (eme_pos+)> <!ATTLIST eme_event eme_trigger (EME_ORG | EME_REL) <!ELEMENT tlrr_event (time | area_change | ms_action)> <!ELEMENT ms_action EMPTY> <!ATTLIST ms_action type (MS_AVAIL) #REQUIRED> <!ELEMENT interval (#PCDATA)> <!ELEMENT loc_type EMPTY> <!ATTLIST loc_type type (CURRENT | LAST | CURRENT_OR_LAST | INITIAL) "CURRENT"> <!ELEMENT poserr (result, time)> <!ELEMENT prio EMPTY> <!ATTLIST prio type (NORMAL | HIGH) "NORMAL"> <!ELEMENT pushaddr (url)> <!ELEMENT req_id (#PCDATA)> <!ELEMENT result (#PCDATA)> <!ATTLIST result resid CDATA #REQUIRED> <!ELEMENT start_time (#PCDATA)> <!ATTLIST start_time utc_off CDATA "0000"> <!ELEMENT stop_time (#PCDATA)> <!ATTLIST stop_time utc_off CDATA "0000"> <!ELEMENT time (#PCDATA)> <!ATTLIST time utc_off CDATA "0000"> <!ELEMENT url (#PCDATA)> <!ELEMENT Time_remaining (#PCDATA)>
 * 1) REQUIRED>

Location Element Definitions
<!ELEMENT pos (msid, (pd | poserr), gsm_net_param?)> <!ELEMENT eme_pos (msid, esrd?, esrk?, (pd | poserr))> <!ELEMENT trl_pos (msid, (pd | poserr))> <!ELEMENT trl_pos <!ATTLIST trl_trigger (TIMER | PERIODIC | MS_AVAIL) <!ELEMENT pd (time, shape, (alt, alt_acc?)?, speed?, direction?, lev_conf?)> <!ELEMENT alt (#PCDATA)> <!ELEMENT alt_acc (#PCDATA)> <!ELEMENT direction (#PCDATA)> <!ELEMENT easting (#PCDATA)> <!ELEMENT geo_info (coord_sys, datum, format? Zone?)> <!ELEMENT coord_sys (#PCDATA) <!ELEMENT datum (#PCDATA) <!ELEMENT format (#PCDATA)> <!ELEMENT lat (#PCDATA)> <!ELEMENT ll_point (lat, long)> <!ELEMENT long (#PCDATA)> <!ELEMENT northing (#PCDATA)> <!ELEMENT utm_point (easting, northing, zone, zone_des)> <!ELEMENT speed (#PCDATA)> <!ELEMENT x (#PCDATA)> <!ELEMENT xy_point (x, y)> <!ELEMENT y (#PCDATA)> <!ELEMENT zone (#PCDATA)> <!ELEMENT zone_des (#PCDATA)> <!ELEMENT lev_conf (#PCDATA)>

Shape Element Definitions
<!ELEMENT shape (point | circle | circ_arc | ellipse | polygon )> <!ELEMENT point (ll_point | utm_point | xy_point)> <!ELEMENT angle (#PCDATA)> <!ELEMENT circ_arc (point, in_rad, out_rad, start_angle, stop_angle)> <!ELEMENT circle (point, rad)> <!ELEMENT ellipse (point, angle, semi_major, semi_minor)> <!ELEMENT in_rad (#PCDATA)> <!ELEMENT out_rad (#PCDATA)> <!ELEMENT polygon (point+)> <!ELEMENT rad (#PCDATA)> <!ELEMENT semi_major (#PCDATA)> <!ELEMENT semi_minor (#PCDATA)> <!ELEMENT start_angle (#PCDATA)> <!ELEMENT stop_angle (#PCDATA)>

Quality of Position Element Definitions
<!ELEMENT eqop (resp_req?, resp_timer?, (ll_acc | hor_acc)?, alt_acc?, max_loc_age?)> <!ELEMENT qop ((ll_acc | hor_acc)?, alt_acc?)> <!ELEMENT ll_acc (#PCDATA)> <!ELEMENT hor_acc (#PCDATA)> <!ELEMENT resp_req EMPTY> <!ATTLIST resp_req type (NO_DELAY | LOW_DELAY | DELAY_TOL) "DELAY_TOL"> <!ELEMENT resp_timer (#PCDATA)>

Network Parameters Element Definitions
<!ELEMENT gsm_net_param (cgi?, neid?, nmr?, ta?)> <!ELEMENT cgi (mcc, mnc, lac, cellid)> <!ELEMENT neid (vmscid | vlrid)> <!ELEMENT vmscid (cc, ndc, vmscno)> <!ELEMENT vlrid (cc, ndc, vlrno)> <!ELEMENT nmr (#PCDATA)> <!ELEMENT mcc (#PCDATA)> <!ELEMENT ndc (#PCDATA)> <!ELEMENT cc (#PCDATA)> <!ELEMENT vmscno (#PCDATA)> <!ELEMENT vlrno (#PCDATA)> <!ELEMENT lac (#PCDATA)> <!ELEMENT cellid (#PCDATA)> <!ELEMENT ta (#PCDATA)>

Context Element Definitions
<!ELEMENT client (id, pwd?, serviceid? servicetype?)> <!ELEMENT sessionid (#PCDATA)> <!ELEMENT id (#PCDATA)> <!ELEMENT originator (id, serviceid?)> <!ELEMENT pwd (#PCDATA)> <!ELEMENT serviceid (#PCDATA)> <!ELEMENT servicetype EMPTY> <!ATTLIST servicetype type (ACTIVE | PASSIVE) "PASSIVE"> <!ELEMENT subclient (id, pwd?, serviceid?)> <!ATTLIST subsclient last_client (YES | NO) "NO">]