• 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 (!DoMarshallingOne(parcel)) {
26         return false;
27     }
28 
29     if (!DoMarshallingTwo(parcel)) {
30         return false;
31     }
32 
33     return DoMarshallingThree(parcel);
34 }
35 
DoMarshallingOne(Parcel & parcel) const36 bool SessionInfo::DoMarshallingOne(Parcel& parcel) const
37 {
38     if (sessionToken) {
39         if (!parcel.WriteBool(true) ||
40             !(static_cast<MessageParcel*>(&parcel))->WriteRemoteObject(sessionToken)) {
41             ABILITYBASE_LOGE("Write session token failed.");
42             return false;
43         }
44     } else {
45         if (!parcel.WriteBool(false)) {
46             return false;
47         }
48     }
49 
50     if (callerSession) {
51         if (!parcel.WriteBool(true) ||
52             !(static_cast<MessageParcel*>(&parcel))->WriteRemoteObject(callerSession)) {
53             ABILITYBASE_LOGE("Write caller session failed.");
54             return false;
55         }
56     } else {
57         if (!parcel.WriteBool(false)) {
58             return false;
59         }
60     }
61 
62     if (callerToken) {
63         if (!parcel.WriteBool(true) ||
64             !(static_cast<MessageParcel*>(&parcel))->WriteRemoteObject(callerToken)) {
65             ABILITYBASE_LOGE("Write caller token failed.");
66             return false;
67         }
68     } else {
69         if (!parcel.WriteBool(false)) {
70             return false;
71         }
72     }
73 
74     if (parentToken) {
75         if (!parcel.WriteBool(true) ||
76             !(static_cast<MessageParcel*>(&parcel))->WriteRemoteObject(parentToken)) {
77             ABILITYBASE_LOGE("Write parent token failed.");
78             return false;
79         }
80     } else {
81         if (!parcel.WriteBool(false)) {
82             return false;
83         }
84     }
85     return true;
86 }
87 
DoMarshallingTwo(Parcel & parcel) const88 bool SessionInfo::DoMarshallingTwo(Parcel& parcel) const
89 {
90     if (!parcel.WriteInt32(persistentId)) {
91         ABILITYBASE_LOGE("Write persistent id failed.");
92         return false;
93     }
94 
95     if (!parcel.WriteUint32(hostWindowId)) {
96         ABILITYBASE_LOGE("Write host window id failed.");
97         return false;
98     }
99 
100     if (!parcel.WriteUint32(static_cast<uint32_t>(state))) {
101         ABILITYBASE_LOGE("Write state failed.");
102         return false;
103     }
104 
105     if (!parcel.WriteInt32(resultCode)) {
106         ABILITYBASE_LOGE("Write resultCode failed.");
107         return false;
108     }
109 
110     if (!parcel.WriteInt32(requestCode)) {
111         ABILITYBASE_LOGE("Write requestCode failed.");
112         return false;
113     }
114 
115     if (!parcel.WriteString(errorReason)) {
116         ABILITYBASE_LOGE("Write errorReason failed.");
117         return false;
118     }
119 
120     if (!parcel.WriteInt32(errorCode)) {
121         ABILITYBASE_LOGE("Write errorCode failed.");
122         return false;
123     }
124 
125     if (!parcel.WriteInt64(uiAbilityId)) {
126         ABILITYBASE_LOGE("Write uiAbilityId failed.");
127         return false;
128     }
129 
130     if (!parcel.WriteParcelable(startSetting.get())) {
131         ABILITYBASE_LOGE("Write startSetting failed.");
132         return false;
133     }
134     return true;
135 }
136 
DoMarshallingThree(Parcel & parcel) const137 bool SessionInfo::DoMarshallingThree(Parcel& parcel) const
138 {
139     if (!parcel.WriteBool(isNewWant)) {
140         ABILITYBASE_LOGE("Write isNewWant failed.");
141         return false;
142     }
143 
144     if (!parcel.WriteBool(isClearSession)) {
145         ABILITYBASE_LOGE("Write isClearSession failed.");
146         return false;
147     }
148 
149     if (!parcel.WriteUint32(callingTokenId)) {
150         ABILITYBASE_LOGE("Write callingTokenId failed.");
151         return false;
152     }
153 
154     if (!parcel.WriteBool(reuse)) {
155         ABILITYBASE_LOGE("Write reuse failed.");
156         return false;
157     }
158 
159     if (!parcel.WriteInt32(collaboratorType)) {
160         ABILITYBASE_LOGE("Write collaboratorType failed.");
161         return false;
162     }
163 
164     if (!parcel.WriteString(sessionName)) {
165         ABILITYBASE_LOGE("Write sessionName failed.");
166         return false;
167     }
168 
169     if (!parcel.WriteUint64(uiExtensionComponentId)) {
170         ABILITYBASE_LOGE("Write uiExtensionComponentId failed.");
171         return false;
172     }
173 
174     if (!parcel.WriteBool(isAsyncModalBinding)) {
175         ABILITYBASE_LOGE("Write isAsyncModalBinding failed.");
176         return false;
177     }
178 
179     if (!parcel.WriteParcelable(&want)) {
180         ABILITYBASE_LOGE("Write want failed.");
181         return false;
182     }
183     return true;
184 }
185 
Unmarshalling(Parcel & parcel)186 SessionInfo* SessionInfo::Unmarshalling(Parcel& parcel)
187 {
188     SessionInfo* info = new SessionInfo();
189     if (parcel.ReadBool()) {
190         info->sessionToken = (static_cast<MessageParcel*>(&parcel))->ReadRemoteObject();
191     }
192 
193     if (parcel.ReadBool()) {
194         info->callerSession = (static_cast<MessageParcel*>(&parcel))->ReadRemoteObject();
195     }
196 
197     if (parcel.ReadBool()) {
198         info->callerToken = (static_cast<MessageParcel*>(&parcel))->ReadRemoteObject();
199     }
200 
201     if (parcel.ReadBool()) {
202         info->parentToken = (static_cast<MessageParcel*>(&parcel))->ReadRemoteObject();
203     }
204 
205     info->persistentId = parcel.ReadInt32();
206     info->hostWindowId = parcel.ReadUint32();
207     info->state = static_cast<CallToState>(parcel.ReadUint32());
208     info->resultCode = parcel.ReadInt32();
209     info->requestCode = parcel.ReadInt32();
210     info->errorReason = parcel.ReadString();
211     info->errorCode = parcel.ReadInt32();
212     info->uiAbilityId = parcel.ReadInt64();
213     info->startSetting.reset(parcel.ReadParcelable<AbilityStartSetting>());
214     info->isNewWant = parcel.ReadBool();
215     info->isClearSession = parcel.ReadBool();
216     info->callingTokenId = parcel.ReadUint32();
217     info->reuse = parcel.ReadBool();
218     info->collaboratorType = parcel.ReadInt32();
219     info->sessionName = parcel.ReadString();
220     info->uiExtensionComponentId = parcel.ReadUint64();
221     info->isAsyncModalBinding = parcel.ReadBool();
222 
223     std::unique_ptr<Want> want(parcel.ReadParcelable<Want>());
224     if (want != nullptr) {
225         info->want = *want;
226     }
227     return info;
228 }
229 }  // namespace AAFwk
230 }  // namespace OHOS
231