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