Publish Subscribe Message Exchange

group psmx

OVERVIEW

The Publish Subscribe Message Exchange (PSMX) interface provides support for off-loading data communication from the network stack of Cyclone to arbitrary pub-sub transport implementations.[^1] This section provides an overview of the structure and introduces some terminology, details on specific operations are provided at the definitions of those operations.

A Cyclone DDS Domain consists of a plurality of DDS Domain Entities, which are the representations of the DDS Domain in a specific process.

A PSMX Plugin provides an implementation of the PSMX interface, allowing the instantiation of a PSMX Instance to establish a connection between a DDS Domain Entity and a PSMX Domain. The PSMX Plugin is specified as a library and a PSMX Instance Name. The library is loaded in the process and a constructor function provided by the library is invoked to create and initialize a PSMX Instance given the PSMX Instance Name (and a configuration string). In principle a specific library may be configured multiple times in a single DDS Domain.

The PSMX Instance Name is assumed to uniquely identify the PSMX Domain in the DDS Domain. From the PSMX Instance Name, a numeric PSMX Instance ID is derived that uniquely identifies the PSMX Domain within the DDS Domain Entity and is assumed to uniquely identify the PSMX Domain in the DDS Domain.[^2]

Each PSMX Instance chooses a 16-byte PSMX Locator[^3] such that any pair of instances with the same PSMX Locator communicate, and any pair with different locators do not communicate.[^4]

DDS Topics, DDS Readers and DDS Writers are mapped to corresponding objects in PSMX Instances. For DDS Readers and DDS Writers, the application can restrict the set of PSMX Instances for which the mapping is created using the “PSMX Instances” QoS setting, and the PSMX Instances can refuse mapping based on type and QoS information.

DDS Topic Entities are representations of the topics in the DDS Domain, such that two identical definitions of a topic in a DDS Domain Entity give rise to two application-level DDS Topic Entities, but only to a single topic in the DDS Domain Entity and thus also only one PSMX Topic object per PSMX Instance.

Each DDS Reader/Writer is mapped to a set of PSMX Reader/Writer Endpoints, one for each PSMX Instance in the “PSMX Instances” QoS that accepts the type and reader/writer QoS. An associated set of PSMX Domains consisting of the PSMX Domains for which PSMX Reader/Writer Endpoints have been created is assumed to exist.

The PSMX Domain is assumed to deliver data published by the PSMX Writer associated with DDS Writer X to all PSMX Readers associated with the DDS Readers Ys that match X[^5], optionally excluding DDS Readers in the same Domain Entity as X. It is assumed to not deliver data to other DDS Readers in the DDS Domain. It is assumed to do this with a quality of service compatible with the DDS QoS.

Readers associated with DDS Readers in the same DDS Domain Entity.

If the intersection of the sets of PSMX Domains of a DDS Reader and a DDS Writer in a DDS Domain:

  • is empty, off-loading data transfer to PSMX (for this pair) is not possible;

  • contains one instance, that PSMX Domain is eligible for off-loading data transfer;

  • contains multiple instances, the configuration is invalid.

If an eligible PSMX Domain exists and the PSMX Locators for the corresponding two PSMX Instances are the same, then PSMX is used to transfer data.

The PSMX objects are represented in the interface as pointers to “dds_psmx”, “dds_psmx_topic”, “dds_psmx_endpoint”. The PSMX Plugin is responsible for allocating and freeing these. It is expected that the PSMX Plugin internally uses an extended version of these types to store any additional data it needs. E.g., a hypothetical “weed” PSMX Plugin could do:

struct psmx_weed {
  struct dds_psmx c;
  weed_root *x;
};

The creator function mentioned above is required to be called NAME_create_psmx, where NAME is the value of the “name” attribute of the PubSubMessageExchange interface configuration element. It must have the following signature:

dds_return_t NAME_create_psmx (
  struct dds_psmx **psmx_instance,
  dds_psmx_instance_id_t identifier,
  const char *config)

Where

*psmx_instance must be set point to a new PSMX Instance on success and may be left undefined on error identifier contains the numeric PSMX Instance ID config the PSMX configuration from the “config” attribute of the PubSubMessageExchange interface configuration element.

The “config” argument is a contiguous sequence of characters terminated by the first double-\0. Each \0-terminated character sequence is a string that consists of KEY=VALUE pairs, where each K-V pair is terminated by a semicolon.

If the configuration string as set in Cyclone DDS configuration contains a “INSTANCE_NAME” key, its value is used as the PSMX Instance Name. If the key is not included, the value of the “name” attribute of the corresponding PubSubMessageExchange element in configuration is used as the PSMX Instance Name. In all cases, looking up the “INSTANCE_NAME” key in the configuration string using dds_psmx_get_config_option_value will return the PSMX Instance Name as its value.

The behaviour of the constructor function is dependent on the interface version it implements:

  • For version 0, it is responsible for setting:

    • ops to the addresses of the various functions implementing the operations

    • instance_name to a “dds_alloc” allocated string

    • instance_id to the “identifier” argument

    and for zero-initializing the other fields. At some point after this initialization, and once it is prepared to handle the “get_node_id” operation, it must invoke the “dds_psmx_init_generic” to complete the initialization.

  • For version 1, it is responsible for setting:

    • ops

    All other fields will be initialized by the Cyclone DDS after succesful return and the “get_node_id” operation also will be invoked after the constructor returned.

Whether the plugin implements version 0 or version 1 of the interface is controlled by the function pointers in “dds_psmx_ops_t”. If “create_topic” and “deinit” are non-null, it is version 0; if both are null it is version 1. Neither “create_topic_type” nor “delete_psmx” is touched by Cyclone DDS if the interface is version 0, allowing for binary backwards compatibility.

— Footnotes: —

[^1]: In particular including shared-memory based mechanisms.

[^2]: Internally, the name is not used for anything other than the generation of the numeric id.

[^3]: Confusingly named “node identifier” in the interface, even though it has nothing to do with the numeric PSMX Domain identifier.

[^4]: This typically matches a machine when the transport is shared memory.

[^5]: That is, the matching rules between Readers and Writers defined in the DDS specification.

Typedefs

typedef enum dds_psmx_endpoint_type dds_psmx_endpoint_type_t

Type of the PSMX endpoint.

The PSMX interface distinguishes between readers and writers, and in some cases needs to specify that an operation applies to both or neither (depending on context). “Reader” and “writer” here are used as in DDS, outside the DDS context these often are known as subscribers and publishers.

typedef uint32_t dds_psmx_instance_id_t

The numeric PSMX Instance ID.

typedef struct dds_psmx_metadata dds_psmx_metadata_t

Describes the data which is transferred in addition to the application data.

All fields are filled in by Cyclone DDS during the write prior to handing it to the PSMX plug-in. The plug-in is only required to pass the contents to Cyclone DDS on the receiving side.

typedef struct dds_psmx_node_identifier dds_psmx_node_identifier_t

PSMX Locator.

typedef bool (*dds_psmx_type_qos_supported_fn)(struct dds_psmx *psmx_instance, dds_psmx_endpoint_type_t forwhat, dds_data_type_properties_t data_type_props, const struct dds_qos *qos)

Definition of the function checking support for type and QoS.

A PSMX Instance in the “PSMX Instances” QoS may accept or reject a given DDS Topic/Reader/Writer based on information on the type and the QoS settings. PSMX Instances not in the “PSMX Instances” QoS setting are not asked.

Param psmx_instance:

[in] The PSMX Instance

Param forwhat:

[in] Whether for a topic/writer/reader (UNSET if topic)

Param data_type_props:

[in] Data type properties (see there)

Param qos:

[in] QoS of the DDS topic

Return:

True if the PSMX Instance is willing to handle this DDS entity, false otherwise

typedef struct dds_psmx_topic *(*dds_psmx_create_topic_with_type_fn)(struct dds_psmx *psmx_instance, const char *topic_name, const char *type_name, dds_data_type_properties_t data_type_props, const struct ddsi_type *type_definition, uint32_t sizeof_type)

Definition of the function for creating a PSMX Topic (interface version 1)

Definition for a function that is called to construct a new PSMX Topic in a PSMX Instance representing a new topic in the DDS Domain Entity.

The PSMX Plugin is expected to represent a PSMX Topic using an extended version of the dds_psmx_topic structure.

If type_definition is not a null pointer, it points into the Cyclone type library. A (default, C) serializer can be constructed using ddsi_topic_descriptor_from_type, an XTypes TypeObject using ddsi_type_get_typeobj.

If the function returns failure, creation of the DDS Entity fails.

Param psmx_instance:

[in] The PSMX instance.

Param topic_name:

[in] The name of the topic to create

Param type_name:

[in] The name of the DDS data type for this topic

Param data_type_props:

[in] The data type properties for the topic’s data type.

Param type_definition:

[in] Optional pointer to type definition in type library.

Param sizeof_type:

[in] In-memory size of a single instance of the type, 0 if unknown.

Return:

A new PSMX Topic structure, or NULL on error

typedef dds_return_t (*dds_psmx_delete_topic_fn)(struct dds_psmx_topic *psmx_topic)

Definition of the function for destructing and freeing a PSMX Topic.

Definition for a function that is called on deleting the topic in the DDS Domain. Called exactly once for each successful invocation of dds_psmx_create_topic/ dds_psmx_create_topic_with_type, all PSMX Endpoints related to this PSMX Topic will have been destructed prior to calling this function.

If the PSMX Topic was created using dds_psmx_create_topic, the PSMX Plugin is required to call dds_psmx_cleanup_topic_generic and to do so prior to invalidating the memory associated with the PSMX Topic and releasing any memory allocated for it during construction.

Param psmx_topic:

[in] The PSMX Topic to destruct

Return:

A DDS return code, should be DDS_RETCODE_OK.

typedef struct dds_psmx_topic *(*dds_psmx_create_topic_fn)(struct dds_psmx *psmx_instance, const char *topic_name, const char *type_name, dds_data_type_properties_t data_type_props)

Definition of the function for creating a PSMX Topic (interface version 0)

Equivalent to dds_psmx_create_topic_type with type_definition and sizeof_type a null pointer and 0, respectively. It is required to initialize the generic fields using dds_psmx_topic_init_generic.

Param psmx_instance:

[in] The PSMX instance.

Param topic_name:

[in] The name of the topic to create

Param type_name:

[in] The name of the DDS data type for this topic

Param data_type_props:

[in] The data type properties for the topic’s data type.

Return:

A new PSMX Topic structure, or NULL on error

typedef void (*dds_psmx_delete_fn)(struct dds_psmx *psmx_instance)

Definition of the function for destructing and freeing a PSMX Instance (interface version 1)

Function called on shutdown of a DDS Domain Entity, before unloading the PSMX Plugin and after all other operations have completed and all objects created in the PSMX Instance have been destructed using the various “delete” functions.

The PSMX Plugin is required to call dds_psmx_fini and to do so prior to invalidating the memory associated with the PSMX Instance and releasing any memory allocated for it during construction.

Param psmx_instance:

[in] The PSMX Instance to de-initialize

typedef dds_return_t (*dds_psmx_deinit_fn)(struct dds_psmx *psmx_instance)

Definition of the function for destructing and freeing a PSMX Instance (interface version 0)

Function called on shutdown of a DDS Domain Entity, before unloading the PSMX Plugin and after all other operations have completed and all objects created in the PSMX Instance have been destructed using the various “delete” functions.

The PSMX Plugin is required to call dds_psmx_cleanup_generic and to do so prior to invalidating the memory associated with the PSMX Instance and releasing any memory allocated for it during construction.

Param psmx_instance:

[in] The PSMX Instance to de-initialize

Return:

A DDS return code, should be DDS_RETCODE_OK.

typedef dds_psmx_node_identifier_t (*dds_psmx_get_node_identifier_fn)(const struct dds_psmx *psmx_instance)

Definition of the function returning the PSMX Locator.

All PSMX Instances that can communicate must return the same PSMX Locator, PSMX Instances that do not communicate must return different PSMX Locators.

The function may be called by dds_psmx_init_generic.

Param psmx_instance:

[in] A PSMX Instance

Return:

The PSMX Locator for this PSMX Instance

typedef dds_psmx_features_t (*dds_psmx_supported_features_fn)(const struct dds_psmx *psmx_instance)

Definition of the function to query the features supported by the PSMX Instance.

Returns an integer with the flags set for the features that are supported by the provided PSMX Instance.

Param psmx_instance:

[in] A PSMX instance

Return:

The set of features supported by this PSMX instance

typedef struct dds_psmx_ops dds_psmx_ops_t

Table of pointers to functions operating on a PSMX Instance.

typedef struct dds_psmx_endpoint *(*dds_psmx_create_endpoint_fn)(struct dds_psmx_topic *psmx_topic, const struct dds_qos *qos, dds_psmx_endpoint_type_t endpoint_type)

Definition of the function for constructing a PSMX Endpoint for a PSMX Topic.

Param psmx_topic:

[in] The PSMX Topic to create the PSMX Endpoint for

Param qos:

[in] QoS of the corresponding DDS endpoint

Param endpoint_type:

[in] The type of endpoint to create, either READER or WRITER

Return:

A new PSMX Endpoint or a null pointer on error

typedef dds_return_t (*dds_psmx_delete_endpoint_fn)(struct dds_psmx_endpoint *psmx_endpoint)

Definition of the function for destructing a PSMX Endpoint.

Called after the last operation on the PSMX Endpoint has completed and no further operations will be invoked; called prior to destructing the PSMX Topic.

Param psmx_endpoint:

[in] The PSMX Endpoint to be destructed

Return:

a DDS return code, should be DDS_RETCODE_OK

typedef struct dds_psmx_topic_ops dds_psmx_topic_ops_t

Table of pointers to functions operating on a PSMX Topic.

typedef dds_loaned_sample_t *(*dds_psmx_endpoint_request_loan_fn)(struct dds_psmx_endpoint *psmx_endpoint, uint32_t size_requested)

Definition of the function for requesting a loan from a PSMX Writer.

The PSMX Instance is the owner of the loan and implements the allocation and the freeing of the memory for the dds_loaned_sample_t, the dds_psmx_metadata_t it references and the payload it references.

The dds_loaned_sample_t is reference counted and the free function referenced through the “ops” table is invoked once the reference count drops to 0.

The PSMX Plugin is required to properly initialize all fields:

  • ops

  • metadata, the contents of the memory it points to may be undefined

  • sample_ptr, the contents of the memory it points to may be undefined

The loan_origin and refc fields are set by Cyclone DDS following a succesful return.

The sample_ptr in the Loaned Sample must point to a unique memory block of at least size_requested bytes and be suitably aligned to directly store any of the types in application-representation to which the various supported IDL types map.

size_requested is equal to sizeof_type in the PSMX create topic call if:

  • the loan is to be used for a raw sample (implies IS_MEMCPY_SAFE set in the type properties)

  • sizeof_type was non-0 in the call to create the PSMX Topic

Param psmx_endpoint:

[in] The PSMX Writer to borrow from

Param size_requested:

[in] The size of the loan requested in bytes

Return:

A pointer to the Loaned Sample on success or a null pointer on failure

typedef dds_return_t (*dds_psmx_endpoint_write_with_key_fn)(struct dds_psmx_endpoint *psmx_endpoint, dds_loaned_sample_t *data, size_t keysz, const void *key)

Definition of function for writing data via a PSMX Writer.

The PSMX Plugin is expected to publish the payload and the metadata of the Loaned Sample via the PSMX Instance to its subscribers as described in the overview. The Loaned Sample:

  • originated in a successful request for a loan from this PSMX Instance;

  • has the metadata and payload set correctly;

  • has a metadata state that is not UNINITIALIZED.

Cyclone DDS assumes:

  • that the dds_loaned_sample_t outlives the PSMX write operation

  • that the sample_ptr and metadata are invalidated by the PSMX write operation

and will consequently not touch the sample_ptr and metadata after the operation and only invoke the Loaned Sample’s free function.

If the operations fails and returns an error, the DDS write (or write-like) operation that caused it will report an error to the application. It is unspecified whether or not any other deliver paths may or may not have been provided with the data when this happens.

Param psmx_endpoint:

[in] The PSMX Writer to publish the data on

Param data:

[in] The Loaned Sample containing the data to publish

Param keysz:

[in] The size of the serialized key blob, 0 for keyless topics

Param key:

[in] The serialized key, a null pointer for keyless topics

Return:

A DDS return code

typedef dds_return_t (*dds_psmx_endpoint_write_fn)(struct dds_psmx_endpoint *psmx_endpoint, dds_loaned_sample_t *data)

Definition of function for writing data via a PSMX Writer.

Equivalent to dds_psmx_endpoint_write_with_key_fn with keysz = 0 and key = NULL

typedef dds_loaned_sample_t *(*dds_psmx_endpoint_take_fn)(struct dds_psmx_endpoint *psmx_endpoint)

Definition of function for taking data from a PSMX Reader.

Return an unread sample available to the PSMX Reader and remove it from the set of samples available to the PSMX Reader. It should ensure, firstly, that a sample for each key value for which data is available shall eventually be returned, and, secondly, that samples for a given key value are returned in the order of publication.

The Loaned Sample shall be fully initialized on return, with a metadata sample state different from UNINITIALIZED.

(Currently not called.)

Param psmx_endpoint:

[in] The PSMX Reader to take the data from

Return:

a Loaned Sample for an unread sample, or a null pointer if none is available

typedef dds_return_t (*dds_psmx_endpoint_on_data_available_fn)(struct dds_psmx_endpoint *psmx_endpoint, dds_entity_t reader)

Definition of function to request asynchronous delivery of new data by a PSMX Reader.

The PSMX Plugin is requested to arrange for data arriving at the PSMX Reader to be delivered to Cyclone DDS as if a background thread exists that contains a loop body:

dds_loaned_sample_t *ls = dds_psmx_endpoint_ops.take(psmx_endpoint)
if (ls != NULL) {
  dds_reader_store_loaned_sample(reader, ls);
}
dds_loaned_sample_unref(data)
(alternatively calling dds_reader_store_loaned_sample_wr_metadata for each sample)

Param psmx_endpoint:

[in] The PSMX Reader on which to enable asynchronous delivery

Param reader:

[in] The DDS Reader to which the data is to be delivered

Return:

a DDS return code

typedef struct dds_psmx_endpoint_ops dds_psmx_endpoint_ops_t

Table of pointers to functions that are used on a PSMX Endpoint.

typedef struct dds_psmx dds_psmx_t

Type representing a PSMX Instance in a DDS Domain Entity.

Each PSMX Instance is represented in a DDS Domain Entity by a pointer to a struct dds_psmx. The PSMX Plugin is responsible for allocating and constructing it on initialization in a constructor as described in the overview.

typedef struct dds_psmx_topic dds_psmx_topic_t

Type representing a PSMX Topic in a DDS Domain Entity.

typedef struct dds_psmx_endpoint dds_psmx_endpoint_t

Type representing a PSMX Endpoint in a DDS Domain Entity.

Enums

enum dds_psmx_endpoint_type

Type of the PSMX endpoint.

The PSMX interface distinguishes between readers and writers, and in some cases needs to specify that an operation applies to both or neither (depending on context). “Reader” and “writer” here are used as in DDS, outside the DDS context these often are known as subscribers and publishers.

Values:

enumerator DDS_PSMX_ENDPOINT_TYPE_UNSET

inapplicable or applies to both

enumerator DDS_PSMX_ENDPOINT_TYPE_READER

applies to reader only

enumerator DDS_PSMX_ENDPOINT_TYPE_WRITER

applies to writer only

Functions

dds_return_t dds_add_psmx_topic_to_list(struct dds_psmx_topic *psmx_topic, void **list)

nop

does nothing, exists for backwards compatibility only

Parameters:
  • psmx_topic[in] ignored

  • list[inout] ignored

Returns:

DDS_RETCODE_OK

dds_return_t dds_add_psmx_endpoint_to_list(struct dds_psmx_endpoint *psmx_endpoint, void **list)

nop

does nothing, exists for backwards compatibility only

Parameters:
  • psmx_endpoint[in] ignored

  • list[inout] ignored

Returns:

DDS_RETCODE_OK

dds_return_t dds_psmx_init_generic(struct dds_psmx *psmx)

initialization function for PSMX instance (interface version 0)

Shall be called by a constructor function for a PSMX Plugin implementing interface version 0 as described in the overview.

Parameters:
  • psmx[in] The PSMX instance to initialize

Returns:

a DDS return code

dds_return_t dds_psmx_cleanup_generic(struct dds_psmx *psmx)

cleanup function for a PSMX instance (interface version 0)

Shall be called by the destructor function of PSMX Plugin implementing interface version 0 as described in the documentation of “dds_psmx_deinit_fn”.

Parameters:
  • psmx[in] the PSMX instance to cleanup

Returns:

a DDS return code

dds_return_t dds_psmx_topic_init_generic(struct dds_psmx_topic *psmx_topic, const dds_psmx_topic_ops_t *ops, const struct dds_psmx *psmx, const char *topic_name, const char *type_name, dds_data_type_properties_t data_type_props)

init function for topic (interface version 0)

Shall be called by de topic constructor function for a PSMX Plugin implementing interface version 0.

Parameters:
  • psmx_topic[in] the topic to initialize

  • ops[in] vtable for this psmx_topic

  • psmx[in] the PSMX instance

  • topic_name[in] the topic name

  • type_name[in] the DDS type name for this topic

  • data_type_props[in] the data type’s properties

Returns:

a DDS return code

dds_return_t dds_psmx_topic_cleanup_generic(struct dds_psmx_topic *psmx_topic)

cleanup function for a topic (interface version 0)

Shall be called by de topic destructor function for a PSMX Plugin implementing interface version 0 as described in the documentation of “dds_psmx_delete_topic_fn”.

Parameters:
  • psmx_topic[in] the topic to de-initialize

Returns:

a DDS return code

char *dds_psmx_get_config_option_value(const char *conf, const char *option_name)

Returns the string associated with the option_name in the PSMX config string.

The C string returned from this function should be freed by the user using ddsrt_free.

The option “SERVICE_NAME” is treated as an alias for “INSTANCE_NAME”.

Parameters:
  • conf[in] a double-\0 terminated configuration string in the same format as that passed to the PSMX Plugin’s constructor function (see the overview).

  • option_name[in] the option to look up

Returns:

pointer to a newly allocated string on the heap if found, NULL if not found or out of memory.

struct dds_psmx_metadata
#include <dds_psmx.h>

Describes the data which is transferred in addition to the application data.

All fields are filled in by Cyclone DDS during the write prior to handing it to the PSMX plug-in. The plug-in is only required to pass the contents to Cyclone DDS on the receiving side.

Public Members

dds_loaned_sample_state_t sample_state

Representation of this sample/key

dds_loan_data_type_t data_type

Reserved, must be 0

dds_psmx_instance_id_t instance_id

PSMX instance id for this sample

uint32_t sample_size

Size of payload

dds_guid_t guid

GUID of original writer

dds_time_t timestamp

Source timestamp of DDS sample

uint32_t statusinfo

DDSI status info (write/dispose/unregister)

uint16_t cdr_identifier

CDR encoding (DDSI_RTPS_SAMPLE_NATIVE if not serialized)

uint16_t cdr_options

CDR options field (0 if not serialized)

struct dds_psmx_node_identifier
#include <dds_psmx.h>

PSMX Locator.

struct dds_psmx_ops
#include <dds_psmx.h>

Table of pointers to functions operating on a PSMX Instance.

Public Members

dds_psmx_create_topic_fn create_topic

non-null for interface version 0, null for version 1

dds_psmx_deinit_fn deinit

non-null for interface version 0, null for version 1

dds_psmx_create_topic_with_type_fn create_topic_with_type

undefined for interface version 0, non-null for version 1

dds_psmx_delete_fn delete_psmx

undefined for interface version 0, non-null for version 1

struct dds_psmx_topic_ops
#include <dds_psmx.h>

Table of pointers to functions operating on a PSMX Topic.

struct dds_psmx_endpoint_ops
#include <dds_psmx.h>

Table of pointers to functions that are used on a PSMX Endpoint.

Public Members

dds_psmx_endpoint_write_fn write

write, not required if write_key is defined

dds_psmx_endpoint_write_with_key_fn write_with_key

may be null for backwards compatibility if write is defined

struct dds_psmx
#include <dds_psmx.h>

Type representing a PSMX Instance in a DDS Domain Entity.

Each PSMX Instance is represented in a DDS Domain Entity by a pointer to a struct dds_psmx. The PSMX Plugin is responsible for allocating and constructing it on initialization in a constructor as described in the overview.

Public Members

dds_psmx_ops_t ops

operations on the PSMX Instance

const char *instance_name

name of this PSMX Instance

int32_t priority

priority for this interface

const struct ddsi_locator *locator

PSMX Locator for this PSMX Instance

dds_psmx_instance_id_t instance_id

Numeric PSMX Instance ID for this PSMX Instance

void *psmx_topics

Reserved, must be 0

struct dds_psmx_topic
#include <dds_psmx.h>

Type representing a PSMX Topic in a DDS Domain Entity.

Public Members

dds_psmx_topic_ops_t ops

operations on the PSMX Topic

struct dds_psmx *psmx_instance

PSMX Instance which created this PSMX Topic

const char *topic_name

Topic name

const char *type_name

Type name

dds_loan_data_type_t data_type

Reserved, must be 0

void *psmx_endpoints

Reserved, must be 0

dds_data_type_properties_t data_type_props

Properties of the data type associated with this topic

struct dds_psmx_endpoint
#include <dds_psmx.h>

Type representing a PSMX Endpoint in a DDS Domain Entity.

Public Members

dds_psmx_endpoint_ops_t ops

operations on the PSMX Endpoint

struct dds_psmx_topic *psmx_topic

PSMX Topic for this endpoint

dds_psmx_endpoint_type_t endpoint_type

Type of endpoint (READER or WRITER)