From: Gareth S B. <bes...@us...> - 2005-06-09 21:52:42
|
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); } |