184 lines
5.0 KiB
C
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 */
|