| /* |
| * |
| * Copyright (c) 2013-2017 Nest Labs, Inc. |
| * All rights reserved. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| /** |
| * @file |
| * Objective-C representation of a Status Report from the common profile. |
| * |
| */ |
| |
| // Note that the choice of namespace alias must be made up front for each and every compile unit |
| // This is because many include paths could set the default alias to unintended target. |
| #include <Weave/Profiles/data-management/Legacy/WdmManagedNamespace.h> |
| |
| #import "NLProfileStatusError.h" |
| #import "NLWeaveDeviceManager.h" |
| |
| #include <Weave/Core/WeaveCore.h> |
| #include <Weave/Profiles/WeaveProfiles.h> |
| #include <Weave/Profiles/common/CommonProfile.h> |
| #include <Weave/Profiles/vendor/nestlabs/alarm/WeaveAlarm.h> |
| #include <Weave/Profiles/bulk-data-transfer/BulkDataTransfer.h> |
| #include <Weave/Profiles/service-directory/ServiceDirectory.h> |
| #include <Weave/Profiles/data-management/DataManagement.h> |
| #include <Weave/Profiles/device-control/DeviceControl.h> |
| #include <Weave/Profiles/fabric-provisioning/FabricProvisioning.h> |
| #include <Weave/Profiles/network-provisioning/NetworkProvisioning.h> |
| #include <Weave/Profiles/security/WeaveSecurity.h> |
| #include <Weave/Profiles/software-update/SoftwareUpdateProfile.h> |
| #include <Weave/Profiles/service-provisioning/ServiceProvisioning.h> |
| |
| using namespace nl::Weave::Profiles; |
| |
| @interface NLProfileStatusError() |
| { |
| NSString * _statusReport; |
| } |
| |
| @end |
| |
| @implementation NLProfileStatusError |
| |
| - (id)initWithProfileId:(uint32_t)profileId statusCode:(uint16_t)statusCode errorCode:(uint32_t)errorCode statusReport:(NSString*)statusReport |
| { |
| if (self = [super init]) |
| { |
| _profileId = profileId; |
| _statusCode = statusCode; |
| _errorCode = errorCode; |
| _statusReport = statusReport; |
| } |
| return self; |
| } |
| |
| - (NSInteger)translateErrorCode |
| { |
| switch (self.profileId) |
| { |
| case nl::Weave::Profiles::kWeaveProfile_Alarm: |
| switch (self.statusCode) |
| { |
| case nl::Weave::Profiles::kAlarmUpdateStatus_Success : return kNLAlarmUpdateStatus_Success; |
| case nl::Weave::Profiles::kAlarmUpdateStatus_Rejected : return kNLAlarmUpdateStatus_Rejected; |
| case nl::Weave::Profiles::kAlarmUpdateStatus_Invalid : return kNLAlarmUpdateStatus_Invalid; |
| case nl::Weave::Profiles::kAlarmUpdateStatus_Timeout : return kNLAlarmUpdateStatus_Timeout; |
| default : return self.statusCode; |
| } |
| break; |
| |
| case nl::Weave::Profiles::kWeaveProfile_BDX: |
| switch (self.statusCode) |
| { |
| case BulkDataTransfer::kStatus_Overflow : return kNLStatus_Overflow; |
| case BulkDataTransfer::kStatus_LengthTooShort : return kNLStatus_LengthTooShort; |
| case BulkDataTransfer::kStatus_XferFailedUnknownErr : return kNLStatus_XferFailedUnknownErr; |
| case BulkDataTransfer::kStatus_XferMethodNotSupported : return kNLStatus_XferMethodNotSupported; |
| case BulkDataTransfer::kStatus_UnknownFile : return kNLStatus_UnknownFile; |
| case BulkDataTransfer::kStatus_StartOffsetNotSupported : return kNLStatus_StartOffsetNotSupported; |
| case BulkDataTransfer::kStatus_Unknown : return kNLStatus_Unknown; |
| default : return self.statusCode; |
| } |
| break; |
| |
| case nl::Weave::Profiles::kWeaveProfile_Common: |
| switch (self.statusCode) |
| { |
| case nl::Weave::Profiles::Common::kStatus_Success : return kNLStatus_Success; |
| case nl::Weave::Profiles::Common::kStatus_BadRequest : return kNLStatus_BadRequest; |
| case nl::Weave::Profiles::Common::kStatus_UnsupportedMessage : return kNLStatus_UnsupportedMessage; |
| case nl::Weave::Profiles::Common::kStatus_UnexpectedMessage : return kNLStatus_UnexpectedMessage; |
| case nl::Weave::Profiles::Common::kStatus_OutOfMemory : return kNLStatus_OutOfMemory; |
| case nl::Weave::Profiles::Common::kStatus_Relocated : return kNLStatus_Relocated; |
| case nl::Weave::Profiles::Common::kStatus_Busy : return kNLStatus_Busy; |
| case nl::Weave::Profiles::Common::kStatus_Timeout : return kNLStatus_Timeout; |
| case nl::Weave::Profiles::Common::kStatus_InternalError : return kNLStatus_InternalError; |
| case nl::Weave::Profiles::Common::kStatus_Continue : return kNLStatus_Continue; |
| default : return self.statusCode; |
| } |
| break; |
| |
| case nl::Weave::Profiles::kWeaveProfile_WDM: |
| switch (self.statusCode) |
| { |
| case DataManagement_Legacy::kStatus_InvalidPath : return kNLStatus_InvalidPath; |
| case DataManagement_Legacy::kStatus_UnknownTopic : return kNLStatus_UnknownTopic; |
| case DataManagement_Legacy::kStatus_IllegalReadRequest : return kNLStatus_IllegalReadRequest; |
| case DataManagement_Legacy::kStatus_IllegalWriteRequest : return kNLStatus_IllegalWriteRequest; |
| default : return self.statusCode; |
| } |
| break; |
| |
| case nl::Weave::Profiles::kWeaveProfile_DeviceControl: |
| switch (self.statusCode) |
| { |
| case DeviceControl::kStatusCode_FailSafeAlreadyActive : return kNLStatusCode_FailSafeAlreadyActive; |
| case DeviceControl::kStatusCode_NoFailSafeActive : return kNLStatusCode_NoFailSafeActive; |
| case DeviceControl::kStatusCode_NoMatchingFailSafeActive : return kNLStatusCode_NoMatchingFailSafeActive; |
| case DeviceControl::kStatusCode_UnsupportedFailSafeMode : return kNLStatusCode_UnsupportedFailSafeMode; |
| default : return self.statusCode; |
| } |
| break; |
| |
| case nl::Weave::Profiles::kWeaveProfile_DeviceDescription: |
| switch (self.statusCode) |
| { |
| default : return self.statusCode; |
| } |
| break; |
| |
| case nl::Weave::Profiles::kWeaveProfile_Echo: |
| switch (self.statusCode) |
| { |
| default : return self.statusCode; |
| } |
| break; |
| |
| case nl::Weave::Profiles::kWeaveProfile_FabricProvisioning: |
| switch (self.statusCode) |
| { |
| case FabricProvisioning::kStatusCode_AlreadyMemberOfFabric : return kNLStatusCode_AlreadyMemberOfFabric; |
| case FabricProvisioning::kStatusCode_NotMemberOfFabric : return kNLStatusCode_NotMemberOfFabric; |
| case FabricProvisioning::kStatusCode_InvalidFabricConfig : return kNLStatusCode_InvalidFabricConfig; |
| default : return self.statusCode; |
| } |
| break; |
| |
| case nl::Weave::Profiles::kWeaveProfile_NetworkProvisioning: |
| switch (self.statusCode) |
| { |
| case NetworkProvisioning::kStatusCode_UnknownNetwork : return kNLStatusCode_UnknownNetwork; |
| case NetworkProvisioning::kStatusCode_TooManyNetworks : return kNLStatusCode_TooManyNetworks; |
| case NetworkProvisioning::kStatusCode_InvalidNetworkConfiguration : return kNLStatusCode_InvalidNetworkConfiguration; |
| case NetworkProvisioning::kStatusCode_UnsupportedNetworkType : return kNLStatusCode_UnsupportedNetworkType; |
| case NetworkProvisioning::kStatusCode_UnsupportedWiFiMode : return kNLStatusCode_UnsupportedWiFiMode; |
| case NetworkProvisioning::kStatusCode_UnsupportedWiFiRole : return kNLStatusCode_UnsupportedWiFiRole; |
| case NetworkProvisioning::kStatusCode_UnsupportedWiFiSecurityType : return kNLStatusCode_UnsupportedWiFiSecurityType; |
| case NetworkProvisioning::kStatusCode_InvalidState : return kNLStatusCode_InvalidState; |
| case NetworkProvisioning::kStatusCode_TestNetworkFailed : return kNLStatusCode_TestNetworkFailed; |
| default : return self.statusCode; |
| } |
| break; |
| |
| case nl::Weave::Profiles::kWeaveProfile_Security: |
| switch (self.statusCode) |
| { |
| case Security::kStatusCode_SessionAborted : return kNLStatusCode_SessionAborted; |
| case Security::kStatusCode_PASESupportsOnlyConfig1 : return kNLStatusCode_PASESupportsOnlyConfig1; |
| case Security::kStatusCode_NoCommonPASEConfigurations : return kNLStatusCode_NoCommonPASEConfigurations; |
| case Security::kStatusCode_UnsupportedEncryptionType : return kNLStatusCode_UnsupportedEncryptionType; |
| case Security::kStatusCode_InvalidKeyId : return kNLStatusCode_InvalidKeyId; |
| case Security::kStatusCode_DuplicateKeyId : return kNLStatusCode_DuplicateKeyId; |
| case Security::kStatusCode_KeyConfirmationFailed : return kNLStatusCode_KeyConfirmationFailed; |
| case Security::kStatusCode_InternalError : return kNLStatusCode_InternalError; |
| default : return self.statusCode; |
| } |
| break; |
| |
| #if WEAVE_CONFIG_ENABLE_SERVICE_DIRECTORY |
| case nl::Weave::Profiles::kWeaveProfile_ServiceDirectory: |
| switch (self.statusCode) |
| { |
| case ServiceDirectory::kStatus_DirectoryUnavailable : return kNLStatus_DirectoryUnavailable; |
| default : return self.statusCode; |
| } |
| break; |
| #endif |
| |
| case nl::Weave::Profiles::kWeaveProfile_ServiceProvisioning: |
| switch (self.statusCode) |
| { |
| case ServiceProvisioning::kStatusCode_TooManyServices : return kNLStatusCode_TooManyServices; |
| case ServiceProvisioning::kStatusCode_ServiceAlreadyRegistered : return kNLStatusCode_ServiceAlreadyRegistered; |
| case ServiceProvisioning::kStatusCode_InvalidServiceConfig : return kNLStatusCode_InvalidServiceConfig; |
| case ServiceProvisioning::kStatusCode_NoSuchService : return kNLStatusCode_NoSuchService; |
| case ServiceProvisioning::kStatusCode_PairingServerError : return kNLStatusCode_PairingServerError; |
| default : return self.statusCode; |
| } |
| break; |
| |
| case nl::Weave::Profiles::kWeaveProfile_SWU: |
| switch (self.statusCode) |
| { |
| case SoftwareUpdate::kStatus_NoUpdateAvailable : return kNLStatus_NoUpdateAvailable; |
| case SoftwareUpdate::kStatus_UpdateFailed : return kNLStatus_UpdateFailed; |
| case SoftwareUpdate::kStatus_InvalidInstructions : return kNLStatus_InvalidInstructions; |
| case SoftwareUpdate::kStatus_DownloadFailed : return kNLStatus_DownloadFailed; |
| case SoftwareUpdate::kStatus_IntegrityCheckFailed : return kNLStatus_IntegrityCheckFailed; |
| case SoftwareUpdate::kStatus_Abort : return kNLStatus_Abort; |
| case SoftwareUpdate::kStatus_Retry : return kNLStatus_Retry; |
| default : return self.statusCode; |
| } |
| break; |
| |
| case nl::Weave::Profiles::kWeaveProfile_StatusReport_Deprecated: |
| switch (self.statusCode) |
| { |
| default : return self.statusCode; |
| } |
| break; |
| |
| default : return self.statusCode; |
| } |
| } |
| |
| - (NSString *)description |
| { |
| NSString *emptyStatusReport = [NSString stringWithFormat:@"No StatusReport available. profileId = %ld, statusCode = %ld, SysErrorCode = %ld", (long)self.profileId, (long)self.statusCode, (long)self.errorCode]; |
| |
| return _statusReport ? ([NSString stringWithFormat:@"%@, SysErrorCode = %ld", _statusReport, (long)self.errorCode]) : emptyStatusReport; |
| } |
| |
| @end |