blob: 7c94c6e5dc62af88db75b76bafaf9d4942d9df06 [file] [log] [blame]
/*
*
* 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