1b1b8bc3fSopenharmony_ci/*
2b1b8bc3fSopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd.
3b1b8bc3fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4b1b8bc3fSopenharmony_ci * you may not use this file except in compliance with the License.
5b1b8bc3fSopenharmony_ci * You may obtain a copy of the License at
6b1b8bc3fSopenharmony_ci *
7b1b8bc3fSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8b1b8bc3fSopenharmony_ci *
9b1b8bc3fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10b1b8bc3fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11b1b8bc3fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12b1b8bc3fSopenharmony_ci * See the License for the specific language governing permissions and
13b1b8bc3fSopenharmony_ci * limitations under the License.
14b1b8bc3fSopenharmony_ci */
15b1b8bc3fSopenharmony_ci
16b1b8bc3fSopenharmony_ci#include "route.h"
17b1b8bc3fSopenharmony_ci
18b1b8bc3fSopenharmony_ci#include "net_mgr_log_wrapper.h"
19b1b8bc3fSopenharmony_ci
20b1b8bc3fSopenharmony_cinamespace OHOS {
21b1b8bc3fSopenharmony_cinamespace NetManagerStandard {
22b1b8bc3fSopenharmony_cibool Route::operator==(const Route &obj) const
23b1b8bc3fSopenharmony_ci{
24b1b8bc3fSopenharmony_ci    bool out = true;
25b1b8bc3fSopenharmony_ci    out = out && (iface_ == obj.iface_);
26b1b8bc3fSopenharmony_ci    out = out && (destination_ == obj.destination_);
27b1b8bc3fSopenharmony_ci    out = out && (gateway_ == obj.gateway_);
28b1b8bc3fSopenharmony_ci    return out;
29b1b8bc3fSopenharmony_ci}
30b1b8bc3fSopenharmony_ci
31b1b8bc3fSopenharmony_cibool Route::Marshalling(Parcel &parcel) const
32b1b8bc3fSopenharmony_ci{
33b1b8bc3fSopenharmony_ci    if (!parcel.WriteString(iface_)) {
34b1b8bc3fSopenharmony_ci        return false;
35b1b8bc3fSopenharmony_ci    }
36b1b8bc3fSopenharmony_ci    if (!destination_.Marshalling(parcel)) {
37b1b8bc3fSopenharmony_ci        NETMGR_LOG_E("write destination_ to parcel failed");
38b1b8bc3fSopenharmony_ci        return false;
39b1b8bc3fSopenharmony_ci    }
40b1b8bc3fSopenharmony_ci    if (!gateway_.Marshalling(parcel)) {
41b1b8bc3fSopenharmony_ci        NETMGR_LOG_E("write gateway_ to parcel failed");
42b1b8bc3fSopenharmony_ci        return false;
43b1b8bc3fSopenharmony_ci    }
44b1b8bc3fSopenharmony_ci    if (!parcel.WriteInt32(rtnType_)) {
45b1b8bc3fSopenharmony_ci        return false;
46b1b8bc3fSopenharmony_ci    }
47b1b8bc3fSopenharmony_ci    if (!parcel.WriteInt32(mtu_)) {
48b1b8bc3fSopenharmony_ci        return false;
49b1b8bc3fSopenharmony_ci    }
50b1b8bc3fSopenharmony_ci    if (!parcel.WriteBool(isHost_)) {
51b1b8bc3fSopenharmony_ci        return false;
52b1b8bc3fSopenharmony_ci    }
53b1b8bc3fSopenharmony_ci    if (!parcel.WriteBool(hasGateway_)) {
54b1b8bc3fSopenharmony_ci        return false;
55b1b8bc3fSopenharmony_ci    }
56b1b8bc3fSopenharmony_ci    if (!parcel.WriteBool(isDefaultRoute_)) {
57b1b8bc3fSopenharmony_ci        return false;
58b1b8bc3fSopenharmony_ci    }
59b1b8bc3fSopenharmony_ci    return true;
60b1b8bc3fSopenharmony_ci}
61b1b8bc3fSopenharmony_ci
62b1b8bc3fSopenharmony_cisptr<Route> Route::Unmarshalling(Parcel &parcel)
63b1b8bc3fSopenharmony_ci{
64b1b8bc3fSopenharmony_ci    sptr<Route> ptr = new (std::nothrow) Route();
65b1b8bc3fSopenharmony_ci    if (ptr == nullptr) {
66b1b8bc3fSopenharmony_ci        NETMGR_LOG_E("make_unique<Route>() failed");
67b1b8bc3fSopenharmony_ci        return nullptr;
68b1b8bc3fSopenharmony_ci    }
69b1b8bc3fSopenharmony_ci    if (!parcel.ReadString(ptr->iface_)) {
70b1b8bc3fSopenharmony_ci        return nullptr;
71b1b8bc3fSopenharmony_ci    }
72b1b8bc3fSopenharmony_ci    sptr<INetAddr> destination = INetAddr::Unmarshalling(parcel);
73b1b8bc3fSopenharmony_ci    if (destination == nullptr) {
74b1b8bc3fSopenharmony_ci        NETMGR_LOG_E("read destination from parcel failed");
75b1b8bc3fSopenharmony_ci        return nullptr;
76b1b8bc3fSopenharmony_ci    }
77b1b8bc3fSopenharmony_ci    ptr->destination_ = *destination;
78b1b8bc3fSopenharmony_ci    sptr<INetAddr> gateway = INetAddr::Unmarshalling(parcel);
79b1b8bc3fSopenharmony_ci    if (gateway == nullptr) {
80b1b8bc3fSopenharmony_ci        NETMGR_LOG_E("read gateway from parcel failed");
81b1b8bc3fSopenharmony_ci        return nullptr;
82b1b8bc3fSopenharmony_ci    }
83b1b8bc3fSopenharmony_ci    ptr->gateway_ = *gateway;
84b1b8bc3fSopenharmony_ci    if (!parcel.ReadInt32(ptr->rtnType_)) {
85b1b8bc3fSopenharmony_ci        return nullptr;
86b1b8bc3fSopenharmony_ci    }
87b1b8bc3fSopenharmony_ci    if (!parcel.ReadInt32(ptr->mtu_)) {
88b1b8bc3fSopenharmony_ci        return nullptr;
89b1b8bc3fSopenharmony_ci    }
90b1b8bc3fSopenharmony_ci    if (!parcel.ReadBool(ptr->isHost_)) {
91b1b8bc3fSopenharmony_ci        return nullptr;
92b1b8bc3fSopenharmony_ci    }
93b1b8bc3fSopenharmony_ci    if (!parcel.ReadBool(ptr->hasGateway_)) {
94b1b8bc3fSopenharmony_ci        return nullptr;
95b1b8bc3fSopenharmony_ci    }
96b1b8bc3fSopenharmony_ci    if (!parcel.ReadBool(ptr->isDefaultRoute_)) {
97b1b8bc3fSopenharmony_ci        return nullptr;
98b1b8bc3fSopenharmony_ci    }
99b1b8bc3fSopenharmony_ci    return ptr;
100b1b8bc3fSopenharmony_ci}
101b1b8bc3fSopenharmony_ci
102b1b8bc3fSopenharmony_cibool Route::Marshalling(Parcel &parcel, const sptr<Route> &object)
103b1b8bc3fSopenharmony_ci{
104b1b8bc3fSopenharmony_ci    if (object == nullptr) {
105b1b8bc3fSopenharmony_ci        NETMGR_LOG_E("Route object ptr is nullptr");
106b1b8bc3fSopenharmony_ci        return false;
107b1b8bc3fSopenharmony_ci    }
108b1b8bc3fSopenharmony_ci    if (!parcel.WriteString(object->iface_)) {
109b1b8bc3fSopenharmony_ci        return false;
110b1b8bc3fSopenharmony_ci    }
111b1b8bc3fSopenharmony_ci    if (!object->destination_.Marshalling(parcel)) {
112b1b8bc3fSopenharmony_ci        NETMGR_LOG_E("write object->destination_ to parcel failed");
113b1b8bc3fSopenharmony_ci        return false;
114b1b8bc3fSopenharmony_ci    }
115b1b8bc3fSopenharmony_ci    if (!object->gateway_.Marshalling(parcel)) {
116b1b8bc3fSopenharmony_ci        NETMGR_LOG_E("write object->gateway_ to parcel failed");
117b1b8bc3fSopenharmony_ci        return false;
118b1b8bc3fSopenharmony_ci    }
119b1b8bc3fSopenharmony_ci    if (!parcel.WriteInt32(object->rtnType_)) {
120b1b8bc3fSopenharmony_ci        return false;
121b1b8bc3fSopenharmony_ci    }
122b1b8bc3fSopenharmony_ci    if (!parcel.WriteInt32(object->mtu_)) {
123b1b8bc3fSopenharmony_ci        return false;
124b1b8bc3fSopenharmony_ci    }
125b1b8bc3fSopenharmony_ci    if (!parcel.WriteBool(object->isHost_)) {
126b1b8bc3fSopenharmony_ci        return false;
127b1b8bc3fSopenharmony_ci    }
128b1b8bc3fSopenharmony_ci    if (!parcel.WriteBool(object->hasGateway_)) {
129b1b8bc3fSopenharmony_ci        return false;
130b1b8bc3fSopenharmony_ci    }
131b1b8bc3fSopenharmony_ci    if (!parcel.WriteBool(object->isDefaultRoute_)) {
132b1b8bc3fSopenharmony_ci        return false;
133b1b8bc3fSopenharmony_ci    }
134b1b8bc3fSopenharmony_ci    return true;
135b1b8bc3fSopenharmony_ci}
136b1b8bc3fSopenharmony_ci
137b1b8bc3fSopenharmony_cistd::string Route::ToString(const std::string &tab) const
138b1b8bc3fSopenharmony_ci{
139b1b8bc3fSopenharmony_ci    std::string str;
140b1b8bc3fSopenharmony_ci    str.append(tab);
141b1b8bc3fSopenharmony_ci    str.append("[Route]");
142b1b8bc3fSopenharmony_ci
143b1b8bc3fSopenharmony_ci    str.append(tab);
144b1b8bc3fSopenharmony_ci    str.append("iface_ = ");
145b1b8bc3fSopenharmony_ci    str.append(iface_);
146b1b8bc3fSopenharmony_ci
147b1b8bc3fSopenharmony_ci    str.append(tab);
148b1b8bc3fSopenharmony_ci    str.append("destination_ = ");
149b1b8bc3fSopenharmony_ci    str.append(destination_.ToString(tab));
150b1b8bc3fSopenharmony_ci
151b1b8bc3fSopenharmony_ci    str.append("\n");
152b1b8bc3fSopenharmony_ci    str.append(tab);
153b1b8bc3fSopenharmony_ci    str.append("gateway_ = ");
154b1b8bc3fSopenharmony_ci    str.append(gateway_.ToString(tab));
155b1b8bc3fSopenharmony_ci
156b1b8bc3fSopenharmony_ci    str.append("\n");
157b1b8bc3fSopenharmony_ci    str.append(tab);
158b1b8bc3fSopenharmony_ci    str.append("rtnType_ = ");
159b1b8bc3fSopenharmony_ci    str.append(std::to_string(rtnType_));
160b1b8bc3fSopenharmony_ci
161b1b8bc3fSopenharmony_ci    str.append("\n");
162b1b8bc3fSopenharmony_ci    str.append(tab);
163b1b8bc3fSopenharmony_ci    str.append("mtu_ = ");
164b1b8bc3fSopenharmony_ci    str.append(std::to_string(mtu_));
165b1b8bc3fSopenharmony_ci
166b1b8bc3fSopenharmony_ci    str.append("\n");
167b1b8bc3fSopenharmony_ci    str.append(tab);
168b1b8bc3fSopenharmony_ci    str.append("isHost_ = ");
169b1b8bc3fSopenharmony_ci    str.append(isHost_ ? "true" : "false");
170b1b8bc3fSopenharmony_ci
171b1b8bc3fSopenharmony_ci    str.append("\n");
172b1b8bc3fSopenharmony_ci    str.append(tab);
173b1b8bc3fSopenharmony_ci    str.append("hasGateway_ = ");
174b1b8bc3fSopenharmony_ci    str.append(hasGateway_ ? "true" : "false");
175b1b8bc3fSopenharmony_ci
176b1b8bc3fSopenharmony_ci    str.append("\n");
177b1b8bc3fSopenharmony_ci    str.append(tab);
178b1b8bc3fSopenharmony_ci    str.append("isDefaultRoute = ");
179b1b8bc3fSopenharmony_ci    str.append(isDefaultRoute_ ? "true" : "false");
180b1b8bc3fSopenharmony_ci
181b1b8bc3fSopenharmony_ci    return str;
182b1b8bc3fSopenharmony_ci}
183b1b8bc3fSopenharmony_ci} // namespace NetManagerStandard
184b1b8bc3fSopenharmony_ci} // namespace OHOS
185