Author: tross
Date: Wed Jun 4 11:39:47 2008
New Revision: 663338
URL: http://svn.apache.org/viewvc?rev=663338&view=rev
Log:
Management clean-up. Made the management broker more defensive with regard to
received messages. Default and management exchanges now have 'durable' object
IDs.
Modified:
incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Exchange.cpp
incubator/qpid/trunk/qpid/cpp/src/qpid/management/ManagementBroker.cpp
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Exchange.cpp
URL:
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Exchange.cpp?rev=663338&r1=663337&r2=663338&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Exchange.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Exchange.cpp Wed Jun 4
11:39:47 2008
@@ -57,8 +57,14 @@
{
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);
+ }
}
}
}
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/management/ManagementBroker.cpp
URL:
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/management/ManagementBroker.cpp?rev=663338&r1=663337&r2=663338&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/management/ManagementBroker.cpp
(original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/management/ManagementBroker.cpp Wed
Jun 4 11:39:47 2008
@@ -333,7 +333,7 @@
}
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::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::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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
}
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::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;