(file) Return to ProviderManagerService.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / ProviderManager2

  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  

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2