• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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