summaryrefslogtreecommitdiff
path: root/qpid/cpp/src
diff options
context:
space:
mode:
authorAndrew Stitcher <astitcher@apache.org>2013-06-19 14:26:11 +0000
committerAndrew Stitcher <astitcher@apache.org>2013-06-19 14:26:11 +0000
commit67787e15fce5978e1fa4fbdb27fbea4033f28086 (patch)
treec63dd491c09cfe2c8dfae091067b8ec9bd65e7ec /qpid/cpp/src
parent31e3e8bd8a6377a8cbcf578e268f43aaf8a0855a (diff)
downloadqpid-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')
-rw-r--r--qpid/cpp/src/Makefile.am2
-rw-r--r--qpid/cpp/src/qpid/broker/Broker.cpp24
-rw-r--r--qpid/cpp/src/qpid/broker/Broker.h14
-rw-r--r--qpid/cpp/src/qpid/broker/Connection.h13
-rw-r--r--qpid/cpp/src/qpid/broker/ConnectionIdentity.h (renamed from qpid/cpp/src/qpid/broker/ConnectionToken.h)42
-rw-r--r--qpid/cpp/src/qpid/broker/Message.cpp9
-rw-r--r--qpid/cpp/src/qpid/broker/Message.h20
-rw-r--r--qpid/cpp/src/qpid/broker/OwnershipToken.h4
-rw-r--r--qpid/cpp/src/qpid/broker/Queue.cpp2
-rw-r--r--qpid/cpp/src/qpid/broker/SessionAdapter.cpp2
-rw-r--r--qpid/cpp/src/qpid/broker/SessionAdapter.h6
-rw-r--r--qpid/cpp/src/qpid/broker/SessionContext.h1
-rw-r--r--qpid/cpp/src/qpid/broker/SessionState.cpp4
-rw-r--r--qpid/cpp/src/qpid/broker/SessionState.h2
-rw-r--r--qpid/cpp/src/qpid/broker/amqp/ManagedConnection.cpp2
-rw-r--r--qpid/cpp/src/qpid/broker/amqp/ManagedConnection.h6
-rw-r--r--qpid/cpp/src/qpid/broker/amqp/ManagedSession.cpp2
-rw-r--r--qpid/cpp/src/qpid/broker/amqp/ManagedSession.h3
-rw-r--r--qpid/cpp/src/qpid/management/ManagementAgent.cpp41
-rw-r--r--qpid/cpp/src/qpid/management/ManagementAgent.h13
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_*/