Line data Source code
1 : /* 2 : * 3 : * Copyright (c) 2021 Project CHIP Authors 4 : * All rights reserved. 5 : * 6 : * Licensed under the Apache License, Version 2.0 (the "License"); 7 : * you may not use this file except in compliance with the License. 8 : * You may obtain a copy of the License at 9 : * 10 : * http://www.apache.org/licenses/LICENSE-2.0 11 : * 12 : * Unless required by applicable law or agreed to in writing, software 13 : * distributed under the License is distributed on an "AS IS" BASIS, 14 : * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 : * See the License for the specific language governing permissions and 16 : * limitations under the License. 17 : */ 18 : 19 : #pragma once 20 : 21 : #include <app/StatusResponse.h> 22 : #include <system/SystemPacketBuffer.h> 23 : #include <system/TLVPacketBufferBackingStore.h> 24 : 25 : namespace chip { 26 : namespace app { 27 : 28 962 : static CHIP_ERROR InitWriterWithSpaceReserved(System::PacketBufferTLVWriter & aWriter, uint32_t aReserveSpace) 29 : { 30 962 : System::PacketBufferHandle msgBuf = System::PacketBufferHandle::New(kMaxSecureSduLengthBytes); 31 962 : VerifyOrReturnError(!msgBuf.IsNull(), CHIP_ERROR_NO_MEMORY); 32 962 : uint16_t reservedSize = 0; 33 : 34 962 : if (msgBuf->AvailableDataLength() > kMaxSecureSduLengthBytes) 35 : { 36 0 : reservedSize = static_cast<uint16_t>(msgBuf->AvailableDataLength() - kMaxSecureSduLengthBytes); 37 : } 38 : 39 962 : reservedSize = static_cast<uint16_t>(reservedSize + Crypto::CHIP_CRYPTO_AEAD_MIC_LENGTH_BYTES + aReserveSpace); 40 962 : aWriter.Init(std::move(msgBuf)); 41 962 : ReturnErrorOnFailure(aWriter.ReserveBuffer(reservedSize)); 42 962 : return CHIP_NO_ERROR; 43 962 : }; 44 : } // namespace app 45 : } // namespace chip