- HandlerMinelayerData: BUILD_RTI Guards für RTI-Abhängigkeiten - svcTabCommon: Export-Header-Fix via Fallback-Target - TrainingAreaBase: Stub-Header für BUILD_RTI=OFF - ddsfts: Include-Pfad und Dependency-Fixes - BUILD_RTI=OFF Compilation vollständig unterstützt Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Entire-Checkpoint: 01M0JNZA586SACX1PRZ2DJAE5S
969 lines
33 KiB
C
969 lines
33 KiB
C
/* (c) Copyright 2003-2021, Real-Time Innovations, Inc. All rights reserved. */
|
|
/*
|
|
* @(#)pres_readerQueue.h generated by: makeheader Tue Apr 7 17:39:30 2026
|
|
*
|
|
* built from: readerQueue.ifc
|
|
*/
|
|
|
|
#ifndef pres_readerQueue_h
|
|
#define pres_readerQueue_h
|
|
|
|
|
|
#include "reda/reda_fastBuffer.h"
|
|
#include "reda/reda_skiplist.h"
|
|
#include "mig/mig_rtps.h"
|
|
#include "reda/reda_sequenceNumber.h"
|
|
#include "reda/reda_skiplist.h"
|
|
#ifndef property_propertyNames_h
|
|
#include "property/property_propertyNames.h"
|
|
#endif
|
|
#include "pres/pres_common.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
#define PRES_READER_QUEUE_INLINE_QOS_FLAG_NONE (0x00000000U)
|
|
#define PRES_READER_QUEUE_INLINE_QOS_FLAG_DURABILITY (0x00000001U)
|
|
#define PRES_READER_QUEUE_INLINE_QOS_FLAG_PRESENTATION (0x00000002U)
|
|
#define PRES_READER_QUEUE_INLINE_QOS_FLAG_DEADLINE (0x00000004U)
|
|
#define PRES_READER_QUEUE_INLINE_QOS_FLAG_LATENCY_BUDGET (0x00000008U)
|
|
#define PRES_READER_QUEUE_INLINE_QOS_FLAG_OWNERSHIP (0x00000010U)
|
|
#define PRES_READER_QUEUE_INLINE_QOS_FLAG_OWNERSHIP_STRENGTH (0x00000020U)
|
|
#define PRES_READER_QUEUE_INLINE_QOS_FLAG_LIVELINESS (0x00000040U)
|
|
#define PRES_READER_QUEUE_INLINE_QOS_FLAG_PARTITION (0x00000080U)
|
|
#define PRES_READER_QUEUE_INLINE_QOS_FLAG_RELIABILITY (0x00000100U)
|
|
#define PRES_READER_QUEUE_INLINE_QOS_FLAG_TRANSPORT_PRIORITY (0x00000200U)
|
|
#define PRES_READER_QUEUE_INLINE_QOS_FLAG_LIFESPAN (0x00000400U)
|
|
#define PRES_READER_QUEUE_INLINE_QOS_FLAG_DESTINATION_ORDER (0x00000800U)
|
|
#define PRES_READER_QUEUE_INLINE_QOS_FLAG_COHERENT_SET (0x00001000U)
|
|
#define PRES_READER_QUEUE_INLINE_QOS_FLAG_FILTER_SIGNATURE (0x00002000U)
|
|
#define PRES_READER_QUEUE_INLINE_QOS_FLAG_GROUP_COHERENT_SET (0x00004000U)
|
|
#define PRES_READER_QUEUE_INLINE_QOS_FLAG_UNKNOWN (0x80000000U)
|
|
|
|
#define PRES_READER_QUEUE_STATE_ODBC_DSN_PROPERTY PROPERTY_NAME_DDS_DATA_READER_STATE_ODBC_DSN
|
|
#define PRES_READER_QUEUE_STATE_ODBC_USERNAME_PROPERTY PROPERTY_NAME_DDS_DATA_READER_STATE_ODBC_USERNAME
|
|
#define PRES_READER_QUEUE_STATE_ODBC_PASSWORD_PROPERTY PROPERTY_NAME_DDS_DATA_READER_STATE_ODBC_PASSWORD
|
|
#define PRES_READER_QUEUE_STATE_ODBC_DRIVER_PROPERTY PROPERTY_NAME_DDS_DATA_READER_STATE_ODBC_DRIVER
|
|
#define PRES_READER_QUEUE_STATE_ODBC_DRIVER_PTR_PROPERTY PROPERTY_NAME_DDS_DATA_READER_STATE_ODBC_DRIVER_PTR
|
|
#define PRES_READER_QUEUE_STATE_RESTORE_PROPERTY PROPERTY_NAME_DDS_DATA_READER_STATE_RESTORE
|
|
#define PRES_READER_QUEUE_STATE_FILTER_REDUNDANT_SAMPLES PROPERTY_NAME_DDS_DATA_READER_STATE_FILTER_REDUNDANT_SAMPLES
|
|
#define PRES_READER_QUEUE_STATE_FILTER_OLD_SAMPLES PROPERTY_NAME_DDS_DATA_READER_STATE_FILTER_OLD_SAMPLES
|
|
#define PRES_READER_QUEUE_STATE_CHECKPOINT_FREQUENCY_PROPERTY PROPERTY_NAME_DDS_DATA_READER_STATE_CHECKPOINT_FREQUENCY
|
|
#define PRES_READER_QUEUE_STATE_PERSISTENCE_SERVICE_REQUEST_DEPTH PROPERTY_NAME_DDS_DATA_READER_STATE_PERSISTENCE_SERVICE_REQUEST_DEPTH
|
|
|
|
#define PRES_READER_QUEUE_MAX_VIRTUAL_WRITERS_PER_SAMPLE 5
|
|
|
|
#define PRES_READER_QUEUE_UNKNOWN_COHERENT_SET_STATUS 0
|
|
#define PRES_READER_QUEUE_INCOMPLETE_COHERENT_SET_STATUS 1
|
|
#define PRES_READER_QUEUE_COMPLETE_COHERENT_SET_STATUS 2
|
|
|
|
|
|
|
|
#define PRES_READER_QUEUE_OK (0)
|
|
|
|
|
|
#define PRES_READER_QUEUE_FAILURE_INTERNAL (1)
|
|
|
|
|
|
#define PRES_READER_QUEUE_FAILURE_NO_INSTANCE (2)
|
|
|
|
|
|
#define PRES_READER_QUEUE_FAILURE_OUT_OF_RESOURCES (3)
|
|
|
|
|
|
#define PRES_READER_QUEUE_FAILURE_DECODE (4)
|
|
|
|
typedef struct PRESReaderQueueStatus {
|
|
RTI_INT32 polledCount;
|
|
RTI_INT32 totalSampleCount;
|
|
RTI_INT32 sampleCount;
|
|
RTIBool isPurgeRemoteNotAliveWriterEventScheduled;
|
|
} PRESReaderQueueStatus;
|
|
|
|
|
|
#define PRESReaderQueueStatus_INITIALIZER { \
|
|
0, /* polledCount */ \
|
|
0, /* totalSampleCount */ \
|
|
0, /* sampleCount */ \
|
|
RTI_FALSE /* isPurgeRemoteNotAliveWriterEventScheduled */ \
|
|
}
|
|
|
|
typedef struct PRESReaderQueueRemoteWriterQueueStatus {
|
|
RTI_INT32 totalSampleCount;
|
|
RTI_INT32 sampleCount;
|
|
} PRESReaderQueueRemoteWriterQueueStatus;
|
|
|
|
|
|
#define PRESReaderQueueRemoteWriterQueueStatus_INITIALIZER { \
|
|
0, /* totalSampleCount */ \
|
|
0 /* sampleCount */ \
|
|
}
|
|
|
|
typedef enum PRESVirtualReliabilityKind {
|
|
PRES_BEST_EFFORT_VIRTUAL_RELIABILITY,
|
|
PRES_DUP_FILTER_VIRTUAL_RELIABILITY,
|
|
PRES_RELIABLE_VIRTUAL_RELIABILITY
|
|
} PRESVirtualReliabilityKind;
|
|
|
|
|
|
struct PRESReaderQueue;
|
|
|
|
|
|
struct PRESReaderQueueVirtualWriterList;
|
|
|
|
|
|
struct PRESReaderQueueVirtualWriter;
|
|
|
|
|
|
struct PRESReaderQueuePhysicalWriter;
|
|
|
|
|
|
struct PRESReaderQueueCoherentSetInfo {
|
|
struct REDASequenceNumber setFirstSn;
|
|
struct REDASequenceNumber groupSetFirstSn;
|
|
int status;
|
|
};
|
|
|
|
|
|
#define PRESReaderQueueCoherentSetInfo_INITIALIZER { \
|
|
REDA_SEQUENCE_NUMBER_UNKNOWN, \
|
|
REDA_SEQUENCE_NUMBER_UNKNOWN, \
|
|
PRES_READER_QUEUE_UNKNOWN_COHERENT_SET_STATUS \
|
|
}
|
|
|
|
extern PRESDllVariable
|
|
const struct PRESReaderQueueCoherentSetInfo
|
|
PRES_READER_QUEUE_COHERENT_SET_INFO_DEFAULT;
|
|
|
|
|
|
struct PRESReaderQueueEndCoherentSetInfo {
|
|
struct REDASequenceNumber groupSetFirstSn;
|
|
int sampleCount;
|
|
};
|
|
|
|
|
|
#define PRESReaderQueueEndCoherentSetInfo_INITIALIZER { \
|
|
REDA_SEQUENCE_NUMBER_UNKNOWN, \
|
|
-1 \
|
|
}
|
|
|
|
extern PRESDllVariable
|
|
const struct PRESReaderQueueEndCoherentSetInfo
|
|
PRES_READER_QUEUE_END_COHERENT_SET_INFO_DEFAULT;
|
|
|
|
|
|
struct PRESReaderQueuePhysicalSample {
|
|
struct PRESReaderQueuePhysicalWriter *physicalWriter;
|
|
/*
|
|
* This is a pointer to the coherent set info in the entry of
|
|
* the keyed/unkeyed queues
|
|
*/
|
|
struct PRESReaderQueueCoherentSetInfo *coherentSetInfo;
|
|
/*
|
|
* This is the difference between the physical SN of this sample and
|
|
* the previous sample added to the virtual writer sample queue.
|
|
*
|
|
* This difference is used to determine if a coherent set is incomplete
|
|
* or not.
|
|
*/
|
|
RTI_UINT32 physicalSnOffsetWithPrevious;
|
|
/* If set, this is an end coherent set sample */
|
|
struct PRESReaderQueueEndCoherentSetInfo *endCoherentSetInfo;
|
|
void *sample;
|
|
};
|
|
|
|
|
|
struct PRESReaderQueueVirtualSample {
|
|
struct REDAInlineListNode _node;
|
|
|
|
struct REDASequenceNumber sn;
|
|
|
|
/* Contains the coherent set sn of a group coherent set */
|
|
struct REDASequenceNumber groupSetFirstSn;
|
|
/* Indicates if this sample is part of an incomplete coherent set */
|
|
int groupSetStatus;
|
|
|
|
/* Indicates when the virtual sample is asserted */
|
|
struct RTINtpTime creationTime;
|
|
|
|
/* Indicates whether or not the data availability timeout is expired
|
|
for a virtual sample */
|
|
RTIBool dataAvailabilityTimeoutElapsed;
|
|
|
|
/*
|
|
* List of physical physical samples associated with the virtual sample.
|
|
*
|
|
* We need to store the list of all the samples here because we will have
|
|
* to update the durable reader state of the virtual writers associated
|
|
* with all the samples once we go into the output queue.
|
|
*
|
|
* We will also use the list of physical samples to see if all the
|
|
* physical writers in a group have committed a group coherent set in the
|
|
* virtual writer queue corresponding to the group.
|
|
*
|
|
*/
|
|
int sampleCount;
|
|
struct PRESReaderQueuePhysicalSample *samples;
|
|
|
|
/* Pointer back to the virtual writer */
|
|
struct PRESReaderQueueVirtualWriter * virtualWriter;
|
|
|
|
RTIBool keyed;
|
|
};
|
|
|
|
|
|
struct PRESReaderQueuePhysicalWriter {
|
|
struct REDAInlineListNode _node;
|
|
|
|
struct REDAInlineListUserDataNode _unconfirmedAppAckNode;
|
|
|
|
/*i Virtual GUID */
|
|
struct MIGRtpsGuid guid;
|
|
/* This is the last virtual sequence number provided by the physical
|
|
writer to the virtual queue */
|
|
struct REDASequenceNumber lastReceivedVirtualSn;
|
|
|
|
/*
|
|
* The last asserted sequence number for this physical writer
|
|
* This sequence number is not the virtual sequence number for the
|
|
* virtual writer to which this physical writer belongs but the
|
|
* sequence number of the samples published by the PhysicalWriter.
|
|
*/
|
|
struct REDASequenceNumber lastAddedPhysicalSn;
|
|
|
|
/* This is the last virtual sequence number that the physical
|
|
writer has for this virtual queue */
|
|
struct REDASequenceNumber lastAvailableVirtualSn;
|
|
/* This is the last available sequence number for the group
|
|
of this physical writer.
|
|
This sequence number is exercised with GROUP access_scope */
|
|
struct REDASequenceNumber lastGroupAvailableVirtualSn;
|
|
|
|
/* Next physical sequence number committed from the remote writer queue */
|
|
const struct REDASequenceNumber * nextCommittalSn;
|
|
|
|
/*
|
|
* The remote writer queue for this physical writer in either
|
|
* the PsReaderQueue (PRESPsReaderQueueRemoteWriterQueue)
|
|
* or CstReaderCollator (PRESCstReaderCollatorRemoteWriterQueue)
|
|
*
|
|
*/
|
|
void *writer;
|
|
|
|
/* Pointer back to the virtual writer */
|
|
struct PRESReaderQueueVirtualWriter * virtualWriter;
|
|
|
|
/* The application-level ack state of this virtual writer
|
|
for this physical writer.
|
|
This member may belong to the list in writer->appAckState */
|
|
struct MIGRtpsAppAckPerVirtualWriter appAckState;
|
|
RTIBool appAckEnabled;
|
|
|
|
const char * roleName;
|
|
|
|
/* This is a temporary value used by the reader queues */
|
|
RTIBool processed;
|
|
|
|
/* Indicates if the group associated with this
|
|
physical writer has been discovered */
|
|
RTIBool discoveredGroup;
|
|
|
|
/* Service QoS policy */
|
|
struct PRESServiceQosPolicy serviceQos;
|
|
|
|
/* Indicates if the physical writer is keyed or not */
|
|
RTIBool keyed;
|
|
};
|
|
|
|
|
|
struct PRESReaderQueueVirtualWriterInlineListNode {
|
|
struct REDAInlineListNode node;
|
|
struct PRESReaderQueueVirtualWriter * data;
|
|
};
|
|
|
|
|
|
struct PRESReaderQueueVirtualWriterAppAckState {
|
|
/* Node to the inline list in the virtual writer list */
|
|
struct PRESReaderQueueVirtualWriterInlineListNode _pendingAppAckListNode;
|
|
|
|
/* A virtual writer will be added to the AppAck update inline list
|
|
* when an AppAck Conf message is received a samples are moved
|
|
* from the pendingAppAckIntervalList to the
|
|
* appAckIntervalList
|
|
*/
|
|
struct PRESReaderQueueVirtualWriterInlineListNode _updateAppAckListNode;
|
|
|
|
/* List of sequence number intervals app-ack'ed for this virtual writer
|
|
|
|
This member is referenced one or more times by
|
|
all the PRESReaderQueuePhysicalWriter::appAckState
|
|
*/
|
|
struct REDASequenceNumberIntervalList appAckIntervalList;
|
|
|
|
/* List of sequence numbers intervals that
|
|
* must be added into appAckIntervalList once the current
|
|
* AppAck message is acknowledged by all associated
|
|
* physical writers or app_ack_period expires
|
|
*/
|
|
struct REDASequenceNumberIntervalList pendingAppAckIntervalList;
|
|
|
|
/* List of sequence number intervals for the samples
|
|
received from this virtual writer that have been read
|
|
by the application but not yet app-ack'ed by acknowledge_all
|
|
|
|
Once the sequence numbers are ACKed they will be moved
|
|
to pendingAppAckIntervalList and from there to
|
|
appAckIntervalList
|
|
*/
|
|
struct REDASequenceNumberIntervalList readSampleIntervalList;
|
|
|
|
/* List of sequence numbers that must be persisted
|
|
* into disk
|
|
*
|
|
* This is a combination of appAckIntervalList + pendingAppAckIntervalList
|
|
*/
|
|
struct REDASequenceNumberIntervalList persistAppAckIntervalList;
|
|
|
|
|
|
RTIBool appAckIntervalListInitialized;
|
|
|
|
RTI_UINT32 currentAppAckEpoch;
|
|
struct REDAInlineList unconfirmedAppAckPhysicalWriterList;
|
|
|
|
/* Indicates that this virtual writer is waiting for an AppAck confirmation
|
|
* message. In combination with unconfirmedAppAckPhysicalWriterCount this
|
|
* variable is used to determine when to merge the pendingAppAck inti the appAck
|
|
* list
|
|
*/
|
|
RTIBool waitingForAppAckConf;
|
|
};
|
|
|
|
|
|
struct PRESReaderQueueVirtualWriter {
|
|
struct REDAInlineListNode _node;
|
|
|
|
/* Back pointer to the virtual writer list */
|
|
struct PRESReaderQueueVirtualWriterList * virtualWriterList;
|
|
/* This is the time where the endpoint availability timeout is posted */
|
|
struct RTINtpTime endpointAvailabilityStartTime;
|
|
/* Indicates if the endpoint availability timeout is elapsed for this virtual writer*/
|
|
RTIBool endpointAvailabilityTimeoutElapsed;
|
|
/**/
|
|
struct RTINtpTime initialDataAvailabilityStartTime;
|
|
RTIBool initialDataAvailabilityTimeoutElapsed;
|
|
|
|
/*i Virtual GUID */
|
|
struct MIGRtpsGuid guid;
|
|
struct MIGRtpsKeyHash instanceKeyHash;
|
|
struct REDASequenceNumber lastComittedSn;
|
|
struct REDASequenceNumber lastApplicationProcessedSn;
|
|
struct REDASequenceNumber lastRestoredListSn;
|
|
int batchCount;
|
|
|
|
/* List of remote writers providing samples
|
|
for this virtual writer */
|
|
struct REDASkiplist physicalWriterList;
|
|
|
|
/* List of PRESReaderQueueVirtualSample */
|
|
struct REDASkiplist sampleList;
|
|
/* Iterator node */
|
|
const struct REDASkiplistNode * virtualSampleNode;
|
|
|
|
/* Indicates whether or not the virtual writer is synchronized */
|
|
RTIBool failedCommittal;
|
|
|
|
/* Pointers for the retry list */
|
|
struct PRESReaderQueueVirtualWriter *next;
|
|
struct PRESReaderQueueVirtualWriter *prev;
|
|
|
|
struct PRESReaderQueueVirtualWriterAppAckState *appAckState;
|
|
|
|
struct PRESSequenceEndpointGroup _requiredMatchedEndpointGroups;
|
|
RTIBool _matchedEndpoint;
|
|
|
|
/* List of queues affected by a virtual committal operation */
|
|
struct REDAInlineList committalInfoList;
|
|
|
|
struct PRESPresentationQosPolicy presentationQos;
|
|
|
|
RTI_UINT32 tmpSampleCount;
|
|
|
|
/*
|
|
* This is the sequence number of the last group coherent set that was
|
|
* fully received
|
|
*/
|
|
struct REDASequenceNumber lastGroupSetFirstSn;
|
|
};
|
|
|
|
|
|
struct PRESReaderQueueVirtualReader;
|
|
|
|
|
|
struct PRESReaderQueueVirtualReaderProperty {
|
|
RTIBool restore;
|
|
int checkpointFrequency;
|
|
struct PRESDestinationOrderQosPolicy destinationOrderQos;
|
|
/*e In the database table for the reader, the max length of
|
|
the varbinary that contains the acked seq number intervals */
|
|
int appAckSnIntervalColumnMaxSize;
|
|
};
|
|
|
|
|
|
#define PRESReaderQueueVirtualReaderProperty_INITIALIZER { \
|
|
RTI_FALSE, \
|
|
1, \
|
|
{PRES_BY_RECEPTION_TIMESTAMP_DESTINATIONORDER_QOS, \
|
|
PRES_INSTANCE_SCOPE_DESTINATIONORDER_QOS, \
|
|
{30, 0}}, \
|
|
32767 \
|
|
}
|
|
|
|
|
|
struct PRESReaderQueueVirtualWriterListInstanceEntry {
|
|
struct MIGRtpsKeyHash instanceKeyHash;
|
|
struct RTINtpTime lastSourceTimestamp;
|
|
};
|
|
|
|
struct PRESReaderQueueVirtualWriterListStateProperty {
|
|
struct REDAFastBufferPoolGrowthProperty virtualWriterCount;
|
|
|
|
/**e
|
|
* Controls whether to keep only the payload of the most-recently
|
|
* acknowledged sample, or to retain all acknowledged payloads.
|
|
*
|
|
* This behavior is controlled by the
|
|
* "dds.data_reader.appack_keep_last_payload" property.
|
|
*/
|
|
REDASequenceNumberIntervalListPayloadHistory appAckPayloadHistory;
|
|
|
|
struct PRESAvailabilityQosPolicy availabilityQosPolicy;
|
|
struct PRESPresentationQosPolicy presentationQos;
|
|
struct PRESReliabilityQosPolicy reliabilityQos;
|
|
|
|
/*e Maximum numbers of physical writers associated with a virtual sample */
|
|
int maximalPhysicalWriterPerVirtualSampleCount;
|
|
};
|
|
|
|
|
|
#define PRESReaderQueueVirtualWriterListStateProperty_INITIALIZER { \
|
|
{32, REDA_FAST_BUFFER_POOL_UNLIMITED, REDA_FAST_BUFFER_POOL_UNLIMITED}, \
|
|
REDA_SEQUENCE_NUMBER_INTERVAL_LIST_PAYLOAD_HISTORY_KEEP_ALL, \
|
|
PRES_AVAILABILITY_QOS_POLICY_DEFAULT, \
|
|
PRES_PRESENTATION_QOS_POLICY_DEFAULT, \
|
|
PRES_RELIABLE_RELIABILITY_QOS_POLICY_DEFAULT, \
|
|
PRES_READER_QUEUE_MAX_VIRTUAL_WRITERS_PER_SAMPLE \
|
|
}
|
|
|
|
struct PRESReaderQueueVirtualWriterListProperty {
|
|
/*e Control growth in number of physical writers */
|
|
struct REDAFastBufferPoolGrowthProperty physicalWriterCount;
|
|
/*e Control growth in number of samples within a virtual writer */
|
|
struct REDAFastBufferPoolGrowthProperty sampleCount;
|
|
/*e Control growth in number of SN intervals within a virtual writer */
|
|
struct REDAFastBufferPoolGrowthProperty sequenceNumberIntervalCount;
|
|
|
|
struct PRESReaderQueueVirtualWriterListStateProperty state;
|
|
|
|
/*e Determined by the DataReader resource limit qos */
|
|
int appAckUserDataMaxLength;
|
|
|
|
/*e*/
|
|
struct REDAFastBufferPoolGrowthProperty readerCount;
|
|
/*e
|
|
Allocation settings applied to remote DataWriters in the participant
|
|
containing this virtual writer list
|
|
*/
|
|
struct REDAFastBufferPoolGrowthProperty discoveryRemoteWriterCount;
|
|
|
|
/*
|
|
*/
|
|
struct PRESDurabilityQosPolicy durabilityQos;
|
|
/*
|
|
*/
|
|
struct PRESServiceQosPolicy serviceQos;
|
|
/*
|
|
*/
|
|
PRESVirtualReliabilityKind virtualReliabilityKind;
|
|
};
|
|
|
|
|
|
struct PRESReaderQueueSecurity {
|
|
/* Participant used for interacting to the security forwarder. */
|
|
struct PRESParticipant *participant;
|
|
/* Key material for decoding. */
|
|
void *receiverCryptoHandle;
|
|
/*
|
|
* Buffer used for decoding the current sample. The memory associated to
|
|
* it is provided by the PsReaderQueue/CstCollator getSampleBuffer.
|
|
*/
|
|
struct REDABuffer decodedSampleBuffer;
|
|
};
|
|
|
|
|
|
#define PRES_READER_QUEUE_SECURITY_DEFAULT \
|
|
{ \
|
|
NULL, /* participant */ \
|
|
NULL, /* receiverCryptoHandle */ \
|
|
REDA_BUFFER_INVALID /* decodedSampleBuffer */ \
|
|
}
|
|
|
|
|
|
struct PRESReaderQueueStateProperty {
|
|
/*
|
|
* Pool buffer threshold for sample serialization.
|
|
* UNLIMITED by default or set by user via the property
|
|
* NDDS_DRHISTORY_MEMORYMANAGER_FASTPOOL_POOLBUFFERMAXSIZE
|
|
*/
|
|
int cdrPoolBufferThreshold;
|
|
|
|
/*
|
|
* Maximun value for a serialized sample that can be larger than the
|
|
* getSerializedSampleMaxSizeFnc if security is enabled.
|
|
*/
|
|
int maxSerializedSampleSize;
|
|
|
|
/*
|
|
* Maximum value for a serialized sample received on an unprotected channel.
|
|
*/
|
|
RTI_UINT32 unprotectedChannelsMaxLength;
|
|
|
|
/* State used for security-related operations such as decoding */
|
|
struct PRESReaderQueueSecurity security;
|
|
|
|
/*e Owner of this queue */
|
|
struct MIGRtpsGuid readerGuid;
|
|
|
|
/*e OID of the subscriber */
|
|
MIGRtpsObjectId readerGroupOid;
|
|
|
|
/*
|
|
* The DataReader queue will process only samples associated with
|
|
* this TopicQuery
|
|
*/
|
|
struct PRESOctetGuid topicQueryGuid;
|
|
/*
|
|
* Indicates if the DataReader queue is processing samples associated with
|
|
* a snapshot TopicQuery
|
|
*/
|
|
RTIBool isSnapshotTopicQuery;
|
|
|
|
/*e Control growth in number of virtual remote writers. */
|
|
struct REDAFastBufferPoolGrowthProperty virtualWriterCount;
|
|
|
|
/*e The reliability QoS. */
|
|
struct PRESReliabilityQosPolicy reliabilityQos;
|
|
|
|
/* For Testing Only: Indicates if filtering has to be performed always
|
|
on serialized data */
|
|
RTIBool _alwaysFilterOnSerialized;
|
|
};
|
|
|
|
|
|
/* clang-format off */
|
|
#define PRESReaderQueueStateProperty_INITIALIZER \
|
|
{ \
|
|
PRES_LENGTH_UNLIMITED, /* cdrPoolBufferThreshold */ \
|
|
0, /* maxSerializedSampleSize */ \
|
|
MIG_UNPROTECTED_CHANNELS_MAX_LENGTH_DEFAULT, /* unprotectedChannelsMaxLength */ \
|
|
PRES_READER_QUEUE_SECURITY_DEFAULT, /* security */ \
|
|
MIG_RTPS_GUID_UNKNOWN, /* readerGuid */ \
|
|
MIG_RTPS_OBJECT_ID_UNKNOWN, /* readerGroupOid */ \
|
|
PRES_OCTET_GUID_ZERO, /* topicQueryGuid */ \
|
|
RTI_FALSE, /* isSnapshotTopicQuery */ \
|
|
/* virtualWriterCount */ \
|
|
{2, REDA_FAST_BUFFER_POOL_UNLIMITED, REDA_FAST_BUFFER_POOL_UNLIMITED}, \
|
|
PRES_BEST_EFFORT_RELIABILITY_QOS_POLICY_DEFAULT, \
|
|
RTI_FALSE /* _alwaysFilterOnSerialized */ \
|
|
}
|
|
/* clang-format on */
|
|
|
|
|
|
struct PRESReaderQueueProperty {
|
|
/* Reader queue state properties which are used beyond initialization */
|
|
struct PRESReaderQueueStateProperty state;
|
|
|
|
/*e Control growth in number of remote writers. */
|
|
struct REDAFastBufferPoolGrowthProperty remoteWriterCount;
|
|
|
|
/* Indicates whether to lazily allocate resources for batch processing */
|
|
RTIBool lazilyAllocateBatchResources;
|
|
};
|
|
|
|
|
|
/* clang-format off */
|
|
#define PRESReaderQueueProperty_INITIALIZER \
|
|
{ \
|
|
PRESReaderQueueStateProperty_INITIALIZER, /* state */ \
|
|
/* remoteWriterCount */ \
|
|
{2, REDA_FAST_BUFFER_POOL_UNLIMITED, REDA_FAST_BUFFER_POOL_UNLIMITED}, \
|
|
RTI_TRUE /* lazilyAllocateBatchResources */ \
|
|
}
|
|
/* clang-format on */
|
|
|
|
|
|
#define PRESReaderQueueVirtualWriterListProperty_INITIALIZER { \
|
|
{32, REDA_FAST_BUFFER_POOL_UNLIMITED, REDA_FAST_BUFFER_POOL_UNLIMITED}, \
|
|
{32, REDA_FAST_BUFFER_POOL_UNLIMITED, REDA_FAST_BUFFER_POOL_UNLIMITED}, \
|
|
{32, REDA_FAST_BUFFER_POOL_UNLIMITED, REDA_FAST_BUFFER_POOL_UNLIMITED}, \
|
|
PRESReaderQueueVirtualWriterListStateProperty_INITIALIZER, \
|
|
0, \
|
|
{32, REDA_FAST_BUFFER_POOL_UNLIMITED, REDA_FAST_BUFFER_POOL_UNLIMITED}, \
|
|
{32, REDA_FAST_BUFFER_POOL_UNLIMITED, REDA_FAST_BUFFER_POOL_UNLIMITED}, \
|
|
PRES_DURABILITY_QOS_POLICY_DEFAULT, \
|
|
{PRES_PERSISTENCE_SERVICE_QOS}, \
|
|
PRES_DUP_FILTER_VIRTUAL_RELIABILITY \
|
|
}
|
|
|
|
struct PRESReaderQueueListener;
|
|
|
|
struct PRESReaderQueueListenerStorage;
|
|
|
|
|
|
#define PRES_MAXIMUM_QUERY_CONDITIONS 32
|
|
|
|
|
|
struct PRESPsService_QueryConditionState {
|
|
/* The summary field simply indicates if the query condition is active or not */
|
|
RTI_UINT32 summary;
|
|
/*
|
|
* Array of bitfields indicating the states of each query condition. See
|
|
* PsReadCondition.c for a description of each of the bits.
|
|
*/
|
|
RTI_UINT32 QCstates[PRES_MAXIMUM_QUERY_CONDITIONS];
|
|
};
|
|
|
|
|
|
#define PRESPsService_QueryConditionState_INITIALIZER {0, {0}}
|
|
|
|
|
|
struct PRESReaderQueueCommittalInfoNode {
|
|
struct REDAInlineListNode _node;
|
|
struct PRESReaderQueueCommittalInfo * data;
|
|
};
|
|
|
|
|
|
struct PRESReaderQueueCommittalInfo {
|
|
struct REDAInlineListNode _node;
|
|
struct PRESReaderQueueCommittalInfoNode _wakeupConditionNode;
|
|
RTIBool keyed;
|
|
void * queue;
|
|
RTIBool dataAvailable;
|
|
int lostCount;
|
|
PRESSampleLostStatusKind lostReason;
|
|
int rejectedCount;
|
|
PRESSampleRejectedStatusKind rejectedReason;
|
|
struct MIGRtpsKeyHash rejectedInstanceKeyHash;
|
|
RTI_UINT32 readConditionState;
|
|
struct PRESPsService_QueryConditionState queryConditionState;
|
|
void * queueUserData;
|
|
};
|
|
|
|
extern PRESDllExport
|
|
void PRESReaderQueueComittalInfo_initialize(
|
|
struct PRESReaderQueueCommittalInfo * ci,
|
|
RTIBool keyed,
|
|
void * queue,
|
|
void * queueUserData);
|
|
|
|
extern PRESDllExport
|
|
void PRESReaderQueueComittalInfo_reset(
|
|
struct PRESReaderQueueCommittalInfo * ci);
|
|
|
|
extern PRESDllExport struct PRESReaderQueueVirtualWriterList *
|
|
PRESReaderQueueVirtualWriterList_new(
|
|
const struct PRESReaderQueueVirtualWriterListProperty *property,
|
|
const struct PRESReaderQueueListener *listener,
|
|
const struct PRESReaderQueueListenerStorage *storage);
|
|
|
|
extern PRESDllExport void
|
|
PRESReaderQueueVirtualWriterList_delete(struct PRESReaderQueueVirtualWriterList *me);
|
|
|
|
extern PRESDllExport
|
|
struct PRESReaderQueueVirtualWriter *
|
|
PRESReaderQueueVirtualWriterList_assertVirtualWriter(
|
|
struct PRESReaderQueueVirtualWriterList *me,
|
|
struct PRESReaderQueueVirtualReader *virtualReader,
|
|
int *failReason,
|
|
const struct MIGRtpsGuid *guid,
|
|
RTIBool persist);
|
|
|
|
extern PRESDllExport struct PRESReaderQueueVirtualWriter *
|
|
PRESReaderQueueVirtualWriterList_getFirstVirtualWriter(
|
|
struct PRESReaderQueueVirtualWriterList *me);
|
|
|
|
extern PRESDllExport struct PRESReaderQueueVirtualWriter *
|
|
PRESReaderQueueVirtualWriterList_getNextVirtualWriter(
|
|
struct PRESReaderQueueVirtualWriterList *me);
|
|
|
|
extern PRESDllExport unsigned int
|
|
PRESReaderQueueVirtualWriterList_getVirtualWriterCount(
|
|
struct PRESReaderQueueVirtualWriterList *me);
|
|
|
|
extern PRESDllExport const struct RTINtpTime *
|
|
PRESReaderQueueVirtualWriterList_getEndpointAvailabilityTimeout(
|
|
struct PRESReaderQueueVirtualWriterList *me);
|
|
|
|
extern PRESDllExport const struct RTINtpTime *
|
|
PRESReaderQueueVirtualWriterList_getDataAvailabilityTimeout(
|
|
struct PRESReaderQueueVirtualWriterList *me);
|
|
|
|
extern PRESDllExport struct PRESReaderQueueVirtualWriter *
|
|
PRESReaderQueueVirtualWriterList_getFirstVirtualWriterInEndpointAvailabilityTimeoutList(
|
|
struct PRESReaderQueueVirtualWriterList *me);
|
|
|
|
extern PRESDllExport void
|
|
PRESReaderQueueVirtualWriterList_removeVirtualWriterFromEndpointAvailabilityTimeoutList(
|
|
struct PRESReaderQueueVirtualWriterList *me,
|
|
struct PRESReaderQueueVirtualWriter * virtualWriter);
|
|
|
|
extern PRESDllExport struct PRESReaderQueueVirtualWriter *
|
|
PRESReaderQueueVirtualWriterList_getFirstVirtualWriterInInitialDataAvailabilityTimeoutList(
|
|
struct PRESReaderQueueVirtualWriterList *me);
|
|
|
|
extern PRESDllExport void
|
|
PRESReaderQueueVirtualWriterList_removeVirtualWriterFromInitialDataAvailabilityTimeoutList(
|
|
struct PRESReaderQueueVirtualWriterList *me,
|
|
struct PRESReaderQueueVirtualWriter * virtualWriter);
|
|
|
|
extern PRESDllExport void
|
|
PRESReaderQueueVirtualWriterList_removeVirtualWriterFromPendingAppAckList(
|
|
struct PRESReaderQueueVirtualWriterList *me,
|
|
struct PRESReaderQueueVirtualWriter * virtualWriter);
|
|
|
|
/*e \ingroup PRESReaderQueueModule
|
|
*/
|
|
extern PRESDllExport struct PRESReaderQueueVirtualSample *
|
|
PRESReaderQueueVirtualWriterList_getFirstVirtualSampleInDataAvailabilityTimeoutList(
|
|
struct PRESReaderQueueVirtualWriterList *me);
|
|
|
|
extern PRESDllExport void
|
|
PRESReaderQueueVirtualWriterList_removeVirtualSampleFromDataAvailabilityTimeoutList(
|
|
struct PRESReaderQueueVirtualWriterList *me,
|
|
struct PRESReaderQueueVirtualSample * virtualSample);
|
|
|
|
extern PRESDllExport struct PRESReaderQueueVirtualWriter *
|
|
PRESReaderQueueVirtualWriterList_findVirtualWriter(
|
|
const struct PRESReaderQueueVirtualWriterList *me,
|
|
const struct MIGRtpsGuid * guid);
|
|
|
|
extern PRESDllExport
|
|
struct PRESReaderQueueCommittalInfo *
|
|
PRESReaderQueueVirtualWriterList_getComittalInfo(
|
|
struct PRESReaderQueueVirtualWriterList *me);
|
|
|
|
extern PRESDllExport
|
|
void PRESReaderQueueVirtualWriterList_returnComittalInfo(
|
|
struct PRESReaderQueueVirtualWriterList *me,
|
|
struct PRESReaderQueueCommittalInfo * ci);
|
|
|
|
extern PRESDllExport
|
|
RTIBool PRESReaderQueueVirtualWriterList_assertRemoteWriter(
|
|
struct PRESReaderQueueVirtualWriterList *me,
|
|
const struct MIGRtpsGuid * guid);
|
|
|
|
extern PRESDllExport
|
|
void PRESReaderQueueVirtualWriterList_removeRemoteWriter(
|
|
struct PRESReaderQueueVirtualWriterList *me,
|
|
const struct MIGRtpsGuid * guid);
|
|
|
|
extern PRESDllExport
|
|
RTIBool PRESReaderQueueVirtualWriterList_existsRemoteWriter(
|
|
struct PRESReaderQueueVirtualWriterList *me,
|
|
const struct MIGRtpsGuid * guid);
|
|
|
|
extern PRESDllExport
|
|
RTIBool PRESReaderQueueVirtualWriterList_confirmAcknowledgement(
|
|
const struct PRESReaderQueueVirtualWriterList * virtualWriterList,
|
|
struct REDAInlineList * updateAppAckList,
|
|
struct PRESReaderQueueVirtualReader * virtualReader,
|
|
const struct MIGRtpsGuid * remoteWriterGuid,
|
|
struct MIGRtpsAppAck * appAckConf,
|
|
const struct RTINtpTime * now);
|
|
|
|
extern PRESDllExport
|
|
void
|
|
PRESReaderQueueVirtualWriterList_deleteVirtualReader(
|
|
struct PRESReaderQueueVirtualWriterList *me,
|
|
struct PRESReaderQueueVirtualReader * virtualReader);
|
|
|
|
extern PRESDllExport
|
|
struct PRESReaderQueueVirtualReader *
|
|
PRESReaderQueueVirtualWriterList_newVirtualReader(
|
|
struct PRESReaderQueueVirtualWriterList *me,
|
|
const struct MIGRtpsGuid * guid,
|
|
const struct PRESReaderQueueVirtualReaderProperty * property,
|
|
const struct PRESOdbcDatabaseConnection * odbcDatabaseCx);
|
|
|
|
extern PRESDllExport
|
|
RTIBool PRESReaderQueueVirtualReader_supportStatePersistence(
|
|
struct PRESReaderQueueVirtualReader *me);
|
|
|
|
extern PRESDllExport
|
|
RTIBool PRESReaderQueueVirtualReader_persistVirtualWriter(
|
|
struct PRESReaderQueueVirtualReader * me,
|
|
struct PRESReaderQueueVirtualWriter * virtualWriter,
|
|
RTIBool update);
|
|
|
|
extern PRESDllExport
|
|
RTIBool PRESReaderQueueVirtualReader_restoreInstanceEntry(
|
|
struct PRESReaderQueueVirtualReader * me,
|
|
struct PRESReaderQueueVirtualWriterListInstanceEntry * entry,
|
|
RTIBool * inDatabase);
|
|
|
|
/*e \ingroup PRESReaderQueueModule
|
|
|
|
Stores the instance entry into the database
|
|
|
|
@param me \b In. "this". If NULL, noop.
|
|
*/
|
|
extern PRESDllExport
|
|
RTIBool PRESReaderQueueVirtualReader_persistInstanceEntry(
|
|
struct PRESReaderQueueVirtualReader * me,
|
|
struct PRESReaderQueueVirtualWriterListInstanceEntry * entry,
|
|
RTIBool update);
|
|
|
|
extern PRESDllExport
|
|
RTIBool PRESReaderQueueVirtualReader_restoreVirtualWriter(
|
|
struct PRESReaderQueueVirtualReader * me,
|
|
struct PRESReaderQueueVirtualWriter * virtualWriter,
|
|
RTIBool * inDatabase);
|
|
|
|
extern PRESDllExport
|
|
void PRESReaderQueueVirtualReader_finalizeOdbc(
|
|
struct PRESReaderQueueVirtualReader * me);
|
|
|
|
extern PRESDllExport
|
|
struct PRESReaderQueuePhysicalWriter * PRESReaderQueueVirtualWriter_assertPhysicalWriter(
|
|
struct PRESReaderQueueVirtualWriter *me,
|
|
int *failReason,
|
|
RTIBool *alreadyExists, /* Out */
|
|
struct MIGRtpsAppAck *appAckState, /* inout */
|
|
const struct MIGRtpsGuid *physicalWriterGuid,
|
|
const char *physicalRoleName,
|
|
void *writer,
|
|
const struct PRESPresentationQosPolicy *presentationQos,
|
|
const struct PRESServiceQosPolicy *serviceQos,
|
|
const struct REDASequenceNumber *nextCommittalSn,
|
|
RTIBool keyed);
|
|
|
|
extern PRESDllExport
|
|
void PRESReaderQueueVirtualWriter_removeVirtualSample(
|
|
struct PRESReaderQueueVirtualWriter * me,
|
|
struct PRESReaderQueueVirtualSample * virtualSample);
|
|
|
|
extern PRESDllExport
|
|
struct PRESReaderQueueVirtualSample * PRESReaderQueueVirtualWriter_assertVirtualSample(
|
|
struct PRESReaderQueueVirtualWriter *me,
|
|
int *failReason,
|
|
RTIBool *alreadyExists,
|
|
struct PRESReaderQueuePhysicalWriter **physicalWriter,
|
|
struct MIGRtpsAppAck *appAckState, /* inout */
|
|
const struct REDASequenceNumber *virtualSn,
|
|
void *sample,
|
|
const struct MIGRtpsGuid *physicalWriterGuid,
|
|
const char *physicalRoleName,
|
|
void *writer,
|
|
const struct PRESPresentationQosPolicy *presentationQos,
|
|
const struct PRESServiceQosPolicy *serviceQos,
|
|
const struct REDASequenceNumber *nextCommittalSn,
|
|
RTIBool keyed,
|
|
const struct PRESReaderQueueEndCoherentSetInfo *endCoherentSetInfo,
|
|
const struct REDASequenceNumber *physicalSn,
|
|
struct PRESReaderQueueCoherentSetInfo *coherentSetInfo);
|
|
|
|
extern PRESDllExport RTIBool
|
|
PRESReaderQueueVirtualWriter_removePhysicalWriter(
|
|
struct PRESReaderQueueVirtualWriter * virtualWriter,
|
|
const struct MIGRtpsGuid * physicalWriterGuid);
|
|
|
|
extern PRESDllExport
|
|
struct PRESReaderQueueVirtualSample *
|
|
PRESReaderQueueVirtualWriter_getNextComittableVirtualSample(
|
|
struct PRESReaderQueueVirtualWriter * virtualWriter);
|
|
|
|
extern PRESDllExport
|
|
void PRESReaderQueueVirtualWriter_stopWaitingForRequiredMatchedEndpointGroups(
|
|
struct PRESReaderQueueVirtualWriter *me);
|
|
|
|
extern PRESDllExport
|
|
void PRESReaderQueueVirtualWriter_updateVirtualWriterInfo(
|
|
struct PRESReaderQueueVirtualWriter *me,
|
|
struct PRESReaderQueuePhysicalWriter * physicalWriter,
|
|
const struct MIGRtpsVirtualWriterInfo * info,
|
|
const struct REDASequenceNumber * lastGroupAvailableVirtualSn);
|
|
|
|
extern PRESDllExport
|
|
struct PRESReaderQueueVirtualSample *
|
|
PRESReaderQueueVirtualWriter_getFirstVirtualSample(
|
|
struct PRESReaderQueueVirtualWriter * virtualWriter);
|
|
|
|
extern PRESDllExport
|
|
struct PRESReaderQueueVirtualSample *
|
|
PRESReaderQueueVirtualWriter_getNextVirtualSample(
|
|
struct PRESReaderQueueVirtualWriter * virtualWriter);
|
|
|
|
|
|
struct PRESReaderQueueListenerStorage {
|
|
void *field[COMMEND_WRITER_SERVICE_WRITER_LISTENER_STORAGE_LENGTH];
|
|
};
|
|
|
|
typedef RTIBool
|
|
(*PRESReaderQueueListenerOnLostRequiredMatchedEndpointGroups)(
|
|
const struct PRESReaderQueueListener *listener,
|
|
const struct PRESReaderQueueListenerStorage * storage,
|
|
struct PRESReaderQueueVirtualWriter * virtualWriter);
|
|
|
|
typedef RTIBool
|
|
(*PRESReaderQueueListenerOnDiscoveredRequiredMatchedEndpointGroups)(
|
|
const struct PRESReaderQueueListener *listener,
|
|
const struct PRESReaderQueueListenerStorage * storage,
|
|
struct PRESReaderQueueVirtualWriter * virtualWriter);
|
|
|
|
typedef RTIBool
|
|
(*PRESReaderQueueListenerOnNewVirtualSampleCallback)(
|
|
const struct PRESReaderQueueListener *listener,
|
|
const struct PRESReaderQueueListenerStorage * storage,
|
|
struct PRESReaderQueueVirtualWriter * virtualWriter,
|
|
struct PRESReaderQueueVirtualSample * virtualSample);
|
|
|
|
typedef RTIBool
|
|
(*PRESReaderQueueListenerOnSendAppAckCallback)(
|
|
const struct PRESReaderQueueListener *listener,
|
|
const struct PRESReaderQueueListenerStorage * storage);
|
|
|
|
struct PRESReaderQueueListener {
|
|
PRESReaderQueueListenerOnLostRequiredMatchedEndpointGroups
|
|
onLostRequiredMatchedEndpointGroups;
|
|
PRESReaderQueueListenerOnDiscoveredRequiredMatchedEndpointGroups
|
|
onDiscoveredRequiredMatchedEndpointGroups;
|
|
PRESReaderQueueListenerOnNewVirtualSampleCallback
|
|
onNewVirtualSample;
|
|
/* This callback is invoked whenever a new AppAck message
|
|
* is ready to be sent
|
|
*/
|
|
PRESReaderQueueListenerOnSendAppAckCallback
|
|
onSendAppAck;
|
|
};
|
|
|
|
|
|
struct PRESReaderQueueTopicQueryInfo {
|
|
struct REDAInlineListNode _node;
|
|
void * queue;
|
|
/* TopicQuery owner */
|
|
struct MIGRtpsGuid _topicQueryGuid;
|
|
/* Indicates whether the owner TopicQuery is already deleted */
|
|
RTIBool _isTopicQueryDeleted;
|
|
};
|
|
|
|
|
|
#include "pres/pres_readerQueue_impl.h"
|
|
|
|
|
|
#ifdef __cplusplus
|
|
} /* extern "C" */
|
|
#endif
|
|
|
|
#endif /* pres_readerQueue_h */
|