1 /*
2  * Copyright (c) 2022-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 "connection_data.h"
17 
18 #include "hilog_tag_wrapper.h"
19 #include "string_ex.h"
20 
21 namespace OHOS {
22 namespace AbilityRuntime {
23 using namespace OHOS::AppExecFwk;
Marshalling(Parcel & parcel) const24 bool ConnectionData::Marshalling(Parcel &parcel) const
25 {
26     if (!parcel.WriteInt32(extensionPid)) {
27         return false;
28     }
29 
30     if (!parcel.WriteInt32(extensionUid)) {
31         return false;
32     }
33 
34     if (!parcel.WriteString16(Str8ToStr16(extensionBundleName))) {
35         return false;
36     }
37 
38     if (!parcel.WriteString16(Str8ToStr16(extensionModuleName))) {
39         return false;
40     }
41 
42     if (!parcel.WriteString16(Str8ToStr16(extensionName))) {
43         return false;
44     }
45 
46     if (!parcel.WriteInt32(static_cast<int32_t>(extensionType))) {
47         return false;
48     }
49 
50     if (!parcel.WriteInt32(callerUid)) {
51         return false;
52     }
53 
54     if (!parcel.WriteInt32(callerPid)) {
55         return false;
56     }
57 
58     if (!parcel.WriteString16(Str8ToStr16(callerName))) {
59         return false;
60     }
61 
62     return true;
63 }
64 
ReadFromParcel(Parcel & parcel)65 bool ConnectionData::ReadFromParcel(Parcel &parcel)
66 {
67     if (!parcel.ReadInt32(extensionPid)) {
68         return false;
69     }
70 
71     if (!parcel.ReadInt32(extensionUid)) {
72         return false;
73     }
74 
75     std::u16string strValue;
76     if (!parcel.ReadString16(strValue)) {
77         return false;
78     }
79     extensionBundleName = Str16ToStr8(strValue);
80 
81     if (!parcel.ReadString16(strValue)) {
82         return false;
83     }
84     extensionModuleName = Str16ToStr8(strValue);
85 
86     if (!parcel.ReadString16(strValue)) {
87         return false;
88     }
89     extensionName = Str16ToStr8(strValue);
90 
91     int type = 0;
92     if (!parcel.ReadInt32(type)) {
93         return false;
94     }
95     extensionType = static_cast<ExtensionAbilityType>(type);
96 
97     if (!parcel.ReadInt32(callerUid)) {
98         TAG_LOGW(AAFwkTag::CONNECTION, "read callerUid failed");
99         return false;
100     }
101 
102     if (!parcel.ReadInt32(callerPid)) {
103         TAG_LOGW(AAFwkTag::CONNECTION, "read callerPid failed");
104         return false;
105     }
106 
107     if (!parcel.ReadString16(strValue)) {
108         TAG_LOGW(AAFwkTag::CONNECTION, "read strValue failed");
109         return false;
110     }
111     callerName = Str16ToStr8(strValue);
112 
113     return true;
114 }
115 
Unmarshalling(Parcel & parcel)116 ConnectionData *ConnectionData::Unmarshalling(Parcel &parcel)
117 {
118     ConnectionData *data = new ConnectionData();
119     if (!data->ReadFromParcel(parcel)) {
120         delete data;
121         data = nullptr;
122     }
123     return data;
124 }
125 }  // namespace AbilityRuntime
126 }  // namespace OHOS
127