1 karl 1.15 //%2003////////////////////////////////////////////////////////////////////////
|
2 chip 1.1 //
|
3 karl 1.15 // Copyright (c) 2000, 2001, 2002 BMC Software, Hewlett-Packard Development
4 // Company, L. P., IBM Corp., The Open Group, Tivoli Systems.
5 // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L. P.;
6 // IBM Corp.; EMC Corporation, The Open Group.
|
7 chip 1.1 //
8 // Permission is hereby granted, free of charge, to any person obtaining a copy
9 // of this software and associated documentation files (the "Software"), to
10 // deal in the Software without restriction, including without limitation the
11 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
12 // sell copies of the Software, and to permit persons to whom the Software is
13 // furnished to do so, subject to the following conditions:
|
14 chip 1.17 //
|
15 chip 1.1 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
16 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
17 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
18 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
19 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
20 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
21 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 //
24 //==============================================================================
25 //
26 // Author: Chip Vincent (cvincent@us.ibm.com)
27 //
28 // Modified By: Carol Ann Krug Graves, Hewlett-Packard Company
29 // (carolann_graves@hp.com)
30 // Mike Day, IBM (mdday@us.ibm.com)
31 // Karl Schopmeyer(k.schopmeyer@opengroup.org) - Fix associators.
|
32 chip 1.9 // Yi Zhou, Hewlett-Packard Company (yi_zhou@hp.com)
|
33 schuur 1.19 // Adrian Schuur, IBM (schuur@de.ibm.com)
|
34 chip 1.1 //
35 //%/////////////////////////////////////////////////////////////////////////////
36
37 #include "ProviderManagerService.h"
38
39 #include <Pegasus/Common/Config.h>
40 #include <Pegasus/Common/Constants.h>
41 #include <Pegasus/Common/CIMMessage.h>
42 #include <Pegasus/Common/Tracer.h>
43 #include <Pegasus/Common/Logger.h>
44 #include <Pegasus/Common/Destroyer.h>
45
|
46 chip 1.6 #include <Pegasus/Config/ConfigManager.h>
47
|
48 chip 1.17 #include <Pegasus/ProviderManager2/ProviderManagerModule.h>
49 #include <Pegasus/ProviderManager2/ProviderManager.h>
50
|
51 chip 1.1 PEGASUS_NAMESPACE_BEGIN
52
|
53 chip 1.13 // BEGIN TEMP SECTION
|
54 chip 1.11 class ProviderManagerContainer
|
55 chip 1.5 {
|
56 chip 1.11 public:
|
57 chip 1.17 ProviderManagerContainer(void) : _manager(0)
58 {
59 }
60
61 ProviderManagerContainer(const ProviderManagerContainer & container) : _manager(0)
62 {
63 *this = container;
64 }
65
66 ProviderManagerContainer(const String & physicalName, const String & logicalName, const String & interfaceName) : _manager(0)
|
67 chip 1.11 {
68 #if defined(PEGASUS_OS_TYPE_WINDOWS)
69 _physicalName = physicalName + String(".dll");
70 #elif defined(PEGASUS_OS_HPUX) && defined(PEGASUS_PLATFORM_HPUX_PARISC_ACC)
71 _physicalName = ConfigManager::getHomedPath(ConfigManager::getInstance()->getCurrentValue("providerDir"));
|
72 kv.le 1.16 _physicalName.append(String("/lib") + physicalName + String(".sl"));
|
73 chip 1.11 #elif defined(PEGASUS_OS_HPUX) && !defined(PEGASUS_PLATFORM_HPUX_PARISC_ACC)
74 _physicalName = ConfigManager::getHomedPath(ConfigManager::getInstance()->getCurrentValue("providerDir"));
|
75 kv.le 1.16 _physicalName.append(String("/lib") + physicalName + String(".so"));
|
76 chip 1.11 #elif defined(PEGASUS_OS_OS400)
77 _physicalName = physicalName;
78 #else
79 _physicalName = ConfigManager::getHomedPath(ConfigManager::getInstance()->getCurrentValue("providerDir"));
|
80 kv.le 1.16 _physicalName.append(String("/lib") + physicalName + String(".so"));
|
81 chip 1.11 #endif
|
82 chip 1.3
|
83 chip 1.11 _logicalName = logicalName;
84
85 _interfaceName = interfaceName;
|
86 chip 1.13
87 _module = ProviderManagerModule(_physicalName);
88
89 _module.load();
90
91 _manager = _module.getProviderManager(_logicalName);
|
92 chip 1.17
93 PEGASUS_ASSERT(_manager != 0);
|
94 chip 1.11 }
95
|
96 chip 1.13 ~ProviderManagerContainer(void)
97 {
98 _module.unload();
99 }
100
|
101 chip 1.17 ProviderManagerContainer & operator=(const ProviderManagerContainer & container)
102 {
103 if(this == &container)
104 {
105 return(*this);
106 }
107
108 _logicalName = container._logicalName;
109 _physicalName = container._physicalName;
110 _interfaceName = container._interfaceName;
111
112 _module = container._module;
113 _manager = container._manager;
114
115 return(*this);
116 }
117
|
118 schuur 1.19 ProviderManager *getProviderManager(void)
|
119 chip 1.13 {
|
120 schuur 1.19 return _manager;
|
121 chip 1.13 }
122
|
123 chip 1.17 const String & getPhysicalName(void) const
|
124 chip 1.3 {
|
125 chip 1.11 return(_physicalName);
|
126 chip 1.3 }
127
|
128 chip 1.17 const String & getLogicalName(void) const
|
129 chip 1.11 {
130 return(_logicalName);
131 }
|
132 chip 1.3
|
133 chip 1.17 const String & getInterfaceName(void) const
|
134 chip 1.11 {
135 return(_interfaceName);
|
136 chip 1.3 }
137
|
138 chip 1.11 private:
139 String _physicalName;
140 String _logicalName;
141 String _interfaceName;
|
142 chip 1.3
|
143 chip 1.13 ProviderManagerModule _module;
144 ProviderManager * _manager;
145
|
146 chip 1.11 };
|
147 chip 1.13
|
148 schuur 1.19 static Array<ProviderManagerContainer*> _providerManagers;
|
149 chip 1.11 // END TEMP SECTION
150
151 inline Boolean _isSupportedRequestType(const Message * message)
152 {
153 // ATTN: needs implementation
154
155 // for now, assume all requests are valid
156
157 return(true);
|
158 chip 1.3 }
159
160 inline Boolean _isSupportedResponseType(const Message * message)
161 {
|
162 chip 1.11 // ATTN: needs implementation
163
164 // for now, assume all responses are invalid
|
165 chip 1.3
|
166 chip 1.11 return(false);
|
167 chip 1.3 }
168
|
169 schuur 1.19 ProviderManagerService* ProviderManagerService::providerManagerService=NULL;
170
|
171 chip 1.1 ProviderManagerService::ProviderManagerService(void)
172 : MessageQueueService(PEGASUS_QUEUENAME_PROVIDERMANAGER_CPP)
173 {
|
174 schuur 1.19 providerManagerService=this;
|
175 chip 1.1 }
176
177 ProviderManagerService::ProviderManagerService(ProviderRegistrationManager * providerRegistrationManager)
178 : MessageQueueService(PEGASUS_QUEUENAME_PROVIDERMANAGER_CPP)
179 {
|
180 schuur 1.19 providerManagerService=this;
|
181 chip 1.10 SetProviderRegistrationManager(providerRegistrationManager);
182
|
183 chip 1.11 // ATTN: this section is a temporary solution to populate the list of enabled
184 // provider managers for a given distribution. it includes another temporary
185 // solution for converting a generic file name into a file name useable by
186 // each platform.
187
188 // BEGIN TEMP SECTION
189 //#if defined(PEGASUS_OS_OS400)
|
190 chip 1.13 //_providerManagers.append(ProviderManagerContainer("QSYS/??????????", "INTERNAL", "INTERNAL"));
|
191 chip 1.11 //#else
|
192 chip 1.13 //_providerManager.append(ProviderManagerContainer("InternalProviderManager", "DEFAULT", "INTERNAL"));
|
193 chip 1.11 //#endif
|
194 chip 1.2
|
195 chip 1.11 #if defined(ENABLE_DEFAULT_PROVIDER_MANAGER)
196 #if defined(PEGASUS_OS_OS400)
|
197 schuur 1.19 _providerManagers.append(
198 new ProviderManagerContainer("QSYS/QYCMDFTPVM", "DEFAULT", "C++Default"));
|
199 chip 1.11 #else
|
200 schuur 1.19 _providerManagers.append(
201 new ProviderManagerContainer("DefaultProviderManager", "DEFAULT", "C++Default"));
|
202 chip 1.11 #endif
203 #endif
|
204 chip 1.2
|
205 chip 1.11 #if defined(ENABLE_CMPI_PROVIDER_MANAGER)
206 #if defined(PEGASUS_OS_OS400)
|
207 schuur 1.19 _providerManagers.append(
208 new ProviderManagerContainer("QSYS/QYCMCMPIPM", "CMPI", "CMPI"));
|
209 chip 1.11 #else
|
210 schuur 1.19 _providerManagers.append(
211 new ProviderManagerContainer("CMPIProviderManager", "CMPI", "CMPI"));
|
212 chip 1.11 #endif
213 #endif
214 // END TEMP SECTION
|
215 chip 1.1 }
216
217 ProviderManagerService::~ProviderManagerService(void)
218 {
|
219 schuur 1.19 providerManagerService=NULL;
|
220 chip 1.1 }
221
222 Boolean ProviderManagerService::messageOK(const Message * message)
223 {
224 PEGASUS_ASSERT(message != 0);
225
|
226 chip 1.3 if(_isSupportedRequestType(message))
|
227 chip 1.1 {
|
228 chip 1.3 return(MessageQueueService::messageOK(message));
|
229 chip 1.1 }
230
|
231 chip 1.3 return(false);
|
232 chip 1.1 }
233
234 void ProviderManagerService::handleEnqueue(void)
235 {
236 Message * message = dequeue();
237
238 handleEnqueue(message);
239 }
240
241 void ProviderManagerService::handleEnqueue(Message * message)
242 {
243 PEGASUS_ASSERT(message != 0);
244
245 AsyncLegacyOperationStart * asyncRequest;
246
247 if(message->_async != NULL)
248 {
249 asyncRequest = static_cast<AsyncLegacyOperationStart *>(message->_async);
250 }
251 else
252 {
253 chip 1.1 asyncRequest = new AsyncLegacyOperationStart(
254 get_next_xid(),
255 0,
256 this->getQueueId(),
257 message,
258 this->getQueueId());
259 }
260
261 _handle_async_request(asyncRequest);
262 }
263
264 void ProviderManagerService::_handle_async_request(AsyncRequest * request)
265 {
266 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
267 "ProviderManagerService::_handle_async_request");
268
269 PEGASUS_ASSERT((request != 0) && (request->op != 0));
270
271 if(request->getType() == async_messages::ASYNC_LEGACY_OP_START)
272 {
273 request->op->processing();
274 chip 1.1
275 _incomingQueue.enqueue(request->op);
276
277 _thread_pool->allocate_and_awaken((void *)this, ProviderManagerService::handleCimOperation);
278 }
279 else
280 {
281 // pass all other operations to the default handler
282 MessageQueueService::_handle_async_request(request);
283 }
284
285 PEG_METHOD_EXIT();
286
287 return;
288 }
289
290 /*
291 PEGASUS_THREAD_RETURN PEGASUS_THREAD_CDECL ProviderManagerService::handleServiceOperation(void * arg) throw()
292 {
293 // get the service from argument
294 ProviderManagerService * service = reinterpret_cast<ProviderManagerService *>(arg);
295 chip 1.1
296 PEGASUS_ASSERT(service != 0);
297
298 // get message from service queue
299 Message * message = service->_incomingQueue.dequeue();
300
301 PEGASUS_ASSERT(message != 0);
302
303 if(service->_incomingQueue.size() == 0)
304 {
305 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
306 "ProviderManagerService::handleCimOperation() called with no op node in queue" );
307
308 PEG_METHOD_EXIT();
309
310 // thread started with no message in queue.
311 return(PEGASUS_THREAD_RETURN(1));
312 }
313
314 AsyncOpNode * op = service->_incomingQueue.dequeue();
315
316 chip 1.1 PEGASUS_ASSERT(op != 0 );
317
318 if(op->_request.count() == 0)
319 {
320 MessageQueue * queue = MessageQueue::lookup(op->_source_queue);
321
322 PEGASUS_ASSERT(queue != 0);
323
324 PEG_METHOD_EXIT();
325
326 // no request in op node
327 return(PEGASUS_THREAD_RETURN(1));
328 }
329
330 return(0);
331 }
332 */
333
334 PEGASUS_THREAD_RETURN PEGASUS_THREAD_CDECL ProviderManagerService::handleCimOperation(void * arg) throw()
335 {
336 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "ProviderManagerService::handleCimOperation");
337 chip 1.1
|
338 chip 1.8 if(arg == 0)
339 {
340 // thread started with invalid argument.
341 return(PEGASUS_THREAD_RETURN(1));
342 }
343
|
344 chip 1.1 // get the service from argument
345 ProviderManagerService * service = reinterpret_cast<ProviderManagerService *>(arg);
346
347 if(service->_incomingQueue.size() == 0)
348 {
349 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
350 "ProviderManagerService::handleCimOperation() called with no op node in queue" );
351
352 PEG_METHOD_EXIT();
353
354 // thread started with no message in queue.
355 return(PEGASUS_THREAD_RETURN(1));
356 }
357
358 AsyncOpNode * op = service->_incomingQueue.dequeue();
359
|
360 chip 1.8 if((op == 0) || (op->_request.count() == 0))
|
361 chip 1.1 {
362 MessageQueue * queue = MessageQueue::lookup(op->_source_queue);
363
364 PEGASUS_ASSERT(queue != 0);
365
366 PEG_METHOD_EXIT();
367
368 // no request in op node
369 return(PEGASUS_THREAD_RETURN(1));
370 }
371
372 AsyncRequest * request = static_cast<AsyncRequest *>(op->_request.next(0));
373
|
374 chip 1.8 if((request == 0) || (request->getType() != async_messages::ASYNC_LEGACY_OP_START))
|
375 chip 1.1 {
376 // reply with NAK
377
378 PEG_METHOD_EXIT();
379
380 return(PEGASUS_THREAD_RETURN(0));
381 }
382
|
383 chip 1.8 try
|
384 chip 1.1 {
|
385 chip 1.8 Message * legacy = static_cast<AsyncLegacyOperationStart *>(request)->get_action();
|
386 chip 1.1
|
387 chip 1.8 if(_isSupportedRequestType(legacy))
|
388 chip 1.1 {
|
389 chip 1.8 Destroyer<Message> xmessage(legacy);
|
390 chip 1.1
|
391 chip 1.8 // Set the client's requested language into this service thread.
392 // This will allow functions in this service to return messages
393 // in the correct language.
394 CIMMessage * msg = dynamic_cast<CIMMessage *>(legacy);
395
396 if(msg != 0)
397 {
398 AcceptLanguages * langs = new AcceptLanguages(msg->acceptLanguages);
399
400 Thread::setLanguages(langs);
401 }
402 else
403 {
404 Thread::clearLanguages();
405 }
|
406 chip 1.1
407 service->handleCimRequest(op, legacy);
|
408 chip 1.3 }
|
409 chip 1.8 }
410 catch(...)
411 {
412 // ATTN: log error
|
413 chip 1.1 }
414
415 PEG_METHOD_EXIT();
416
417 return(PEGASUS_THREAD_RETURN(0));
418 }
419
|
420 chip 1.8 void ProviderManagerService::handleCimRequest(AsyncOpNode * op, const Message * message)
|
421 chip 1.1 {
422 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "ProviderManagerService::handleCimRequest");
423
424 // ATTN: ensure message is a request???
425 CIMMessage * request = dynamic_cast<CIMMessage *>(const_cast<Message *>(message));
426
427 // get request from op node
428 AsyncRequest * async = static_cast<AsyncRequest *>(op->_request.next(0));
429
430 PEGASUS_ASSERT((request != 0) && (async != 0));
431
432 Message * response = 0;
433
|
434 schuur 1.19 // get the responsible provider Manager
435 ProviderManager *pm=locateProviderManager(message);
436 if (pm) {
437 response = pm->processMessage(request);
438 }
439 else {
440 // no provider manager found ...
441 }
|
442 chip 1.13
|
443 schuur 1.19 // preserve message key
444 response->setKey(request->getKey());
|
445 chip 1.13
|
446 schuur 1.19 // set HTTP method in response from request
447 response->setHttpMethod(request->getHttpMethod());
|
448 chip 1.13
|
449 schuur 1.19 AsyncLegacyOperationResult * async_result =
450 new AsyncLegacyOperationResult(
451 async->getKey(),
452 async->getRouting(),
453 op,
454 response);
|
455 chip 1.13
|
456 schuur 1.19 _complete_op_node(op, ASYNC_OPSTATE_COMPLETE, 0, 0);
|
457 chip 1.13
|
458 schuur 1.19 PEG_METHOD_EXIT();
459 }
|
460 chip 1.13
|
461 schuur 1.19 ProviderManager* ProviderManagerService::locateProviderManager(const Message *message)
462 {
463 String nameSpace;
464 String className;
465 Uint32 type=ProviderType::INSTANCE;
|
466 chip 1.13
|
467 schuur 1.19 switch(message->getType())
468 {
|
469 chip 1.13 case CIM_GET_INSTANCE_REQUEST_MESSAGE:
470 {
471 const CIMGetInstanceRequestMessage * p = dynamic_cast<const CIMGetInstanceRequestMessage *>(message);
472
473 PEGASUS_ASSERT(p != 0);
474
475 nameSpace = p->nameSpace.getString();
|
476 schuur 1.19 className = p->instanceName.getClassName();
|
477 chip 1.13 }
478
479 break;
480 case CIM_ENUMERATE_INSTANCES_REQUEST_MESSAGE:
481 {
482 const CIMEnumerateInstancesRequestMessage * p = dynamic_cast<const CIMEnumerateInstancesRequestMessage *>(message);
483
484 PEGASUS_ASSERT(p != 0);
485
486 nameSpace = p->nameSpace.getString();
487 className = p->className.getString();
488 }
489
490 break;
491 case CIM_ENUMERATE_INSTANCE_NAMES_REQUEST_MESSAGE:
492 {
493 const CIMEnumerateInstanceNamesRequestMessage * p = dynamic_cast<const CIMEnumerateInstanceNamesRequestMessage *>(message);
494
495 PEGASUS_ASSERT(p != 0);
496
497 nameSpace = p->nameSpace.getString();
498 chip 1.13 className = p->className.getString();
499 }
500
501 break;
502 case CIM_CREATE_INSTANCE_REQUEST_MESSAGE:
503 {
504 const CIMCreateInstanceRequestMessage * p = dynamic_cast<const CIMCreateInstanceRequestMessage *>(message);
505
506 PEGASUS_ASSERT(p != 0);
507
508 nameSpace = p->nameSpace.getString();
|
509 schuur 1.19 className = p->newInstance.getClassName();
|
510 chip 1.13 }
511
512 break;
513 case CIM_MODIFY_INSTANCE_REQUEST_MESSAGE:
514 {
515 const CIMModifyInstanceRequestMessage * p = dynamic_cast<const CIMModifyInstanceRequestMessage *>(message);
516
517 PEGASUS_ASSERT(p != 0);
518
519 nameSpace = p->nameSpace.getString();
|
520 schuur 1.19 className = p->modifiedInstance.getClassName();
|
521 chip 1.13 }
522
523 break;
524 case CIM_DELETE_INSTANCE_REQUEST_MESSAGE:
525 {
526 const CIMDeleteInstanceRequestMessage * p = dynamic_cast<const CIMDeleteInstanceRequestMessage *>(message);
527
528 PEGASUS_ASSERT(p != 0);
529
530 nameSpace = p->nameSpace.getString();
|
531 schuur 1.19 className = p->instanceName.getClassName();
|
532 chip 1.13 }
533
534 break;
535 case CIM_EXEC_QUERY_REQUEST_MESSAGE:
536 break;
537 case CIM_ASSOCIATORS_REQUEST_MESSAGE:
538 {
539 const CIMAssociatorsRequestMessage * p = dynamic_cast<const CIMAssociatorsRequestMessage *>(message);
540
541 PEGASUS_ASSERT(p != 0);
542
543 nameSpace = p->nameSpace.getString();
|
544 schuur 1.19 className = p->assocClass.getString();
545 type=ProviderType::ASSOCIATION;
|
546 chip 1.13 }
547
548 break;
549 case CIM_ASSOCIATOR_NAMES_REQUEST_MESSAGE:
550 {
551 const CIMAssociatorNamesRequestMessage * p = dynamic_cast<const CIMAssociatorNamesRequestMessage *>(message);
552
553 PEGASUS_ASSERT(p != 0);
554
555 nameSpace = p->nameSpace.getString();
|
556 schuur 1.19 className = p->assocClass.getString();
557 std::cout<<"--- className: "<<className<<std::endl;
558 type=ProviderType::ASSOCIATION;
|
559 chip 1.13 }
560
561 break;
562 case CIM_REFERENCES_REQUEST_MESSAGE:
563 {
564 const CIMReferencesRequestMessage * p = dynamic_cast<const CIMReferencesRequestMessage *>(message);
565
566 PEGASUS_ASSERT(p != 0);
567
568 nameSpace = p->nameSpace.getString();
|
569 schuur 1.19 className = p->resultClass.getString();
570 type=ProviderType::ASSOCIATION;
571 }
|
572 chip 1.13
573 break;
574 case CIM_REFERENCE_NAMES_REQUEST_MESSAGE:
575 {
576 const CIMReferenceNamesRequestMessage * p = dynamic_cast<const CIMReferenceNamesRequestMessage *>(message);
577
578 PEGASUS_ASSERT(p != 0);
579
580 nameSpace = p->nameSpace.getString();
|
581 schuur 1.19 className = p->resultClass.getString();
582 type=ProviderType::ASSOCIATION;
583 }
|
584 chip 1.13
585 break;
|
586 schuur 1.19 case CIM_INVOKE_METHOD_REQUEST_MESSAGE:
|
587 chip 1.13 {
588 const CIMInvokeMethodRequestMessage * p = dynamic_cast<const CIMInvokeMethodRequestMessage *>(message);
589
590 PEGASUS_ASSERT(p != 0);
591
592 nameSpace = p->nameSpace.getString();
|
593 schuur 1.19 type=ProviderType::METHOD;
|
594 chip 1.13 }
595
596 break;
597
|
598 schuur 1.19 case CIM_CREATE_SUBSCRIPTION_REQUEST_MESSAGE:
|
599 chip 1.13 {
|
600 schuur 1.19 const CIMCreateSubscriptionRequestMessage * p = dynamic_cast<const CIMCreateSubscriptionRequestMessage *>(message);
|
601 chip 1.13
602 PEGASUS_ASSERT(p != 0);
603 nameSpace = p->nameSpace.getString();
|
604 schuur 1.19 std::cout<<"--- nameSpace: "<<nameSpace<<std::endl;
605 className = p->classNames[0].getString();
606 std::cout<<"--- className: "<<className<<std::endl;
607 type=ProviderType::INDICATION;
|
608 chip 1.13 }
609
610 break;
611 default:
|
612 schuur 1.19 asm("int $3");
|
613 chip 1.13 break;
614 }
615
|
616 chip 1.11 ProviderName name(
|
617 chip 1.13 CIMObjectPath(String::EMPTY, nameSpace, className).toString(),
|
618 chip 1.11 String::EMPTY,
619 String::EMPTY,
620 String::EMPTY,
|
621 schuur 1.19 type);
622
623 std::cout<<"--- name: "<<name.toString()<<std::endl;
|
624 chip 1.11
|
625 chip 1.1 // find provider manager
|
626 chip 1.13 name = ProviderRegistrar().findProvider(name);
|
627 chip 1.11
|
628 schuur 1.19 std::cout<<"--- name.getInterfaceName(): "<<name.getInterfaceName()<<std::endl;
629
|
630 chip 1.11 // find provider manager for provider interface
|
631 chip 1.14 for(Uint32 i = 0, n = _providerManagers.size(); i < n; i++)
632 {
|
633 schuur 1.19 if (String::equalNoCase(name.getInterfaceName(), _providerManagers[i]->getInterfaceName())) {
634 ProviderManagerContainer *pmc=_providerManagers[i];
635 return pmc->getProviderManager();
|
636 chip 1.14 }
|
637 chip 1.1 }
|
638 schuur 1.19 return NULL;
|
639 chip 1.1 }
640
641 void ProviderManagerService::unload_idle_providers(void)
642 {
643 }
644
645 PEGASUS_NAMESPACE_END
|
646 chip 1.9
|