bool get_message_timestamp ( pn_message_t * msg, double * timestamp ) { pn_data_t * annotations = pn_message_annotations ( msg ); pn_data_rewind ( annotations ); pn_data_next ( annotations ); if ( PN_MAP == pn_data_type ( annotations ) ) { int len = pn_data_get_map ( annotations ); pn_data_enter ( annotations ); for (int i = 0; i < len; i += 2 ) { pn_data_next ( annotations ); pn_type_t type = pn_data_type ( annotations ); if ( PN_STRING == type ) { pn_bytes_t string = pn_data_get_symbol ( annotations ); if ( ! strncmp ( "timestamp", string.start, string.size ) ) { pn_data_next ( annotations ); type = pn_data_type ( annotations ); if ( type == PN_DOUBLE ) { * timestamp = pn_data_get_double ( annotations ); return true; } } } } } return false; }
void amqp::Sender::_addAnnotationsToMessage(pn_message_t *pnmessage, IMessage const &message) { pn_data_t *pnmessage_annotations = pn_message_annotations(pnmessage); pn_data_put_map(pnmessage_annotations); pn_data_enter(pnmessage_annotations); MessageMeta::const_iterator i = message.getAnnotations().begin(); for (; i != message.getAnnotations().end(); ++i) { _serializeMessageMeta(pnmessage_annotations, (*i)); } pn_data_exit(pnmessage_annotations); }
impl(pn_message_t *msg) { body.reset(pn_message_body(msg)); properties.reset(pn_message_properties(msg)); annotations.reset(pn_message_annotations(msg)); instructions.reset(pn_message_instructions(msg)); }