1 karl 1.7 //%2003////////////////////////////////////////////////////////////////////////
|
2 chip 1.1 //
|
3 karl 1.7 // 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 schuur 1.19 //
|
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 // Yi Zhou, Hewlett-Packard Company (yi_zhou@hp.com)
33 //
34 //%/////////////////////////////////////////////////////////////////////////////
35
36 chip 1.1 #include "DefaultProviderManager.h"
37
38 #include <Pegasus/Common/CIMMessage.h>
39 #include <Pegasus/Common/OperationContext.h>
40 #include <Pegasus/Common/Destroyer.h>
41 #include <Pegasus/Common/Tracer.h>
42 #include <Pegasus/Common/StatisticalData.h>
43 #include <Pegasus/Common/Logger.h>
44 #include <Pegasus/Common/MessageLoader.h> //l10n
45
|
46 schuur 1.12 #include <Pegasus/Common/QueryExpression.h>
47 #include <Pegasus/ProviderManager2/QueryExpressionFactory.h>
48
|
49 chip 1.1 #include <Pegasus/Config/ConfigManager.h>
50
51 #include <Pegasus/ProviderManager2/Default/Provider.h>
52 #include <Pegasus/ProviderManager2/Default/OperationResponseHandler.h>
53
54 #include <Pegasus/Server/ProviderRegistrationManager/ProviderRegistrationManager.h>
|
55 schuur 1.14 #include <Pegasus/ProviderManager2/ProviderManagerService.h>
|
56 chip 1.1
57 PEGASUS_NAMESPACE_BEGIN
58
59 // auto variable to protect provider during operations
60 class pm_service_op_lock
61 {
62 private:
63 pm_service_op_lock(void);
64
65 public:
66 pm_service_op_lock(Provider *provider) : _provider(provider)
67 {
68 _provider->protect();
69 }
70
71 ~pm_service_op_lock(void)
72 {
73 _provider->unprotect();
74 }
75
76 Provider * _provider;
77 chip 1.1 };
78
79 //
80 // Provider module status
81 //
82 static const Uint16 _MODULE_OK = 2;
83 static const Uint16 _MODULE_STOPPING = 9;
84 static const Uint16 _MODULE_STOPPED = 10;
85
86 // provider manager
|
87 schuur 1.10 static LocalProviderManager providerManager;
|
88 chip 1.1
89 DefaultProviderManager::DefaultProviderManager(void)
90 {
91 }
92
93 DefaultProviderManager::~DefaultProviderManager(void)
94 {
95 }
96
|
97 kumpf 1.3 Message * DefaultProviderManager::processMessage(Message * request) throw()
|
98 chip 1.1 {
99 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
100 "DefaultProviderManager::processMessage()");
101
102 Message * response = 0;
103
104 // pass the request message to a handler method based on message type
105 switch(request->getType())
106 {
107 case CIM_GET_INSTANCE_REQUEST_MESSAGE:
108 response = handleGetInstanceRequest(request);
109
110 break;
111 case CIM_ENUMERATE_INSTANCES_REQUEST_MESSAGE:
112 response = handleEnumerateInstancesRequest(request);
113
114 break;
115 case CIM_ENUMERATE_INSTANCE_NAMES_REQUEST_MESSAGE:
116 response = handleEnumerateInstanceNamesRequest(request);
117
118 break;
119 chip 1.1 case CIM_CREATE_INSTANCE_REQUEST_MESSAGE:
120 response = handleCreateInstanceRequest(request);
121
122 break;
123 case CIM_MODIFY_INSTANCE_REQUEST_MESSAGE:
124 response = handleModifyInstanceRequest(request);
125
126 break;
127 case CIM_DELETE_INSTANCE_REQUEST_MESSAGE:
128 response = handleDeleteInstanceRequest(request);
129
130 break;
131 case CIM_EXEC_QUERY_REQUEST_MESSAGE:
|
132 schuur 1.12 response = handleExecQueryRequest(request);
|
133 chip 1.1
134 break;
135 case CIM_ASSOCIATORS_REQUEST_MESSAGE:
136 response = handleAssociatorsRequest(request);
137
138 break;
139 case CIM_ASSOCIATOR_NAMES_REQUEST_MESSAGE:
140 response = handleAssociatorNamesRequest(request);
141
142 break;
143 case CIM_REFERENCES_REQUEST_MESSAGE:
144 response = handleReferencesRequest(request);
145
146 break;
147 case CIM_REFERENCE_NAMES_REQUEST_MESSAGE:
148 response = handleReferenceNamesRequest(request);
149
150 break;
151 case CIM_GET_PROPERTY_REQUEST_MESSAGE:
152 response = handleGetPropertyRequest(request);
153
154 chip 1.1 break;
155 case CIM_SET_PROPERTY_REQUEST_MESSAGE:
156 response = handleSetPropertyRequest(request);
157
158 break;
159 case CIM_INVOKE_METHOD_REQUEST_MESSAGE:
160 response = handleInvokeMethodRequest(request);
161
162 break;
163 case CIM_CREATE_SUBSCRIPTION_REQUEST_MESSAGE:
164 response = handleCreateSubscriptionRequest(request);
165
166 break;
167 case CIM_MODIFY_SUBSCRIPTION_REQUEST_MESSAGE:
168 response = handleModifySubscriptionRequest(request);
169
170 break;
171 case CIM_DELETE_SUBSCRIPTION_REQUEST_MESSAGE:
172 response = handleDeleteSubscriptionRequest(request);
173
174 break;
175 chip 1.1 case CIM_ENABLE_INDICATIONS_REQUEST_MESSAGE:
176 response = handleEnableIndicationsRequest(request);
177
178 break;
179 case CIM_DISABLE_INDICATIONS_REQUEST_MESSAGE:
180 response = handleDisableIndicationsRequest(request);
181
182 break;
183 case CIM_CONSUME_INDICATION_REQUEST_MESSAGE:
184 response = handleConsumeIndicationRequest(request);
185 break;
186
|
187 schuur 1.14 case CIM_EXPORT_INDICATION_REQUEST_MESSAGE:
188 response = handleExportIndicationRequest(request);
189 break;
190
|
191 chip 1.1 case CIM_DISABLE_MODULE_REQUEST_MESSAGE:
192 response = handleDisableModuleRequest(request);
193
194 break;
195 case CIM_ENABLE_MODULE_REQUEST_MESSAGE:
196 response = handleEnableModuleRequest(request);
197
198 break;
199 case CIM_STOP_ALL_PROVIDERS_REQUEST_MESSAGE:
200 response = handleStopAllProvidersRequest(request);
201
202 break;
203 default:
204 response = handleUnsupportedRequest(request);
205
206 break;
207 }
208
209 PEG_METHOD_EXIT();
210
211 return(response);
212 chip 1.1 }
213
214 Message * DefaultProviderManager::handleUnsupportedRequest(const Message * message) throw()
215 {
216 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleUnsupportedRequest");
217
218 PEG_METHOD_EXIT();
219
220 // a null response implies unsupported or unknown operation
221 return(0);
222 }
223
224 Message * DefaultProviderManager::handleGetInstanceRequest(const Message * message) throw()
225 {
226 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleGetInstanceRequest");
227
228 CIMGetInstanceRequestMessage * request =
229 dynamic_cast<CIMGetInstanceRequestMessage *>(const_cast<Message *>(message));
230
231 PEGASUS_ASSERT(request != 0);
232
233 chip 1.1 CIMGetInstanceResponseMessage * response =
234 new CIMGetInstanceResponseMessage(
235 request->messageId,
236 CIMException(),
237 request->queueIds.copyAndPop(),
238 CIMInstance());
239
240 PEGASUS_ASSERT(response != 0);
241
242 // preserve message key
243 response->setKey(request->getKey());
244
245 // Set HTTP method in response from request
246 response->setHttpMethod(request->getHttpMethod());
247
248 // create a handler for this request
249 GetInstanceResponseHandler handler(request, response);
250
251 try
252 {
253 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
254 chip 1.1 "DefaultProviderManager::handleGetInstanceRequest - Host name: $0 Name space: $1 Class name: $2",
255 System::getHostName(),
256 request->nameSpace.getString(),
257 request->instanceName.getClassName().getString());
258
259 // make target object path
260 CIMObjectPath objectPath(
261 System::getHostName(),
262 request->nameSpace,
263 request->instanceName.getClassName(),
264 request->instanceName.getKeyBindings());
265
|
266 chip 1.4 ProviderName name(
|
267 schuur 1.20 objectPath,
|
268 schuur 1.11 ProviderType::INSTANCE);
|
269 chip 1.1
|
270 chip 1.5 // resolve provider name
271 name = _resolveProviderName(name);
|
272 chip 1.1
273 // get cached or load new provider module
274 OpProviderHolder ph =
|
275 schuur 1.10 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
|
276 chip 1.1
277 // convert arguments
278 OperationContext context;
279
280 context.insert(IdentityContainer(request->userName));
281 context.insert(AcceptLanguageListContainer(request->acceptLanguages));
282 context.insert(ContentLanguageListContainer(request->contentLanguages));
283
284 CIMPropertyList propertyList(request->propertyList);
285
286 // forward request
287 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
288 "Calling provider.getInstance: " +
289 ph.GetProvider().getName());
290
291 pm_service_op_lock op_lock(&ph.GetProvider());
292
293 STAT_GETSTARTTIME;
294
295 ph.GetProvider().getInstance(
296 context,
297 chip 1.1 objectPath,
298 request->includeQualifiers,
299 request->includeClassOrigin,
300 propertyList,
301 handler);
302
303 STAT_PMS_PROVIDEREND;
304 }
305 catch(CIMException & e)
306 {
307 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
308 "Exception: " + e.getMessage());
309
310 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
311 }
312 catch(Exception & e)
313 {
314 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
315 "Exception: " + e.getMessage());
|
316 chip 1.2
|
317 chip 1.1 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
318 }
319 catch(...)
320 {
321 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
322 "Exception: Unknown");
|
323 chip 1.2
|
324 chip 1.1 handler.setStatus(CIM_ERR_FAILED, "Unknown error.");
325 }
326
327 PEG_METHOD_EXIT();
328
329 return(response);
330 }
331
332 Message * DefaultProviderManager::handleEnumerateInstancesRequest(const Message * message) throw()
333 {
334 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleEnumerateInstanceRequest");
335
336 CIMEnumerateInstancesRequestMessage * request =
337 dynamic_cast<CIMEnumerateInstancesRequestMessage *>(const_cast<Message *>(message));
338
339 PEGASUS_ASSERT(request != 0);
340
341 CIMEnumerateInstancesResponseMessage * response =
342 new CIMEnumerateInstancesResponseMessage(
343 request->messageId,
344 CIMException(),
345 chip 1.1 request->queueIds.copyAndPop(),
346 Array<CIMInstance>());
347
348 PEGASUS_ASSERT(response != 0);
349
350 // preserve message key
351 response->setKey(request->getKey());
352
353 // Set HTTP method in response from request
354 response->setHttpMethod (request->getHttpMethod ());
355
356 // create a handler for this request
357 EnumerateInstancesResponseHandler handler(request, response);
358
359 try
360 {
361 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
362 "DefaultProviderManager::handleEnumerateInstancesRequest - Host name: $0 Name space: $1 Class name: $2",
363 System::getHostName(),
364 request->nameSpace.getString(),
365 request->className.getString());
366 chip 1.1
367 // make target object path
368 CIMObjectPath objectPath(
369 System::getHostName(),
370 request->nameSpace,
371 request->className);
372
|
373 chip 1.4 ProviderName name(
|
374 schuur 1.20 objectPath,
|
375 schuur 1.11 ProviderType::INSTANCE);
|
376 chip 1.1
|
377 chip 1.5 // resolve provider name
378 name = _resolveProviderName(name);
|
379 chip 1.1
380 // get cached or load new provider module
|
381 schuur 1.12 OpProviderHolder ph = providerManager.getProvider(name.getPhysicalName(),
382 name.getLogicalName(), String::EMPTY);
|
383 chip 1.1
384 // convert arguments
385 OperationContext context;
386
387 context.insert(IdentityContainer(request->userName));
388 context.insert(AcceptLanguageListContainer(request->acceptLanguages));
389 context.insert(ContentLanguageListContainer(request->contentLanguages));
390
391 CIMPropertyList propertyList(request->propertyList);
392
393 // forward request
394 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
395 "Calling provider.enumerateInstances: " +
396 ph.GetProvider().getName());
397
398 pm_service_op_lock op_lock(&ph.GetProvider());
399
400 STAT_GETSTARTTIME;
401
402 ph.GetProvider().enumerateInstances(
403 context,
404 chip 1.1 objectPath,
405 request->includeQualifiers,
406 request->includeClassOrigin,
407 propertyList,
408 handler);
409
410 STAT_PMS_PROVIDEREND;
411 }
412 catch(CIMException & e)
413 {
414 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
415 "Exception: " + e.getMessage());
|
416 chip 1.2
|
417 chip 1.1 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
418 }
419 catch(Exception & e)
420 {
421 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
422 "Exception: " + e.getMessage());
|
423 chip 1.2
|
424 chip 1.1 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
425 }
426 catch(...)
427 {
428 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
429 "Exception: Unknown");
|
430 chip 1.2
|
431 chip 1.1 handler.setStatus(CIM_ERR_FAILED, "Unknown error.");
432 }
433
434 PEG_METHOD_EXIT();
435
436 return(response);
437 }
438
439 Message * DefaultProviderManager::handleEnumerateInstanceNamesRequest(const Message * message) throw()
440 {
441 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleEnumerateInstanceNamesRequest");
442
443 CIMEnumerateInstanceNamesRequestMessage * request =
444 dynamic_cast<CIMEnumerateInstanceNamesRequestMessage *>(const_cast<Message *>(message));
445
446 PEGASUS_ASSERT(request != 0);
447
448 CIMEnumerateInstanceNamesResponseMessage * response =
449 new CIMEnumerateInstanceNamesResponseMessage(
450 request->messageId,
451 CIMException(),
452 chip 1.1 request->queueIds.copyAndPop(),
453 Array<CIMObjectPath>());
454
455 PEGASUS_ASSERT(response != 0);
456
457 // preserve message key
458 response->setKey(request->getKey());
459
460 //set HTTP method in response from request
461 response->setHttpMethod(request->getHttpMethod());;
462
463 // create a handler for this request
464 EnumerateInstanceNamesResponseHandler handler(request, response);
465
466 // process the request
467 try
468 {
469 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
470 "DefaultProviderManager::handleEnumerateInstanceNamesRequest - Host name: $0 Name space: $1 Class name: $2",
471 System::getHostName(),
472 request->nameSpace.getString(),
473 chip 1.1 request->className.getString());
474
475 // make target object path
476 CIMObjectPath objectPath(
477 System::getHostName(),
478 request->nameSpace,
479 request->className);
480
481 // build an internal provider name from the request arguments
|
482 chip 1.4 ProviderName name(
|
483 schuur 1.20 objectPath,
|
484 schuur 1.11 ProviderType::INSTANCE);
|
485 chip 1.1
|
486 chip 1.5 // resolve provider name
487 name = _resolveProviderName(name);
|
488 chip 1.1
489 // get cached or load new provider module
490 OpProviderHolder ph =
|
491 schuur 1.10 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName());
|
492 chip 1.1
493 // convert arguments
494 OperationContext context;
495
496 context.insert(IdentityContainer(request->userName));
497 context.insert(AcceptLanguageListContainer(request->acceptLanguages));
498 context.insert(ContentLanguageListContainer(request->contentLanguages));
499
500 // forward request
501 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
502 "Calling provider.enumerateInstanceNames: " +
503 ph.GetProvider().getName());
504
505 pm_service_op_lock op_lock(&ph.GetProvider());
506
507 STAT_GETSTARTTIME;
508
509 ph.GetProvider().enumerateInstanceNames(
510 context,
511 objectPath,
512 handler);
513 chip 1.1
514 STAT_PMS_PROVIDEREND;
515 }
516 catch(CIMException & e)
517 {
518 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
519 "Exception: " + e.getMessage());
|
520 chip 1.2
|
521 chip 1.1 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
522 }
523 catch(Exception & e)
524 {
525 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
526 "Exception: " + e.getMessage());
|
527 chip 1.2
|
528 chip 1.1 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
529 }
530 catch(...)
531 {
532 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
533 "Exception: Unknown");
|
534 chip 1.2
|
535 chip 1.1 handler.setStatus(CIM_ERR_FAILED, "Unknown error.");
536 }
537
538 PEG_METHOD_EXIT();
539
540 return(response);
541 }
542
543 Message * DefaultProviderManager::handleCreateInstanceRequest(const Message * message) throw()
544 {
545 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleCreateInstanceRequest");
546
547 CIMCreateInstanceRequestMessage * request =
548 dynamic_cast<CIMCreateInstanceRequestMessage *>(const_cast<Message *>(message));
549
550 PEGASUS_ASSERT(request != 0);
551
552 // create response message
553 CIMCreateInstanceResponseMessage * response =
554 new CIMCreateInstanceResponseMessage(
555 request->messageId,
556 chip 1.1 CIMException(),
557 request->queueIds.copyAndPop(),
558 CIMObjectPath());
559
560 PEGASUS_ASSERT(response != 0);
561
562 // preserve message key
563 response->setKey(request->getKey());
564
565 // Set HTTP method in response from request
566 response->setHttpMethod (request->getHttpMethod ());
567
568 // create a handler for this request
569 CreateInstanceResponseHandler handler(request, response);
570
571 try
572 {
573 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
574 "DefaultProviderManager::handleCreateInstanceRequest - Host name: $0 Name space: $1 Class name: $2",
575 System::getHostName(),
576 request->nameSpace.getString(),
577 chip 1.1 request->newInstance.getPath().getClassName().getString());
578
579 // make target object path
580 CIMObjectPath objectPath(
581 System::getHostName(),
582 request->nameSpace,
583 request->newInstance.getPath().getClassName(),
584 request->newInstance.getPath().getKeyBindings());
585
|
586 chip 1.4 ProviderName name(
|
587 schuur 1.20 objectPath,
|
588 schuur 1.11 ProviderType::INSTANCE);
|
589 chip 1.1
|
590 chip 1.5 // resolve provider name
591 name = _resolveProviderName(name);
|
592 chip 1.1
593 // get cached or load new provider module
594 OpProviderHolder ph =
|
595 schuur 1.10 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
|
596 chip 1.1
597 // convert arguments
598 OperationContext context;
599
600 context.insert(IdentityContainer(request->userName));
601 context.insert(AcceptLanguageListContainer(request->acceptLanguages));
602 context.insert(ContentLanguageListContainer(request->contentLanguages));
603
604 // forward request
605 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
606 "Calling provider.createInstance: " +
607 ph.GetProvider().getName());
608
609 pm_service_op_lock op_lock(&ph.GetProvider());
610
611 STAT_GETSTARTTIME;
612
613 ph.GetProvider().createInstance(
614 context,
615 objectPath,
616 request->newInstance,
617 chip 1.1 handler);
618
619 STAT_PMS_PROVIDEREND;
620 }
621 catch(CIMException & e)
622 {
623 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
624 "Exception: " + e.getMessage());
|
625 chip 1.2
|
626 chip 1.1 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
627 }
628 catch(Exception & e)
629 {
630 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
631 "Exception: " + e.getMessage());
|
632 chip 1.2
|
633 chip 1.1 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
634 }
635 catch(...)
636 {
637 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
638 "Exception: Unknown");
|
639 chip 1.2
|
640 chip 1.1 handler.setStatus(CIM_ERR_FAILED, "Unknown error.");
641 }
642
643 PEG_METHOD_EXIT();
644
645 return(response);
646 }
647
648 Message * DefaultProviderManager::handleModifyInstanceRequest(const Message * message) throw()
649 {
650 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleModifyInstanceRequest");
651
652 CIMModifyInstanceRequestMessage * request =
653 dynamic_cast<CIMModifyInstanceRequestMessage *>(const_cast<Message *>(message));
654
655 PEGASUS_ASSERT(request != 0);
656
657 // create response message
658 CIMModifyInstanceResponseMessage * response =
659 new CIMModifyInstanceResponseMessage(
660 request->messageId,
661 chip 1.1 CIMException(),
662 request->queueIds.copyAndPop());
663
664 PEGASUS_ASSERT(response != 0);
665
666 // preserve message key
667 response->setKey(request->getKey());
668
669 // Set HTTP method in response from request
670 response->setHttpMethod (request->getHttpMethod ());
671
672 // create a handler for this request
673 ModifyInstanceResponseHandler handler(request, response);
674
675 try
676 {
677 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
678 "DefaultProviderManager::handleModifyInstanceRequest - Host name: $0 Name space: $1 Class name: $2",
679 System::getHostName(),
680 request->nameSpace.getString(),
681 request->modifiedInstance.getPath().getClassName().getString());
682 chip 1.1
683 // make target object path
684 CIMObjectPath objectPath(
685 System::getHostName(),
686 request->nameSpace,
687 request->modifiedInstance.getPath ().getClassName(),
688 request->modifiedInstance.getPath ().getKeyBindings());
689
|
690 chip 1.4 ProviderName name(
|
691 schuur 1.20 objectPath,
|
692 schuur 1.11 ProviderType::INSTANCE);
|
693 chip 1.1
|
694 chip 1.5 // resolve provider name
695 name = _resolveProviderName(name);
|
696 chip 1.1
697 // get cached or load new provider module
698 OpProviderHolder ph =
|
699 schuur 1.10 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
|
700 chip 1.1
701 // convert arguments
702 OperationContext context;
703
704 context.insert(IdentityContainer(request->userName));
705 context.insert(AcceptLanguageListContainer(request->acceptLanguages));
706 context.insert(ContentLanguageListContainer(request->contentLanguages));
707
708 CIMPropertyList propertyList(request->propertyList);
709
710 // forward request
711 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
712 "Calling provider.modifyInstance: " +
713 ph.GetProvider().getName());
714
715 pm_service_op_lock op_lock(&ph.GetProvider());
716
717 STAT_GETSTARTTIME;
718
719 ph.GetProvider().modifyInstance(
720 context,
721 chip 1.1 objectPath,
722 request->modifiedInstance,
723 request->includeQualifiers,
724 propertyList,
725 handler);
726
727 STAT_PMS_PROVIDEREND;
728 }
729 catch(CIMException & e)
730 {
731 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
732 "Exception: " + e.getMessage());
|
733 chip 1.2
|
734 chip 1.1 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
735 }
736 catch(Exception & e)
737 {
738 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
739 "Exception: " + e.getMessage());
|
740 chip 1.2
|
741 chip 1.1 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
742 }
743 catch(...)
744 {
745 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
746 "Exception: Unknown");
|
747 chip 1.2
|
748 chip 1.1 handler.setStatus(CIM_ERR_FAILED, "Unknown error.");
749 }
750
751 PEG_METHOD_EXIT();
752
753 return(response);
754 }
755
756 Message * DefaultProviderManager::handleDeleteInstanceRequest(const Message * message) throw()
757 {
758 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleDeleteInstanceRequest");
759
760 CIMDeleteInstanceRequestMessage * request =
761 dynamic_cast<CIMDeleteInstanceRequestMessage *>(const_cast<Message *>(message));
762
763 PEGASUS_ASSERT(request != 0);
764
765 // create response message
766 CIMDeleteInstanceResponseMessage * response =
767 new CIMDeleteInstanceResponseMessage(
768 request->messageId,
769 chip 1.1 CIMException(),
770 request->queueIds.copyAndPop());
771
772 PEGASUS_ASSERT(response != 0);
773
774 // preserve message key
775 response->setKey(request->getKey());
776
777 // Set HTTP method in response from request
778 response->setHttpMethod (request->getHttpMethod ());
779
780 // create a handler for this request
781 DeleteInstanceResponseHandler handler(request, response);
782
783 try
784 {
785 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
786 "DefaultProviderManager::handleDeleteInstanceRequest - Host name: $0 Name space: $1 Class name: $2",
787 System::getHostName(),
788 request->nameSpace.getString(),
789 request->instanceName.getClassName().getString());
790 chip 1.1
791 // make target object path
792 CIMObjectPath objectPath(
793 System::getHostName(),
794 request->nameSpace,
795 request->instanceName.getClassName(),
796 request->instanceName.getKeyBindings());
797
|
798 chip 1.4 ProviderName name(
|
799 schuur 1.20 objectPath,
|
800 schuur 1.11 ProviderType::INSTANCE);
|
801 chip 1.1
|
802 chip 1.5 // resolve provider name
803 name = _resolveProviderName(name);
|
804 chip 1.1
805 // get cached or load new provider module
806 OpProviderHolder ph =
|
807 schuur 1.10 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
|
808 chip 1.1
809 // convert arguments
810 OperationContext context;
811
812 context.insert(IdentityContainer(request->userName));
813 context.insert(AcceptLanguageListContainer(request->acceptLanguages));
814 context.insert(ContentLanguageListContainer(request->contentLanguages));
815
816 // forward request
817 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
818 "Calling provider.deleteInstance: " +
819 ph.GetProvider().getName());
820
821 pm_service_op_lock op_lock(&ph.GetProvider());
822
823 STAT_GETSTARTTIME;
824
825 ph.GetProvider().deleteInstance(
826 context,
827 objectPath,
828 handler);
829 chip 1.1
830 STAT_PMS_PROVIDEREND;
831 }
832 catch(CIMException & e)
833 {
834 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
835 "Exception: " + e.getMessage());
|
836 chip 1.2
|
837 chip 1.1 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
838 }
839 catch(Exception & e)
840 {
841 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
842 "Exception: " + e.getMessage());
|
843 chip 1.2
|
844 chip 1.1 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
845 }
846 catch(...)
847 {
848 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
849 "Exception: Unknown");
|
850 chip 1.2
|
851 chip 1.1 handler.setStatus(CIM_ERR_FAILED, "Unknown error.");
852 }
853
854 PEG_METHOD_EXIT();
855
856 return(response);
857 }
858
|
859 schuur 1.12 Message * DefaultProviderManager::handleExecQueryRequest(const Message * message) throw()
|
860 chip 1.1 {
|
861 schuur 1.12 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleExecQueryRequest");
|
862 chip 1.1
863 CIMExecQueryRequestMessage * request =
864 dynamic_cast<CIMExecQueryRequestMessage *>(const_cast<Message *>(message));
865
866 PEGASUS_ASSERT(request != 0);
867
868 CIMExecQueryResponseMessage * response =
869 new CIMExecQueryResponseMessage(
870 request->messageId,
|
871 schuur 1.12 CIMException(),
|
872 chip 1.1 request->queueIds.copyAndPop(),
873 Array<CIMObject>());
874
875 PEGASUS_ASSERT(response != 0);
876
877 // preserve message key
878 response->setKey(request->getKey());
879
880 // Set HTTP method in response from request
|
881 schuur 1.12 response->setHttpMethod (request->getHttpMethod ());
882
883 // create a handler for this request
884 ExecQueryResponseHandler handler(request, response);
885
886 try
887 {
888 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
889 "DefaultProviderManager::handleExecQueryRequest - Host name: $0 Name space: $1 Class name: $2",
890 System::getHostName(),
891 request->nameSpace.getString(),
892 request->className.getString());
893
894 // make target object path
895 CIMObjectPath objectPath(
896 System::getHostName(),
897 request->nameSpace,
898 request->className);
899
900 ProviderName name(
|
901 schuur 1.20 objectPath,
|
902 schuur 1.12 ProviderType::QUERY);
903
904 // resolve provider name
905 name = _resolveProviderName(name);
906
907 // get cached or load new provider module
908 OpProviderHolder ph =
909 providerManager.getProvider(name.getPhysicalName(),
910 name.getLogicalName(), String::EMPTY);
911
912 if (dynamic_cast<CIMInstanceQueryProvider*>(ph.GetCIMProvider()) == 0) {
913 String errorString = " instance provider is registered supporting execQuery "
914 "but is not a CIMQueryInstanceProvider subclass.";
915 throw CIMException(CIM_ERR_FAILED,"ProviderLoadFailure (" + name.getPhysicalName() + ":" +
916 name.getLogicalName() + "):" + errorString);
917 }
918
919 // convert arguments
920 OperationContext context;
921
922 context.insert(IdentityContainer(request->userName));
923 schuur 1.12 context.insert(AcceptLanguageListContainer(request->acceptLanguages));
924 context.insert(ContentLanguageListContainer(request->contentLanguages));
925
|
926 schuur 1.18 QueryExpression qx(QueryExpressionFactory::routeBuildQueryExpressionRep
927 (request->queryLanguage,request->query));
|
928 schuur 1.12
929 // forward request
930 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
931 "Calling provider.executeQueryRequest: " +
932 ph.GetProvider().getName());
933
934 pm_service_op_lock op_lock(&ph.GetProvider());
935
936 STAT_GETSTARTTIME;
937
938 ph.GetProvider().execQuery(
939 context,
940 objectPath,
941 qx,
942 handler);
943
944 STAT_PMS_PROVIDEREND;
945 }
946 catch(CIMException & e)
947 {
948 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
949 schuur 1.12 "Exception: " + e.getMessage());
950
951 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
952 }
953 catch(Exception & e)
954 {
955 cout<<"--- exception not a CIMInstanceQueryProvider"<<endl;
956 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
957 "Exception: " + e.getMessage());
958
959 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
960 }
961 catch(...)
962 {
963 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
964 "Exception: Unknown");
|
965 chip 1.1
|
966 schuur 1.12 handler.setStatus(CIM_ERR_FAILED, "Unknown error.");
967 }
|
968 chip 1.1
969 PEG_METHOD_EXIT();
970
971 return(response);
972 }
973
974 Message * DefaultProviderManager::handleAssociatorsRequest(const Message * message) throw()
975 {
976 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleAssociatorsRequest");
977
978 CIMAssociatorsRequestMessage * request =
979 dynamic_cast<CIMAssociatorsRequestMessage *>(const_cast<Message *>(message));
980
981 PEGASUS_ASSERT(request != 0);
982
983 CIMAssociatorsResponseMessage * response =
984 new CIMAssociatorsResponseMessage(
985 request->messageId,
986 CIMException(),
987 request->queueIds.copyAndPop(),
988 Array<CIMObject>());
989 chip 1.1
990 PEGASUS_ASSERT(response != 0);
991
992 // preserve message key
993 response->setKey(request->getKey());
994
995 // create a handler for this request
996 AssociatorsResponseHandler handler(request, response);
997
998 // process the request
999 try
1000 {
1001 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1002 "DefaultProviderManager::handleAssociatorsRequest - Host name: $0 Name space: $1 Class name: $2",
1003 System::getHostName(),
1004 request->nameSpace.getString(),
1005 request->objectName.getClassName().getString());
1006
1007 // make target object path
1008 CIMObjectPath objectPath(
1009 System::getHostName(),
1010 chip 1.1 request->nameSpace,
1011 request->objectName.getClassName());
1012
1013 objectPath.setKeyBindings(request->objectName.getKeyBindings());
1014
|
1015 schuur 1.19 CIMObjectPath assocPath(
1016 System::getHostName(),
1017 request->nameSpace,
1018 request->assocClass.getString());
1019
|
1020 chip 1.4 ProviderName name(
|
1021 schuur 1.20 assocPath,
|
1022 schuur 1.11 ProviderType::ASSOCIATION);
|
1023 chip 1.2
|
1024 chip 1.5 // resolve provider name
1025 name = _resolveProviderName(name);
|
1026 chip 1.2
1027 // get cached or load new provider module
1028 OpProviderHolder ph =
|
1029 schuur 1.10 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
|
1030 chip 1.2
1031 // convert arguments
1032 OperationContext context;
1033
1034 context.insert(IdentityContainer(request->userName));
1035 context.insert(AcceptLanguageListContainer(request->acceptLanguages));
1036 context.insert(ContentLanguageListContainer(request->contentLanguages));
|
1037 chip 1.1
|
1038 chip 1.2 // ATTN KS STAT_GETSTARTTIME;
1039 pm_service_op_lock op_lock(&ph.GetProvider());
|
1040 chip 1.1
|
1041 chip 1.2 ph.GetProvider().associators(
1042 context,
1043 objectPath,
1044 request->assocClass,
1045 request->resultClass,
1046 request->role,
1047 request->resultRole,
1048 request->includeQualifiers,
1049 request->includeClassOrigin,
1050 request->propertyList.getPropertyNameArray(),
1051 handler);
|
1052 chip 1.1
|
1053 chip 1.2 STAT_PMS_PROVIDEREND;
|
1054 chip 1.1 }
1055 catch(CIMException & e)
1056 {
1057 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1058 "Exception: " + e.getMessage());
|
1059 chip 1.2
|
1060 chip 1.1 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
1061 }
1062 catch(Exception & e)
1063 {
1064 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1065 "Exception: " + e.getMessage());
|
1066 chip 1.2
|
1067 chip 1.1 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
1068 }
1069 catch(...)
1070 {
1071 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1072 "Exception: Unknown");
|
1073 chip 1.2
|
1074 chip 1.1 handler.setStatus(CIM_ERR_FAILED, "Unknown error.");
1075 }
1076
1077 PEG_METHOD_EXIT();
1078
1079 return(response);
1080 }
1081
1082 Message * DefaultProviderManager::handleAssociatorNamesRequest(const Message * message) throw()
1083 {
1084 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleAssociatorNamesRequest");
1085
1086 CIMAssociatorNamesRequestMessage * request =
1087 dynamic_cast<CIMAssociatorNamesRequestMessage *>(const_cast<Message *>(message));
1088
1089 PEGASUS_ASSERT(request != 0);
1090
1091 CIMAssociatorNamesResponseMessage * response =
1092 new CIMAssociatorNamesResponseMessage(
1093 request->messageId,
1094 CIMException(),
1095 chip 1.1 request->queueIds.copyAndPop(),
1096 Array<CIMObjectPath>());
1097
1098 PEGASUS_ASSERT(response != 0);
1099
1100 // preserve message key
1101 response->setKey(request->getKey());
1102
1103 // Set HTTP method in response from request
1104 response->setHttpMethod(request->getHttpMethod());
1105
1106 // create a handler for this request
1107 AssociatorNamesResponseHandler handler(request, response);
1108
1109 // process the request
1110 try
1111 {
1112 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1113 "DefaultProviderManager::handleAssociationNamesRequest - Host name: $0 Name space: $1 Class name: $2",
1114 System::getHostName(),
1115 request->nameSpace.getString(),
1116 chip 1.1 request->objectName.getClassName().getString());
1117
1118 // make target object path
1119 CIMObjectPath objectPath(
1120 System::getHostName(),
1121 request->nameSpace,
1122 request->objectName.getClassName());
1123
1124 objectPath.setKeyBindings(request->objectName.getKeyBindings());
1125
|
1126 schuur 1.19 CIMObjectPath assocPath(
1127 System::getHostName(),
1128 request->nameSpace,
1129 request->assocClass.getString());
1130
|
1131 chip 1.4 ProviderName name(
|
1132 schuur 1.20 assocPath,
|
1133 schuur 1.11 ProviderType::ASSOCIATION);
|
1134 chip 1.2
|
1135 chip 1.5 // resolve provider name
1136 name = _resolveProviderName(name);
|
1137 chip 1.2
1138 // get cached or load new provider module
1139 OpProviderHolder ph =
|
1140 schuur 1.10 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
|
1141 chip 1.2
1142 // convert arguments
1143 OperationContext context;
|
1144 chip 1.1
|
1145 chip 1.2 context.insert(IdentityContainer(request->userName));
1146 context.insert(AcceptLanguageListContainer(request->acceptLanguages));
1147 context.insert(ContentLanguageListContainer(request->contentLanguages));
|
1148 chip 1.1
|
1149 chip 1.2 pm_service_op_lock op_lock(&ph.GetProvider());
|
1150 chip 1.1
|
1151 chip 1.2 ph.GetProvider().associatorNames(
1152 context,
1153 objectPath,
1154 request->assocClass,
1155 request->resultClass,
1156 request->role,
1157 request->resultRole,
1158 handler);
|
1159 chip 1.1
|
1160 chip 1.2 STAT_PMS_PROVIDEREND;
|
1161 chip 1.1 }
1162 catch(CIMException & e)
1163 {
|
1164 chip 1.2 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1165 "Exception: " + e.getMessage());
1166
|
1167 chip 1.1 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
1168 }
1169 catch(Exception & e)
1170 {
|
1171 chip 1.2 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1172 "Exception: " + e.getMessage());
1173
|
1174 chip 1.1 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
1175 }
1176 catch(...)
1177 {
1178 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1179 "Exception: Unknown");
|
1180 chip 1.2
|
1181 chip 1.1 handler.setStatus(CIM_ERR_FAILED, "Unknown error.");
1182 }
1183
1184 PEG_METHOD_EXIT();
1185
1186 return(response);
1187 }
1188
1189 Message * DefaultProviderManager::handleReferencesRequest(const Message * message) throw()
1190 {
1191 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleReferencesRequest");
1192
1193 CIMReferencesRequestMessage * request =
1194 dynamic_cast<CIMReferencesRequestMessage *>(const_cast<Message *>(message));
1195
1196 PEGASUS_ASSERT(request != 0);
1197
1198 CIMReferencesResponseMessage * response =
1199 new CIMReferencesResponseMessage(
1200 request->messageId,
1201 CIMException(),
1202 chip 1.1 request->queueIds.copyAndPop(),
1203 Array<CIMObject>());
1204
1205 PEGASUS_ASSERT(response != 0);
1206
1207 // preserve message key
1208 response->setKey(request->getKey());
1209
1210 // Set HTTP method in response from request
1211 response->setHttpMethod (request->getHttpMethod ());
1212
1213 // create a handler for this request
1214 ReferencesResponseHandler handler(request, response);
1215
1216 // process the request
1217 try
1218 {
1219 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1220 "DefaultProviderManager::handleReferencesRequest - Host name: $0 Name space: $1 Class name: $2",
1221 System::getHostName(),
1222 request->nameSpace.getString(),
1223 chip 1.1 request->objectName.getClassName().getString());
1224
1225 // make target object path
1226 CIMObjectPath objectPath(
1227 System::getHostName(),
1228 request->nameSpace,
1229 request->objectName.getClassName());
1230
1231 objectPath.setKeyBindings(request->objectName.getKeyBindings());
1232
|
1233 schuur 1.19 CIMObjectPath resultPath(
1234 System::getHostName(),
1235 request->nameSpace,
1236 request->resultClass.getString());
1237
|
1238 chip 1.4 ProviderName name(
|
1239 schuur 1.20 resultPath,
|
1240 schuur 1.11 ProviderType::ASSOCIATION);
|
1241 chip 1.2
|
1242 chip 1.5 // resolve provider name
1243 name = _resolveProviderName(name);
|
1244 chip 1.2
1245 // get cached or load new provider module
1246 OpProviderHolder ph =
|
1247 schuur 1.10 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
|
1248 chip 1.2
1249 // convert arguments
1250 OperationContext context;
1251
1252 context.insert(IdentityContainer(request->userName));
1253 context.insert(AcceptLanguageListContainer(request->acceptLanguages));
1254 context.insert(ContentLanguageListContainer(request->contentLanguages));
1255
1256 STAT_GETSTARTTIME;
|
1257 chip 1.1
|
1258 chip 1.2 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1259 "Calling provider.references: " +
1260 ph.GetProvider().getName());
|
1261 chip 1.1
|
1262 chip 1.2 pm_service_op_lock op_lock(&ph.GetProvider());
|
1263 chip 1.1
|
1264 chip 1.2 ph.GetProvider().references(
1265 context,
1266 objectPath,
1267 request->resultClass,
1268 request->role,
1269 request->includeQualifiers,
1270 request->includeClassOrigin,
1271 request->propertyList.getPropertyNameArray(),
1272 handler);
|
1273 chip 1.1
|
1274 chip 1.2 STAT_PMS_PROVIDEREND;
|
1275 chip 1.1 }
1276 catch(CIMException & e)
1277 {
1278 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1279 "Exception: " + e.getMessage());
|
1280 chip 1.2
|
1281 chip 1.1 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
1282 }
1283 catch(Exception & e)
1284 {
1285 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1286 "Exception: " + e.getMessage());
|
1287 chip 1.2
|
1288 chip 1.1 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
1289 }
1290 catch(...)
1291 {
1292 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1293 "Exception: Unknown");
|
1294 chip 1.2
|
1295 chip 1.1 handler.setStatus(CIM_ERR_FAILED, "Unknown error.");
1296 }
1297
1298 PEG_METHOD_EXIT();
1299
1300 return(response);
1301 }
1302
1303 Message * DefaultProviderManager::handleReferenceNamesRequest(const Message * message) throw()
1304 {
1305 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleReferenceNamesRequest");
1306
1307 CIMReferenceNamesRequestMessage * request =
1308 dynamic_cast<CIMReferenceNamesRequestMessage *>(const_cast<Message *>(message));
1309
1310 PEGASUS_ASSERT(request != 0);
1311
1312 CIMReferenceNamesResponseMessage * response =
1313 new CIMReferenceNamesResponseMessage(
1314 request->messageId,
1315 CIMException(),
1316 chip 1.1 request->queueIds.copyAndPop(),
1317 Array<CIMObjectPath>());
1318
1319 // preserve message key
1320 response->setKey(request->getKey());
1321
1322 // Set HTTP method in response from request
1323 response->setHttpMethod (request->getHttpMethod ());
1324
1325 // create a handler for this request
1326 ReferenceNamesResponseHandler handler(request, response);
1327
1328 // process the request
1329 try
1330 {
1331 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1332 "DefaultProviderManager::handleReferenceNamesRequest - Host name: $0 Name space: $1 Class name: $2",
1333 System::getHostName(),
1334 request->nameSpace.getString(),
1335 request->objectName.getClassName().getString());
1336
1337 chip 1.1 // make target object path
1338 CIMObjectPath objectPath(
1339 System::getHostName(),
1340 request->nameSpace,
1341 request->objectName.getClassName());
1342
1343 objectPath.setKeyBindings(request->objectName.getKeyBindings());
1344
|
1345 schuur 1.19 CIMObjectPath resultPath(
1346 System::getHostName(),
1347 request->nameSpace,
1348 request->resultClass.getString());
1349
|
1350 chip 1.4 ProviderName name(
|
1351 schuur 1.20 resultPath,
|
1352 schuur 1.11 ProviderType::ASSOCIATION);
|
1353 chip 1.1
|
1354 chip 1.5 // resolve provider name
1355 name = _resolveProviderName(name);
|
1356 chip 1.1
|
1357 chip 1.2 // get cached or load new provider module
1358 OpProviderHolder ph =
|
1359 schuur 1.10 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
|
1360 chip 1.1
|
1361 chip 1.2 // convert arguments
1362 OperationContext context;
|
1363 chip 1.1
|
1364 chip 1.2 context.insert(IdentityContainer(request->userName));
1365 context.insert(AcceptLanguageListContainer(request->acceptLanguages));
1366 context.insert(ContentLanguageListContainer(request->contentLanguages));
|
1367 chip 1.1
|
1368 chip 1.2 STAT_GETSTARTTIME;
|
1369 chip 1.1
|
1370 chip 1.2 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1371 "Calling provider.referenceNames: " +
1372 ph.GetProvider().getName());
|
1373 chip 1.1
|
1374 chip 1.2 pm_service_op_lock op_lock(&ph.GetProvider());
|
1375 chip 1.1
|
1376 chip 1.2 ph.GetProvider().referenceNames(
1377 context,
1378 objectPath,
1379 request->resultClass,
1380 request->role,
1381 handler);
|
1382 chip 1.1
|
1383 chip 1.2 STAT_PMS_PROVIDEREND;
|
1384 chip 1.1 }
1385 catch(CIMException & e)
1386 {
1387 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1388 "Exception: " + e.getMessage());
|
1389 chip 1.2
|
1390 chip 1.1 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
1391 }
1392 catch(Exception & e)
1393 {
1394 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1395 "Exception: " + e.getMessage());
|
1396 chip 1.2
|
1397 chip 1.1 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
1398 }
1399 catch(...)
1400 {
1401 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1402 "Exception: Unknown");
|
1403 chip 1.2
|
1404 chip 1.1 handler.setStatus(CIM_ERR_FAILED, "Unknown error.");
1405 }
1406
1407 PEG_METHOD_EXIT();
1408
1409 return(response);
1410 }
1411
1412 Message * DefaultProviderManager::handleGetPropertyRequest(const Message * message) throw()
1413 {
1414 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleGetPropertyRequest");
1415
1416 CIMGetPropertyRequestMessage * request =
1417 dynamic_cast<CIMGetPropertyRequestMessage *>(const_cast<Message *>(message));
1418
1419 PEGASUS_ASSERT(request != 0);
1420
1421 // create response message
1422 CIMGetPropertyResponseMessage * response =
1423 new CIMGetPropertyResponseMessage(
1424 request->messageId,
1425 chip 1.1 CIMException(),
1426 request->queueIds.copyAndPop(),
1427 CIMValue());
1428
1429 PEGASUS_ASSERT(response != 0);
1430
1431 // preserve message key
1432 response->setKey(request->getKey());
1433
1434 // Set HTTP method in response from request
1435 response->setHttpMethod(request->getHttpMethod());
1436
1437 GetPropertyResponseHandler handler(request, response);
1438
1439 try
1440 {
1441 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1442 "DefaultProviderManager::handleGetPropertyRequest - Host name: $0 Name space: $1 Class name: $2",
1443 System::getHostName(),
1444 request->nameSpace.getString(),
1445 request->instanceName.getClassName().getString());
1446 chip 1.1
1447 // make target object path
1448 CIMObjectPath objectPath(
1449 System::getHostName(),
1450 request->nameSpace,
1451 request->instanceName.getClassName(),
1452 request->instanceName.getKeyBindings());
1453
|
1454 chip 1.4 ProviderName name(
|
1455 schuur 1.20 objectPath,
|
1456 chip 1.4 0);
|
1457 chip 1.1
|
1458 chip 1.5 // resolve provider name
1459 name = _resolveProviderName(name);
|
1460 chip 1.1
1461 // get cached or load new provider module
1462 OpProviderHolder ph =
|
1463 schuur 1.10 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
|
1464 chip 1.1
1465 // convert arguments
1466 OperationContext context;
1467
1468 context.insert(IdentityContainer(request->userName));
1469 context.insert(AcceptLanguageListContainer(request->acceptLanguages));
1470 context.insert(ContentLanguageListContainer(request->contentLanguages));
1471
1472 CIMName propertyName = request->propertyName;
1473
1474 STAT_GETSTARTTIME;
1475
1476 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1477 "Calling provider.getProperty: " +
1478 ph.GetProvider().getName());
1479
1480 // forward request
1481 pm_service_op_lock op_lock(&ph.GetProvider());
1482
1483 ph.GetProvider().getProperty(
1484 context,
1485 chip 1.1 objectPath,
1486 propertyName,
1487 handler);
1488
1489 STAT_PMS_PROVIDEREND;
1490 }
1491 catch(CIMException & e)
1492 {
1493 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1494 "Exception: " + e.getMessage());
|
1495 chip 1.2
|
1496 chip 1.1 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
1497 }
1498 catch(Exception & e)
1499 {
1500 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1501 "Exception: " + e.getMessage());
|
1502 chip 1.2
|
1503 chip 1.1 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
1504 }
1505 catch(...)
1506 {
1507 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1508 "Exception: Unknown");
|
1509 chip 1.2
|
1510 chip 1.1 handler.setStatus(CIM_ERR_FAILED, "Unknown error.");
1511 }
1512
1513 PEG_METHOD_EXIT();
1514
1515 return(response);
1516 }
1517
1518 Message * DefaultProviderManager::handleSetPropertyRequest(const Message * message) throw()
1519 {
1520 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleSetPropertyRequest");
1521
1522 CIMSetPropertyRequestMessage * request =
1523 dynamic_cast<CIMSetPropertyRequestMessage *>(const_cast<Message *>(message));
1524
1525 PEGASUS_ASSERT(request != 0);
1526
1527 // create response message
1528 //l10n
1529 CIMSetPropertyResponseMessage * response =
1530 new CIMSetPropertyResponseMessage(
1531 chip 1.1 request->messageId,
1532 PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, MessageLoaderParms(
1533 "ProviderManager.DefaultProviderManager.NOT_IMPLEMENTED",
1534 "not implemented")),
1535 request->queueIds.copyAndPop());
1536
1537 PEGASUS_ASSERT(response != 0);
1538
1539 // preserve message key
1540 response->setKey(request->getKey());
1541
1542 // Set HTTP method in response from request
1543 response->setHttpMethod(request->getHttpMethod());
1544
1545 SetPropertyResponseHandler handler(request, response);
1546
1547 try
1548 {
1549 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1550 "DefaultProviderManager::handleSetPropertyRequest - Host name: $0 Name space: $1 Class name: $2",
1551 System::getHostName(),
1552 chip 1.1 request->nameSpace.getString(),
1553 request->instanceName.getClassName().getString());
1554
1555 // make target object path
1556 CIMObjectPath objectPath(
1557 System::getHostName(),
1558 request->nameSpace,
1559 request->instanceName.getClassName(),
1560 request->instanceName.getKeyBindings());
1561
|
1562 chip 1.4 ProviderName name(
|
1563 schuur 1.20 objectPath,
|
1564 chip 1.4 0);
|
1565 chip 1.1
|
1566 chip 1.5 // resolve provider name
1567 name = _resolveProviderName(name);
|
1568 chip 1.1
1569 // get cached or load new provider module
1570 OpProviderHolder ph =
|
1571 schuur 1.10 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
|
1572 chip 1.1
1573 // convert arguments
1574 OperationContext context;
1575
1576 context.insert(IdentityContainer(request->userName));
1577 context.insert(AcceptLanguageListContainer(request->acceptLanguages));
1578 context.insert(ContentLanguageListContainer(request->contentLanguages));
1579
1580 CIMName propertyName = request->propertyName;
1581 CIMValue propertyValue = request->newValue;
1582
1583 STAT_GETSTARTTIME;
1584
1585 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1586 "Calling provider.setProperty: " +
1587 ph.GetProvider().getName());
1588
1589 // forward request
1590 pm_service_op_lock op_lock(&ph.GetProvider());
1591
1592 ph.GetProvider().setProperty(
1593 chip 1.1 context,
1594 objectPath,
1595 propertyName,
1596 propertyValue,
1597 handler);
1598
1599 STAT_PMS_PROVIDEREND;
1600 }
1601 catch(CIMException & e)
1602 {
1603 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1604 "Exception: " + e.getMessage());
|
1605 chip 1.2
|
1606 chip 1.1 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
1607 }
1608 catch(Exception & e)
1609 {
1610 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1611 "Exception: " + e.getMessage());
|
1612 chip 1.2
|
1613 chip 1.1 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
1614 }
1615 catch(...)
1616 {
1617 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1618 "Exception: Unknown");
|
1619 chip 1.2
|
1620 chip 1.1 handler.setStatus(CIM_ERR_FAILED, "Unknown error.");
1621 }
1622
1623 PEG_METHOD_EXIT();
1624
1625 return(response);
1626 }
1627
1628 Message * DefaultProviderManager::handleInvokeMethodRequest(const Message * message) throw()
1629 {
1630 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleInvokeMethodRequest");
1631
1632 CIMInvokeMethodRequestMessage * request =
1633 dynamic_cast<CIMInvokeMethodRequestMessage *>(const_cast<Message *>(message));
1634
1635 PEGASUS_ASSERT(request != 0);
1636
1637 // create response message
1638 CIMInvokeMethodResponseMessage * response =
1639 new CIMInvokeMethodResponseMessage(
1640 request->messageId,
1641 chip 1.1 CIMException(),
1642 request->queueIds.copyAndPop(),
1643 CIMValue(),
1644 Array<CIMParamValue>(),
1645 request->methodName);
1646
1647 PEGASUS_ASSERT(response != 0);
1648
1649 // propagate message key
1650 response->setKey(request->getKey());
1651
1652 // Set HTTP method in response from request
1653 response->setHttpMethod (request->getHttpMethod ());
1654
1655 // create a handler for this request
1656 InvokeMethodResponseHandler handler(request, response);
1657
1658 try
1659 {
1660 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1661 "DefaultProviderManager::handleInvokeMethodRequest - Host name: $0 Name space: $1 Class name: $2",
1662 chip 1.1 System::getHostName(),
1663 request->nameSpace.getString(),
1664 request->instanceName.getClassName().getString());
1665
1666 // make target object path
1667 CIMObjectPath objectPath(
1668 System::getHostName(),
1669 request->nameSpace,
1670 request->instanceName.getClassName(),
1671 request->instanceName.getKeyBindings());
1672
|
1673 chip 1.4 ProviderName name(
|
1674 schuur 1.20 objectPath,
|
1675 schuur 1.16 ProviderType::METHOD,
1676 request->methodName);
|
1677 chip 1.1
|
1678 chip 1.5 // resolve provider name
1679 name = _resolveProviderName(name);
|
1680 chip 1.1
1681 // get cached or load new provider module
1682 OpProviderHolder ph =
|
1683 schuur 1.10 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
|
1684 chip 1.1
1685 // convert arguments
1686 OperationContext context;
1687
1688 context.insert(IdentityContainer(request->userName));
1689 context.insert(AcceptLanguageListContainer(request->acceptLanguages));
1690 context.insert(ContentLanguageListContainer(request->contentLanguages));
1691
1692 CIMObjectPath instanceReference(request->instanceName);
1693
1694 // ATTN: propagate namespace
1695 instanceReference.setNameSpace(request->nameSpace);
1696
1697 // forward request
1698 STAT_GETSTARTTIME;
1699
1700 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1701 "Calling provider.invokeMethod: " +
1702 ph.GetProvider().getName());
1703
1704 pm_service_op_lock op_lock(&ph.GetProvider());
1705 chip 1.1
1706 ph.GetProvider().invokeMethod(
1707 context,
1708 instanceReference,
1709 request->methodName,
1710 request->inParameters,
1711 handler);
1712
1713 STAT_PMS_PROVIDEREND;
1714 }
1715 catch(CIMException & e)
1716 {
1717 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1718 "Exception: " + e.getMessage());
|
1719 chip 1.2
|
1720 chip 1.1 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
1721 }
1722 catch(Exception & e)
1723 {
1724 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1725 "Exception: " + e.getMessage());
|
1726 chip 1.2
|
1727 chip 1.1 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
1728 }
1729 catch(...)
1730 {
1731 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1732 "Exception: Unknown");
|
1733 chip 1.2
|
1734 chip 1.1 handler.setStatus(CIM_ERR_FAILED, "Unknown error.");
1735 }
1736
1737 PEG_METHOD_EXIT();
1738
1739 return(response);
1740 }
1741
1742 Message * DefaultProviderManager::handleCreateSubscriptionRequest(const Message * message) throw()
1743 {
1744 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleCreateSubscriptionRequest");
1745
1746 CIMCreateSubscriptionRequestMessage * request =
1747 dynamic_cast<CIMCreateSubscriptionRequestMessage *>(const_cast<Message *>(message));
1748
1749 PEGASUS_ASSERT(request != 0);
1750
1751 CIMCreateSubscriptionResponseMessage * response =
1752 new CIMCreateSubscriptionResponseMessage(
1753 request->messageId,
1754 CIMException(),
1755 chip 1.1 request->queueIds.copyAndPop());
1756
1757 PEGASUS_ASSERT(response != 0);
1758
1759 // preserve message key
1760 response->setKey(request->getKey());
1761
1762 // Set HTTP method in response from request
1763 response->setHttpMethod (request->getHttpMethod ());
1764
1765 OperationResponseHandler handler(request, response);
1766
1767 try
1768 {
|
1769 chip 1.2 String temp;
1770
1771 for(Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1772 {
1773 temp.append(request->classNames[i].getString());
1774
1775 if(i == (n - 1))
1776 {
1777 temp.append(", ");
1778 }
1779 }
1780
1781 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1782 "DefaultProviderManager::handleCreateSubscriptionRequest - Host name: $0 Name space: $1 Class name(s): $2",
1783 System::getHostName(),
1784 request->nameSpace.getString(),
1785 temp);
1786
|
1787 schuur 1.18 String physicalName=_resolvePhysicalName(
1788 request->providerModule.getProperty(
1789 request->providerModule.findProperty("Location")).getValue().toString());
1790
|
1791 schuur 1.20 ProviderName name(
|
1792 schuur 1.18 request->provider.getProperty(request->provider.findProperty
1793 ("Name")).getValue ().toString (),
1794 physicalName,
1795 request->providerModule.getProperty(request->providerModule.findProperty
1796 ("InterfaceType")).getValue().toString(),
1797 0);
|
1798 chip 1.1
1799 // get cached or load new provider module
1800 OpProviderHolder ph =
|
1801 schuur 1.10 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
|
1802 schuur 1.18
|
1803 chip 1.1 // convert arguments
1804 OperationContext context;
1805
1806 context.insert(IdentityContainer(request->userName));
1807 context.insert(SubscriptionInstanceContainer
1808 (request->subscriptionInstance));
1809 context.insert(SubscriptionFilterConditionContainer
1810 (request->condition, request->queryLanguage));
1811 context.insert(SubscriptionLanguageListContainer
1812 (request->acceptLanguages));
1813 context.insert(AcceptLanguageListContainer(request->acceptLanguages));
1814 context.insert(ContentLanguageListContainer(request->contentLanguages));
1815
1816 CIMObjectPath subscriptionName = request->subscriptionInstance.getPath();
1817
1818 Array<CIMObjectPath> classNames;
1819
1820 for(Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1821 {
1822 CIMObjectPath className(
1823 System::getHostName(),
1824 chip 1.1 request->nameSpace,
1825 request->classNames[i]);
1826
1827 classNames.append(className);
1828 }
1829
1830 CIMPropertyList propertyList = request->propertyList;
1831
1832 Uint16 repeatNotificationPolicy = request->repeatNotificationPolicy;
1833
1834 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1835 "Calling provider.createSubscription: " +
1836 ph.GetProvider().getName());
1837
1838 pm_service_op_lock op_lock(&ph.GetProvider());
1839
1840 ph.GetProvider().createSubscription(
1841 context,
1842 subscriptionName,
1843 classNames,
1844 propertyList,
1845 chip 1.1 repeatNotificationPolicy);
1846 }
1847 catch(CIMException & e)
1848 {
1849 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1850 "Exception: " + e.getMessage());
|
1851 chip 1.2
|
1852 chip 1.1 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
1853 }
1854 catch(Exception & e)
1855 {
1856 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1857 "Exception: " + e.getMessage());
|
1858 chip 1.2
|
1859 chip 1.1 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
1860 }
1861 catch(...)
1862 {
1863 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1864 "Exception: Unknown");
|
1865 chip 1.2
|
1866 chip 1.1 handler.setStatus(CIM_ERR_FAILED, "Unknown Error");
1867 }
1868
1869 PEG_METHOD_EXIT();
1870
1871 return(response);
1872 }
1873
1874 Message * DefaultProviderManager::handleModifySubscriptionRequest( const Message * message) throw()
1875 {
1876 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleModifySubscriptionRequest");
1877
1878 CIMModifySubscriptionRequestMessage * request =
1879 dynamic_cast<CIMModifySubscriptionRequestMessage *>(const_cast<Message *>(message));
1880
1881 PEGASUS_ASSERT(request != 0);
1882
1883 CIMModifySubscriptionResponseMessage * response =
1884 new CIMModifySubscriptionResponseMessage(
1885 request->messageId,
1886 CIMException(),
1887 chip 1.1 request->queueIds.copyAndPop());
1888
1889 PEGASUS_ASSERT(response != 0);
1890
1891 // preserve message key
1892 response->setKey(request->getKey());
1893
1894 // Set HTTP method in response from request
1895 response->setHttpMethod (request->getHttpMethod ());
1896
1897 OperationResponseHandler handler(request, response);
1898
1899 try
1900 {
|
1901 chip 1.2 String temp;
1902
1903 for(Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1904 {
1905 temp.append(request->classNames[i].getString());
1906
1907 if(i == (n - 1))
1908 {
1909 temp.append(", ");
1910 }
1911 }
1912
1913 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
|
1914 schuur 1.18 "DefaultProviderManager::handleCreateSubscriptionRequest - Host name: $0 Name space: $1 Class name(s): $2",
|
1915 chip 1.2 System::getHostName(),
1916 request->nameSpace.getString(),
1917 temp);
1918
|
1919 schuur 1.18 String physicalName=_resolvePhysicalName(
1920 request->providerModule.getProperty(
1921 request->providerModule.findProperty("Location")).getValue().toString());
1922
|
1923 schuur 1.20 ProviderName name(
|
1924 schuur 1.18 request->provider.getProperty(request->provider.findProperty
1925 ("Name")).getValue ().toString (),
1926 physicalName,
1927 request->providerModule.getProperty(request->providerModule.findProperty
1928 ("InterfaceType")).getValue().toString(),
1929 0);
|
1930 chip 1.1
1931 // get cached or load new provider module
1932 OpProviderHolder ph =
|
1933 schuur 1.10 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
|
1934 schuur 1.18
|
1935 chip 1.1 // convert arguments
1936 OperationContext context;
1937
1938 context.insert(IdentityContainer(request->userName));
1939 context.insert(SubscriptionInstanceContainer
1940 (request->subscriptionInstance));
1941 context.insert(SubscriptionFilterConditionContainer
1942 (request->condition, request->queryLanguage));
1943 context.insert(SubscriptionLanguageListContainer
1944 (request->acceptLanguages));
1945 context.insert(AcceptLanguageListContainer(request->acceptLanguages));
1946 context.insert(ContentLanguageListContainer(request->contentLanguages));
1947
1948 CIMObjectPath subscriptionName = request->subscriptionInstance.getPath();
1949
1950 Array<CIMObjectPath> classNames;
1951
1952 for(Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1953 {
1954 CIMObjectPath className(
1955 System::getHostName(),
1956 chip 1.1 request->nameSpace,
1957 request->classNames[i]);
1958
1959 classNames.append(className);
1960 }
1961
1962 CIMPropertyList propertyList = request->propertyList;
1963
1964 Uint16 repeatNotificationPolicy = request->repeatNotificationPolicy;
1965
1966 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1967 "Calling provider.modifySubscription: " +
1968 ph.GetProvider().getName());
1969
1970 pm_service_op_lock op_lock(&ph.GetProvider());
1971
1972 ph.GetProvider().modifySubscription(
1973 context,
1974 subscriptionName,
1975 classNames,
1976 propertyList,
1977 chip 1.1 repeatNotificationPolicy);
1978 }
1979 catch(CIMException & e)
1980 {
1981 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1982 "Exception: " + e.getMessage());
|
1983 chip 1.2
|
1984 chip 1.1 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
1985 }
1986 catch(Exception & e)
1987 {
1988 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1989 "Exception: " + e.getMessage());
|
1990 chip 1.2
|
1991 chip 1.1 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
1992 }
1993 catch(...)
1994 {
1995 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1996 "Exception: Unknown");
|
1997 chip 1.2
|
1998 chip 1.1 handler.setStatus(CIM_ERR_FAILED, "Unknown Error");
1999 }
2000
2001 PEG_METHOD_EXIT();
2002
2003 return(response);
2004 }
2005
2006 Message * DefaultProviderManager::handleDeleteSubscriptionRequest(const Message * message) throw()
2007 {
2008 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleDeleteSubscriptionRequest");
2009
2010 CIMDeleteSubscriptionRequestMessage * request =
2011 dynamic_cast<CIMDeleteSubscriptionRequestMessage *>(const_cast<Message *>(message));
2012
2013 PEGASUS_ASSERT(request != 0);
2014
2015 CIMDeleteSubscriptionResponseMessage * response =
2016 new CIMDeleteSubscriptionResponseMessage(
2017 request->messageId,
2018 CIMException(),
2019 chip 1.1 request->queueIds.copyAndPop());
2020
2021 PEGASUS_ASSERT(response != 0);
2022
2023 // preserve message key
2024 response->setKey(request->getKey());
2025
2026 // Set HTTP method in response from request
2027 response->setHttpMethod(request->getHttpMethod());
2028
2029 OperationResponseHandler handler(request, response);
2030
2031 try
2032 {
|
2033 chip 1.2 String temp;
2034
2035 for(Uint32 i = 0, n = request->classNames.size(); i < n; i++)
2036 {
2037 temp.append(request->classNames[i].getString());
2038
2039 if(i == (n - 1))
2040 {
2041 temp.append(", ");
2042 }
2043 }
2044
2045 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
2046 "DefaultProviderManager::handleDeleteSubscriptionRequest - Host name: $0 Name space: $1 Class name(s): $2",
2047 System::getHostName(),
2048 request->nameSpace.getString(),
2049 temp);
2050
|
2051 schuur 1.18 String physicalName=_resolvePhysicalName(
2052 request->providerModule.getProperty(
2053 request->providerModule.findProperty("Location")).getValue().toString());
2054
|
2055 schuur 1.20 ProviderName name(
|
2056 schuur 1.18 request->provider.getProperty(request->provider.findProperty
2057 ("Name")).getValue ().toString (),
2058 physicalName,
2059 request->providerModule.getProperty(request->providerModule.findProperty
2060 ("InterfaceType")).getValue().toString(),
2061 0);
|
2062 chip 1.1
2063 // get cached or load new provider module
2064 OpProviderHolder ph =
|
2065 schuur 1.10 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
|
2066 schuur 1.18
|
2067 chip 1.1 // convert arguments
2068 OperationContext context;
2069
2070 context.insert(IdentityContainer(request->userName));
2071 context.insert(SubscriptionInstanceContainer
2072 (request->subscriptionInstance));
2073 context.insert(SubscriptionLanguageListContainer
2074 (request->acceptLanguages));
2075 context.insert(AcceptLanguageListContainer(request->acceptLanguages));
2076 context.insert(ContentLanguageListContainer(request->contentLanguages));
2077
2078 CIMObjectPath subscriptionName = request->subscriptionInstance.getPath();
2079
2080 Array<CIMObjectPath> classNames;
2081
2082 for(Uint32 i = 0, n = request->classNames.size(); i < n; i++)
2083 {
2084 CIMObjectPath className(
2085 System::getHostName(),
2086 request->nameSpace,
2087 request->classNames[i]);
2088 chip 1.1
2089 classNames.append(className);
2090 }
2091
2092 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2093 "Calling provider.deleteSubscription: " +
2094 ph.GetProvider().getName());
2095
2096 pm_service_op_lock op_lock(&ph.GetProvider());
2097
2098 ph.GetProvider().deleteSubscription(
2099 context,
2100 subscriptionName,
2101 classNames);
2102 }
2103 catch(CIMException & e)
2104 {
2105 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2106 "Exception: " + e.getMessage());
|
2107 chip 1.2
|
2108 chip 1.1 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
2109 }
2110 catch(Exception & e)
2111 {
2112 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2113 "Exception: " + e.getMessage());
|
2114 chip 1.2
|
2115 chip 1.1 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
2116 }
2117 catch(...)
2118 {
2119 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2120 "Exception: Unknown");
|
2121 chip 1.2
|
2122 chip 1.1 handler.setStatus(CIM_ERR_FAILED, "Unknown Error");
2123 }
2124
2125 PEG_METHOD_EXIT();
2126
2127 return(response);
2128 }
2129
2130 Message * DefaultProviderManager::handleEnableIndicationsRequest(const Message * message) throw()
2131 {
2132 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager:: handleEnableIndicationsRequest");
2133
2134 CIMEnableIndicationsRequestMessage * request =
2135 dynamic_cast<CIMEnableIndicationsRequestMessage *>(const_cast<Message *>(message));
2136
2137 PEGASUS_ASSERT(request != 0);
2138
2139 CIMEnableIndicationsResponseMessage * response =
2140 new CIMEnableIndicationsResponseMessage(
2141 request->messageId,
2142 CIMException(),
2143 chip 1.1 request->queueIds.copyAndPop());
2144
2145 CIMEnableIndicationsResponseMessage * responseforhandler =
2146 new CIMEnableIndicationsResponseMessage(
2147 request->messageId,
2148 CIMException(),
2149 request->queueIds.copyAndPop());
2150
2151 PEGASUS_ASSERT(response != 0);
2152
2153 // preserve message key
2154 response->setKey(request->getKey());
2155
2156 // Set HTTP method in response from request
2157 response->setHttpMethod(request->getHttpMethod());
2158
2159 response->dest = request->queueIds.top();
2160
2161 // ATTN: need pointer to Provider Manager Server!
|
2162 schuur 1.14 EnableIndicationsResponseHandler *handler =
2163 new EnableIndicationsResponseHandler(request, response,
2164 request->provider, ProviderManagerService::providerManagerService);
|
2165 chip 1.1
2166 try
2167 {
|
2168 schuur 1.14 String physicalName=_resolvePhysicalName(
2169 request->providerModule.getProperty(
2170 request->providerModule.findProperty("Location")).getValue().toString());
2171
|
2172 schuur 1.20 ProviderName name(
|
2173 schuur 1.16 request->provider.getProperty(request->provider.findProperty
|
2174 schuur 1.14 ("Name")).getValue ().toString (),
2175 physicalName,
2176 request->providerModule.getProperty(request->providerModule.findProperty
2177 ("InterfaceType")).getValue().toString(),
2178 0);
|
2179 chip 1.1
2180 // get cached or load new provider module
2181 OpProviderHolder ph =
|
2182 schuur 1.14 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
|
2183 chip 1.1
2184 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2185 "Calling provider.enableIndications: " +
2186 ph.GetProvider().getName());
|
2187 schuur 1.14
2188 pm_service_op_lock op_lock(&ph.GetProvider());
2189
|
2190 chip 1.1 ph.GetProvider().enableIndications(*handler);
2191
2192
2193 // if no exception, store the handler so it is persistent for as
2194 // long as the provider has indications enabled.
2195 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2196 "Storing indication handler for " + ph.GetProvider().getName());
2197
2198 _insertEntry(ph.GetProvider(), handler);
2199 }
2200 catch(CIMException & e)
2201 {
2202 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2203 "Exception: " + e.getMessage());
|
2204 schuur 1.14
|
2205 chip 1.1 response->cimException = CIMException(e);
2206 }
2207 catch(Exception & e)
2208 {
2209 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2210 "Exception: " + e.getMessage());
2211 response->cimException = CIMException(CIM_ERR_FAILED, MessageLoaderParms(
2212 "ProviderManager.DefaultProviderManager.INTERNAL_ERROR",
2213 "Internal Error"));
2214 }
2215 catch(...)
2216 {
2217 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2218 "Exception: Unknown");
2219 response->cimException = CIMException(CIM_ERR_FAILED, MessageLoaderParms(
2220 "ProviderManager.DefaultProviderManager.UNKNOWN_ERROR",
2221 "Unknown Error"));
2222 }
2223
2224 PEG_METHOD_EXIT();
2225
2226 chip 1.1 return(response);
2227 }
2228
2229 Message * DefaultProviderManager::handleDisableIndicationsRequest(const Message * message) throw()
2230 {
2231 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleDisableIndicationsRequest");
2232
2233 CIMDisableIndicationsRequestMessage * request =
2234 dynamic_cast<CIMDisableIndicationsRequestMessage *>(const_cast<Message *>(message));
2235
2236 PEGASUS_ASSERT(request != 0);
2237
2238 CIMDisableIndicationsResponseMessage * response =
2239 new CIMDisableIndicationsResponseMessage(
2240 request->messageId,
2241 CIMException(),
2242 request->queueIds.copyAndPop());
2243
2244 // preserve message key
2245 response->setKey(request->getKey());
2246
2247 chip 1.1 // Set HTTP method in response from request
2248 response->setHttpMethod (request->getHttpMethod ());
2249
2250 OperationResponseHandler handler(request, response);
2251
2252 try
2253 {
|
2254 schuur 1.14 String physicalName=_resolvePhysicalName(
2255 request->providerModule.getProperty(
2256 request->providerModule.findProperty("Location")).getValue().toString());
2257
|
2258 schuur 1.20 ProviderName name(
|
2259 schuur 1.16 request->provider.getProperty(request->provider.findProperty
|
2260 schuur 1.14 ("Name")).getValue ().toString (),
2261 physicalName,
2262 request->providerModule.getProperty(request->providerModule.findProperty
2263 ("InterfaceType")).getValue().toString(),
|
2264 chip 1.6 0);
|
2265 chip 1.1
2266 // get cached or load new provider module
2267 OpProviderHolder ph =
|
2268 schuur 1.10 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
|
2269 chip 1.1
2270 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2271 "Calling provider.disableIndications: " +
2272 ph.GetProvider().getName());
2273
2274 ph.GetProvider().disableIndications();
2275
2276 ph.GetProvider().unprotect();
2277
2278 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2279 "Removing and Destroying indication handler for " +
2280 ph.GetProvider().getName());
2281
2282 delete _removeEntry(_generateKey(ph.GetProvider()));
2283 }
2284
2285 catch(CIMException & e)
2286 {
2287 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2288 "Exception: " + e.getMessage());
|
2289 chip 1.2
|
2290 chip 1.1 response->cimException = CIMException(e);
2291 }
2292 catch(Exception & e)
2293 {
2294 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2295 "Exception: " + e.getMessage());
|
2296 chip 1.2 response->cimException = CIMException(CIM_ERR_FAILED, MessageLoaderParms(
|
2297 chip 1.1 "ProviderManager.DefaultProviderManager.INTERNAL_ERROR",
2298 "Internal Error"));
2299 }
2300 catch(...)
2301 {
2302 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2303 "Exception: Unknown");
|
2304 chip 1.2 response->cimException = CIMException(CIM_ERR_FAILED, MessageLoaderParms(
|
2305 chip 1.1 "ProviderManager.DefaultProviderManager.UNKNOWN_ERROR",
2306 "Unknown Error"));
2307 }
2308
2309 PEG_METHOD_EXIT();
2310
2311 return(response);
2312 }
2313
2314 Message * DefaultProviderManager::handleConsumeIndicationRequest(const Message *message) throw()
2315 {
2316 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handlConsumeIndicationRequest");
2317
2318 CIMConsumeIndicationRequestMessage *request =
2319 dynamic_cast<CIMConsumeIndicationRequestMessage *>(const_cast<Message *>(message));
2320
2321 PEGASUS_ASSERT(request != 0);
2322
2323 CIMResponseMessage * response =
2324 new CIMResponseMessage(
2325 CIM_CONSUME_INDICATION_RESPONSE_MESSAGE,
2326 chip 1.1 request->messageId,
2327 CIMException(),
2328 request->queueIds.copyAndPop());
2329
2330 PEGASUS_ASSERT(response != 0);
2331
2332 response->setKey(request->getKey());
2333
2334 // Set HTTP method in response from request
2335 response->setHttpMethod (request->getHttpMethod ());
2336
2337 Uint32 type = 3;
2338
2339 try
2340 {
|
2341 chip 1.6 ProviderName name(
2342 String::EMPTY,
2343 String::EMPTY,
2344 String::EMPTY,
2345 0);
|
2346 chip 1.1
2347 /*
|
2348 chip 1.4 ProviderName name(
|
2349 chip 1.1 String::EMPTY,
2350 String::EMPTY,
2351 objectPath.toString());
2352
|
2353 chip 1.5 // resolve provider name
2354 name = _resolveProviderName(name);
|
2355 chip 1.1 */
2356
2357 // get cached or load new provider module
2358 OpProviderHolder ph =
|
2359 schuur 1.10 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
|
2360 chip 1.1
2361 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2362 "Calling provider.: " +
2363 ph.GetProvider().getName());
2364
2365 OperationContext context;
2366
2367 //l10n
2368 // ATTN-CEC 06/04/03 NOTE: I can't find where the consume msg is sent. This
2369 // does not appear to be hooked-up. When it is added, need to
2370 // make sure that Content-Language is set in the consume msg.
2371 // NOTE: A-L is not needed to be set in the consume msg.
2372 // add the langs to the context
2373 context.insert(ContentLanguageListContainer(request->contentLanguages));
2374
2375 CIMInstance indication_copy = request->indicationInstance;
2376
2377 SimpleIndicationResponseHandler handler;
2378
2379 ph.GetProvider().consumeIndication(context,
2380 "",
2381 chip 1.1 indication_copy);
2382 }
2383 catch(CIMException & e)
2384 {
2385 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2386 "Exception: " + e.getMessage());
|
2387 chip 1.2
|
2388 chip 1.1 response->cimException = CIMException(e);
2389 }
2390 catch(Exception & e)
2391 {
2392 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2393 "Exception: " + e.getMessage());
2394 //l10n
2395 //response->cimException = CIMException(CIM_ERR_FAILED, "Internal Error");
2396 response->cimException = CIMException(CIM_ERR_FAILED, MessageLoaderParms(
2397 "ProviderManager.DefaultProviderManager.INTERNAL_ERROR",
2398 "Internal Error"));
2399 }
2400 catch(...)
2401 {
2402 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2403 "Exception: Unknown");
2404 //l10n
2405 //response->cimException = CIMException(CIM_ERR_FAILED, "Unknown Error");
2406 response->cimException = CIMException(CIM_ERR_FAILED, MessageLoaderParms(
2407 "ProviderManager.DefaultProviderManager.UNKNOWN_ERROR",
2408 "Unknown Error"));
2409 chip 1.1 }
2410
2411 PEG_METHOD_EXIT();
2412
2413 return(response);
2414 }
2415
|
2416 schuur 1.14
2417 Message *DefaultProviderManager::handleExportIndicationRequest(const Message *message) throw()
2418 {
2419 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManagerService::handlExportIndicationRequest");
2420
2421 CIMExportIndicationRequestMessage * request =
2422 dynamic_cast<CIMExportIndicationRequestMessage *>(const_cast<Message *>(message));
2423
2424 PEGASUS_ASSERT(request != 0);
2425
2426 CIMExportIndicationResponseMessage * response =
2427 new CIMExportIndicationResponseMessage(
2428 request->messageId,
2429 CIMException(),
2430 request->queueIds.copyAndPop());
2431
2432 PEGASUS_ASSERT(response != 0);
2433
2434 // preserve message key
2435 response->setKey(request->getKey());
2436
2437 schuur 1.14 // Set HTTP method in response from request
2438 response->setHttpMethod (request->getHttpMethod ());
2439
2440 OperationResponseHandler handler(request, response);
2441
2442 try
2443 {
2444 ProviderName name(
2445 String::EMPTY,
2446 String::EMPTY,
2447 String::EMPTY,
2448 0);
2449
2450 // resolve provider name
2451 name = _resolveProviderName(request->destinationPath);
2452
2453 // get cached or load new provider module
2454 OpProviderHolder ph =
2455 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
2456
2457 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2458 schuur 1.14 "Calling provider.: " +
2459 ph.GetProvider().getName());
2460
2461 OperationContext context;
2462
2463 //L10N_TODO
2464 //l10n
2465 // ATTN-CEC 06/04/03 NOTE: I can't find where the consume msg is sent. This
2466 // does not appear to be hooked-up. When it is added, need to
2467 // make sure that Content-Language is set in the consume msg.
2468 // NOTE: A-L is not needed to be set in the consume msg.
2469 // add the langs to the context
2470 context.insert(ContentLanguageListContainer(request->contentLanguages));
2471
2472 CIMInstance indication_copy = request->indicationInstance;
2473 pm_service_op_lock op_lock(&ph.GetProvider());
2474
2475 ph.GetProvider().consumeIndication(context,
2476 request->destinationPath,
2477 indication_copy);
2478
2479 schuur 1.14 }
2480
2481 catch(CIMException & e)
2482 {
2483 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2484 "Exception: " + e.getMessage());
2485
2486 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
2487 }
2488 catch(Exception & e)
2489 {
2490 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2491 "Exception: " + e.getMessage());
2492
2493 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
2494 }
2495 catch(...)
2496 {
2497 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2498 "Exception: Unknown");
2499
2500 schuur 1.14 handler.setStatus(CIM_ERR_FAILED, "Unknown Error");
2501 }
2502
2503 PEG_METHOD_EXIT();
2504
2505 return(response);
2506 }
2507
2508
2509
2510
|
2511 chip 1.1 //
2512 // This function disables a provider module if disableProviderOnly is not true,
2513 // otherwise, disables a provider. Disable provider module means that
2514 // block all the providers which contain in the module and unload the
2515 // providers.
2516 // Disable provider means unload the provider and the provider is not blocked.
2517 //
2518 // ATTN-YZ-P2-20030519: Provider needs to be blocked when disable a provider.
2519 //
2520 Message * DefaultProviderManager::handleDisableModuleRequest(const Message * message) throw()
2521 {
2522 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleDisableModuleRequest");
|
2523 schuur 1.19
|
2524 chip 1.1 CIMDisableModuleRequestMessage * request =
2525 dynamic_cast<CIMDisableModuleRequestMessage *>(const_cast<Message *>(message));
2526
2527 PEGASUS_ASSERT(request != 0);
|
2528 schuur 1.18
2529 Array<Uint16> operationalStatus;
|
2530 chip 1.1 Boolean disableProviderOnly = request->disableProviderOnly;
|
2531 schuur 1.18 CIMException cimException;
|
2532 chip 1.1
|
2533 schuur 1.18 ProviderRegistrationManager * _providerRegistrationManager = GetProviderRegistrationManager();
2534
2535 try
|
2536 chip 1.1 {
|
2537 schuur 1.18 // get provider module name
2538 String moduleName;
2539 CIMInstance mInstance = request->providerModule;
2540 Uint32 pos = mInstance.findProperty(CIMName ("Name"));
|
2541 chip 1.2
|
2542 schuur 1.18 if(pos != PEG_NOT_FOUND)
|
2543 chip 1.1 {
|
2544 schuur 1.18 mInstance.getProperty(pos).getValue().get(moduleName);
|
2545 chip 1.1 }
2546
|
2547 schuur 1.18 Boolean disableProviderOnly = request->disableProviderOnly;
2548
|
2549 chip 1.1 //
|
2550 schuur 1.18 // get operational status
|
2551 chip 1.1 //
|
2552 schuur 1.18 if (!disableProviderOnly)
|
2553 chip 1.1 {
|
2554 schuur 1.18 Uint32 pos2 = mInstance.findProperty(CIMName ("OperationalStatus"));
2555 if (pos2 != PEG_NOT_FOUND)
2556 {
2557 //
2558 // ATTN-CAKG-P2-20020821: Check for null status?
2559 //
2560 mInstance.getProperty(pos2).getValue().get(operationalStatus);
2561 }
2562
2563 //
2564 // update module status from OK to Stopping
2565 //
2566 for (Uint32 i=0, n = operationalStatus.size(); i < n; i++)
|
2567 chip 1.1 {
|
2568 schuur 1.18 if (operationalStatus[i] == _MODULE_OK)
2569 {
2570 operationalStatus.remove(i);
2571 }
2572 }
2573
2574 operationalStatus.append(_MODULE_STOPPING);
2575
2576 if(_providerRegistrationManager->setProviderModuleStatus
2577 (moduleName, operationalStatus) == false)
2578 {
2579 //l10n
2580 //throw PEGASUS_CIM_EXCEPTION(CIM_ERR_FAILED, "set module status failed.");
2581 throw PEGASUS_CIM_EXCEPTION_L(
2582 CIM_ERR_FAILED,
2583 MessageLoaderParms(
2584 "ProviderManager.ProviderManagerService."
2585 "SET_MODULE_STATUS_FAILED",
2586 "set module status failed."));
|
2587 chip 1.1 }
2588 }
2589
|
2590 schuur 1.18 // Unload providers
2591 Array<CIMInstance> _pInstances = request->providers;
2592 Array<Boolean> _indicationProviders = request->indicationProviders;
2593
2594 String physicalName=_resolvePhysicalName(
2595 mInstance.getProperty(
2596 mInstance.findProperty("Location")).getValue().toString());
2597
2598 for(Uint32 i = 0, n = _pInstances.size(); i < n; i++)
|
2599 chip 1.1 {
|
2600 schuur 1.18 String pName(_pInstances[i].getProperty(
2601 _pInstances[i].findProperty("Name")).getValue().toString());
|
2602 chip 1.1
|
2603 schuur 1.18 Sint16 ret_value = providerManager.disableProvider(physicalName,pName);
|
2604 chip 1.1
|
2605 schuur 1.18 if (ret_value == 0)
2606 {
2607 // disable failed since there are pending requests,
2608 // update module status from Stopping to OK if
2609 // disableProviderOnly is not true
2610 if (!disableProviderOnly)
2611 {
2612 for(Uint32 j=0, m = operationalStatus.size(); j < m; j++)
2613 {
2614 if (operationalStatus[j] == _MODULE_STOPPING)
2615 {
2616 operationalStatus.remove(j);
2617 }
2618 }
2619
2620 operationalStatus.append(_MODULE_OK);
2621
2622 if(_providerRegistrationManager->setProviderModuleStatus
2623 (moduleName, operationalStatus) == false)
2624 {
2625 throw PEGASUS_CIM_EXCEPTION_L(
2626 schuur 1.18 CIM_ERR_FAILED,
2627 MessageLoaderParms(
2628 "ProviderManager.ProviderManagerService."
2629 "SET_MODULE_STATUS_FAILED",
2630 "set module status failed."));
2631 }
2632 }
2633 }
2634 else if (ret_value == 1)
2635 {
2636 // if It is an indication provider
2637 // remove the entry from the table since the
2638 // provider has been disabled
2639 if (_indicationProviders[i])
2640 {
2641 _removeEntry(_generateKey(pName,physicalName));
2642 }
2643 }
2644 else
2645 {
2646 // disable failed for other reason, throw exception
2647 schuur 1.18 // update module status from Stopping to OK if
2648 // disableProviderOnly is not true
2649 if (!disableProviderOnly)
2650 {
2651 for(Uint32 j=0, m = operationalStatus.size(); j < m; j++)
2652 {
2653 if (operationalStatus[j] == _MODULE_STOPPING)
2654 {
2655 operationalStatus.remove(j);
2656 }
2657 }
2658
2659 operationalStatus.append(_MODULE_OK);
2660
2661 if(_providerRegistrationManager->setProviderModuleStatus
2662 (moduleName, operationalStatus) == false)
2663 {
2664 throw PEGASUS_CIM_EXCEPTION_L(
2665 CIM_ERR_FAILED,
2666 MessageLoaderParms(
2667 "ProviderManager.ProviderManagerService."
2668 schuur 1.18 "SET_MODULE_STATUS_FAILED",
2669 "set module status failed."));
2670 }
2671 }
2672
2673 throw PEGASUS_CIM_EXCEPTION_L(
2674 CIM_ERR_FAILED,
2675 MessageLoaderParms(
2676 "ProviderManager.ProviderManagerService."
2677 "DISABLE_PROVIDER_FAILED",
2678 "Failed to disable the provider."));
2679 }
2680 }
2681 // disable succeed
2682 // update module status from Stopping to Stopped if
2683 // disableProviderOnly is not true
2684 if (!disableProviderOnly)
|
2685 chip 1.1 {
|
2686 schuur 1.18 // update module status from Stopping to Stopped
2687 for(Uint32 j=0, m = operationalStatus.size(); j < m; j++)
|
2688 chip 1.1 {
|
2689 schuur 1.18 if (operationalStatus[j] == _MODULE_STOPPING)
2690 {
2691 operationalStatus.remove(j);
2692 operationalStatus.append(_MODULE_STOPPED);
2693 }
|
2694 chip 1.1 }
|
2695 chip 1.2
|
2696 schuur 1.18 if(_providerRegistrationManager->setProviderModuleStatus
2697 (moduleName, operationalStatus) == false)
2698 {
2699 //l10n
2700 //throw PEGASUS_CIM_EXCEPTION(CIM_ERR_FAILED,
2701 //"set module status failed.");
2702 throw PEGASUS_CIM_EXCEPTION_L(
2703 CIM_ERR_FAILED,
2704 MessageLoaderParms(
2705 "ProviderManager.ProviderManagerService."
2706 "SET_MODULE_STATUS_FAILED",
2707 "set module status failed."));
2708 }
2709 }
2710 }
2711 catch(CIMException & e)
2712 {
2713 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2714 "Exception: " + e.getMessage());
2715 cimException = e;
2716 }
2717 schuur 1.18 catch(Exception & e)
2718 {
2719 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2720 "Exception: " + e.getMessage());
2721 cimException = CIMException(CIM_ERR_FAILED, e.getMessage());
2722 }
2723 catch(...)
2724 {
2725 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2726 "Exception: Unknown");
2727 //l10n
2728 //response->cimException = CIMException(CIM_ERR_FAILED, "Unknown Error");
2729 cimException = PEGASUS_CIM_EXCEPTION_L(
2730 CIM_ERR_FAILED,
2731 MessageLoaderParms(
2732 "ProviderManager.ProviderManagerService.UNKNOWN_ERROR",
2733 "Unknown Error"));
|
2734 chip 1.1 }
2735
2736 CIMDisableModuleResponseMessage * response =
2737 new CIMDisableModuleResponseMessage(
2738 request->messageId,
2739 CIMException(),
2740 request->queueIds.copyAndPop(),
2741 operationalStatus);
2742
2743 // preserve message key
2744 response->setKey(request->getKey());
2745
2746 // Set HTTP method in response from request
2747 response->setHttpMethod (request->getHttpMethod ());
2748
2749 PEG_METHOD_EXIT();
2750
2751 return(response);
2752 }
2753
2754 Message * DefaultProviderManager::handleEnableModuleRequest(const Message * message) throw()
2755 chip 1.1 {
2756 // HACK
|
2757 chip 1.4 ProviderRegistrationManager * _providerRegistrationManager = GetProviderRegistrationManager();
|
2758 chip 1.1
2759 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleEnableModuleRequest");
2760
2761 CIMEnableModuleRequestMessage * request =
2762 dynamic_cast<CIMEnableModuleRequestMessage *>(const_cast<Message *>(message));
2763
2764 PEGASUS_ASSERT(request != 0);
2765
2766 //
2767 // get module status
2768 //
2769 CIMInstance mInstance = request->providerModule;
2770 Array<Uint16> operationalStatus;
2771 Uint32 pos = mInstance.findProperty(CIMName ("OperationalStatus"));
2772
2773 if(pos != PEG_NOT_FOUND)
2774 {
2775 //
2776 // ATTN-CAKG-P2-20020821: Check for null status?
2777 //
2778 mInstance.getProperty(pos).getValue().get(operationalStatus);
2779 chip 1.1 }
2780
2781 // update module status from Stopped to OK
2782 for(Uint32 i=0, n = operationalStatus.size(); i < n; i++)
2783 {
2784 if(operationalStatus[i] == _MODULE_STOPPED)
2785 {
2786 operationalStatus.remove(i);
2787 }
2788 }
2789
2790 operationalStatus.append(_MODULE_OK);
2791
2792 //
2793 // get module name
2794 //
2795 String moduleName;
2796
2797 Uint32 pos2 = mInstance.findProperty(CIMName ("Name"));
2798
2799 if(pos2 != PEG_NOT_FOUND)
2800 chip 1.1 {
2801 mInstance.getProperty(pos2).getValue().get(moduleName);
2802 }
2803
2804 if(_providerRegistrationManager->setProviderModuleStatus
2805 (moduleName, operationalStatus) == false)
2806 {
2807 //l10n
2808 //throw PEGASUS_CIM_EXCEPTION(CIM_ERR_FAILED, "set module status failed.");
2809 throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, MessageLoaderParms(
2810 "ProviderManager.DefaultProviderManager.SET_MODULE_STATUS_FAILED",
2811 "set module status failed."));
2812 }
2813
2814 CIMEnableModuleResponseMessage * response =
2815 new CIMEnableModuleResponseMessage(
2816 request->messageId,
2817 CIMException(),
2818 request->queueIds.copyAndPop(),
2819 operationalStatus);
2820
2821 chip 1.1 PEGASUS_ASSERT(response != 0);
2822
2823 // preserve message key
2824 response->setKey(request->getKey());
2825
2826 // Set HTTP method in response from request
2827 response->setHttpMethod (request->getHttpMethod ());
2828
2829 PEG_METHOD_EXIT();
2830
2831 return(response);
2832 }
2833
2834 Message * DefaultProviderManager::handleStopAllProvidersRequest(const Message * message) throw()
2835 {
2836 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleStopAllProvidersRequest");
2837
2838 CIMStopAllProvidersRequestMessage * request =
2839 dynamic_cast<CIMStopAllProvidersRequestMessage *>(const_cast<Message *>(message));
2840
2841 PEGASUS_ASSERT(request != 0);
2842 chip 1.1
2843 CIMStopAllProvidersResponseMessage * response =
2844 new CIMStopAllProvidersResponseMessage(
2845 request->messageId,
2846 CIMException(),
2847 request->queueIds.copyAndPop());
2848
2849 PEGASUS_ASSERT(response != 0);
2850
2851 // preserve message key
2852 response->setKey(request->getKey());
2853
2854 // Set HTTP method in response from request
2855 response->setHttpMethod (request->getHttpMethod ());
2856
2857 // tell the provider manager to shutdown all the providers
|
2858 schuur 1.10 providerManager.shutdownAllProviders();
|
2859 chip 1.1
2860 PEG_METHOD_EXIT();
2861
2862 return(response);
2863 }
2864
2865 void DefaultProviderManager::_insertEntry (
2866 const Provider & provider,
2867 const EnableIndicationsResponseHandler *handler)
2868 {
2869 PEG_METHOD_ENTER (TRC_INDICATION_SERVICE,
2870 "DefaultProviderManager::_insertEntry");
2871
2872 String tableKey = _generateKey
2873 (provider);
2874
2875 _responseTable.insert (tableKey, const_cast<EnableIndicationsResponseHandler *>(handler));
2876
2877 PEG_METHOD_EXIT();
2878 }
2879
2880 chip 1.1 EnableIndicationsResponseHandler * DefaultProviderManager::_removeEntry(
2881 const String & key)
2882 {
2883 PEG_METHOD_ENTER (TRC_INDICATION_SERVICE,
2884 "DefaultProviderManager::_removeEntry");
2885 EnableIndicationsResponseHandler *ret = 0;
2886
2887 _responseTable.lookup(key, ret);
|
2888 schuur 1.14 _responseTable.remove(key); // why is this needed ? - we get killed when removed...
|
2889 chip 1.1
2890 PEG_METHOD_EXIT();
2891
2892 return(ret);
2893 }
2894
2895 String DefaultProviderManager::_generateKey (
2896 const Provider & provider)
2897 {
2898 String tableKey;
2899
2900 PEG_METHOD_ENTER (TRC_INDICATION_SERVICE,
2901 "DefaultProviderManager::_generateKey");
2902
2903 //
2904 // Append provider key values to key
2905 //
2906 String providerName = provider.getName();
2907 String providerFileName = provider.getModule()->getFileName();
2908 tableKey.append (providerName);
2909 tableKey.append (providerFileName);
2910 chip 1.1
2911 PEG_METHOD_EXIT();
2912
2913 return(tableKey);
|
2914 schuur 1.18 }
2915
2916 String DefaultProviderManager::_generateKey (
2917 const String & providerName,
2918 const String & providerFileName)
2919 {
2920 String tableKey;
2921
2922 PEG_METHOD_ENTER (TRC_INDICATION_SERVICE,
2923 "DefaultProviderManagerService::_generateKey");
2924
2925 //
2926 // Append providerName and providerFileName to key
2927 //
2928 tableKey.append (providerName);
2929 tableKey.append (providerFileName);
2930
2931 PEG_METHOD_EXIT ();
2932 return tableKey;
|
2933 chip 1.5 }
2934
2935 ProviderName DefaultProviderManager::_resolveProviderName(const ProviderName & providerName)
2936 {
2937 ProviderName temp = findProvider(providerName);
|
2938 schuur 1.14 String physicalName = _resolvePhysicalName(temp.getPhysicalName());
2939 temp.setPhysicalName(physicalName);
|
2940 chip 1.5
|
2941 schuur 1.14 return(temp);
2942 }
2943
2944 ProviderName DefaultProviderManager::_resolveProviderName(String & destinationPath)
2945 {
2946 ProviderName temp = findProvider(destinationPath);
|
2947 kv.le 1.8
|
2948 schuur 1.14 String physicalName = _resolvePhysicalName(temp.getPhysicalName());
|
2949 chip 1.5
2950 temp.setPhysicalName(physicalName);
2951
2952 return(temp);
|
2953 chip 1.1 }
2954
2955 PEGASUS_NAMESPACE_END
|