1 /* 2 * Copyright (c) 2021 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 #include "common_event_publish_info.h" 17 #include "event_log_wrapper.h" 18 #include "string_ex.h" 19 #include <cstdint> 20 21 namespace OHOS { 22 namespace EventFwk { 23 namespace { 24 const int32_t SUBSCRIBER_UIDS_MAX_NUM = 3; 25 } 26 CommonEventPublishInfo()27CommonEventPublishInfo::CommonEventPublishInfo() : sticky_(false), ordered_(false), 28 subscriberType_(static_cast<int32_t>(SubscriberType::ALL_SUBSCRIBER_TYPE)) 29 { 30 } 31 CommonEventPublishInfo(const CommonEventPublishInfo & commonEventPublishInfo)32CommonEventPublishInfo::CommonEventPublishInfo(const CommonEventPublishInfo &commonEventPublishInfo) 33 { 34 sticky_ = commonEventPublishInfo.sticky_; 35 ordered_ = commonEventPublishInfo.ordered_; 36 bundleName_ = commonEventPublishInfo.bundleName_; 37 subscriberPermissions_ = commonEventPublishInfo.subscriberPermissions_; 38 subscriberUids_ = commonEventPublishInfo.subscriberUids_; 39 subscriberType_ = commonEventPublishInfo.subscriberType_; 40 } 41 ~CommonEventPublishInfo()42CommonEventPublishInfo::~CommonEventPublishInfo() 43 { 44 } 45 SetSticky(bool sticky)46void CommonEventPublishInfo::SetSticky(bool sticky) 47 { 48 sticky_ = sticky; 49 } 50 IsSticky() const51bool CommonEventPublishInfo::IsSticky() const 52 { 53 return sticky_; 54 } 55 SetSubscriberPermissions(const std::vector<std::string> & subscriberPermissions)56void CommonEventPublishInfo::SetSubscriberPermissions(const std::vector<std::string> &subscriberPermissions) 57 { 58 subscriberPermissions_ = subscriberPermissions; 59 } 60 GetSubscriberPermissions() const61const std::vector<std::string> &CommonEventPublishInfo::GetSubscriberPermissions() const 62 { 63 return subscriberPermissions_; 64 } 65 SetOrdered(bool ordered)66void CommonEventPublishInfo::SetOrdered(bool ordered) 67 { 68 ordered_ = ordered; 69 } 70 IsOrdered() const71bool CommonEventPublishInfo::IsOrdered() const 72 { 73 return ordered_; 74 } 75 SetBundleName(const std::string & bundleName)76void CommonEventPublishInfo::SetBundleName(const std::string &bundleName) 77 { 78 bundleName_ = bundleName; 79 } 80 GetBundleName() const81std::string CommonEventPublishInfo::GetBundleName() const 82 { 83 return bundleName_; 84 } 85 SetSubscriberUid(const std::vector<int32_t> & subscriberUids)86void CommonEventPublishInfo::SetSubscriberUid(const std::vector<int32_t> &subscriberUids) 87 { 88 if (subscriberUids.size() > SUBSCRIBER_UIDS_MAX_NUM) { 89 subscriberUids_ = 90 std::vector<int32_t>(subscriberUids.begin(), subscriberUids.begin() + SUBSCRIBER_UIDS_MAX_NUM); 91 return; 92 } 93 subscriberUids_ = subscriberUids; 94 } 95 GetSubscriberUid() const96std::vector<int32_t> CommonEventPublishInfo::GetSubscriberUid() const 97 { 98 return subscriberUids_; 99 } 100 SetSubscriberType(const int32_t & subscriberType)101void CommonEventPublishInfo::SetSubscriberType(const int32_t &subscriberType) 102 { 103 if (!isSubscriberType(subscriberType)) { 104 EVENT_LOGW("subscriberType in common event Publish Info is out of range, and has already" 105 "converted to default value ALL_SUBSCRIBER_TYPE = 0"); 106 subscriberType_ = static_cast<int32_t>(SubscriberType::ALL_SUBSCRIBER_TYPE); 107 return; 108 } 109 subscriberType_ = subscriberType; 110 } 111 GetSubscriberType() const112int32_t CommonEventPublishInfo::GetSubscriberType() const 113 { 114 return subscriberType_; 115 } 116 Marshalling(Parcel & parcel) const117bool CommonEventPublishInfo::Marshalling(Parcel &parcel) const 118 { 119 EVENT_LOGD("enter"); 120 121 // write subscriber permissions 122 std::vector<std::u16string> permissionVec_; 123 for (std::vector<std::string>::size_type i = 0; i < subscriberPermissions_.size(); ++i) { 124 permissionVec_.emplace_back(Str8ToStr16(subscriberPermissions_[i])); 125 } 126 if (!parcel.WriteString16Vector(permissionVec_)) { 127 EVENT_LOGE("common event Publish Info write permission failed"); 128 return false; 129 } 130 131 // write ordered 132 if (!parcel.WriteBool(ordered_)) { 133 EVENT_LOGE("common event Publish Info write ordered failed"); 134 return false; 135 } 136 137 // write sticky 138 if (!parcel.WriteBool(sticky_)) { 139 EVENT_LOGE("common event Publish Info write sticky failed"); 140 return false; 141 } 142 // write bundleName 143 if (!parcel.WriteString16(Str8ToStr16(bundleName_))) { 144 EVENT_LOGE("common event Publish Info write bundleName failed"); 145 return false; 146 } 147 // write subscriberUids 148 if (!parcel.WriteInt32Vector(subscriberUids_)) { 149 EVENT_LOGE("common event Publish Info write subscriberUids failed"); 150 return false; 151 } 152 153 // write subscriberType 154 if (!parcel.WriteInt32(subscriberType_)) { 155 EVENT_LOGE("common event Publish Info write subscriberType failed"); 156 return false; 157 } 158 return true; 159 } 160 isSubscriberType(int32_t subscriberType)161bool CommonEventPublishInfo::isSubscriberType(int32_t subscriberType) 162 { 163 switch (subscriberType) { 164 case static_cast<int32_t>(SubscriberType::ALL_SUBSCRIBER_TYPE): 165 return true; 166 case static_cast<int32_t>(SubscriberType::SYSTEM_SUBSCRIBER_TYPE): 167 return true; 168 default: 169 return false; 170 } 171 } 172 ReadFromParcel(Parcel & parcel)173bool CommonEventPublishInfo::ReadFromParcel(Parcel &parcel) 174 { 175 EVENT_LOGD("enter"); 176 177 // read subscriber permissions 178 std::vector<std::u16string> permissionVec_; 179 if (!parcel.ReadString16Vector(&permissionVec_)) { 180 EVENT_LOGE("ReadFromParcel read permission error"); 181 return false; 182 } 183 subscriberPermissions_.clear(); 184 for (std::vector<std::u16string>::size_type i = 0; i < permissionVec_.size(); i++) { 185 subscriberPermissions_.emplace_back(Str16ToStr8(permissionVec_[i])); 186 } 187 // read ordered 188 ordered_ = parcel.ReadBool(); 189 // read sticky 190 sticky_ = parcel.ReadBool(); 191 // read bundleName 192 bundleName_ = Str16ToStr8(parcel.ReadString16()); 193 // read subscriberUids 194 if (!parcel.ReadInt32Vector(&subscriberUids_)) { 195 EVENT_LOGE("ReadFromParcel read subscriberUids error"); 196 return false; 197 } 198 // read subscriberType 199 subscriberType_ = parcel.ReadInt32(); 200 return true; 201 } 202 Unmarshalling(Parcel & parcel)203CommonEventPublishInfo *CommonEventPublishInfo::Unmarshalling(Parcel &parcel) 204 { 205 CommonEventPublishInfo *commonEventPublishInfo = new (std::nothrow) CommonEventPublishInfo(); 206 207 if (commonEventPublishInfo == nullptr) { 208 EVENT_LOGE("commonEventPublishInfo == nullptr"); 209 return nullptr; 210 } 211 212 if (!commonEventPublishInfo->ReadFromParcel(parcel)) { 213 EVENT_LOGE("failed to ReadFromParcel"); 214 delete commonEventPublishInfo; 215 commonEventPublishInfo = nullptr; 216 } 217 218 return commonEventPublishInfo; 219 } 220 } // namespace EventFwk 221 } // namespace OHOS