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