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

📄 jmpiprovidermanager.cpp

📁 Pegasus is an open-source implementationof the DMTF CIM and WBEM standards. It is designed to be por
💻 CPP
📖 第 1 页 / 共 5 页
字号:
bool JMPIProviderManager::interfaceIsUsed (JNIEnv  *env,                                           jobject  jObject,                                           String   searchInterfaceName){   jobjectArray jInterfaces       = 0;   jsize        jInterfacesLength = 0;   bool         fFound            = false;   if (!jObject)   {      return false;   }   jInterfaces = (jobjectArray)env->CallObjectMethod (env->GetObjectClass (jObject),                                                      JMPIjvm::jv.ClassGetInterfaces);   if (!jInterfaces)   {      return false;   }   jInterfacesLength = env->GetArrayLength (jInterfaces);   for (jsize i = 0; !fFound && i < jInterfacesLength; i++)   {      jobject jInterface = env->GetObjectArrayElement (jInterfaces, i);      if (jInterface)      {         jstring jInterfaceName = (jstring)env->CallObjectMethod (jInterface,                                                                  JMPIjvm::jv.ClassGetName);         if (jInterfaceName)         {            const char *pszInterfaceName = env->GetStringUTFChars (jInterfaceName,                                                                   0);            String      interfaceName    = pszInterfaceName;            if (String::equal (interfaceName, searchInterfaceName))            {               fFound = true;            }            env->ReleaseStringUTFChars (jInterfaceName, pszInterfaceName);         }      }   }   return fFound;}JMPIProviderManager::IndProvTab    JMPIProviderManager::provTab;Mutex                              JMPIProviderManager::mutexProvTab;JMPIProviderManager::IndSelectTab  JMPIProviderManager::selxTab;Mutex                              JMPIProviderManager::mutexSelxTab;JMPIProviderManager::ProvRegistrar JMPIProviderManager::provReg;Mutex                              JMPIProviderManager::mutexProvReg;JMPIProviderManager::JMPIProviderManager(){   _subscriptionInitComplete = false;#ifdef PEGASUS_DEBUG   if (getenv("PEGASUS_JMPI_TRACE"))      JMPIProviderManager::trace = 1;   else      JMPIProviderManager::trace = 0;#else   JMPIProviderManager::trace = 0;#endif}JMPIProviderManager::~JMPIProviderManager(void){}Boolean JMPIProviderManager::insertProvider(const ProviderName & name,            const String &ns, const String &cn){    String key(ns+String("::")+cn+String("::")+CIMValue(name.getCapabilitiesMask()).toString());    DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::insertProvider: "<<key<<PEGASUS_STD(endl));    Boolean ret = false;    {       AutoMutex lock (mutexProvReg);       ret = provReg.insert(key,name);    }    return ret;}Message * JMPIProviderManager::processMessage(Message * request) throw(){    PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::processMessage()");    Message * response = 0;    // pass the request message to a handler method based on message type    switch(request->getType())    {    case CIM_GET_INSTANCE_REQUEST_MESSAGE:        response = handleGetInstanceRequest(request);        break;    case CIM_ENUMERATE_INSTANCES_REQUEST_MESSAGE:        response = handleEnumerateInstancesRequest(request);        break;    case CIM_ENUMERATE_INSTANCE_NAMES_REQUEST_MESSAGE:        response = handleEnumerateInstanceNamesRequest(request);        break;    case CIM_CREATE_INSTANCE_REQUEST_MESSAGE:        response = handleCreateInstanceRequest(request);        break;    case CIM_MODIFY_INSTANCE_REQUEST_MESSAGE:        response = handleModifyInstanceRequest(request);        break;    case CIM_DELETE_INSTANCE_REQUEST_MESSAGE:        response = handleDeleteInstanceRequest(request);        break;    case CIM_EXEC_QUERY_REQUEST_MESSAGE:        response = handleExecQueryRequest(request);        break;    case CIM_ASSOCIATORS_REQUEST_MESSAGE:        response = handleAssociatorsRequest(request);        break;    case CIM_ASSOCIATOR_NAMES_REQUEST_MESSAGE:        response = handleAssociatorNamesRequest(request);        break;    case CIM_REFERENCES_REQUEST_MESSAGE:        response = handleReferencesRequest(request);        break;    case CIM_REFERENCE_NAMES_REQUEST_MESSAGE:        response = handleReferenceNamesRequest(request);        break;    case CIM_GET_PROPERTY_REQUEST_MESSAGE:        response = handleGetPropertyRequest(request);        break;    case CIM_SET_PROPERTY_REQUEST_MESSAGE:        response = handleSetPropertyRequest(request);        break;    case CIM_INVOKE_METHOD_REQUEST_MESSAGE:        response = handleInvokeMethodRequest(request);        break;    case CIM_CREATE_SUBSCRIPTION_REQUEST_MESSAGE:        response = handleCreateSubscriptionRequest(request);        break;/*  case CIM_MODIFY_SUBSCRIPTION_REQUEST_MESSAGE:        response = handleModifySubscriptionRequest(request);        break;*/    case CIM_DELETE_SUBSCRIPTION_REQUEST_MESSAGE:        response = handleDeleteSubscriptionRequest(request);        break;/*  case CIM_EXPORT_INDICATION_REQUEST_MESSAGE:        response = handleExportIndicationRequest(request);        break;*/    case CIM_DISABLE_MODULE_REQUEST_MESSAGE:        response = handleDisableModuleRequest(request);        break;    case CIM_ENABLE_MODULE_REQUEST_MESSAGE:        response = handleEnableModuleRequest(request);        break;    case CIM_STOP_ALL_PROVIDERS_REQUEST_MESSAGE:        response = handleStopAllProvidersRequest(request);        break;    case CIM_INITIALIZE_PROVIDER_REQUEST_MESSAGE:        response = handleInitializeProviderRequest(request);        break;    case CIM_SUBSCRIPTION_INIT_COMPLETE_REQUEST_MESSAGE:        response = handleSubscriptionInitCompleteRequest (request);        break;    default:        PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,                         "*** Unsupported Request "+request->getType());        DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::processMessage: Unsupported request "<<request->getType ()<<PEGASUS_STD(endl));        response = handleUnsupportedRequest(request);        break;    }    PEG_METHOD_EXIT();    return(response);}Boolean JMPIProviderManager::hasActiveProviders(){     return providerManager.hasActiveProviders();}void JMPIProviderManager::unloadIdleProviders(){     providerManager.unloadIdleProviders();}#define STRDUPA(s,o) \   if (s) { \      o=(const char*)alloca(strlen(s)); \      strcpy((char*)(o),(s)); \   } \   else o=NULL;#define CHARS(cstring) (char*)(strlen(cstring)?(const char*)cstring:NULL)#define HandlerIntroBase(type,type1,message,request,response,handler) \    CIM##type##RequestMessage * request = \        dynamic_cast<CIM##type##RequestMessage *>(const_cast<Message *>(message)); \    PEGASUS_ASSERT(request != 0); \    CIM##type##ResponseMessage * response = \        dynamic_cast<CIM##type##ResponseMessage*>(request->buildResponse()); \    PEGASUS_ASSERT(response != 0); \    type1##ResponseHandler handler(request, response, _responseChunkCallback);#define HandlerIntroInd(type,message,request,response,handler) \     HandlerIntroBase(type,Operation,message,request,response,handler)#define HandlerIntroInit(type,message,request,response,handler) \     HandlerIntroBase(type,Operation,message,request,response,handler)#define HandlerIntro(type,message,request,response,handler) \     HandlerIntroBase(type,type,message,request,response,handler)#define HandlerCatch(handler) \    catch(CIMException & e)  \    { PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, \                "Exception: " + e.getMessage()); \        handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); \    } \    catch(Exception & e) \    { PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, \                "Exception: " + e.getMessage()); \        handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); \    } \    catch(...) \    { PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, \                "Exception: Unknown"); \        handler.setStatus(CIM_ERR_FAILED, "Unknown error."); \    }static jobjectArray getList(JvmVector *jv, JNIEnv *env, CIMPropertyList &list){    Uint32 s=list.size();    jobjectArray pl=NULL;    if (s) {       jstring initial=env->NewString(NULL,0);       pl=(jobjectArray)env->NewObjectArray(s,jv->StringClassRef,initial);       for (Uint32 i=0; i<s; i++) {           env->SetObjectArrayElement              (pl,i,env->NewStringUTF(list[i].getString().getCString()));       }    }    return pl;}Message * JMPIProviderManager::handleGetInstanceRequest(const Message * message) throw(){    PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleGetInstanceRequest");    HandlerIntro(GetInstance,message,request,response,handler);    typedef enum {       METHOD_UNKNOWN = 0,       METHOD_CIMINSTANCEPROVIDER,       METHOD_INSTANCEPROVIDER,       METHOD_INSTANCEPROVIDER2, // same as METHOD_CIMINSTANCEPROVIDER2    } METHOD_VERSION;

⌨️ 快捷键说明

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