1 /* 2 * Copyright (c) 2025 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 SECURITY_EVENT_CONFIG_H 17 #define SECURITY_EVENT_CONFIG_H 18 19 #include <string> 20 #include <vector> 21 #include "parcel.h" 22 #include "security_event_info.h" 23 24 namespace OHOS::Security::SecurityGuard { 25 class SecurityEventConfig : public Parcelable { 26 public: 27 SecurityEventConfig() = default; SecurityEventConfig(const EventCfg & config)28 SecurityEventConfig(const EventCfg &config) : config_(config){}; 29 ~SecurityEventConfig() override = default; 30 GetEventConfig()31 EventCfg GetEventConfig() const 32 { 33 return config_; 34 }; 35 WriteInt64ToParcel(Parcel & parcel,int64_t value)36 bool WriteInt64ToParcel(Parcel &parcel, int64_t value) const 37 { 38 return parcel.WriteInt64(value); 39 } 40 WriteUint32ToParcel(Parcel & parcel,uint32_t value)41 bool WriteUint32ToParcel(Parcel &parcel, uint32_t value) const 42 { 43 return parcel.WriteUint32(value); 44 } 45 WriteInt32ToParcel(Parcel & parcel,int32_t value)46 bool WriteInt32ToParcel(Parcel &parcel, int32_t value) const 47 { 48 return parcel.WriteInt32(value); 49 } 50 WriteStringToParcel(Parcel & parcel,const std::string & value)51 bool WriteStringToParcel(Parcel &parcel, const std::string &value) const 52 { 53 return parcel.WriteString(value); 54 } 55 WriteStringArrayToParcel(Parcel & parcel,const std::vector<std::string> & array)56 bool WriteStringArrayToParcel(Parcel &parcel, const std::vector<std::string> &array) const 57 { 58 uint32_t size = array.size(); 59 if (!WriteUint32ToParcel(parcel, size)) { 60 return false; 61 } 62 for (const auto &str : array) { 63 if (!WriteStringToParcel(parcel, str)) { 64 return false; 65 } 66 } 67 return true; 68 } 69 ReadInt64FromParcel(Parcel & parcel,int64_t & value)70 bool ReadInt64FromParcel(Parcel &parcel, int64_t &value) const 71 { 72 return parcel.ReadInt64(value); 73 } 74 ReadUint32FromParcel(Parcel & parcel,uint32_t & value)75 bool ReadUint32FromParcel(Parcel &parcel, uint32_t &value) const 76 { 77 return parcel.ReadUint32(value); 78 } 79 ReadInt32FromParcel(Parcel & parcel,int32_t & value)80 bool ReadInt32FromParcel(Parcel &parcel, int32_t &value) const 81 { 82 return parcel.ReadInt32(value); 83 } 84 ReadStringFromParcel(Parcel & parcel,std::string & value)85 bool ReadStringFromParcel(Parcel &parcel, std::string &value) const 86 { 87 return parcel.ReadString(value); 88 } 89 ReadStringArrayFromParcel(Parcel & parcel,std::vector<std::string> & array)90 bool ReadStringArrayFromParcel(Parcel &parcel, std::vector<std::string> &array) const 91 { 92 uint32_t size = 0; 93 if (!ReadUint32FromParcel(parcel, size)) { 94 return false; 95 } 96 for (uint32_t i = 0; i < size; i++) { 97 std::string str; 98 if (!ReadStringFromParcel(parcel, str)) { 99 return false; 100 } 101 array.push_back(str); 102 } 103 return true; 104 } 105 Marshalling(Parcel & parcel)106 bool Marshalling(Parcel &parcel) const override 107 { 108 return WriteInt64ToParcel(parcel, config_.eventId) && 109 WriteStringToParcel(parcel, config_.eventName) && 110 WriteUint32ToParcel(parcel, config_.version) && 111 WriteUint32ToParcel(parcel, config_.eventType) && 112 WriteUint32ToParcel(parcel, config_.collectOnStart) && 113 WriteUint32ToParcel(parcel, config_.dataSensitivityLevel) && 114 WriteUint32ToParcel(parcel, config_.discardEventWhiteList) && 115 WriteUint32ToParcel(parcel, config_.storageRamNums) && 116 WriteInt32ToParcel(parcel, config_.storageRomNums) && 117 WriteUint32ToParcel(parcel, config_.storageTime) && 118 WriteStringArrayToParcel(parcel, config_.owner) && 119 WriteUint32ToParcel(parcel, config_.source) && 120 WriteStringToParcel(parcel, config_.dbTable) && 121 WriteStringToParcel(parcel, config_.prog) && 122 WriteUint32ToParcel(parcel, config_.isBatchUpload); 123 } 124 ReadFromParcel(Parcel & parcel)125 bool ReadFromParcel(Parcel &parcel) 126 { 127 return ReadInt64FromParcel(parcel, config_.eventId) && 128 ReadStringFromParcel(parcel, config_.eventName) && 129 ReadUint32FromParcel(parcel, config_.version) && 130 ReadUint32FromParcel(parcel, config_.eventType) && 131 ReadUint32FromParcel(parcel, config_.collectOnStart) && 132 ReadUint32FromParcel(parcel, config_.dataSensitivityLevel) && 133 ReadUint32FromParcel(parcel, config_.discardEventWhiteList) && 134 ReadUint32FromParcel(parcel, config_.storageRamNums) && 135 ReadUint32FromParcel(parcel, config_.storageRomNums) && 136 ReadInt32FromParcel(parcel, config_.storageTime) && 137 ReadStringArrayFromParcel(parcel, config_.owner) && 138 ReadUint32FromParcel(parcel, config_.source) && 139 ReadStringFromParcel(parcel, config_.dbTable) && 140 ReadStringFromParcel(parcel, config_.prog) && 141 ReadUint32FromParcel(parcel, config_.isBatchUpload); 142 } 143 Unmarshalling(Parcel & parcel)144 static SecurityEventConfig *Unmarshalling(Parcel &parcel) 145 { 146 SecurityEventConfig *config = new (std::nothrow) SecurityEventConfig(); 147 if (config != nullptr && !config->ReadFromParcel(parcel)) { 148 delete config; 149 config = nullptr; 150 } 151 152 return config; 153 }; 154 155 private: 156 EventCfg config_{}; 157 }; 158 159 } // namespace OHOS::Security::SecurityGuard 160 161 #endif // SECURITY_EVENT_CONFIG_H 162