⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmpi_broker.cpp

📁 Pegasus is an open-source implementationof the DMTF CIM and WBEM standards. It is designed to be por
💻 CPP
📖 第 1 页 / 共 2 页
字号:
             orgCop.setNameSpace(CM_ObjectPath(cop)->getNameSpace());             (*aInst)[index].setPath(orgCop);         }         CMPI_Object *obj = new CMPI_Object(new CMPI_ObjEnumeration(aInst));         /*CMPI_Object *obj =                new CMPI_Object(new CMPI_ObjEnumeration(new Array<CIMObject>(en)));*/         // End of workaround for bugzilla 4677         return (CMPI_ObjEnumeration *)obj->getHdl();      }      catch (const CIMException &e) {         DDD(cout<<"### exception: mbAssociators - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);         if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),            (CMPIString*)string2CMPIString(e.getMessage()));         return NULL;      }      // Code flow should never get here.   }   static CMPIEnumeration* mbAssociatorNames(const CMPIBroker *mb,					     const CMPIContext *ctx,					     const CMPIObjectPath *cop,					     const char *assocClass,					     const char *resultClass,         const char *role, const char *resultRole, CMPIStatus *rc) {      DDD(cout<<"--- mbAssociatorsNames()"<<endl);      mb=CM_BROKER;      CIMObjectPath qop(String::EMPTY,CIMNamespaceName(),                        CM_ObjectPath(cop)->getClassName(),            CM_ObjectPath(cop)->getKeyBindings());      AutoMutex mtx(((CMPI_Broker*)mb)->mtx);      try {         Array<CIMObjectPath> const &en=CM_CIMOM(mb)->associatorNames(         OperationContext(*CM_Context(ctx)),         CM_ObjectPath(cop)->getNameSpace(),         qop,         assocClass ? CIMName(assocClass) : CIMName(),         resultClass ? CIMName(resultClass) : CIMName(),         role ? String(role) : String::EMPTY,         resultRole ? String(resultRole) : String::EMPTY);         if (rc) CMSetStatus(rc,CMPI_RC_OK);         // When running out of process the returned instances don't contain         // a name space. Create a writable copy of the array and add the         // namespace from the input parameters.         Array<CIMObjectPath> * aObj = new Array<CIMObjectPath>(en);         for (unsigned int index=0;index < aObj->size(); index++)         {             (*aObj)[index].setNameSpace(CM_ObjectPath(cop)->getNameSpace());         }         CMPI_Object *obj = new CMPI_Object(new CMPI_OpEnumeration(aObj));         return (CMPI_OpEnumeration *)obj->getHdl();      }      catch (const CIMException &e) {         DDD(cout<<"### exception: mbAssociatorsNames - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);         if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),            (CMPIString*)string2CMPIString(e.getMessage()));         return NULL;      }      // Code flow should never get here.   }   static CMPIEnumeration* mbReferences(const CMPIBroker *mb, const CMPIContext *ctx,                  const CMPIObjectPath *cop,  const char *resultClass, const char *role ,         const char **properties, CMPIStatus *rc) {      DDD(cout<<"--- mbReferences()"<<endl);      mb=CM_BROKER;      CMPIFlags flgs=ctx->ft->getEntry(ctx,CMPIInvocationFlags,NULL).value.uint32;      CIMPropertyList props=getList(properties);      CIMObjectPath qop(String::EMPTY,CIMNamespaceName(),                        CM_ObjectPath(cop)->getClassName(),            CM_ObjectPath(cop)->getKeyBindings());      AutoMutex mtx(((CMPI_Broker*)mb)->mtx);      try {         Array<CIMObject> const &en=CM_CIMOM(mb)->references(         OperationContext(*CM_Context(ctx)),         CM_ObjectPath(cop)->getNameSpace(),         qop,         resultClass ? CIMName(resultClass) : CIMName(),         role ? String(role) : String::EMPTY,         CM_IncludeQualifiers(flgs),         CM_ClassOrigin(flgs),         props);         if (rc) CMSetStatus(rc,CMPI_RC_OK);         // Workaround for bugzilla 4677         // When running out of process the returned instances don't contain         // a name space. Create a writable copy of the array and add the         // namespace from the input parameters.         Array<CIMObject> * aInst = new Array<CIMObject>(en);         for (unsigned int index=0;index < aInst->size(); index++)         {             CIMObject& myInst = (*aInst)[index];             CIMObjectPath orgCop = myInst.getPath();             orgCop.setNameSpace(CM_ObjectPath(cop)->getNameSpace());             (*aInst)[index].setPath(orgCop);         }         CMPI_Object *obj = new CMPI_Object(new CMPI_ObjEnumeration(aInst));         /*CMPI_Object *obj =                new CMPI_Object(new CMPI_ObjEnumeration(new Array<CIMObject>(en)));*/         // End of workaround for bugzilla 4677         return (CMPI_ObjEnumeration *)obj->getHdl();      }      catch (const CIMException &e) {         DDD(cout<<"### exception: mbReferences - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);         if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),            (CMPIString*)string2CMPIString(e.getMessage()));         return NULL;      }      // Code flow should never get here.   }   static CMPIEnumeration* mbReferenceNames(const CMPIBroker *mb, const CMPIContext *ctx,                  const CMPIObjectPath *cop, const char *resultClass, const char *role,                  CMPIStatus *rc) {      DDD(cout<<"--- mbReferencesNames()"<<endl);      mb=CM_BROKER;      CIMObjectPath qop(String::EMPTY,CIMNamespaceName(),                        CM_ObjectPath(cop)->getClassName(),            CM_ObjectPath(cop)->getKeyBindings());      AutoMutex mtx(((CMPI_Broker*)mb)->mtx);      try {         Array<CIMObjectPath> const &en=CM_CIMOM(mb)->referenceNames(         OperationContext(*CM_Context(ctx)),         CM_ObjectPath(cop)->getNameSpace(),         qop,         resultClass ? CIMName(resultClass) : CIMName(),         role ? String(role) : String::EMPTY);         if (rc) CMSetStatus(rc,CMPI_RC_OK);         // When running out of process the returned instances don't contain         // a name space. Create a writable copy of the array and add the         // namespace from the input parameters.         Array<CIMObjectPath> * aObj = new Array<CIMObjectPath>(en);         for (unsigned int index=0;index < aObj->size(); index++)         {             (*aObj)[index].setNameSpace(CM_ObjectPath(cop)->getNameSpace());         }         CMPI_Object *obj = new CMPI_Object(new CMPI_OpEnumeration(aObj));         return (CMPI_OpEnumeration *)obj->getHdl();      }      catch (const CIMException &e) {         DDD(cout<<"### exception: mbReferencesNames - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);         if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),            (CMPIString*)string2CMPIString(e.getMessage()));         return NULL;      }      // Code flow should never get here.   }#define CM_Args(args) ((Array<CIMParamValue>*)args->hdl)   static CMPIData mbInvokeMethod(const CMPIBroker *mb,                                  const CMPIContext *ctx,                                  const CMPIObjectPath *cop,                                  const char *method,                                  const CMPIArgs *in,                                  CMPIArgs *out,                                  CMPIStatus *rc)   {      DDD(cout<<"--- mbInvokeMethod()"<<endl);      CMPIData data={0,CMPI_nullValue,{0}};      mb=CM_BROKER;      CIMObjectPath qop(String::EMPTY,CIMNamespaceName(),            CM_ObjectPath(cop)->getClassName(),            CM_ObjectPath(cop)->getKeyBindings());      AutoMutex mtx(((CMPI_Broker*)mb)->mtx);      try {         CIMValue v=CM_CIMOM(mb)->invokeMethod(             OperationContext(*CM_Context(ctx)),             CM_ObjectPath(cop)->getNameSpace(),             qop,             method ? String(method) : String::EMPTY,             *CM_Args(in),             *CM_Args(out));         CIMType vType=v.getType();         CMPIType t=type2CMPIType(vType,v.isArray());         value2CMPIData(v,t,&data);         if (rc)         {             CMSetStatus(rc,CMPI_RC_OK);         }      }      catch (const CIMException &e) {         DDD(cout<<"### exception: mbInvokeMethod - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);         if (rc)         {             CMSetStatusWithString(rc,(CMPIrc)e.getCode(),                                   (CMPIString*)string2CMPIString(e.getMessage()));         }      }      return data; // "data" will be valid data or nullValue (in error case)   }   static CMPIStatus mbSetProperty(const CMPIBroker *mb, const CMPIContext *ctx,                  const CMPIObjectPath *cop, const char *name, const CMPIValue *val,                   CMPIType type) {      DDD(cout<<"--- mbSetProperty()"<<endl);      mb=CM_BROKER;      CMPIrc rc;      CIMValue v=value2CIMValue(val,type,&rc);      AutoMutex mtx(((CMPI_Broker*)mb)->mtx);      try {         CM_CIMOM(mb)->setProperty(         OperationContext(*CM_Context(ctx)),         CM_ObjectPath(cop)->getNameSpace(),         *CM_ObjectPath(cop),         String(name),         v);      }      catch (const CIMException &e) {         DDD(cout<<"### exception: mbSetProperty - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);         CMReturnWithString((CMPIrc)e.getCode(),            (CMPIString*)string2CMPIString(e.getMessage()));      }      CMReturn(CMPI_RC_OK);   }   static CMPIData mbGetProperty(const CMPIBroker *mb, const CMPIContext *ctx,                  const CMPIObjectPath *cop, const char *name, CMPIStatus *rc) {      DDD(cout<<"--- mbGetProperty()"<<endl);      mb=CM_BROKER;      CMPIData data={0,CMPI_nullValue,{0}};      AutoMutex mtx(((CMPI_Broker*)mb)->mtx);      try {         CIMValue v=CM_CIMOM(mb)->getProperty(         OperationContext(*CM_Context(ctx)),         CM_ObjectPath(cop)->getNameSpace(),         *CM_ObjectPath(cop),         String(name));         CIMType vType=v.getType();         CMPIType t=type2CMPIType(vType,v.isArray());         value2CMPIData(v,t,&data);         if (rc) CMSetStatus(rc,CMPI_RC_OK);      }      catch (const CIMException &e) {         DDD(cout<<"### exception: mbGetProperty - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);         if (rc) CMSetStatus(rc,(CMPIrc)e.getCode());      }      return data; // "data" will be valid data or nullValue (in error case)   }   static CMPIContext* mbPrepareAttachThread(const CMPIBroker* mb, const CMPIContext* eCtx) {      DDD(cout<<"--- mbPrepareAttachThread()"<<endl);      mb=CM_BROKER;      OperationContext *ctx=(OperationContext*)((CMPI_Context*)eCtx)->ctx;      OperationContext nctx=*ctx;      CMPIContext* neCtx=new CMPI_Context(*(new OperationContext(nctx)));      CMPIString *name;      for (int i=0,s=CMPI_Args_Ftab->getArgCount(reinterpret_cast<const CMPIArgs*>(eCtx),NULL); i<s; i++) {         CMPIData data=CMPI_Args_Ftab->getArgAt(reinterpret_cast<const CMPIArgs*>(eCtx),i,&name,NULL);         CMPI_Args_Ftab->addArg(reinterpret_cast<CMPIArgs*>(neCtx),CMGetCharPtr(name),&data.value,data.type);      }   return neCtx;   }   static CMPIStatus mbAttachThread(const CMPIBroker* mb, const CMPIContext* eCtx) {      DDD(cout<<"--- mbAttachThread()"<<endl);      ((CMPI_Context*)eCtx)->thr=new CMPI_ThreadContext(mb,eCtx);      CMReturn(CMPI_RC_OK);   }   static CMPIStatus mbDetachThread(const CMPIBroker* mb, const CMPIContext* eCtx) {      DDD(cout<<"--- mbDetachThread()"<<endl);      mb=CM_BROKER;      CMPI_Context *neCtx = (CMPI_Context *)eCtx;      delete neCtx->thr;      // Delete also CMPIContext      delete neCtx;      CMReturn(CMPI_RC_OK);   }   static CMPIStatus mbDeliverIndication(const CMPIBroker* eMb, const CMPIContext* ctx,               const char *ns, const CMPIInstance* ind) {      DDD(cout<<"--- mbDeliverIndication()"<<endl);      eMb=CM_BROKER;      CMPI_Broker *mb=(CMPI_Broker*)eMb;      CMPIProviderManager::indProvRecord *prec;      OperationContext* context=CM_Context(ctx);      // When an indication to be delivered comes from Remote providers,       // the CMPIBroker contains the name of the provider in the form       // of physical-name:logical-name. Search using logical-name. -V 5884      String provider_name;      CMPIUint32 n;      if ( (n = mb->name.find(':') ) != PEG_NOT_FOUND)      {          provider_name = mb->name.subString (n + 1);      }      else      {          provider_name = mb->name;      }      ReadLock readLock(CMPIProviderManager::rwSemProvTab);      if (CMPIProviderManager::provTab.lookup(provider_name,prec)) {         if (prec->enabled) {            try {               context->get(SubscriptionInstanceNamesContainer::NAME);            }            catch (const Exception &) {               Array<CIMObjectPath> subscriptionInstanceNames;               context->insert(SubscriptionInstanceNamesContainer(subscriptionInstanceNames));            }            CIMIndication cimIndication(*CM_Instance(ind));            AutoMutex mtx(((CMPI_Broker*)mb)->mtx);            try {               prec->handler->deliver(                  *context,   //               OperationContext(*CM_Context(ctx)),                  cimIndication);            CMReturn(CMPI_RC_OK);      }            catch (const CIMException &e) {               DDD(cout<<"### exception: mbSetProperty - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);               CMReturn((CMPIrc)e.getCode());            }         }      }      CMReturn(CMPI_RC_ERR_FAILED);   }}static CMPIBrokerFT broker_FT={     0, // brokerClassification;     CMPICurrentVersion,     "Pegasus",     mbPrepareAttachThread,     mbAttachThread,     mbDetachThread,     mbDeliverIndication,     mbEnumInstanceNames,     mbGetInstance,     mbCreateInstance,     mbModifyInstance,     mbDeleteInstance,     mbExecQuery,     mbEnumInstances,     mbAssociators,     mbAssociatorNames,     mbReferences,     mbReferenceNames,     mbInvokeMethod,     mbSetProperty,     mbGetProperty,};CMPIBrokerFT *CMPI_Broker_Ftab=& broker_FT;PEGASUS_NAMESPACE_END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -