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