
# HG changeset patch # User Jay Gagnon <grendel@linux.vnet.ibm.com> # Date 1201882988 18000 # Node ID 8669586635358e4858e56fe2dec8587af784cd47 # Parent ec7428b062f45db8eef730c5398d061d8731ce60 [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@linux.vnet.ibm.com> diff -r ec7428b062f4 -r 866958663535 std_indication.c --- a/std_indication.c Thu Jan 31 10:59:07 2008 -0500 +++ b/std_indication.c Fri Feb 01 11:23:08 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 ec7428b062f4 -r 866958663535 std_indication.h --- a/std_indication.h Thu Jan 31 10:59:07 2008 -0500 +++ b/std_indication.h Fri Feb 01 11:23:08 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; \