You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by as...@apache.org on 2013/03/12 16:16:43 UTC
svn commit: r1455579 - in /qpid/trunk/qpid/cpp/src/qpid:
broker/HeadersExchange.cpp broker/MapHandler.h broker/Message.cpp
broker/amqp/Message.cpp broker/amqp_0_10/MessageTransfer.cpp
xml/XmlExchange.cpp
Author: astitcher
Date: Tue Mar 12 15:16:43 2013
New Revision: 1455579
URL: http://svn.apache.org/r1455579
Log:
QPID-4625: Extract amqp 1.0 application-properties from messages
- A working implementaion to qpid::amqp::Message::processProperties()
so that qpid::broker::Message::getProperty() will work.
* This is used by the selector implementation.
Modified:
qpid/trunk/qpid/cpp/src/qpid/broker/HeadersExchange.cpp
qpid/trunk/qpid/cpp/src/qpid/broker/MapHandler.h
qpid/trunk/qpid/cpp/src/qpid/broker/Message.cpp
qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Message.cpp
qpid/trunk/qpid/cpp/src/qpid/broker/amqp_0_10/MessageTransfer.cpp
qpid/trunk/qpid/cpp/src/qpid/xml/XmlExchange.cpp
Modified: qpid/trunk/qpid/cpp/src/qpid/broker/HeadersExchange.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/HeadersExchange.cpp?rev=1455579&r1=1455578&r2=1455579&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/HeadersExchange.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/HeadersExchange.cpp Tue Mar 12 15:16:43 2013
@@ -19,6 +19,8 @@
*
*/
#include "qpid/broker/HeadersExchange.h"
+
+#include "qpid/amqp/CharSequence.h"
#include "qpid/broker/MapHandler.h"
#include "qpid/framing/FieldValue.h"
#include "qpid/framing/reply_exceptions.h"
Modified: qpid/trunk/qpid/cpp/src/qpid/broker/MapHandler.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/MapHandler.h?rev=1455579&r1=1455578&r2=1455579&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/MapHandler.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/MapHandler.h Tue Mar 12 15:16:43 2013
@@ -24,6 +24,11 @@
#include "qpid/sys/IntegerTypes.h"
namespace qpid {
+
+namespace amqp {
+struct CharSequence;
+}
+
namespace broker {
/**
@@ -32,10 +37,7 @@ namespace broker {
class MapHandler
{
public:
- typedef struct {
- const char* data;
- size_t size;
- } CharSequence;
+ typedef qpid::amqp::CharSequence CharSequence;
virtual ~MapHandler() {}
virtual void handleVoid(const CharSequence& key) = 0;
Modified: qpid/trunk/qpid/cpp/src/qpid/broker/Message.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/Message.cpp?rev=1455579&r1=1455578&r2=1455579&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/Message.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/Message.cpp Tue Mar 12 15:16:43 2013
@@ -20,6 +20,8 @@
*/
#include "qpid/broker/Message.h"
+
+#include "qpid/amqp/CharSequence.h"
#include "qpid/broker/MapHandler.h"
#include "qpid/StringUtils.h"
#include "qpid/log/Statement.h"
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=1455579&r1=1455578&r2=1455579&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Message.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Message.cpp Tue Mar 12 15:16:43 2013
@@ -21,7 +21,9 @@
#include "Message.h"
#include "qpid/amqp/Decoder.h"
#include "qpid/amqp/descriptors.h"
+#include "qpid/amqp/Reader.h"
#include "qpid/amqp/MessageEncoder.h"
+#include "qpid/broker/MapHandler.h"
#include "qpid/log/Statement.h"
#include "qpid/framing/Buffer.h"
#include <string.h>
@@ -30,6 +32,11 @@ namespace qpid {
namespace broker {
namespace amqp {
+using qpid::amqp::CharSequence;
+using qpid::amqp::Constructor;
+using qpid::amqp::Descriptor;
+using qpid::amqp::Reader;
+
namespace {
std::string empty;
}
@@ -69,7 +76,67 @@ uint8_t Message::getPriority() const
std::string Message::getPropertyAsString(const std::string& /*key*/) const { return empty; }
std::string Message::getAnnotationAsString(const std::string& /*key*/) const { return empty; }
-void Message::processProperties(MapHandler&) const {}
+
+namespace {
+ class PropertyAdapter : public Reader {
+ MapHandler& handler;
+ CharSequence key;
+ enum {
+ KEY,
+ VALUE
+ } state;
+
+ void checkValue() {
+ if ( state==VALUE ) state = KEY;
+ else {
+ // TODO: Would throwing an exception make more sense here?
+ QPID_LOG(error, "Received non string property key");
+ key = CharSequence();
+ state = KEY;
+ }
+ }
+
+ void onNull(const Descriptor*) {checkValue(); handler.handleVoid(key);}
+ void onBoolean(bool b, const Descriptor*) {checkValue(); handler.handleBool(key, b);}
+ void onUByte(uint8_t i, const Descriptor*) {checkValue(); handler.handleUint8(key, i);}
+ void onUShort(uint16_t i, const Descriptor*) {checkValue(); handler.handleUint16(key, i);}
+ void onUInt(uint32_t i, const Descriptor*) {checkValue(); handler.handleUint32(key, i);}
+ void onULong(uint64_t i, const Descriptor*) {checkValue(); handler.handleUint64(key, i);}
+ void onByte(int8_t i, const Descriptor*) {checkValue(); handler.handleInt8(key, i);}
+ void onShort(int16_t i, const Descriptor*) {checkValue(); handler.handleInt16(key, i);}
+ void onInt(int32_t i, const Descriptor*) {checkValue(); handler.handleInt32(key, i);}
+ void onLong(int64_t i, const Descriptor*) {checkValue(); handler.handleInt64(key, i);}
+ void onFloat(float x, const Descriptor*) {checkValue(); handler.handleFloat(key, x);}
+ void onDouble(double x, const Descriptor*) {checkValue(); handler.handleDouble(key, x);}
+ void onTimestamp(int64_t i, const Descriptor*) {checkValue(); handler.handleInt64(key, i);}
+
+ void onString(const CharSequence& s, const Descriptor*) {
+ if ( state==KEY ) {
+ state = VALUE;
+ key = s;
+ } else {
+ state = KEY;
+ handler.handleString(key, s, CharSequence());
+ }
+ }
+
+ bool onStartList(uint32_t, const CharSequence&, const Descriptor*) { return false; }
+ bool onStartMap(uint32_t, const CharSequence&, const Descriptor*) { return false; }
+ bool onStartArray(uint32_t, const CharSequence&, const Constructor&, const Descriptor*) { return false; }
+
+ public:
+ PropertyAdapter(MapHandler& mh) :
+ handler(mh),
+ state(KEY)
+ {}
+ };
+}
+
+void Message::processProperties(MapHandler& mh) const {
+ qpid::amqp::Decoder d(applicationProperties.data, applicationProperties.size);
+ PropertyAdapter mha(mh);
+ d.read(mha);
+}
//getContentSize() is primarily used in stats about the number of
//bytes enqueued/dequeued etc, not sure whether this is the right name
Modified: qpid/trunk/qpid/cpp/src/qpid/broker/amqp_0_10/MessageTransfer.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/amqp_0_10/MessageTransfer.cpp?rev=1455579&r1=1455578&r2=1455579&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/amqp_0_10/MessageTransfer.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/amqp_0_10/MessageTransfer.cpp Tue Mar 12 15:16:43 2013
@@ -19,6 +19,8 @@
*
*/
#include "MessageTransfer.h"
+
+#include "qpid/amqp/CharSequence.h"
#include "qpid/amqp_0_10/Codecs.h"
#include "qpid/broker/MapHandler.h"
#include "qpid/broker/Message.h"
Modified: qpid/trunk/qpid/cpp/src/qpid/xml/XmlExchange.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/xml/XmlExchange.cpp?rev=1455579&r1=1455578&r2=1455579&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/xml/XmlExchange.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/xml/XmlExchange.cpp Tue Mar 12 15:16:43 2013
@@ -23,6 +23,7 @@
#include "qpid/xml/XmlExchange.h"
+#include "qpid/amqp/CharSequence.h"
#include "qpid/broker/DeliverableMessage.h"
#include "qpid/log/Statement.h"
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org