You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gs...@apache.org on 2013/09/02 18:22:25 UTC
svn commit: r1519466 - in /qpid/trunk/qpid: cpp/src/qpid/amqp/
cpp/src/qpid/broker/amqp/ cpp/src/qpid/messaging/
cpp/src/qpid/messaging/amqp/ cpp/src/tests/
tests/src/py/qpid_tests/broker_0_10/
Author: gsim
Date: Mon Sep 2 16:22:24 2013
New Revision: 1519466
URL: http://svn.apache.org/r1519466
Log:
QPID-5106: handle annotations properly and add option to control whether annotations are nested or not on fetch()
Modified:
qpid/trunk/qpid/cpp/src/qpid/amqp/DataBuilder.cpp
qpid/trunk/qpid/cpp/src/qpid/amqp/DataBuilder.h
qpid/trunk/qpid/cpp/src/qpid/amqp/Decoder.cpp
qpid/trunk/qpid/cpp/src/qpid/amqp/Decoder.h
qpid/trunk/qpid/cpp/src/qpid/amqp/Descriptor.cpp
qpid/trunk/qpid/cpp/src/qpid/amqp/ListReader.h
qpid/trunk/qpid/cpp/src/qpid/amqp/MapReader.cpp
qpid/trunk/qpid/cpp/src/qpid/amqp/MapReader.h
qpid/trunk/qpid/cpp/src/qpid/amqp/MessageReader.cpp
qpid/trunk/qpid/cpp/src/qpid/amqp/MessageReader.h
qpid/trunk/qpid/cpp/src/qpid/amqp/Reader.h
qpid/trunk/qpid/cpp/src/qpid/amqp/SaslClient.cpp
qpid/trunk/qpid/cpp/src/qpid/amqp/SaslClient.h
qpid/trunk/qpid/cpp/src/qpid/amqp/SaslServer.cpp
qpid/trunk/qpid/cpp/src/qpid/amqp/SaslServer.h
qpid/trunk/qpid/cpp/src/qpid/broker/amqp/DataReader.cpp
qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Message.cpp
qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Message.h
qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Translation.cpp
qpid/trunk/qpid/cpp/src/qpid/messaging/ConnectionOptions.cpp
qpid/trunk/qpid/cpp/src/qpid/messaging/ConnectionOptions.h
qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp
qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/EncodedMessage.cpp
qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/EncodedMessage.h
qpid/trunk/qpid/cpp/src/tests/failing-amqp1.0-python-tests
qpid/trunk/qpid/cpp/src/tests/swig_python_tests
qpid/trunk/qpid/tests/src/py/qpid_tests/broker_0_10/new_api.py
Modified: qpid/trunk/qpid/cpp/src/qpid/amqp/DataBuilder.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/amqp/DataBuilder.cpp?rev=1519466&r1=1519465&r2=1519466&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/amqp/DataBuilder.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/amqp/DataBuilder.cpp Mon Sep 2 16:22:24 2013
@@ -158,7 +158,7 @@ bool DataBuilder::nest(const qpid::types
return true;
}
-bool DataBuilder::onStartList(uint32_t, const CharSequence&, const Descriptor*)
+bool DataBuilder::onStartList(uint32_t, const CharSequence&, const CharSequence&, const Descriptor*)
{
return nest(qpid::types::Variant::List());
}
@@ -166,7 +166,7 @@ void DataBuilder::onEndList(uint32_t /*c
{
nested.pop();
}
-bool DataBuilder::onStartMap(uint32_t /*count*/, const CharSequence&, const Descriptor*)
+bool DataBuilder::onStartMap(uint32_t /*count*/, const CharSequence&, const CharSequence&, const Descriptor*)
{
return nest(qpid::types::Variant::Map());
}
@@ -176,7 +176,7 @@ void DataBuilder::onEndMap(uint32_t /*co
}
bool DataBuilder::onStartArray(uint32_t count, const CharSequence&, const Constructor&, const Descriptor*)
{
- return onStartList(count, CharSequence::create(), 0);
+ return onStartList(count, CharSequence::create(), CharSequence::create(), 0);
}
void DataBuilder::onEndArray(uint32_t count, const Descriptor*)
{
Modified: qpid/trunk/qpid/cpp/src/qpid/amqp/DataBuilder.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/amqp/DataBuilder.h?rev=1519466&r1=1519465&r2=1519466&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/amqp/DataBuilder.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/amqp/DataBuilder.h Mon Sep 2 16:22:24 2013
@@ -56,8 +56,8 @@ class DataBuilder : public Reader
QPID_COMMON_EXTERN void onString(const CharSequence&, const Descriptor*);
QPID_COMMON_EXTERN void onSymbol(const CharSequence&, const Descriptor*);
- QPID_COMMON_EXTERN bool onStartList(uint32_t /*count*/, const CharSequence&, const Descriptor*);
- QPID_COMMON_EXTERN bool onStartMap(uint32_t /*count*/, const CharSequence&, const Descriptor*);
+ QPID_COMMON_EXTERN bool onStartList(uint32_t /*count*/, const CharSequence&, const CharSequence&, const Descriptor*);
+ QPID_COMMON_EXTERN bool onStartMap(uint32_t /*count*/, const CharSequence&, const CharSequence&, const Descriptor*);
QPID_COMMON_EXTERN bool onStartArray(uint32_t /*count*/, const CharSequence&, const Constructor&, const Descriptor*);
QPID_COMMON_EXTERN void onEndList(uint32_t /*count*/, const Descriptor*);
QPID_COMMON_EXTERN void onEndMap(uint32_t /*count*/, const Descriptor*);
Modified: qpid/trunk/qpid/cpp/src/qpid/amqp/Decoder.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/amqp/Decoder.cpp?rev=1519466&r1=1519465&r2=1519466&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/amqp/Decoder.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/amqp/Decoder.cpp Mon Sep 2 16:22:24 2013
@@ -22,6 +22,7 @@
#include "qpid/amqp/CharSequence.h"
#include "qpid/amqp/Constructor.h"
#include "qpid/amqp/Descriptor.h"
+#include "qpid/amqp/MapBuilder.h"
#include "qpid/amqp/Reader.h"
#include "qpid/amqp/typecodes.h"
#include "qpid/types/Uuid.h"
@@ -34,121 +35,13 @@ namespace amqp {
using namespace qpid::amqp::typecodes;
-Decoder::Decoder(const char* d, size_t s) : start(d), size(s), position(0) {}
+Decoder::Decoder(const char* d, size_t s) : start(d), size(s), position(0), current(0) {}
-namespace {
-class MapBuilder : public Reader
-{
- public:
- void onNull(const Descriptor*)
- {
- qpid::types::Variant v;
- handle(v, NULL_NAME);
- }
- void onBoolean(bool v, const Descriptor*)
- {
- handle(v, BOOLEAN_NAME);
- }
- void onUByte(uint8_t v, const Descriptor*)
- {
- handle(v, UBYTE_NAME);
- }
- void onUShort(uint16_t v, const Descriptor*)
- {
- handle(v, USHORT_NAME);
- }
- void onUInt(uint32_t v, const Descriptor*)
- {
- handle(v, UINT_NAME);
- }
- void onULong(uint64_t v, const Descriptor*)
- {
- handle(v, ULONG_NAME);
- }
- void onByte(int8_t v, const Descriptor*)
- {
- handle(v, BYTE_NAME);
- }
- void onShort(int16_t v, const Descriptor*)
- {
- handle(v, SHORT_NAME);
- }
- void onInt(int32_t v, const Descriptor*)
- {
- handle(v, INT_NAME);
- }
- void onLong(int64_t v, const Descriptor*)
- {
- handle(v, LONG_NAME);
- }
- void onFloat(float v, const Descriptor*)
- {
- handle(v, FLOAT_NAME);
- }
- void onDouble(double v, const Descriptor*)
- {
- handle(v, DOUBLE_NAME);
- }
- void onUuid(const CharSequence& v, const Descriptor*)
- {
- handle(v, UUID_NAME);
- }
- void onTimestamp(int64_t v, const Descriptor*)
- {
- handle(v, TIMESTAMP_NAME);
- }
- void onBinary(const CharSequence& v, const Descriptor*)
- {
- handle(v);
- }
- void onString(const CharSequence& v, const Descriptor*)
- {
- handle(v);
- }
- void onSymbol(const CharSequence& v, const Descriptor*)
- {
- handle(v);
- }
- MapBuilder(qpid::types::Variant::Map& m) : map(m), state(KEY) {}
- private:
- qpid::types::Variant::Map& map;
- enum {KEY, SKIP, VALUE} state;
- std::string key;
-
- template <typename T> void handle(T value, const std::string& name)
- {
- switch (state) {
- case KEY:
- QPID_LOG(warning, "Ignoring key of type " << name);
- state = SKIP;
- break;
- case VALUE:
- map[key] = value;
- case SKIP:
- state = KEY;
- break;
- }
- }
- void handle(const CharSequence& value)
- {
- switch (state) {
- case KEY:
- key = value.str();
- state = VALUE;
- break;
- case VALUE:
- map[key] = value.str();
- case SKIP:
- state = KEY;
- break;
- }
- }
-};
-}
void Decoder::readMap(qpid::types::Variant::Map& map)
{
- MapBuilder builder(map);
+ MapBuilder builder;
read(builder);
+ map = builder.getMap();
}
qpid::types::Variant::Map Decoder::readMap()
@@ -168,6 +61,7 @@ void Decoder::read(Reader& reader)
void Decoder::readOne(Reader& reader)
{
const char* temp = start + position;
+ current = position;
Constructor c = readConstructor();
if (c.isDescribed) reader.onDescriptor(c.descriptor, temp);
readValue(reader, c.code, c.isDescribed ? &c.descriptor : 0);
@@ -263,7 +157,7 @@ void Decoder::readValue(Reader& reader,
break;
case LIST0:
- reader.onStartList(0, CharSequence::create(), descriptor);
+ reader.onStartList(0, CharSequence::create(), getCurrent(0), descriptor);
reader.onEndList(0, descriptor);
break;
case LIST8:
@@ -333,7 +227,7 @@ void Decoder::readArray32(Reader& reader
void Decoder::readList(Reader& reader, uint32_t size, uint32_t count, const Descriptor* descriptor)
{
- if (reader.onStartList(count, CharSequence::create(data(), size), descriptor)) {
+ if (reader.onStartList(count, CharSequence::create(data(), size), getCurrent(size), descriptor)) {
for (uint32_t i = 0; i < count; ++i) {
readOne(reader);
}
@@ -345,7 +239,7 @@ void Decoder::readList(Reader& reader, u
}
void Decoder::readMap(Reader& reader, uint32_t size, uint32_t count, const Descriptor* descriptor)
{
- if (reader.onStartMap(count, CharSequence::create(data(), size), descriptor)) {
+ if (reader.onStartMap(count, CharSequence::create(data(), size), getCurrent(size), descriptor)) {
for (uint32_t i = 0; i < count; ++i) {
readOne(reader);
}
@@ -401,7 +295,7 @@ Descriptor Decoder::readDescriptor()
case ULONG_ZERO:
return Descriptor((uint64_t) 0);
default:
- throw qpid::Exception(QPID_MSG("Expected descriptor of type ulong or symbol; found " << code));
+ throw qpid::Exception(QPID_MSG("Expected descriptor of type ulong or symbol; found " << (int)code));
}
}
@@ -542,4 +436,10 @@ CharSequence Decoder::readRawUuid()
size_t Decoder::getPosition() const { return position; }
size_t Decoder::getSize() const { return size; }
void Decoder::resetSize(size_t s) { size = s; }
+
+CharSequence Decoder::getCurrent(size_t remaining) const
+{
+ return CharSequence::create(start + current, (position-current)+remaining);
+}
+
}} // namespace qpid::amqp
Modified: qpid/trunk/qpid/cpp/src/qpid/amqp/Decoder.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/amqp/Decoder.h?rev=1519466&r1=1519465&r2=1519466&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/amqp/Decoder.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/amqp/Decoder.h Mon Sep 2 16:22:24 2013
@@ -77,6 +77,7 @@ class Decoder
const char* const start;
size_t size;
size_t position;
+ size_t current;
void readOne(Reader& reader);
void readValue(Reader& reader, uint8_t code, const Descriptor* descriptor);
@@ -92,7 +93,7 @@ class Decoder
CharSequence readRawUuid();
Constructor readConstructor();
const char* data();
-
+ CharSequence getCurrent(size_t remaining) const;
};
}} // namespace qpid::amqp
Modified: qpid/trunk/qpid/cpp/src/qpid/amqp/Descriptor.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/amqp/Descriptor.cpp?rev=1519466&r1=1519465&r2=1519466&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/amqp/Descriptor.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/amqp/Descriptor.cpp Mon Sep 2 16:22:24 2013
@@ -59,7 +59,7 @@ std::ostream& operator<<(std::ostream& o
else os << "null";
break;
case Descriptor::NUMERIC:
- os << d.value.code;
+ os << "0x" << std::hex << d.value.code;
break;
}
return os;
Modified: qpid/trunk/qpid/cpp/src/qpid/amqp/ListReader.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/amqp/ListReader.h?rev=1519466&r1=1519465&r2=1519466&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/amqp/ListReader.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/amqp/ListReader.h Mon Sep 2 16:22:24 2013
@@ -53,10 +53,10 @@ class ListReader : public Reader
virtual void onString(const CharSequence& v, const Descriptor* descriptor) { getReader().onString(v, descriptor); }
virtual void onSymbol(const CharSequence& v, const Descriptor* descriptor) { getReader().onSymbol(v, descriptor); }
- virtual bool onStartList(uint32_t count, const CharSequence& v, const Descriptor* descriptor)
+ virtual bool onStartList(uint32_t count, const CharSequence& elements, const CharSequence& all, const Descriptor* descriptor)
{
++level;
- getReader().onStartList(count, v, descriptor);
+ getReader().onStartList(count, elements, all, descriptor);
return false;
}
virtual void onEndList(uint32_t count, const Descriptor* descriptor)
@@ -64,10 +64,10 @@ class ListReader : public Reader
--level;
getReader().onEndList(count, descriptor);
}
- virtual bool onStartMap(uint32_t count, const CharSequence& v, const Descriptor* descriptor)
+ virtual bool onStartMap(uint32_t count, const CharSequence& elements, const CharSequence& all, const Descriptor* descriptor)
{
++level;
- getReader().onStartMap(count, v, descriptor);
+ getReader().onStartMap(count, elements, all, descriptor);
return false;
}
virtual void onEndMap(uint32_t count, const Descriptor* descriptor)
Modified: qpid/trunk/qpid/cpp/src/qpid/amqp/MapReader.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/amqp/MapReader.cpp?rev=1519466&r1=1519465&r2=1519466&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/amqp/MapReader.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/amqp/MapReader.cpp Mon Sep 2 16:22:24 2013
@@ -219,7 +219,7 @@ void MapReader::onSymbol(const CharSeque
}
}
-bool MapReader::onStartList(uint32_t count, const CharSequence&, const Descriptor* d)
+bool MapReader::onStartList(uint32_t count, const CharSequence&, const CharSequence&, const Descriptor* d)
{
if (!level) throw qpid::Exception(QPID_MSG("Expecting map as top level datum"));
if (key) {
@@ -232,7 +232,7 @@ bool MapReader::onStartList(uint32_t cou
return true;
}
-bool MapReader::onStartMap(uint32_t count, const CharSequence&, const Descriptor* d)
+bool MapReader::onStartMap(uint32_t count, const CharSequence&, const CharSequence&, const Descriptor* d)
{
if (level++) {
if (key) {
Modified: qpid/trunk/qpid/cpp/src/qpid/amqp/MapReader.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/amqp/MapReader.h?rev=1519466&r1=1519465&r2=1519466&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/amqp/MapReader.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/amqp/MapReader.h Mon Sep 2 16:22:24 2013
@@ -87,8 +87,8 @@ class MapReader : public Reader
QPID_COMMON_EXTERN void onString(const CharSequence&, const Descriptor*);
QPID_COMMON_EXTERN void onSymbol(const CharSequence&, const Descriptor*);
- QPID_COMMON_EXTERN bool onStartList(uint32_t /*count*/, const CharSequence&, const Descriptor*);
- QPID_COMMON_EXTERN bool onStartMap(uint32_t /*count*/, const CharSequence&, const Descriptor*);
+ QPID_COMMON_EXTERN bool onStartList(uint32_t /*count*/, const CharSequence&, const CharSequence&, const Descriptor*);
+ QPID_COMMON_EXTERN bool onStartMap(uint32_t /*count*/, const CharSequence&, const CharSequence&, const Descriptor*);
QPID_COMMON_EXTERN bool onStartArray(uint32_t /*count*/, const CharSequence&, const Constructor&, const Descriptor*);
QPID_COMMON_EXTERN void onEndList(uint32_t /*count*/, const Descriptor*);
QPID_COMMON_EXTERN void onEndMap(uint32_t /*count*/, const Descriptor*);
Modified: qpid/trunk/qpid/cpp/src/qpid/amqp/MessageReader.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/amqp/MessageReader.cpp?rev=1519466&r1=1519465&r2=1519466&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/amqp/MessageReader.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/amqp/MessageReader.cpp Mon Sep 2 16:22:24 2013
@@ -187,10 +187,10 @@ void MessageReader::PropertiesReader::on
}
//header, properties, amqp-sequence, amqp-value
-bool MessageReader::onStartList(uint32_t count, const CharSequence& raw, const Descriptor* descriptor)
+bool MessageReader::onStartList(uint32_t count, const CharSequence& elements, const CharSequence& raw, const Descriptor* descriptor)
{
if (delegate) {
- return delegate->onStartList(count, raw, descriptor);
+ return delegate->onStartList(count, elements, raw, descriptor);
} else {
if (!descriptor) {
QPID_LOG(warning, "Expected described type but got no descriptor for list.");
@@ -205,7 +205,7 @@ bool MessageReader::onStartList(uint32_t
onAmqpSequence(raw);
return false;
} else if (descriptor->match(AMQP_VALUE_SYMBOL, AMQP_VALUE_CODE)) {
- onAmqpValue(raw, qpid::amqp::typecodes::LIST_NAME);
+ onAmqpValue(elements, qpid::amqp::typecodes::LIST_NAME);
return false;
} else {
QPID_LOG(warning, "Unexpected described list: " << *descriptor);
@@ -225,28 +225,28 @@ void MessageReader::onEndList(uint32_t c
}
//delivery-annotations, message-annotations, application-properties, amqp-value
-bool MessageReader::onStartMap(uint32_t count, const CharSequence& raw, const Descriptor* descriptor)
+bool MessageReader::onStartMap(uint32_t count, const CharSequence& elements, const CharSequence& raw, const Descriptor* descriptor)
{
if (delegate) {
- return delegate->onStartMap(count, raw, descriptor);
+ return delegate->onStartMap(count, elements, raw, descriptor);
} else {
if (!descriptor) {
QPID_LOG(warning, "Expected described type but got no descriptor for map.");
return false;
} else if (descriptor->match(DELIVERY_ANNOTATIONS_SYMBOL, DELIVERY_ANNOTATIONS_CODE)) {
- onDeliveryAnnotations(raw);
+ onDeliveryAnnotations(elements, raw);
return false;
} else if (descriptor->match(MESSAGE_ANNOTATIONS_SYMBOL, MESSAGE_ANNOTATIONS_CODE)) {
- onMessageAnnotations(raw);
+ onMessageAnnotations(elements, raw);
return false;
} else if (descriptor->match(FOOTER_SYMBOL, FOOTER_CODE)) {
- onFooter(raw);
+ onFooter(elements, raw);
return false;
} else if (descriptor->match(APPLICATION_PROPERTIES_SYMBOL, APPLICATION_PROPERTIES_CODE)) {
- onApplicationProperties(raw);
+ onApplicationProperties(elements, raw);
return false;
} else if (descriptor->match(AMQP_VALUE_SYMBOL, AMQP_VALUE_CODE)) {
- onAmqpValue(raw, qpid::amqp::typecodes::MAP_NAME);
+ onAmqpValue(elements, qpid::amqp::typecodes::MAP_NAME);
return false;
} else {
QPID_LOG(warning, "Unexpected described map: " << *descriptor);
Modified: qpid/trunk/qpid/cpp/src/qpid/amqp/MessageReader.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/amqp/MessageReader.h?rev=1519466&r1=1519465&r2=1519466&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/amqp/MessageReader.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/amqp/MessageReader.h Mon Sep 2 16:22:24 2013
@@ -24,7 +24,6 @@
#include "qpid/amqp/CharSequence.h"
#include "qpid/amqp/Reader.h"
-#include "qpid/amqp/ListReader.h"
#include "qpid/types/Variant.h"
#include "qpid/CommonImportExport.h"
@@ -40,11 +39,11 @@ class MessageReader : public Reader
QPID_COMMON_EXTERN MessageReader();
//header, properties, amqp-sequence, amqp-value
- QPID_COMMON_EXTERN bool onStartList(uint32_t, const CharSequence&, const Descriptor*);
+ QPID_COMMON_EXTERN bool onStartList(uint32_t, const CharSequence&, const CharSequence&, const Descriptor*);
QPID_COMMON_EXTERN void onEndList(uint32_t, const Descriptor*);
//delivery-annotations, message-annotations, application-headers, amqp-value
- QPID_COMMON_EXTERN bool onStartMap(uint32_t, const CharSequence&, const Descriptor*);
+ QPID_COMMON_EXTERN bool onStartMap(uint32_t, const CharSequence&, const CharSequence&, const Descriptor*);
QPID_COMMON_EXTERN void onEndMap(uint32_t, const Descriptor*);
//data, amqp-value
@@ -95,16 +94,16 @@ class MessageReader : public Reader
virtual void onGroupSequence(uint32_t) = 0;
virtual void onReplyToGroupId(const CharSequence&) = 0;
- virtual void onApplicationProperties(const CharSequence&) = 0;
- virtual void onDeliveryAnnotations(const CharSequence&) = 0;
- virtual void onMessageAnnotations(const CharSequence&) = 0;
+ virtual void onApplicationProperties(const CharSequence& /*values*/, const CharSequence& /*full*/) = 0;
+ virtual void onDeliveryAnnotations(const CharSequence& /*values*/, const CharSequence& /*full*/) = 0;
+ virtual void onMessageAnnotations(const CharSequence& /*values*/, const CharSequence& /*full*/) = 0;
virtual void onData(const CharSequence&) = 0;
virtual void onAmqpSequence(const CharSequence&) = 0;
virtual void onAmqpValue(const CharSequence&, const std::string& type) = 0;
virtual void onAmqpValue(const qpid::types::Variant&) = 0;
- virtual void onFooter(const CharSequence&) = 0;
+ virtual void onFooter(const CharSequence& /*values*/, const CharSequence& /*full*/) = 0;
QPID_COMMON_EXTERN CharSequence getBareMessage() const;
Modified: qpid/trunk/qpid/cpp/src/qpid/amqp/Reader.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/amqp/Reader.h?rev=1519466&r1=1519465&r2=1519466&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/amqp/Reader.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/amqp/Reader.h Mon Sep 2 16:22:24 2013
@@ -63,8 +63,8 @@ class Reader
* @return true to get elements of the compound value, false
* to skip over it
*/
- virtual bool onStartList(uint32_t /*count*/, const CharSequence&, const Descriptor*) { return true; }
- virtual bool onStartMap(uint32_t /*count*/, const CharSequence&, const Descriptor*) { return true; }
+ virtual bool onStartList(uint32_t /*count*/, const CharSequence& /*elements*/, const CharSequence& /*complete*/, const Descriptor*) { return true; }
+ virtual bool onStartMap(uint32_t /*count*/, const CharSequence& /*elements*/, const CharSequence& /*complete*/, const Descriptor*) { return true; }
virtual bool onStartArray(uint32_t /*count*/, const CharSequence&, const Constructor&, const Descriptor*) { return true; }
virtual void onEndList(uint32_t /*count*/, const Descriptor*) {}
virtual void onEndMap(uint32_t /*count*/, const Descriptor*) {}
Modified: qpid/trunk/qpid/cpp/src/qpid/amqp/SaslClient.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/amqp/SaslClient.cpp?rev=1519466&r1=1519465&r2=1519466&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/amqp/SaslClient.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/amqp/SaslClient.cpp Mon Sep 2 16:22:24 2013
@@ -116,7 +116,7 @@ class SaslOutcomeReader : public Reader
};
}
-bool SaslClient::onStartList(uint32_t count, const CharSequence& arguments, const Descriptor* descriptor)
+bool SaslClient::onStartList(uint32_t count, const CharSequence& arguments, const CharSequence& /*full raw data*/, const Descriptor* descriptor)
{
if (!descriptor) {
QPID_LOG(error, "Expected described type in SASL negotiation but got no descriptor");
Modified: qpid/trunk/qpid/cpp/src/qpid/amqp/SaslClient.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/amqp/SaslClient.h?rev=1519466&r1=1519465&r2=1519466&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/amqp/SaslClient.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/amqp/SaslClient.h Mon Sep 2 16:22:24 2013
@@ -46,7 +46,7 @@ class SaslClient : public Sasl
QPID_COMMON_EXTERN void response(const std::string*);
private:
- QPID_COMMON_EXTERN bool onStartList(uint32_t count, const CharSequence& arguments, const Descriptor* descriptor);
+ QPID_COMMON_EXTERN bool onStartList(uint32_t count, const CharSequence& arguments, const CharSequence&, const Descriptor* descriptor);
};
Modified: qpid/trunk/qpid/cpp/src/qpid/amqp/SaslServer.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/amqp/SaslServer.cpp?rev=1519466&r1=1519465&r2=1519466&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/amqp/SaslServer.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/amqp/SaslServer.cpp Mon Sep 2 16:22:24 2013
@@ -158,7 +158,7 @@ class SaslResponseReader : public Reader
};
}
-bool SaslServer::onStartList(uint32_t count, const CharSequence& arguments, const Descriptor* descriptor)
+bool SaslServer::onStartList(uint32_t count, const CharSequence& arguments, const CharSequence& /*full raw data*/, const Descriptor* descriptor)
{
if (!descriptor) {
QPID_LOG(error, "Expected described type in SASL negotiation but got no descriptor");
Modified: qpid/trunk/qpid/cpp/src/qpid/amqp/SaslServer.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/amqp/SaslServer.h?rev=1519466&r1=1519465&r2=1519466&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/amqp/SaslServer.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/amqp/SaslServer.h Mon Sep 2 16:22:24 2013
@@ -43,7 +43,7 @@ class SaslServer : public Sasl
QPID_COMMON_EXTERN void completed(bool succeeded);
private:
- QPID_COMMON_EXTERN bool onStartList(uint32_t count, const CharSequence& arguments, const Descriptor* descriptor);
+ QPID_COMMON_EXTERN bool onStartList(uint32_t count, const CharSequence& arguments, const CharSequence&, const Descriptor* descriptor);
};
}} // namespace qpid::amqp
Modified: qpid/trunk/qpid/cpp/src/qpid/broker/amqp/DataReader.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/amqp/DataReader.cpp?rev=1519466&r1=1519465&r2=1519466&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/amqp/DataReader.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/amqp/DataReader.cpp Mon Sep 2 16:22:24 2013
@@ -160,7 +160,7 @@ void DataReader::readArray(pn_data_t* /*
void DataReader::readList(pn_data_t* data, const qpid::amqp::Descriptor* descriptor)
{
size_t count = pn_data_get_list(data);
- bool skip = reader.onStartList(count, qpid::amqp::CharSequence(), descriptor);
+ bool skip = reader.onStartList(count, qpid::amqp::CharSequence(), qpid::amqp::CharSequence(), descriptor);
if (!skip) {
pn_data_enter(data);
for (size_t i = 0; i < count && pn_data_next(data); ++i) {
@@ -174,7 +174,7 @@ void DataReader::readList(pn_data_t* dat
void DataReader::readMap(pn_data_t* data, const qpid::amqp::Descriptor* descriptor)
{
size_t count = pn_data_get_map(data);
- reader.onStartMap(count, qpid::amqp::CharSequence(), descriptor);
+ reader.onStartMap(count, qpid::amqp::CharSequence(), qpid::amqp::CharSequence(), descriptor);
pn_data_enter(data);
for (size_t i = 0; i < count && pn_data_next(data); ++i) {
read(data);
Modified: qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Message.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Message.cpp?rev=1519466&r1=1519465&r2=1519466&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Message.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Message.cpp Mon Sep 2 16:22:24 2013
@@ -125,8 +125,8 @@ namespace {
}
}
- bool onStartList(uint32_t, const CharSequence&, const Descriptor*) { return false; }
- bool onStartMap(uint32_t, const CharSequence&, const Descriptor*) { return false; }
+ bool onStartList(uint32_t, const CharSequence&, const CharSequence&, const Descriptor*) { return false; }
+ bool onStartMap(uint32_t, const CharSequence&, const CharSequence&, const Descriptor*) { return false; }
bool onStartArray(uint32_t, const CharSequence&, const Constructor&, const Descriptor*) { return false; }
public:
@@ -257,9 +257,9 @@ void Message::onGroupId(const qpid::amqp
void Message::onGroupSequence(uint32_t) {}
void Message::onReplyToGroupId(const qpid::amqp::CharSequence&) {}
-void Message::onApplicationProperties(const qpid::amqp::CharSequence& v) { applicationProperties = v; }
-void Message::onDeliveryAnnotations(const qpid::amqp::CharSequence& v) { deliveryAnnotations = v; }
-void Message::onMessageAnnotations(const qpid::amqp::CharSequence& v) { messageAnnotations = v; }
+void Message::onApplicationProperties(const qpid::amqp::CharSequence& v, const qpid::amqp::CharSequence&) { applicationProperties = v; }
+void Message::onDeliveryAnnotations(const qpid::amqp::CharSequence&, const qpid::amqp::CharSequence& v) { deliveryAnnotations = v; }
+void Message::onMessageAnnotations(const qpid::amqp::CharSequence&, const qpid::amqp::CharSequence& v) { messageAnnotations = v; }
void Message::onData(const qpid::amqp::CharSequence& v) { body = v; }
void Message::onAmqpSequence(const qpid::amqp::CharSequence& v) { body = v; bodyType = qpid::amqp::typecodes::LIST_NAME; }
@@ -278,7 +278,7 @@ void Message::onAmqpValue(const qpid::am
}
void Message::onAmqpValue(const qpid::types::Variant& v) { typedBody = v; }
-void Message::onFooter(const qpid::amqp::CharSequence& v) { footer = v; }
+void Message::onFooter(const qpid::amqp::CharSequence&, const qpid::amqp::CharSequence& v) { footer = v; }
bool Message::isTypedBody() const
{
@@ -338,31 +338,41 @@ void Message::decodeHeader(framing::Buff
}
void Message::decodeContent(framing::Buffer& /*buffer*/) {}
-boost::intrusive_ptr<PersistableMessage> Message::merge(const std::map<std::string, qpid::types::Variant>& annotations) const
+boost::intrusive_ptr<PersistableMessage> Message::merge(const std::map<std::string, qpid::types::Variant>& added) const
{
//message- or delivery- annotations? would have to determine that from the name, for now assume always message-annotations
- size_t extra = 0;
+ std::map<std::string, qpid::types::Variant> combined;
+ const std::map<std::string, qpid::types::Variant>* annotations(0);
if (messageAnnotations) {
- //TODO: actual merge required
+ //combine existing and added annotations (TODO: this could be
+ //optimised by avoiding the decode and simply 'editing' the
+ //size and count in the raw data, then appending the new
+ //elements).
+ qpid::amqp::MapBuilder builder;
+ qpid::amqp::Decoder decoder(messageAnnotations.data, messageAnnotations.size);
+ decoder.read(builder);
+ combined = builder.getMap();
+ for (std::map<std::string, qpid::types::Variant>::const_iterator i = added.begin(); i != added.end(); ++i) {
+ combined[i->first] = i->second;
+ }
+ annotations = &combined;
} else {
- //add whole new section
- extra = qpid::amqp::MessageEncoder::getEncodedSize(annotations, true);
+ //additions form a whole new section
+ annotations = &added;
}
- boost::intrusive_ptr<Message> copy(new Message(data.size()+extra));
+ size_t annotationsSize = qpid::amqp::MessageEncoder::getEncodedSize(*annotations, true) + 3/*descriptor*/;
+
+ boost::intrusive_ptr<Message> copy(new Message(bareMessage.size+footer.size+deliveryAnnotations.size+annotationsSize));
size_t position(0);
- if (deliveryAnnotations) {
+ if (deliveryAnnotations.size) {
::memcpy(©->data[position], deliveryAnnotations.data, deliveryAnnotations.size);
position += deliveryAnnotations.size;
}
- if (messageAnnotations) {
- //TODO: actual merge required
- ::memcpy(©->data[position], messageAnnotations.data, messageAnnotations.size);
- position += messageAnnotations.size;
- } else {
- qpid::amqp::MessageEncoder encoder(©->data[position], extra);
- encoder.writeMap(annotations, &qpid::amqp::message::MESSAGE_ANNOTATIONS, true);
- position += extra;
- }
+
+ qpid::amqp::Encoder encoder(©->data[position], annotationsSize);
+ encoder.writeMap(*annotations, &qpid::amqp::message::MESSAGE_ANNOTATIONS, true);
+ position += encoder.getPosition();
+
if (bareMessage) {
::memcpy(©->data[position], bareMessage.data, bareMessage.size);
position += bareMessage.size;
@@ -371,7 +381,18 @@ boost::intrusive_ptr<PersistableMessage>
::memcpy(©->data[position], footer.data, footer.size);
position += footer.size;
}
+ copy->data.resize(position);//annotationsSize may be slightly bigger than needed if optimisations are used (e.g. smallint)
copy->scan();
+ {
+ qpid::amqp::MapBuilder builder;
+ qpid::amqp::Decoder decoder(copy->messageAnnotations.data, copy->messageAnnotations.size);
+ decoder.read(builder);
+ QPID_LOG(notice, "Merged annotations are now: " << builder.getMap() << " raw=" << std::hex << std::string(copy->messageAnnotations.data, copy->messageAnnotations.size) << " " << copy->messageAnnotations.size << " bytes");
+ }
+ assert(copy->messageAnnotations);
+ assert(copy->bareMessage.size == bareMessage.size);
+ assert(copy->footer.size == footer.size);
+ assert(copy->deliveryAnnotations.size == deliveryAnnotations.size);
return copy;
}
Modified: qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Message.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Message.h?rev=1519466&r1=1519465&r2=1519466&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Message.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Message.h Mon Sep 2 16:22:24 2013
@@ -140,16 +140,16 @@ class Message : public qpid::broker::Mes
void onGroupSequence(uint32_t);
void onReplyToGroupId(const qpid::amqp::CharSequence&);
- void onApplicationProperties(const qpid::amqp::CharSequence&);
- void onDeliveryAnnotations(const qpid::amqp::CharSequence&);
- void onMessageAnnotations(const qpid::amqp::CharSequence&);
+ void onApplicationProperties(const qpid::amqp::CharSequence&, const qpid::amqp::CharSequence&);
+ void onDeliveryAnnotations(const qpid::amqp::CharSequence&, const qpid::amqp::CharSequence&);
+ void onMessageAnnotations(const qpid::amqp::CharSequence&, const qpid::amqp::CharSequence&);
void onData(const qpid::amqp::CharSequence&);
void onAmqpSequence(const qpid::amqp::CharSequence&);
void onAmqpValue(const qpid::amqp::CharSequence&, const std::string& type);
void onAmqpValue(const qpid::types::Variant&);
- void onFooter(const qpid::amqp::CharSequence&);
+ void onFooter(const qpid::amqp::CharSequence&, const qpid::amqp::CharSequence&);
};
}}} // namespace qpid::broker::amqp
Modified: qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Translation.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Translation.cpp?rev=1519466&r1=1519465&r2=1519466&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Translation.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Translation.cpp Mon Sep 2 16:22:24 2013
@@ -273,10 +273,11 @@ boost::intrusive_ptr<const qpid::broker:
void Translation::write(OutgoingFromQueue& out)
{
- const Message* message = dynamic_cast<const Message*>(&original.getEncoding());
+ const Message* message = dynamic_cast<const Message*>(original.getPersistentContext().get());
+ //persistent context will contain any newly added annotations
+ if (!message) message = dynamic_cast<const Message*>(&original.getEncoding());
if (message) {
//write annotations
- //TODO: merge in any newly added annotations
qpid::amqp::CharSequence deliveryAnnotations = message->getDeliveryAnnotations();
qpid::amqp::CharSequence messageAnnotations = message->getMessageAnnotations();
if (deliveryAnnotations.size) out.write(deliveryAnnotations.data, deliveryAnnotations.size);
Modified: qpid/trunk/qpid/cpp/src/qpid/messaging/ConnectionOptions.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/messaging/ConnectionOptions.cpp?rev=1519466&r1=1519465&r2=1519466&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/messaging/ConnectionOptions.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/messaging/ConnectionOptions.cpp Mon Sep 2 16:22:24 2013
@@ -115,6 +115,8 @@ void ConnectionOptions::set(const std::s
reconnectOnLimitExceeded = value;
} else if (name == "container-id" || name == "container_id") {
identifier = value.asString();
+ } else if (name == "nest-annotations" || name == "nest_annotations") {
+ nestAnnotations = value;
} else {
throw qpid::messaging::MessagingException(QPID_MSG("Invalid option: " << name << " not recognised"));
}
Modified: qpid/trunk/qpid/cpp/src/qpid/messaging/ConnectionOptions.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/messaging/ConnectionOptions.h?rev=1519466&r1=1519465&r2=1519466&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/messaging/ConnectionOptions.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/messaging/ConnectionOptions.h Mon Sep 2 16:22:24 2013
@@ -45,6 +45,7 @@ struct ConnectionOptions : qpid::client:
int32_t retries;
bool reconnectOnLimitExceeded;
std::string identifier;
+ bool nestAnnotations;
QPID_MESSAGING_EXTERN ConnectionOptions(const std::map<std::string, qpid::types::Variant>&);
QPID_MESSAGING_EXTERN void set(const std::string& name, const qpid::types::Variant& value);
Modified: qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp?rev=1519466&r1=1519465&r2=1519466&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp Mon Sep 2 16:22:24 2013
@@ -203,6 +203,7 @@ bool ConnectionContext::get(boost::share
if (current) {
qpid::messaging::MessageImpl& impl = MessageImplAccess::get(message);
boost::shared_ptr<EncodedMessage> encoded(new EncodedMessage(pn_delivery_pending(current)));
+ encoded->setNestAnnotationsOption(nestAnnotations);
ssize_t read = pn_link_recv(lnk->receiver, encoded->getData(), encoded->getSize());
if (read < 0) throw qpid::messaging::MessagingException("Failed to read message");
encoded->trim((size_t) read);
Modified: qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/EncodedMessage.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/EncodedMessage.cpp?rev=1519466&r1=1519465&r2=1519466&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/EncodedMessage.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/EncodedMessage.cpp Mon Sep 2 16:22:24 2013
@@ -36,17 +36,17 @@ namespace messaging {
namespace amqp {
using namespace qpid::amqp;
-EncodedMessage::EncodedMessage(size_t s) : size(s), data(size ? new char[size] : 0)
+EncodedMessage::EncodedMessage(size_t s) : size(s), data(size ? new char[size] : 0), nestAnnotations(false)
{
init();
}
-EncodedMessage::EncodedMessage() : size(0), data(0)
+EncodedMessage::EncodedMessage() : size(0), data(0), nestAnnotations(false)
{
init();
}
-EncodedMessage::EncodedMessage(const EncodedMessage& other) : size(other.size), data(size ? new char[size] : 0)
+EncodedMessage::EncodedMessage(const EncodedMessage& other) : size(other.size), data(size ? new char[size] : 0), nestAnnotations(false)
{
init();
}
@@ -110,6 +110,8 @@ void EncodedMessage::init(qpid::messagin
}
}
+void EncodedMessage::setNestAnnotationsOption(bool b) { nestAnnotations = b; }
+
void EncodedMessage::populate(qpid::types::Variant::Map& map) const
{
//decode application properties
@@ -144,14 +146,20 @@ void EncodedMessage::populate(qpid::type
}
//add in any annotations
if (deliveryAnnotations) {
- qpid::types::Variant::Map& annotations = map["x-amqp-delivery-annotations"].asMap();
qpid::amqp::Decoder decoder(deliveryAnnotations.data, deliveryAnnotations.size);
- decoder.readMap(annotations);
+ if (nestAnnotations) {
+ map["x-amqp-delivery-annotations"] = decoder.readMap();
+ } else {
+ decoder.readMap(map);
+ }
}
if (messageAnnotations) {
- qpid::types::Variant::Map& annotations = map["x-amqp-message-annotations"].asMap();
qpid::amqp::Decoder decoder(messageAnnotations.data, messageAnnotations.size);
- decoder.readMap(annotations);
+ if (nestAnnotations) {
+ map["x-amqp-message-annotations"] = decoder.readMap();
+ } else {
+ decoder.readMap(map);
+ }
}
}
qpid::amqp::CharSequence EncodedMessage::getBareMessage() const
@@ -284,9 +292,9 @@ void EncodedMessage::InitialScan::onGrou
void EncodedMessage::InitialScan::onGroupSequence(uint32_t i) { em.groupSequence = i; }
void EncodedMessage::InitialScan::onReplyToGroupId(const qpid::amqp::CharSequence& v) { em.replyToGroupId = v; }
-void EncodedMessage::InitialScan::onApplicationProperties(const qpid::amqp::CharSequence& v) { em.applicationProperties = v; }
-void EncodedMessage::InitialScan::onDeliveryAnnotations(const qpid::amqp::CharSequence& v) { em.deliveryAnnotations = v; }
-void EncodedMessage::InitialScan::onMessageAnnotations(const qpid::amqp::CharSequence& v) { em.messageAnnotations = v; }
+void EncodedMessage::InitialScan::onApplicationProperties(const qpid::amqp::CharSequence& v, const qpid::amqp::CharSequence&) { em.applicationProperties = v; }
+void EncodedMessage::InitialScan::onDeliveryAnnotations(const qpid::amqp::CharSequence& v, const qpid::amqp::CharSequence&) { em.deliveryAnnotations = v; }
+void EncodedMessage::InitialScan::onMessageAnnotations(const qpid::amqp::CharSequence& v, const qpid::amqp::CharSequence&) { em.messageAnnotations = v; }
void EncodedMessage::InitialScan::onData(const qpid::amqp::CharSequence& v)
{
@@ -313,6 +321,6 @@ void EncodedMessage::InitialScan::onAmqp
em.content = v;
}
-void EncodedMessage::InitialScan::onFooter(const qpid::amqp::CharSequence& v) { em.footer = v; }
+void EncodedMessage::InitialScan::onFooter(const qpid::amqp::CharSequence& v, const qpid::amqp::CharSequence&) { em.footer = v; }
}}} // namespace qpid::messaging::amqp
Modified: qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/EncodedMessage.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/EncodedMessage.h?rev=1519466&r1=1519465&r2=1519466&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/EncodedMessage.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/EncodedMessage.h Mon Sep 2 16:22:24 2013
@@ -86,6 +86,7 @@ class EncodedMessage
QPID_MESSAGING_EXTERN void trim(size_t);
QPID_MESSAGING_EXTERN void resize(size_t);
+ QPID_MESSAGING_EXTERN void setNestAnnotationsOption(bool);
void getReplyTo(qpid::messaging::Address&) const;
void getSubject(std::string&) const;
void getContentType(std::string&) const;
@@ -102,6 +103,7 @@ class EncodedMessage
private:
size_t size;
char* data;
+ bool nestAnnotations;
class InitialScan : public qpid::amqp::MessageReader
{
@@ -130,16 +132,16 @@ class EncodedMessage
void onGroupSequence(uint32_t);
void onReplyToGroupId(const qpid::amqp::CharSequence&);
- void onApplicationProperties(const qpid::amqp::CharSequence&);
- void onDeliveryAnnotations(const qpid::amqp::CharSequence&);
- void onMessageAnnotations(const qpid::amqp::CharSequence&);
+ void onApplicationProperties(const qpid::amqp::CharSequence&, const qpid::amqp::CharSequence&);
+ void onDeliveryAnnotations(const qpid::amqp::CharSequence&, const qpid::amqp::CharSequence&);
+ void onMessageAnnotations(const qpid::amqp::CharSequence&, const qpid::amqp::CharSequence&);
void onData(const qpid::amqp::CharSequence&);
void onAmqpSequence(const qpid::amqp::CharSequence&);
void onAmqpValue(const qpid::amqp::CharSequence&, const std::string& type);
void onAmqpValue(const qpid::types::Variant&);
- void onFooter(const qpid::amqp::CharSequence&);
+ void onFooter(const qpid::amqp::CharSequence&, const qpid::amqp::CharSequence&);
private:
EncodedMessage& em;
qpid::messaging::MessageImpl& mi;
Modified: qpid/trunk/qpid/cpp/src/tests/failing-amqp1.0-python-tests
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/tests/failing-amqp1.0-python-tests?rev=1519466&r1=1519465&r2=1519466&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/tests/failing-amqp1.0-python-tests (original)
+++ qpid/trunk/qpid/cpp/src/tests/failing-amqp1.0-python-tests Mon Sep 2 16:22:24 2013
@@ -0,0 +1,2 @@
+qpid_tests.broker_0_10.new_api.GeneralTests.test_qpid_3481_acquired_to_alt_exchange_2_consumers
+qpid_tests.broker_0_10.new_api.GeneralTests.test_qpid_3481_acquired_to_alt_exchange
Modified: qpid/trunk/qpid/cpp/src/tests/swig_python_tests
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/tests/swig_python_tests?rev=1519466&r1=1519465&r2=1519466&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/tests/swig_python_tests (original)
+++ qpid/trunk/qpid/cpp/src/tests/swig_python_tests Mon Sep 2 16:22:24 2013
@@ -53,7 +53,7 @@ export PYTHONPATH=$PYTHONPATH:$PYTHONPAT
$QPID_PYTHON_TEST -m qpid.tests.messaging.message -m qpid_tests.broker_0_10.priority -m qpid_tests.broker_0_10.lvq -m qpid_tests.broker_0_10.new_api -b localhost:$QPID_PORT -I $srcdir/failing-amqp0-10-python-tests || FAILED=1
if [[ -a $AMQPC_LIB ]] ; then
export QPID_LOAD_MODULE=$AMQPC_LIB
- $QPID_PYTHON_TEST --define="protocol_version=amqp1.0" -m qpid_tests.broker_1_0 -b localhost:$QPID_PORT -I $srcdir/failing-amqp1.0-python-tests || FAILED=1
+ $QPID_PYTHON_TEST --define="protocol_version=amqp1.0" -m qpid_tests.broker_1_0 -m qpid_tests.broker_0_10.new_api -b localhost:$QPID_PORT -I $srcdir/failing-amqp1.0-python-tests || FAILED=1
fi
stop_broker
if [[ $FAILED -eq 1 ]]; then
Modified: qpid/trunk/qpid/tests/src/py/qpid_tests/broker_0_10/new_api.py
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/tests/src/py/qpid_tests/broker_0_10/new_api.py?rev=1519466&r1=1519465&r2=1519466&view=diff
==============================================================================
--- qpid/trunk/qpid/tests/src/py/qpid_tests/broker_0_10/new_api.py (original)
+++ qpid/trunk/qpid/tests/src/py/qpid_tests/broker_0_10/new_api.py Mon Sep 2 16:22:24 2013
@@ -140,7 +140,7 @@ class SequenceNumberTests(Base):
return self.conn.session()
def setup_sender(self, name="ring-sequence-queue", key="qpid.queue_msg_sequence"):
- addr = "%s; {create:sender, delete:always, node: {x-declare: {arguments: {'qpid.queue_msg_sequence':'%s', 'qpid.policy_type':'ring', 'qpid.max_count':4}}}}" % (name, key)
+ addr = "%s; {create:sender, node: {x-declare: {auto-delete: True, arguments: {'qpid.queue_msg_sequence':'%s', 'qpid.policy_type':'ring', 'qpid.max_count':4}}}}" % (name, key)
sender = self.ssn.sender(addr)
return sender
@@ -202,3 +202,4 @@ class SequenceNumberTests(Base):
txt = "Unexpected sequence number. Should be 3. Received (%s)" % seqNo
self.fail(txt)
receiver.close()
+
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org