diff options
| author | Ted Ross <tross@apache.org> | 2008-11-26 20:48:44 +0000 |
|---|---|---|
| committer | Ted Ross <tross@apache.org> | 2008-11-26 20:48:44 +0000 |
| commit | 2b734ff4fcdc50570cd2968d058825d854d1a074 (patch) | |
| tree | c4b06ad20d2174ad97eb1575efa305587414079f /cpp/src | |
| parent | de3ee556236aaa9d46509eb78c9c3f244fc0f90b (diff) | |
| download | qpid-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')
| -rw-r--r-- | cpp/src/qpid/agent/ManagementAgentImpl.cpp | 20 | ||||
| -rw-r--r-- | cpp/src/qpid/management/ManagementBroker.cpp | 45 |
2 files changed, 36 insertions, 29 deletions
diff --git a/cpp/src/qpid/agent/ManagementAgentImpl.cpp b/cpp/src/qpid/agent/ManagementAgentImpl.cpp index 1f7d2569fb..050f29ac7b 100644 --- a/cpp/src/qpid/agent/ManagementAgentImpl.cpp +++ b/cpp/src/qpid/agent/ManagementAgentImpl.cpp @@ -262,7 +262,7 @@ void ManagementAgentImpl::startProtocol() systemId.encode (buffer); buffer.putLong(requestedBrokerBank); buffer.putLong(requestedAgentBank); - uint32_t length = 512 - buffer.available(); + uint32_t length = buffer.getPosition(); buffer.reset(); connThreadBody.sendBuffer(buffer, length, "qpid.management", "broker"); if (debugLevel >= DEBUG_PROTO) { @@ -607,15 +607,17 @@ ManagementAgentImpl::PackageMap::iterator ManagementAgentImpl::findOrAddPackage( pair<PackageMap::iterator, bool> result = packages.insert(pair<string, ClassMap>(name, ClassMap())); - // Publish a package-indication message - Buffer outBuffer(outputBuffer, MA_BUFFER_SIZE); - uint32_t outLen; + if (connected) { + // Publish a package-indication message + Buffer outBuffer(outputBuffer, MA_BUFFER_SIZE); + uint32_t outLen; - encodeHeader(outBuffer, 'p'); - encodePackageIndication(outBuffer, result.first); - outLen = MA_BUFFER_SIZE - outBuffer.available(); - outBuffer.reset(); - connThreadBody.sendBuffer(outBuffer, outLen, "qpid.management", "schema.package"); + encodeHeader(outBuffer, 'p'); + encodePackageIndication(outBuffer, result.first); + outLen = MA_BUFFER_SIZE - outBuffer.available(); + outBuffer.reset(); + connThreadBody.sendBuffer(outBuffer, outLen, "qpid.management", "schema.package"); + } return result.first; } 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) |
