use enum with values log2(STATUS) for identifying status/listener

Signed-off-by: Erik Boasson <eb@ilities.com>
This commit is contained in:
Erik Boasson 2019-01-15 10:29:53 +01:00
parent ba46cb1140
commit 54b5bed8d2
9 changed files with 103 additions and 71 deletions

View file

@ -81,31 +81,47 @@ extern DDS_EXPORT const dds_entity_t DDS_BUILTIN_TOPIC_DCPSSUBSCRIPTION;
/** @name Communication Status definitions
@{**/
/** Another topic exists with the same name but with different characteristics. */
#define DDS_INCONSISTENT_TOPIC_STATUS 1u
typedef enum dds_status_id {
DDS_INCONSISTENT_TOPIC_STATUS_ID,
DDS_OFFERED_DEADLINE_MISSED_STATUS_ID,
DDS_REQUESTED_DEADLINE_MISSED_STATUS_ID,
DDS_OFFERED_INCOMPATIBLE_QOS_STATUS_ID,
DDS_REQUESTED_INCOMPATIBLE_QOS_STATUS_ID,
DDS_SAMPLE_LOST_STATUS_ID,
DDS_SAMPLE_REJECTED_STATUS_ID,
DDS_DATA_ON_READERS_STATUS_ID,
DDS_DATA_AVAILABLE_STATUS_ID,
DDS_LIVELINESS_LOST_STATUS_ID,
DDS_LIVELINESS_CHANGED_STATUS_ID,
DDS_PUBLICATION_MATCHED_STATUS_ID,
DDS_SUBSCRIPTION_MATCHED_STATUS_ID
}
dds_status_id_t;
#define DDS_INCONSISTENT_TOPIC_STATUS (1u << DDS_INCONSISTENT_TOPIC_STATUS_ID)
/** The deadline that the writer has committed through its deadline QoS policy was not respected for a specific instance. */
#define DDS_OFFERED_DEADLINE_MISSED_STATUS 2u
#define DDS_OFFERED_DEADLINE_MISSED_STATUS (1u << DDS_OFFERED_DEADLINE_MISSED_STATUS_ID)
/** The deadline that the reader was expecting through its deadline QoS policy was not respected for a specific instance. */
#define DDS_REQUESTED_DEADLINE_MISSED_STATUS 4u
#define DDS_REQUESTED_DEADLINE_MISSED_STATUS (1u << DDS_REQUESTED_DEADLINE_MISSED_STATUS_ID)
/** A QoS policy setting was incompatible with what was requested. */
#define DDS_OFFERED_INCOMPATIBLE_QOS_STATUS 32u
#define DDS_OFFERED_INCOMPATIBLE_QOS_STATUS (1u << DDS_OFFERED_INCOMPATIBLE_QOS_STATUS_ID)
/** A QoS policy setting was incompatible with what is offered. */
#define DDS_REQUESTED_INCOMPATIBLE_QOS_STATUS 64u
#define DDS_REQUESTED_INCOMPATIBLE_QOS_STATUS (1u << DDS_REQUESTED_INCOMPATIBLE_QOS_STATUS_ID)
/** A sample has been lost (never received). */
#define DDS_SAMPLE_LOST_STATUS 128u
#define DDS_SAMPLE_LOST_STATUS (1u << DDS_SAMPLE_LOST_STATUS_ID)
/** A (received) sample has been rejected. */
#define DDS_SAMPLE_REJECTED_STATUS 256u
#define DDS_SAMPLE_REJECTED_STATUS (1u << DDS_SAMPLE_REJECTED_STATUS_ID)
/** New information is available. */
#define DDS_DATA_ON_READERS_STATUS 512u
#define DDS_DATA_ON_READERS_STATUS (1u << DDS_DATA_ON_READERS_STATUS_ID)
/** New information is available. */
#define DDS_DATA_AVAILABLE_STATUS 1024u
#define DDS_DATA_AVAILABLE_STATUS (1u << DDS_DATA_AVAILABLE_STATUS_ID)
/** The liveliness that the DDS_DataWriter has committed through its liveliness QoS policy was not respected; thus readers will consider the writer as no longer "alive". */
#define DDS_LIVELINESS_LOST_STATUS 2048u
#define DDS_LIVELINESS_LOST_STATUS (1u << DDS_LIVELINESS_LOST_STATUS_ID)
/** The liveliness of one or more writers, that were writing instances read through the readers has changed. Some writers have become "alive" or "not alive". */
#define DDS_LIVELINESS_CHANGED_STATUS 4096u
#define DDS_LIVELINESS_CHANGED_STATUS (1u << DDS_LIVELINESS_CHANGED_STATUS_ID)
/** The writer has found a reader that matches the topic and has a compatible QoS. */
#define DDS_PUBLICATION_MATCHED_STATUS 8192u
#define DDS_PUBLICATION_MATCHED_STATUS (1u << DDS_PUBLICATION_MATCHED_STATUS_ID)
/** The reader has found a writer that matches the topic and has a compatible QoS. */
#define DDS_SUBSCRIPTION_MATCHED_STATUS 16384u
#define DDS_SUBSCRIPTION_MATCHED_STATUS (1u << DDS_SUBSCRIPTION_MATCHED_STATUS_ID)
/** @}*/
/** Read state for a data value */

View file

@ -80,7 +80,7 @@ inline dds_entity_kind_t dds_entity_kind_from_handle (dds_entity_t hdl) {
void dds_entity_status_signal (dds_entity *e);
void dds_entity_invoke_listener (const dds_entity *entity, uint32_t status, const void *vst);
void dds_entity_invoke_listener (const dds_entity *entity, enum dds_status_id which, const void *vst);
_Check_return_ dds__retcode_t
dds_valid_hdl(

View file

@ -424,71 +424,71 @@ dds_return_t dds_get_listener (dds_entity_t entity, dds_listener_t *listener)
return ret;
}
void dds_entity_invoke_listener (const dds_entity *entity, uint32_t status, const void *vst)
void dds_entity_invoke_listener (const dds_entity *entity, enum dds_status_id which, const void *vst)
{
struct dds_listener const * const lst = &entity->m_listener;
switch (status)
switch (which)
{
case DDS_INCONSISTENT_TOPIC_STATUS: {
case DDS_INCONSISTENT_TOPIC_STATUS_ID: {
struct dds_inconsistent_topic_status const * const st = vst;
lst->on_inconsistent_topic (entity->m_hdl, *st, lst->on_inconsistent_topic_arg);
break;
}
case DDS_REQUESTED_DEADLINE_MISSED_STATUS: {
case DDS_REQUESTED_DEADLINE_MISSED_STATUS_ID: {
struct dds_requested_deadline_missed_status const * const st = vst;
lst->on_requested_deadline_missed (entity->m_hdl, *st, lst->on_requested_deadline_missed_arg);
break;
}
case DDS_REQUESTED_INCOMPATIBLE_QOS_STATUS: {
case DDS_REQUESTED_INCOMPATIBLE_QOS_STATUS_ID: {
struct dds_requested_incompatible_qos_status const * const st = vst;
lst->on_requested_incompatible_qos (entity->m_hdl, *st, lst->on_requested_incompatible_qos_arg);
break;
}
case DDS_SAMPLE_LOST_STATUS: {
case DDS_SAMPLE_LOST_STATUS_ID: {
struct dds_sample_lost_status const * const st = vst;
lst->on_sample_lost (entity->m_hdl, *st, lst->on_sample_lost_arg);
break;
}
case DDS_SAMPLE_REJECTED_STATUS: {
case DDS_SAMPLE_REJECTED_STATUS_ID: {
struct dds_sample_rejected_status const * const st = vst;
lst->on_sample_rejected (entity->m_hdl, *st, lst->on_sample_rejected_arg);
break;
}
case DDS_LIVELINESS_CHANGED_STATUS: {
case DDS_LIVELINESS_CHANGED_STATUS_ID: {
struct dds_liveliness_changed_status const * const st = vst;
lst->on_liveliness_changed (entity->m_hdl, *st, lst->on_liveliness_changed_arg);
break;
}
case DDS_SUBSCRIPTION_MATCHED_STATUS: {
case DDS_SUBSCRIPTION_MATCHED_STATUS_ID: {
struct dds_subscription_matched_status const * const st = vst;
lst->on_subscription_matched (entity->m_hdl, *st, lst->on_subscription_matched_arg);
break;
}
case DDS_OFFERED_DEADLINE_MISSED_STATUS: {
case DDS_OFFERED_DEADLINE_MISSED_STATUS_ID: {
struct dds_offered_deadline_missed_status const * const st = vst;
lst->on_offered_deadline_missed (entity->m_hdl, *st, lst->on_offered_deadline_missed_arg);
break;
}
case DDS_LIVELINESS_LOST_STATUS: {
case DDS_LIVELINESS_LOST_STATUS_ID: {
struct dds_liveliness_lost_status const * const st = vst;
lst->on_liveliness_lost (entity->m_hdl, *st, lst->on_liveliness_lost_arg);
break;
}
case DDS_OFFERED_INCOMPATIBLE_QOS_STATUS: {
case DDS_OFFERED_INCOMPATIBLE_QOS_STATUS_ID: {
struct dds_offered_incompatible_qos_status const * const st = vst;
lst->on_offered_incompatible_qos (entity->m_hdl, *st, lst->on_offered_incompatible_qos_arg);
break;
}
case DDS_PUBLICATION_MATCHED_STATUS: {
case DDS_PUBLICATION_MATCHED_STATUS_ID: {
struct dds_publication_matched_status const * const st = vst;
lst->on_publication_matched (entity->m_hdl, *st, lst->on_publication_matched_arg);
break;
}
case DDS_DATA_AVAILABLE_STATUS: {
case DDS_DATA_AVAILABLE_STATUS_ID: {
lst->on_data_available (entity->m_hdl, lst->on_data_available_arg);
break;
}
case DDS_DATA_ON_READERS_STATUS: {
case DDS_DATA_ON_READERS_STATUS_ID: {
lst->on_data_on_readers (entity->m_hdl, lst->on_data_on_readers_arg);
break;
}

View file

@ -229,12 +229,13 @@ void dds_reader_status_cb (void *ventity, const status_cb_data_t *data)
}
struct dds_listener const * const lst = &entity->m_listener;
enum dds_status_id status_id = (enum dds_status_id) data->raw_status_id;
bool invoke = false;
void *vst = NULL;
int32_t *reset[2] = { NULL, NULL };
/* DATA_AVAILABLE is handled by dds_reader_data_available_cb */
assert (data->status != DDS_DATA_AVAILABLE_STATUS);
assert (status_id != DDS_DATA_AVAILABLE_STATUS_ID);
/* Serialize listener invocations -- it is somewhat sad to do this,
but then it may also be unreasonable to expect the application to
@ -251,8 +252,8 @@ void dds_reader_status_cb (void *ventity, const status_cb_data_t *data)
/* Update status metrics. */
dds_reader * const rd = (dds_reader *) entity;
switch (data->status) {
case DDS_REQUESTED_DEADLINE_MISSED_STATUS: {
switch (status_id) {
case DDS_REQUESTED_DEADLINE_MISSED_STATUS_ID: {
struct dds_requested_deadline_missed_status * const st = vst = &rd->m_requested_deadline_missed_status;
st->last_instance_handle = data->handle;
st->total_count++;
@ -261,7 +262,7 @@ void dds_reader_status_cb (void *ventity, const status_cb_data_t *data)
reset[0] = &st->total_count_change;
break;
}
case DDS_REQUESTED_INCOMPATIBLE_QOS_STATUS: {
case DDS_REQUESTED_INCOMPATIBLE_QOS_STATUS_ID: {
struct dds_requested_incompatible_qos_status * const st = vst = &rd->m_requested_incompatible_qos_status;
st->total_count++;
st->total_count_change++;
@ -270,7 +271,7 @@ void dds_reader_status_cb (void *ventity, const status_cb_data_t *data)
reset[0] = &st->total_count_change;
break;
}
case DDS_SAMPLE_LOST_STATUS: {
case DDS_SAMPLE_LOST_STATUS_ID: {
struct dds_sample_lost_status * const st = vst = &rd->m_sample_lost_status;
st->total_count++;
st->total_count_change++;
@ -278,7 +279,7 @@ void dds_reader_status_cb (void *ventity, const status_cb_data_t *data)
reset[0] = &st->total_count_change;
break;
}
case DDS_SAMPLE_REJECTED_STATUS: {
case DDS_SAMPLE_REJECTED_STATUS_ID: {
struct dds_sample_rejected_status * const st = vst = &rd->m_sample_rejected_status;
st->total_count++;
st->total_count_change++;
@ -288,7 +289,7 @@ void dds_reader_status_cb (void *ventity, const status_cb_data_t *data)
reset[0] = &st->total_count_change;
break;
}
case DDS_LIVELINESS_CHANGED_STATUS: {
case DDS_LIVELINESS_CHANGED_STATUS_ID: {
struct dds_liveliness_changed_status * const st = vst = &rd->m_liveliness_changed_status;
if (data->add) {
st->alive_count++;
@ -307,7 +308,7 @@ void dds_reader_status_cb (void *ventity, const status_cb_data_t *data)
reset[1] = &st->not_alive_count_change;
break;
}
case DDS_SUBSCRIPTION_MATCHED_STATUS: {
case DDS_SUBSCRIPTION_MATCHED_STATUS_ID: {
struct dds_subscription_matched_status * const st = vst = &rd->m_subscription_matched_status;
if (data->add) {
st->total_count++;
@ -324,14 +325,20 @@ void dds_reader_status_cb (void *ventity, const status_cb_data_t *data)
reset[1] = &st->current_count_change;
break;
}
default:
case DDS_DATA_ON_READERS_STATUS_ID:
case DDS_DATA_AVAILABLE_STATUS_ID:
case DDS_INCONSISTENT_TOPIC_STATUS_ID:
case DDS_LIVELINESS_LOST_STATUS_ID:
case DDS_PUBLICATION_MATCHED_STATUS_ID:
case DDS_OFFERED_DEADLINE_MISSED_STATUS_ID:
case DDS_OFFERED_INCOMPATIBLE_QOS_STATUS_ID:
assert (0);
}
if (invoke)
{
os_mutexUnlock (&entity->m_observers_lock);
dds_entity_invoke_listener(entity, data->status, vst);
dds_entity_invoke_listener(entity, status_id, vst);
os_mutexLock (&entity->m_observers_lock);
*reset[0] = 0;
if (reset[1])
@ -339,7 +346,7 @@ void dds_reader_status_cb (void *ventity, const status_cb_data_t *data)
}
else
{
dds_entity_status_set (entity, data->status);
dds_entity_status_set (entity, 1u << status_id);
}
entity->m_cb_count--;

View file

@ -644,7 +644,7 @@ static bool add_sample
if (rhc->reader && rhc->max_samples != DDS_LENGTH_UNLIMITED && rhc->n_vsamples >= (uint32_t) rhc->max_samples)
{
cb_data->status = DDS_SAMPLE_REJECTED_STATUS;
cb_data->raw_status_id = (int) DDS_SAMPLE_REJECTED_STATUS_ID;
cb_data->extra = DDS_REJECTED_BY_SAMPLES_LIMIT;
cb_data->handle = inst->iid;
cb_data->add = true;
@ -655,7 +655,7 @@ static bool add_sample
if (rhc->reader && rhc->max_samples_per_instance != DDS_LENGTH_UNLIMITED && inst->nvsamples >= (uint32_t) rhc->max_samples_per_instance)
{
cb_data->status = DDS_SAMPLE_REJECTED_STATUS;
cb_data->raw_status_id = (int) DDS_SAMPLE_REJECTED_STATUS_ID;
cb_data->extra = DDS_REJECTED_BY_SAMPLES_PER_INSTANCE_LIMIT;
cb_data->handle = inst->iid;
cb_data->add = true;
@ -1108,7 +1108,7 @@ static rhc_store_result_t rhc_store_new_instance
if (rhc->reader && rhc->max_instances != DDS_LENGTH_UNLIMITED && rhc->n_instances >= (uint32_t) rhc->max_instances)
{
cb_data->status = DDS_SAMPLE_REJECTED_STATUS;
cb_data->raw_status_id = (int) DDS_SAMPLE_REJECTED_STATUS_ID;
cb_data->extra = DDS_REJECTED_BY_INSTANCES_LIMIT;
cb_data->handle = tk->m_iid;
cb_data->add = true;
@ -1177,7 +1177,7 @@ bool dds_rhc_store
dummy_instance.iid = tk->m_iid;
stored = RHC_FILTERED;
cb_data.status = 0;
cb_data.raw_status_id = -1;
os_mutexLock (&rhc->lock);
@ -1229,7 +1229,7 @@ bool dds_rhc_store
}
/* notify sample lost */
cb_data.status = DDS_SAMPLE_LOST_STATUS;
cb_data.raw_status_id = (int) DDS_SAMPLE_LOST_STATUS_ID;
cb_data.extra = 0;
cb_data.handle = 0;
cb_data.add = true;
@ -1411,7 +1411,7 @@ error_or_nochange:
/* Make any reader status callback */
if (cb_data.status && rhc->reader && rhc->reader->m_entity.m_status_enable)
if (cb_data.raw_status_id >= 0 && rhc->reader && rhc->reader->m_entity.m_status_enable)
{
os_atomic_inc32 (&rhc->n_cbs);
dds_reader_status_cb (&rhc->reader->m_entity, &cb_data);

View file

@ -106,7 +106,7 @@ static void dds_topic_status_cb (struct dds_topic *tp)
if (lst->on_inconsistent_topic)
{
os_mutexUnlock (&tp->m_entity.m_observers_lock);
dds_entity_invoke_listener(&tp->m_entity, DDS_INCONSISTENT_TOPIC_STATUS, &tp->m_inconsistent_topic_status);
dds_entity_invoke_listener(&tp->m_entity, DDS_INCONSISTENT_TOPIC_STATUS_ID, &tp->m_inconsistent_topic_status);
os_mutexLock (&tp->m_entity.m_observers_lock);
tp->m_inconsistent_topic_status.total_count_change = 0;
}

View file

@ -79,6 +79,7 @@ static void dds_writer_status_cb (void *ventity, const status_cb_data_t *data)
}
struct dds_listener const * const lst = &entity->m_listener;
enum dds_status_id status_id = (enum dds_status_id) data->raw_status_id;
bool invoke = false;
void *vst = NULL;
int32_t *reset[2] = { NULL, NULL };
@ -90,13 +91,13 @@ static void dds_writer_status_cb (void *ventity, const status_cb_data_t *data)
/* Reset the status for possible Listener call.
* When a listener is not called, the status will be set (again). */
dds_entity_status_reset (entity, data->status);
dds_entity_status_reset (entity, 1u << status_id);
/* Update status metrics. */
dds_writer * const wr = (dds_writer *) entity;
switch (data->status)
switch (status_id)
{
case DDS_OFFERED_DEADLINE_MISSED_STATUS: {
case DDS_OFFERED_DEADLINE_MISSED_STATUS_ID: {
struct dds_offered_deadline_missed_status * const st = vst = &wr->m_offered_deadline_missed_status;
st->total_count++;
st->total_count_change++;
@ -105,7 +106,7 @@ static void dds_writer_status_cb (void *ventity, const status_cb_data_t *data)
reset[0] = &st->total_count_change;
break;
}
case DDS_LIVELINESS_LOST_STATUS: {
case DDS_LIVELINESS_LOST_STATUS_ID: {
struct dds_liveliness_lost_status * const st = vst = &wr->m_liveliness_lost_status;
st->total_count++;
st->total_count_change++;
@ -113,7 +114,7 @@ static void dds_writer_status_cb (void *ventity, const status_cb_data_t *data)
reset[0] = &st->total_count_change;
break;
}
case DDS_OFFERED_INCOMPATIBLE_QOS_STATUS: {
case DDS_OFFERED_INCOMPATIBLE_QOS_STATUS_ID: {
struct dds_offered_incompatible_qos_status * const st = vst = &wr->m_offered_incompatible_qos_status;
st->total_count++;
st->total_count_change++;
@ -122,7 +123,7 @@ static void dds_writer_status_cb (void *ventity, const status_cb_data_t *data)
reset[0] = &st->total_count_change;
break;
}
case DDS_PUBLICATION_MATCHED_STATUS: {
case DDS_PUBLICATION_MATCHED_STATUS_ID: {
struct dds_publication_matched_status * const st = vst = &wr->m_publication_matched_status;
if (data->add) {
st->total_count++;
@ -139,14 +140,22 @@ static void dds_writer_status_cb (void *ventity, const status_cb_data_t *data)
reset[1] = &st->current_count_change;
break;
}
default:
case DDS_DATA_AVAILABLE_STATUS_ID:
case DDS_INCONSISTENT_TOPIC_STATUS_ID:
case DDS_SAMPLE_LOST_STATUS_ID:
case DDS_DATA_ON_READERS_STATUS_ID:
case DDS_SAMPLE_REJECTED_STATUS_ID:
case DDS_LIVELINESS_CHANGED_STATUS_ID:
case DDS_SUBSCRIPTION_MATCHED_STATUS_ID:
case DDS_REQUESTED_DEADLINE_MISSED_STATUS_ID:
case DDS_REQUESTED_INCOMPATIBLE_QOS_STATUS_ID:
assert (0);
}
if (invoke)
{
os_mutexUnlock (&entity->m_observers_lock);
dds_entity_invoke_listener(entity, data->status, vst);
dds_entity_invoke_listener(entity, status_id, vst);
os_mutexLock (&entity->m_observers_lock);
*reset[0] = 0;
if (reset[1])
@ -154,7 +163,7 @@ static void dds_writer_status_cb (void *ventity, const status_cb_data_t *data)
}
else
{
dds_entity_status_set (entity, data->status);
dds_entity_status_set (entity, 1u << status_id);
}
entity->m_cb_count--;

View file

@ -44,7 +44,7 @@ typedef void (*ddsi2direct_directread_cb_t) (const struct nn_rsample_info *sampl
typedef struct status_cb_data
{
uint32_t status;
int raw_status_id;
uint32_t extra;
uint64_t handle;
bool add;

View file

@ -1350,7 +1350,7 @@ static void writer_drop_connection (const struct nn_guid * wr_guid, const struct
if (m != NULL && wr->status_cb)
{
status_cb_data_t data;
data.status = DDS_PUBLICATION_MATCHED_STATUS;
data.raw_status_id = (int) DDS_PUBLICATION_MATCHED_STATUS_ID;
data.add = false;
data.handle = prd->e.iid;
(wr->status_cb) (wr->status_cb_entity, &data);
@ -1378,7 +1378,7 @@ static void writer_drop_local_connection (const struct nn_guid *wr_guid, struct
if (m != NULL && wr->status_cb)
{
status_cb_data_t data;
data.status = DDS_PUBLICATION_MATCHED_STATUS;
data.raw_status_id = (int) DDS_PUBLICATION_MATCHED_STATUS_ID;
data.add = false;
data.handle = rd->e.iid;
(wr->status_cb) (wr->status_cb_entity, &data);
@ -1412,10 +1412,10 @@ static void reader_drop_connection (const struct nn_guid *rd_guid, const struct
data.add = false;
data.handle = pwr->e.iid;
data.status = DDS_LIVELINESS_CHANGED_STATUS;
data.raw_status_id = (int) DDS_LIVELINESS_CHANGED_STATUS_ID;
(rd->status_cb) (rd->status_cb_entity, &data);
data.status = DDS_SUBSCRIPTION_MATCHED_STATUS;
data.raw_status_id = (int) DDS_SUBSCRIPTION_MATCHED_STATUS_ID;
(rd->status_cb) (rd->status_cb_entity, &data);
}
}
@ -1447,10 +1447,10 @@ static void reader_drop_local_connection (const struct nn_guid *rd_guid, const s
data.add = false;
data.handle = wr->e.iid;
data.status = DDS_LIVELINESS_CHANGED_STATUS;
data.raw_status_id = (int) DDS_LIVELINESS_CHANGED_STATUS_ID;
(rd->status_cb) (rd->status_cb_entity, &data);
data.status = DDS_SUBSCRIPTION_MATCHED_STATUS;
data.raw_status_id = (int) DDS_SUBSCRIPTION_MATCHED_STATUS_ID;
(rd->status_cb) (rd->status_cb_entity, &data);
}
}
@ -1587,7 +1587,7 @@ static void writer_add_connection (struct writer *wr, struct proxy_reader *prd)
if (wr->status_cb)
{
status_cb_data_t data;
data.status = DDS_PUBLICATION_MATCHED_STATUS;
data.raw_status_id = (int) DDS_PUBLICATION_MATCHED_STATUS_ID;
data.add = true;
data.handle = prd->e.iid;
(wr->status_cb) (wr->status_cb_entity, &data);
@ -1667,7 +1667,7 @@ static void writer_add_local_connection (struct writer *wr, struct reader *rd)
if (wr->status_cb)
{
status_cb_data_t data;
data.status = DDS_PUBLICATION_MATCHED_STATUS;
data.raw_status_id = (int) DDS_PUBLICATION_MATCHED_STATUS_ID;
data.add = true;
data.handle = rd->e.iid;
(wr->status_cb) (wr->status_cb_entity, &data);
@ -1730,7 +1730,7 @@ static void reader_add_connection (struct reader *rd, struct proxy_writer *pwr,
if (rd->status_cb)
{
status_cb_data_t data;
data.status = DDS_SUBSCRIPTION_MATCHED_STATUS;
data.raw_status_id = (int) DDS_SUBSCRIPTION_MATCHED_STATUS_ID;
data.add = true;
data.handle = pwr->e.iid;
(rd->status_cb) (rd->status_cb_entity, &data);
@ -1765,10 +1765,10 @@ static void reader_add_local_connection (struct reader *rd, struct writer *wr)
data.add = true;
data.handle = wr->e.iid;
data.status = DDS_LIVELINESS_CHANGED_STATUS;
data.raw_status_id = (int) DDS_LIVELINESS_CHANGED_STATUS_ID;
(rd->status_cb) (rd->status_cb_entity, &data);
data.status = DDS_SUBSCRIPTION_MATCHED_STATUS;
data.raw_status_id = (int) DDS_SUBSCRIPTION_MATCHED_STATUS_ID;
(rd->status_cb) (rd->status_cb_entity, &data);
}
}
@ -1875,7 +1875,7 @@ static void proxy_writer_add_connection (struct proxy_writer *pwr, struct reader
if (rd->status_cb)
{
status_cb_data_t data;
data.status = DDS_LIVELINESS_CHANGED_STATUS;
data.raw_status_id = (int) DDS_LIVELINESS_CHANGED_STATUS_ID;
data.add = true;
data.handle = pwr->e.iid;
(rd->status_cb) (rd->status_cb_entity, &data);
@ -1997,7 +1997,7 @@ static void writer_qos_mismatch (struct writer * wr, uint32_t reason)
if (wr->status_cb)
{
status_cb_data_t data;
data.status = DDS_OFFERED_INCOMPATIBLE_QOS_STATUS;
data.raw_status_id = (int) DDS_OFFERED_INCOMPATIBLE_QOS_STATUS_ID;
data.extra = reason;
(wr->status_cb) (wr->status_cb_entity, &data);
}
@ -2018,7 +2018,7 @@ static void reader_qos_mismatch (struct reader * rd, uint32_t reason)
if (rd->status_cb)
{
status_cb_data_t data;
data.status = DDS_REQUESTED_INCOMPATIBLE_QOS_STATUS;
data.raw_status_id = (int) DDS_REQUESTED_INCOMPATIBLE_QOS_STATUS_ID;
data.extra = reason;
(rd->status_cb) (rd->status_cb_entity, &data);
}