/*####################################################################### # simplechat # ########################################################################*/ static bool simplechat_ChatMessage_list_get_seq_val_cb(uintptr_t in_data, int index, CDR_TypeCode_t type, qeo_t2d_types_t *value){ const org_qeo_wifi_ScanList_list_seq *listEntry = (const org_qeo_wifi_ScanList_list_seq *)in_data; value->typeref.ref = (uintptr_t)(DDS_SEQ_ITEM_PTR(*listEntry, index)); value->typeref.mcbs = &_sl_mcbs; return true; }
static bool simplechat_ChatMessage_list_set_seq_val_cb(uintptr_t out_data, int index, CDR_TypeCode_t type, qeo_t2d_types_t *value){ org_qeo_wifi_ScanList_list_seq *listEntry = (org_qeo_wifi_ScanList_list_seq *)out_data; switch(type){ case CDR_TYPECODE_STRUCT: ck_assert_str_eq(value->typeref.name, org_qeo_wifi_ScanListEntry_type[0].name); value->typeref.ref = (uintptr_t)(DDS_SEQ_ITEM_PTR(*listEntry, index)); value->typeref.ucbs = &_sl_ucbs; break; default: qeo_log_e("Unsupported type %d", type); return false; } return true; }
void introspect_annotation (DDS_AnnotationDescriptor *adp, int after) { unsigned i; DDS_ReturnCode_t ret; DDS_TypeDescriptor desc; DDS_Parameters pars; MapEntry_DDS_ObjectName_DDS_ObjectName *p; if (after) dbg_printf (" //"); DDS_TypeDescriptor__init (&desc); ret = DDS_DynamicType_get_descriptor (adp->type, &desc); fail_unless (ret == DDS_RETCODE_OK); dbg_printf ("@%s", desc.name); DDS_SEQ_INIT (pars); ret = DDS_AnnotationDescriptor_get_all_value (adp, &pars); fail_unless (ret == DDS_RETCODE_OK); if (DDS_SEQ_LENGTH (pars) == 1 && !strcmp (DDS_SEQ_ITEM (pars, 0).key, "value")) { /* Shorthand notation! */ if (strcmp (DDS_SEQ_ITEM (pars, 0).value, "true")) dbg_printf ("(%s)", DDS_SEQ_ITEM (pars, 0).value); } else { dbg_printf ("("); for (i = 0; i < DDS_SEQ_LENGTH (pars); i++) { if (i) dbg_printf (", "); p = DDS_SEQ_ITEM_PTR (pars, i); dbg_printf ("%s=\"%s\"", p->key, p->value); } dbg_printf (")"); } if (!after) dbg_printf (" "); DDS_Parameters__clear (&pars); DDS_TypeDescriptor__clear (&desc); }
static void ctt_trace (char dir, DDS_ParticipantVolatileSecureMessage *m) { #ifdef CTT_TRACE_DATA DDS_CryptoToken *cp; unsigned i; #endif char buf [40]; if (dir == 'T') guid_prefix_str ((GuidPrefix_t *) m->destination_participant_key, buf); else guid_prefix_str ((GuidPrefix_t *) m->message_identity.source_guid, buf); log_printf (SPDP_ID, 0, "CTT: %c [%s].%llu - %s", dir, buf, m->message_identity.sequence_number, m->message_class_id); if (strcmp (m->message_class_id, GMCLASSID_SECURITY_PARTICIPANT_CRYPTO_TOKENS)) { log_printf (SPDP_ID, 0, " (%s->", entity_id_str ((EntityId_t *) (m->source_endpoint_key + 12), buf)); log_printf (SPDP_ID, 0, "%s)", entity_id_str ((EntityId_t *) (m->destination_endpoint_key + 12), buf)); } log_printf (SPDP_ID, 0, "\r\n"); #ifdef CTT_TRACE_DATA /* if (strcmp (m->message_class_id, GMCLASSID_SECURITY_PARTICIPANT_CRYPTO_TOKENS)) { log_printf (SPDP_ID, 0, " {%s -> ", guid_str ((GUID_t *) m->source_endpoint_key, buf)); log_printf (SPDP_ID, 0, "%s}\r\n", guid_str ((GUID_t *) m->destination_endpoint_key, buf)); } */ for (i = 0; i < DDS_SEQ_LENGTH (m->message_data); i++) { cp = DDS_SEQ_ITEM_PTR (m->message_data, i); log_printf (SPDP_ID, 0, " %u: %s:\r\n", i, cp->class_id); if (cp->binary_value1) ctt_dump_binary_value (1, cp->binary_value1); if (cp->binary_value2) ctt_dump_binary_value (2, cp->binary_value2); } #endif }
&ret); qeocore_type_free(type); ck_assert_int_ne(event_writer, NULL); ck_assert_int_eq(ret, QEO_OK); qeocore_data_t *sample = qeocore_writer_data_new(event_writer); ck_assert_int_eq(qeo_walk_tsm_for_marshal(_types, org_qeo_sample_simplechat_ChatMessage_type, (uintptr_t)&chat_msg, sample, QEO_T2D_FLAGS_ALL, &_sc_mcbs), QEO_OK); ck_assert_int_eq(qeocore_writer_write(event_writer, sample), QEO_OK); qeocore_data_free(sample); sleep(1); org_qeo_wifi_ScanListEntry_t *entry; DDS_SEQ_FOREACH_ENTRY (chat_msg.list, i, entry){ ck_assert_str_eq(entry->BSSID, DDS_SEQ_ITEM_PTR(_rcvd_chatmsg.list,i)->BSSID); ck_assert_str_eq(entry->SSID, DDS_SEQ_ITEM_PTR(_rcvd_chatmsg.list,i)->SSID); ck_assert_int_eq(entry->channel, DDS_SEQ_ITEM_PTR(_rcvd_chatmsg.list,i)->channel); ck_assert_int_eq(entry->RSSI, DDS_SEQ_ITEM_PTR(_rcvd_chatmsg.list,i)->RSSI); } ck_assert_str_eq(_rcvd_chatmsg.from, chat_msg.from); ck_assert_str_eq(_rcvd_chatmsg.message, chat_msg.message); fail_unless(dds_seq_equal(&_rcvd_chatmsg.extraInfo, &chat_msg.extraInfo), "sequences not equal"); ck_assert_int_eq(_rcvd_chatmsg.fromExtra.lower, chat_msg.fromExtra.lower); ck_assert_int_eq(_rcvd_chatmsg.fromExtra.upper, chat_msg.fromExtra.upper); ck_assert_int_eq(_rcvd_chatmsg.maincolor, chat_msg.maincolor); fail_unless(dds_seq_equal(&_rcvd_chatmsg.colorlist, &chat_msg.colorlist), "sequences not equal"); qeocore_writer_close(event_writer);
void ctt_event (Reader_t *rp, NotificationType_t t) { Domain_t *dp = rp->r_subscriber->domain; ChangeData_t change; DDS_ParticipantStatelessMessage *info = NULL; int error; #ifdef DDS_QEO_TYPES unsigned i; DDS_DataHolder *cp; #endif if (t != NT_DATA_AVAILABLE) return; rp->r_status &= ~DDS_DATA_AVAILABLE_STATUS; for (;;) { error = disc_get_data (rp, &change); if (error) break; /* Unmarshall handshake message. */ info = change.data; if (!info) break; /* Drop message if not a broadcast or no matching key. */ if (memcmp (info->destination_participant_key, psmp_unknown_key, GUIDPREFIX_SIZE) && memcmp (info->destination_participant_key, dp->participant.p_guid_prefix.prefix, GUIDPREFIX_SIZE)) goto free_data; CTT_TRACE ('R', info); CTT_ASSERT (dp); /* Handle different message classes specifically: */ if (!info->message_class_id) ; else if (!strcmp (info->message_class_id, GMCLASSID_SECURITY_PARTICIPANT_CRYPTO_TOKENS)) ctt_participant_crypto_tokens (dp, info); else if (!strcmp (info->message_class_id, GMCLASSID_SECURITY_DATAWRITER_CRYPTO_TOKENS)) ctt_data_writer_crypto_tokens (dp, info); else if (!strcmp (info->message_class_id, GMCLASSID_SECURITY_DATAREADER_CRYPTO_TOKENS)) ctt_data_reader_crypto_tokens (dp, info); #ifdef DDS_QEO_TYPES else if (cb_fct) { for (i = 0; i < DDS_SEQ_LENGTH (info->message_data); i++) { cp = DDS_SEQ_ITEM_PTR (info->message_data, i); (*cb_fct) (cp); } } #endif CTT_ASSERT (dp); /* Free message info. */ free_data: xfree (info); info = NULL; } if (info) xfree (info); }