Files
qt6-migration-pipeline/external/tmsif/include/dds/ddsi/ddsi_plist.h
T
2026-10-23 16:13:31 +00:00

184 lines
5.0 KiB
C

// Copyright(c) 2006 to 2022 ZettaScale Technology and others
//
// This program and the accompanying materials are made available under the
// terms of the Eclipse Public License v. 2.0 which is available at
// http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
// v. 1.0 which is available at
// http://www.eclipse.org/org/documents/edl-v10.php.
//
// SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
#ifndef DDSI_PLIST_H
#define DDSI_PLIST_H
#include "dds/ddsrt/bswap.h"
#include "dds/ddsi/ddsi_feature_check.h"
#include "dds/ddsi/ddsi_xqos.h"
#include "dds/ddsi/ddsi_keyhash.h"
#include "dds/ddsi/ddsi_tran.h" /* FIXME: eliminate */
#include "dds/ddsi/ddsi_protocol.h"
#include "dds/ddsi/ddsi_guid.h"
#if defined (__cplusplus)
extern "C" {
#endif
/* For locators one could patch the received message data to create
singly-linked lists (parameter header -> offset of next entry in
list relative to current), allowing aliasing of the data. But that
requires modifying the data. For string sequences the length does
the same thing. */
struct ddsi_locators_one {
struct ddsi_locators_one *next;
ddsi_locator_t loc;
};
typedef struct ddsi_locators {
uint32_t n;
struct ddsi_locators_one *first;
struct ddsi_locators_one *last;
} ddsi_locators_t;
#ifdef DDS_HAS_SECURITY
typedef struct ddsi_tag {
char *name;
char *value;
} ddsi_tag_t;
typedef struct ddsi_tagseq {
uint32_t n;
ddsi_tag_t *tags;
} ddsi_tagseq_t;
typedef struct ddsi_datatags {
ddsi_tagseq_t tags;
} ddsi_datatags_t;
typedef struct ddsi_dataholder {
char *class_id;
dds_propertyseq_t properties;
dds_binarypropertyseq_t binary_properties;
} ddsi_dataholder_t;
typedef struct ddsi_dataholderseq {
uint32_t n;
ddsi_dataholder_t *tags;
} ddsi_dataholderseq_t;
typedef ddsi_dataholder_t ddsi_token_t;
/* Used for both ddsi_participant_security_info and ddsi_endpoint_security_info. */
typedef struct ddsi_security_info
{
uint32_t security_attributes;
uint32_t plugin_security_attributes;
} ddsi_security_info_t;
#else /* DDS_HAS_SECURITY */
struct ddsi_security_info;
typedef struct ddsi_security_info ddsi_security_info_t;
#endif /* DDS_HAS_SECURITY */
#ifdef DDSRT_HAVE_SSM
typedef struct ddsi_reader_favours_ssm {
uint32_t state; /* default is false */
} ddsi_reader_favours_ssm_t;
#endif /* DDSRT_HAVE_SSM */
typedef struct ddsi_adlink_participant_version_info
{
uint32_t version;
uint32_t flags;
uint32_t unused[3];
char *internals;
} ddsi_adlink_participant_version_info_t;
typedef struct ddsi_plist {
uint64_t present;
uint64_t aliased;
dds_qos_t qos;
ddsi_protocol_version_t protocol_version;
ddsi_vendorid_t vendorid;
ddsi_locators_t unicast_locators;
ddsi_locators_t multicast_locators;
ddsi_locators_t default_unicast_locators;
ddsi_locators_t default_multicast_locators;
ddsi_locators_t metatraffic_unicast_locators;
ddsi_locators_t metatraffic_multicast_locators;
unsigned char expects_inline_qos;
ddsi_count_t participant_manual_liveliness_count;
uint32_t participant_builtin_endpoints;
/* ddsi_content_filter_property_t content_filter_property; */
ddsi_guid_t participant_guid;
ddsi_guid_t endpoint_guid;
ddsi_guid_t group_guid;
ddsi_guid_t topic_guid;
#if 0 /* reserved, rather than NIY */
ddsi_entityid_t participant_entityid;
ddsi_entityid_t group_entityid;
#endif
uint32_t builtin_endpoint_set;
/* int type_max_size_serialized; */
ddsi_keyhash_t keyhash;
uint32_t statusinfo;
ddsi_adlink_participant_version_info_t adlink_participant_version_info;
#ifdef DDS_HAS_SECURITY
ddsi_token_t identity_token;
ddsi_token_t permissions_token;
ddsi_security_info_t endpoint_security_info;
ddsi_security_info_t participant_security_info;
ddsi_token_t identity_status_token;
ddsi_datatags_t data_tags;
#endif
#ifdef DDSRT_HAVE_SSM
ddsi_reader_favours_ssm_t reader_favours_ssm;
#endif
uint32_t domain_id;
char *domain_tag;
uint32_t cyclone_receive_buffer_size;
unsigned char cyclone_requests_keyhash;
unsigned char cyclone_redundant_networking;
} ddsi_plist_t;
/**
* @brief Initialize a ddsi_plist_t as an empty object
* @component parameter_list
*
* In principle, this only clears the "present" and "aliased" bitmasks. A debug build
* additionally initializes all other bytes to 0x55.
*
* @param[out] dest plist_t to be initialized.
*/
DDS_EXPORT void ddsi_plist_init_empty (ddsi_plist_t *dest);
/**
* @brief Free memory owned by "ps"
* @component parameter_list
*
* A ddsi_plist_t may own other allocated blocks of memory, depending on which fields are
* set, their types and whether they are marked as "aliased". This function releases any
* such memory owned by "ps", but not "ps" itself. Afterward, the contents of "ps" is
* undefined and must not be used again without initialising it (either via
* `ddsi_plist_init_empty`, `ddsi_plist_init_frommsg` or `ddsi_plist_copy`.
*
* @param[in] ps ddsi_plist_t for which to free memory
*/
DDS_EXPORT void ddsi_plist_fini (ddsi_plist_t *ps);
#if defined (__cplusplus)
}
#endif
#endif /* DDSI_PLIST_H */