1 /* 2 * Copyright (c) 2023 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 16 #ifndef DRIVE_KIT_ERROR_H 17 #define DRIVE_KIT_ERROR_H 18 19 #include <iostream> 20 #include <vector> 21 namespace Json { 22 class Value; 23 } 24 25 namespace DriveKit { 26 enum class DKLocalErrorCode { 27 NO_ERROR = 0, 28 IPC_CONNECT_FAILED, 29 IPC_SEND_FAILED, 30 DATA_TYPE_ERROR, 31 ACCESS_DENIED, 32 ATOMIC_ERROR, 33 AUTHENTICATION_FAILED, 34 AUTHENTICATION_REQUIRED, 35 BAD_REQUEST, 36 CONFLICT, 37 EXISTS, 38 INTERNAL_ERROR, 39 NOT_FOUND, 40 QUOTA_EXCEEDED, 41 SIGN_IN_FAILED, 42 THROTTLED, 43 TRY_AGAIN_LATER, 44 VALIDATING_REFERENCE_ERROR, 45 UNIQUE_FIELD_ERROR, 46 ZONE_NOT_FOUND, 47 UNKNOWN_ERROR, 48 NETWORK_ERROR, 49 SERVICE_UNAVAILABLE, 50 INVALID_ARGUMENTS, 51 UNEXPECTED_SERVER_RESPONSE, 52 CONFIGURATION_ERROR, 53 SHARE_UI_TIMEOUT, 54 BAD_ALLOC_MEMORY, 55 LOCAL_SPACE_FULL, // 本地空间不足 56 TASK_CANCEL_FAIL, 57 TASK_CANCEL, 58 DECRYPT_FAIL, 59 OPEN_FILE_FAIL, 60 INIT_DECRYPT_FAIL, 61 DOWNLOAD_REQUEST_ERROR, 62 GET_DECRYPT_FAIL, 63 GET_ASSET_FAIL, 64 CREAT_TEMP_FILE_FAIL, 65 ADD_SLICE_TASK_FAIL, 66 SYNC_SWITCH_OFF, 67 DOWNLOAD_PATH_ERROR, 68 PREAD_MULTI_SLICE_NO_SUPPORT, 69 RENAME_TEMPFILE_FAIL, 70 SLTCE_NOT_DOWN_ALL, 71 }; 72 73 enum class DKServerErrorCode { 74 ACCESS_DENIED = 403, 75 ATOMIC_ERROR = 400, 76 AUTHENTICATION_FAILED = 401, 77 AUTHENTICATION_REQUIRED = 421, 78 BAD_REQUEST = 400, 79 CONFLICT = 409, 80 EXISTS = 409, 81 INTERNAL_ERROR = 500, 82 NOT_FOUND = 404, 83 QUOTA_EXCEEDED = 413, 84 THROTTLED = 429, 85 TRY_AGAIN_LATER = 503, 86 VALIDATING_REFERENCE_ERROR = 412, 87 ZONE_NOT_FOUND = 404, 88 UID_EMPTY = 1003, // 云空间未登录, userid为空 89 RESPONSE_EMPTY = 1004, // 服务器端返回为空 90 RESPONSE_NOT_OK = 1005, // 服务端返回结果错误 91 NO_NETWORK = 1006, // 云空间没有网络 92 GRS_NULL = 1007, // grs为空 93 NETWORK_ERROR = 1008, // 云空间网络异常 94 ERROR_PARAM = 1009, // 参数错误 95 GET_AT_FAIL = 1010, // 获取AT失效 96 ASSET_NOT_EXIST = 1011, // Asset不存在 97 DELETE_ASSET_FAIL = 1012, // 删除Asset失败 98 SWITCH_OFF = 1013, // 同步开关关闭 99 }; 100 101 enum class DKDetailErrorCode { 102 LACK_OF_PARAM = 4001, //缺少入参 103 PARAM_INVALID = 4002, //参数校验失败 104 PARAM_VALUE_NOT_SUPPORT = 4003, //参数不支持 105 PARAM_EXPIRED = 4004, //入参已失效 106 SITE_NOT_FOUND = 4005, //站点信息未知 107 NON_SUPPORT_CHARACTER_INCLUDED = 4006, //包含有不支持的字符 108 ILLEGAL_CHARACTER_INCLUDED = 4007, //包含有非法的字符 109 PARAMETER_LENGTH_BEYOND_LIMIT = 4008, //参数长度超过限制 110 PARENTFOLDER_NOT_FOUND = 4009, //父目录不在 111 TOKEN_CFG_INVALID = 4010, //token配置项无效 112 USER_NOT_AUTHORIZED = 4011, //用户没有授权 113 APP_NOT_AUTHORIZED = 4012, //App没有授权 114 TICKET_INVALID = 4013, //ticket无效 115 GRANT_CANCEL = 4014, //取消授权 116 LOGIN_FAILED = 4015, //登录失败 117 SESSION_TIMEOUT = 4016, //会话过期 118 FORCE_RELOGIN = 4017, //强制重新登录账号 119 FLOW_ID_NOT_MATCH = 4020, //越权 120 DATA_MIGRATING = 4031, //数据割接未完成 121 SERVICE_NOT_SUPPORT = 4032, //服务未开放 122 AGREEMENT_NOT_SIGNED = 4033, //协议未签署 123 CROSS_SITE_NOT_SUPPORT = 4034, //跨站点功能限制 124 INSUFFICIENT_SCOPE = 4035, //Scope校验失败 125 INSUFFICIENT_PERMISSION = 4036, //无此操作权限 126 OPERATION_NOT_COMPLETE = 4037, //由于错误无法完成操作 127 OUTER_SERVICE_ERROR = 4038, //外部服务错误且无法恢复 128 SPACE_FULL = 4039, //用户空间不足 129 CONTENT_NOT_FIND = 4041, //内容未发现 130 CONTENT_UNAVAILABLE = 4042, //内容解析失败 131 CHANNEL_NOT_FOUND = 4043, //订阅未发现 132 THUMBNAIL_NOT_FOUND = 4044, //缩略图不存在 133 SHARE_LINK_NOT_FOUND = 4045, //分享链接不存在 134 TEMP_DATA_INVALID = 4046, //临时数据无效 135 FILE_NOT_FOUND = 4047, //实体数据不存在 136 APP_NOT_EXISTS = 4048, //APP不存在 137 CATEGORY_NOT_EXISTS = 4049, //分类不存在 138 SHARE_CONTENT_NOT_EXISTS = 4050, //分享内容不存在 139 THUMBNAIL_GENERATE_FAILED = 4051, //缩略图生成失败 140 VERSION_CONFLICT = 4090, //版本冲突 141 LOCK_FAILED = 4091, //获取锁失败 142 SILENCE_USER_FAILED = 4092, //沉默用户拒绝失败 143 FILE_USING_FORBIDDEN_OP = 4093, //文件正在使用禁止操作 144 CURSOR_EXPIRED = 4100, //游标过期 145 TEMP_DATA_CLEARD = 4101, //临时数据已经被清理 146 CLOUD_DATA_UPDATED = 4121, //云端数据已被更新 147 USER_REQUEST_TOO_MANY = 4291, //用户请求太频繁 148 APP_REQUEST_TOO_MANY = 4292, //应用请求太频繁 149 FLOW_CONTROL = 4293, //用户请求流控 150 USER_REQUEST_ERROR_TOO_MANY = 4294, //用户请求错误次数超过限制 151 PARTIAL_FILE_NOT_SUPPORT_SHARE = 4905, //部分文件不支持分享 152 PARENTFOLDER_TRASHED = 4906, //父目录被删除到回收站 153 ACCOUNT_NAME_WRONG = 4907, //用户账号错误 154 CIPHER_INVALID = 4908, //用户秘钥已经失效 155 DUPLICATED_ID = 4909, //id已存在 156 VUDID_IMEI_INVALID = 4910, //VUDID转换IMEI失败 157 FILE_NOT_SUPPORT_SHARE = 4911, //所有文件不支持分享 158 EXTERNAL_LINK_NOT_AUTHORIZED = 4912, //外部链接没有授权 159 ORIGINAL_NOT_EXSIT = 4913, //源文件不存在 160 ABNORMAL_DOWNLOAD = 4931, //用户异常下载 161 SAME_FILENAME_NOT_ALLOWED = 4932, //禁止重复文件名 162 CANNOT_USE_SERVICE = 4933, //无法为此用户提供服务 163 FILES_NUM_BEYOND_LIMIT = 4934, //下载文件数超过限制 164 FILES_SIZE_BEYOND_LIMIT = 4935, //下载文件大小超过限制 165 TIER_BEYOND_LIMIT = 4936, //层级超过限制 166 HISTORYVERSIONS_BEYOND_LIMIT = 4937, //历史版本数超过限制 167 COPY_FORBIDDEN = 4938, //此文件禁止拷贝 168 USER_SUSPEND_SERVICE = 4939, //用户停用服务 169 FILE_VERSION_CONFLICT = 4940, //文件版本冲突 170 REAL_NAME_AUTHENTICATION_FAILED = 4941, //实名认证失败 171 SHARE_LINK_EXPIRED = 4942, //分享链接已过期 172 RECEIVER_BEYOND_LIMIT = 4943, //分享人数达到限制 173 CONTENT_SHARE_NOT_ALLOWED = 4944, //内容禁止分享 174 DATA_NUMBER_BEYOND_LIMIT = 4945, //云端数据超过限制 175 FORBIDDEN_USER = 4946, //禁止用户操作 176 PARAM_CAN_NOT_UPDATE = 4947, //参数禁止更新 177 HORIZONTAL_PRIVILEGE_ESCALATION = 4948, //存在横向越权 178 OPERATION_FORBIDDEN_IN_RECYCLE = 4949, //禁止在回收站进行此操作 179 FILENAME_LENGTH_BEYOND_LIMIT = 4950, //文件名超过上限 180 OPERATION_FORBIDDEN_DELETE_BACKUP_EXIST = 4951, //禁止删除操作,存在clearTime内的备份记录 181 TEMP_KEY_EXPIRED = 4952, //临时秘钥已过期 182 USER_SHARE_NOT_ALLOWED = 4953, //用户被封禁,禁止分享 183 USER_SHARE_PRIVILEGE_LIMITED = 4954, //用户没有权益 184 CONTENT_COPYRIGHT_LIMIT = 4955, //版权文件禁止下载 185 RISK_MANAGE_FAILED = 4956, //风控失败 186 TASK_RUNNING = 4959, //任务正在执行 187 SERVER_VERSION_UNAVAILABLE = 4960, //服务版本号不可用 188 APP_STATUS_ABNORMAL = 4961, //APP状态不正常 189 CATEGORY_STATUS_ABNORMAL = 4962, //分类状态不正常 190 CATEGORY_APP_ASSOCIATIONS_EXISTS = 4963, //存在应用和分类关系 191 FUNCTION_NOT_SUPPORT = 4964, //功能暂不支持 192 MEMBER_KINSHIP_EXISTS = 4965, //成员关系已存在 193 MEMBER_NUMBER_LIMIT = 4966, //成员人数已达上限 194 USER_IS_JOINED = 4967, //用户已经加入群组 195 USER_BE_FROZEN = 4968, //用户被冻结 196 INVITER_LINK_EXPIRED = 4969, //邀请码或链接已过期 197 RISK_SCANNING = 4970, //分享内容审核中禁止访问 198 ALBUM_APPLICATION_NUMBER_LIMIT = 4971, //共享相册申请加入次数超过上限 199 INVITE_CODE_ERROR = 4972, //邀请码错误 200 INVITER_LINK_USED = 4973, //邀请码或链接已使用过 201 APPLICANT_IS_EXIST = 4974, //记录已存在 202 APPLICANT_NOT_FOUND = 4975, //记录不存在 203 APPLICANT_IS_EXPIRED = 4976, //记录已失效 204 DATA_CLEARED_FORBIDDEN = 4977, //云侧数据清理禁止访问 205 APPEAL_ACCOUNT_FORBIDDEN = 4978, //人工封禁不支持申诉 206 APPLICANT_IS_PROCESSED = 4979, //申请已经处理过 207 RESOURCE_NOT_MATCH = 4980, //备份记录资源归属不匹配 208 RISKFILE_FORBIDDEN_DOWN = 4981, //文件违规下载 209 CONTENT_IS_EXPIRED = 4982, //内容已过期 210 BATCH_IS_EXPIRED = 4983, //批次失效 211 USER_NOT_REALNAME = 4984, //用户未实名认证 212 SERVER_IS_BUSY = 5001, //服务器资源不够 213 OUTER_SERVICE_UNAVAILABLE = 5002, //外部服务不可用 214 OUTER_SERVICE_BUSY = 5003, //外部服务忙 215 DATABASE_UNAVAILABLE = 5004, //数据库操作失败 216 RESOURCE_LOCKED = 5005, //资源被锁住,暂时禁止操作 217 SERVER_TEMP_ERROR = 5006, //服务器临时错误 218 SERVER_UPDATING = 5007, //服务器升级中 219 RESOURCE_TRASHING = 5008, //资源GC中,暂时禁止操作 220 SERVICE_UNAVAILABLE = 5030, //服务不可用 221 NSP_FLOW_CONTROL = 5031, //NSP_FLOW_CONTROL 222 TEMP_ERROR_RETRY = 5040, //触发端侧重试错误码 223 }; 224 225 struct DKErrorDetail { 226 std::string domain; 227 std::string reason; 228 std::string errorCode; 229 std::string description; 230 std::string errorPos; 231 std::string errorParam; 232 int detailCode; 233 }; 234 235 enum class DKErrorType { 236 TYPE_UNKNOWN = 0, 237 TYPE_NOT_NEED_RETRY, 238 TYPE_MAX, 239 }; 240 241 class DKError { 242 public: 243 bool HasError() const; 244 DKErrorType GetErrorType() const; 245 void SetLocalError(DKLocalErrorCode code); 246 void SetServerError(int code); 247 void ParseErrorFromJson(const Json::Value &jvError); 248 249 bool isLocalError = false; 250 DKLocalErrorCode dkErrorCode; 251 bool isServerError = false; 252 int serverErrorCode; 253 std::string reason; 254 std::vector<DKErrorDetail> errorDetails; 255 int retryAfter; 256 DKErrorType errorType = DKErrorType::TYPE_UNKNOWN; 257 }; 258 } // namespace DriveKit 259 #endif 260