summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
authorTed Ross <tross@apache.org>2008-09-10 19:14:01 +0000
committerTed Ross <tross@apache.org>2008-09-10 19:14:01 +0000
commit51ea054146d0af71640bd44e8e75494847216a31 (patch)
treef262995946ace31dbb3d3660db9df58e4f412ac3 /cpp
parent0b778c328001d25b3118450c0bfabb3e0b918971 (diff)
downloadqpid-python-51ea054146d0af71640bd44e8e75494847216a31.tar.gz
QPID-1279 Implementations of management methods can now return error strings along with its own error codes
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@693933 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp')
-rw-r--r--cpp/examples/qmf-agent/example.cpp4
-rwxr-xr-xcpp/managementgen/qmf/schema.py4
-rw-r--r--cpp/managementgen/qmf/templates/Class.cpp5
-rw-r--r--cpp/src/qpid/broker/Bridge.cpp4
-rw-r--r--cpp/src/qpid/broker/Bridge.h4
-rw-r--r--cpp/src/qpid/broker/Broker.cpp5
-rw-r--r--cpp/src/qpid/broker/Broker.h4
-rw-r--r--cpp/src/qpid/broker/Connection.cpp2
-rw-r--r--cpp/src/qpid/broker/Connection.h2
-rw-r--r--cpp/src/qpid/broker/Exchange.cpp6
-rw-r--r--cpp/src/qpid/broker/Exchange.h5
-rw-r--r--cpp/src/qpid/broker/Link.cpp2
-rw-r--r--cpp/src/qpid/broker/Link.h4
-rw-r--r--cpp/src/qpid/broker/Queue.cpp3
-rw-r--r--cpp/src/qpid/broker/Queue.h2
-rw-r--r--cpp/src/qpid/broker/SessionState.cpp3
-rw-r--r--cpp/src/qpid/broker/SessionState.h2
-rw-r--r--cpp/src/qpid/broker/Vhost.h3
-rw-r--r--cpp/src/qpid/management/Manageable.cpp8
-rw-r--r--cpp/src/qpid/management/Manageable.h11
20 files changed, 42 insertions, 41 deletions
diff --git a/cpp/examples/qmf-agent/example.cpp b/cpp/examples/qmf-agent/example.cpp
index c8d63a62b9..3422704d60 100644
--- a/cpp/examples/qmf-agent/example.cpp
+++ b/cpp/examples/qmf-agent/example.cpp
@@ -65,7 +65,7 @@ public:
{ return mgmtObject; }
void doLoop();
- status_t ManagementMethod (uint32_t methodId, Args& args);
+ status_t ManagementMethod (uint32_t methodId, Args& args, string& text);
};
class ChildClass : public Manageable
@@ -116,7 +116,7 @@ void CoreClass::doLoop()
}
}
-Manageable::status_t CoreClass::ManagementMethod(uint32_t methodId, Args& args)
+Manageable::status_t CoreClass::ManagementMethod(uint32_t methodId, Args& args, string& /*text*/)
{
Mutex::ScopedLock _lock(vectorLock);
diff --git a/cpp/managementgen/qmf/schema.py b/cpp/managementgen/qmf/schema.py
index 9263c29543..26bad618f7 100755
--- a/cpp/managementgen/qmf/schema.py
+++ b/cpp/managementgen/qmf/schema.py
@@ -1004,9 +1004,9 @@ class SchemaClass:
arg.name, "inBuf") + ";\n")
stream.write (" status = coreObject->ManagementMethod (METHOD_" +\
- method.getName().upper() + ", ioArgs);\n")
+ method.getName().upper() + ", ioArgs, text);\n")
stream.write (" outBuf.putLong (status);\n")
- stream.write (" outBuf.putShortString (Manageable::StatusText (status));\n")
+ stream.write (" outBuf.putShortString (Manageable::StatusText (status, text));\n")
for arg in method.args:
if arg.getDir () == "O" or arg.getDir () == "IO":
stream.write (" " +\
diff --git a/cpp/managementgen/qmf/templates/Class.cpp b/cpp/managementgen/qmf/templates/Class.cpp
index 2a0e55b34d..018f325ff1 100644
--- a/cpp/managementgen/qmf/templates/Class.cpp
+++ b/cpp/managementgen/qmf/templates/Class.cpp
@@ -172,9 +172,10 @@ void /*MGEN:Class.NameCap*/::writeStatistics (Buffer& buf, bool skipHeaders)
void /*MGEN:Class.NameCap*/::doMethod (/*MGEN:Class.DoMethodArgs*/)
{
Manageable::status_t status = Manageable::STATUS_UNKNOWN_METHOD;
+ std::string text;
/*MGEN:Class.MethodHandlers*/
- outBuf.putLong (status);
- outBuf.putShortString (Manageable::StatusText (status));
+ outBuf.putLong(status);
+ outBuf.putShortString(Manageable::StatusText(status, text));
}
/*MGEN:Class.EventMethodBodies*/
diff --git a/cpp/src/qpid/broker/Bridge.cpp b/cpp/src/qpid/broker/Bridge.cpp
index 53bed020e2..6e8dd818e5 100644
--- a/cpp/src/qpid/broker/Bridge.cpp
+++ b/cpp/src/qpid/broker/Bridge.cpp
@@ -178,7 +178,9 @@ management::ManagementObject* Bridge::GetManagementObject (void) const
return (management::ManagementObject*) mgmtObject;
}
-management::Manageable::status_t Bridge::ManagementMethod(uint32_t methodId, management::Args& /*args*/)
+management::Manageable::status_t Bridge::ManagementMethod(uint32_t methodId,
+ management::Args& /*args*/,
+ string&)
{
if (methodId == management::Bridge::METHOD_CLOSE) {
//notify that we are closed
diff --git a/cpp/src/qpid/broker/Bridge.h b/cpp/src/qpid/broker/Bridge.h
index 06fba25268..8286f080d5 100644
--- a/cpp/src/qpid/broker/Bridge.h
+++ b/cpp/src/qpid/broker/Bridge.h
@@ -54,7 +54,9 @@ public:
bool isDurable() { return args.i_durable; }
management::ManagementObject* GetManagementObject() const;
- management::Manageable::status_t ManagementMethod(uint32_t methodId, management::Args& args);
+ management::Manageable::status_t ManagementMethod(uint32_t methodId,
+ management::Args& args,
+ std::string& text);
// PersistableConfig:
void setPersistenceId(uint64_t id) const;
diff --git a/cpp/src/qpid/broker/Broker.cpp b/cpp/src/qpid/broker/Broker.cpp
index 94a392b921..d07517fee2 100644
--- a/cpp/src/qpid/broker/Broker.cpp
+++ b/cpp/src/qpid/broker/Broker.cpp
@@ -321,7 +321,8 @@ Manageable* Broker::GetVhostObject(void) const
}
Manageable::status_t Broker::ManagementMethod (uint32_t methodId,
- Args& args)
+ Args& args,
+ string&)
{
Manageable::status_t status = Manageable::STATUS_UNKNOWN_METHOD;
@@ -332,7 +333,7 @@ Manageable::status_t Broker::ManagementMethod (uint32_t methodId,
case management::Broker::METHOD_ECHO :
status = Manageable::STATUS_OK;
break;
- case management::Broker::METHOD_CONNECT : {
+ case management::Broker::METHOD_CONNECT : {
management::ArgsBrokerConnect& hp=
dynamic_cast<management::ArgsBrokerConnect&>(args);
diff --git a/cpp/src/qpid/broker/Broker.h b/cpp/src/qpid/broker/Broker.h
index bd17d1bb00..5b701e8513 100644
--- a/cpp/src/qpid/broker/Broker.h
+++ b/cpp/src/qpid/broker/Broker.h
@@ -156,7 +156,9 @@ class Broker : public sys::Runnable, public Plugin::Target,
management::ManagementObject* GetManagementObject (void) const;
management::Manageable* GetVhostObject (void) const;
- management::Manageable::status_t ManagementMethod (uint32_t methodId, management::Args& args);
+ management::Manageable::status_t ManagementMethod (uint32_t methodId,
+ management::Args& args,
+ std::string& text);
/** Add to the broker's protocolFactorys */
void registerProtocolFactory(boost::shared_ptr<sys::ProtocolFactory>);
diff --git a/cpp/src/qpid/broker/Connection.cpp b/cpp/src/qpid/broker/Connection.cpp
index 8ed3ce84c8..4be831a9cb 100644
--- a/cpp/src/qpid/broker/Connection.cpp
+++ b/cpp/src/qpid/broker/Connection.cpp
@@ -222,7 +222,7 @@ ManagementObject* Connection::GetManagementObject(void) const
return (ManagementObject*) mgmtObject;
}
-Manageable::status_t Connection::ManagementMethod(uint32_t methodId, Args&)
+Manageable::status_t Connection::ManagementMethod(uint32_t methodId, Args&, string&)
{
Manageable::status_t status = Manageable::STATUS_UNKNOWN_METHOD;
diff --git a/cpp/src/qpid/broker/Connection.h b/cpp/src/qpid/broker/Connection.h
index 8c23e64edf..137a829f7f 100644
--- a/cpp/src/qpid/broker/Connection.h
+++ b/cpp/src/qpid/broker/Connection.h
@@ -83,7 +83,7 @@ class Connection : public sys::ConnectionInputHandler,
// Manageable entry points
management::ManagementObject* GetManagementObject (void) const;
management::Manageable::status_t
- ManagementMethod (uint32_t methodId, management::Args& args);
+ ManagementMethod (uint32_t methodId, management::Args& args, std::string&);
void requestIOProcessing (boost::function0<void>);
void recordFromServer (framing::AMQFrame& frame);
diff --git a/cpp/src/qpid/broker/Exchange.cpp b/cpp/src/qpid/broker/Exchange.cpp
index b40d6f9ed9..3c0f3b14e9 100644
--- a/cpp/src/qpid/broker/Exchange.cpp
+++ b/cpp/src/qpid/broker/Exchange.cpp
@@ -149,12 +149,6 @@ ManagementObject* Exchange::Binding::GetManagementObject () const
return (ManagementObject*) mgmtBinding;
}
-Manageable::status_t Exchange::Binding::ManagementMethod (uint32_t, Args&)
-{
- return Manageable::STATUS_UNKNOWN_METHOD;
-}
-
-
Exchange::MatchQueue::MatchQueue(Queue::shared_ptr q) : queue(q) {}
bool Exchange::MatchQueue::operator()(Exchange::Binding::shared_ptr b)
diff --git a/cpp/src/qpid/broker/Exchange.h b/cpp/src/qpid/broker/Exchange.h
index 2e3b5ba13a..4f46741bfe 100644
--- a/cpp/src/qpid/broker/Exchange.h
+++ b/cpp/src/qpid/broker/Exchange.h
@@ -60,7 +60,6 @@ namespace qpid {
framing::FieldTable args = framing::FieldTable ());
~Binding ();
management::ManagementObject* GetManagementObject () const;
- management::Manageable::status_t ManagementMethod (uint32_t methodId, management::Args& args);
};
struct MatchQueue
{
@@ -104,9 +103,7 @@ namespace qpid {
static Exchange::shared_ptr decode(ExchangeRegistry& exchanges, framing::Buffer& buffer);
// Manageable entry points
- management::ManagementObject* GetManagementObject (void) const;
- management::Manageable::status_t
- ManagementMethod (uint32_t, management::Args&) { return management::Manageable::STATUS_UNKNOWN_METHOD; }
+ management::ManagementObject* GetManagementObject(void) const;
};
}
}
diff --git a/cpp/src/qpid/broker/Link.cpp b/cpp/src/qpid/broker/Link.cpp
index 05b759f695..a53bf9e983 100644
--- a/cpp/src/qpid/broker/Link.cpp
+++ b/cpp/src/qpid/broker/Link.cpp
@@ -324,7 +324,7 @@ ManagementObject* Link::GetManagementObject (void) const
return (ManagementObject*) mgmtObject;
}
-Manageable::status_t Link::ManagementMethod (uint32_t op, management::Args& args)
+Manageable::status_t Link::ManagementMethod (uint32_t op, management::Args& args, string&)
{
switch (op)
{
diff --git a/cpp/src/qpid/broker/Link.h b/cpp/src/qpid/broker/Link.h
index d425c49800..0422141ec7 100644
--- a/cpp/src/qpid/broker/Link.h
+++ b/cpp/src/qpid/broker/Link.h
@@ -123,8 +123,8 @@ namespace qpid {
static Link::shared_ptr decode(LinkRegistry& links, framing::Buffer& buffer);
// Manageable entry points
- management::ManagementObject* GetManagementObject (void) const;
- management::Manageable::status_t ManagementMethod (uint32_t, management::Args&);
+ management::ManagementObject* GetManagementObject(void) const;
+ management::Manageable::status_t ManagementMethod(uint32_t, management::Args&, std::string&);
};
}
}
diff --git a/cpp/src/qpid/broker/Queue.cpp b/cpp/src/qpid/broker/Queue.cpp
index 4b94cd32b0..2dbaef1b13 100644
--- a/cpp/src/qpid/broker/Queue.cpp
+++ b/cpp/src/qpid/broker/Queue.cpp
@@ -724,8 +724,7 @@ ManagementObject* Queue::GetManagementObject (void) const
return (ManagementObject*) mgmtObject;
}
-Manageable::status_t Queue::ManagementMethod (uint32_t methodId,
- Args& args)
+Manageable::status_t Queue::ManagementMethod (uint32_t methodId, Args& args, string&)
{
Manageable::status_t status = Manageable::STATUS_UNKNOWN_METHOD;
diff --git a/cpp/src/qpid/broker/Queue.h b/cpp/src/qpid/broker/Queue.h
index 274a29e9eb..1cf33b665f 100644
--- a/cpp/src/qpid/broker/Queue.h
+++ b/cpp/src/qpid/broker/Queue.h
@@ -207,7 +207,7 @@ namespace qpid {
// Manageable entry points
management::ManagementObject* GetManagementObject (void) const;
management::Manageable::status_t
- ManagementMethod (uint32_t methodId, management::Args& args);
+ ManagementMethod (uint32_t methodId, management::Args& args, std::string& text);
/** Apply f to each Message on the queue. */
template <class F> void eachMessage(const F& f) const {
diff --git a/cpp/src/qpid/broker/SessionState.cpp b/cpp/src/qpid/broker/SessionState.cpp
index 42f6b78521..913188845f 100644
--- a/cpp/src/qpid/broker/SessionState.cpp
+++ b/cpp/src/qpid/broker/SessionState.cpp
@@ -122,7 +122,8 @@ ManagementObject* SessionState::GetManagementObject (void) const
}
Manageable::status_t SessionState::ManagementMethod (uint32_t methodId,
- Args& /*args*/)
+ Args& /*args*/,
+ string& /*text*/)
{
Manageable::status_t status = Manageable::STATUS_UNKNOWN_METHOD;
diff --git a/cpp/src/qpid/broker/SessionState.h b/cpp/src/qpid/broker/SessionState.h
index d72d1974c2..83d79a617d 100644
--- a/cpp/src/qpid/broker/SessionState.h
+++ b/cpp/src/qpid/broker/SessionState.h
@@ -96,7 +96,7 @@ class SessionState : public qpid::SessionState,
// Manageable entry points
management::ManagementObject* GetManagementObject (void) const;
management::Manageable::status_t
- ManagementMethod (uint32_t methodId, management::Args& args);
+ ManagementMethod (uint32_t methodId, management::Args& args, std::string&);
void readyToSend();
diff --git a/cpp/src/qpid/broker/Vhost.h b/cpp/src/qpid/broker/Vhost.h
index e56cc61272..bdc64e71be 100644
--- a/cpp/src/qpid/broker/Vhost.h
+++ b/cpp/src/qpid/broker/Vhost.h
@@ -41,9 +41,6 @@ class Vhost : public management::Manageable
management::ManagementObject* GetManagementObject (void) const
{ return mgmtObject; }
-
- management::Manageable::status_t ManagementMethod (uint32_t, management::Args&)
- { return management::Manageable::STATUS_OK; }
};
}}
diff --git a/cpp/src/qpid/management/Manageable.cpp b/cpp/src/qpid/management/Manageable.cpp
index 19fba87fde..08bb541fc7 100644
--- a/cpp/src/qpid/management/Manageable.cpp
+++ b/cpp/src/qpid/management/Manageable.cpp
@@ -20,9 +20,13 @@
#include "Manageable.h"
using namespace qpid::management;
+using std::string;
-std::string Manageable::StatusText (status_t status)
+string Manageable::StatusText (status_t status, string text)
{
+ if ((status & STATUS_USER) == STATUS_USER)
+ return text;
+
switch (status)
{
case STATUS_OK : return "OK";
@@ -37,7 +41,7 @@ std::string Manageable::StatusText (status_t status)
return "??";
}
-Manageable::status_t Manageable::ManagementMethod (uint32_t, Args&)
+Manageable::status_t Manageable::ManagementMethod (uint32_t, Args&, std::string&)
{
return STATUS_UNKNOWN_METHOD;
}
diff --git a/cpp/src/qpid/management/Manageable.h b/cpp/src/qpid/management/Manageable.h
index 4e2f33b625..afa5c968f7 100644
--- a/cpp/src/qpid/management/Manageable.h
+++ b/cpp/src/qpid/management/Manageable.h
@@ -31,12 +31,12 @@ class Manageable
{
public:
- virtual ~Manageable (void) = 0;
+ virtual ~Manageable(void) = 0;
// status_t is a type used to pass completion status from the method handler.
//
typedef uint32_t status_t;
- static std::string StatusText (status_t status);
+ static std::string StatusText(status_t status, std::string text = std::string());
static const status_t STATUS_OK = 0;
static const status_t STATUS_UNKNOWN_OBJECT = 1;
@@ -45,6 +45,7 @@ class Manageable
static const status_t STATUS_INVALID_PARAMETER = 4;
static const status_t STATUS_FEATURE_NOT_IMPLEMENTED = 5;
static const status_t STATUS_FORBIDDEN = 6;
+ static const status_t STATUS_USER = 0x00010000;
// Every "Manageable" object must hold a reference to exactly one
// management object. This object is always of a class derived from
@@ -52,17 +53,17 @@ class Manageable
//
// This accessor function returns a pointer to the management object.
//
- virtual ManagementObject* GetManagementObject (void) const = 0;
+ virtual ManagementObject* GetManagementObject(void) const = 0;
// Every "Manageable" object must implement ManagementMethod. This
// function is called when a remote management client invokes a method
// on this object. The input and output arguments are specific to the
// method being called and must be down-cast to the appropriate sub class
// before use.
- virtual status_t ManagementMethod (uint32_t methodId, Args& args);
+ virtual status_t ManagementMethod(uint32_t methodId, Args& args, std::string& text);
};
-inline Manageable::~Manageable (void) {}
+inline Manageable::~Manageable(void) {}
}}