diff options
| author | Andrew Stitcher <astitcher@apache.org> | 2013-06-19 14:26:11 +0000 |
|---|---|---|
| committer | Andrew Stitcher <astitcher@apache.org> | 2013-06-19 14:26:11 +0000 |
| commit | 67787e15fce5978e1fa4fbdb27fbea4033f28086 (patch) | |
| tree | c63dd491c09cfe2c8dfae091067b8ec9bd65e7ec /qpid/cpp/src | |
| parent | 31e3e8bd8a6377a8cbcf578e268f43aaf8a0855a (diff) | |
| download | qpid-python-67787e15fce5978e1fa4fbdb27fbea4033f28086.tar.gz | |
QPID-4905: Stopped broker::Broker needing to refer to broker::Connection
- Also removed ConnectionToken which didn't add anything over OwnershipToken
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1494640 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/src')
20 files changed, 119 insertions, 93 deletions
diff --git a/qpid/cpp/src/Makefile.am b/qpid/cpp/src/Makefile.am index fce256d171..257be80611 100644 --- a/qpid/cpp/src/Makefile.am +++ b/qpid/cpp/src/Makefile.am @@ -591,11 +591,11 @@ libqpidbroker_la_SOURCES = \ qpid/broker/Connection.h \ qpid/broker/ConnectionHandler.cpp \ qpid/broker/ConnectionHandler.h \ - qpid/broker/ConnectionToken.h \ qpid/broker/Consumer.h \ qpid/broker/Credit.h \ qpid/broker/Credit.cpp \ qpid/broker/ConsumerFactory.h \ + qpid/broker/ConnectionIdentity.h \ qpid/broker/ConnectionObserver.h \ qpid/broker/ConnectionObservers.h \ qpid/broker/ConfigurationObserver.h \ diff --git a/qpid/cpp/src/qpid/broker/Broker.cpp b/qpid/cpp/src/qpid/broker/Broker.cpp index bcce6e6ca4..8cdfd42f02 100644 --- a/qpid/cpp/src/qpid/broker/Broker.cpp +++ b/qpid/cpp/src/qpid/broker/Broker.cpp @@ -22,7 +22,7 @@ #include "qpid/broker/Broker.h" #include "qpid/broker/AclModule.h" -#include "qpid/broker/Connection.h" +#include "qpid/broker/ConnectionIdentity.h" #include "qpid/broker/DirectExchange.h" #include "qpid/broker/FanOutExchange.h" #include "qpid/broker/HeadersExchange.h" @@ -101,7 +101,7 @@ using qpid::management::ManagementAgent; using qpid::management::ManagementObject; using qpid::management::Manageable; using qpid::management::Args; -using qpid::management::getManagementExecutionContext; +using qpid::management::getCurrentPublisher; using qpid::types::Variant; using std::string; using std::make_pair; @@ -533,33 +533,33 @@ Manageable::status_t Broker::ManagementMethod (uint32_t methodId, case _qmf::Broker::METHOD_CREATE : { _qmf::ArgsBrokerCreate& a = dynamic_cast<_qmf::ArgsBrokerCreate&>(args); - createObject(a.i_type, a.i_name, a.i_properties, a.i_strict, getManagementExecutionContext()); + createObject(a.i_type, a.i_name, a.i_properties, a.i_strict, getCurrentPublisher()); status = Manageable::STATUS_OK; break; } case _qmf::Broker::METHOD_DELETE : { _qmf::ArgsBrokerDelete& a = dynamic_cast<_qmf::ArgsBrokerDelete&>(args); - deleteObject(a.i_type, a.i_name, a.i_options, getManagementExecutionContext()); + deleteObject(a.i_type, a.i_name, a.i_options, getCurrentPublisher()); status = Manageable::STATUS_OK; break; } case _qmf::Broker::METHOD_QUERY : { _qmf::ArgsBrokerQuery& a = dynamic_cast<_qmf::ArgsBrokerQuery&>(args); - status = queryObject(a.i_type, a.i_name, a.o_results, getManagementExecutionContext()); + status = queryObject(a.i_type, a.i_name, a.o_results, getCurrentPublisher()); break; } case _qmf::Broker::METHOD_GETTIMESTAMPCONFIG: { _qmf::ArgsBrokerGetTimestampConfig& a = dynamic_cast<_qmf::ArgsBrokerGetTimestampConfig&>(args); - status = getTimestampConfig(a.o_receive, getManagementExecutionContext()); + status = getTimestampConfig(a.o_receive, getCurrentPublisher()); break; } case _qmf::Broker::METHOD_SETTIMESTAMPCONFIG: { _qmf::ArgsBrokerSetTimestampConfig& a = dynamic_cast<_qmf::ArgsBrokerSetTimestampConfig&>(args); - status = setTimestampConfig(a.i_receive, getManagementExecutionContext()); + status = setTimestampConfig(a.i_receive, getCurrentPublisher()); break; } @@ -707,7 +707,7 @@ struct InvalidParameter : public qpid::Exception }; void Broker::createObject(const std::string& type, const std::string& name, - const Variant::Map& properties, bool /*strict*/, const Connection* context) + const Variant::Map& properties, bool /*strict*/, const ConnectionIdentity* context) { std::string userId; std::string connectionId; @@ -898,7 +898,7 @@ void Broker::createObject(const std::string& type, const std::string& name, } void Broker::deleteObject(const std::string& type, const std::string& name, - const Variant::Map& options, const Connection* context) + const Variant::Map& options, const ConnectionIdentity* context) { std::string userId; std::string connectionId; @@ -952,7 +952,7 @@ void Broker::checkDeleteQueue(Queue::shared_ptr queue, bool ifUnused, bool ifEmp Manageable::status_t Broker::queryObject(const std::string& type, const std::string& name, Variant::Map& results, - const Connection* context) + const ConnectionIdentity* context) { std::string userId; std::string connectionId; @@ -994,7 +994,7 @@ Manageable::status_t Broker::queryQueue( const std::string& name, } Manageable::status_t Broker::getTimestampConfig(bool& receive, - const Connection* context) + const ConnectionIdentity* context) { std::string name; // none needed for broker std::string userId = context->getUserId(); @@ -1006,7 +1006,7 @@ Manageable::status_t Broker::getTimestampConfig(bool& receive, } Manageable::status_t Broker::setTimestampConfig(const bool receive, - const Connection* context) + const ConnectionIdentity* context) { std::string name; // none needed for broker std::string userId = context->getUserId(); diff --git a/qpid/cpp/src/qpid/broker/Broker.h b/qpid/cpp/src/qpid/broker/Broker.h index 11deb6f43a..20e0c16e70 100644 --- a/qpid/cpp/src/qpid/broker/Broker.h +++ b/qpid/cpp/src/qpid/broker/Broker.h @@ -50,7 +50,6 @@ #include <vector> namespace qpid { - namespace sys { class TransportAcceptor; class TransportConnector; @@ -63,7 +62,6 @@ struct Url; namespace broker { class AclModule; -class Connection; class ExpiryPolicy; class Message; struct QueueSettings; @@ -143,7 +141,7 @@ class Broker : public sys::Runnable, public Plugin::Target, {} }; typedef std::map<std::string, TransportInfo > TransportMap; - + void declareStandardExchange(const std::string& name, const std::string& type); void setStore (); void setLogLevel(const std::string& level); @@ -151,20 +149,20 @@ class Broker : public sys::Runnable, public Plugin::Target, void setLogHiresTimestamp(bool enabled); bool getLogHiresTimestamp(); void createObject(const std::string& type, const std::string& name, - const qpid::types::Variant::Map& properties, bool strict, const Connection* context); + const qpid::types::Variant::Map& properties, bool strict, const ConnectionIdentity* context); void deleteObject(const std::string& type, const std::string& name, - const qpid::types::Variant::Map& options, const Connection* context); + const qpid::types::Variant::Map& options, const ConnectionIdentity* context); void checkDeleteQueue(boost::shared_ptr<Queue> queue, bool ifUnused, bool ifEmpty); Manageable::status_t queryObject(const std::string& type, const std::string& name, - qpid::types::Variant::Map& results, const Connection* context); + qpid::types::Variant::Map& results, const ConnectionIdentity* context); Manageable::status_t queryQueue( const std::string& name, const std::string& userId, const std::string& connectionId, qpid::types::Variant::Map& results); Manageable::status_t getTimestampConfig(bool& receive, - const Connection* context); + const ConnectionIdentity* context); Manageable::status_t setTimestampConfig(const bool receive, - const Connection* context); + const ConnectionIdentity* context); Manageable::status_t queueRedirect(const std::string& srcQueue, const std::string& tgtQueue); void queueRedirectDestroy(boost::shared_ptr<Queue> srcQ, boost::shared_ptr<Queue> tgtQ, bool moveMsgs); boost::shared_ptr<sys::Poller> poller; diff --git a/qpid/cpp/src/qpid/broker/Connection.h b/qpid/cpp/src/qpid/broker/Connection.h index d2bc22cbe9..0f94a32fbf 100644 --- a/qpid/cpp/src/qpid/broker/Connection.h +++ b/qpid/cpp/src/qpid/broker/Connection.h @@ -30,7 +30,8 @@ #include "qpid/broker/BrokerImportExport.h" #include "qpid/broker/ConnectionHandler.h" -#include "qpid/broker/ConnectionToken.h" +#include "qpid/broker/ConnectionIdentity.h" +#include "qpid/broker/OwnershipToken.h" #include "qpid/management/Manageable.h" #include "qpid/sys/AggregateOutput.h" #include "qpid/sys/ConnectionInputHandler.h" @@ -63,8 +64,8 @@ class SecureConnection; class SessionHandler; struct ConnectionTimeoutTask; -class Connection : public sys::ConnectionInputHandler, - public ConnectionToken, public management::Manageable, +class Connection : public sys::ConnectionInputHandler, public ConnectionIdentity, + public OwnershipToken, public management::Manageable, public RefCounted { public: @@ -76,9 +77,11 @@ class Connection : public sys::ConnectionInputHandler, void setHeartbeat(uint16_t hb) { heartbeat = hb; } void setHeartbeatMax(uint16_t hbm) { heartbeatmax = hbm; } - const std::string& getUserId() const { return userId; } - void setUrl(const std::string& _url) { url = _url; } + + const OwnershipToken* getOwnership() const { return this; }; + const management::ObjectId getObjectId() const { return GetManagementObject()->getObjectId(); }; + const std::string& getUserId() const { return userId; } const std::string& getUrl() const { return url; } void setUserProxyAuth(const bool b); diff --git a/qpid/cpp/src/qpid/broker/ConnectionToken.h b/qpid/cpp/src/qpid/broker/ConnectionIdentity.h index 9b40383c80..fdd8d36842 100644 --- a/qpid/cpp/src/qpid/broker/ConnectionToken.h +++ b/qpid/cpp/src/qpid/broker/ConnectionIdentity.h @@ -1,3 +1,6 @@ +#ifndef QPID_BROKER_CONNECTIONIDENTITY_H +#define QPID_BROKER_CONNECTIONIDENTITY_H + /* * * Licensed to the Apache Software Foundation (ASF) under one @@ -7,9 +10,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -18,23 +21,28 @@ * under the License. * */ -#ifndef _ConnectionToken_ -#define _ConnectionToken_ -#include "qpid/broker/OwnershipToken.h" +#include <string> + namespace qpid { - namespace broker { - /** - * An empty interface allowing opaque implementations of some - * form of token to identify a connection. - */ - class ConnectionToken : public OwnershipToken { - public: - virtual bool isLocal(const ConnectionToken* t) const { return this == t; } - virtual ~ConnectionToken(){} - }; - } + +namespace management { +class ObjectId; } +namespace broker { + +class OwnershipToken; + +// Interface used to hold Connection authentication and object details for use when authenticating +// publihed management requests. +class ConnectionIdentity { +public: + virtual const OwnershipToken* getOwnership() const = 0; + virtual const management::ObjectId getObjectId() const = 0; + virtual const std::string& getUserId() const = 0; + virtual const std::string& getUrl() const = 0; +}; -#endif +}} +#endif // QPID_BROKER_CONNECTIONIDENTITY_H diff --git a/qpid/cpp/src/qpid/broker/Message.cpp b/qpid/cpp/src/qpid/broker/Message.cpp index c14f534826..1d901025b6 100644 --- a/qpid/cpp/src/qpid/broker/Message.cpp +++ b/qpid/cpp/src/qpid/broker/Message.cpp @@ -23,6 +23,9 @@ #include "qpid/amqp/CharSequence.h" #include "qpid/amqp/MapHandler.h" +#include "qpid/broker/ConnectionIdentity.h" +#include "qpid/management/ManagementObject.h" +#include "qpid/management/Manageable.h" #include "qpid/StringUtils.h" #include "qpid/log/Statement.h" @@ -199,6 +202,12 @@ uint8_t Message::getPriority() const bool Message::getIsManagementMessage() const { return isManagementMessage; } void Message::setIsManagementMessage(bool b) { isManagementMessage = b; } + +const OwnershipToken* Message::getPublisherOwnership() const { return publisher->getOwnership(); } +const management::ObjectId Message::getPublisherObjectId() const { return publisher->getObjectId(); } +const std::string& Message::getPublisherUserId() const { return publisher->getUserId(); } +const std::string& Message::getPublisherUrl() const { return publisher->getUrl(); } + qpid::framing::SequenceNumber Message::getSequence() const { return sequence; diff --git a/qpid/cpp/src/qpid/broker/Message.h b/qpid/cpp/src/qpid/broker/Message.h index 85926f65fb..41ce2ec1a2 100644 --- a/qpid/cpp/src/qpid/broker/Message.h +++ b/qpid/cpp/src/qpid/broker/Message.h @@ -39,8 +39,15 @@ namespace qpid { namespace amqp { class MapHandler; } + +namespace management { +class ObjectId; +class Manageable; +} + namespace broker { -class ConnectionToken; +class OwnershipToken; +class ConnectionIdentity; enum MessageState { @@ -78,9 +85,12 @@ public: int getDeliveryCount() const { return deliveryCount; } void resetDeliveryCount() { deliveryCount = -1; } - const ConnectionToken* getPublisher() const { return publisher; } - void setPublisher(ConnectionToken* p) { publisher = p; } - + void setPublisher(const ConnectionIdentity& p) { publisher = &p; } + const ConnectionIdentity& getPublisher() const { return *publisher; } + const OwnershipToken* getPublisherOwnership() const; + const management::ObjectId getPublisherObjectId() const; + const std::string& getPublisherUserId() const; + const std::string& getPublisherUrl() const; QPID_BROKER_EXTERN std::string getRoutingKey() const; QPID_BROKER_EXTERN bool isPersistent() const; @@ -138,7 +148,7 @@ public: boost::intrusive_ptr<Encoding> encoding; boost::intrusive_ptr<PersistableMessage> persistentContext; int deliveryCount; - ConnectionToken* publisher; + const ConnectionIdentity* publisher; qpid::sys::AbsTime expiration; boost::intrusive_ptr<ExpiryPolicy> expiryPolicy; uint64_t timestamp; diff --git a/qpid/cpp/src/qpid/broker/OwnershipToken.h b/qpid/cpp/src/qpid/broker/OwnershipToken.h index effd2f5b3c..2fc51408b6 100644 --- a/qpid/cpp/src/qpid/broker/OwnershipToken.h +++ b/qpid/cpp/src/qpid/broker/OwnershipToken.h @@ -24,11 +24,9 @@ namespace qpid { namespace broker { -class ConnectionToken; - class OwnershipToken{ public: - virtual bool isLocal(const ConnectionToken* t) const = 0; + virtual bool isLocal(const OwnershipToken* t) const { return this==t; }; virtual ~OwnershipToken(){} }; diff --git a/qpid/cpp/src/qpid/broker/Queue.cpp b/qpid/cpp/src/qpid/broker/Queue.cpp index 3b68d4117b..cbc5c86dad 100644 --- a/qpid/cpp/src/qpid/broker/Queue.cpp +++ b/qpid/cpp/src/qpid/broker/Queue.cpp @@ -224,7 +224,7 @@ Queue::~Queue() bool isLocalTo(const OwnershipToken* token, const Message& msg) { - return token && token->isLocal(msg.getPublisher()); + return token && token->isLocal(msg.getPublisherOwnership()); } bool Queue::isLocal(const Message& msg) diff --git a/qpid/cpp/src/qpid/broker/SessionAdapter.cpp b/qpid/cpp/src/qpid/broker/SessionAdapter.cpp index 1934c3dc85..f7ca4890b4 100644 --- a/qpid/cpp/src/qpid/broker/SessionAdapter.cpp +++ b/qpid/cpp/src/qpid/broker/SessionAdapter.cpp @@ -234,7 +234,7 @@ void SessionAdapter::QueueHandlerImpl::destroyExclusiveQueues() } } -bool SessionAdapter::QueueHandlerImpl::isLocal(const ConnectionToken* t) const +bool SessionAdapter::QueueHandlerImpl::isLocal(const OwnershipToken* t) const { return session.isLocal(t); } diff --git a/qpid/cpp/src/qpid/broker/SessionAdapter.h b/qpid/cpp/src/qpid/broker/SessionAdapter.h index 3cc745f96c..6c09d68254 100644 --- a/qpid/cpp/src/qpid/broker/SessionAdapter.h +++ b/qpid/cpp/src/qpid/broker/SessionAdapter.h @@ -21,8 +21,6 @@ #include "qpid/broker/HandlerImpl.h" -#include "qpid/broker/ConnectionToken.h" -#include "qpid/broker/OwnershipToken.h" #include "qpid/Exception.h" #include "qpid/framing/AMQP_ServerOperations.h" #include "qpid/framing/reply_exceptions.h" @@ -128,7 +126,7 @@ class Queue; public: QueueHandlerImpl(SemanticState& session); ~QueueHandlerImpl(); - + void declare(const std::string& queue, const std::string& alternateExchange, bool passive, bool durable, bool exclusive, @@ -138,7 +136,7 @@ class Queue; bool ifUnused, bool ifEmpty); void purge(const std::string& queue); framing::QueueQueryResult query(const std::string& queue); - bool isLocal(const ConnectionToken* t) const; + bool isLocal(const OwnershipToken* t) const; void destroyExclusiveQueues(); void checkDelete(boost::shared_ptr<Queue> queue, bool ifUnused, bool ifEmpty); diff --git a/qpid/cpp/src/qpid/broker/SessionContext.h b/qpid/cpp/src/qpid/broker/SessionContext.h index 316301481f..25b8e22949 100644 --- a/qpid/cpp/src/qpid/broker/SessionContext.h +++ b/qpid/cpp/src/qpid/broker/SessionContext.h @@ -42,7 +42,6 @@ class SessionContext : public OwnershipToken { public: virtual ~SessionContext(){} - virtual bool isLocal(const ConnectionToken* t) const = 0; virtual bool isAttached() const = 0; virtual Connection& getConnection() = 0; virtual framing::AMQP_ClientProxy& getProxy() = 0; diff --git a/qpid/cpp/src/qpid/broker/SessionState.cpp b/qpid/cpp/src/qpid/broker/SessionState.cpp index ccf77413df..f9b84dc9fb 100644 --- a/qpid/cpp/src/qpid/broker/SessionState.cpp +++ b/qpid/cpp/src/qpid/broker/SessionState.cpp @@ -101,7 +101,7 @@ Connection& SessionState::getConnection() { return handler->getConnection(); } -bool SessionState::isLocal(const ConnectionToken* t) const +bool SessionState::isLocal(const OwnershipToken* t) const { return isAttached() && &(handler->getConnection()) == t; } @@ -204,7 +204,7 @@ void SessionState::handleContent(AMQFrame& frame, const SequenceNumber& id) DeliverableMessage deliverable(Message(msg, msg), semanticState.getTxBuffer()); if (broker.isTimestamping()) deliverable.getMessage().setTimestamp(); - deliverable.getMessage().setPublisher(&getConnection()); + deliverable.getMessage().setPublisher(getConnection()); IncompleteIngressMsgXfer xfer(this, msg); diff --git a/qpid/cpp/src/qpid/broker/SessionState.h b/qpid/cpp/src/qpid/broker/SessionState.h index df6ba3b17f..eef9cf70c7 100644 --- a/qpid/cpp/src/qpid/broker/SessionState.h +++ b/qpid/cpp/src/qpid/broker/SessionState.h @@ -90,7 +90,7 @@ class SessionState : public qpid::SessionState, /** @pre isAttached() */ Connection& getConnection(); - bool isLocal(const ConnectionToken* t) const; + bool isLocal(const OwnershipToken* t) const; Broker& getBroker(); diff --git a/qpid/cpp/src/qpid/broker/amqp/ManagedConnection.cpp b/qpid/cpp/src/qpid/broker/amqp/ManagedConnection.cpp index ec586ea28f..b62a07d067 100644 --- a/qpid/cpp/src/qpid/broker/amqp/ManagedConnection.cpp +++ b/qpid/cpp/src/qpid/broker/amqp/ManagedConnection.cpp @@ -100,7 +100,7 @@ qpid::management::ManagementObject::shared_ptr ManagedConnection::GetManagementO std::string ManagedConnection::getId() const { return id; } std::string ManagedConnection::getUserid() const { return userid; } -bool ManagedConnection::isLocal(const ConnectionToken* t) const +bool ManagedConnection::isLocal(const OwnershipToken* t) const { return this == t; } diff --git a/qpid/cpp/src/qpid/broker/amqp/ManagedConnection.h b/qpid/cpp/src/qpid/broker/amqp/ManagedConnection.h index f2037d4837..634c0fca99 100644 --- a/qpid/cpp/src/qpid/broker/amqp/ManagedConnection.h +++ b/qpid/cpp/src/qpid/broker/amqp/ManagedConnection.h @@ -22,7 +22,7 @@ * */ #include "qpid/management/Manageable.h" -#include "qpid/broker/ConnectionToken.h" +#include "qpid/broker/OwnershipToken.h" #include "qmf/org/apache/qpid/broker/Connection.h" namespace qpid { @@ -34,7 +34,7 @@ namespace broker { class Broker; namespace amqp { -class ManagedConnection : public qpid::management::Manageable, public ConnectionToken +class ManagedConnection : public qpid::management::Manageable, public OwnershipToken { public: ManagedConnection(Broker& broker, const std::string id); @@ -47,7 +47,7 @@ class ManagedConnection : public qpid::management::Manageable, public Connection void setContainerId(const std::string&); const std::string& getContainerId() const; qpid::management::ManagementObject::shared_ptr GetManagementObject() const; - bool isLocal(const ConnectionToken* t) const; + bool isLocal(const OwnershipToken* t) const; void incomingMessageReceived(); void outgoingMessageSent(); private: diff --git a/qpid/cpp/src/qpid/broker/amqp/ManagedSession.cpp b/qpid/cpp/src/qpid/broker/amqp/ManagedSession.cpp index 25e124d770..dc003ebde7 100644 --- a/qpid/cpp/src/qpid/broker/amqp/ManagedSession.cpp +++ b/qpid/cpp/src/qpid/broker/amqp/ManagedSession.cpp @@ -53,7 +53,7 @@ qpid::management::ManagementObject::shared_ptr ManagedSession::GetManagementObje return session; } -bool ManagedSession::isLocal(const ConnectionToken* t) const +bool ManagedSession::isLocal(const OwnershipToken* t) const { return &parent == t; } diff --git a/qpid/cpp/src/qpid/broker/amqp/ManagedSession.h b/qpid/cpp/src/qpid/broker/amqp/ManagedSession.h index 5e11d6e2ca..5264f3fd7e 100644 --- a/qpid/cpp/src/qpid/broker/amqp/ManagedSession.h +++ b/qpid/cpp/src/qpid/broker/amqp/ManagedSession.h @@ -23,7 +23,6 @@ */ #include "qpid/management/Manageable.h" #include "qmf/org/apache/qpid/broker/Session.h" -#include "qpid/broker/ConnectionToken.h" #include "qpid/broker/OwnershipToken.h" namespace qpid { @@ -41,7 +40,7 @@ class ManagedSession : public qpid::management::Manageable, public OwnershipToke ManagedSession(Broker& broker, ManagedConnection& parent, const std::string id); virtual ~ManagedSession(); qpid::management::ManagementObject::shared_ptr GetManagementObject() const; - bool isLocal(const ConnectionToken* t) const; + bool isLocal(const OwnershipToken* t) const; void incomingMessageReceived(); void incomingMessageAccepted(); void incomingMessageRejected(); diff --git a/qpid/cpp/src/qpid/management/ManagementAgent.cpp b/qpid/cpp/src/qpid/management/ManagementAgent.cpp index 9adc59b63d..c5c979bfb0 100644 --- a/qpid/cpp/src/qpid/management/ManagementAgent.cpp +++ b/qpid/cpp/src/qpid/management/ManagementAgent.cpp @@ -88,13 +88,13 @@ const string keyifyNameStr(const string& name) struct ScopedManagementContext { - ScopedManagementContext(const qpid::broker::Connection* context) + ScopedManagementContext(const ConnectionIdentity& p) { - setManagementExecutionContext(context); + setManagementExecutionContext(p); } ~ScopedManagementContext() { - setManagementExecutionContext(0); + resetManagementExecutionContext(); } }; @@ -1242,7 +1242,7 @@ bool ManagementAgent::dispatchCommand (Deliverable& deliverable, return true; } -void ManagementAgent::handleMethodRequest(Buffer& inBuffer, const string& replyToKey, uint32_t sequence, const ConnectionToken* connToken) +void ManagementAgent::handleMethodRequest(Buffer& inBuffer, const string& replyToKey, uint32_t sequence, const string& userId) { moveNewObjects(); @@ -1286,7 +1286,6 @@ void ManagementAgent::handleMethodRequest(Buffer& inBuffer, const string& replyT return; } - string userId = ((const qpid::broker::Connection*) connToken)->getUserId(); if (acl != 0) { map<acl::Property, string> params; params[acl::PROP_SCHEMAPACKAGE] = packageName; @@ -1338,7 +1337,7 @@ void ManagementAgent::handleMethodRequest(Buffer& inBuffer, const string& replyT void ManagementAgent::handleMethodRequest (const string& body, const string& rte, const string& rtk, - const string& cid, const ConnectionToken* connToken, bool viaLocal) + const string& cid, const string& userId, bool viaLocal) { moveNewObjects(); @@ -1407,7 +1406,6 @@ void ManagementAgent::handleMethodRequest (const string& body, const string& rte return; } - string userId = ((const qpid::broker::Connection*) connToken)->getUserId(); if (acl != 0) { map<acl::Property, string> params; params[acl::PROP_SCHEMAPACKAGE] = object->getPackageName(); @@ -1718,12 +1716,11 @@ void ManagementAgent::deleteOrphanedAgentsLH() remoteAgents.erase(*dIter); } -void ManagementAgent::handleAttachRequest (Buffer& inBuffer, const string& replyToKey, uint32_t sequence, const ConnectionToken* connToken) +void ManagementAgent::handleAttachRequest (Buffer& inBuffer, const string& replyToKey, uint32_t sequence, const ObjectId& connectionRef) { string label; uint32_t requestedBrokerBank, requestedAgentBank; uint32_t assignedBank; - ObjectId connectionRef = ((const Connection*) connToken)->GetManagementObject()->getObjectId(); Uuid systemId; moveNewObjects(); @@ -2206,7 +2203,7 @@ bool ManagementAgent::authorizeAgentMessage(Message& msg) if (acl == 0) return true; - string userId = ((const qpid::broker::Connection*) msg.getPublisher())->getUserId(); + string userId = msg.getUserId(); params[acl::PROP_SCHEMAPACKAGE] = packageName; params[acl::PROP_SCHEMACLASS] = className; @@ -2276,7 +2273,7 @@ void ManagementAgent::dispatchAgentCommand(Message& msg, bool viaLocal) uint32_t bufferLen = inBuffer.getPosition(); inBuffer.reset(); - ScopedManagementContext context((const qpid::broker::Connection*) msg.getPublisher()); + ScopedManagementContext context(msg.getPublisher()); const framing::FieldTable *headers = p ? &p->getApplicationHeaders() : 0; if (headers && p->getAppId() == "qmf2") { @@ -2291,7 +2288,7 @@ void ManagementAgent::dispatchAgentCommand(Message& msg, bool viaLocal) } if (opcode == "_method_request") - return handleMethodRequest(body, rte, rtk, cid, msg.getPublisher(), viaLocal); + return handleMethodRequest(body, rte, rtk, cid, msg.getPublisherUserId(), viaLocal); else if (opcode == "_query_request") return handleGetQuery(body, rte, rtk, cid, viaLocal); else if (opcode == "_agent_locate_request") @@ -2314,9 +2311,9 @@ void ManagementAgent::dispatchAgentCommand(Message& msg, bool viaLocal) else if (opcode == 'q') handleClassInd (inBuffer, rtk, sequence); else if (opcode == 'S') handleSchemaRequest (inBuffer, rte, rtk, sequence); else if (opcode == 's') handleSchemaResponse (inBuffer, rtk, sequence); - else if (opcode == 'A') handleAttachRequest (inBuffer, rtk, sequence, msg.getPublisher()); + else if (opcode == 'A') handleAttachRequest (inBuffer, rtk, sequence, msg.getPublisherObjectId()); else if (opcode == 'G') handleGetQuery (inBuffer, rtk, sequence); - else if (opcode == 'M') handleMethodRequest (inBuffer, rtk, sequence, msg.getPublisher()); + else if (opcode == 'M') handleMethodRequest (inBuffer, rtk, sequence, msg.getPublisherUserId()); } } @@ -2755,16 +2752,22 @@ ManagementAgent::EventQueue::Batch::const_iterator ManagementAgent::sendEvents( } namespace { -QPID_TSS const qpid::broker::Connection* executionContext = 0; +QPID_TSS const ConnectionIdentity* currentPublisher = 0; } -void setManagementExecutionContext(const qpid::broker::Connection* ctxt) +void setManagementExecutionContext(const ConnectionIdentity& p) { - executionContext = ctxt; + currentPublisher = &p; } -const qpid::broker::Connection* getManagementExecutionContext() + +void resetManagementExecutionContext() +{ + currentPublisher = 0; +} + +const ConnectionIdentity* getCurrentPublisher() { - return executionContext; + return currentPublisher; } }} diff --git a/qpid/cpp/src/qpid/management/ManagementAgent.h b/qpid/cpp/src/qpid/management/ManagementAgent.h index 2de2a232de..cb8bb588b9 100644 --- a/qpid/cpp/src/qpid/management/ManagementAgent.h +++ b/qpid/cpp/src/qpid/management/ManagementAgent.h @@ -26,7 +26,6 @@ #include "qpid/broker/Exchange.h" #include "qpid/framing/Uuid.h" #include "qpid/sys/Mutex.h" -#include "qpid/broker/ConnectionToken.h" #include "qpid/management/ManagementObject.h" #include "qpid/management/ManagementEvent.h" #include "qpid/management/Manageable.h" @@ -45,6 +44,7 @@ namespace qpid { namespace broker { class Connection; +class ConnectionIdentity; } namespace sys { class Timer; @@ -361,11 +361,11 @@ private: void handleClassInd (framing::Buffer& inBuffer, const std::string& replyToKey, uint32_t sequence); void handleSchemaRequest (framing::Buffer& inBuffer, const std::string& replyToEx, const std::string& replyToKey, uint32_t sequence); void handleSchemaResponse (framing::Buffer& inBuffer, const std::string& replyToKey, uint32_t sequence); - void handleAttachRequest (framing::Buffer& inBuffer, const std::string& replyToKey, uint32_t sequence, const qpid::broker::ConnectionToken* connToken); + void handleAttachRequest (framing::Buffer& inBuffer, const std::string& replyToKey, uint32_t sequence, const ObjectId& objectId); void handleGetQuery (framing::Buffer& inBuffer, const std::string& replyToKey, uint32_t sequence); - void handleMethodRequest (framing::Buffer& inBuffer, const std::string& replyToKey, uint32_t sequence, const qpid::broker::ConnectionToken* connToken); + void handleMethodRequest (framing::Buffer& inBuffer, const std::string& replyToKey, uint32_t sequence, const std::string& userId); void handleGetQuery (const std::string& body, const std::string& replyToEx, const std::string& replyToKey, const std::string& cid, bool viaLocal); - void handleMethodRequest (const std::string& body, const std::string& replyToEx, const std::string& replyToKey, const std::string& cid, const qpid::broker::ConnectionToken* connToken, bool viaLocal); + void handleMethodRequest (const std::string& body, const std::string& replyToEx, const std::string& replyToKey, const std::string& cid, const std::string& userId, bool viaLocal); void handleLocateRequest (const std::string& body, const std::string& replyToEx, const std::string &replyToKey, const std::string& cid); @@ -379,8 +379,9 @@ private: std::auto_ptr<EventQueue> sendQueue; }; -void setManagementExecutionContext(const qpid::broker::Connection*); -const qpid::broker::Connection* getManagementExecutionContext(); +void setManagementExecutionContext(const broker::ConnectionIdentity&); +void resetManagementExecutionContext(); +const broker::ConnectionIdentity* getCurrentPublisher(); }} #endif /*!_ManagementAgent_*/ |
