1 /*
2 * Copyright (C) 2022 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 #include "mtp_error_utils.h"
16 #include <map>
17
18 #include "medialibrary_errno.h"
19 #include "media_log.h"
20 #include "media_mtp_utils.h"
21 #include "mtp_constants.h"
22
23 using namespace std;
24 namespace OHOS {
25 namespace Media {
SolveGetHandlesError(const int32_t mediaError)26 int32_t MtpErrorUtils::SolveGetHandlesError(const int32_t mediaError)
27 {
28 static const std::map<int32_t, int32_t> getHandlesError = {
29 { E_SUCCESS, MTP_SUCCESS },
30 { E_HAS_DB_ERROR, MTP_ERROR_STORE_NOT_AVAILABLE },
31 { E_NO_SUCH_FILE, MTP_ERROR_INVALID_OBJECTHANDLE },
32 };
33 return getHandlesError.at(mediaError);
34 }
35
SolveGetObjectInfoError(const int32_t mediaError)36 int32_t MtpErrorUtils::SolveGetObjectInfoError(const int32_t mediaError)
37 {
38 static const std::map<int32_t, int32_t> getObjectInfoError = {
39 { E_SUCCESS, MTP_SUCCESS },
40 { E_HAS_DB_ERROR, MTP_ERROR_STORE_NOT_AVAILABLE },
41 { E_NO_SUCH_FILE, MTP_ERROR_INVALID_OBJECTHANDLE },
42 };
43 return getObjectInfoError.at(mediaError);
44 }
45
SolveGetFdError(const int32_t mediaError)46 int32_t MtpErrorUtils::SolveGetFdError(const int32_t mediaError)
47 {
48 static const std::map<int32_t, int32_t> getFdInfoError = {
49 { E_SUCCESS, MTP_SUCCESS },
50 { E_HAS_DB_ERROR, MTP_ERROR_STORE_NOT_AVAILABLE },
51 { E_HAS_FS_ERROR, MTP_ERROR_INVALID_OBJECTHANDLE },
52 };
53 return getFdInfoError.at(mediaError);
54 }
55
SolveSendObjectInfoError(const int32_t mediaError)56 int32_t MtpErrorUtils::SolveSendObjectInfoError(const int32_t mediaError)
57 {
58 static const std::map<int32_t, int32_t> sendObjectInfoError = {
59 { E_SUCCESS, MTP_SUCCESS },
60 { E_HAS_DB_ERROR, MTP_ERROR_STORE_NOT_AVAILABLE },
61 { E_NO_SUCH_FILE, MTP_ERROR_INVALID_PARENTOBJECT },
62 };
63 map<int32_t, int32_t>::const_iterator iterator = sendObjectInfoError.find(mediaError);
64 if (iterator != sendObjectInfoError.end()) {
65 return sendObjectInfoError.at(mediaError);
66 } else {
67 return MTP_ERROR_INVALID_OBJECTHANDLE;
68 }
69 }
70
SolveMoveObjectError(const int32_t mediaError)71 int32_t MtpErrorUtils::SolveMoveObjectError(const int32_t mediaError)
72 {
73 static const std::map<int32_t, int32_t> moveObjectError = {
74 { E_SUCCESS, MTP_SUCCESS },
75 { E_HAS_DB_ERROR, MTP_ERROR_STORE_NOT_AVAILABLE },
76 { E_NO_SUCH_FILE, MTP_ERROR_INVALID_OBJECTHANDLE },
77 { E_INVALID_FILEID, MTP_ERROR_INVALID_OBJECTHANDLE },
78 { E_INVALID_PATH, MTP_ERROR_INVALID_OBJECTHANDLE },
79 { E_MODIFY_DATA_FAIL, MTP_ERROR_INVALID_OBJECTHANDLE },
80 { E_FAIL, MTP_ERROR_PARAMETER_NOT_SUPPORTED },
81 { E_FILE_EXIST, MTP_ERROR_PARAMETER_NOT_SUPPORTED },
82 { E_FILE_OPER_FAIL, MTP_ERROR_STORE_NOT_AVAILABLE },
83 };
84 map<int32_t, int32_t>::const_iterator iterator = moveObjectError.find(mediaError);
85 if (iterator != moveObjectError.end()) {
86 return moveObjectError.at(mediaError);
87 } else {
88 return MTP_ERROR_INVALID_OBJECTHANDLE;
89 }
90 }
91
SolveCopyObjectError(const int32_t mediaError)92 int32_t MtpErrorUtils::SolveCopyObjectError(const int32_t mediaError)
93 {
94 static const std::map<int32_t, int32_t> copyObjectError = {
95 { E_SUCCESS, MTP_SUCCESS },
96 { E_HAS_DB_ERROR, MTP_ERROR_INVALID_OBJECTHANDLE },
97 { E_NO_SUCH_FILE, MTP_ERROR_INVALID_OBJECTHANDLE },
98 { E_INVALID_FILEID, MTP_ERROR_INVALID_OBJECTHANDLE },
99 { E_INVALID_PATH, MTP_ERROR_INVALID_OBJECTHANDLE },
100 { E_FAIL, MTP_ERROR_PARAMETER_NOT_SUPPORTED },
101 { E_FILE_EXIST, MTP_ERROR_PARAMETER_NOT_SUPPORTED },
102 { E_VIOLATION_PARAMETERS, MTP_ERROR_PARAMETER_NOT_SUPPORTED },
103 { E_DELETE_DIR_FAIL, MTP_ERROR_INVALID_OBJECTHANDLE },
104 };
105 map<int32_t, int32_t>::const_iterator iterator = copyObjectError.find(mediaError);
106 if (iterator != copyObjectError.end()) {
107 return copyObjectError.at(mediaError);
108 } else {
109 return MTP_ERROR_INVALID_OBJECTHANDLE;
110 }
111 }
112
SolveDeleteObjectError(const int32_t mediaError)113 int32_t MtpErrorUtils::SolveDeleteObjectError(const int32_t mediaError)
114 {
115 static const std::map<int32_t, int32_t> deleteObjectError = {
116 { E_SUCCESS, MTP_SUCCESS },
117 { E_HAS_DB_ERROR, MTP_ERROR_INVALID_OBJECTHANDLE },
118 { E_FAIL, MTP_ERROR_PARAMETER_NOT_SUPPORTED },
119 { E_NO_SUCH_FILE, MTP_ERROR_INVALID_OBJECTHANDLE },
120 { E_VIOLATION_PARAMETERS, MTP_ERROR_PARAMETER_NOT_SUPPORTED },
121 };
122 map<int32_t, int32_t>::const_iterator iterator = deleteObjectError.find(mediaError);
123 if (iterator != deleteObjectError.end()) {
124 return deleteObjectError.at(mediaError);
125 } else {
126 return MTP_ERROR_INVALID_OBJECTHANDLE;
127 }
128 }
129
SolveObjectPropValueError(const int32_t mediaError)130 int32_t MtpErrorUtils::SolveObjectPropValueError(const int32_t mediaError)
131 {
132 static const std::map<int32_t, int32_t> objectPropValueError = {
133 { E_SUCCESS, MTP_SUCCESS },
134 { E_HAS_DB_ERROR, MTP_ERROR_INVALID_OBJECTPROP_FORMAT },
135 { E_NO_SUCH_FILE, MTP_ERROR_INVALID_OBJECTPROPCODE },
136 { E_INVALID_FILEID, MTP_ERROR_INVALID_OBJECTPROP_VALUE },
137 { E_INVALID_PATH, MTP_ERROR_INVALID_OBJECTPROP_VALUE },
138 { E_MODIFY_DATA_FAIL, MTP_ERROR_INVALID_OBJECTPROPCODE },
139 { E_FAIL, MTP_ERROR_INVALID_OBJECTPROPCODE },
140 { E_FILE_EXIST, MTP_ERROR_INVALID_OBJECTPROPCODE },
141 { E_FILE_OPER_FAIL, MTP_ERROR_INVALID_OBJECTPROPCODE },
142 };
143 map<int32_t, int32_t>::const_iterator iterator = objectPropValueError.find(mediaError);
144 if (iterator != objectPropValueError.end()) {
145 return objectPropValueError.at(mediaError);
146 } else {
147 return MTP_ERROR_INVALID_OBJECTPROPCODE;
148 }
149 }
150
SolveCloseFdError(const int32_t mediaError)151 int32_t MtpErrorUtils::SolveCloseFdError(const int32_t mediaError)
152 {
153 static const std::map<int32_t, int32_t> CloseFdError = {
154 { E_SUCCESS, MTP_SUCCESS },
155 { E_HAS_DB_ERROR, MTP_ERROR_STORE_NOT_AVAILABLE },
156 { E_INVALID_FILEID, MTP_ERROR_INVALID_OBJECTHANDLE },
157 };
158 map<int32_t, int32_t>::const_iterator iterator = CloseFdError.find(mediaError);
159 if (iterator != CloseFdError.end()) {
160 return CloseFdError.at(mediaError);
161 } else {
162 return MTP_ERROR_INVALID_OBJECTHANDLE;
163 }
164 }
165 } // namespace Media
166 } // namespace OHOS