diff --git a/src/tools/pubsub/common.c b/src/tools/pubsub/common.c index b9bcd60..a9b5418 100644 --- a/src/tools/pubsub/common.c +++ b/src/tools/pubsub/common.c @@ -400,6 +400,7 @@ static void inapplicable_qos(dds_entity_kind_t qt, const char *n) { #define get_qos_W(qt, q, n) ((qt == DDS_KIND_WRITER) ? q : (inapplicable_qos((qt), n), (dds_qos_t*)0)) #define get_qos_TW(qt, q, n) ((qt == DDS_KIND_TOPIC) || (qt == DDS_KIND_WRITER) ? q : (inapplicable_qos((qt), n), (dds_qos_t*)0)) #define get_qos_RW(qt, q, n) ((qt == DDS_KIND_READER) || (qt == DDS_KIND_WRITER) ? q : (inapplicable_qos((qt), n), (dds_qos_t*)0)) +#define get_qos_MRW(qt, q, n) ((qt == DDS_KIND_READER) || (qt == DDS_KIND_WRITER) || (qt == DDS_KIND_PARTICIPANT) ? q : (inapplicable_qos((qt), n), (dds_qos_t*)0)) #define get_qos_PS(qt, q, n) ((qt == DDS_KIND_PUBLISHER) || (qt == DDS_KIND_SUBSCRIBER) ? q : (inapplicable_qos((qt), n), (dds_qos_t*)0)) #define get_qos_TRW(qt, q, n) ((qt == DDS_KIND_TOPIC) || (qt == DDS_KIND_READER) || (qt == DDS_KIND_WRITER) ? q : (inapplicable_qos((qt), n), (dds_qos_t*)0)) @@ -563,7 +564,7 @@ static void *unescape(const char *str, size_t *len) { } void qos_user_data(dds_entity_kind_t qt, dds_qos_t *q, const char *arg) { - dds_qos_t *qp = get_qos_RW(qt, q, "user_data"); + dds_qos_t *qp = get_qos_MRW(qt, q, "user_data"); size_t len; if (qp == NULL) return; diff --git a/src/tools/pubsub/pubsub.c b/src/tools/pubsub/pubsub.c index 60f9fc6..e3c356f 100644 --- a/src/tools/pubsub/pubsub.c +++ b/src/tools/pubsub/pubsub.c @@ -567,7 +567,7 @@ static int read_value(char *command, int *key, struct tstamp_t *tstamp, char **a return 1; } break; - case 'p': case 'S': case ':': { + case 'p': case 'S': case ':': case 'Q': { int i = 0; *command = (char) c; while ((c = getc(stdin)) != EOF && !isspace((unsigned char) c)) { @@ -1424,6 +1424,13 @@ static char *pub_do_nonarb(const struct writerspec *spec, uint32_t *seq) { dds_sleepfor(DDS_SECS(k)); } break; + case 'Q': { + dds_qos_t *qos = dds_create_qos (); + setqos_from_args (DDS_KIND_PARTICIPANT, qos, 1, (const char **) &arg); + dds_set_qos (dp, qos); + dds_delete_qos (qos); + break; + } case 'Y': case 'B': case 'E': case 'W': non_data_operation(command, spec->wr); break;