Table Of Contents
Cisco Extension Mobility Service API
Cisco Extension Mobility Architecture
Cisco Extension Mobility Service Components
How Cisco Extension Mobility Works
Cisco Extension Mobility Service Module
Authentication
Preconditions
Automatic Logout
Device Profiles
Using the Cisco Extension Mobility API
New and Changed Information
Cisco Extension Mobility Rearchitecture
Feature Description
ExtensionMobilityDynamic Table
Call-Processing Requirements
CTI Requirements for Call Processing
Database Requirements
TFTP Requirements
EMApp and EMService Requirements
Administration Requirements
Administration Use Case
CTI Requirements
CTI Use Case
AXL SOAP Database Requirements
CCMCIP
Feature Interactions
Configuration
Messages
Login Requests
Device-User Queries
User-Devices Queries
Message Document Type Definitions
Request DTD
Login or Logout Response DTD
Query DTD
Query Response DTD
Message Examples
Request Examples
Request Response Examples
Query Examples
Query Response Examples
Application and Service Error Codes
Cisco Extension Mobility Service API
The Cisco Extension Mobility service, a feature of Cisco Unified Communications Manager, allows a device, usually a Cisco Unified IP Phone, to temporarily embody a new device profile, including lines, speed dials, and services. It enables users to temporarily access their individual Cisco Unified IP Phone configuration, such as their line appearances, services, and speed dials, from other Cisco Unified IP Phones. The Cisco Extension Mobility service works by downloading a new configuration file to the phone. Cisco Unified Communications Manager dynamically generates this new configuration file based on information about the user who is logging in.
The system associates each Cisco Extension Mobility user with a device profile through configuration. When a user logs in to a phone, the phone temporarily embodies the device profile for that user. The two primary functions of the Cisco Extension Mobility feature comprise authenticating the user who is logging in and generating the right configuration file from the user information.
You can view the device profile as a template for a physical device. The device profile defines the attributes of a device, but it does not associate with a physical phone. A device profile includes information such as the phone template, user locale, services to which the device is subscribed, and so on. Because it does not associate with a physical phone, it does not have information such as MAC address, location, and region. When a phone downloads a device profile, the phone retains its physical attributes such as MAC address, device location information, device CSS, and so on.
The Cisco Unified Communications Manager support for the Cisco Extension Mobility service comprises the Cisco Extension Mobility Application (EMApp) and the Cisco Extension Mobility Service (EMService) modules. The application and service modules, along with other Cisco Unified Communications Manager infrastructure such as the Database Layer (DBL), User directory (either internal or an external LDAP directory), and TFTP server, provide the Cisco Extension Mobility feature.
You can use the XML-based EMService API with your applications, so they can take advantage of Cisco Extension Mobility service functionality. For details about how to use the Cisco Extension Mobility service API, see the "Using the Cisco Extension Mobility API" section.
To successfully develop an application that uses the Cisco Extension Mobility service, you need to understand how the service operates and how your application fits into the Cisco Extension Mobility service. This chapter includes the high-level concepts that are important in understanding the Cisco Extension Mobility service:
•
Cisco Extension Mobility Architecture
•
Cisco Extension Mobility Service Components
•
How Cisco Extension Mobility Works
•
Cisco Extension Mobility Service Module
•
Device Profiles
Cisco Extension Mobility Architecture
This section explains the Cisco Extension Mobility service components and how they work with your application. Figure 3-1 provides a functional diagram of the different Cisco Extension Mobility modules that is followed by a brief description of each module.
Figure 3-1 Cisco Extension Mobility Functional Diagram
Cisco Extension Mobility Service Components
The Cisco Extension Mobility service comprises three basic architectural components. The following paragraphs provide a brief description of each component:
•
Cisco Extension Mobility Application—A software module in Cisco Unified Communications Manager that receives XML requests (via HTTP post) for login and logout of users from the phones. It interacts with other components in the system and responds with a HTTP response message to the phone. The application module validates the "user ID" and PIN in the login request by consulting either a local user directory or an external directory like LDAP. If the "user ID" and PIN are valid, it interacts with the Cisco Extension Mobility service module on behalf of the phones. After the interaction with the service module is successful, it notifies the phone to restart with a new configuration.
•
Cisco Extension Mobility Service—A software module in Cisco Unified Communications Manager that receives XML/HTTP requests from the application module to build a new configuration file. The application module provides information such as identity of the device and the device profile for the user who is logging in. It invokes the Database Layer (DBL) via the Java Native Interface (JNI) to write the appropriate configuration file to the TFTP server.
•
Database Layer (DBL)—Receives a request from the Cisco Extension Mobility service module and generates a new configuration file. The device profile corresponding to the user who is logging in and the physical attributes of the phone provide the basis for the new configuration file. After the new configuration file is generated, it is pushed to the Cisco Unified Communications Manager database and a change notification gets generated to the call-processing module. This notification ultimately results in the new configuration file being pushed to the TFTP server.
The Cisco Extension Mobility service comprises your application, the EMApp module, the EMService module, the Database Layer (DBL), and the ancillary items that are listed in Table 3-1.
Table 3-1 Additional Cisco Extension Mobility Service Components
Component
|
Description
|
DBL Monitor
|
Database Layer Monitor service notifies other processes of changes in the Cisco Unified Communications Manager database.
|
LDAP Directory
|
Lightweight Directory Access Protocol Directory (LDAP) stores information for Cisco Unified Communications Manager.
|
CallProcessing
|
CallProcessing is a Cisco Unified Communications Manager process that maintains device connections.
|
CTI
|
Computer Telephony Interface (CTI) comprises the set of processes that expose programmable APIs for call control.
|
TAPI/JTAPI
|
TAPI and JTAPI programmatic interfaces support call control.
|
How Cisco Extension Mobility Works
This section describes what happens when your application sends a message to the EMService to use Cisco Extension Mobility functionality.
Figure 3-1 also illustrates how the Cisco Extension Mobility components communicate with each other. The high-level message flow between different Cisco Extension Mobility components remains the same as in previous releases.
Your login application submits an XML message to the EMService servlet by using the Hypertext Transfer Protocol (HTTP). The EMService uses the LDAP directory to check the UserID and PIN in the message from the login application. If the UserID and PIN are valid, the EMService executes the request by communicating with the database layer (DBL) through JNI. For more details about how the EMService module works, see the "Cisco Extension Mobility Service Module" section that follows.
If the DBL changes the device profile for a login or logout request, it tells the DBL Monitor, which passes this information on to the CallProcessing and CTI components. CallProcessing, in turn, tells the Cisco Unified IP Phone that it needs to restart itself to load the new device profile. For more information about device profiles, see the "Device Profiles" section.
The CTI layer notifies JTAPI and TAPI applications that are monitoring the device or user that the application control list has changed.
If the DBL completes a transaction successfully, it tells the EMService. The EMService then sends an XML response that the transaction was successful to your login application by using HTTP.
If the transaction is not successful, the EMService sends your login application an appropriate error message.
Cisco Extension Mobility Service Module
Your login application communicates with the Cisco Extension Mobility service through the Cisco Extension Mobility Service (EMService) component.
Only a single user can log in at a time on a particular device. Subsequent attempts by users to log in on a device before the previous user has logged out will fail. You also cannot log out of a device to which no user is currently logged in. These conditions generate error messages.
When the EMService component receives an HTML message from your login application, it uses HTTP to send an XML response message. The response to a request serves as success or failure message, and the response to a query serves as a query result message.
For more detailed information about these messages, see Messages
Figure 3-2 illustrates more details of the operation of the EMService module.
Figure 3-2 Cisco Extension Mobility EMService Module
The EMService component sends an appropriate XML error response to your login application if
•
Authentication fails
•
A precondition is not met
•
It cannot contact the DBL
•
The DBL returns an error
Authentication
The Cisco Extension Mobility service allows authentication by proxy. That is, a user with Cisco Extension Mobility proxy rights can log in any user to any device.
What this means is that an application can be responsible for authenticating a user in whatever way that the designer of the application sees fit: by using a password, PIN, hardware key, biometrics, and so on. The application must provide valid credentials for itself, so the Cisco Extension Mobility Service knows the application is provisioned in the system and allowed to log users in and out.
To this end, you must ensure that a special user that corresponds to the application is configured in the Directory. This user, representing the application, has a standard LDAP UserID and PIN. The application must send a valid UserID and PIN to log a user in or log out from a device.
Note
This mechanism requires configuring a UserID and PIN for the application; you can do this by using Cisco Unified Communications Manager Administration, User Configuration.
Preconditions
The EMService Java Object Policy Validation engine checks the preconditions.
Only a single user can log in at a time on a particular device. Subsequent attempts by users to log in on a device before the previous user has logged out will fail. You also cannot log out of a device to which no user is currently logged in. These conditions generate error messages.
Automatic Logout
The Logout Scheduler in the EMService module times all login occurrences if you have specified a system maximum login time. If you have not set the login duration, the automatic logout period for that device defaults to the system maximum time.
Device Profiles
Device profiles act as the basic unit of transaction for the Cisco Extension Mobility service. A device profile contains all the configuration information, such as line appearances, speed dials, and services, for a particular device. You can think of it as a "virtual device." It has all the properties of a device except physical characteristics such as a Media Access Control (MAC) address and a directory URL.
When a user logs in, the User device profile replaces the current device configuration. When a user logs out, the Logout device profile replaces the User device profile.
Cisco Extension Mobility requires a Logout Device Profile for each configured device. Cisco Extension Mobility uses the Logout Device Profile, which can be either an Auto-Generated or User Device Profile, as the "logged out" configuration of the device.
Two types of device profiles exist: Auto-Generated device profiles and User device profiles:
•
Auto-Generated device profile—Can be used only as a Logout device profile. This provides a snapshot of the existing device configuration. You cannot associate it with a user.
•
User device profile—An administrator generates it. It gets associated with a user in the same manner as any other device.
Note
To create an Auto-Generated Device Profile, the system configures a device, and a snapshot of the device is taken and saved as a device profile with the prefix ADP (Auto-Generated Device Profile) and the MAC address of the device. For example, the Auto-Generated Device Profile for the device SEP000011112222 specifies ADP000011112222.
Note
Cisco Extension Mobility fully supports the Cisco Unified IP Phone 7960 and the Cisco Unified IP Phone 7940 but not the Cisco IP Phone model 7910 and preceding devices.
Using the Cisco Extension Mobility API
The Cisco Extension Mobility service provides a fairly rich API, which enables extension mobility on Cisco Unified IP Phones and allows application control over authentication, scheduling, and availability.
An application that uses Cisco Extension Mobility service represents an IP phone service that allows a user to enter a userID and PIN at the phone itself and log in to the phone. The architecture and implementation of Cisco Extension Mobility make many other applications possible; some examples follow:
•
An application that automatically activates phones for employees when they reserve a particular desk for a particular time (the scheduling application)
•
A lobby phone that does not have a line appearance until a user logs in
The Cisco Extension Mobility API gets exposed as an Extensible Markup Language (XML) interface via HTTP. The administrator of the system designates a website as the entry point to the API, and all requests and queries are made through those URLs. This website also provides the document type definitions (DTDs) that define the XML for requests, queries, and responses. This document includes the DTDs, along with examples.
The XML input gets submitted via an HTTP POST. A field named "xml" contains the XML string that defines the request or query. The response to this HTTP POST represents a pure XML response with either a success or failure indicator for a request or the response to a query.
Note
The Cisco Extension Mobility API does not use the M-POST method as defined in the HTTP Extension Framework.
This section includes the following topics:
•
New and Changed Information
•
Cisco Extension Mobility Rearchitecture
•
Configuration
–
Messages
–
Message Document Type Definitions
–
Message Examples
–
Application and Service Error Codes
New and Changed Information
Cisco Unified Communications Manager New and Changed Information Guide for Release 6.0(1) describes new features and or changes that are pertinent to the Cisco Extension Mobility Service in Cisco Unified Communications Manager Release 6.0(1).
Cisco Extension Mobility Rearchitecture
This section describes new features that allow Cisco Extension Mobility login/logout to complete successfully when connectivity to the publisher server is lost. Cisco Extension Mobility will now work when the publisher server is not available. The Cisco Extension Mobility rearchitecture has a positive impact on the number of Cisco Extension Mobility logins/logouts per hour.
Modifications to the Cisco Extension Mobility architecture mean that it can support the Call Processing User Facing feature architecture. These new features do not cause any changes in end point behavior.
Feature Description
The current Cisco Extension Mobility architecture requires a database update operation on the Device table, and, depending on Administrative provisioning, multiple database delete and database insert operations might be required for the following database tables:
•
DeviceNumPlanMap
•
SpeedDial
•
BusyLampField
•
TelecasterSubscribedService
•
TelecasterSubscribedServiceParameter
•
DeviceAddOnModuleMap
To support database resiliency, some fields have been moved to their own tables, so they can be updated locally and replicated in a fully meshed topology. This change will break direct SQL database access by using the AXL SOAP/XML Layer for fields in columns that moved from one table to another.
The new Cisco Extension Mobility architecture provides some performance improvement over the previous release because it requires only a single database update operation on the new ExtensionMobilityDynamic table, which increases performance by reducing database stored procedure complexity in favor of increased application complexity.
Note
Applications need to take into account the information present in the ExtensionMobilityDynamic table.
Cisco Unified Communications Manager adjusts database access to account for the information now available in the new ExtensionMobilityDynamic table. The Cisco Unified Communications Manager Data Dictionary for Release 6.0(1) contains a comparison of the database schema between version 6.0(1) and earlier releases.
The performance enhancements in Cisco Extension Mobility resolve the following defects:
•
CSCsc81681 - Cisco Extension Mobility login phones change DN is slow on performance run.
•
CSCsd71925 - Cisco Extension Mobility login rate for 7835 below levels of previous releases.
ExtensionMobilityDynamic Table
The Cisco Extension Mobility rearchitecture requires the creation of a new simple table that supports simple timestamp conflict resolution and is writable on all nodes in the system. Table 3-2 illustrates the columns in this new table, ExtensionMobiltyDynamic.
Table 3-2 ExtensionMobilityDynamic Table
Column Name
|
Type
|
Nulls
|
Default Value
|
TFTP Impacted
|
Pkid
|
char(36)
|
No
|
newid()
|
|
fkdevice
|
char(36)
|
No
|
None
|
|
fkenduser
|
char(36)
|
Yes
|
NULL
|
|
logintime
|
integer
|
Yes
|
NULL
|
|
loginduration
|
integer
|
Yes
|
NULL
|
|
fkdevice_currentloginprofile1
|
char(36)
|
Yes
|
NULL
|
Yes
|
fkenduser_lastlogin
|
char(36)
|
Yes
|
NULL
|
|
fkPhoneTemplate
|
char(36)
|
Yes
|
NULL
|
Yes
|
fkSoftkeyTemplate
|
char(36)
|
Yes
|
NULL
|
Yes
|
tkUserLocale
|
integer
|
Yes
|
NULL
|
Yes
|
UserHoldMOHAudioSourceID
|
integer
|
Yes
|
NULL
|
|
tkStatus_MLPPIndicationStatus
|
integer
|
No
|
0
|
Yes
|
tkPreemption
|
integer
|
No
|
2
|
Yes
|
ignorePI
|
boolean
|
No
|
False
|
|
allowCTIControlFlag
|
boolean
|
No
|
False
|
|
fkCallingSearchspace_restrict
|
char(36)
|
Yes
|
NULL
|
|
fkMatrix_Presence
|
char(36)
|
Yes
|
NULL
|
|
fkMLPPDomain
|
char(36)
|
Yes
|
NULL
|
Yes
|
ctiidBase2
|
integer
|
No
|
0
|
|
lastNumPlanIndex2
|
integer
|
Yes3
|
0
|
Yes
|
misMatchedLogin)2
|
boolean
|
No
|
False
|
Yes
|
versionstamp2
|
varchar(47,0)
|
No
|
see note4
|
Yes
|
An application can determine whether a Cisco Extension Mobility login is active on a device by testing the following conditions:
•
A record for the device exists in the ExtensionMobilityDynamic table.
•
The ExtensionMobilityDynamic.logintime column is non-NULL.
•
The ExtensionMobilityDynamic.fkdevice_currentloginprofile is non-NULL.
An application can determine whether a Cisco Extension Mobility logout is active on a device by testing the following conditions:
•
A record for the device exists in the ExtensionMobilityDynamic table.
•
The ExtensionMobilityDynamic.logintime column is NULL.
•
The ExtensionMobilityDynamic.fkdevice_currentloginprofile is non-NULL.
An application can determine whether neither Cisco Extension Mobility login or logout is active on a device by testing the following conditions:
•
A record for the device exists in the ExtensionMobilityDynamic table.
•
The ExtensionMobilityDynamic.logintime column is NULL.
•
The ExtensionMobilityDynamic.fkdevice_currentloginprofile is NULL.
Call-Processing Requirements
Call Processing uses the new ExtensionMobilityDynamic table to properly configure the device on Device reset, registration, or change notification. Cisco Unified Communications Manager registers for change notification on the ExtensionMobilityDynamic table and updates any internally cached information as required.
All the call-processing requirements that are described here assume that the device is enabled for Cisco Extension Mobility; that is, the Device.allowhotelingflag = `t', (TRUE).
Upon Device reset, registration, or change notification:
•
If ExtensionMobilityDynamic.fkdevice_currentprofile is NULL, Cisco Unified Communications Manager does not override any device information.
•
If ExtensionMobilityDynamic.fkdevice_currentprofile is non-NULL, Cisco Unified Communications Manager uses
–
ExtensionMobilityDynamic.fkenduser to override Device.fkenduser and any other device information that is derived from Device.fkenduser that is Cisco Extension Mobility specific.
–
ExtensionMobilityDynamic.fkPhoneTemplate to override Device.fkPhoneTemplate and any other device information that is derived from Device.fkPhoneTemplate.
–
ExtensionMobilityDynamic.fkSoftkeyTemplate to override Device. fkSoftkeyTemplate and any other device information that is derived from Device.fkSoftkeyTemplate.
–
ExtensionMobilityDynamic.tkUserLocale to override Device.tkUserLocale and any other device information that is derived from Device.tkUserLocale.
–
ExtensionMobilityDynamic.UserHoldMOHAudioSourceID to override Device.UserHoldMOHAudioSourceID and any other device information that is derived from Device.UserHoldMOHAudioSourceID.
–
ExtensionMobilityDynamic.tkStatus_MLPPIndicationStatus to override Device.tkStatus_MLPPIndicationStatus and any other device information that is derived from Device.tkStatus_MLPPIndicationStatus.
–
ExtensionMobilityDynamic.tkPreemption to override Device.tkPreemption and any other device information that is derived from Device.tkPreemption.
–
ExtensionMobilityDynamic.ignorePI to override Device.ignorePI and any other device information that is derived from Device.ignorePI.
–
ExtensionMobilityDynamic.allowCTIControlFlag to override Device.allowCTIControlFlag and any other device information that is derived from Device.allowCTIControlFlag.
–
ExtensionMobilityDynamic.fkCallingSearchspace_restrict to override Device.fkCallingSearchspace_restrict and any other device information that is derived from Device.fkCallingSearchspace_restrict.
–
DevicePrivacyDynamic.tkStatus_CallInfoPrivate joined by ExtensionMobilityDynamic.fkdevice_currentprofile to override DevicePrivacyDynamic.tkStatus_CallInfoPrivate joined by Device.pkid and any other device information, that is derived from DevicePrivacyDynamic.tkStatus_CallInfoPrivate.
–
ExtensionMobilityDynamic.fkMatrix_Presence to override Device.fkMatrix_Presence and any other device information that is derived from Device.fkMatrix_Presence.
–
ExtensionMobilityDynamic.fkMLPPDomain to override Device.fkMLPPDomain and any other device information that is derived from Device.fkMLPPDomain.
–
ExtensionMobilityDynamic.fkdevice_currentprofile if non-NULL, instead of Device.pkid, to join with the DeviceNumPlanMap table to associate DeviceNumPlanMap information with ExtensionMobilityDynamic.fkdevice.
•
No DeviceNumPlanMap record with DeviceNumPlanMap.numPlanIndex greater than ExtensionMobilityDynamic.lastNumPlanIndex from this result set shall be accepted.
•
Cisco Unified Communications Manager uses the preceding result set and updates the DeviceNumPlanMap.ctiid values by using the following algorithm: Update each DeviceNumPlanMap.ctiid value in the result set with a new value that is derived from ((ExtensionMobilityDynamic.ctiibase * 256) + DeviceNumPlanMap.numplanindex).
•
Cisco Unified Communications Manager uses the preceding result set to join with the NumPlan table to associate NumPlan information with ExtensionMobilityDynamic.fkdevice.
•
Cisco Unified Communications Manager recalculates the DeviceNumPlanMap.busytrigger and DeviceNumPlanMap.maxnumcalls values that are returned with the preceding result set, if ExtensionMobilityDynamic.mismatchedlogin is set to `t' (TRUE) by using an algorithm equivalent to the mismatched login algorithm that is currently in the DeviceLogin database stored procedure.
–
ExtensionMobilityDynamic.fkdevice_currentprofile, if non-NULL, instead of Device.pkid, to join with
•
SpeedDial table to associate SpeedDial information with ExtensionMobilityDynamic.fkdevice.
•
BLFSpeedDial table to associate BLFSpeedDial information with ExtensionMobilityDynamic.fkdevice.
•
TelecasterSubscribedService table to associate TelecasterSubscribedService information with ExtensionMobilityDynamic.fkdevice.
•
TelecasterSubscribedParameter table to associate TelecasterSubscribedParameter information with ExtensionMobilityDynamic.fkdevice.
•
BLFDirectedCallPark table to associate BLFDirectedCallPark information with ExtensionMobilityDynamic.fkdevice.
•
DeviceAddOnModuleMap table to associate DeviceAddOnModuleMap information with ExtensionMobilityDynamic.fkdevice, except as described in the following item.
–
ExtensionMobilityDynamic.fkdevice to join with the DeviceAddOnModuleMap table to associate DeviceAddOnModuleMap.specialloadinformation with ExtensionMobilityDynamic.fkdevice.
Be aware that this is required because the Administrator cannot provision special load information on a Device Profile.
–
DNDDynamic.DNDStatus joined by ExtensionMobilityDynamic.fkdevice_currentprofile to override DNDDynamic.DNDStatus that is joined by Device.pkid and any other device information, that is derived from DNDDynamic.DNDStatus.
•
Cisco Unified Communications Manager updates DNDDynamic.DNDStatus that is joined by ExtensionMobilityDynamic.fkdevice_currentprofile, if it is non-NULL, instead of DNDDynamic.DNDStatus that is joined by Device.pkid, when necessary.
•
Cisco Unified Communications Manager updates DevicePrivacyDynamic.tkStatus_CallInfoPrivate that is joined by ExtensionMobilityDynamic.fkdevice_currentprofile, if it is non-NULL, instead of DevicePrivacyDynamic.tkStatus_CallInfoPrivate that is joined by Device.pkid, when necessary.
•
Cisco Unified Communications Manager validates the Ring Setting configuration in associated DeviceNumPlanMap records by checking the ProductSupportsFeature entries for the login model when ExtensionMobilityDynamic.misMatchedLogin is `t' (TRUE).
If the login model does not support Ring Setting, Cisco Unified Communications Manager overwrites the RingSetting configuration to be disabled.
CTI Requirements for Call Processing
Cisco Unified Communications Manager continues to provide the same information in CtiDeviceRegister Notify and CtiDeviceUnregisterNotify upon Device reset, registration, and Extensiion Mobility login/logout.
Database Requirements
The following database requirements result from the Cisco Extension Mobility rearchitecture:
•
The ExtensionMobilityDynamic table contains the following columns: pkid, fkdevice, fkenduser, fkenduser_lastlogin, logintime, loginduration, fkdevice_defaultloginprofile, fkdevice_currentloginprofile, fkphonetemplate, fksoftkeytemplate, tkuserlocale, userholdmohaudiosourceid, tkstatus_mlppindicationstatus, tkpreemption, ignorepi, allowcticontrolflag, fkcallingsearchspace_restrict, fkmatrix_presence, fkmlppdomain, ctiidbase, lastnumplanindex, mismatchedlogin, and versionstamp.
The system applies the same Cisco Extension Mobility business rules for the columns that moved from the Device table to the ExtensionMobilityDynamic table: Device.fkenduser_lastlogin , Device.logintime, Device.loginduration, Device.ikdevice_defaultprofile, and Device.ikdevice_currentloginprofile.
The updated reset stored procedures account for the new information that is stored in the ExtensionMobilityDynamic table.
•
The ExtensionMobilityDynamic table is the only table that is updated in response to Cisco Extension Mobility login/logouts. Device.fkenduser does not get used for Cisco Extension Mobility login/logout. No records in the Device table get updated in response to Cisco Extension Mobility login/logouts.
•
Change notification gets provided for changes made to the ExtensionMobilityDynamic table, and the ExtensionMobilityDynamic.versionstamp column gets updated every time the record gets updated.
•
An ExtensionMobilityDynamic record automatically gets created for each Device record when allowhotelingflag is set to a value of `t' (TRUE). During automatic record creation, ExtensionMobilityDynamic.fkdevice gets set to Device.pkid, and all other columns get set to the default values that are listed in Table 3-2.
All automatically generated Device Profiles get deleted during an L2 or W1.
•
Database automatically deletes the ExtensionMobilityDynamic record for each Device record when allowhotelingflag is set to a value of `f' (FALSE), where ExtensionMobilityDynamic.fkdevice equals Device.pkid.
•
Database cascade deletes the ExtensionMobilityDynamic record for each Device record, where ExtensionMobilityDynamic.fkdevice equals Device.pkid.
•
Database does not insert records into or delete records from the following tables in response to Cisco Extension Mobility login/logouts;
–
DeviceNumPlanMap
–
SpeedDial
–
BLFSpeedDial
–
BLFDirectedCallPark
–
TelecasterSubscribedService
–
TelecasterSubscribedServiceParameter
–
DeviceAddOnModuleMap.
•
During a Cisco Extension Mobility login
–
ExtensionMobilityDynamic.mismatchedlogin gets set to a value of `t' (TRUE) when the Device Profile that is selected is mismatched with the current device, and ExtensionMobilityDynamic.lastnumplanindex gets set to the greatest value of DeviceNumPlanMan.numplanindex, from the set of records where ExtensionMobilityDynamic.fkdevice_currentloginprofile equals DeviceNumPlanMap.fkdevice, limited by the mismatched login operation.
–
ExtensionMobilityDynamic.mismatchedlogin is set to a value of `f' (FALSE) when the Device Profile that is selected is matched with the current device, and ExtensionMobilityDynamic.lastnumplanindex gets set to the greatest value of DeviceNumPlanMan.numplanindex, from the set of records where ExtensionMobilityDynamic.fkdevice_currentloginprofile equals DeviceNumPlanMap.fkdevice.
–
ExtensionMobilityDynamic.ctiibase gets set to a unique 32-bit number per node. The upper eight bits are set to 00000000, the next eight bits are set to 1nnnnnnn, where nnnnnnn is set to ProcessNode.nodeid for the node of the Extension Mobility Service that is servicing this Extension Mobility login, and the lower sixteen bits get set to a unique value for this node, within the range of (0 - 65535).
•
During a Cisco Extension Mobility logout
–
ExtensionMobilityDynamic.mismatchedlogin gets set to a value of `f' (FALSE).
–
If ExtensionMobilityDynamic.fkdevice_defaultdeviceprofile is non-NULL, ExtensionMobilityDynamic.fkdevice_currentloginprofile gets set equal to ExtensionMobilityDynamic.fkdevice_defaultdeviceprofile, and ExtensionMobilityDynamic.lastnumplanindex gets set to the greatest value of DeviceNumPlanMan.numplanindex, from the set of records where ExtensionMobilityDynamic.fkdevice_currentloginprofile equals DeviceNumPlanMap.fkdevice.
–
If ExtensionMobilityDynamic.fkdevice_defaultdeviceprofile is NULL, ExtensionMobilityDynamic.fkdevice_currentloginprofile gets set to its default value, and ExtensionMobilityDynamic.lastnumplanindex gets set to its default value.
–
If ExtensionMobilityDynamic.fkdevice_currentloginprofile is non-NULL, ExtensionMobilityDynamic.ctiibase gets set to a unique 32-bit number per node. The upper eight bits get set to 00000000, the next eight bits get set to 1nnnnnnn, where nnnnnnn is set to ProcessNode.nodeid for the node of the Cisco Extension Mobility Service that is servicing this Cisco Extension Mobility logout, and the lower sixteen bits get set to a unique value for this node, within the range of (0 - 65535).
–
If ExtensionMobilityDynamic.fkdevice_currentloginprofile is NULL, Database shall set ExtensionMobilityDynamic.ctiibase to its default value.
•
The ExtensionMobilityDynamic.lastnumplanindex gets updated for each Cisco Extension Mobility login to indicate the greatest DeviceNumPlanMap.numplanindex from the DeviceNumPlanMap table that can be associated with the Device from the current Device Profile. This feature supports mismatched ExtensionMobility.login/logout; that is, when the selected Device Profile is for a device that differs in type from the current device.
•
The Enterprise Parameter, "Synchronization Between Auto Device Profile and Phone Configuration," gets removed from the database because this parameter is no longer required.
TFTP Requirements
See the "TFTP Impacted" column in Table 3-2 for the columns in the ExtensionMobilityDynamic table that apply to TFTP, if TFTP is involved with the device that is undergoing Cisco Extension Mobility login or logout. During Cisco Extension Mobility login or logout to one of these devices, TFTP uses all the requirements from the "Call-Processing Requirements" section that are relevant to TFTP.
EMApp and EMService Requirements
EMApp and EMService requirements assume that no design change is required to work with the Cisco Extension Mobility rearchitecture. The only significant change requires that you query the table ExtensionMobilityDynamic instead of the Device table or EndUser table.
EMApp needs to figure out the login/logout status and also the last logged in user information. You now obtain these two pieces of information from the ExtensionMobilityDynamic table.
EMService does policy validation, gets device information, and selects all devices where the user has logged in. You now must query the ExtensionMobilityDynamic table to obtain this information. Also, EMAPI that is exposed by this component needs to update and query the ExtensionMobilityDynamic table.
Administration Requirements
The Administration Requirements assume that Cisco Extension Mobility is enabled on the current device.
After a Cisco Extension Mobility login
•
Administration provides a link to the current Device Profile, ExtensionMobilityDynamic.fkdevice_currentdeviceprofile, which is associated with the current device to display the current operational state of the device and to the current EndUser Profile, ExtensionMobilityDynamic.fkenduser.
After a Cisco Extension Mobility logout
•
If ExtensionMobilityDynamic.fkdevice_currentdeviceprofile is non-NULL, Administration provides a link to the current Device Profile, ExtensionMobilityDynamic.fkdevice_currentdeviceprofile, associated with the current device to display the current operational state of the device, and to the current EndUser Profile, ExtensionMobilityDynamic.fkenduser.
•
If ExtensionMobilityDynamic.fkdevice_currentdeviceprofile is NULL, Administration does not provide a link to any Device Profile or to any EndUser Profile because ExtensionMobilityDynamic.fkenduser is also NULL.
Administration provides a Current Configuration button, which displays the current configuration of the device after a Cisco Extension Mobility login or logout when ExtensionMobilityDynamic.fkdevice_currentdeviceprofile is non-NULL.
Administration groups the Cisco Extension Mobility impact attributes into the Cisco Extension Mobility section on the Phone Configuration Page and, if a user is currently logged in, indicates that the configuration change for the attributes under the Cisco Extension Mobility section will not take effect until the user logs out.
Administration Use Case
For a device that has a Cisco Extension Mobility login that is currently active or a Cisco Extension Mobility Logout Profile that is not active, Administration displays "--- Use Current Device Settings ---." The settings that display on the device window still reflect the device settings and not the operational settings of the device because the database tables have not been modified.
Administration now provides a link to the current EndUser Profile and the current Device Profile.
•
If the SysAdmin selects the EndUser Profile link, Administration displays the EndUser Profile.
•
If the SysAdmin selects the Device Profile link, Administration displays the Device Profile.
•
If the SysAdmin selects the Current Configuration button, Administration displays the current configuration.
CTI Requirements
The following paragraphs summarize the changes that have been made in CTI.
•
CTIManager adjusted database access to account for information now available in the new ExtensionMobilityDynamic table.
•
CTIManager registers for change notification on the ExtensionMobilityDynamic table and updates any internally cached information as required.
•
If the ExtensionMobilityDynamic.fkdevice_currentprofile is NULL, Cisco Unified Communications Manager does not override any device information on Device reset, registration, or change notification.
•
Cisco Unified Communications Manager uses ExtensionMobilityDynamic.fkenduser to determine the name of the currently logged-on user.
•
On Device reset, registration, or change notification, if ExtensionMobilityDynamic.fkdevice_currentprofile is non-NULL
–
CTIManager uses ExtensionMobilityDynamic.fkdevice_currentprofile, instead of Device.pkid, to join with the DeviceNumPlanMap table to associate DeviceNumPlanMap information with ExtensionMobilityDynamic.fkdevice, and no DeviceNumPlanMap record with DeviceNumPlanMap.numPlanIndex greater then ExtensionMobilityDynamic.lastNumPlanIndex from this result set shall be accepted.
–
CTIManager calculates CtiID value for the line by using the formula, CtiID = ((ExtensionMobilityDynamic.ctiibase * 256) + DeviceNumPlanMap.numplanindex), to generate unique CtiID for the line.
–
CTIManager uses ExtensionMobilityDynamic.tkUserLocale to override Device.tkUserLocale and any other device information that was derived from Device.tkUserLocale.
–
CTIManager uses ExtensionMobilityDynamic.allowCTIControlFlag to override Device.allowCTIControlFlag.
–
CTIManager recalculates the DeviceNumPlanMap.busytrigger and DeviceNumPlanMap.maxnumcalls values if ExtensionMobilityDynamic.mismatchedlogin is set to `t' (TRUE) by using an algorithm equivalent to the mismatched login algorithm that currently in the DeviceLogin database stored procedure.
–
CTIManager uses DNDDynamic.DNDStatus that is joined by ExtensionMobilityDynamic.fkdevice_currentprofile to override DNDDynamic.DNDStatus that is joined by Device.pkid and any other device information that is derived from DNDDynamic.DNDStatus.
CTI Use Case
From an application perspective, the functionality remains the same.
AXL SOAP Database Requirements
To allow Cisco Extension Mobility to become a CallProcessing User Facing Feature that is writable locally, required schema changes necessitate movement of columns from one table to another. Thus, this means that applications that employ direct SQL access to the database are not compatible with release 6.0(1). The Cisco Unified Communications Manager Data Dictionary, Release 6.0(1) documents all schema changes from releases 4.2 and 5.0. Tables and columns identified as present in release 4.2 or 5.0 and removed from release 6.0 are the columns where backward compatibility is broken.
AXL maintains backward compatibility in the APIs that do not use direct SQL access. AXL accesses the publisher database server specifically, instead of the local database.
CCMCIP
CCMCIP adjusts database access to account for information that is available in the ExtensionMobilityDynamic table for service button. When a user is logged in to the device, instead of retrieving the TelecasterSubscriberService records that are associated with the login device, CCMCIP retrieves the TelecasterSubscribedService records that are associated with the current login device profile.
Feature Interactions
Cisco Extension Mobility interacts with the Privacy and Do Not Disturb (DND) features.
Cisco Extension Mobility interacts with the Privacy feature as each Device Profile has a record associated with it in the DevicePrivacyDynamic table. When a Device Profile is in use and supports Privacy, updating the Privacy status will modify the record that is associated with the Device Profile and not the record that is associated with the Device.
Cisco Extension Mobility and the DND feature interact as each Device Profile has a record that is associated with it in the DNDDynamic table. When a Device Profile is in use and supports DND, updating the DND status will modify the record that is associated with the Device Profile and not the record that is associated with the Device.
Configuration
The Cisco Extension Mobility service application accompanies Cisco Unified Communications Manager. As such, all necessary Cisco Extension Mobility service API components get installed with the standard Cisco Unified Communications Manager installation.
To use the Cisco Extension Mobility service, create a device profile for the user who is logging in and for the target device. Use the following steps to configure Cisco Extension Mobility service:
•
Activate the service.
•
Create Extension Mobility IP phone service.
•
Create a user device profile.
•
Assign the user device profile to a user.
•
Assign authentication proxy rights to a UserID.
•
Assign UserID to the Standard EM Authentication Proxy Rights user group.
•
Enable Cisco Extension Mobility and configure the default device profile on the target device.
(You must enable Cisco Extension Mobility on a device-by-device basis.)
•
Subscribe to Cisco Extension Mobility IP phone service on the target device and the device profile.
•
Assign a logout device profile to a target device.
•
Configure the system parameters (the system uses defaults if parameters are not manually configured).
Note
Technically, no need exists to assign a profile to a user. The device profile can be specified at login.
For details on how to configure the User Device Profile, refer to the Cisco Unified Communications Manager Administration Guide or Cisco Unified Communications Manager Features and Services Guide.
Messages
You communicate between your login application and the Cisco Extension Mobility service by sending and receiving XML messages. The XML messages that you send must follow the rules that are set by the Message DTDs that are described in the "Message Document Type Definitions" section.
The default URL for login and logout requests and system queries is
http://<server>:8080/emservice/EMServiceServlet
The application sends authentication information, including an Application ID and an Application Certificate, at the start of message.
A password represents the only type of certificate that is currently supported. All messages must include a valid appID and appPassword, or they do not get processed. For examples of valid Cisco Extension Mobility messages, see the "Message Examples" section.
Login Requests
Login requests provide the cornerstone of this service, and currently they offer the most flexible and complex message type. The information that is required to process a login request must include the device that is to be logged in to and the UserID of the user who is logging in to that device. If a device profile other than the default device profile that has been associated with the user is to be used, you can specify that profile name. If the system is to automatically log the user out after a particular time, you can also specify that. To log out, you only need to provide the device name in the message.
Device-User Queries
A Device-User query represents a query wherein the login application specifies a list of one or more devices, and the system returns the userID of the user who is currently logged on to each device.
User-Devices Queries
A User-Devices query represents a query in which the login application specifies a list of one or more users, and the system returns the list of devices to which a particular user is currently logged in.
Message Document Type Definitions
A Message Document Type Definition (DTD) designates an XML list that specifies precisely which elements can appear in a request, query, or response document. It also specifies the contents and attributes of the elements.
You communicate between your login application and the Cisco Extension Mobility service by sending and receiving XML documents. These XML documents must follow the rules that the Message DTDs set. For examples of how Message DTDs are used, see the "Message Examples" section.
Request DTD
The Request DTD defines the login and logout messages that your application can send to the Cisco Exchange Mobility service.
<!-- login requests DTD -->
<!ELEMENT request (appInfo, (login | logout))>
<!ELEMENT appInfo (appID, appCertificate)>
<!ELEMENT appID (#PCDATA)>
<!ELEMENT appCertificate (#PCDATA)>
<!ELEMENT login (deviceName, userID, deviceProfile?, exclusiveDuration?)>
<!ELEMENT logout (deviceName)>
<!ELEMENT deviceName (#PCDATA)>
<!ELEMENT userID (#PCDATA)>
<!ELEMENT deviceProfile (#PCDATA)>
<!ELEMENT exclusiveDuration (time | indefinite)>
<!ELEMENT time (#PCDATA)>
<!ELEMENT indefinite EMPTY>
Login or Logout Response DTD
Login or Logout Response DTD defines the messages that your application receives from the Cisco Extension Mobility service when it sends a login or logout request message.
<!-- login response DTD -->
<!ELEMENT response (success | failure)>
<!ELEMENT failure (error)>
<!ELEMENT error (#PCDATA)>
Query DTD
The Query DTD defines the Device-User and User-Devices messages that your application sends the Cisco Extension Mobility service to find out which user is logged in to a device or to which devices users are logged in.
<!ELEMENT query (appInfo, (deviceUserQuery | userDevicesQuery))>
<!ELEMENT appInfo (appID, appCertificate)>
<!ELEMENT appID (#PCDATA)>
<!ELEMENT appCertificate (#PCDATA)>
<!ELEMENT deviceUserQuery (deviceName+)>
<!ELEMENT userDevicesQuery (userID+)>
<!ELEMENT deviceName (#PCDATA)>
<!ELEMENT userID (#PCDATA)>
Query Response DTD
The Query Response DTD defines the messages that your application receives from the Cisco Extension Mobility service when it sends the service a Device-User or User-Devices query.
<!-- login query results DTD -->
<!ELEMENT response (deviceUserResults | userDevicesResults | failure)>
<!ELEMENT deviceUserResults (device+)>
<!ELEMENT userDevicesResults (user+)>
<!ELEMENT device (userID | lastlogin | none | doesNotExist>
<!ELEMENT user (deviceName+ | none | doesNotExist)>
<!ELEMENT userID (#PCDATA)>
<!ELEMENT lastlogin (#PCDATA)>
<!ELEMENT deviceName (#PCDATA)>
<!ELEMENT doesNotExist EMPTY>
<!ELEMENT failure (errorMessage)>
<!ELEMENT errorMessage (#PCDATA)>
Message Examples
This section provides examples of various types of messages to aid in understanding how to use the message DTDs to communicate between your login application and the Cisco Extension Mobility service. Table 3-3 lists each example type, a description of the example, and a reference to the example.
Table 3-3 Message Examples
Message Type
|
Description
|
Reference
|
Login Request
|
The 7960LoginApp application requests that user rknotts be logged into device SEP003094C25B15.
|
Example 3-1
|
Login Request
|
The WebLoginApp application makes a login request that specifies the RyanTravelPhone profile and limits the login time to 60 minutes.
|
Example 3-2
|
Login Request
|
WebLoginApp requests that user rknotts be logged in to the specified device for an unlimited duration.
|
Example 3-3
|
Logout Request
|
The 7960LoginApp application requests that the current user be logged out of device SEP003094C25B15.
|
Example 3-4
|
Request Response
|
Response of Success to a login or logout request displays.
|
Example 3-5
|
Request Response
|
Failure response with error indicates an incorrect appID or password.
|
Example 3-6
|
Device-User Query
|
Message asks what user is logged into device SEP003094C25B15.
|
Example 3-7
|
User-Devices Query
|
Message asks to which devices user rknotts and fwragge are logged in.
|
Example 3-8
|
Device-User Response
|
Response displays that rknotts is the user who is logged in to device SEP003094C25B15.
|
Example 3-9
|
User-Devices Response
|
Response displays that rknotts is logged in to devices SEP003094C25B15 and SEP003094C25B49, and fwragge is logged in to device SEP003094C25B46.
|
Example 3-10
|
Request Examples
Request examples demonstrate three different login requests and one logout request. The login requests show a simple login message and two messages that specify options like using a particular device profile or setting a login duration.
Example 3-1 Simple Login Request
<appID>7960LoginApp</appID>
<appCertificate>password</appCertificate>
<deviceName>SEP003094C25B15</deviceName>
Example 3-2 Login Request That Specifies a Profile and a Time Restriction
<appID>WebLoginApp</appID>
<appCertificate>password</appCertificate>
<deviceName>SEP003094C25B15</deviceName>
<deviceProfile>RyanTravelPhone</deviceProfile>
Example 3-3 Login Request That Specifies an Unlimited Duration
<appID>WebLoginApp</appID>
<appCertificate>password</appCertificate>
<deviceName>SEP003094C25B15</deviceName>
Example 3-4 Logout Request
<appID>7960LoginApp</appID>
<appCertificate>password</appCertificate>
<deviceName>SEP003094C25B15</deviceName>
Request Response Examples
The request response examples show a success message (for either login or logout) and a failure message that indicates the type of error that the login or logout attempt generated.
Example 3-5 Success Response
Example 3-6 Failure Response
<error code="3">Could not authenticate 'appid'</error>
Query Examples
Query examples show a typical Device-User Query message and a typical User-Devices Query message that an application sent to the Cisco Extension Mobility service.
Example 3-7 Device-User Query
<appID>applicationName</appID>
<appCertificate>password</appCertificate>
<deviceName>SEP003094C25B15</deviceName>
Example 3-8 User-Devices Query
<appID>applicationName</appID>
<appCertificate>password</appCertificate>
Query Response Examples
Query Response examples show messages that the Cisco Extension Mobility service sends to the login application after the login application has sent a Device-User query message or a User-Devices query message.
Example 3-9 Device-User Response
If you log in to the phone for the first time, the response is as follows:
<device name="SEP00016CEA6616">
If you have previously logged in to the phone, the response is as follows:
<device name="SEP......">
<lastlogin>one</lastlogin>
Example 3-10 User-Devices Response
<deviceName>SEP003094C25B15</deviceName>
<deviceName>SEP003094C25B49</deviceName>
<deviceName>SEP003094C249A6</deviceName>
Application and Service Error Codes
Table 3-4 shows the new error codes the Cisco Extension Mobility Application module returns as well as the error code numbers for the previous release, and describes what each error code means.
Table 3-4 Cisco Extension Mobility Application Error Codes
New Error Code
|
Previous Error Code
|
Message—Description
|
200
|
0
|
NO_ERROR—Successful.
|
201
|
1
|
Authentication error AUTHENTICATION_ERROR—Authentication failed for user. Shows the user login page with error title.
|
202
|
2
|
Blank UserID or PIN NULL_PARAM—Shows the user login page with error title.
|
203
|
3
|
Application UserID/Pwd null APP_AUTHENTICATION_ERROR—Unable to find registry entry for AppUserID/Password.
|
204
|
6
|
Directory server error DIR_SERV_ERROR—Exception occurred while performing diraccess.authenticateuserwithpin().
|
205
|
9
|
User Profile absent or null DEV_PROF_ERROR—User profile absent or null.
|
206
|
12
|
No Device Profile associated with User DEV_PROF_UNAVAILABLE—No Device profile associated with user.
|
207
|
100
|
Device name empty or absent NULL_DEV_ERROR—Device name empty or absent.
|
208
|
101
|
Cannot connect to EM Service LOGIN_SERVICE_CONN_ERROR—Unable to connect with EMService.
|
Table 3-5 shows the current (new) error codes that the Cisco Extension Mobility Service module returns as well as the error code numbers for the previous release, and describes what each error code means. Shaded rows in this table represent error codes that are no longer used.
Table 3-5 Cisco Extension Mobility Service Error Codes
New Error Code
|
Previous Error Code
|
Message—Description
|
0
|
0
|
Unknown error UNKNOWN_ERROR—Error due to some exception, largely unknown; scope for new error code when request type could not be determined.
|
1
|
1
|
Error occurred on parsing request/query VALIDATION_ERROR—XML error occurred while parsing. Because the request or query was incorrectly formed, system cannot properly process it.
|
2
|
2
|
Error occurred on authenticating app user AUTHENTICATION_ERROR—Could not execute user authentication. Error occurred during the user authentication process, and the validity of the appID and appPassword that were submitted cannot be confirmed.
|
3
|
3
|
Invalid App User credentials INVALID_AUTHENTICATION—The appID and/or appPassword that were provided are incorrect.
|
4
|
4
|
Policy validation error POLICY_VALIDATION_ERROR—Exception occurred while doing policy validation. Some generic issue exists regarding the determination of whether the request is allowed.
|
5
|
5
|
Device does not allow logon REQUEST_DENIED—The request has been denied (failed Policy Validation) for one or more reasons.
|
6
|
6
|
Database error occurred DB_ERROR—The Cisco Extension Mobility service received an error while trying to communicate with the Cisco Unified Communications Manager database.
|
7
|
7
|
LOGOUT_REQUEST_ERROR—Not used.
|
8
|
8
|
Cannot determine query type QUERY_TYPE_UNKNOWN—Could not determine query type (Device-User or User-Devices) for response generation.
|
9
|
9
|
Directory User information error DIRUSER_ERROR—Directory User Information related error; could not integrate locales/ info / device profiles.
|
10
|
10
|
User does not have app proxy rights PROXY_AUTHENT_NOT_ALLOWED—User does not have proxy authentication rights. The appID that is specified does not have rights to log in or log out other users.
|
11
|
11
|
Device does not exist DEVICE_DOES_NOT_EXIST—Device ID is not present in the database. The specified device for login or logout does not exist in the system.
|
12
|
12
|
Device Profile does not exist DEVICE_PROFILE_ERROR—Either a profile was specified that does not exist or no logout device profile was configured for the specified user.
|
13
|
13
|
PIPE_CREATE_FILE_ERROR—Unused
|
14
|
14
|
PIPE_ERROR—Unused
|
15
|
15
|
PIPE_BUSY—Unused
|
16
|
16
|
SET_PIPE_STATE_ERROR—Unused
|
17
|
17
|
PIPE_WRITE_ERROR—Unused
|
18
|
18
|
Another user logged in DEVICE_ALREADY_LOGGED_IN—The system could not log in to the specified device because another user is already logged in.
|
19
|
19
|
No user logged in DEVICE_NOT_LOGGED_IN—The system could not log out of the specified device because no user is logged in.
|
20
|
20
|
Hoteling flag error GET_DEVICE_HOTELING_FLAG_ERROR—The system could not determine whether the device allows Cisco Extension Mobility (also called "hoteling").
|
21
|
21
|
Hoteling status error GET_DEVICE_HOTELING_STATUS_ERROR—The system could not determine the current user status.
|
22
|
22
|
Device does not allow logon DEVICE_DOES_NOT_ALLOW_HOTELING—The device that is specified is not configured for Cisco Extension Mobility ("hoteling").
|
23
|
23
|
User does not exist USER_DOES_NOT_EXIST—The userID that was entered for login does not exist in the system.
|
24
|
24
|
System not enabled for login SYSTEM_NOT_ENABLED—System login not allowed.
|
25
|
25
|
User logged in elsewhere USER_LOGGED_IN_ELSEWHERE—The specified user is already logged in to a different device or is attempting to log in to a different device.
|
26
|
26
|
Busy, please try again LOGIN_THROTTLED—User login not allowed. The server is busy.
|