📄 jmpiprovidermanager.cpp
字号:
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 + -