blob: 3e38a14288ea39c5b64a64469f8e43693ba3f3a1 [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
* Translation of Weave errors into native Objective C types.
*
*/
#import "NLWeaveError_Protected.h"
#import "NLWeaveDeviceManager.h"
#import "NLWeaveASN1ErrorCodes.h"
#import "NLWeaveInetErrorCodes.h"
#import "NLWeaveErrorCodes.h"
#include <InetLayer/InetError.h>
#include <Weave/Core/WeaveError.h>
#include <Weave/Support/ASN1Error.h>
@implementation NLWeaveError
- (id)initWithWeaveError:(WEAVE_ERROR)weaveError report:(NSString *)report
{
if (self = [super init]) {
_errorCode = (NSInteger) weaveError;
_errorReport = report;
}
return self;
}
- (NSString *)description
{
NSString * emptyErrorReport = [NSString
stringWithFormat:@"No Error information available. errorCode = %ld (0x%lx)", (long) self.errorCode, (long) self.errorCode];
return _errorReport ? ([NSString stringWithFormat:@"%@ - errorCode: %ld", _errorReport, (long) self.errorCode])
: emptyErrorReport;
}
- (NSInteger)translateErrorCode
{
switch (self.errorCode) {
case 0:
return NLWEAVE_NO_ERROR;
// ----- InetLayer Errors -----
case INET_ERROR_WRONG_ADDRESS_TYPE:
return NLINET_ERROR_WRONG_ADDRESS_TYPE;
case INET_ERROR_CONNECTION_ABORTED:
return NLINET_ERROR_CONNECTION_ABORTED;
case INET_ERROR_PEER_DISCONNECTED:
return NLINET_ERROR_PEER_DISCONNECTED;
case INET_ERROR_INCORRECT_STATE:
return NLINET_ERROR_INCORRECT_STATE;
case INET_ERROR_MESSAGE_TOO_LONG:
return NLINET_ERROR_MESSAGE_TOO_LONG;
case INET_ERROR_NO_CONNECTION_HANDLER:
return NLINET_ERROR_NO_CONNECTION_HANDLER;
case INET_ERROR_NO_MEMORY:
return NLINET_ERROR_NO_MEMORY;
case INET_ERROR_OUTBOUND_MESSAGE_TRUNCATED:
return NLINET_ERROR_OUTBOUND_MESSAGE_TRUNCATED;
case INET_ERROR_INBOUND_MESSAGE_TOO_BIG:
return NLINET_ERROR_INBOUND_MESSAGE_TOO_BIG;
case INET_ERROR_HOST_NOT_FOUND:
return NLINET_ERROR_HOST_NOT_FOUND;
case INET_ERROR_DNS_TRY_AGAIN:
return NLINET_ERROR_DNS_TRY_AGAIN;
case INET_ERROR_DNS_NO_RECOVERY:
return NLINET_ERROR_DNS_NO_RECOVERY;
case INET_ERROR_BAD_ARGS:
return NLINET_ERROR_BAD_ARGS;
case INET_ERROR_WRONG_PROTOCOL_TYPE:
return NLINET_ERROR_WRONG_PROTOCOL_TYPE;
case INET_ERROR_UNKNOWN_INTERFACE:
return NLINET_ERROR_UNKNOWN_INTERFACE;
case INET_ERROR_NOT_IMPLEMENTED:
return NLINET_ERROR_NOT_IMPLEMENTED;
case INET_ERROR_ADDRESS_NOT_FOUND:
return NLINET_ERROR_ADDRESS_NOT_FOUND;
case INET_ERROR_HOST_NAME_TOO_LONG:
return NLINET_ERROR_HOST_NAME_TOO_LONG;
case INET_ERROR_INVALID_HOST_NAME:
return NLINET_ERROR_INVALID_HOST_NAME;
// ----- Weave Errors -----
case WEAVE_ERROR_TOO_MANY_CONNECTIONS:
return NLWEAVE_ERROR_TOO_MANY_CONNECTIONS;
case WEAVE_ERROR_SENDING_BLOCKED:
return NLWEAVE_ERROR_SENDING_BLOCKED;
case WEAVE_ERROR_CONNECTION_ABORTED:
return NLWEAVE_ERROR_CONNECTION_ABORTED;
case WEAVE_ERROR_INCORRECT_STATE:
return NLWEAVE_ERROR_INCORRECT_STATE;
case WEAVE_ERROR_MESSAGE_TOO_LONG:
return NLWEAVE_ERROR_MESSAGE_TOO_LONG;
case WEAVE_ERROR_UNSUPPORTED_EXCHANGE_VERSION:
return NLWEAVE_ERROR_UNSUPPORTED_EXCHANGE_VERSION;
case WEAVE_ERROR_TOO_MANY_UNSOLICITED_MESSAGE_HANDLERS:
return NLWEAVE_ERROR_TOO_MANY_UNSOLICITED_MESSAGE_HANDLERS;
case WEAVE_ERROR_NO_UNSOLICITED_MESSAGE_HANDLER:
return NLWEAVE_ERROR_NO_UNSOLICITED_MESSAGE_HANDLER;
case WEAVE_ERROR_NO_CONNECTION_HANDLER:
return NLWEAVE_ERROR_NO_CONNECTION_HANDLER;
case WEAVE_ERROR_TOO_MANY_PEER_NODES:
return NLWEAVE_ERROR_TOO_MANY_PEER_NODES;
case WEAVE_ERROR_NO_MEMORY:
return NLWEAVE_ERROR_NO_MEMORY;
case WEAVE_ERROR_NO_MESSAGE_HANDLER:
return NLWEAVE_ERROR_NO_MESSAGE_HANDLER;
case WEAVE_ERROR_MESSAGE_INCOMPLETE:
return NLWEAVE_ERROR_MESSAGE_INCOMPLETE;
case WEAVE_ERROR_DATA_NOT_ALIGNED:
return NLWEAVE_ERROR_DATA_NOT_ALIGNED;
case WEAVE_ERROR_UNKNOWN_KEY_TYPE:
return NLWEAVE_ERROR_UNKNOWN_KEY_TYPE;
case WEAVE_ERROR_KEY_NOT_FOUND:
return NLWEAVE_ERROR_KEY_NOT_FOUND;
case WEAVE_ERROR_WRONG_ENCRYPTION_TYPE:
return NLWEAVE_ERROR_WRONG_ENCRYPTION_TYPE;
case WEAVE_ERROR_TOO_MANY_KEYS:
return NLWEAVE_ERROR_TOO_MANY_KEYS;
case WEAVE_ERROR_INTEGRITY_CHECK_FAILED:
return NLWEAVE_ERROR_INTEGRITY_CHECK_FAILED;
case WEAVE_ERROR_INVALID_SIGNATURE:
return NLWEAVE_ERROR_INVALID_SIGNATURE;
case WEAVE_ERROR_UNSUPPORTED_MESSAGE_VERSION:
return NLWEAVE_ERROR_UNSUPPORTED_MESSAGE_VERSION;
case WEAVE_ERROR_UNSUPPORTED_ENCRYPTION_TYPE:
return NLWEAVE_ERROR_UNSUPPORTED_ENCRYPTION_TYPE;
case WEAVE_ERROR_UNSUPPORTED_SIGNATURE_TYPE:
return NLWEAVE_ERROR_UNSUPPORTED_SIGNATURE_TYPE;
case WEAVE_ERROR_INVALID_MESSAGE_LENGTH:
return NLWEAVE_ERROR_INVALID_MESSAGE_LENGTH;
case WEAVE_ERROR_BUFFER_TOO_SMALL:
return NLWEAVE_ERROR_BUFFER_TOO_SMALL;
case WEAVE_ERROR_DUPLICATE_KEY_ID:
return NLWEAVE_ERROR_DUPLICATE_KEY_ID;
case WEAVE_ERROR_WRONG_KEY_TYPE:
return NLWEAVE_ERROR_WRONG_KEY_TYPE;
case WEAVE_ERROR_WELL_UNINITIALIZED:
return NLWEAVE_ERROR_WELL_UNINITIALIZED;
case WEAVE_ERROR_WELL_EMPTY:
return NLWEAVE_ERROR_WELL_EMPTY;
case WEAVE_ERROR_INVALID_STRING_LENGTH:
return NLWEAVE_ERROR_INVALID_STRING_LENGTH;
case WEAVE_ERROR_INVALID_LIST_LENGTH:
return NLWEAVE_ERROR_INVALID_LIST_LENGTH;
case WEAVE_ERROR_INVALID_INTEGRITY_TYPE:
return NLWEAVE_ERROR_INVALID_INTEGRITY_TYPE;
case WEAVE_END_OF_TLV:
return NLWEAVE_END_OF_TLV;
case WEAVE_ERROR_TLV_UNDERRUN:
return NLWEAVE_ERROR_TLV_UNDERRUN;
case WEAVE_ERROR_INVALID_TLV_ELEMENT:
return NLWEAVE_ERROR_INVALID_TLV_ELEMENT;
case WEAVE_ERROR_INVALID_TLV_TAG:
return NLWEAVE_ERROR_INVALID_TLV_TAG;
case WEAVE_ERROR_UNKNOWN_IMPLICIT_TLV_TAG:
return NLWEAVE_ERROR_UNKNOWN_IMPLICIT_TLV_TAG;
case WEAVE_ERROR_WRONG_TLV_TYPE:
return NLWEAVE_ERROR_WRONG_TLV_TYPE;
case WEAVE_ERROR_TLV_CONTAINER_OPEN:
return NLWEAVE_ERROR_TLV_CONTAINER_OPEN;
case WEAVE_ERROR_INVALID_TRANSFER_MODE:
return NLWEAVE_ERROR_INVALID_TRANSFER_MODE;
case WEAVE_ERROR_INVALID_PROFILE_ID:
return NLWEAVE_ERROR_INVALID_PROFILE_ID;
case WEAVE_ERROR_INVALID_MESSAGE_TYPE:
return NLWEAVE_ERROR_INVALID_MESSAGE_TYPE;
case WEAVE_ERROR_UNEXPECTED_TLV_ELEMENT:
return NLWEAVE_ERROR_UNEXPECTED_TLV_ELEMENT;
case WEAVE_ERROR_STATUS_REPORT_RECEIVED:
return NLWEAVE_ERROR_STATUS_REPORT_RECEIVED;
case WEAVE_ERROR_NOT_IMPLEMENTED:
return NLWEAVE_ERROR_NOT_IMPLEMENTED;
case WEAVE_ERROR_INVALID_ADDRESS:
return NLWEAVE_ERROR_INVALID_ADDRESS;
case WEAVE_ERROR_INVALID_ARGUMENT:
return NLWEAVE_ERROR_INVALID_ARGUMENT;
case WEAVE_ERROR_INVALID_PATH_LIST:
return NLWEAVE_ERROR_INVALID_PATH_LIST;
case WEAVE_ERROR_INVALID_DATA_LIST:
return NLWEAVE_ERROR_INVALID_DATA_LIST;
case WEAVE_ERROR_TIMEOUT:
return NLWEAVE_ERROR_TIMEOUT;
case WEAVE_ERROR_INVALID_DEVICE_DESCRIPTOR:
return NLWEAVE_ERROR_INVALID_DEVICE_DESCRIPTOR;
case WEAVE_ERROR_UNSUPPORTED_DEVICE_DESCRIPTOR_VERSION:
return NLWEAVE_ERROR_UNSUPPORTED_DEVICE_DESCRIPTOR_VERSION;
case WEAVE_END_OF_INPUT:
return NLWEAVE_END_OF_INPUT;
case WEAVE_ERROR_RATE_LIMIT_EXCEEDED:
return NLWEAVE_ERROR_RATE_LIMIT_EXCEEDED;
case WEAVE_ERROR_SECURITY_MANAGER_BUSY:
return NLWEAVE_ERROR_SECURITY_MANAGER_BUSY;
case WEAVE_ERROR_INVALID_PASE_PARAMETER:
return NLWEAVE_ERROR_INVALID_PASE_PARAMETER;
case WEAVE_ERROR_PASE_SUPPORTS_ONLY_CONFIG1:
return NLWEAVE_ERROR_PASE_SUPPORTS_ONLY_CONFIG1;
case WEAVE_ERROR_NO_COMMON_PASE_CONFIGURATIONS:
return NLWEAVE_ERROR_NO_COMMON_PASE_CONFIGURATIONS;
case WEAVE_ERROR_KEY_CONFIRMATION_FAILED:
return NLWEAVE_ERROR_KEY_CONFIRMATION_FAILED;
case WEAVE_ERROR_INVALID_USE_OF_SESSION_KEY:
return NLWEAVE_ERROR_INVALID_USE_OF_SESSION_KEY;
case WEAVE_ERROR_CONNECTION_CLOSED_UNEXPECTEDLY:
return NLWEAVE_ERROR_CONNECTION_CLOSED_UNEXPECTEDLY;
case WEAVE_ERROR_MISSING_TLV_ELEMENT:
return NLWEAVE_ERROR_MISSING_TLV_ELEMENT;
case WEAVE_ERROR_RANDOM_DATA_UNAVAILABLE:
return NLWEAVE_ERROR_RANDOM_DATA_UNAVAILABLE;
case WEAVE_ERROR_UNSUPPORTED_HOST_PORT_ELEMENT:
return NLWEAVE_ERROR_UNSUPPORTED_HOST_PORT_ELEMENT;
case WEAVE_ERROR_INVALID_HOST_SUFFIX_INDEX:
return NLWEAVE_ERROR_INVALID_HOST_SUFFIX_INDEX;
case WEAVE_ERROR_HOST_PORT_LIST_EMPTY:
return NLWEAVE_ERROR_HOST_PORT_LIST_EMPTY;
case WEAVE_ERROR_UNSUPPORTED_AUTH_MODE:
return NLWEAVE_ERROR_UNSUPPORTED_AUTH_MODE;
case WEAVE_ERROR_INVALID_SERVICE_EP:
return NLWEAVE_ERROR_INVALID_SERVICE_EP;
case WEAVE_ERROR_INVALID_DIRECTORY_ENTRY_TYPE:
return NLWEAVE_ERROR_INVALID_DIRECTORY_ENTRY_TYPE;
case WEAVE_ERROR_FORCED_RESET:
return NLWEAVE_ERROR_FORCED_RESET;
case WEAVE_ERROR_NO_ENDPOINT:
return NLWEAVE_ERROR_NO_ENDPOINT;
case WEAVE_ERROR_INVALID_DESTINATION_NODE_ID:
return NLWEAVE_ERROR_INVALID_DESTINATION_NODE_ID;
case WEAVE_ERROR_NOT_CONNECTED:
return NLWEAVE_ERROR_NOT_CONNECTED;
// ----- ASN1 Errors -----
case ASN1_END:
return NLASN1_END;
case ASN1_ERROR_UNDERRUN:
return NLASN1_ERROR_UNDERRUN;
case ASN1_ERROR_OVERFLOW:
return NLASN1_ERROR_OVERFLOW;
case ASN1_ERROR_INVALID_STATE:
return NLASN1_ERROR_INVALID_STATE;
case ASN1_ERROR_MAX_DEPTH_EXCEEDED:
return NLASN1_ERROR_MAX_DEPTH_EXCEEDED;
case ASN1_ERROR_INVALID_ENCODING:
return NLASN1_ERROR_INVALID_ENCODING;
case ASN1_ERROR_UNSUPPORTED_ENCODING:
return NLASN1_ERROR_UNSUPPORTED_ENCODING;
case ASN1_ERROR_TAG_OVERFLOW:
return NLASN1_ERROR_TAG_OVERFLOW;
case ASN1_ERROR_LENGTH_OVERFLOW:
return NLASN1_ERROR_LENGTH_OVERFLOW;
case ASN1_ERROR_VALUE_OVERFLOW:
return NLASN1_ERROR_VALUE_OVERFLOW;
default:
return self.errorCode;
}
}
@end