| /* |
| * |
| * 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 |