in c/src/core/message.c [954:1042]
int pn_message_data(pn_message_t *msg, pn_data_t *data)
{
pn_data_clear(data);
int err = pn_data_fill(data, "DL[?o?B?I?o?I]", AMQP_DESC_HEADER,
msg->durable, msg->durable,
msg->priority!=AMQP_HEADER_PRIORITY_DEFAULT, msg->priority,
(bool)msg->ttl, msg->ttl,
msg->first_acquirer, msg->first_acquirer,
(bool)msg->delivery_count, msg->delivery_count);
if (err)
return pn_error_format(msg->error, err, "data error: %s",
pn_error_text(pn_data_error(data)));
if (pn_data_size(msg->instructions_deprecated)) {
pn_data_rewind(msg->instructions_deprecated);
err = pn_data_fill(data, "DLC", AMQP_DESC_DELIVERY_ANNOTATIONS, msg->instructions_deprecated);
if (err)
return pn_error_format(msg->error, err, "data error: %s",
pn_error_text(pn_data_error(data)));
}
if (pn_data_size(msg->annotations_deprecated)) {
pn_data_rewind(msg->annotations_deprecated);
err = pn_data_fill(data, "DLC", AMQP_DESC_MESSAGE_ANNOTATIONS, msg->annotations_deprecated);
if (err)
return pn_error_format(msg->error, err, "data error: %s",
pn_error_text(pn_data_error(data)));
}
pn_atom_t id = pn_message_get_id(msg);
pn_atom_t correlation_id = pn_message_get_correlation_id(msg);
err = pn_data_fill(data, "DL[azSSSass?t?tS?IS]", AMQP_DESC_PROPERTIES,
&id,
pn_string_size(msg->user_id), pn_string_get(msg->user_id),
pn_string_get(msg->address),
pn_string_get(msg->subject),
pn_string_get(msg->reply_to),
&correlation_id,
pn_string_get(msg->content_type),
pn_string_get(msg->content_encoding),
(bool)msg->expiry_time, msg->expiry_time,
(bool)msg->creation_time, msg->creation_time,
pn_string_get(msg->group_id),
/*
* As a heuristic, null out group_sequence if there is no group_id and
* group_sequence is 0. In this case it is extremely unlikely we want
* group semantics
*/
(bool)pn_string_get(msg->group_id) || (bool)msg->group_sequence , msg->group_sequence,
pn_string_get(msg->reply_to_group_id));
if (err)
return pn_error_format(msg->error, err, "data error: %s",
pn_error_text(pn_data_error(data)));
if (pn_data_size(msg->properties_deprecated)) {
pn_data_rewind(msg->properties_deprecated);
err = pn_data_fill(data, "DLC", AMQP_DESC_APPLICATION_PROPERTIES, msg->properties_deprecated);
if (err)
return pn_error_format(msg->error, err, "data error: %s",
pn_error_text(pn_data_error(data)));
}
if (pn_data_size(msg->body_deprecated)) {
pn_data_rewind(msg->body_deprecated);
pn_data_next(msg->body_deprecated);
pn_type_t body_type = pn_data_type(msg->body_deprecated);
uint64_t descriptor = AMQP_DESC_AMQP_VALUE;
if (msg->inferred) {
switch (body_type) {
case PN_BINARY:
descriptor = AMQP_DESC_DATA;
break;
case PN_LIST:
descriptor = AMQP_DESC_AMQP_SEQUENCE;
break;
default:
break;
}
}
pn_data_rewind(msg->body_deprecated);
err = pn_data_fill(data, "DLC", descriptor, msg->body_deprecated);
if (err)
return pn_error_format(msg->error, err, "data error: %s",
pn_error_text(pn_data_error(data)));
}
return 0;
}