1 /* 2 * Copyright (C) 2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 #ifndef OHOS_MEDIA_CLOUD_SYNC_ERROR_H 16 #define OHOS_MEDIA_CLOUD_SYNC_ERROR_H 17 18 #include <iostream> 19 #include <vector> 20 21 #define EXPORT __attribute__ ((visibility ("default"))) 22 23 namespace OHOS::Media::CloudSync { 24 enum class MDKLocalErrorCode { 25 NO_ERROR = 0, 26 IPC_CONNECT_FAILED, 27 IPC_SEND_FAILED, 28 DATA_TYPE_ERROR, 29 ACCESS_DENIED, // 没有权限访问记录、数据库等 30 ATOMIC_ERROR, // 原子批处理操作失败 31 AUTHENTICATION_FAILED, // 身份验证失败 32 AUTHENTICATION_REQUIRED, // 没有验证身份,但请求需要身份验证 33 BAD_REQUEST, // 无效的请求 34 CONFLICT, // recordChangeTag值过期 35 EXISTS, // 创建的资源已存在 36 INTERNAL_ERROR, // 内部错误 37 NOT_FOUND, // 资源未找到 38 QUOTA_EXCEEDED, // 如果访问公共数据库,您超出了应用程序的配额。访问私有数据库时,超出用户的iCloud配额 39 SIGN_IN_FAILED, // 用户登录失败 40 THROTTLED, // 请求被停止了,稍后重试 41 TRY_AGAIN_LATER, // 内部错误,稍后重试 42 VALIDATING_REFERENCE_ERROR, // 请求违反了验证引用约束 43 UNIQUE_FIELD_ERROR, // 服务器拒绝请求,因为与唯一字段有冲突 44 ZONE_NOT_FOUND, // 没有找到请求中指定的区域 45 UNKNOWN_ERROR, // 发生未知错误 46 NETWORK_ERROR, // 网络错误,比如连接超时 47 SERVICE_UNAVAILABLE, // 无法联系到DriveKit服务。 48 INVALID_ARGUMENTS, // 无效的参数 49 UNEXPECTED_SERVER_RESPONSE, // DriveKit解析不了服务器返回的信息 50 CONFIGURATION_ERROR, // DriveKit配置错误,比如没有配置容器 51 SHARE_UI_TIMEOUT, // 共享界面加载失败超时 52 BAD_ALLOC_MEMORY, // 申请内存失败 53 LOCAL_SPACE_FULL, // 本地空间不足 54 TASK_CANCEL_FAIL, // 取消任务失败 55 TASK_CANCEL, // 任务取消 56 DECRYPT_FAIL, // 解密失败 57 OPEN_FILE_FAIL, // 打开文件失败 58 DELETE_FILE_FAIL, // 删除文件失败 59 INIT_DECRYPT_FAIL, // 初始化解密失败 60 DOWNLOAD_REQUEST_ERROR, // 网络请求失败 61 GET_DECRYPTKEY_FAIL, // 获取密钥失败 62 GET_ASSET_FAIL, // 获取资产信息失败 63 CREAT_TEMP_FILE_FAIL, // 创建下载所需临时文件失败 64 ADD_SLICE_TASK_FAIL, // 添加分片任务失败 65 SYNC_SWITCH_OFF, // 云空间同步开关关闭状态 66 DOWNLOAD_PATH_ERROR, // 资产下载路径错误 67 PREAD_MULTI_SLICE_NO_SUPPORT, // 多分片暂不支持PREAD接口 68 RENAME_TEMPFILE_FAIL, // 重命名临时文件失败 69 SLICE_NOT_DOWN_ALL, // 分片未全部下载完毕 70 RETRY_TASK_DOWNLOAD_FAIL, // 重试失败 71 CREAT_ZERO_FILE_FAIL, // 创建0字节文件失败 72 MEMCPYS_FAIL_READBUFF_ERROR, // ReadFileStreamVec执行memcpy_s时返回非0 入参异常 请重试 73 ASSETVEC_PARA_REPETE, // 参数数组有重复项 74 CHECK_VALIDITY_FAIL, // 校验有效性失败 75 POWER_DENIED, // 电量管控,拒绝访问 76 MERGE_FILE_FAIL, // 文件合并失败 77 }; 78 79 enum class MDKErrorType { 80 TYPE_UNKNOWN = 0, 81 TYPE_NOT_NEED_RETRY, // 不需要重试的错误类型 82 TYPE_NEED_UPLOAD, // 需要重新上传 83 TYPE_MAX, 84 }; 85 86 struct MDKErrorDetail { 87 std::string domain; // 描述:[域]; 88 std::string reason; // 描述:[错误原因]; 89 std::string errorCode; // 描述:[系统内部错误编码, 参见错误码规范],26004977、31004913等; 90 std::string description; // 描述:[错误描述信息]; 91 std::string errorPos; // 描述:[错误位置类型]; 92 std::string errorParam; // 描述:[错误位置]; 93 int detailCode; // 描述:[错误编码, 参见DKDetailErrorCode]; 94 }; 95 96 class EXPORT MDKError { 97 public: 98 // 是否有错误 HasError()99 bool HasError() const 100 { 101 return isLocalError || isServerError; 102 } GetErrorType()103 MDKErrorType GetErrorType() const 104 { 105 return errorType; 106 } 107 108 public: SetLocalError(MDKLocalErrorCode code)109 void SetLocalError(MDKLocalErrorCode code) 110 { 111 if (code == MDKLocalErrorCode::NO_ERROR) { 112 isLocalError = false; 113 } else { 114 isLocalError = true; 115 } 116 dkErrorCode = code; 117 } SetServerError(int code)118 void SetServerError(int code) 119 { 120 isServerError = true; 121 serverErrorCode = code; 122 } 123 124 public: 125 bool isLocalError = false; // 是否为本地错误 126 MDKLocalErrorCode dkErrorCode; // 本地错误码 127 bool isServerError = false; // 是否为服务端错误 128 int serverErrorCode; // 服务端错误码 129 std::string reason; // DkErrorCode或者serverErrorCode的描述 130 std::vector<MDKErrorDetail> errorDetails; // 错误具体信息 遗留待定 131 int retryAfter; // 再次尝试此操作之前的建议等待时间 132 MDKErrorType errorType = MDKErrorType::TYPE_UNKNOWN; // 错误类型 133 }; 134 } // namespace OHOS::Media::CloudSync 135 #endif