summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/management/ManagementBroker.cpp
diff options
context:
space:
mode:
authorTed Ross <tross@apache.org>2008-11-26 20:48:44 +0000
committerTed Ross <tross@apache.org>2008-11-26 20:48:44 +0000
commit2b734ff4fcdc50570cd2968d058825d854d1a074 (patch)
treec4b06ad20d2174ad97eb1575efa305587414079f /cpp/src/qpid/management/ManagementBroker.cpp
parentde3ee556236aaa9d46509eb78c9c3f244fc0f90b (diff)
downloadqpid-python-2b734ff4fcdc50570cd2968d058825d854d1a074.tar.gz
Bug fixes for QMF:
ManagementAgentImpl - don't send messages if broker is not connected. ManagementBroker - agents could be assigned the same agentBank - don't send console-attached for attached agents - handle multiple qmf messages in an AMQP body schema.py - Don't use the FieldTable copy-constructor, use .clear() git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@720973 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/management/ManagementBroker.cpp')
-rw-r--r--cpp/src/qpid/management/ManagementBroker.cpp45
1 files changed, 25 insertions, 20 deletions
diff --git a/cpp/src/qpid/management/ManagementBroker.cpp b/cpp/src/qpid/management/ManagementBroker.cpp
index b800d62fb6..e9610ca282 100644
--- a/cpp/src/qpid/management/ManagementBroker.cpp
+++ b/cpp/src/qpid/management/ManagementBroker.cpp
@@ -251,21 +251,23 @@ void ManagementBroker::Periodic::fire ()
broker.periodicProcessing ();
}
-void ManagementBroker::clientAdded (const std::string& /*routingKey*/)
+void ManagementBroker::clientAdded (const std::string& routingKey)
{
- Mutex::ScopedLock lock (userLock);
+ if (routingKey.find("console") != 0)
+ return;
clientWasAdded = true;
for (RemoteAgentMap::iterator aIter = remoteAgents.begin();
aIter != remoteAgents.end();
aIter++) {
- Buffer outBuffer (outputBuffer, MA_BUFFER_SIZE);
+ char localBuffer[16];
+ Buffer outBuffer(localBuffer, 16);
uint32_t outLen;
- encodeHeader (outBuffer, 'x');
- outLen = MA_BUFFER_SIZE - outBuffer.available ();
- outBuffer.reset ();
- sendBuffer (outBuffer, outLen, dExchange, aIter->second->routingKey);
+ encodeHeader(outBuffer, 'x');
+ outLen = outBuffer.getPosition();
+ outBuffer.reset();
+ sendBuffer(outBuffer, outLen, dExchange, aIter->second->routingKey);
}
}
@@ -716,7 +718,7 @@ bool ManagementBroker::bankInUse (uint32_t bank)
for (RemoteAgentMap::iterator aIter = remoteAgents.begin();
aIter != remoteAgents.end();
aIter++)
- if (aIter->second->brokerBank == bank)
+ if (aIter->second->agentBank == bank)
return true;
return false;
}
@@ -959,21 +961,24 @@ void ManagementBroker::dispatchAgentCommandLH(Message& msg)
}
msg.encodeContent(inBuffer);
+ uint32_t bufferLen = inBuffer.getPosition();
inBuffer.reset();
- if (!checkHeader(inBuffer, &opcode, &sequence))
- return;
+ while (inBuffer.getPosition() < bufferLen) {
+ if (!checkHeader(inBuffer, &opcode, &sequence))
+ return;
- if (opcode == 'B') handleBrokerRequestLH (inBuffer, replyToKey, sequence);
- else if (opcode == 'P') handlePackageQueryLH (inBuffer, replyToKey, sequence);
- else if (opcode == 'p') handlePackageIndLH (inBuffer, replyToKey, sequence);
- else if (opcode == 'Q') handleClassQueryLH (inBuffer, replyToKey, sequence);
- else if (opcode == 'q') handleClassIndLH (inBuffer, replyToKey, sequence);
- else if (opcode == 'S') handleSchemaRequestLH (inBuffer, replyToKey, sequence);
- else if (opcode == 's') handleSchemaResponseLH (inBuffer, replyToKey, sequence);
- else if (opcode == 'A') handleAttachRequestLH (inBuffer, replyToKey, sequence, msg.getPublisher());
- else if (opcode == 'G') handleGetQueryLH (inBuffer, replyToKey, sequence);
- else if (opcode == 'M') handleMethodRequestLH (inBuffer, replyToKey, sequence, msg.getPublisher());
+ if (opcode == 'B') handleBrokerRequestLH (inBuffer, replyToKey, sequence);
+ else if (opcode == 'P') handlePackageQueryLH (inBuffer, replyToKey, sequence);
+ else if (opcode == 'p') handlePackageIndLH (inBuffer, replyToKey, sequence);
+ else if (opcode == 'Q') handleClassQueryLH (inBuffer, replyToKey, sequence);
+ else if (opcode == 'q') handleClassIndLH (inBuffer, replyToKey, sequence);
+ else if (opcode == 'S') handleSchemaRequestLH (inBuffer, replyToKey, sequence);
+ else if (opcode == 's') handleSchemaResponseLH (inBuffer, replyToKey, sequence);
+ else if (opcode == 'A') handleAttachRequestLH (inBuffer, replyToKey, sequence, msg.getPublisher());
+ else if (opcode == 'G') handleGetQueryLH (inBuffer, replyToKey, sequence);
+ else if (opcode == 'M') handleMethodRequestLH (inBuffer, replyToKey, sequence, msg.getPublisher());
+ }
}
ManagementBroker::PackageMap::iterator ManagementBroker::findOrAddPackageLH(string name)