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