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