ud3tn/include/bundle7/bundle7.h
Felix Walter 4bf6888a03 bundle7: Calculate ipn EID size using 64 bit integers
The node and service number are 64 bit unsigned integers. This fixes the
validation and EID serialized size calculation and adds appropriate
tests to the serializer unit tests.

Signed-off-by: Felix Walter <felix.walter@d3tn.com>
2022-11-21 09:41:03 +01:00

71 lines
1.9 KiB
C

// SPDX-License-Identifier: BSD-3-Clause OR Apache-2.0
#ifndef BUNDLE_V7_PARSER_H_INCLUDED
#define BUNDLE_V7_PARSER_H_INCLUDED
#include "ud3tn/bundle.h"
#include "ud3tn/result.h"
#include <inttypes.h>
#include <stddef.h>
/**
* Returns the number of bytes that will be required for the CBORepresentation
* of the passed unsigned integer.
*/
size_t bundle7_cbor_uint_sizeof(uint64_t num);
/**
* Returns the number of bytes that will be required for the CBORepresentation
* of the passed EID.
*/
size_t bundle7_eid_sizeof(const char *eid);
/**
* Converts the unified uD3TN flags into BPv7-bis protocol-compliant block
* processing flags.
*
* @return BPv7-bis bundle block processing flags
*/
uint16_t bundle7_convert_to_protocol_block_flags(
const struct bundle_block *block);
/**
* Returns the byte-length of the CBORepresentation of an extension block.
*/
size_t bundle7_block_get_size(struct bundle_block *block);
size_t bundle7_get_serialized_size(struct bundle *bundle);
size_t bundle7_get_serialized_size_without_payload(struct bundle *bundle);
/**
* Recalculates the length of the primary block stored in the
* "primary_block_length" field. You should call this function if you change
* something in the primary block.
*/
void bundle7_recalculate_primary_block_length(struct bundle *bundle);
/**
* Returns the minimal number of serialized bytes of the first fragment of the
* given bundle.
*
* The minimal fragment contains:
*
* - all extension blocks
* - minimal header for the payload block
*/
size_t bundle7_get_first_fragment_min_size(struct bundle *bundle);
/**
* Returns the minimal number of serialized bytes of the last fragment of the
* given bundle.
*
* The minimal fragment contains:
*
* - all extension blocks containing the "replicated in every fragment" flag
* - minimal header for the payload block
*/
size_t bundle7_get_last_fragment_min_size(struct bundle *bundle);
#endif // BUNDLE_V7_PARSER_H_INCLUDED