1 /* 2 * Copyright (c) 2023 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 "session_info.h" 17 18 #include "ability_base_log_wrapper.h" 19 #include "ability_start_setting.h" 20 21 namespace OHOS { 22 namespace AAFwk { Marshalling(Parcel & parcel) const23bool SessionInfo::Marshalling(Parcel& parcel) const 24 { 25 if (sessionToken) { 26 if (!parcel.WriteBool(true) || 27 !(static_cast<MessageParcel*>(&parcel))->WriteRemoteObject(sessionToken)) { 28 ABILITYBASE_LOGE("Write session token failed."); 29 return false; 30 } 31 } else { 32 if (!parcel.WriteBool(false)) { 33 return false; 34 } 35 } 36 37 if (callerSession) { 38 if (!parcel.WriteBool(true) || 39 !(static_cast<MessageParcel*>(&parcel))->WriteRemoteObject(callerSession)) { 40 ABILITYBASE_LOGE("Write caller session failed."); 41 return false; 42 } 43 } else { 44 if (!parcel.WriteBool(false)) { 45 return false; 46 } 47 } 48 49 if (callerToken) { 50 if (!parcel.WriteBool(true) || 51 !(static_cast<MessageParcel*>(&parcel))->WriteRemoteObject(callerToken)) { 52 ABILITYBASE_LOGE("Write caller token failed."); 53 return false; 54 } 55 } else { 56 if (!parcel.WriteBool(false)) { 57 return false; 58 } 59 } 60 61 if (!parcel.WriteInt32(persistentId)) { 62 ABILITYBASE_LOGE("Write persistent id failed."); 63 return false; 64 } 65 66 if (!parcel.WriteUint32(hostWindowId)) { 67 ABILITYBASE_LOGE("Write host window id failed."); 68 return false; 69 } 70 71 if (!parcel.WriteUint32(static_cast<uint32_t>(state))) { 72 ABILITYBASE_LOGE("Write state failed."); 73 return false; 74 } 75 76 if (!parcel.WriteInt32(resultCode)) { 77 ABILITYBASE_LOGE("Write resultCode failed."); 78 return false; 79 } 80 81 if (!parcel.WriteInt32(requestCode)) { 82 ABILITYBASE_LOGE("Write requestCode failed."); 83 return false; 84 } 85 86 if (!parcel.WriteString(errorReason)) { 87 ABILITYBASE_LOGE("Write errorReason failed."); 88 return false; 89 } 90 91 if (!parcel.WriteInt32(errorCode)) { 92 ABILITYBASE_LOGE("Write errorCode failed."); 93 return false; 94 } 95 96 if (!parcel.WriteInt64(uiAbilityId)) { 97 ABILITYBASE_LOGE("Write uiAbilityId failed."); 98 return false; 99 } 100 101 if (!parcel.WriteParcelable(startSetting.get())) { 102 ABILITYBASE_LOGE("Write startSetting failed."); 103 return false; 104 } 105 106 if (!parcel.WriteBool(isNewWant)) { 107 ABILITYBASE_LOGE("Write isNewWant failed."); 108 return false; 109 } 110 111 if (!parcel.WriteBool(isClearSession)) { 112 ABILITYBASE_LOGE("Write isClearSession failed."); 113 return false; 114 } 115 116 if (!parcel.WriteUint32(callingTokenId)) { 117 ABILITYBASE_LOGE("Write callingTokenId failed."); 118 return false; 119 } 120 121 if (!parcel.WriteBool(reuse)) { 122 ABILITYBASE_LOGE("Write reuse failed."); 123 return false; 124 } 125 126 if (!parcel.WriteParcelable(&want)) { 127 ABILITYBASE_LOGE("Write want failed."); 128 return false; 129 } 130 return true; 131 } 132 Unmarshalling(Parcel & parcel)133SessionInfo* SessionInfo::Unmarshalling(Parcel& parcel) 134 { 135 SessionInfo* info = new SessionInfo(); 136 if (parcel.ReadBool()) { 137 info->sessionToken = (static_cast<MessageParcel*>(&parcel))->ReadRemoteObject(); 138 } 139 140 if (parcel.ReadBool()) { 141 info->callerSession = (static_cast<MessageParcel*>(&parcel))->ReadRemoteObject(); 142 } 143 144 if (parcel.ReadBool()) { 145 info->callerToken = (static_cast<MessageParcel*>(&parcel))->ReadRemoteObject(); 146 } 147 148 info->persistentId = parcel.ReadInt32(); 149 info->hostWindowId = parcel.ReadUint32(); 150 info->state = static_cast<CallToState>(parcel.ReadUint32()); 151 info->resultCode = parcel.ReadInt32(); 152 info->requestCode = parcel.ReadInt32(); 153 info->errorReason = parcel.ReadString(); 154 info->errorCode = parcel.ReadInt32(); 155 info->uiAbilityId = parcel.ReadInt64(); 156 info->startSetting.reset(parcel.ReadParcelable<AbilityStartSetting>()); 157 info->isNewWant = parcel.ReadBool(); 158 info->isClearSession = parcel.ReadBool(); 159 info->callingTokenId = parcel.ReadUint32(); 160 info->reuse = parcel.ReadBool(); 161 162 std::unique_ptr<Want> want(parcel.ReadParcelable<Want>()); 163 if (want != nullptr) { 164 info->want = *want; 165 } 166 return info; 167 } 168 } // namespace AAFwk 169 } // namespace OHOS 170