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