Update of /cvsroot/sblim/sfcb
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13574
Modified Files:
interopProvider.c
Log Message:
fix for http://sourceforge.net/tracker/index.php?func=detail&aid=1206672&group_id=128809&atid=712784
Index: interopProvider.c
===================================================================
RCS file: /cvsroot/sblim/sfcb/interopProvider.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- interopProvider.c 9 Jun 2005 20:34:59 -0000 1.9
+++ interopProvider.c 9 Jun 2005 21:52:28 -0000 1.10
@@ -544,37 +544,60 @@
CMPIStatus * st)
{
CMPIStatus rc;
- char *principal=NULL;
- char **fClasses=fi->qs->ft->getFromClassList(fi->qs);
- CMPIData principalP=ctx->ft->getEntry(ctx,CMPIPrincipal,&rc);
+ char *principal = NULL;
+ char **fClasses = fi->qs->ft->getFromClassList(fi->qs);
+ CMPIData principalP = ctx->ft->getEntry(ctx,CMPIPrincipal,&rc);
int irc;
+ int activated = 0;
_SFCB_ENTER(TRACE_INDPROVIDER, "fowardSubscription");
- if (rc.rc==CMPI_RC_OK)
- principal=(char*)principalP.value.string->hdl;
+ if (rc.rc == CMPI_RC_OK) {
+ principal = (char*)principalP.value.string->hdl;
+ _SFCB_TRACE(1,("--- principal=\"%s\"", principal));
+ }
+ /* Go thru all the indication classes specified in the filter query and activate each */
for ( ; *fClasses; fClasses++) {
- _SFCB_TRACE(1,("--- namespace=\"%s\" indication class=\"%s\"", fi->sns, *fClasses));
+ _SFCB_TRACE(1,("--- indication class=\"%s\" namespace=\"%s\"", *fClasses, fi->sns));
- if (isa(fi->sns,*fClasses,"CIM_ProcessIndication")) {
- *st=activateSubscription(principal, *fClasses, *fClasses, fi, &irc);
+ /* Check if this is a process indication */
+ if (isa(fi->sns, *fClasses, "CIM_ProcessIndication")) {
+ *st = activateSubscription(principal, *fClasses, *fClasses, fi, &irc);
+ if (st->rc == CMPI_RC_OK) activated++;
}
- else if (isa("root/interop",*fClasses,"CIM_InstCreation")) {
- *st=activateLifeCycleSubscription(principal, *fClasses, fi,CREATE_INST);
+
+ /* Check if this is a lifecycle instance creation indication */
+ else if (isa("root/interop", *fClasses, "CIM_InstCreation")) {
+ *st = activateLifeCycleSubscription(principal, *fClasses, fi, CREATE_INST);
+ if (st->rc == CMPI_RC_OK) activated++;
}
- else if (isa("root/interop",*fClasses,"CIM_InstDeletion")) {
- *st=activateLifeCycleSubscription(principal, *fClasses, fi,DELETE_INST);
+
+ /* Check if this is a lifecycle instance deletion indication */
+ else if (isa("root/interop", *fClasses, "CIM_InstDeletion")) {
+ *st = activateLifeCycleSubscription(principal, *fClasses, fi, DELETE_INST);
+ if (st->rc == CMPI_RC_OK) activated++;
}
- else if (isa("root/interop",*fClasses,"CIM_InstModification")) {
- *st=activateLifeCycleSubscription(principal, *fClasses, fi,MODIFY_INST);
+
+ /* Check if this is a lifecycle instance modification indication */
+ else if (isa("root/interop", *fClasses, "CIM_InstModification")) {
+ *st = activateLifeCycleSubscription(principal, *fClasses, fi, MODIFY_INST);
+ if (st->rc == CMPI_RC_OK) activated++;
}
+
+ /* Warn if this indication class is unknown and continue processing the rest, if any */
else {
- setStatus(st,CMPI_RC_ERR_NOT_SUPPORTED,"Unsupported indication class specified in filter query");
- _SFCB_RETURN(-1);
- }
+ _SFCB_TRACE(1,("--- Unsupported/unrecognized indication class"));
+ }
}
+ /* Make sure at least one of the indication classes were successfully activated */
+ if (!activated) {
+ setStatus(st, CMPI_RC_ERR_NOT_SUPPORTED, "No supported indication classes in filter query");
+ _SFCB_RETURN(-1);
+ }
+
+ setStatus(st, CMPI_RC_OK, NULL);
_SFCB_RETURN(0);
}
|