# HG changeset patch
# User Jay Gagnon <grendel(a)linux.vnet.ibm.com>
# Date 1202236788 18000
# Node ID 0f243b1c487b137583b5990e3ee97fac3a7f5a78
# Parent f9065b274d0a1e689f8e0b4d8d5ca0642db470f6
[CU] Improve std_indication's raise functionality
Turns out STDI_IndicationMIStub was not creating the CMPIFooMIFTs correctly; this patch
fixes that. It also adds a default_raise function to std_indication. This is for
indication providers that don't need to do anything other than call
CBDeliverIndication, which will most likely be the majority.
Signed-off-by: Jay Gagnon <grendel(a)linux.vnet.ibm.com>
diff -r f9065b274d0a -r 0f243b1c487b std_indication.c
--- a/std_indication.c Tue Feb 05 13:39:45 2008 -0500
+++ b/std_indication.c Tue Feb 05 13:39:48 2008 -0500
@@ -19,6 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <string.h>
+#include <stdbool.h>
#include <cmpidt.h>
#include <cmpift.h>
@@ -40,19 +41,40 @@ static CMPIStatus trigger(struct std_ind
return ctx->handler->trigger_fn(context);
}
+static CMPIStatus default_raise(const CMPIBroker *broker,
+ const CMPIContext *context,
+ CMPIInstance *ind)
+{
+ CMPIObjectPath *ref;
+ CMPIStatus s = {CMPI_RC_OK, NULL};
+
+ ref = CMGetObjectPath(ind, NULL);
+
+ CBDeliverIndication(broker,
+ context,
+ NAMESPACE(ref),
+ ind);
+ return s;
+}
+
static CMPIStatus raise(struct std_indication_ctx *ctx,
const CMPIContext *context,
const CMPIArgs *argsin)
{
CMPIInstance *inst;
- if (ctx->handler->raise_fn == NULL)
- return (CMPIStatus){CMPI_RC_OK, NULL};
+ if (!ctx->enabled) {
+ CU_DEBUG("Indication disabled, not raising.");
+ return (CMPIStatus) {CMPI_RC_OK, NULL};
+ }
if (cu_get_inst_arg(argsin, "Indication", &inst) != CMPI_RC_OK)
return (CMPIStatus){CMPI_RC_ERR_FAILED, NULL};
- return ctx->handler->raise_fn(context, inst);
+ if (ctx->handler->raise_fn == NULL)
+ return default_raise(ctx->brkr, context, inst);
+
+ return ctx->handler->raise_fn(ctx->brkr, context, inst);
}
CMPIStatus stdi_handler(CMPIMethodMI *self,
diff -r f9065b274d0a -r 0f243b1c487b std_indication.h
--- a/std_indication.h Tue Feb 05 13:39:45 2008 -0500
+++ b/std_indication.h Tue Feb 05 13:39:48 2008 -0500
@@ -24,6 +24,7 @@
#include <cmpidt.h>
#include <cmpift.h>
#include <cmpimacs.h>
+#include <stdio.h>
#include "libcmpiutil.h"
#include "std_invokemethod.h"
@@ -51,7 +52,8 @@ CMPIStatus stdi_cleanup(CMPIMethodMI *se
const CMPIContext *context,
CMPIBoolean terminating);
-typedef CMPIStatus (*raise_indication_t)(const CMPIContext *ctx,
+typedef CMPIStatus (*raise_indication_t)(const CMPIBroker *broker,
+ const CMPIContext *ctx,
const CMPIInstance *ind);
typedef CMPIStatus (*trigger_indication_t)(const CMPIContext *ctx);
@@ -64,14 +66,44 @@ struct std_indication_ctx {
struct std_indication_ctx {
const CMPIBroker *brkr;
struct std_indication_handler *handler;
+ bool enabled;
};
#define STDI_IndicationMIStub(pfx, pn, _broker, hook, _handler) \
+ static struct std_indication_ctx _ctx = { \
+ .brkr = NULL, \
+ .handler = _handler, \
+ .enabled = false, \
+ }; \
+ \
+ static CMPIIndicationMIFT indMIFT__ = { \
+ CMPICurrentVersion, \
+ CMPICurrentVersion, \
+ "Indication" #pn, \
+ pfx##IndicationCleanup, \
+ pfx##AuthorizeFilter, \
+ pfx##MustPoll, \
+ pfx##ActivateFilter, \
+ pfx##DeActivateFilter, \
+ CMIndicationMIStubExtensions(pfx) \
+ }; \
CMPIIndicationMI * \
pn##_Create_IndicationMI(const CMPIBroker *, \
- const CMPIContext *, \
- CMPIStatus *); \
- CMIndicationMIStub(pfx, pn, _broker, hook); \
+ const CMPIContext *, \
+ CMPIStatus *); \
+ CMPIIndicationMI * \
+ pn##_Create_IndicationMI(const CMPIBroker *brkr, \
+ const CMPIContext *ctx, \
+ CMPIStatus *rc) { \
+ static CMPIIndicationMI mi = { \
+ &_ctx, \
+ &indMIFT__, \
+ }; \
+ _ctx.brkr = brkr; \
+ _broker = brkr; \
+ hook; \
+ return &mi; \
+ } \
\
static CMPIMethodMIFT methMIFT__ = { \
CMPICurrentVersion, \
@@ -88,13 +120,11 @@ struct std_indication_ctx {
CMPIMethodMI *pn##_Create_MethodMI(const CMPIBroker *brkr, \
const CMPIContext *ctx, \
CMPIStatus *rc) { \
- static struct std_indication_ctx _ctx; \
static CMPIMethodMI mi = { \
&_ctx, \
&methMIFT__, \
}; \
_ctx.brkr = brkr; \
- _ctx.handler = _handler; \
_broker = brkr; \
hook; \
return &mi; \