1/* 2 * Copyright (c) 2021-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 16#include "sender_info.h" 17 18#include "hilog_tag_wrapper.h" 19 20namespace OHOS { 21namespace AAFwk { 22bool SenderInfo::ReadFromParcel(Parcel &parcel) 23{ 24 TAG_LOGD(AAFwkTag::ABILITYMGR, "call"); 25 26 code = parcel.ReadInt32(); 27 std::unique_ptr<Want> wantResquest(parcel.ReadParcelable<Want>()); 28 if (wantResquest == nullptr) { 29 TAG_LOGE(AAFwkTag::ABILITYMGR, "null wantResquest"); 30 return false; 31 } 32 want = *wantResquest; 33 resolvedType = Str16ToStr8(parcel.ReadString16()); 34 35 if (parcel.ReadBool()) { 36 sptr<IRemoteObject> finishedReceiverResquest = (static_cast<MessageParcel*>(&parcel))->ReadRemoteObject(); 37 if (finishedReceiverResquest == nullptr) { 38 TAG_LOGE(AAFwkTag::ABILITYMGR, "null remote object"); 39 return false; 40 } 41 finishedReceiver = iface_cast<IWantReceiver>(finishedReceiverResquest); 42 if (!finishedReceiver) { 43 TAG_LOGE(AAFwkTag::ABILITYMGR, "null receiver"); 44 return false; 45 } 46 } 47 requiredPermission = Str16ToStr8(parcel.ReadString16()); 48 if (parcel.ReadBool()) { 49 startOptions = parcel.ReadParcelable<StartOptions>(); 50 } 51 return true; 52} 53 54SenderInfo *SenderInfo::Unmarshalling(Parcel &parcel) 55{ 56 TAG_LOGD(AAFwkTag::ABILITYMGR, "call"); 57 58 SenderInfo *info = new (std::nothrow) SenderInfo(); 59 if (info == nullptr) { 60 TAG_LOGE(AAFwkTag::ABILITYMGR, "null senderInfo"); 61 return nullptr; 62 } 63 64 if (!info->ReadFromParcel(parcel)) { 65 TAG_LOGE(AAFwkTag::ABILITYMGR, "ReadFromParcel failed"); 66 delete info; 67 info = nullptr; 68 } 69 return info; 70} 71 72bool SenderInfo::Marshalling(Parcel &parcel) const 73{ 74 TAG_LOGD(AAFwkTag::ABILITYMGR, "call"); 75 76 if (!parcel.WriteInt32(code)) { 77 TAG_LOGE(AAFwkTag::ABILITYMGR, "write code failed"); 78 return false; 79 } 80 if (!parcel.WriteParcelable(&want)) { 81 TAG_LOGE(AAFwkTag::ABILITYMGR, "write want failed"); 82 return false; 83 } 84 if (!parcel.WriteString16(Str8ToStr16(resolvedType))) { 85 TAG_LOGE(AAFwkTag::ABILITYMGR, "write resolvedType failed"); 86 return false; 87 } 88 if (!parcel.WriteBool(finishedReceiver != nullptr)) { 89 TAG_LOGE(AAFwkTag::ABILITYMGR, "write flag failed"); 90 return false; 91 } 92 if (finishedReceiver) { 93 if (finishedReceiver->AsObject() == nullptr) { 94 TAG_LOGE(AAFwkTag::ABILITYMGR, "null object"); 95 return false; 96 } 97 if (!(static_cast<MessageParcel*>(&parcel))->WriteRemoteObject(finishedReceiver->AsObject())) { 98 TAG_LOGE(AAFwkTag::ABILITYMGR, "write receiver failed"); 99 return false; 100 } 101 } 102 if (!parcel.WriteString16(Str8ToStr16(requiredPermission))) { 103 TAG_LOGE(AAFwkTag::ABILITYMGR, "write requiredPermission failed"); 104 return false; 105 } 106 if (!parcel.WriteBool(startOptions != nullptr)) { 107 TAG_LOGE(AAFwkTag::ABILITYMGR, "write flag failed"); 108 return false; 109 } 110 if (startOptions) { 111 if (!parcel.WriteParcelable(startOptions)) { 112 TAG_LOGE(AAFwkTag::ABILITYMGR, "write startOptions failed"); 113 return false; 114 } 115 } 116 return true; 117} 118} // namespace AAFwk 119} // namespace OHOS 120