15ccb8f90Sopenharmony_ci/* 25ccb8f90Sopenharmony_ci * Copyright (C) 2022-2023 Huawei Device Co., Ltd. 35ccb8f90Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 45ccb8f90Sopenharmony_ci * you may not use this file except in compliance with the License. 55ccb8f90Sopenharmony_ci * You may obtain a copy of the License at 65ccb8f90Sopenharmony_ci * 75ccb8f90Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 85ccb8f90Sopenharmony_ci * 95ccb8f90Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 105ccb8f90Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 115ccb8f90Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 125ccb8f90Sopenharmony_ci * See the License for the specific language governing permissions and 135ccb8f90Sopenharmony_ci * limitations under the License. 145ccb8f90Sopenharmony_ci */ 155ccb8f90Sopenharmony_ci 165ccb8f90Sopenharmony_ci#include "message_parcel.h" 175ccb8f90Sopenharmony_ci 185ccb8f90Sopenharmony_ci#include <sys/mman.h> 195ccb8f90Sopenharmony_ci#include <unistd.h> 205ccb8f90Sopenharmony_ci 215ccb8f90Sopenharmony_ci#include "iremote_object.h" 225ccb8f90Sopenharmony_ci 235ccb8f90Sopenharmony_cinamespace { 245ccb8f90Sopenharmony_cistatic std::u16string g_interfaceTokenName {}; 255ccb8f90Sopenharmony_ci} // namespace 265ccb8f90Sopenharmony_ci 275ccb8f90Sopenharmony_cinamespace OHOS { 285ccb8f90Sopenharmony_ciMessageParcel::MessageParcel() 295ccb8f90Sopenharmony_ci : Parcel(), writeRawDataFd_(-1), readRawDataFd_(-1), 305ccb8f90Sopenharmony_ci kernelMappedWrite_(nullptr), kernelMappedRead_(nullptr), 315ccb8f90Sopenharmony_ci rawData_(nullptr), rawDataSize_(0) 325ccb8f90Sopenharmony_ci{ 335ccb8f90Sopenharmony_ci} 345ccb8f90Sopenharmony_ci 355ccb8f90Sopenharmony_ciMessageParcel::MessageParcel(Allocator* allocator) 365ccb8f90Sopenharmony_ci : Parcel(allocator), writeRawDataFd_(-1), readRawDataFd_(-1), 375ccb8f90Sopenharmony_ci kernelMappedWrite_(nullptr), kernelMappedRead_(nullptr), 385ccb8f90Sopenharmony_ci rawData_(nullptr), rawDataSize_(0) 395ccb8f90Sopenharmony_ci{ 405ccb8f90Sopenharmony_ci} 415ccb8f90Sopenharmony_ci 425ccb8f90Sopenharmony_ciMessageParcel::~MessageParcel() 435ccb8f90Sopenharmony_ci{ 445ccb8f90Sopenharmony_ci if (kernelMappedWrite_ != nullptr) { 455ccb8f90Sopenharmony_ci ::munmap(kernelMappedWrite_, rawDataSize_); 465ccb8f90Sopenharmony_ci kernelMappedWrite_ = nullptr; 475ccb8f90Sopenharmony_ci } 485ccb8f90Sopenharmony_ci if (kernelMappedRead_ != nullptr) { 495ccb8f90Sopenharmony_ci ::munmap(kernelMappedRead_, rawDataSize_); 505ccb8f90Sopenharmony_ci kernelMappedRead_ = nullptr; 515ccb8f90Sopenharmony_ci } 525ccb8f90Sopenharmony_ci 535ccb8f90Sopenharmony_ci if (readRawDataFd_ > 0) { 545ccb8f90Sopenharmony_ci ::close(readRawDataFd_); 555ccb8f90Sopenharmony_ci readRawDataFd_ = -1; 565ccb8f90Sopenharmony_ci } 575ccb8f90Sopenharmony_ci if (writeRawDataFd_ > 0) { 585ccb8f90Sopenharmony_ci ::close(writeRawDataFd_); 595ccb8f90Sopenharmony_ci writeRawDataFd_ = -1; 605ccb8f90Sopenharmony_ci } 615ccb8f90Sopenharmony_ci 625ccb8f90Sopenharmony_ci ClearFileDescriptor(); 635ccb8f90Sopenharmony_ci 645ccb8f90Sopenharmony_ci rawData_ = nullptr; 655ccb8f90Sopenharmony_ci rawDataSize_ = 0; 665ccb8f90Sopenharmony_ci} 675ccb8f90Sopenharmony_ci 685ccb8f90Sopenharmony_ci#ifndef CONFIG_IPC_SINGLE 695ccb8f90Sopenharmony_cibool MessageParcel::WriteDBinderProxy(const sptr<IRemoteObject>& object, uint32_t handle, uint64_t stubIndex) 705ccb8f90Sopenharmony_ci{ 715ccb8f90Sopenharmony_ci (void)object; 725ccb8f90Sopenharmony_ci (void)handle; 735ccb8f90Sopenharmony_ci (void)stubIndex; 745ccb8f90Sopenharmony_ci return false; 755ccb8f90Sopenharmony_ci} 765ccb8f90Sopenharmony_ci#endif 775ccb8f90Sopenharmony_ci 785ccb8f90Sopenharmony_cibool MessageParcel::WriteRemoteObject(const sptr<IRemoteObject>& object) 795ccb8f90Sopenharmony_ci{ 805ccb8f90Sopenharmony_ci (void)object; 815ccb8f90Sopenharmony_ci return false; 825ccb8f90Sopenharmony_ci} 835ccb8f90Sopenharmony_ci 845ccb8f90Sopenharmony_cisptr<IRemoteObject> MessageParcel::ReadRemoteObject() 855ccb8f90Sopenharmony_ci{ 865ccb8f90Sopenharmony_ci return nullptr; 875ccb8f90Sopenharmony_ci} 885ccb8f90Sopenharmony_ci 895ccb8f90Sopenharmony_cibool MessageParcel::WriteFileDescriptor(int fd) 905ccb8f90Sopenharmony_ci{ 915ccb8f90Sopenharmony_ci (void)fd; 925ccb8f90Sopenharmony_ci return false; 935ccb8f90Sopenharmony_ci} 945ccb8f90Sopenharmony_ci 955ccb8f90Sopenharmony_ciint MessageParcel::ReadFileDescriptor() 965ccb8f90Sopenharmony_ci{ 975ccb8f90Sopenharmony_ci return -1; 985ccb8f90Sopenharmony_ci} 995ccb8f90Sopenharmony_ci 1005ccb8f90Sopenharmony_civoid MessageParcel::ClearFileDescriptor() {} 1015ccb8f90Sopenharmony_ci 1025ccb8f90Sopenharmony_cibool MessageParcel::ContainFileDescriptors() const 1035ccb8f90Sopenharmony_ci{ 1045ccb8f90Sopenharmony_ci return false; 1055ccb8f90Sopenharmony_ci} 1065ccb8f90Sopenharmony_ci 1075ccb8f90Sopenharmony_cibool MessageParcel::WriteInterfaceToken(std::u16string name) 1085ccb8f90Sopenharmony_ci{ 1095ccb8f90Sopenharmony_ci#ifdef MOCK_WRITE_INTERFACE_TOKEN_RETURN_TRUE 1105ccb8f90Sopenharmony_ci g_interfaceTokenName = name; 1115ccb8f90Sopenharmony_ci return true; 1125ccb8f90Sopenharmony_ci#else 1135ccb8f90Sopenharmony_ci (void)name; 1145ccb8f90Sopenharmony_ci return false; 1155ccb8f90Sopenharmony_ci#endif 1165ccb8f90Sopenharmony_ci} 1175ccb8f90Sopenharmony_ci 1185ccb8f90Sopenharmony_cistd::u16string MessageParcel::ReadInterfaceToken() 1195ccb8f90Sopenharmony_ci{ 1205ccb8f90Sopenharmony_ci#ifdef MOCK_WRITE_INTERFACE_TOKEN_RETURN_TRUE 1215ccb8f90Sopenharmony_ci return g_interfaceTokenName; 1225ccb8f90Sopenharmony_ci#else 1235ccb8f90Sopenharmony_ci return ReadString16(); 1245ccb8f90Sopenharmony_ci#endif 1255ccb8f90Sopenharmony_ci} 1265ccb8f90Sopenharmony_ci 1275ccb8f90Sopenharmony_cibool MessageParcel::WriteRawData(const void* data, size_t size) 1285ccb8f90Sopenharmony_ci{ 1295ccb8f90Sopenharmony_ci (void)data; 1305ccb8f90Sopenharmony_ci (void)size; 1315ccb8f90Sopenharmony_ci return false; 1325ccb8f90Sopenharmony_ci} 1335ccb8f90Sopenharmony_ci 1345ccb8f90Sopenharmony_cibool MessageParcel::RestoreRawData(std::shared_ptr<char> rawData, size_t size) 1355ccb8f90Sopenharmony_ci{ 1365ccb8f90Sopenharmony_ci (void)rawData; 1375ccb8f90Sopenharmony_ci (void)size; 1385ccb8f90Sopenharmony_ci return false; 1395ccb8f90Sopenharmony_ci} 1405ccb8f90Sopenharmony_ci 1415ccb8f90Sopenharmony_ciconst void* MessageParcel::ReadRawData(size_t size) 1425ccb8f90Sopenharmony_ci{ 1435ccb8f90Sopenharmony_ci (void)size; 1445ccb8f90Sopenharmony_ci return nullptr; 1455ccb8f90Sopenharmony_ci} 1465ccb8f90Sopenharmony_ci 1475ccb8f90Sopenharmony_ciconst void* MessageParcel::GetRawData() const 1485ccb8f90Sopenharmony_ci{ 1495ccb8f90Sopenharmony_ci return nullptr; 1505ccb8f90Sopenharmony_ci} 1515ccb8f90Sopenharmony_ci 1525ccb8f90Sopenharmony_cisize_t MessageParcel::GetRawDataSize() const 1535ccb8f90Sopenharmony_ci{ 1545ccb8f90Sopenharmony_ci return rawDataSize_; 1555ccb8f90Sopenharmony_ci} 1565ccb8f90Sopenharmony_ci 1575ccb8f90Sopenharmony_cisize_t MessageParcel::GetRawDataCapacity() const 1585ccb8f90Sopenharmony_ci{ 1595ccb8f90Sopenharmony_ci return MAX_RAWDATA_SIZE; 1605ccb8f90Sopenharmony_ci} 1615ccb8f90Sopenharmony_ci 1625ccb8f90Sopenharmony_civoid MessageParcel::WriteNoException() 1635ccb8f90Sopenharmony_ci{ 1645ccb8f90Sopenharmony_ci WriteInt32(0); 1655ccb8f90Sopenharmony_ci} 1665ccb8f90Sopenharmony_ci 1675ccb8f90Sopenharmony_ciint32_t MessageParcel::ReadException() 1685ccb8f90Sopenharmony_ci{ 1695ccb8f90Sopenharmony_ci return ReadInt32(); 1705ccb8f90Sopenharmony_ci} 1715ccb8f90Sopenharmony_ci 1725ccb8f90Sopenharmony_cibool MessageParcel::WriteAshmem(sptr<Ashmem> ashmem) 1735ccb8f90Sopenharmony_ci{ 1745ccb8f90Sopenharmony_ci (void)ashmem; 1755ccb8f90Sopenharmony_ci return false; 1765ccb8f90Sopenharmony_ci} 1775ccb8f90Sopenharmony_ci 1785ccb8f90Sopenharmony_cisptr<Ashmem> MessageParcel::ReadAshmem() 1795ccb8f90Sopenharmony_ci{ 1805ccb8f90Sopenharmony_ci return nullptr; 1815ccb8f90Sopenharmony_ci} 1825ccb8f90Sopenharmony_ci 1835ccb8f90Sopenharmony_cibool MessageParcel::Append(MessageParcel& data) 1845ccb8f90Sopenharmony_ci{ 1855ccb8f90Sopenharmony_ci (void)data; 1865ccb8f90Sopenharmony_ci return false; 1875ccb8f90Sopenharmony_ci} 1885ccb8f90Sopenharmony_ci} // namespace OHOS 189