LCOV - code coverage report
Current view: top level - lib/core - TLVBackingStore.h (source / functions) Hit Total Coverage
Test: lcov_final.info Lines: 1 2 50.0 %
Date: 2024-02-15 08:20:41 Functions: 1 3 33.3 %

          Line data    Source code
       1             : /*
       2             :  *
       3             :  *    Copyright (c) 2020-2023 Project CHIP Authors
       4             :  *    Copyright (c) 2013-2017 Nest Labs, Inc.
       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             : /**
      20             :  *    @file
      21             :  *      This file contains definitions for working with data encoded in CHIP TLV format.
      22             :  *
      23             :  *      CHIP TLV (Tag-Length-Value) is a generalized encoding method for simple structured data. It
      24             :  *      shares many properties with the commonly used JSON serialization format while being considerably
      25             :  *      more compact over the wire.
      26             :  */
      27             : 
      28             : #pragma once
      29             : 
      30             : #include "TLVCommon.h"
      31             : 
      32             : #include "TLVReader.h"
      33             : #include "TLVWriter.h"
      34             : 
      35             : /**
      36             :  * @namespace chip::TLV
      37             :  *
      38             :  * Definitions for working with data encoded in CHIP TLV format.
      39             :  *
      40             :  * CHIP TLV is a generalized encoding method for simple structured data. It shares many properties
      41             :  * with the commonly used JSON serialization format while being considerably more compact over the wire.
      42             :  */
      43             : 
      44             : namespace chip {
      45             : namespace TLV {
      46             : 
      47             : /**
      48             :  * Provides an interface for TLVReader or TLVWriter to use memory other than a simple contiguous buffer.
      49             :  */
      50             : class DLL_EXPORT TLVBackingStore
      51             : {
      52             : public:
      53       17063 :     virtual ~TLVBackingStore() {}
      54             :     /**
      55             :      * A function to provide a backing store's initial start position and data length to a reader.
      56             :      *
      57             :      * @param[in]       reader          A reference to the TLVReader object that is requesting input data.
      58             :      * @param[out]      bufStart        A reference to a data pointer. On exit, bufStart is expected to point
      59             :      *                                  to the first byte of TLV data to be parsed.
      60             :      * @param[out]      bufLen          A reference to an unsigned integer that the function must set to
      61             :      *                                  the number of TLV data bytes being returned.  If the end of the
      62             :      *                                  input TLV data has been reached, the function should set this value
      63             :      *                                  to 0.
      64             :      *
      65             :      * @retval #CHIP_NO_ERROR           If the function successfully produced TLV data.
      66             :      * @retval other                    Other CHIP or platform-specific error codes indicating that an error
      67             :      *                                  occurred preventing the function from producing the requested data.
      68             :      */
      69             :     virtual CHIP_ERROR OnInit(TLVReader & reader, const uint8_t *& bufStart, uint32_t & bufLen) = 0;
      70             : 
      71             :     /**
      72             :      * A function that can be used to retrieve additional TLV data to be parsed.
      73             :      *
      74             :      * When called, the function is expected to produce additional data for the reader to parse or signal
      75             :      * the reader that no more data is available.
      76             :      *
      77             :      * @param[in]       reader          A reference to the TLVReader object that is requesting input data.
      78             :      * @param[in,out]   bufStart        A reference to a data pointer. On entry to the function, @p bufStart
      79             :      *                                  points to one byte beyond the last TLV data byte consumed by the
      80             :      *                                  reader.  On exit, bufStart is expected to point to the first byte
      81             :      *                                  of new TLV data to be parsed.  The new pointer value can be within
      82             :      *                                  the same buffer as the previously consumed data, or it can point
      83             :      *                                  to an entirely new buffer.
      84             :      * @param[out]      bufLen          A reference to an unsigned integer that the function must set to
      85             :      *                                  the number of TLV data bytes being returned.  If the end of the
      86             :      *                                  input TLV data has been reached, the function should set this value
      87             :      *                                  to 0.
      88             :      *
      89             :      * @retval #CHIP_NO_ERROR           If the function successfully produced more TLV data, or the end of
      90             :      *                                  the input data was reached (@p bufLen should be set to 0 in this case).
      91             :      * @retval other                    Other CHIP or platform-specific error codes indicating that an error
      92             :      *                                  occurred preventing the function from producing the requested data.
      93             :      */
      94             :     virtual CHIP_ERROR GetNextBuffer(TLVReader & reader, const uint8_t *& bufStart, uint32_t & bufLen) = 0;
      95             : 
      96             :     /**
      97             :      * A function to provide a backing store's initial start position and data length to a writer.
      98             :      *
      99             :      * @param[in]       writer          A reference to the TLVWriter object that is requesting new buffer
     100             :      *                                  space.
     101             :      * @param[out]      bufStart        A reference to a data pointer. On exit, @p bufStart is expected to
     102             :      *                                  point to the beginning of the new output buffer.
     103             :      * @param[out]      bufLen          A reference to an unsigned integer. On exit, @p bufLen is expected
     104             :      *                                  to contain the maximum number of bytes that can be written to the
     105             :      *                                  new output buffer.
     106             :      *
     107             :      * @retval #CHIP_NO_ERROR           If the function was able to supply buffer space for the writer.
     108             :      * @retval other                    Other CHIP or platform-specific error codes indicating that an error
     109             :      *                                  occurred preventing the function from producing buffer space.
     110             :      */
     111             :     virtual CHIP_ERROR OnInit(TLVWriter & writer, uint8_t *& bufStart, uint32_t & bufLen) = 0;
     112             : 
     113             :     /**
     114             :      * A function that supplies new output buffer space to a TLVWriter.
     115             :      *
     116             :      * The function is expected to return a pointer to a memory location where new data should be written,
     117             :      * along with an associated maximum length. The function can supply write space either by allocating
     118             :      * a new buffer to hold the data or by clearing out previously written data from an existing buffer.
     119             :      *
     120             :      * @param[in]       writer          A reference to the TLVWriter object that is requesting new buffer
     121             :      *                                  space.
     122             :      * @param[in,out]   bufStart        A reference to a data pointer. On entry to the function, @p bufStart
     123             :      *                                  points the beginning of the current output buffer.  On exit, @p bufStart
     124             :      *                                  is expected to point to the beginning of the new output buffer.
     125             :      *                                  The new pointer value can be the same as the previous value (e.g.
     126             :      *                                  if the function copied the existing data elsewhere), or it can point
     127             :      *                                  to an entirely new location.
     128             :      * @param[in,out]   bufLen          A reference to an unsigned integer. On entry to the function,
     129             :      *                                  @p bufLen contains the number of byte of @em unused space in the
     130             :      *                                  current buffer.  On exit, @p bufLen is expected to contain the maximum
     131             :      *                                  number of bytes that can be written to the new output buffer.
     132             :      *
     133             :      * @retval #CHIP_NO_ERROR          If the function was able to supply more buffer space for the writer.
     134             :      * @retval other                    Other CHIP or platform-specific error codes indicating that an error
     135             :      *                                  occurred preventing the function from producing additional buffer
     136             :      *                                  space.
     137             :      */
     138             :     virtual CHIP_ERROR GetNewBuffer(TLVWriter & writer, uint8_t *& bufStart, uint32_t & bufLen) = 0;
     139             : 
     140             :     /**
     141             :      * A function used to perform finalization of the output from a TLVWriter object.
     142             :      *
     143             :      * Functions of this type are called when a TLVWriter's Finalize() method is called. The function is
     144             :      * expected to perform any necessary clean-up or finalization related to consuming the output of the
     145             :      * writer object. Examples of this include such things as recording the final length of the encoding,
     146             :      * or closing a file descriptor.
     147             :      *
     148             :      * @param[in]       writer          A reference to the TLVWriter object that is being finalized.
     149             :      * @param[in,out]   bufStart        A pointer to the beginning of the current (and final) output buffer.
     150             :      * @param[in,out]   bufLen          The number of bytes contained in the buffer pointed to by @p bufStart.
     151             :      *
     152             :      * @retval #CHIP_NO_ERROR           If finalization was successful.
     153             :      * @retval other                    Other CHIP or platform-specific error codes indicating that an error
     154             :      *                                  occurred during finalization.
     155             :      *
     156             :      */
     157             :     virtual CHIP_ERROR FinalizeBuffer(TLVWriter & writer, uint8_t * bufStart, uint32_t bufLen) = 0;
     158             : 
     159             :     /**
     160             :      * Returns whether call to GetNewBuffer will always fail.
     161             :      *
     162             :      * There are some implementations of TLVBackingStore that provide some level of utility, such as access to pool
     163             :      * of particular kind of buffer and/or reserving space for headers. Some implementation allow the caller to
     164             :      * specify that they only intend to use a single buffer. It is useful for TLVWriter to know if this is the case.
     165             :      *
     166             :      */
     167           0 :     virtual bool GetNewBufferWillAlwaysFail() { return false; }
     168             : };
     169             : 
     170             : } // namespace TLV
     171             : } // namespace chip

Generated by: LCOV version 1.14