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