/* (c) Copyright 2003-2021, Real-Time Innovations, Inc. All rights reserved. */ /* * @(#)pres_participantChannel.h generated by: makeheader Tue Apr 7 22:56:13 2026 * * built from: participantChannel.ifc */ #ifndef pres_participantChannel_h #define pres_participantChannel_h #ifndef pres_dll_h #include "pres/pres_dll.h" #endif #ifndef osapi_type_h #include "osapi/osapi_type.h" #endif #ifndef reda_fastBuffer_h #include "reda/reda_fastBuffer.h" #endif #ifndef cdr_stream_h #include "cdr/cdr_stream.h" #endif #ifndef pres_common_h #include "pres/pres_common.h" #endif #ifndef cdr_typeCode_h #include "cdr/cdr_typeCode.h" #endif #ifndef pres_typePlugin_h #include "pres/pres_typePlugin.h" #endif #ifndef pres_psService_h #include "pres/pres_psService.h" #endif #ifndef netio_dnsTracker_h #include "netio/netio_dnsTracker.h" #endif #ifdef __cplusplus extern "C" { #endif struct PRESParticipantChannelReader; struct PRESParticipantChannelWriter; struct PRESParticipantChannel; struct PRESParticipantChannelReaderListener { struct PRESPsReaderListener _parent; void *_data; }; #define PRESParticipantChannelReaderListener_INITIALIZER { \ PRESPsReaderListener_INITIALIZER /* _parent */, \ NULL /* _data */ \ } typedef RTIBool (*PRESParticipantChannelInitializeWriterCallback)( struct PRESParticipantChannelWriter *me, const void *channel, const struct PRESParticipantChannel *parent, struct REDAWorker *worker); typedef RTIBool (*PRESParticipantChannelInitializeReaderCallback)( struct PRESParticipantChannelReader *me, const void *channel, const struct PRESParticipantChannel *parent, const struct PRESParticipantChannelReaderListener *listener, struct REDAWorker *worker); struct PRESParticipantChannelProperty { PRESCdrPaddingKind cdrPaddingKind; /* Used to configure all writers */ struct PRESPsWriterProperty writerProperty; /* Used to configure all readers */ struct PRESPsReaderProperty readerProperty; /* The transport priority used for readers and writers in the channel */ struct PRESTransportPriorityQosPolicy transportPriority; /* The transport priority used for readers and writers in the channel */ struct RTINetioAliasList transportAliasList; PRESParticipantChannelInitializeReaderCallback initializeNonSecureReader; PRESParticipantChannelInitializeReaderCallback initializeSecureReader; PRESParticipantChannelInitializeWriterCallback initializeNonSecureWriter; PRESParticipantChannelInitializeWriterCallback initializeSecureWriter; /* * Determines whether nonsecure endpoints are created. For example, * this is set to RTI_FALSE when creating the ParticipantConfigChannel * where unauthenticated participants are not allowed. */ RTIBool createNonSecureEndpoints; /* * Determines whether secure endpoints are created. This is true when * using security and secure participant discovery is enabled. */ RTIBool createSecureEndpoints; MIGRtpsObjectId nonSecureWriterOid; MIGRtpsObjectId secureWriterOid; MIGRtpsObjectId nonSecureReaderOid; MIGRtpsObjectId secureReaderOid; }; #define PRES_PARTICIPANT_CHANNEL_PROPERTY_INITIALIZER \ { \ PRES_NOT_SET_CDR_PADDING, /* cdrPaddingKind */ \ PRES_PS_WRITER_PROPERTY_DEFAULT, /* writerProperty */ \ PRES_PS_READER_PROPERTY_DEFAULT, /* readerProperty */ \ { NDDS_TRANSPORT_PRIORITY_DEFAULT }, /* transportPriority*/ \ RTI_NETIO_ALIAS_LIST_DEFAULT, /* transportAliasList */ \ NULL /* initializeNonSecureReader */, \ NULL /* initializeSecureReader */, \ NULL /* initializeNonSecureWriter */, \ NULL /* initializeSecureWriter */, \ RTI_TRUE, /* createNonSecureEndpoints */ \ RTI_FALSE, /* createSecureEndpoints */ \ MIG_RTPS_OBJECT_ID_UNKNOWN, /* writerOid */ \ MIG_RTPS_OBJECT_ID_UNKNOWN, /* secureWriterOid */ \ MIG_RTPS_OBJECT_ID_UNKNOWN, /* readerOid */ \ MIG_RTPS_OBJECT_ID_UNKNOWN /* secureReaderOid */ \ } struct PRESParticipantChannel { struct MIGRtpsGuid _guid; struct PRESParticipant *_participant; struct COMMENDFacade *_facade; struct PRESGroup *_writerGroup; struct PRESParticipantChannelWriter *_nonSecureWriter; struct PRESParticipantChannelWriter *_secureWriter; struct PRESGroup *_readerGroup; struct PRESParticipantChannelReader *_nonSecureReader; struct PRESParticipantChannelReader *_secureReader; struct PRESTopic *_nonSecureTopic; struct PRESTopic *_secureTopic; RTIBool _isEnabled; const char *_nonSecureTopicName; const char *_secureTopicName; const char *_typeName; struct PRESParticipantChannelProperty *_property; struct PRESPropertyQosPolicy _propertyQosPolicy; PRESParticipantChannelInitializeReaderCallback initializeNonSecureReader; PRESParticipantChannelInitializeReaderCallback initializeSecureReader; PRESParticipantChannelInitializeWriterCallback initializeNonSecureWriter; PRESParticipantChannelInitializeWriterCallback initializeSecureWriter; }; #define PRESParticipantChannel_asParentChannel(channel__) \ (struct PRESParticipantChannel *) (channel__) #define PRESParticipantChannel_isEnabled(channel__) (channel__)->_isEnabled #define PRESBuiltinEndpointMask_isEDS(endpoints__) \ ((((endpoints__) & DISC_BUILTIN_ENDPOINT_PARTICIPANT_PROXY_ANNOUNCER) == \ DISC_BUILTIN_ENDPOINT_PARTICIPANT_PROXY_ANNOUNCER) && \ (((endpoints__) & DISC_BUILTIN_ENDPOINT_PARTICIPANT_STATE_DETECTOR) == \ DISC_BUILTIN_ENDPOINT_PARTICIPANT_STATE_DETECTOR)) extern PRESDllExport RTIBool PRESParticipantChannel_enable( struct PRESParticipantChannel *me, struct REDAWorker *worker); extern PRESDllExport RTIBool PRESParticipantChannel_write( struct PRESParticipantChannel *me, struct REDASequenceNumber *sentSn, RTIBool writeToSecure, RTIBool writeToNonSecure, void *data, struct REDAWorker *worker); extern PRESDllExport RTIBool PRESParticipantChannel_dispose( struct PRESParticipantChannel *me, struct REDAWorker *worker); extern PRESDllExport RTIBool PRESParticipantChannel_finalize( struct PRESParticipantChannel *me, struct REDAWorker *worker); extern PRESDllExport RTIBool PRESParticipantChannel_setReaderListener( struct PRESParticipantChannel *me, int *failReason, MIGRtpsObjectId readerObjectId, const struct PRESParticipantChannelReaderListener *listener, PRESStatusKindMask mask, struct REDAWorker *worker); extern PRESDllExport RTIBool PRESParticipantChannel_getReaderListener( struct PRESParticipantChannel *me, struct PRESParticipantChannelReaderListener *outListener, MIGRtpsObjectId readerObjectId); extern PRESDllExport struct PRESPsReader * PRESParticipantChannel_getNonsecureReader( const struct PRESParticipantChannel *me); #define PRES_PARTICIPANT_CHANNEL_PARTICIPANT_LIVELINESS_ASSERT_PERIOD_DEFAULT \ { \ 30, 0 \ } #define PRES_PARTICIPANT_ANNOUNCEMENT_CHANNEL_MIN_PARTICIPANT_ANNOUNCEMENT_PERIOD_DEFAULT \ { \ 0, 10000000L \ } #define PRES_PARTICIPANT_ANNOUNCEMENT_CHANNEL_MAX_PARTICIPANT_ANNOUNCEMENT_PERIOD_DEFAULT \ { \ 1, 0 \ } #define PRES_PARTICIPANT_ANNOUNCEMENT_CHANNEL_NUMBER_OF_FAST_ATTEMPTS_DEFAULT \ (1) #define PRES_PARTICIPANT_ANNOUNCEMENT_CHANNEL_NEW_REMOTE_PARTICIPANT_ANNOUNCEMENTS_DEFAULT \ (2) #ifndef RTI_EXCLUDE_BB_SECURITY #define PRES_PARTICIPANT_ANNOUNCEMENT_CHANNEL_SAMPLE_SIGNATURE_BITMAP_NONE \ (0x00000000) /*i Bits used to configure the isSampleSignatureVerificationEnabled bitmap */ /*i Enable the verification of signatures in the receiving side */ #define PRES_PARTICIPANT_ANNOUNCEMENT_CHANNEL_DESERIALIZE_SAMPLE_SIGNATURE_BIT \ (0x00000001 << 0) /*i Enable the generation of signatures in the sending side */ #define PRES_PARTICIPANT_ANNOUNCEMENT_CHANNEL_SERIALIZE_SAMPLE_SIGNATURE_BIT \ (0x00000001 << 1) #ifdef RTI_LM_ARCHITECTURE /*i Append the whitelisting RTI Connext Express edition signature to the * existing sample signature (requires * PRES_PARTICIPANT_ANNOUNCEMENT_CHANNEL_SERIALIZE_SAMPLE_SIGNATURE_BIT to * be set too) */ #define PRES_PARTICIPANT_ANNOUNCEMENT_CHANNEL_SERIALIZE_EXPRESS_SIGNATURE_BIT \ (0x00000001 << 2) #endif #endif struct PRESParticipantAnnouncementChannelProperty { struct PRESParticipantChannelProperty _parent; struct PRESPsAnonWriterProperty *_anonWriterProperty; /* * When this is set to TRUE, a participant can match with participants that * are not in its initial_peers list and have not been added through * add_peer. When this is FALSE, a participant will only match with a * remote participant if it is in its initial_peers list or was added * through add_peer. */ RTIBool acceptUnknownPeers; /* * This is the period that participant announcements are sent to the list * of potential peers. When using SPDP2, this is the * participant_announcement_period and announcements are not sent to * remote participants that we have fully matched with. When using SPDP, * this is the participant_liveliness_assert_period and announcements * are sent to both locators without matched participants and locators * with matched participants (to maintain liveliness). */ RTINtpTime participantAnnouncementPeriod; /* * Initial participant announcements and participant announcements sent * when a new remote participant is discovered are sent out using a random * time generated within a range. minParticipantAnnouncementPeriod is the * minimum limit for this range. */ RTINtpTime minParticipantAnnouncementPeriod; /* * maxParticipantAnnouncementPeriod is the maximum limit for the range for * generating a random time to send participant announcements as described * above. */ RTINtpTime maxParticipantAnnouncementPeriod; /* * Period at which the local domain participant will be announced in the * default domain (0) over multicast */ RTINtpTime domainBroadcastPeriod; /* * The number of initial participant announcements sent when asserting * new destinations. */ int initialParticipantAnnouncements; /* * The number of initial participant announcements sent when a local * participant is first enabled. */ int initialParticipantAnnouncementsOnEnable; struct PRESPsReaderFragmentationResourceLimits participantReaderFragmentationResourceLimits; /* * The number of participant announcements sent when discovering a new * remote participant. */ int newRemoteParticipantAnnouncements; #ifndef RTI_EXCLUDE_BB_SECURITY /* Bitmap that configures sample signature generation and verification. */ RTI_UINT32 isSampleSignatureVerificationEnabled; #endif /* * Time that must have passed since an instance's lastTouchedTime in the * non-secure participant announcement reader (bootstrap/DATA(p)) in order * to be purged by PRESPsReader_onPurgeAnonReaderNoWritersInstances if it * has no writers. */ RTINtpTime purgeNoWritersInstancesExpirationTime; }; #ifndef RTI_EXCLUDE_BB_SECURITY #define PRES_PARTICIPANT_ANNOUNCEMENT_CHANNEL_OPT_PROPERTY_DEFAULT \ PRES_PARTICIPANT_ANNOUNCEMENT_CHANNEL_SAMPLE_SIGNATURE_BITMAP_NONE, \ /* isSampleSignatureVerificationEnabled */ #else #define PRES_PARTICIPANT_ANNOUNCEMENT_CHANNEL_OPT_PROPERTY_DEFAULT #endif #define PRES_PARTICIPANT_ANNOUNCEMENT_CHANNEL_PROPERTY_DEFAULT \ { \ PRES_PARTICIPANT_CHANNEL_PROPERTY_INITIALIZER, /* parent */ \ NULL, /* _anonWriterProperty */ \ RTI_TRUE, /* accept_unknown_peers */ \ PRES_PARTICIPANT_CHANNEL_PARTICIPANT_LIVELINESS_ASSERT_PERIOD_DEFAULT, \ /* participantAnnouncementPeriod */ \ PRES_PARTICIPANT_ANNOUNCEMENT_CHANNEL_MIN_PARTICIPANT_ANNOUNCEMENT_PERIOD_DEFAULT, \ /* minParticipantAnnouncementPeriod */ \ PRES_PARTICIPANT_ANNOUNCEMENT_CHANNEL_MAX_PARTICIPANT_ANNOUNCEMENT_PERIOD_DEFAULT, \ /* maxParticipantAnnouncementPeriod */ \ { 0, 0 }, /* domainBroadcastPeriod */ \ PRES_PARTICIPANT_ANNOUNCEMENT_CHANNEL_NUMBER_OF_FAST_ATTEMPTS_DEFAULT, \ /* initialParticipantAnnouncements */ \ PRES_PARTICIPANT_ANNOUNCEMENT_CHANNEL_NUMBER_OF_FAST_ATTEMPTS_DEFAULT, \ /* initialParticipantAnnouncementsOnEnable */ \ PRES_PS_READER_FRAGMENTATION_RESOURCE_LIMITS_DEFAULT, \ /* participantReaderFragmentationResourceLimits */ \ PRES_PARTICIPANT_ANNOUNCEMENT_CHANNEL_NEW_REMOTE_PARTICIPANT_ANNOUNCEMENTS_DEFAULT, \ /* newRemoteParticipantAnnouncements */ \ PRES_PARTICIPANT_ANNOUNCEMENT_CHANNEL_OPT_PROPERTY_DEFAULT \ { 60, 0 } /* purgeNoWritersInstancesExpirationTime */ \ } struct PRESParticipantAnnouncementChannel { /* Base structure that contains readers, writers, topics, groups, etc */ struct PRESParticipantChannel _parent; /* * Properties that configure values specific to the announcement channel. * This is a pointer because when using SPDP or SPDP2 this will point to * the property in the base plugin. */ struct PRESParticipantAnnouncementChannelProperty *_property; /* * List of destinations the anon writer will write to. The life of this * list should be maintained outside of this channel. * * (ie when this channel is used with SPDP, the list is created and * destroyed by the SPDP base plugin) */ struct RTINetioDestinationList *_destinations; /* Domain broadcast destination */ struct RTINetioLocator _domainBroadcastDestination; struct REDAExclusiveArea *_writerGroupEA; RTIBool _multicastEnabled; RTIBool _isEnabled; }; extern PRESDllExport struct PRESParticipantAnnouncementChannel * PRESParticipantAnnouncementChannel_new( struct PRESParticipant *participant, struct RTINetioDestinationList *destinationsList, const struct RTINetioLocator *peer_destinations, const int peer_destination_count, struct REDAExclusiveArea *readerGroupEA, struct REDAExclusiveArea *writerGroupEA, struct PRESParticipantAnnouncementChannelProperty *announcementProperty, const struct PRESPropertyQosPolicy *propertyQosPolicy, const char *nonSecureTopicName, const char *secureTopicName, const char *typeName, struct PRESParticipantChannelReaderListener *readerListener, struct REDAWorker *worker); extern PRESDllExport RTIBool PRESParticipantAnnouncementChannel_enableRemoteParticipantDestinations( struct PRESParticipantAnnouncementChannel *me, const MIGRtpsParticipantId *remoteParticipantId, const struct PRESLocatorQosPolicy *locators, struct REDAWorker *worker); extern PRESDllExport RTIBool PRESParticipantAnnouncementChannel_disableRemoteParticipantDestinations( struct PRESParticipantAnnouncementChannel *me, const MIGRtpsParticipantId *remoteParticipantId, const struct PRESLocatorQosPolicy *locators, struct REDAWorker *worker); extern PRESDllExport RTIBool PRESParticipantAnnouncementChannel_assertRemoteParticipantDestinations( struct PRESParticipantAnnouncementChannel *me, const MIGRtpsParticipantId *remoteParticipantId, const struct PRESParticipantParameter *remoteParticipantParameter, struct REDAWorker *worker); extern PRESDllExport RTIBool PRESParticipantAnnouncementChannel_resend( struct PRESParticipantAnnouncementChannel *me, int *failReason, const struct PRESReducedLocatorQosPolicy *multicastLocators, const struct PRESLocatorQosPolicy *unicastLocators, RTI_INT32 announcementsToSend, struct REDAWorker *worker); extern PRESDllExport RTIBool PRESParticipantAnnouncementChannel_updateAnonWriterProperty( struct PRESParticipantAnnouncementChannel *me, struct REDAWorker *worker); extern PRESDllExport RTIBool PRESParticipantAnnouncementChannel_assertRemoteNonSecureWriter( struct PRESParticipantAnnouncementChannel *me, const MIGRtpsParticipantId *remoteParticipantId, const struct PRESParticipantParameter *remoteParticipantParameter, struct REDAWorker *worker); extern PRESDllExport RTIBool PRESParticipantAnnouncementChannel_assertRemoteSecureEndpoints( struct PRESParticipantAnnouncementChannel *me, const MIGRtpsParticipantId *remoteParticipantId, const struct PRESParticipantParameter *remoteParticipantParameter, struct REDAWorker *worker); extern PRESDllExport RTIBool PRESParticipantAnnouncementChannel_onHostnameUpdated( struct RTINetioDnsTrackerListener *listener, struct RTINetioDnsTrackerListenerStorage *storage, const struct RTINetioLocator *locator, const NDDS_Transport_Address_t *newAddress, struct REDAWorker *worker); extern PRESDllExport RTIBool PRESParticipantChannel_removeNonSecureRemoteWriter( struct PRESParticipantChannel *me, const MIGRtpsParticipantId *remoteParticipantId, struct REDAWorker *worker); extern PRESDllExport RTIBool PRESParticipantChannel_removeNonSecureRemoteEndpoints( struct PRESParticipantChannel *me, const MIGRtpsParticipantId *remoteParticipantId, struct REDAWorker *worker); extern PRESDllExport struct REDAWeakReference * PRESParticipantChannel_getNonSecureWriterWR( const struct PRESParticipantChannel *me); extern PRESDllExport RTIBool PRESParticipantAnnouncementChannel_finalizeEntities( struct PRESParticipantAnnouncementChannel *me, struct REDAWorker *worker); extern PRESDllExport void PRESParticipantAnnouncementChannel_delete( struct PRESParticipantAnnouncementChannel *me); extern PRESDllExport RTIBool PRESParticipantAnnouncementChannel_startDiscovery( struct PRESParticipantAnnouncementChannel *me, void *data, struct REDAWorker *worker); extern PRESDllExport RTIBool PRESParticipantAnnouncementChannel_enable( struct PRESParticipantAnnouncementChannel *me, struct REDAWorker *worker); extern PRESDllExport RTIBool PRESParticipantAnnouncementChannel_assertDomainBroadcastDestination( struct PRESParticipantAnnouncementChannel *me, const struct RTINetioLocator *destination, struct REDAWorker *worker); extern PRESDllExport RTI_INT32 PRESParticipantAnnouncementChannel_getParticipantAnnouncementResendCount( const struct PRESParticipantAnnouncementChannel *me, struct REDAWorker *worker); extern PRESDllExport RTI_INT32 PRESParticipantAnnouncementChannel_getDestinationCount( const struct PRESParticipantAnnouncementChannel *me, struct REDAWorker *worker); extern PRESDllExport RTIBool PRESParticipantAnnouncementChannel_removeRemoteParticipantLocators( struct PRESParticipantAnnouncementChannel *me, const MIGRtpsParticipantId *remoteParticipantId, const struct PRESLocatorQosPolicy *metatrafficMulticastLocator, const struct PRESLocatorQosPolicy *metatrafficUnicastLocator, struct REDAWorker *worker); struct PRESParticipantConfigChannelProperty { struct PRESParticipantChannelProperty parent; /* * This configures the liveliness assertion period for the participant * channel. * For SPDP2 this will be set to the participant_liveliness_assert_period * in the config channel and will affect the rate that DATA(M)s are sent * out to maintain liveliness. It will be set to MAX in the * announcement channel */ RTINtpTime participantLivelinessAssertPeriod; /* Set up the reliability configuration for the configuration writer */ struct PRESPsSrWriterProperty writerSrProperty; /* Set up the reliability configuration for the configuration reader */ struct PRESPsSrReaderProperty readerSrProperty; }; #define PRES_PARTICIPANT_CONFIG_CHANNEL_PROPERTY_DEFAULT \ { \ PRES_PARTICIPANT_CHANNEL_PROPERTY_INITIALIZER, /* parent */ \ PRES_PARTICIPANT_CHANNEL_PARTICIPANT_LIVELINESS_ASSERT_PERIOD_DEFAULT, /* participantLivelinessAssertPeriod */ \ PRES_PS_SR_WRITER_PROPERTY_DEFAULT, /* writerSrProperty */ \ PRES_PS_SR_READER_PROPERTY_DEFAULT /* readerSrProperty */ \ } struct PRESParticipantConfigChannel { /* Base structure that contains readers, writers, topics, groups, etc */ struct PRESParticipantChannel _parent; struct PRESParticipantConfigChannelProperty _property; RTIBool _isEnabled; }; extern PRESDllExport struct PRESParticipantConfigChannel * PRESParticipantConfigChannel_new( struct PRESParticipant *participant, struct REDAExclusiveArea *readerGroupEA, struct REDAExclusiveArea *writerGroupEA, struct PRESParticipantConfigChannelProperty *configProperty, struct PRESPropertyQosPolicy *propertyQosPolicy, const char *topicName, const char *secureTopicName, const char *typeName, struct PRESParticipantChannelReaderListener *readerListener, struct REDAWorker *worker); extern PRESDllExport RTIBool PRESParticipantConfigChannel_enable( struct PRESParticipantConfigChannel *me, struct REDAWorker *worker); extern PRESDllExport RTIBool PRESParticipantConfigChannel_assertRemoteNonSecureEndpoints( struct PRESParticipantConfigChannel *me, const MIGRtpsParticipantId *remoteParticipantId, const struct PRESParticipantParameter *remoteParticipantParameter, struct REDAWorker *worker); extern PRESDllExport RTIBool PRESParticipantConfigChannel_assertRemoteSecureEndpoints( struct PRESParticipantConfigChannel *me, const MIGRtpsParticipantId *remoteParticipantId, const struct PRESParticipantParameter *remoteParticipantParameter, struct REDAWorker *worker); extern PRESDllExport RTIBool PRESParticipantConfigChannel_shutdown( struct PRESParticipantConfigChannel *me, struct REDAWorker *worker); extern PRESDllExport RTIBool PRESParticipantConfigChannel_finalizeEntities( struct PRESParticipantConfigChannel *me, struct REDAWorker *worker); extern PRESDllExport void PRESParticipantConfigChannel_delete( struct PRESParticipantConfigChannel *me); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* pres_participantChannel_h */