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