summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenneth Anthony Giusti <kgiusti@apache.org>2010-03-18 17:10:47 +0000
committerKenneth Anthony Giusti <kgiusti@apache.org>2010-03-18 17:10:47 +0000
commitee12cdd0aa3e3e1b85e01bc31d51c47b35ef332f (patch)
tree54b0a8fd89038f3ea78b2c7e8df09bbdbe40baad
parentba714fe9b24642659a9ea1d788cdc9c00bbc2501 (diff)
downloadqpid-python-ee12cdd0aa3e3e1b85e01bc31d51c47b35ef332f.tar.gz
revert to original schema encoding
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/qmf-devel0.7a@924898 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/cpp/include/qpid/management/ManagementEvent.h3
-rw-r--r--qpid/cpp/include/qpid/management/ManagementObject.h2
-rw-r--r--qpid/cpp/managementgen/qmfgen/templates/Class.cpp50
-rw-r--r--qpid/cpp/managementgen/qmfgen/templates/Class.h2
-rw-r--r--qpid/cpp/managementgen/qmfgen/templates/Event.cpp32
-rw-r--r--qpid/cpp/managementgen/qmfgen/templates/Event.h2
-rw-r--r--qpid/cpp/src/qpid/agent/ManagementAgentImpl.cpp20
-rw-r--r--qpid/cpp/src/qpid/management/ManagementAgent.cpp12
8 files changed, 60 insertions, 63 deletions
diff --git a/qpid/cpp/include/qpid/management/ManagementEvent.h b/qpid/cpp/include/qpid/management/ManagementEvent.h
index d6c0b7078c..ce2f28b943 100644
--- a/qpid/cpp/include/qpid/management/ManagementEvent.h
+++ b/qpid/cpp/include/qpid/management/ManagementEvent.h
@@ -23,7 +23,6 @@
*/
#include "qpid/management/ManagementObject.h"
-//#include <qpid/framing/Buffer.h>
#include "qpid/messaging/MapContent.h"
#include "qpid/messaging/MapView.h"
#include <string>
@@ -37,7 +36,7 @@ class ManagementEvent : public ManagementItem {
public:
static const uint8_t MD5_LEN = 16;
//typedef void (*writeSchemaCall_t)(qpid::framing::Buffer&);
- typedef void (*writeSchemaCall_t)(qpid::messaging::VariantMap&);
+ typedef void (*writeSchemaCall_t)(std::string&);
virtual ~ManagementEvent() {}
virtual writeSchemaCall_t getWriteSchemaCall(void) = 0;
diff --git a/qpid/cpp/include/qpid/management/ManagementObject.h b/qpid/cpp/include/qpid/management/ManagementObject.h
index 412d4a89ef..35dafc1156 100644
--- a/qpid/cpp/include/qpid/management/ManagementObject.h
+++ b/qpid/cpp/include/qpid/management/ManagementObject.h
@@ -151,7 +151,7 @@ protected:
QPID_COMMON_EXTERN static const uint8_t MD5_LEN = 16;
QPID_COMMON_EXTERN static int maxThreads;
//typedef void (*writeSchemaCall_t) (qpid::framing::Buffer&);
- typedef void (*writeSchemaCall_t) (qpid::messaging::VariantMap&);
+ typedef void (*writeSchemaCall_t) (std::string&);
ManagementObject(Manageable* _core) :
createTime(uint64_t(qpid::sys::Duration(qpid::sys::now()))),
diff --git a/qpid/cpp/managementgen/qmfgen/templates/Class.cpp b/qpid/cpp/managementgen/qmfgen/templates/Class.cpp
index 19142a3238..84a6e0b450 100644
--- a/qpid/cpp/managementgen/qmfgen/templates/Class.cpp
+++ b/qpid/cpp/managementgen/qmfgen/templates/Class.cpp
@@ -22,6 +22,8 @@
#include "qpid/log/Statement.h"
#include "qpid/management/Manageable.h"
+#include "qpid/framing/FieldTable.h"
+#include "qpid/framing/Buffer.h"
#include "qpid//*MGEN:Class.AgentHeaderLocation*//ManagementAgent.h"
#include "/*MGEN:Class.NameCap*/.h"
/*MGEN:Class.MethodArgIncludes*/
@@ -89,37 +91,33 @@ void /*MGEN:Class.NameCap*/::registerSelf(ManagementAgent* agent)
agent->registerClass(packageName, className, md5Sum, writeSchema);
}
-void /*MGEN:Class.NameCap*/::writeSchema (::qpid::messaging::VariantMap& map)
+void /*MGEN:Class.NameCap*/::writeSchema (std::string& schema)
{
- ::qpid::messaging::Variant::Map _sid;
- ::qpid::messaging::Variant::Map _props;
- ::qpid::messaging::Variant::Map _stats;
- ::qpid::messaging::Variant::Map _methods;
-
- _sid["_type"] = CLASS_KIND_TABLE;
- _sid["_package_name"] = packageName;
- _sid["_class_name"] = className;
- _sid["_hash_str"] = std::string((const char *)md5Sum, sizeof(md5Sum));
- map["_schema_id"] = _sid;
-
- map["_config_ct"] = /*MGEN:Class.ConfigCount*/;
- map["_inst_ct"] = /*MGEN:Class.InstCount*/;
- map["_method_ct"] = /*MGEN:Class.MethodCount*/;
+#define BUFSIZE 65536
+ char _msgChars[BUFSIZE];
+ ::qpid::framing::Buffer buf(_msgChars, BUFSIZE);
+ ::qpid::framing::FieldTable ft;
+
+ // Schema class header:
+ buf.putOctet (CLASS_KIND_TABLE);
+ buf.putShortString (packageName); // Package Name
+ buf.putShortString (className); // Class Name
+ buf.putBin128 (md5Sum); // Schema Hash
+ buf.putShort (/*MGEN:Class.ConfigCount*/); // Config Element Count
+ buf.putShort (/*MGEN:Class.InstCount*/); // Inst Element Count
+ buf.putShort (/*MGEN:Class.MethodCount*/); // Method Count
// Properties
-/*MGEN:Class.PropertySchemaMap*/
- if (!_props.empty())
- map["_properties"] = _props;
-
+/*MGEN:Class.PropertySchema*/
// Statistics
-/*MGEN:Class.StatisticSchemaMap*/
- if (!_stats.empty())
- map["_statistics"] = _stats;
-
+/*MGEN:Class.StatisticSchema*/
// Methods
-/*MGEN:Class.MethodSchemaMap*/
- if (!_methods.empty())
- map["_methods"] = _methods;
+/*MGEN:Class.MethodSchema*/
+ {
+ uint32_t _len = buf.getPosition();
+ buf.reset();
+ buf.getRawData(schema, _len);
+ }
}
/*MGEN:IF(Class.ExistPerThreadStats)*/
diff --git a/qpid/cpp/managementgen/qmfgen/templates/Class.h b/qpid/cpp/managementgen/qmfgen/templates/Class.h
index 54096437e1..2f057dc9d2 100644
--- a/qpid/cpp/managementgen/qmfgen/templates/Class.h
+++ b/qpid/cpp/managementgen/qmfgen/templates/Class.h
@@ -74,7 +74,7 @@ class /*MGEN:Class.NameCap*/ : public ::qpid::management::ManagementObject
void aggregatePerThreadStats(struct PerThreadStats*) const;
/*MGEN:ENDIF*/
public:
- static void writeSchema(::qpid::messaging::VariantMap& map);
+ static void writeSchema(std::string& schema);
void mapEncodeValues(::qpid::messaging::VariantMap& map,
bool includeProperties=true,
bool includeStatistics=true);
diff --git a/qpid/cpp/managementgen/qmfgen/templates/Event.cpp b/qpid/cpp/managementgen/qmfgen/templates/Event.cpp
index 67eac4262b..0289d678ef 100644
--- a/qpid/cpp/managementgen/qmfgen/templates/Event.cpp
+++ b/qpid/cpp/managementgen/qmfgen/templates/Event.cpp
@@ -22,6 +22,8 @@
#include "qpid/log/Statement.h"
#include "qpid/management/Manageable.h"
+#include "qpid/framing/FieldTable.h"
+#include "qpid/framing/Buffer.h"
#include "qpid//*MGEN:Event.AgentHeaderLocation*//ManagementAgent.h"
#include "Event/*MGEN:Event.NameCap*/.h"
@@ -54,24 +56,28 @@ void Event/*MGEN:Event.NameCap*/::registerSelf(ManagementAgent* agent)
agent->registerEvent(packageName, eventName, md5Sum, writeSchema);
}
-void Event/*MGEN:Event.NameCap*/::writeSchema (::qpid::messaging::VariantMap& map)
+void Event/*MGEN:Event.NameCap*/::writeSchema (std::string& schema)
{
- ::qpid::messaging::Variant::Map _sid;
- ::qpid::messaging::Variant::Map _args;
+#define BUFSIZE 65536
+ char _msgChars[BUFSIZE];
+ ::qpid::framing::Buffer buf(_msgChars, BUFSIZE);
+ ::qpid::framing::FieldTable ft;
// Schema class header:
-
- _sid["_type"] = CLASS_KIND_EVENT;
- _sid["_package_name"] = packageName;
- _sid["_class_name"] = eventName;
- _sid["_hash_str"] = std::string((const char *)md5Sum, sizeof(md5Sum));
- map["_schema_id"] = _sid;
-
+ buf.putOctet (CLASS_KIND_EVENT);
+ buf.putShortString (packageName); // Package Name
+ buf.putShortString (eventName); // Event Name
+ buf.putBin128 (md5Sum); // Schema Hash
+ buf.putOctet (0); // No Superclass
+ buf.putShort (/*MGEN:Event.ArgCount*/); // Argument Count
// Arguments
-/*MGEN:Event.ArgSchemaMap*/
- if (!_args.empty())
- map["_arguments"] = _args;
+/*MGEN:Event.ArgSchema*/
+ {
+ uint32_t _len = buf.getPosition();
+ buf.reset();
+ buf.getRawData(schema, _len);
+ }
}
void Event/*MGEN:Event.NameCap*/::mapEncode(::qpid::messaging::VariantMap& map) const
diff --git a/qpid/cpp/managementgen/qmfgen/templates/Event.h b/qpid/cpp/managementgen/qmfgen/templates/Event.h
index a29605adba..93def35ece 100644
--- a/qpid/cpp/managementgen/qmfgen/templates/Event.h
+++ b/qpid/cpp/managementgen/qmfgen/templates/Event.h
@@ -33,7 +33,7 @@ namespace qmf {
class Event/*MGEN:Event.NameCap*/ : public ::qpid::management::ManagementEvent
{
private:
- static void writeSchema (::qpid::messaging::VariantMap& map);
+ static void writeSchema (std::string& schema);
static std::string packageName;
static std::string eventName;
static uint8_t md5Sum[MD5_LEN];
diff --git a/qpid/cpp/src/qpid/agent/ManagementAgentImpl.cpp b/qpid/cpp/src/qpid/agent/ManagementAgentImpl.cpp
index c4cf841148..a99f24c2f1 100644
--- a/qpid/cpp/src/qpid/agent/ManagementAgentImpl.cpp
+++ b/qpid/cpp/src/qpid/agent/ManagementAgentImpl.cpp
@@ -446,19 +446,17 @@ void ManagementAgentImpl::handleSchemaRequest(Buffer& inBuffer, uint32_t sequenc
ClassMap::iterator cIter = cMap.find(key);
if (cIter != cMap.end()) {
SchemaClass& schema = cIter->second;
- ::qpid::messaging::Message m;
- ::qpid::messaging::MapContent content(m);
+ Buffer outBuffer(outputBuffer, MA_BUFFER_SIZE);
+ uint32_t outLen;
+ std::string body;
- schema.writeSchemaCall(content.asMap());
-
- ::qpid::messaging::VariantMap headers;
- headers["method"] = "response";
- headers["qmf.opcode"] = "_query_response";
- headers["qmf.content"] = "_schema_class";
- headers["qmf.agent"] = name_address;
+ encodeHeader(outBuffer, 's', sequence);
+ schema.writeSchemaCall(body);
+ outBuffer.putRawData(body);
+ outLen = MA_BUFFER_SIZE - outBuffer.available();
+ outBuffer.reset();
+ connThreadBody.sendBuffer(outBuffer, outLen, "qpid.management", "broker");
- content.encode();
- connThreadBody.sendBuffer(m.getContent(), sequence, headers, "qpid.management", "broker");
QPID_LOG(trace, "SENT SchemaInd: package=" << packageName << " class=" << key.name);
}
}
diff --git a/qpid/cpp/src/qpid/management/ManagementAgent.cpp b/qpid/cpp/src/qpid/management/ManagementAgent.cpp
index 2d0ac2d031..946a1dd2bc 100644
--- a/qpid/cpp/src/qpid/management/ManagementAgent.cpp
+++ b/qpid/cpp/src/qpid/management/ManagementAgent.cpp
@@ -960,14 +960,10 @@ void ManagementAgent::SchemaClass::appendSchema(Buffer& buf)
// is from a remote management agent, send the stored schema information.
if (writeSchemaCall != 0) {
- qpid::messaging::Message m;
- qpid::messaging::MapContent content(m);
-
- writeSchemaCall(content.asMap());
- content.encode();
- buf.putRawData(m.getContent());
- }
- else
+ std::string schema;
+ writeSchemaCall(schema);
+ buf.putRawData(schema);
+ } else
buf.putRawData(reinterpret_cast<uint8_t*>(&data[0]), data.size());
}