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 16 #ifndef OHOS_DM_APP_IMAGE_INFO_H 17 #define OHOS_DM_APP_IMAGE_INFO_H 18 19 #include <cstdint> 20 21 #include "securec.h" 22 23 namespace OHOS { 24 namespace DistributedHardware { 25 class DmAppImageInfo { 26 public: 27 DmAppImageInfo() = default; 28 /** 29 * @tc.name: DmAppImageInfo::DmAppImageInfo 30 * @tc.desc: Dm App Image Info Save Data 31 * @tc.type: FUNC 32 */ DmAppImageInfo(uint8_t * appIcon,int32_t appIconLen,uint8_t * appThumbnail,int32_t appThumbnailLen)33 explicit DmAppImageInfo(uint8_t *appIcon, int32_t appIconLen, uint8_t *appThumbnail, int32_t appThumbnailLen) 34 { 35 SaveData(appIcon, appIconLen, appThumbnail, appThumbnailLen); 36 } 37 /** 38 * @tc.name: DmAppImageInfo::Reset 39 * @tc.desc: Dm App Image Info Reset 40 * @tc.type: FUNC 41 */ Reset(uint8_t * appIcon,int32_t appIconLen,uint8_t * appThumbnail,int32_t appThumbnailLen)42 void Reset(uint8_t *appIcon, int32_t appIconLen, uint8_t *appThumbnail, int32_t appThumbnailLen) 43 { 44 SaveData(appIcon, appIconLen, appThumbnail, appThumbnailLen); 45 } 46 /** 47 * @tc.name: DmAppImageInfo::ResetIcon 48 * @tc.desc: Dm App Image Info ResetIcon 49 * @tc.type: FUNC 50 */ ResetIcon(uint8_t * appIcon,int32_t appIconLen)51 void ResetIcon(uint8_t *appIcon, int32_t appIconLen) 52 { 53 SaveIconData(appIcon, appIconLen); 54 } 55 /** 56 * @tc.name: DmAppImageInfo::InitThumbnail 57 * @tc.desc: Dm App Image Info Init Thumbnail 58 * @tc.type: FUNC 59 */ InitThumbnail(int32_t appThumbnailLen)60 void InitThumbnail(int32_t appThumbnailLen) 61 { 62 if (appThumbnailLen <= 0 || appThumbnailLen > THUMB_MAX_LEN) { 63 appThumbnailLen_ = 0; 64 appThumbnail_ = nullptr; 65 return; 66 } 67 68 appThumbnail_ = new (std::nothrow) uint8_t[appThumbnailLen] { 0 }; 69 if (appThumbnail_ != nullptr) { 70 appThumbnailLen_ = appThumbnailLen; 71 } 72 } 73 /** 74 * @tc.name: DmAppImageInfo::SetThumbnailData 75 * @tc.desc: Dm App Image Info Init Set Data of Thumbnail 76 * @tc.type: FUNC 77 */ SetThumbnailData(uint8_t * srcBuffer,int32_t srcBufferLen,int32_t copyIndex,int32_t copyLen)78 int32_t SetThumbnailData(uint8_t *srcBuffer, int32_t srcBufferLen, int32_t copyIndex, int32_t copyLen) 79 { 80 if (srcBuffer == nullptr || srcBufferLen <= 0 || copyLen > srcBufferLen || copyIndex < 0) { 81 return -1; 82 } 83 84 if ((copyIndex + copyLen) > appThumbnailLen_) { 85 return -1; 86 } 87 88 if (appThumbnail_ == nullptr) { 89 return -1; 90 } 91 92 if (memcpy_s(appThumbnail_ + copyIndex, appThumbnailLen_ - copyIndex, srcBuffer, 93 static_cast<uint32_t>(copyLen)) != 0) { 94 return -1; 95 } 96 97 return 0; 98 } 99 /** 100 * @tc.name: DmAppImageInfo::~DmAppImageInfo 101 * @tc.desc: Dm App Image Info destructor 102 * @tc.type: FUNC 103 */ ~DmAppImageInfo()104 ~DmAppImageInfo() 105 { 106 if (appIcon_ != nullptr) { 107 delete[] appIcon_; 108 appIcon_ = nullptr; 109 } 110 if (appThumbnail_ != nullptr) { 111 delete[] appThumbnail_; 112 appThumbnail_ = nullptr; 113 } 114 } 115 /** 116 * @tc.name: DmAppImageInfo::DmAppImageInfo 117 * @tc.desc: Dm App Image Info Constructor 118 * @tc.type: FUNC 119 */ DmAppImageInfo(const DmAppImageInfo & other)120 DmAppImageInfo(const DmAppImageInfo &other) 121 { 122 if (this != &other) { 123 *this = other; 124 } 125 } 126 127 DmAppImageInfo &operator=(const DmAppImageInfo &other) 128 { 129 if (this != &other) { 130 SaveData(other.GetAppIcon(), other.GetAppIconLen(), other.GetAppThumbnail(), other.GetAppThumbnailLen()); 131 } 132 return *this; 133 } 134 135 DmAppImageInfo(DmAppImageInfo &&) = delete; 136 DmAppImageInfo &operator=(DmAppImageInfo &&) = delete; 137 /** 138 * @tc.name: DmAppImageInfo::GetAppIconLen 139 * @tc.desc: Dm App Image Info Get App Icon Len 140 * @tc.type: FUNC 141 */ GetAppIconLen()142 int32_t GetAppIconLen() const 143 { 144 return appIconLen_; 145 } 146 GetAppIcon()147 const uint8_t *GetAppIcon() const 148 { 149 return appIcon_; 150 } 151 /** 152 * @tc.name: DmAppImageInfo::GetAppThumbnailLen 153 * @tc.desc: Dm App Image Info Get App ThumbnailLen 154 * @tc.type: FUNC 155 */ GetAppThumbnailLen()156 int32_t GetAppThumbnailLen() const 157 { 158 return appThumbnailLen_; 159 } 160 /** 161 * @tc.name: DmAppImageInfo::GetAppThumbnail 162 * @tc.desc: Dm App Image Info Get App Thumbnail 163 * @tc.type: FUNC 164 */ GetAppThumbnail()165 const uint8_t *GetAppThumbnail() const 166 { 167 return appThumbnail_; 168 } 169 170 private: SaveData(const uint8_t * appIcon,int32_t appIconLen,const uint8_t * appThumbnail,int32_t appThumbnailLen)171 void SaveData(const uint8_t *appIcon, int32_t appIconLen, const uint8_t *appThumbnail, int32_t appThumbnailLen) 172 { 173 SaveIconData(appIcon, appIconLen); 174 SaveThumbnailData(appThumbnail, appThumbnailLen); 175 } 176 SaveIconData(const uint8_t * appIcon,int32_t appIconLen)177 void SaveIconData(const uint8_t *appIcon, int32_t appIconLen) 178 { 179 if (appIconLen > 0 && appIconLen < ICON_MAX_LEN && appIcon != nullptr) { 180 if (appIconLen_ < appIconLen) { 181 if (appIcon_ != nullptr && appIconLen_ > 0) { 182 delete[] appIcon_; 183 appIcon_ = nullptr; 184 appIconLen_ = 0; 185 } 186 appIcon_ = new (std::nothrow) uint8_t[appIconLen] { 0 }; 187 } 188 if (appIcon_ != nullptr) { 189 appIconLen_ = appIconLen; 190 if (memcpy_s(appIcon_, static_cast<uint32_t>(appIconLen_), appIcon, appIconLen) != 0) { 191 return; 192 } 193 } 194 } 195 } 196 SaveThumbnailData(const uint8_t * appThumbnail,int32_t appThumbnailLen)197 void SaveThumbnailData(const uint8_t *appThumbnail, int32_t appThumbnailLen) 198 { 199 if (appThumbnailLen > 0 && appThumbnailLen < THUMB_MAX_LEN && appThumbnail != nullptr) { 200 if (appThumbnailLen_ < appThumbnailLen) { 201 if (appThumbnail_ != nullptr && appThumbnailLen_ > 0) { 202 delete[] appThumbnail_; 203 appThumbnail_ = nullptr; 204 appThumbnailLen_ = 0; 205 } 206 appThumbnail_ = new (std::nothrow) uint8_t[appThumbnailLen] { 0 }; 207 } 208 if (appThumbnail_ != nullptr) { 209 appThumbnailLen_ = appThumbnailLen; 210 if (memcpy_s(appThumbnail_, static_cast<uint32_t>(appThumbnailLen_), appThumbnail, 211 appThumbnailLen) != 0) { 212 return; 213 } 214 } 215 } 216 } 217 218 private: 219 int32_t appIconLen_ { 0 }; 220 uint8_t *appIcon_ { nullptr }; 221 int32_t appThumbnailLen_ { 0 }; 222 uint8_t *appThumbnail_ { nullptr }; 223 const int32_t ICON_MAX_LEN = 32 * 1024; 224 const int32_t THUMB_MAX_LEN = 153 * 1024; 225 }; 226 } // namespace DistributedHardware 227 } // namespace OHOS 228 #endif // OHOS_DM_APP_IMAGE_INFO_H 229