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