diff options
author | Kenneth Anthony Giusti <kgiusti@apache.org> | 2010-03-18 17:10:47 +0000 |
---|---|---|
committer | Kenneth Anthony Giusti <kgiusti@apache.org> | 2010-03-18 17:10:47 +0000 |
commit | ee12cdd0aa3e3e1b85e01bc31d51c47b35ef332f (patch) | |
tree | 54b0a8fd89038f3ea78b2c7e8df09bbdbe40baad | |
parent | ba714fe9b24642659a9ea1d788cdc9c00bbc2501 (diff) | |
download | qpid-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.h | 3 | ||||
-rw-r--r-- | qpid/cpp/include/qpid/management/ManagementObject.h | 2 | ||||
-rw-r--r-- | qpid/cpp/managementgen/qmfgen/templates/Class.cpp | 50 | ||||
-rw-r--r-- | qpid/cpp/managementgen/qmfgen/templates/Class.h | 2 | ||||
-rw-r--r-- | qpid/cpp/managementgen/qmfgen/templates/Event.cpp | 32 | ||||
-rw-r--r-- | qpid/cpp/managementgen/qmfgen/templates/Event.h | 2 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/agent/ManagementAgentImpl.cpp | 20 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/management/ManagementAgent.cpp | 12 |
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()); } |