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