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 1096 : static CHIP_ERROR InitWriterWithSpaceReserved(System::PacketBufferTLVWriter & aWriter, uint32_t aReserveSpace)
29 : {
30 1096 : System::PacketBufferHandle msgBuf = System::PacketBufferHandle::New(kMaxSecureSduLengthBytes);
31 1096 : VerifyOrReturnError(!msgBuf.IsNull(), CHIP_ERROR_NO_MEMORY);
32 1096 : uint16_t reservedSize = 0;
33 :
34 1096 : if (msgBuf->AvailableDataLength() > kMaxSecureSduLengthBytes)
35 : {
36 0 : reservedSize = static_cast<uint16_t>(msgBuf->AvailableDataLength() - kMaxSecureSduLengthBytes);
37 : }
38 :
39 1096 : reservedSize = static_cast<uint16_t>(reservedSize + Crypto::CHIP_CRYPTO_AEAD_MIC_LENGTH_BYTES + aReserveSpace);
40 1096 : aWriter.Init(std::move(msgBuf));
41 1096 : ReturnErrorOnFailure(aWriter.ReserveBuffer(reservedSize));
42 1096 : return CHIP_NO_ERROR;
43 1096 : };
44 : } // namespace app
45 : } // namespace chip
|