• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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) const23 bool 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)133 SessionInfo* 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