mirror of
https://repository.entgra.net/community/device-mgt-plugins.git
synced 2025-09-16 23:42:15 +00:00
resolved wso2/product-iots#1428
This commit is contained in:
parent
bc26d56bb8
commit
eb8dad1af7
@ -207,6 +207,7 @@ public final class PluginConstants {
|
||||
public static final String MANUFACTURER = "MANUFACTURER";
|
||||
public static final String LANGUAGE = "LANGUAGE";
|
||||
public static final String RESOLUTION = "RESOLUTION";
|
||||
public static final String WINDOWS_TYPE = "WINDOWS_TYPE";
|
||||
|
||||
// windows 10 codes
|
||||
public static final String TOTAL_RAM = "TOTAL_RAM";// available ram in MB
|
||||
@ -357,6 +358,7 @@ public final class PluginConstants {
|
||||
public static final String DEVICE_VERSION = "OSVersion";
|
||||
public static final String DEVICE_ID = "DeviceID";
|
||||
public static final String IMEI = "MobileEquipmentId";
|
||||
public static final String TYPE = "DeviceType";
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -38,9 +38,10 @@ public class ChallengeTag {
|
||||
|
||||
public void buildChallengeElement(Document doc, Element rootElement) {
|
||||
Element challenge = doc.createElement(Constants.CHALLENGE);
|
||||
rootElement.appendChild(challenge);
|
||||
|
||||
if (getMeta() != null) {
|
||||
getMeta().buildMetaElement(doc, challenge);
|
||||
}
|
||||
rootElement.appendChild(challenge);
|
||||
}
|
||||
}
|
||||
|
||||
@ -43,6 +43,16 @@ public class StatusTag {
|
||||
this.targetReference = targetReference;
|
||||
this.data = data;
|
||||
}
|
||||
public StatusTag(int commandId, int messageReference, int commandReference, String command,
|
||||
ChallengeTag challengeTag, String targetReference, String data) {
|
||||
this.commandId = commandId;
|
||||
this.messageReference = messageReference;
|
||||
this.commandReference = commandReference;
|
||||
this.command = command;
|
||||
this.challenge = challengeTag;
|
||||
this.targetReference = targetReference;
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
public StatusTag() {
|
||||
}
|
||||
@ -132,8 +142,10 @@ public class StatusTag {
|
||||
status.appendChild(targetReference);
|
||||
}
|
||||
if (getChallenge() != null) {
|
||||
|
||||
getChallenge().buildChallengeElement(doc, status);
|
||||
}
|
||||
|
||||
if (getData() != null) {
|
||||
Element data = doc.createElement(Constants.DATA);
|
||||
data.appendChild(doc.createTextNode(getData()));
|
||||
|
||||
@ -87,6 +87,7 @@ public class Constants {
|
||||
public final class SyncMLResponseCodes {
|
||||
public static final String AUTHENTICATION_ACCEPTED = "212";
|
||||
public static final String ACCEPTED = "200";
|
||||
public static final String UNAUTHORIZED = "401";
|
||||
public static final String ACCEPTED_FOR_PROCESSING = "202";
|
||||
public static final String PIN_NOTFOUND = "405";
|
||||
public static final String LOCK_RESET_NOTIFICATION = "Error occurred in Device Lock Operation. " +
|
||||
|
||||
@ -22,7 +22,6 @@ import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
|
||||
import org.wso2.carbon.device.mgt.common.device.details.DeviceInfo;
|
||||
@ -32,15 +31,21 @@ import org.wso2.carbon.device.mgt.common.notification.mgt.NotificationManagement
|
||||
import org.wso2.carbon.device.mgt.common.notification.mgt.NotificationManagementService;
|
||||
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
|
||||
import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException;
|
||||
import org.wso2.carbon.device.mgt.core.device.details.mgt.DeviceDetailsMgtException;
|
||||
import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants;
|
||||
import org.wso2.carbon.device.mgt.mobile.windows.api.common.util.WindowsAPIUtils;
|
||||
import org.wso2.carbon.device.mgt.mobile.windows.api.services.syncml.beans.Profile;
|
||||
import org.wso2.carbon.device.mgt.mobile.windows.api.operations.*;
|
||||
import org.wso2.carbon.policy.mgt.common.PolicyManagementException;
|
||||
import org.wso2.carbon.device.mgt.common.policy.mgt.ProfileFeature;
|
||||
import org.wso2.carbon.device.mgt.common.policy.mgt.monitor.ComplianceFeature;
|
||||
import org.wso2.carbon.device.mgt.common.policy.mgt.monitor.PolicyComplianceException;
|
||||
import org.wso2.carbon.device.mgt.core.device.details.mgt.DeviceDetailsMgtException;
|
||||
import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants;
|
||||
import org.wso2.carbon.device.mgt.mobile.windows.api.common.util.WindowsAPIUtils;
|
||||
import org.wso2.carbon.device.mgt.mobile.windows.api.operations.StatusTag;
|
||||
import org.wso2.carbon.device.mgt.mobile.windows.api.operations.SyncmlDocument;
|
||||
import org.wso2.carbon.device.mgt.mobile.windows.api.operations.SyncmlHeader;
|
||||
import org.wso2.carbon.device.mgt.mobile.windows.api.operations.ItemTag;
|
||||
import org.wso2.carbon.device.mgt.mobile.windows.api.operations.WindowsOperationException;
|
||||
import org.wso2.carbon.device.mgt.mobile.windows.api.operations.ResultsTag;
|
||||
import org.wso2.carbon.device.mgt.mobile.windows.api.operations.SyncmlBody;
|
||||
import org.wso2.carbon.device.mgt.mobile.windows.api.services.syncml.beans.Profile;
|
||||
import org.wso2.carbon.policy.mgt.common.PolicyManagementException;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@ -226,6 +231,22 @@ public class OperationHandler {
|
||||
}
|
||||
}
|
||||
|
||||
public void updateDisenrollOperation(DeviceIdentifier deviceIdentifier) throws OperationManagementException {
|
||||
List<? extends Operation> pendingDeviceInfoOperations;
|
||||
try {
|
||||
pendingDeviceInfoOperations = WindowsAPIUtils.getPendingOperations(deviceIdentifier);
|
||||
} catch (DeviceManagementException e) {
|
||||
throw new OperationManagementException("Error occurred while getting pending operations.");
|
||||
}
|
||||
for (Operation operation : pendingDeviceInfoOperations) {
|
||||
if (PluginConstants.OperationCodes.DISENROLL.equals(operation.getCode())) {
|
||||
operation.setStatus(Operation.Status.COMPLETED);
|
||||
updateStatus(deviceIdentifier.getId(), pendingDeviceInfoOperations);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void updateDeviceInfoStatus(DeviceIdentifier deviceIdentifier) throws OperationManagementException {
|
||||
List<? extends Operation> pendingDeviceInfoOperations;
|
||||
@ -294,6 +315,9 @@ public class OperationHandler {
|
||||
if (OperationCode.Command.TOTAL_RAM.getCode().equals(itemTag.getSource().getLocURI())) {
|
||||
updateDeviceInfo(syncmlDocument);
|
||||
}
|
||||
if (OperationCode.Command.BATTERY_CHARGE_REMAINING.equals(itemTag.getSource().getLocURI())) {
|
||||
updateDeviceInfo(syncmlDocument);
|
||||
}
|
||||
}
|
||||
}
|
||||
UpdateUriOperations(syncmlDocument);
|
||||
@ -562,6 +586,7 @@ public class OperationHandler {
|
||||
String totalRAM;
|
||||
String deviceID = null;
|
||||
String totalStorage;
|
||||
Double battery;
|
||||
|
||||
List<ItemTag> deviceInformations = syncmlDocument.getBody().getResults().getItem();
|
||||
DeviceInfo deviceInfo = new DeviceInfo();
|
||||
@ -598,6 +623,10 @@ public class OperationHandler {
|
||||
if (OperationCode.Info.DEV_ID.getCode().equals(source)) {
|
||||
deviceID = item.getData();
|
||||
}
|
||||
if (OperationCode.Info.BATTERY_CHARGE_REMAINING.getCode().equals(source)) {
|
||||
battery = Double.valueOf(item.getData());
|
||||
deviceInfo.setBatteryLevel(battery);
|
||||
}
|
||||
}
|
||||
DeviceIdentifier deviceIdentifier = convertToDeviceIdentifierObject(deviceID);
|
||||
try {
|
||||
@ -636,6 +665,18 @@ public class OperationHandler {
|
||||
} catch (OperationManagementException e) {
|
||||
throw new WindowsOperationException("Error occurred while updating Device Location operation status.");
|
||||
}
|
||||
}
|
||||
|
||||
public void checkForDeviceWipe(List<? extends Operation> pendingDeviceInfoOperations
|
||||
, DeviceIdentifier deviceIdentifier) throws OperationManagementException {
|
||||
|
||||
for (Operation operation : pendingDeviceInfoOperations) {
|
||||
if (PluginConstants.OperationCodes.WIPE_DATA.equals(operation.getCode())) {
|
||||
operation.setStatus(Operation.Status.COMPLETED);
|
||||
updateStatus(deviceIdentifier.getId(), pendingDeviceInfoOperations);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -21,6 +21,8 @@ package org.wso2.carbon.device.mgt.mobile.windows.api.operations.util;
|
||||
import com.google.gson.Gson;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
|
||||
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
|
||||
import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants;
|
||||
@ -159,17 +161,25 @@ public class OperationReply {
|
||||
}
|
||||
|
||||
private SyncmlBody generateStatuses() {
|
||||
|
||||
SyncmlBody sourceSyncmlBody = syncmlDocument.getBody();
|
||||
SyncmlHeader sourceHeader = syncmlDocument.getHeader();
|
||||
StatusTag headerStatus;
|
||||
ChallengeTag challengeTag;
|
||||
challengeTag = new ChallengeTag();
|
||||
MetaTag metaTag = new MetaTag();
|
||||
metaTag.setFormat("b64");
|
||||
metaTag.setType("syncml:auth-md5");
|
||||
metaTag.setNextNonce("ZHVtbXk=");
|
||||
challengeTag.setMeta(metaTag);
|
||||
SyncmlBody syncmlBodyReply = new SyncmlBody();
|
||||
List<StatusTag> statuses = new ArrayList<>();
|
||||
List<StatusTag> sourceStatuses = sourceSyncmlBody.getStatus();
|
||||
if (sourceStatuses.isEmpty()) {
|
||||
headerStatus =
|
||||
new StatusTag(headerCommandId, sourceHeader.getMsgID(), HEADER_STATUS_ID,
|
||||
HEADER_COMMAND_TEXT, sourceHeader.getSource().getLocURI(),
|
||||
String.valueOf(Constants.SyncMLResponseCodes.AUTHENTICATION_ACCEPTED));
|
||||
HEADER_COMMAND_TEXT, challengeTag,sourceHeader.getSource().getLocURI(),
|
||||
String.valueOf(Constants.SyncMLResponseCodes.UNAUTHORIZED));
|
||||
statuses.add(headerStatus);
|
||||
} else {
|
||||
for (StatusTag sourceStatus : sourceStatuses) {
|
||||
@ -177,7 +187,7 @@ public class OperationReply {
|
||||
|
||||
headerStatus =
|
||||
new StatusTag(headerCommandId, sourceHeader.getMsgID(), HEADER_STATUS_ID,
|
||||
HEADER_COMMAND_TEXT, sourceHeader.getSource().getLocURI(),
|
||||
HEADER_COMMAND_TEXT, challengeTag, sourceHeader.getSource().getLocURI(),
|
||||
String.valueOf(Constants.SyncMLResponseCodes.AUTHENTICATION_ACCEPTED));
|
||||
statuses.add(headerStatus);
|
||||
}
|
||||
|
||||
@ -18,6 +18,7 @@
|
||||
|
||||
package org.wso2.carbon.device.mgt.mobile.windows.api.services.enrollment.impl;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import org.apache.commons.codec.binary.Base64;
|
||||
import org.apache.commons.codec.digest.DigestUtils;
|
||||
import org.apache.commons.logging.Log;
|
||||
@ -40,6 +41,7 @@ import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WAPProvis
|
||||
import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsDeviceEnrolmentException;
|
||||
import org.wso2.carbon.device.mgt.mobile.windows.api.common.util.DeviceUtil;
|
||||
import org.wso2.carbon.device.mgt.mobile.windows.api.common.util.WindowsAPIUtils;
|
||||
import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.DeviceInfo;
|
||||
import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.SyncmlCredentialUtil;
|
||||
import org.wso2.carbon.device.mgt.mobile.windows.api.services.enrollment.EnrollmentService;
|
||||
import org.wso2.carbon.device.mgt.mobile.windows.api.services.enrollment.beans.*;
|
||||
@ -368,7 +370,7 @@ public class EnrollmentServiceImpl implements EnrollmentService {
|
||||
* @return Value added Device.
|
||||
*/
|
||||
private Device generateDevice(WindowsDevice windowsDevice) {
|
||||
|
||||
Gson gson = new Gson();
|
||||
Device generatedDevice = new Device();
|
||||
|
||||
Device.Property OSVersionProperty = new Device.Property();
|
||||
@ -383,15 +385,28 @@ public class EnrollmentServiceImpl implements EnrollmentService {
|
||||
IMEIProperty.setName(PluginConstants.SyncML.IMEI);
|
||||
IMEIProperty.setValue(windowsDevice.getImei());
|
||||
|
||||
Device.Property deviceInfoProperties = new Device.Property();
|
||||
deviceInfoProperties.setName(PluginConstants.WindowsEnrollmentProperties.TYPE);
|
||||
deviceInfoProperties.setValue(windowsDevice.getWindowsType());
|
||||
String deviceInfo = gson.toJson(deviceInfoProperties);
|
||||
|
||||
|
||||
Device.Property winDeviceType = new Device.Property();
|
||||
winDeviceType.setName(PluginConstants.SyncML.DEVICE_INFO);
|
||||
winDeviceType.setValue(deviceInfo);
|
||||
|
||||
|
||||
List<Device.Property> propertyList = new ArrayList<>();
|
||||
propertyList.add(OSVersionProperty);
|
||||
propertyList.add(IMSEIProperty);
|
||||
propertyList.add(IMEIProperty);
|
||||
propertyList.add(winDeviceType);
|
||||
|
||||
EnrolmentInfo enrolmentInfo = new EnrolmentInfo();
|
||||
enrolmentInfo.setOwner(windowsDevice.getUser());
|
||||
enrolmentInfo.setOwnership(EnrolmentInfo.OwnerShip.BYOD);
|
||||
enrolmentInfo.setStatus(EnrolmentInfo.Status.ACTIVE);
|
||||
|
||||
|
||||
generatedDevice.setEnrolmentInfo(enrolmentInfo);
|
||||
generatedDevice.setDeviceIdentifier(windowsDevice.getDeviceId());
|
||||
@ -430,9 +445,13 @@ public class EnrollmentServiceImpl implements EnrollmentService {
|
||||
if (PluginConstants.WindowsEnrollmentProperties.DEVICE_VERSION.equals(contextItem.getName())) {
|
||||
windowsDevice.setOsVersion(contextItem.getValue());
|
||||
}
|
||||
if (PluginConstants.WindowsEnrollmentProperties.TYPE.equals(contextItem.getName())) {
|
||||
windowsDevice.setWindowsType(contextItem.getValue());
|
||||
}
|
||||
}
|
||||
Device device = generateDevice(windowsDevice);
|
||||
WindowsAPIUtils.getDeviceManagementService().enrollDevice(device);
|
||||
|
||||
PolicyManagerService policyManagerService = WindowsAPIUtils.getPolicyManagerService();
|
||||
policyManagerService.getEffectivePolicy(new DeviceIdentifier(windowsDevice.getDeviceId(), device.getType()));
|
||||
|
||||
|
||||
@ -87,39 +87,60 @@ public class DeviceManagementServiceImpl implements DeviceManagementService {
|
||||
|
||||
if ((PluginConstants.SyncML.SYNCML_FIRST_MESSAGE_ID == msgId) &&
|
||||
(PluginConstants.SyncML.SYNCML_FIRST_SESSION_ID == sessionId)) {
|
||||
token = syncmlHeader.getCredential().getData();
|
||||
MobileCacheEntry cacheToken = DeviceUtil.getTokenEntry(token);
|
||||
DeviceUtil.persistChallengeToken(token, deviceIdentifier.getId(), user);
|
||||
PrivilegedCarbonContext carbonCtx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
|
||||
carbonCtx.setTenantId(cacheToken.getTenanatID(), true);
|
||||
if (syncmlHeader.getCredential() != null) {
|
||||
token = syncmlHeader.getCredential().getData();
|
||||
|
||||
if ((cacheToken.getUsername() != null) && (cacheToken.getUsername().equals(user))) {
|
||||
MobileCacheEntry cacheToken = DeviceUtil.getTokenEntry(token);
|
||||
DeviceUtil.persistChallengeToken(token, deviceIdentifier.getId(), user);
|
||||
PrivilegedCarbonContext carbonCtx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
|
||||
carbonCtx.setTenantId(cacheToken.getTenanatID(), true);
|
||||
|
||||
if (modifyEnrollWithMoreDetail(request, cacheToken.getTenantDomain(), cacheToken.getTenanatID())) {
|
||||
pendingOperations = operationHandler.getPendingOperations(syncmlDocument);
|
||||
response = operationReply.generateReply(syncmlDocument, pendingOperations);
|
||||
return Response.status(Response.Status.OK).entity(response).build();
|
||||
if ((cacheToken.getUsername() != null) && (cacheToken.getUsername().equals(user))) {
|
||||
|
||||
if (modifyEnrollWithMoreDetail(request, cacheToken.getTenantDomain(), cacheToken.getTenanatID())) {
|
||||
pendingOperations = operationHandler.getPendingOperations(syncmlDocument);
|
||||
operationHandler.checkForDeviceWipe(pendingOperations, deviceIdentifier);
|
||||
response = operationReply.generateReply(syncmlDocument, pendingOperations);
|
||||
return Response.status(Response.Status.OK).entity(response).build();
|
||||
|
||||
} else {
|
||||
String msg = "Error occurred in while modify the enrollment.";
|
||||
log.error(msg);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
} else {
|
||||
String msg = "Error occurred in while modify the enrollment.";
|
||||
String msg = "Authentication failure due to incorrect credentials.";
|
||||
log.error(msg);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
return Response.status(Response.Status.UNAUTHORIZED).entity(msg).build();
|
||||
}
|
||||
|
||||
} else {
|
||||
String msg = "Authentication failure due to incorrect credentials.";
|
||||
log.error(msg);
|
||||
return Response.status(Response.Status.UNAUTHORIZED).entity(msg).build();
|
||||
return Response.ok().entity(operationReply.generateReply(syncmlDocument, null)).build();
|
||||
}
|
||||
} else {
|
||||
MobileCacheEntry cacheToken = DeviceUtil.getTokenEntryFromDeviceId(deviceIdentifier.getId());
|
||||
PrivilegedCarbonContext carbonCtx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
|
||||
carbonCtx.setTenantId(cacheToken.getTenanatID());
|
||||
if (DeviceUtil.getTokenEntryFromDeviceId(deviceIdentifier.getId()) == null) {
|
||||
if (syncmlHeader.getCredential() != null) {
|
||||
token = syncmlHeader.getCredential().getData();
|
||||
|
||||
MobileCacheEntry cacheToken = DeviceUtil.getTokenEntry(token);
|
||||
DeviceUtil.persistChallengeToken(token, deviceIdentifier.getId(), user);
|
||||
PrivilegedCarbonContext carbonCtx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
|
||||
carbonCtx.setTenantId(cacheToken.getTenanatID(), true);
|
||||
}
|
||||
} else {
|
||||
MobileCacheEntry cacheToken = DeviceUtil.getTokenEntryFromDeviceId(deviceIdentifier.getId());
|
||||
PrivilegedCarbonContext carbonCtx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
|
||||
carbonCtx.setTenantId(cacheToken.getTenanatID());
|
||||
}
|
||||
if ((syncmlDocument.getBody().getAlert() != null)) {
|
||||
if (!syncmlDocument.getBody().getAlert().getData().equals(Constants.DISENROLL_ALERT_DATA)) {
|
||||
pendingOperations = operationHandler.getPendingOperations(syncmlDocument);
|
||||
operationHandler.checkForDeviceWipe(pendingOperations, deviceIdentifier);
|
||||
return Response.ok().entity(operationReply.generateReply(
|
||||
syncmlDocument, pendingOperations)).build();
|
||||
} else {
|
||||
if (WindowsAPIUtils.getDeviceManagementService().getDevice(deviceIdentifier, false) != null) {
|
||||
operationHandler.updateDisenrollOperation(deviceIdentifier);
|
||||
WindowsAPIUtils.getDeviceManagementService().disenrollDevice(deviceIdentifier);
|
||||
return Response.ok().entity(operationReply.generateReply(syncmlDocument, null)).build();
|
||||
} else {
|
||||
@ -130,6 +151,7 @@ public class DeviceManagementServiceImpl implements DeviceManagementService {
|
||||
}
|
||||
} else {
|
||||
pendingOperations = operationHandler.getPendingOperations(syncmlDocument);
|
||||
operationHandler.checkForDeviceWipe(pendingOperations, deviceIdentifier);
|
||||
return Response.ok().entity(operationReply.generateReply(
|
||||
syncmlDocument, pendingOperations)).build();
|
||||
}
|
||||
|
||||
@ -32,6 +32,15 @@ public class WindowsDevice {
|
||||
private String model;
|
||||
private String user;
|
||||
private String deviceName;
|
||||
private String windowsType;
|
||||
|
||||
public String getWindowsType() {
|
||||
return windowsType;
|
||||
}
|
||||
|
||||
public void setWindowsType(String windowsType) {
|
||||
this.windowsType = windowsType;
|
||||
}
|
||||
|
||||
public String getImei() {
|
||||
return imei;
|
||||
|
||||
@ -29,7 +29,7 @@
|
||||
</characteristic>
|
||||
<characteristic type="APPLICATION">
|
||||
<parm name="APPID" value="w7"/>
|
||||
<parm name="PROVIDER-ID" value="TestMDMServer"/>
|
||||
<parm name="PROVIDER-ID" value="MobiCDMServer"/>
|
||||
<parm name="NAME" value="Microsoft"/>
|
||||
<parm name="ADDR" value="https://DM.contoso.com:443/omadm/Windows.ashx"/>
|
||||
<parm name="CONNRETRYFREQ" value="6" />
|
||||
@ -42,8 +42,8 @@
|
||||
<characteristic type="APPAUTH">
|
||||
<parm name="AAUTHLEVEL" value="CLIENT"/>
|
||||
<parm name="AAUTHTYPE" value="DIGEST"/>
|
||||
<parm name="AAUTHSECRET" value="password1"/>
|
||||
<parm name="AAUTHDATA" value="B64encodedBinaryNonceInsertedHere"/>
|
||||
<parm name="AAUTHSECRET" value="dummy"/>
|
||||
<parm name="AAUTHDATA" value="ZHVtbXk="/>
|
||||
</characteristic>
|
||||
<characteristic type="APPAUTH">
|
||||
<parm name="AAUTHLEVEL" value="APPSRV"/>
|
||||
|
||||
@ -39,6 +39,7 @@ public class MobileDevice implements Serializable {
|
||||
private String serial;
|
||||
private String osBuildDate;
|
||||
|
||||
|
||||
private Map<String, String> deviceProperties;
|
||||
|
||||
public MobileDevice() {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user