@@ -515,6 +515,7 @@ MAKE_DDS_EVENT_CALLBACK_FN(requested_incompatible_qos, REQUESTED_INCOMPATIBLE_QO
515515MAKE_DDS_EVENT_CALLBACK_FN(sample_lost, SAMPLE_LOST)
516516MAKE_DDS_EVENT_CALLBACK_FN(offered_incompatible_qos, OFFERED_INCOMPATIBLE_QOS)
517517MAKE_DDS_EVENT_CALLBACK_FN(liveliness_changed, LIVELINESS_CHANGED)
518+ MAKE_DDS_EVENT_CALLBACK_FN(inconsistent_topic, INCONSISTENT_TOPIC)
518519
519520static void listener_set_event_callbacks(dds_listener_t * l, void * arg)
520521{
@@ -525,6 +526,7 @@ static void listener_set_event_callbacks(dds_listener_t * l, void * arg)
525526 dds_lset_offered_deadline_missed_arg (l, on_offered_deadline_missed_fn, arg, false );
526527 dds_lset_offered_incompatible_qos_arg (l, on_offered_incompatible_qos_fn, arg, false );
527528 dds_lset_liveliness_changed_arg (l, on_liveliness_changed_fn, arg, false );
529+ dds_lset_inconsistent_topic_arg (l, on_inconsistent_topic_fn, arg, false );
528530}
529531
530532static bool get_readwrite_qos (dds_entity_t handle, rmw_qos_profile_t * rmw_qos_policies)
@@ -716,6 +718,24 @@ extern "C" rmw_ret_t rmw_event_set_callback(
716718 break ;
717719 }
718720
721+ case RMW_EVENT_PUBLISHER_INCONSISTENT_TOPIC:
722+ {
723+ auto pub_event = static_cast <CddsPublisher *>(rmw_event->data );
724+ event_set_callback (
725+ pub_event, DDS_INCONSISTENT_TOPIC_STATUS_ID,
726+ callback, user_data);
727+ break ;
728+ }
729+
730+ case RMW_EVENT_SUBSCRIPTION_INCONSISTENT_TOPIC:
731+ {
732+ auto sub_event = static_cast <CddsSubscription *>(rmw_event->data );
733+ event_set_callback (
734+ sub_event, DDS_INCONSISTENT_TOPIC_STATUS_ID,
735+ callback, user_data);
736+ break ;
737+ }
738+
719739 case RMW_EVENT_INVALID:
720740 {
721741 return RMW_RET_INVALID_ARGUMENT;
@@ -3627,6 +3647,8 @@ static const std::unordered_map<rmw_event_type_t, uint32_t> mask_map{
36273647 {RMW_EVENT_REQUESTED_QOS_INCOMPATIBLE, DDS_REQUESTED_INCOMPATIBLE_QOS_STATUS},
36283648 {RMW_EVENT_OFFERED_QOS_INCOMPATIBLE, DDS_OFFERED_INCOMPATIBLE_QOS_STATUS},
36293649 {RMW_EVENT_MESSAGE_LOST, DDS_SAMPLE_LOST_STATUS},
3650+ {RMW_EVENT_PUBLISHER_INCONSISTENT_TOPIC, DDS_INCONSISTENT_TOPIC_STATUS},
3651+ {RMW_EVENT_SUBSCRIPTION_INCONSISTENT_TOPIC, DDS_INCONSISTENT_TOPIC_STATUS},
36303652};
36313653
36323654static bool is_event_supported (const rmw_event_type_t event_t )
@@ -3799,6 +3821,40 @@ extern "C" rmw_ret_t rmw_take_event(
37993821 }
38003822 }
38013823
3824+ case RMW_EVENT_PUBLISHER_INCONSISTENT_TOPIC: {
3825+ auto it = static_cast <rmw_inconsistent_topic_status_t *>(event_info);
3826+ auto pub = static_cast <CddsPublisher *>(event_handle->data );
3827+
3828+ const dds_entity_t topic = dds_get_topic (pub->enth );
3829+ dds_inconsistent_topic_status_t st;
3830+ if (dds_get_inconsistent_topic_status (topic, &st) < 0 ) {
3831+ *taken = false ;
3832+ return RMW_RET_ERROR;
3833+ } else {
3834+ it->total_count = static_cast <int32_t >(st.total_count );
3835+ it->total_count_change = st.total_count_change ;
3836+ *taken = true ;
3837+ return RMW_RET_OK;
3838+ }
3839+ }
3840+
3841+ case RMW_EVENT_SUBSCRIPTION_INCONSISTENT_TOPIC: {
3842+ auto it = static_cast <rmw_inconsistent_topic_status_t *>(event_info);
3843+ auto sub = static_cast <CddsSubscription *>(event_handle->data );
3844+
3845+ const dds_entity_t topic = dds_get_topic (sub->enth );
3846+ dds_inconsistent_topic_status_t st;
3847+ if (dds_get_inconsistent_topic_status (topic, &st) < 0 ) {
3848+ *taken = false ;
3849+ return RMW_RET_ERROR;
3850+ } else {
3851+ it->total_count = static_cast <int32_t >(st.total_count );
3852+ it->total_count_change = st.total_count_change ;
3853+ *taken = true ;
3854+ return RMW_RET_OK;
3855+ }
3856+ }
3857+
38023858 case RMW_EVENT_INVALID: {
38033859 break ;
38043860 }
0 commit comments