diff options
author | Ted Ross <tross@apache.org> | 2008-06-04 18:39:47 +0000 |
---|---|---|
committer | Ted Ross <tross@apache.org> | 2008-06-04 18:39:47 +0000 |
commit | 65cec47fe8a346fa32b8463196875b94984128aa (patch) | |
tree | bac639e6b7bd7b7e1267c73dbbfe46f973348747 /cpp/src | |
parent | e5bd15f71e8919f5ad5ef3d8b35043c267cc3dae (diff) | |
download | qpid-python-65cec47fe8a346fa32b8463196875b94984128aa.tar.gz |
Management clean-up. Made the management broker more defensive with regard to received messages. Default and management exchanges now have 'durable' object IDs.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@663338 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/qpid/broker/Exchange.cpp | 10 | ||||
-rw-r--r-- | cpp/src/qpid/management/ManagementBroker.cpp | 60 |
2 files changed, 45 insertions, 25 deletions
diff --git a/cpp/src/qpid/broker/Exchange.cpp b/cpp/src/qpid/broker/Exchange.cpp index 0d9ffb7122..30a93e338c 100644 --- a/cpp/src/qpid/broker/Exchange.cpp +++ b/cpp/src/qpid/broker/Exchange.cpp @@ -57,8 +57,14 @@ Exchange::Exchange(const string& _name, bool _durable, const qpid::framing::Fiel { mgmtExchange = management::Exchange::shared_ptr (new management::Exchange (this, parent, _name, durable)); - if (!durable) - agent->addObject (mgmtExchange); + if (!durable) { + if (name == "") + agent->addObject (mgmtExchange, 4, 1); // Special default exchange ID + else if (name == "qpid.management") + agent->addObject (mgmtExchange, 5, 1); // Special management exchange ID + else + agent->addObject (mgmtExchange); + } } } } diff --git a/cpp/src/qpid/management/ManagementBroker.cpp b/cpp/src/qpid/management/ManagementBroker.cpp index a2802cf932..2f30aa4c0b 100644 --- a/cpp/src/qpid/management/ManagementBroker.cpp +++ b/cpp/src/qpid/management/ManagementBroker.cpp @@ -333,7 +333,7 @@ void ManagementBroker::PeriodicProcessing (void) } void ManagementBroker::sendCommandComplete (string replyToKey, uint32_t sequence, - uint32_t code, string text) + uint32_t code, string text) { Buffer outBuffer (outputBuffer, MA_BUFFER_SIZE); uint32_t outLen; @@ -347,8 +347,8 @@ void ManagementBroker::sendCommandComplete (string replyToKey, uint32_t sequence } void ManagementBroker::dispatchCommand (Deliverable& deliverable, - const string& routingKey, - const FieldTable* /*args*/) + const string& routingKey, + const FieldTable* /*args*/) { Mutex::ScopedLock lock (userLock); Message& msg = ((DeliverableMessage&) deliverable).getMessage (); @@ -368,8 +368,8 @@ void ManagementBroker::dispatchCommand (Deliverable& deliverable, } void ManagementBroker::dispatchMethodLH (Message& msg, - const string& routingKey, - size_t first) + const string& routingKey, + size_t first) { size_t pos, start = first; uint32_t contentSize; @@ -411,6 +411,12 @@ void ManagementBroker::dispatchMethodLH (Message& msg, uint32_t outLen, sequence; uint8_t opcode; + if (msg.encodedSize() > MA_BUFFER_SIZE) { + QPID_LOG(debug, "ManagementBroker::dispatchMethodLH: Message too large: " << + msg.encodedSize()); + return; + } + msg.encodeContent (inBuffer); inBuffer.reset (); @@ -426,8 +432,8 @@ void ManagementBroker::dispatchMethodLH (Message& msg, return; } - uint64_t objId = inBuffer.getLongLong (); - string replyToKey; + uint64_t objId = inBuffer.getLongLong (); + string replyToKey; const framing::MessageProperties* p = msg.getFrames().getHeaders()->get<framing::MessageProperties>(); @@ -492,12 +498,8 @@ void ManagementBroker::handlePackageQueryLH (Buffer&, string replyToKey, uint32_ sendCommandComplete (replyToKey, sequence); } -void ManagementBroker::handlePackageIndLH (Buffer& inBuffer, string /*replyToKey*/, uint32_t /*sequence*/) +void ManagementBroker::handlePackageIndLH (Buffer& /*inBuffer*/, string /*replyToKey*/, uint32_t /*sequence*/) { - std::string packageName; - - inBuffer.getShortString (packageName); - FindOrAddPackage (packageName); } void ManagementBroker::handleClassQueryLH (Buffer& inBuffer, string replyToKey, uint32_t sequence) @@ -570,8 +572,14 @@ void ManagementBroker::handleSchemaRequestLH (Buffer& inBuffer, string replyToKe outBuffer.reset (); SendBuffer (outBuffer, outLen, dExchange, replyToKey); } + else + sendCommandComplete (replyToKey, sequence, 1, "Schema not available"); } + else + sendCommandComplete (replyToKey, sequence, 1, "Class key not found"); } + else + sendCommandComplete (replyToKey, sequence, 1, "Package not found"); } bool ManagementBroker::bankInUse (uint32_t bank) @@ -652,15 +660,15 @@ void ManagementBroker::handleGetQueryLH (Buffer& inBuffer, string replyToKey, ui moveNewObjectsLH(); - ft.decode (inBuffer); - value = ft.get ("_class"); - if (value->empty () || !value->convertsTo<string> ()) + ft.decode(inBuffer); + value = ft.get("_class"); + if (value.get() == 0 || !value->convertsTo<string>()) { // TODO: Send completion with an error code return; } - string className (value->get<string> ()); + string className (value->get<string>()); for (ManagementObjectMap::iterator iter = managementObjects.begin (); iter != managementObjects.end (); @@ -701,6 +709,12 @@ void ManagementBroker::dispatchAgentCommandLH (Message& msg) else return; + if (msg.encodedSize() > MA_BUFFER_SIZE) { + QPID_LOG(debug, "ManagementBroker::dispatchAgentCommandLH: Message too large: " << + msg.encodedSize()); + return; + } + msg.encodeContent (inBuffer); inBuffer.reset (); @@ -712,7 +726,7 @@ void ManagementBroker::dispatchAgentCommandLH (Message& msg) else if (opcode == 'p') handlePackageIndLH (inBuffer, replyToKey, sequence); else if (opcode == 'Q') handleClassQueryLH (inBuffer, replyToKey, sequence); else if (opcode == 'S') handleSchemaRequestLH (inBuffer, replyToKey, sequence); - else if (opcode == 'A') handleAttachRequestLH (inBuffer, replyToKey, sequence); + //else if (opcode == 'A') handleAttachRequestLH (inBuffer, replyToKey, sequence); else if (opcode == 'G') handleGetQueryLH (inBuffer, replyToKey, sequence); } @@ -741,9 +755,9 @@ ManagementBroker::PackageMap::iterator ManagementBroker::FindOrAddPackage (std:: } void ManagementBroker::AddClassLocal (PackageMap::iterator pIter, - string className, - uint8_t* md5Sum, - ManagementObject::writeSchemaCall_t schemaCall) + string className, + uint8_t* md5Sum, + ManagementObject::writeSchemaCall_t schemaCall) { SchemaClassKey key; ClassMap& cMap = pIter->second; @@ -767,14 +781,14 @@ void ManagementBroker::AddClassLocal (PackageMap::iterator pIter, } void ManagementBroker::EncodePackageIndication (Buffer& buf, - PackageMap::iterator pIter) + PackageMap::iterator pIter) { buf.putShortString ((*pIter).first); } void ManagementBroker::EncodeClassIndication (Buffer& buf, - PackageMap::iterator pIter, - ClassMap::iterator cIter) + PackageMap::iterator pIter, + ClassMap::iterator cIter) { SchemaClassKey key = (*cIter).first; |