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

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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2