1/* 2 * Copyright (c) 2022 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 "parcel.h" 17 18namespace OHOS { 19 20static const size_t DEFAULT_CPACITY = 204800; // 200K 21 22Parcelable::Parcelable() : Parcelable(false) {} 23 24Parcelable::Parcelable(bool asRemote) 25{ 26 asRemote_ = asRemote; 27 behavior_ = 0; 28} 29 30Parcel::Parcel(Allocator* allocator) 31{ 32 if (allocator != nullptr) { 33 allocator_ = allocator; 34 } else { 35 allocator_ = new DefaultAllocator(); 36 } 37 38 writeCursor_ = 0; 39 readCursor_ = 0; 40 41 data_ = nullptr; 42 dataSize_ = 0; 43 dataCapacity_ = 0; 44 45 maxDataCapacity_ = DEFAULT_CPACITY; 46 objectOffsets_ = nullptr; 47 objectCursor_ = 0; 48 objectsCapacity_ = 0; 49} 50 51Parcel::Parcel() : Parcel(new DefaultAllocator()) {} 52 53Parcel::~Parcel() 54{ 55 FlushBuffer(); 56 delete allocator_; 57} 58 59size_t Parcel::GetWritableBytes() const 60{ 61 return 0; 62} 63 64size_t Parcel::GetReadableBytes() const 65{ 66 return 0; 67} 68 69size_t Parcel::CalcNewCapacity(size_t minNewCapacity) 70{ 71 (void)minNewCapacity; 72 return 0; 73} 74 75bool Parcel::EnsureWritableCapacity(size_t desireCapacity) 76{ 77 (void)desireCapacity; 78 return false; 79} 80 81size_t Parcel::GetDataSize() const 82{ 83 return dataSize_; 84} 85 86uintptr_t Parcel::GetData() const 87{ 88 return reinterpret_cast<uintptr_t>(data_); 89} 90 91binder_size_t Parcel::GetObjectOffsets() const 92{ 93 return reinterpret_cast<binder_size_t>(objectOffsets_); 94} 95 96size_t Parcel::GetOffsetsSize() const 97{ 98 return objectCursor_; 99} 100 101size_t Parcel::GetDataCapacity() const 102{ 103 return dataCapacity_; 104} 105 106bool Parcel::SetMaxCapacity(size_t maxCapacity) 107{ 108 (void)maxCapacity; 109 return false; 110} 111 112bool Parcel::SetAllocator(Allocator* allocator) 113{ 114 (void)allocator; 115 return false; 116} 117 118bool Parcel::CheckOffsets() 119{ 120 return false; 121} 122 123void Parcel::InjectOffsets(binder_size_t offsets, size_t offsetSize) 124{ 125 (void)offsets; 126 (void)offsetSize; 127} 128 129void Parcel::FlushBuffer() 130{ 131 if (allocator_ == nullptr) { 132 return; 133 } 134 135 if (data_ != nullptr) { 136 allocator_->Dealloc(data_); 137 dataSize_ = 0; 138 writeCursor_ = 0; 139 readCursor_ = 0; 140 dataCapacity_ = 0; 141 data_ = nullptr; 142 } 143 144 if (objectOffsets_) { 145 objectHolder_.clear(); 146 free(objectOffsets_); 147 objectCursor_ = 0; 148 objectOffsets_ = nullptr; 149 objectsCapacity_ = 0; 150 } 151} 152 153bool Parcel::SetDataCapacity(size_t newCapacity) 154{ 155 (void)newCapacity; 156 return false; 157} 158 159bool Parcel::SetDataSize(size_t dataSize) 160{ 161 (void)dataSize; 162 return false; 163} 164 165bool Parcel::WriteDataBytes(const void* data, size_t size) 166{ 167 (void)data; 168 (void)size; 169 return false; 170} 171 172void Parcel::WritePadBytes(size_t padSize) 173{ 174 (void)padSize; 175} 176 177bool Parcel::WriteBuffer(const void* data, size_t size) 178{ 179 (void)data; 180 (void)size; 181 return false; 182} 183 184bool Parcel::WriteBufferAddTerminator(const void* data, size_t size, size_t typeSize) 185{ 186 (void)data; 187 (void)size; 188 (void)typeSize; 189 return false; 190} 191 192bool Parcel::WriteUnpadBuffer(const void* data, size_t size) 193{ 194 return WriteBuffer(data, size); 195} 196 197template <typename T> 198bool Parcel::Write(T value) 199{ 200 (void)value; 201 return false; 202} 203 204bool Parcel::WriteBool(bool value) 205{ 206 return Write<int32_t>(static_cast<int32_t>(value)); 207} 208 209bool Parcel::WriteBoolUnaligned(bool value) 210{ 211 return Write<bool>(value); 212} 213 214bool Parcel::WriteInt8(int8_t value) 215{ 216 return Write<int32_t>(static_cast<int32_t>(value)); 217} 218 219bool Parcel::WriteInt8Unaligned(int8_t value) 220{ 221 return Write<int8_t>(value); 222} 223 224bool Parcel::WriteInt16(int16_t value) 225{ 226 return Write<int32_t>(static_cast<int32_t>(value)); 227} 228 229bool Parcel::WriteInt16Unaligned(int16_t value) 230{ 231 return Write<int16_t>(value); 232} 233 234bool Parcel::WriteInt32(int32_t value) 235{ 236 return Write<int32_t>(value); 237} 238 239bool Parcel::WriteInt64(int64_t value) 240{ 241 return Write<int64_t>(value); 242} 243 244bool Parcel::WriteUint8(uint8_t value) 245{ 246 return Write<uint32_t>(static_cast<uint32_t>(value)); 247} 248 249bool Parcel::WriteUint8Unaligned(uint8_t value) 250{ 251 return Write<uint8_t>(value); 252} 253 254bool Parcel::WriteUint16(uint16_t value) 255{ 256 return Write<uint32_t>(static_cast<uint32_t>(value)); 257} 258 259bool Parcel::WriteUint16Unaligned(uint16_t value) 260{ 261 return Write<uint16_t>(value); 262} 263 264bool Parcel::WriteUint32(uint32_t value) 265{ 266 return Write<uint32_t>(value); 267} 268 269bool Parcel::WriteUint64(uint64_t value) 270{ 271 return Write<uint64_t>(value); 272} 273 274bool Parcel::WriteFloat(float value) 275{ 276 return Write<float>(value); 277} 278 279bool Parcel::WriteDouble(double value) 280{ 281 return Write<double>(value); 282} 283 284bool Parcel::WritePointer(uintptr_t value) 285{ 286 return Write<binder_uintptr_t>(value); 287} 288 289bool Parcel::WriteCString(const char* value) 290{ 291 (void)value; 292 return false; 293} 294 295bool Parcel::WriteString(const std::string& value) 296{ 297 (void)value; 298 return false; 299} 300 301bool Parcel::WriteString16(const std::u16string& value) 302{ 303 (void)value; 304 return false; 305} 306 307bool Parcel::WriteString16WithLength(const char16_t* value, size_t len) 308{ 309 (void)value; 310 (void)len; 311 return false; 312} 313 314bool Parcel::WriteString8WithLength(const char* value, size_t len) 315{ 316 (void)value; 317 (void)len; 318 return false; 319} 320 321bool Parcel::EnsureObjectsCapacity() 322{ 323 return false; 324} 325 326bool Parcel::WriteObjectOffset(binder_size_t offset) 327{ 328 (void)offset; 329 return false; 330} 331 332bool Parcel::WriteRemoteObject(const Parcelable* object) 333{ 334 (void)object; 335 return false; 336} 337 338bool Parcel::WriteParcelable(const Parcelable* object) 339{ 340 (void)object; 341 return false; 342} 343 344bool Parcel::WriteStrongParcelable(const sptr<Parcelable>& object) 345{ 346 (void)object; 347 return false; 348} 349 350template <typename T> 351bool Parcel::Read(T& value) 352{ 353 (void)value; 354 return false; 355} 356 357template <typename T> 358T Parcel::Read() 359{ 360 return 0; 361} 362 363bool Parcel::ParseFrom(uintptr_t data, size_t size) 364{ 365 (void)data; 366 (void)size; 367 return false; 368} 369 370const uint8_t* Parcel::ReadBuffer(size_t length) 371{ 372 (void)length; 373 return nullptr; 374} 375 376const uint8_t* Parcel::ReadUnpadBuffer(size_t length) 377{ 378 (void)length; 379 return nullptr; 380} 381 382void Parcel::SkipBytes(size_t bytes) 383{ 384 (void)bytes; 385} 386 387size_t Parcel::GetReadPosition() 388{ 389 return readCursor_; 390} 391 392bool Parcel::RewindRead(size_t newPosition) 393{ 394 (void)newPosition; 395 return false; 396} 397 398size_t Parcel::GetWritePosition() 399{ 400 return writeCursor_; 401} 402 403bool Parcel::RewindWrite(size_t newPosition) 404{ 405 (void)newPosition; 406 return false; 407} 408 409bool Parcel::ReadBool() 410{ 411 int32_t temp = Read<int32_t>(); 412 return (temp != 0); 413} 414 415bool Parcel::ReadBoolUnaligned() 416{ 417 return Read<bool>(); 418} 419 420int8_t Parcel::ReadInt8() 421{ 422 int32_t temp = Read<int32_t>(); 423 return static_cast<int8_t>(temp); 424} 425 426int16_t Parcel::ReadInt16() 427{ 428 int32_t temp = Read<int32_t>(); 429 return static_cast<int16_t>(temp); 430} 431 432int32_t Parcel::ReadInt32() 433{ 434 return Read<int32_t>(); 435} 436 437int64_t Parcel::ReadInt64() 438{ 439 return Read<int64_t>(); 440} 441 442uint8_t Parcel::ReadUint8() 443{ 444 uint32_t temp = Read<uint32_t>(); 445 return static_cast<uint8_t>(temp); 446} 447 448uint16_t Parcel::ReadUint16() 449{ 450 uint32_t temp = Read<uint32_t>(); 451 return static_cast<uint16_t>(temp); 452} 453 454uint32_t Parcel::ReadUint32() 455{ 456 return Read<uint32_t>(); 457} 458 459uint64_t Parcel::ReadUint64() 460{ 461 return Read<uint64_t>(); 462} 463 464float Parcel::ReadFloat() 465{ 466 return Read<float>(); 467} 468 469double Parcel::ReadDouble() 470{ 471 return Read<double>(); 472} 473 474template <typename T> 475bool Parcel::ReadPadded(T& value) 476{ 477 (void)value; 478 return false; 479} 480 481bool Parcel::ReadBool(bool& value) 482{ 483 return ReadPadded<bool>(value); 484} 485 486bool Parcel::ReadInt8(int8_t& value) 487{ 488 return ReadPadded<int8_t>(value); 489} 490 491bool Parcel::ReadInt8Unaligned(int8_t& value) 492{ 493 return Read<int8_t>(value); 494} 495 496bool Parcel::ReadInt16(int16_t& value) 497{ 498 return ReadPadded<int16_t>(value); 499} 500 501bool Parcel::ReadInt16Unaligned(int16_t& value) 502{ 503 return Read<int16_t>(value); 504} 505 506bool Parcel::ReadInt32(int32_t& value) 507{ 508 return Read<int32_t>(value); 509} 510 511bool Parcel::ReadInt64(int64_t& value) 512{ 513 return Read<int64_t>(value); 514} 515 516bool Parcel::ReadUint8(uint8_t& value) 517{ 518 return ReadPadded<uint8_t>(value); 519} 520 521bool Parcel::ReadUint8Unaligned(uint8_t& value) 522{ 523 return Read<uint8_t>(value); 524} 525 526bool Parcel::ReadUint16(uint16_t& value) 527{ 528 return ReadPadded<uint16_t>(value); 529} 530 531bool Parcel::ReadUint16Unaligned(uint16_t& value) 532{ 533 return Read<uint16_t>(value); 534} 535 536bool Parcel::ReadUint32(uint32_t& value) 537{ 538 return Read<uint32_t>(value); 539} 540 541bool Parcel::ReadUint64(uint64_t& value) 542{ 543 return Read<uint64_t>(value); 544} 545 546bool Parcel::ReadFloat(float& value) 547{ 548 return Read<float>(value); 549} 550 551bool Parcel::ReadDouble(double& value) 552{ 553 return Read<double>(value); 554} 555 556uintptr_t Parcel::ReadPointer() 557{ 558 return Read<binder_uintptr_t>(); 559} 560 561const char* Parcel::ReadCString() 562{ 563 return nullptr; 564} 565 566const std::string Parcel::ReadString() 567{ 568 return ""; 569} 570 571bool Parcel::ReadString(std::string& value) 572{ 573 (void)value; 574 return false; 575} 576 577const std::u16string Parcel::ReadString16() 578{ 579#ifndef MOCK_READSTRING_DESCRIPTIR 580 std::u16string descriptor = u"ohos.powermgr.IDisplayPowerCallback"; 581 return descriptor; 582#else 583 return std::u16string(); 584#endif 585} 586 587bool Parcel::ReadString16(std::u16string& value) 588{ 589 (void)value; 590 return false; 591} 592 593const std::u16string Parcel::ReadString16WithLength(int32_t& readLength) 594{ 595 (void)readLength; 596 return std::u16string(); 597} 598 599const std::string Parcel::ReadString8WithLength(int32_t& readLength) 600{ 601 (void)readLength; 602 return std::string(); 603} 604 605template <typename T1, typename T2> 606bool Parcel::WriteVector(const std::vector<T1>& val, bool (Parcel::*Write)(T2)) 607{ 608 (void)val; 609 return false; 610} 611 612bool Parcel::WriteBoolVector(const std::vector<bool>& val) 613{ 614 return WriteVector(val, &Parcel::WriteBool); 615} 616 617bool Parcel::WriteInt8Vector(const std::vector<int8_t>& val) 618{ 619 return WriteVector(val, &Parcel::WriteInt8Unaligned); 620} 621 622bool Parcel::WriteInt16Vector(const std::vector<int16_t>& val) 623{ 624 return WriteVector(val, &Parcel::WriteInt16); 625} 626 627bool Parcel::WriteInt32Vector(const std::vector<int32_t>& val) 628{ 629 return WriteVector(val, &Parcel::WriteInt32); 630} 631 632bool Parcel::WriteInt64Vector(const std::vector<int64_t>& val) 633{ 634 return WriteVector(val, &Parcel::WriteInt64); 635} 636 637bool Parcel::WriteUInt8Vector(const std::vector<uint8_t>& val) 638{ 639 return WriteVector(val, &Parcel::WriteUint8Unaligned); 640} 641 642bool Parcel::WriteUInt16Vector(const std::vector<uint16_t>& val) 643{ 644 return WriteVector(val, &Parcel::WriteUint16Unaligned); 645} 646 647bool Parcel::WriteUInt32Vector(const std::vector<uint32_t>& val) 648{ 649 return WriteVector(val, &Parcel::WriteUint32); 650} 651 652bool Parcel::WriteUInt64Vector(const std::vector<uint64_t>& val) 653{ 654 return WriteVector(val, &Parcel::WriteUint64); 655} 656 657bool Parcel::WriteFloatVector(const std::vector<float>& val) 658{ 659 return WriteVector(val, &Parcel::WriteFloat); 660} 661 662bool Parcel::WriteDoubleVector(const std::vector<double>& val) 663{ 664 return WriteVector(val, &Parcel::WriteDouble); 665} 666 667bool Parcel::WriteStringVector(const std::vector<std::string>& val) 668{ 669 return WriteVector(val, &Parcel::WriteString); 670} 671 672bool Parcel::WriteString16Vector(const std::vector<std::u16string>& val) 673{ 674 return WriteVector(val, &Parcel::WriteString16); 675} 676 677template <typename T> 678bool Parcel::ReadVector(std::vector<T>* val, bool (Parcel::*Read)(T&)) 679{ 680 (void)val; 681 return false; 682} 683 684bool Parcel::ReadBoolVector(std::vector<bool>* val) 685{ 686 (void)val; 687 return false; 688} 689 690bool Parcel::ReadInt8Vector(std::vector<int8_t>* val) 691{ 692 return ReadVector(val, &Parcel::ReadInt8Unaligned); 693} 694 695bool Parcel::ReadInt16Vector(std::vector<int16_t>* val) 696{ 697 return ReadVector(val, &Parcel::ReadInt16); 698} 699 700bool Parcel::ReadInt32Vector(std::vector<int32_t>* val) 701{ 702 return ReadVector(val, &Parcel::ReadInt32); 703} 704 705bool Parcel::ReadInt64Vector(std::vector<int64_t>* val) 706{ 707 return ReadVector(val, &Parcel::ReadInt64); 708} 709 710bool Parcel::ReadUInt8Vector(std::vector<uint8_t>* val) 711{ 712 return ReadVector(val, &Parcel::ReadUint8Unaligned); 713} 714 715bool Parcel::ReadUInt16Vector(std::vector<uint16_t>* val) 716{ 717 return ReadVector(val, &Parcel::ReadUint16Unaligned); 718} 719 720bool Parcel::ReadUInt32Vector(std::vector<uint32_t>* val) 721{ 722 return ReadVector(val, &Parcel::ReadUint32); 723} 724 725bool Parcel::ReadUInt64Vector(std::vector<uint64_t>* val) 726{ 727 return ReadVector(val, &Parcel::ReadUint64); 728} 729 730bool Parcel::ReadFloatVector(std::vector<float>* val) 731{ 732 return ReadVector(val, &Parcel::ReadFloat); 733} 734 735bool Parcel::ReadDoubleVector(std::vector<double>* val) 736{ 737 return ReadVector(val, &Parcel::ReadDouble); 738} 739 740bool Parcel::ReadStringVector(std::vector<std::string>* val) 741{ 742 (void)val; 743 return false; 744} 745 746bool Parcel::ReadString16Vector(std::vector<std::u16string>* val) 747{ 748 (void)val; 749 return false; 750} 751} // namespace OHOS 752