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