1 kumpf 1.1 //%2006////////////////////////////////////////////////////////////////////////
2 //
3 // 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 // IBM Corp.; EMC Corporation, The Open Group.
7 // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
8 // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
9 // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
10 // EMC Corporation; VERITAS Software Corporation; The Open Group.
11 // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
12 // EMC Corporation; Symantec Corporation; The Open Group.
13 //
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 //
21 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
22 kumpf 1.1 // 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 "ProviderMessageHandler.h"
35
36 #include <Pegasus/Common/OperationContextInternal.h>
37 #include <Pegasus/Common/Tracer.h>
38 #include <Pegasus/Common/StatisticalData.h>
39 #include <Pegasus/Common/Logger.h>
40 #include <Pegasus/Common/MessageLoader.h>
41 #include <Pegasus/Common/Constants.h>
42
43 kumpf 1.1 #include <Pegasus/Provider/CIMInstanceQueryProvider.h>
44 #include <Pegasus/Provider/CIMAssociationProvider.h>
45 #include <Pegasus/Provider/CIMMethodProvider.h>
46 #include <Pegasus/Provider/CIMIndicationProvider.h>
47 #include <Pegasus/Provider/CIMIndicationConsumerProvider.h>
48
49 #include <Pegasus/Query/QueryExpression/QueryExpression.h>
50 #include <Pegasus/ProviderManager2/QueryExpressionFactory.h>
51
52 #include <Pegasus/ProviderManager2/SimpleResponseHandler.h>
53 #include <Pegasus/ProviderManager2/OperationResponseHandler.h>
54 #include <Pegasus/ProviderManager2/AutoPThreadSecurity.h>
55
|
56 kumpf 1.3 #define HANDLE_PROVIDER_EXCEPTION(providerCall, handler) \
57 try \
58 { \
59 providerCall; \
60 } \
61 catch (CIMException& e) \
62 { \
63 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, \
64 "Provider Exception: " + e.getMessage()); \
|
65 mike 1.4 handler.setCIMException(e); \
|
66 kumpf 1.3 } \
67 catch (Exception& e) \
68 { \
69 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, \
70 "Provider Exception: " + e.getMessage()); \
71 handler.setStatus( \
72 CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); \
73 } \
74 catch (...) \
75 { \
76 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, \
77 "Provider Exception: Unknown"); \
78 handler.setStatus(CIM_ERR_FAILED, "Unknown error."); \
79 }
|
80 kumpf 1.1
81
82 PEGASUS_NAMESPACE_BEGIN
83
84 template<class T>
85 inline T* getProviderInterface(CIMProvider* provider)
86 {
87 T * p = dynamic_cast<T *>(provider);
88
89 if (p == 0)
90 {
91 throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_NOT_SUPPORTED, MessageLoaderParms(
92 "ProviderManager.ProviderFacade.INVALID_PROVIDER_INTERFACE",
93 "Invalid provider interface."));
94 }
95
96 return p;
97 }
98
99 //
100 // Default Provider Manager
101 kumpf 1.1 //
102 ProviderMessageHandler::ProviderMessageHandler(
103 const String& name,
104 CIMProvider* provider,
105 PEGASUS_INDICATION_CALLBACK_T indicationCallback,
106 PEGASUS_RESPONSE_CHUNK_CALLBACK_T responseChunkCallback,
107 Boolean subscriptionInitComplete)
108 : _name(name),
109 _provider(provider),
110 _indicationCallback(indicationCallback),
111 _responseChunkCallback(responseChunkCallback),
112 _subscriptionInitComplete(subscriptionInitComplete),
113 _indicationResponseHandler(0)
114 {
115 }
116
117 ProviderMessageHandler::~ProviderMessageHandler()
118 {
119 }
120
121 String ProviderMessageHandler::getName() const
122 kumpf 1.1 {
123 return _name;
124 }
125
126 void ProviderMessageHandler::setProvider(CIMProvider* provider)
127 {
128 _provider = provider;
129 }
130
131 void ProviderMessageHandler::initialize(CIMOMHandle& cimom)
132 {
133 _provider->initialize(cimom);
134 }
135
136 void ProviderMessageHandler::terminate()
137 {
138 _disableIndications();
|
139 kumpf 1.2
140 try
141 {
142 _provider->terminate();
143 }
144 catch (...)
145 {
146 PEG_TRACE_STRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,
147 "Caught exception from provider " + _name +
148 " terminate() method.");
149 }
|
150 kumpf 1.1 }
151
152 void ProviderMessageHandler::subscriptionInitComplete()
153 {
154 if (status.testSubscriptions())
155 {
156 _enableIndications();
157 }
158
159 _subscriptionInitComplete = true;
160 }
161
162 CIMResponseMessage* ProviderMessageHandler::processMessage(
163 CIMRequestMessage* request)
164 {
165 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
166 "ProviderMessageHandler::processMessage()");
167
168 CIMResponseMessage* response = 0;
169
|
170 kumpf 1.3 try
171 {
172 // pass the request message to a handler method based on message type
173 switch(request->getType())
174 {
175 case CIM_GET_INSTANCE_REQUEST_MESSAGE:
176 response = _handleGetInstanceRequest(request);
177 break;
178
179 case CIM_ENUMERATE_INSTANCES_REQUEST_MESSAGE:
180 response = _handleEnumerateInstancesRequest(request);
181 break;
182
183 case CIM_ENUMERATE_INSTANCE_NAMES_REQUEST_MESSAGE:
184 response = _handleEnumerateInstanceNamesRequest(request);
185 break;
186
187 case CIM_CREATE_INSTANCE_REQUEST_MESSAGE:
188 response = _handleCreateInstanceRequest(request);
189 break;
190
191 kumpf 1.3 case CIM_MODIFY_INSTANCE_REQUEST_MESSAGE:
192 response = _handleModifyInstanceRequest(request);
193 break;
194
195 case CIM_DELETE_INSTANCE_REQUEST_MESSAGE:
196 response = _handleDeleteInstanceRequest(request);
197 break;
198
199 case CIM_EXEC_QUERY_REQUEST_MESSAGE:
200 response = _handleExecQueryRequest(request);
201 break;
202
203 case CIM_ASSOCIATORS_REQUEST_MESSAGE:
204 response = _handleAssociatorsRequest(request);
205 break;
206
207 case CIM_ASSOCIATOR_NAMES_REQUEST_MESSAGE:
208 response = _handleAssociatorNamesRequest(request);
209 break;
210
211 case CIM_REFERENCES_REQUEST_MESSAGE:
212 kumpf 1.3 response = _handleReferencesRequest(request);
213 break;
214
215 case CIM_REFERENCE_NAMES_REQUEST_MESSAGE:
216 response = _handleReferenceNamesRequest(request);
217 break;
218
219 case CIM_GET_PROPERTY_REQUEST_MESSAGE:
220 response = _handleGetPropertyRequest(request);
221 break;
222
223 case CIM_SET_PROPERTY_REQUEST_MESSAGE:
224 response = _handleSetPropertyRequest(request);
225 break;
226
227 case CIM_INVOKE_METHOD_REQUEST_MESSAGE:
228 response = _handleInvokeMethodRequest(request);
229 break;
230
231 case CIM_CREATE_SUBSCRIPTION_REQUEST_MESSAGE:
232 response = _handleCreateSubscriptionRequest(request);
233 kumpf 1.3 break;
234
235 case CIM_MODIFY_SUBSCRIPTION_REQUEST_MESSAGE:
236 response = _handleModifySubscriptionRequest(request);
237 break;
238
239 case CIM_DELETE_SUBSCRIPTION_REQUEST_MESSAGE:
240 response = _handleDeleteSubscriptionRequest(request);
241 break;
242
243 case CIM_EXPORT_INDICATION_REQUEST_MESSAGE:
244 response = _handleExportIndicationRequest(request);
245 break;
246
247 default:
248 PEGASUS_ASSERT(0);
249 break;
250 }
251 }
252 catch (CIMException& e)
253 {
254 kumpf 1.3 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
255 "CIMException: " + e.getMessage());
256 response = request->buildResponse();
257 response->cimException = PEGASUS_CIM_EXCEPTION_LANG(
258 e.getContentLanguages(), e.getCode(), e.getMessage());
259 }
260 catch (Exception& e)
|
261 kumpf 1.1 {
|
262 kumpf 1.3 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
263 "Exception: " + e.getMessage());
264 response = request->buildResponse();
265 response->cimException = PEGASUS_CIM_EXCEPTION_LANG(
266 e.getContentLanguages(), CIM_ERR_FAILED, e.getMessage());
267 }
268 catch (...)
269 {
270 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
271 "Exception: Unknown");
272 response = request->buildResponse();
273 response->cimException = PEGASUS_CIM_EXCEPTION(
274 CIM_ERR_FAILED, "Unknown error.");
|
275 kumpf 1.1 }
276
277 PEG_METHOD_EXIT();
278
279 return response;
280 }
281
|
282 kumpf 1.3 OperationContext ProviderMessageHandler::_createProviderOperationContext(
283 const OperationContext& context)
284 {
285 OperationContext providerContext;
286
287 providerContext.insert(context.get(IdentityContainer::NAME));
288 providerContext.insert(context.get(AcceptLanguageListContainer::NAME));
289 providerContext.insert(context.get(ContentLanguageListContainer::NAME));
290
291 return providerContext;
292 }
293
|
294 kumpf 1.1 CIMResponseMessage* ProviderMessageHandler::_handleGetInstanceRequest(
295 CIMRequestMessage* message)
296 {
297 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
298 "ProviderMessageHandler::_handleGetInstanceRequest");
299
300 CIMGetInstanceRequestMessage* request =
301 dynamic_cast<CIMGetInstanceRequestMessage*>(message);
302 PEGASUS_ASSERT(request != 0);
303
|
304 kumpf 1.3 AutoPtr<CIMGetInstanceResponseMessage> response(
|
305 kumpf 1.1 dynamic_cast<CIMGetInstanceResponseMessage*>(
|
306 kumpf 1.3 request->buildResponse()));
307 PEGASUS_ASSERT(response.get() != 0);
|
308 kumpf 1.1
309 // create a handler for this request
310 GetInstanceResponseHandler handler(
|
311 kumpf 1.3 request, response.get(), _responseChunkCallback);
|
312 kumpf 1.1
|
313 kumpf 1.3 // make target object path
314 CIMObjectPath objectPath(
315 System::getHostName(),
316 request->nameSpace,
317 request->instanceName.getClassName(),
318 request->instanceName.getKeyBindings());
|
319 kumpf 1.1
|
320 kumpf 1.3 PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
321 "ProviderMessageHandler::_handleGetInstanceRequest - "
322 "Object path: $0",
323 objectPath.toString()));
|
324 kumpf 1.1
|
325 kumpf 1.3 OperationContext providerContext(
326 _createProviderOperationContext(request->operationContext));
|
327 kumpf 1.1
|
328 kumpf 1.3 AutoPThreadSecurity threadLevelSecurity(providerContext);
|
329 kumpf 1.1
|
330 kumpf 1.3 CIMInstanceProvider* provider =
331 getProviderInterface<CIMInstanceProvider>(_provider);
|
332 kumpf 1.1
|
333 kumpf 1.3 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
334 "Calling provider.getInstance: " + _name);
|
335 kumpf 1.1
|
336 kumpf 1.3 StatProviderTimeMeasurement providerTime(response.get());
|
337 kumpf 1.1
|
338 kumpf 1.3 HANDLE_PROVIDER_EXCEPTION(
|
339 kumpf 1.1 provider->getInstance(
|
340 kumpf 1.3 providerContext,
|
341 kumpf 1.1 objectPath,
342 request->includeQualifiers,
343 request->includeClassOrigin,
344 request->propertyList,
|
345 kumpf 1.3 handler),
346 handler)
|
347 kumpf 1.1
348 PEG_METHOD_EXIT();
|
349 kumpf 1.3 return response.release();
|
350 kumpf 1.1 }
351
352 CIMResponseMessage* ProviderMessageHandler::_handleEnumerateInstancesRequest(
353 CIMRequestMessage* message)
354 {
355 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
356 "ProviderMessageHandler::_handleEnumerateInstanceRequest");
357
358 CIMEnumerateInstancesRequestMessage* request =
359 dynamic_cast<CIMEnumerateInstancesRequestMessage*>(message);
360 PEGASUS_ASSERT(request != 0);
361
|
362 kumpf 1.3 AutoPtr<CIMEnumerateInstancesResponseMessage> response(
|
363 kumpf 1.1 dynamic_cast<CIMEnumerateInstancesResponseMessage*>(
|
364 kumpf 1.3 request->buildResponse()));
365 PEGASUS_ASSERT(response.get() != 0);
|
366 kumpf 1.1
367 // create a handler for this request
368 EnumerateInstancesResponseHandler handler(
|
369 kumpf 1.3 request, response.get(), _responseChunkCallback);
|
370 kumpf 1.1
|
371 kumpf 1.3 // make target object path
372 CIMObjectPath objectPath(
373 System::getHostName(),
374 request->nameSpace,
375 request->className);
|
376 kumpf 1.1
|
377 kumpf 1.3 PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
378 "ProviderMessageHandler::_handleEnumerateInstancesRequest - "
379 "Object path: $0",
380 objectPath.toString()));
|
381 kumpf 1.1
|
382 kumpf 1.3 OperationContext providerContext(
383 _createProviderOperationContext(request->operationContext));
|
384 kumpf 1.1
|
385 kumpf 1.3 AutoPThreadSecurity threadLevelSecurity(providerContext);
|
386 kumpf 1.1
|
387 kumpf 1.3 CIMInstanceProvider* provider =
388 getProviderInterface<CIMInstanceProvider>(_provider);
|
389 kumpf 1.1
|
390 kumpf 1.3 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
391 "Calling provider.enumerateInstances: " + _name);
|
392 kumpf 1.1
|
393 kumpf 1.3 StatProviderTimeMeasurement providerTime(response.get());
|
394 kumpf 1.1
|
395 kumpf 1.3 HANDLE_PROVIDER_EXCEPTION(
|
396 kumpf 1.1 provider->enumerateInstances(
|
397 kumpf 1.3 providerContext,
|
398 kumpf 1.1 objectPath,
399 request->includeQualifiers,
400 request->includeClassOrigin,
401 request->propertyList,
|
402 kumpf 1.3 handler),
403 handler)
|
404 kumpf 1.1
405 PEG_METHOD_EXIT();
|
406 kumpf 1.3 return response.release();
|
407 kumpf 1.1 }
408
409 CIMResponseMessage* ProviderMessageHandler::_handleEnumerateInstanceNamesRequest(
410 CIMRequestMessage* message)
411 {
412 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
413 "ProviderMessageHandler::_handleEnumerateInstanceNamesRequest");
414
415 CIMEnumerateInstanceNamesRequestMessage* request =
416 dynamic_cast<CIMEnumerateInstanceNamesRequestMessage*>(message);
417 PEGASUS_ASSERT(request != 0);
418
|
419 kumpf 1.3 AutoPtr<CIMEnumerateInstanceNamesResponseMessage> response(
|
420 kumpf 1.1 dynamic_cast<CIMEnumerateInstanceNamesResponseMessage*>(
|
421 kumpf 1.3 request->buildResponse()));
422 PEGASUS_ASSERT(response.get() != 0);
|
423 kumpf 1.1
424 // create a handler for this request
425 EnumerateInstanceNamesResponseHandler handler(
|
426 kumpf 1.3 request, response.get(), _responseChunkCallback);
|
427 kumpf 1.1
|
428 kumpf 1.3 // make target object path
429 CIMObjectPath objectPath(
430 System::getHostName(),
431 request->nameSpace,
432 request->className);
|
433 kumpf 1.1
|
434 kumpf 1.3 PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
435 "ProviderMessageHandler::_handleEnumerateInstanceNamesRequest - "
436 "Object path: $0",
437 objectPath.toString()));
|
438 kumpf 1.1
|
439 kumpf 1.3 OperationContext providerContext(
440 _createProviderOperationContext(request->operationContext));
|
441 kumpf 1.1
|
442 kumpf 1.3 AutoPThreadSecurity threadLevelSecurity(providerContext);
|
443 kumpf 1.1
|
444 kumpf 1.3 CIMInstanceProvider* provider =
445 getProviderInterface<CIMInstanceProvider>(_provider);
|
446 kumpf 1.1
|
447 kumpf 1.3 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
448 "Calling provider.enumerateInstanceNames: " + _name);
|
449 kumpf 1.1
|
450 kumpf 1.3 StatProviderTimeMeasurement providerTime(response.get());
|
451 kumpf 1.1
|
452 kumpf 1.3 HANDLE_PROVIDER_EXCEPTION(
|
453 kumpf 1.1 provider->enumerateInstanceNames(
|
454 kumpf 1.3 providerContext,
|
455 kumpf 1.1 objectPath,
|
456 kumpf 1.3 handler),
457 handler)
|
458 kumpf 1.1
459 PEG_METHOD_EXIT();
|
460 kumpf 1.3 return response.release();
|
461 kumpf 1.1 }
462
463 CIMResponseMessage* ProviderMessageHandler::_handleCreateInstanceRequest(
464 CIMRequestMessage* message)
465 {
466 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
467 "ProviderMessageHandler::_handleCreateInstanceRequest");
468
469 CIMCreateInstanceRequestMessage* request =
470 dynamic_cast<CIMCreateInstanceRequestMessage*>(message);
471 PEGASUS_ASSERT(request != 0);
472
|
473 kumpf 1.3 AutoPtr<CIMCreateInstanceResponseMessage> response(
|
474 kumpf 1.1 dynamic_cast<CIMCreateInstanceResponseMessage*>(
|
475 kumpf 1.3 request->buildResponse()));
476 PEGASUS_ASSERT(response.get() != 0);
|
477 kumpf 1.1
478 // create a handler for this request
479 CreateInstanceResponseHandler handler(
|
480 kumpf 1.3 request, response.get(), _responseChunkCallback);
|
481 kumpf 1.1
|
482 kumpf 1.3 // make target object path
483 CIMObjectPath objectPath(
484 System::getHostName(),
485 request->nameSpace,
486 request->newInstance.getPath().getClassName(),
487 request->newInstance.getPath().getKeyBindings());
|
488 kumpf 1.1
|
489 kumpf 1.3 PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
490 "ProviderMessageHandler::_handleCreateInstanceRequest - "
491 "Object path: $0",
492 objectPath.toString()));
|
493 kumpf 1.1
|
494 kumpf 1.3 OperationContext providerContext(
495 _createProviderOperationContext(request->operationContext));
|
496 kumpf 1.1
|
497 kumpf 1.3 AutoPThreadSecurity threadLevelSecurity(providerContext);
|
498 kumpf 1.1
|
499 kumpf 1.3 CIMInstanceProvider* provider =
500 getProviderInterface<CIMInstanceProvider>(_provider);
|
501 kumpf 1.1
|
502 kumpf 1.3 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
503 "Calling provider.createInstance: " + _name);
|
504 kumpf 1.1
|
505 kumpf 1.3 StatProviderTimeMeasurement providerTime(response.get());
|
506 kumpf 1.1
|
507 kumpf 1.3 HANDLE_PROVIDER_EXCEPTION(
|
508 kumpf 1.1 provider->createInstance(
|
509 kumpf 1.3 providerContext,
|
510 kumpf 1.1 objectPath,
511 request->newInstance,
|
512 kumpf 1.3 handler),
513 handler)
|
514 kumpf 1.1
515 PEG_METHOD_EXIT();
|
516 kumpf 1.3 return response.release();
|
517 kumpf 1.1 }
518
519 CIMResponseMessage* ProviderMessageHandler::_handleModifyInstanceRequest(
520 CIMRequestMessage* message)
521 {
522 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
523 "ProviderMessageHandler::_handleModifyInstanceRequest");
524
525 CIMModifyInstanceRequestMessage* request =
526 dynamic_cast<CIMModifyInstanceRequestMessage*>(message);
527 PEGASUS_ASSERT(request != 0);
528
|
529 kumpf 1.3 AutoPtr<CIMModifyInstanceResponseMessage> response(
|
530 kumpf 1.1 dynamic_cast<CIMModifyInstanceResponseMessage*>(
|
531 kumpf 1.3 request->buildResponse()));
532 PEGASUS_ASSERT(response.get() != 0);
|
533 kumpf 1.1
534 // create a handler for this request
535 ModifyInstanceResponseHandler handler(
|
536 kumpf 1.3 request, response.get(), _responseChunkCallback);
|
537 kumpf 1.1
|
538 kumpf 1.3 // make target object path
539 CIMObjectPath objectPath(
540 System::getHostName(),
541 request->nameSpace,
542 request->modifiedInstance.getPath().getClassName(),
543 request->modifiedInstance.getPath().getKeyBindings());
|
544 kumpf 1.1
|
545 kumpf 1.3 PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
546 "ProviderMessageHandler::_handleModifyInstanceRequest - "
547 "Object path: $0",
548 objectPath.toString()));
|
549 kumpf 1.1
|
550 kumpf 1.3 OperationContext providerContext(
551 _createProviderOperationContext(request->operationContext));
|
552 kumpf 1.1
|
553 kumpf 1.3 AutoPThreadSecurity threadLevelSecurity(providerContext);
|
554 kumpf 1.1
|
555 kumpf 1.3 CIMInstanceProvider* provider =
556 getProviderInterface<CIMInstanceProvider>(_provider);
|
557 kumpf 1.1
|
558 kumpf 1.3 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
559 "Calling provider.modifyInstance: " + _name);
|
560 kumpf 1.1
|
561 kumpf 1.3 StatProviderTimeMeasurement providerTime(response.get());
|
562 kumpf 1.1
|
563 kumpf 1.3 HANDLE_PROVIDER_EXCEPTION(
|
564 kumpf 1.1 provider->modifyInstance(
|
565 kumpf 1.3 providerContext,
|
566 kumpf 1.1 objectPath,
567 request->modifiedInstance,
568 request->includeQualifiers,
569 request->propertyList,
|
570 kumpf 1.3 handler),
571 handler)
|
572 kumpf 1.1
573 PEG_METHOD_EXIT();
|
574 kumpf 1.3 return response.release();
|
575 kumpf 1.1 }
576
577 CIMResponseMessage* ProviderMessageHandler::_handleDeleteInstanceRequest(
578 CIMRequestMessage* message)
579 {
580 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
581 "ProviderMessageHandler::_handleDeleteInstanceRequest");
582
583 CIMDeleteInstanceRequestMessage* request =
584 dynamic_cast<CIMDeleteInstanceRequestMessage*>(message);
585 PEGASUS_ASSERT(request != 0);
586
|
587 kumpf 1.3 AutoPtr<CIMDeleteInstanceResponseMessage> response(
|
588 kumpf 1.1 dynamic_cast<CIMDeleteInstanceResponseMessage*>(
|
589 kumpf 1.3 request->buildResponse()));
590 PEGASUS_ASSERT(response.get() != 0);
|
591 kumpf 1.1
592 // create a handler for this request
593 DeleteInstanceResponseHandler handler(
|
594 kumpf 1.3 request, response.get(), _responseChunkCallback);
|
595 kumpf 1.1
|
596 kumpf 1.3 // make target object path
597 CIMObjectPath objectPath(
598 System::getHostName(),
599 request->nameSpace,
600 request->instanceName.getClassName(),
601 request->instanceName.getKeyBindings());
|
602 kumpf 1.1
|
603 kumpf 1.3 PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
604 "ProviderMessageHandler::_handleDeleteInstanceRequest - "
605 "Object path: $0",
606 objectPath.toString()));
|
607 kumpf 1.1
|
608 kumpf 1.3 OperationContext providerContext(
609 _createProviderOperationContext(request->operationContext));
|
610 kumpf 1.1
|
611 kumpf 1.3 AutoPThreadSecurity threadLevelSecurity(providerContext);
|
612 kumpf 1.1
|
613 kumpf 1.3 CIMInstanceProvider* provider =
614 getProviderInterface<CIMInstanceProvider>(_provider);
|
615 kumpf 1.1
|
616 kumpf 1.3 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
617 "Calling provider.deleteInstance: " + _name);
|
618 kumpf 1.1
|
619 kumpf 1.3 StatProviderTimeMeasurement providerTime(response.get());
|
620 kumpf 1.1
|
621 kumpf 1.3 HANDLE_PROVIDER_EXCEPTION(
|
622 kumpf 1.1 provider->deleteInstance(
|
623 kumpf 1.3 providerContext,
|
624 kumpf 1.1 objectPath,
|
625 kumpf 1.3 handler),
626 handler)
|
627 kumpf 1.1
628 PEG_METHOD_EXIT();
|
629 kumpf 1.3 return response.release();
|
630 kumpf 1.1 }
631
632 CIMResponseMessage* ProviderMessageHandler::_handleExecQueryRequest(
633 CIMRequestMessage* message)
634 {
635 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
636 "ProviderMessageHandler::_handleExecQueryRequest");
637
638 CIMExecQueryRequestMessage* request =
639 dynamic_cast<CIMExecQueryRequestMessage*>(message);
640 PEGASUS_ASSERT(request != 0);
641
|
642 kumpf 1.3 AutoPtr<CIMExecQueryResponseMessage> response(
|
643 kumpf 1.1 dynamic_cast<CIMExecQueryResponseMessage*>(
|
644 kumpf 1.3 request->buildResponse()));
645 PEGASUS_ASSERT(response.get() != 0);
|
646 kumpf 1.1
647 // create a handler for this request
648 ExecQueryResponseHandler handler(
|
649 kumpf 1.3 request, response.get(), _responseChunkCallback);
|
650 kumpf 1.1
|
651 kumpf 1.3 // make target object path
652 CIMObjectPath objectPath(
653 System::getHostName(),
654 request->nameSpace,
655 request->className);
|
656 kumpf 1.1
|
657 kumpf 1.3 PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
658 "ProviderMessageHandler::_handleExecQueryRequest - "
659 "Object path: $0",
660 objectPath.toString()));
|
661 kumpf 1.1
|
662 kumpf 1.3 QueryExpression qx(request->queryLanguage,request->query);
|
663 kumpf 1.1
|
664 kumpf 1.3 OperationContext providerContext(
665 _createProviderOperationContext(request->operationContext));
|
666 kumpf 1.1
|
667 kumpf 1.3 AutoPThreadSecurity threadLevelSecurity(providerContext);
|
668 kumpf 1.1
|
669 kumpf 1.3 CIMInstanceQueryProvider* provider =
670 getProviderInterface<CIMInstanceQueryProvider>(_provider);
|
671 kumpf 1.1
|
672 kumpf 1.3 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
673 "Calling provider.execQuery: " + _name);
|
674 kumpf 1.1
|
675 kumpf 1.3 StatProviderTimeMeasurement providerTime(response.get());
|
676 kumpf 1.1
|
677 kumpf 1.3 HANDLE_PROVIDER_EXCEPTION(
|
678 kumpf 1.1 provider->execQuery(
|
679 kumpf 1.3 providerContext,
|
680 kumpf 1.1 objectPath,
681 qx,
|
682 kumpf 1.3 handler),
683 handler)
|
684 kumpf 1.1
685 PEG_METHOD_EXIT();
|
686 kumpf 1.3 return response.release();
|
687 kumpf 1.1 }
688
689 CIMResponseMessage* ProviderMessageHandler::_handleAssociatorsRequest(
690 CIMRequestMessage* message)
691 {
692 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
693 "ProviderMessageHandler::_handleAssociatorsRequest");
694
695 CIMAssociatorsRequestMessage* request =
696 dynamic_cast<CIMAssociatorsRequestMessage*>(message);
697 PEGASUS_ASSERT(request != 0);
698
|
699 kumpf 1.3 AutoPtr<CIMAssociatorsResponseMessage> response(
|
700 kumpf 1.1 dynamic_cast<CIMAssociatorsResponseMessage*>(
|
701 kumpf 1.3 request->buildResponse()));
702 PEGASUS_ASSERT(response.get() != 0);
|
703 kumpf 1.1
704 // create a handler for this request
705 AssociatorsResponseHandler handler(
|
706 kumpf 1.3 request, response.get(), _responseChunkCallback);
|
707 kumpf 1.1
|
708 kumpf 1.3 // make target object path
709 CIMObjectPath objectPath(
710 System::getHostName(),
711 request->nameSpace,
712 request->objectName.getClassName());
|
713 kumpf 1.1
|
714 kumpf 1.3 objectPath.setKeyBindings(request->objectName.getKeyBindings());
|
715 kumpf 1.1
|
716 kumpf 1.3 PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
717 "ProviderMessageHandler::_handleAssociatorsRequest - "
718 "Object path: $0",
719 objectPath.toString()));
|
720 kumpf 1.1
|
721 kumpf 1.3 CIMObjectPath assocPath(
722 System::getHostName(),
723 request->nameSpace,
724 request->assocClass.getString());
|
725 kumpf 1.1
|
726 kumpf 1.3 OperationContext providerContext(
727 _createProviderOperationContext(request->operationContext));
|
728 kumpf 1.1
|
729 kumpf 1.3 AutoPThreadSecurity threadLevelSecurity(providerContext);
|
730 kumpf 1.1
|
731 kumpf 1.3 CIMAssociationProvider* provider =
732 getProviderInterface<CIMAssociationProvider>(_provider);
|
733 kumpf 1.1
|
734 kumpf 1.3 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
735 "Calling provider.associators: " + _name);
|
736 kumpf 1.1
|
737 kumpf 1.3 StatProviderTimeMeasurement providerTime(response.get());
|
738 kumpf 1.1
|
739 kumpf 1.3 HANDLE_PROVIDER_EXCEPTION(
|
740 kumpf 1.1 provider->associators(
|
741 kumpf 1.3 providerContext,
|
742 kumpf 1.1 objectPath,
743 request->assocClass,
744 request->resultClass,
745 request->role,
746 request->resultRole,
747 request->includeQualifiers,
748 request->includeClassOrigin,
749 request->propertyList,
|
750 kumpf 1.3 handler),
751 handler)
|
752 kumpf 1.1
753 PEG_METHOD_EXIT();
|
754 kumpf 1.3 return response.release();
|
755 kumpf 1.1 }
756
757 CIMResponseMessage* ProviderMessageHandler::_handleAssociatorNamesRequest(
758 CIMRequestMessage* message)
759 {
760 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
761 "ProviderMessageHandler::_handleAssociatorNamesRequest");
762
763 CIMAssociatorNamesRequestMessage* request =
764 dynamic_cast<CIMAssociatorNamesRequestMessage*>(message);
765 PEGASUS_ASSERT(request != 0);
766
|
767 kumpf 1.3 AutoPtr<CIMAssociatorNamesResponseMessage> response(
|
768 kumpf 1.1 dynamic_cast<CIMAssociatorNamesResponseMessage*>(
|
769 kumpf 1.3 request->buildResponse()));
770 PEGASUS_ASSERT(response.get() != 0);
|
771 kumpf 1.1
772 // create a handler for this request
773 AssociatorNamesResponseHandler handler(
|
774 kumpf 1.3 request, response.get(), _responseChunkCallback);
|
775 kumpf 1.1
|
776 kumpf 1.3 // make target object path
777 CIMObjectPath objectPath(
778 System::getHostName(),
779 request->nameSpace,
780 request->objectName.getClassName());
|
781 kumpf 1.1
|
782 kumpf 1.3 objectPath.setKeyBindings(request->objectName.getKeyBindings());
|
783 kumpf 1.1
|
784 kumpf 1.3 PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
785 "ProviderMessageHandler::_handleAssociationNamesRequest - "
786 "Object path: $0",
787 objectPath.toString()));
|
788 kumpf 1.1
|
789 kumpf 1.3 CIMObjectPath assocPath(
790 System::getHostName(),
791 request->nameSpace,
792 request->assocClass.getString());
|
793 kumpf 1.1
|
794 kumpf 1.3 OperationContext providerContext(
795 _createProviderOperationContext(request->operationContext));
|
796 kumpf 1.1
|
797 kumpf 1.3 AutoPThreadSecurity threadLevelSecurity(providerContext);
|
798 kumpf 1.1
|
799 kumpf 1.3 CIMAssociationProvider* provider =
800 getProviderInterface<CIMAssociationProvider>(_provider);
|
801 kumpf 1.1
|
802 kumpf 1.3 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
803 "Calling provider.associatorNames: " + _name);
|
804 kumpf 1.1
|
805 kumpf 1.3 StatProviderTimeMeasurement providerTime(response.get());
|
806 kumpf 1.1
|
807 kumpf 1.3 HANDLE_PROVIDER_EXCEPTION(
|
808 kumpf 1.1 provider->associatorNames(
|
809 kumpf 1.3 providerContext,
|
810 kumpf 1.1 objectPath,
811 request->assocClass,
812 request->resultClass,
813 request->role,
814 request->resultRole,
|
815 kumpf 1.3 handler),
816 handler)
|
817 kumpf 1.1
818 PEG_METHOD_EXIT();
|
819 kumpf 1.3 return response.release();
|
820 kumpf 1.1 }
821
822 CIMResponseMessage* ProviderMessageHandler::_handleReferencesRequest(
823 CIMRequestMessage* message)
824 {
825 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
826 "ProviderMessageHandler::_handleReferencesRequest");
827
828 CIMReferencesRequestMessage* request =
829 dynamic_cast<CIMReferencesRequestMessage*>(message);
830 PEGASUS_ASSERT(request != 0);
831
|
832 kumpf 1.3 AutoPtr<CIMReferencesResponseMessage> response(
|
833 kumpf 1.1 dynamic_cast<CIMReferencesResponseMessage*>(
|
834 kumpf 1.3 request->buildResponse()));
835 PEGASUS_ASSERT(response.get() != 0);
|
836 kumpf 1.1
837 // create a handler for this request
838 ReferencesResponseHandler handler(
|
839 kumpf 1.3 request, response.get(), _responseChunkCallback);
|
840 kumpf 1.1
|
841 kumpf 1.3 // make target object path
842 CIMObjectPath objectPath(
843 System::getHostName(),
844 request->nameSpace,
845 request->objectName.getClassName());
|
846 kumpf 1.1
|
847 kumpf 1.3 objectPath.setKeyBindings(request->objectName.getKeyBindings());
|
848 kumpf 1.1
|
849 kumpf 1.3 PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
850 "ProviderMessageHandler::_handleReferencesRequest - "
851 "Object path: $0",
852 objectPath.toString()));
|
853 kumpf 1.1
|
854 kumpf 1.3 CIMObjectPath resultPath(
855 System::getHostName(),
856 request->nameSpace,
857 request->resultClass.getString());
|
858 kumpf 1.1
|
859 kumpf 1.3 OperationContext providerContext(
860 _createProviderOperationContext(request->operationContext));
|
861 kumpf 1.1
|
862 kumpf 1.3 AutoPThreadSecurity threadLevelSecurity(providerContext);
|
863 kumpf 1.1
|
864 kumpf 1.3 CIMAssociationProvider* provider =
865 getProviderInterface<CIMAssociationProvider>(_provider);
|
866 kumpf 1.1
|
867 kumpf 1.3 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
868 "Calling provider.references: " + _name);
|
869 kumpf 1.1
|
870 kumpf 1.3 StatProviderTimeMeasurement providerTime(response.get());
|
871 kumpf 1.1
|
872 kumpf 1.3 HANDLE_PROVIDER_EXCEPTION(
|
873 kumpf 1.1 provider->references(
|
874 kumpf 1.3 providerContext,
|
875 kumpf 1.1 objectPath,
876 request->resultClass,
877 request->role,
878 request->includeQualifiers,
879 request->includeClassOrigin,
880 request->propertyList,
|
881 kumpf 1.3 handler),
882 handler)
|
883 kumpf 1.1
884 PEG_METHOD_EXIT();
|
885 kumpf 1.3 return response.release();
|
886 kumpf 1.1 }
887
888 CIMResponseMessage* ProviderMessageHandler::_handleReferenceNamesRequest(
889 CIMRequestMessage* message)
890 {
891 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
892 "ProviderMessageHandler::_handleReferenceNamesRequest");
893
894 CIMReferenceNamesRequestMessage* request =
895 dynamic_cast<CIMReferenceNamesRequestMessage*>(message);
896 PEGASUS_ASSERT(request != 0);
897
|
898 kumpf 1.3 AutoPtr<CIMReferenceNamesResponseMessage> response(
|
899 kumpf 1.1 dynamic_cast<CIMReferenceNamesResponseMessage*>(
|
900 kumpf 1.3 request->buildResponse()));
901 PEGASUS_ASSERT(response.get() != 0);
|
902 kumpf 1.1
903 // create a handler for this request
904 ReferenceNamesResponseHandler handler(
|
905 kumpf 1.3 request, response.get(), _responseChunkCallback);
|
906 kumpf 1.1
|
907 kumpf 1.3 // make target object path
908 CIMObjectPath objectPath(
909 System::getHostName(),
910 request->nameSpace,
911 request->objectName.getClassName());
|
912 kumpf 1.1
|
913 kumpf 1.3 objectPath.setKeyBindings(request->objectName.getKeyBindings());
|
914 kumpf 1.1
|
915 kumpf 1.3 PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
916 "ProviderMessageHandler::_handleReferenceNamesRequest - "
917 "Object path: $0",
918 objectPath.toString()));
|
919 kumpf 1.1
|
920 kumpf 1.3 CIMObjectPath resultPath(
921 System::getHostName(),
922 request->nameSpace,
923 request->resultClass.getString());
|
924 kumpf 1.1
|
925 kumpf 1.3 OperationContext providerContext(
926 _createProviderOperationContext(request->operationContext));
|
927 kumpf 1.1
|
928 kumpf 1.3 AutoPThreadSecurity threadLevelSecurity(providerContext);
|
929 kumpf 1.1
|
930 kumpf 1.3 CIMAssociationProvider* provider =
931 getProviderInterface<CIMAssociationProvider>(_provider);
|
932 kumpf 1.1
|
933 kumpf 1.3 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
934 "Calling provider.referenceNames: " + _name);
|
935 kumpf 1.1
|
936 kumpf 1.3 StatProviderTimeMeasurement providerTime(response.get());
|
937 kumpf 1.1
|
938 kumpf 1.3 HANDLE_PROVIDER_EXCEPTION(
|
939 kumpf 1.1 provider->referenceNames(
|
940 kumpf 1.3 providerContext,
|
941 kumpf 1.1 objectPath,
942 request->resultClass,
943 request->role,
|
944 kumpf 1.3 handler),
945 handler)
|
946 kumpf 1.1
947 PEG_METHOD_EXIT();
|
948 kumpf 1.3 return response.release();
|
949 kumpf 1.1 }
950
951 CIMResponseMessage* ProviderMessageHandler::_handleGetPropertyRequest(
952 CIMRequestMessage* message)
953 {
954 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
955 "ProviderMessageHandler::_handleGetPropertyRequest");
956
957 CIMGetPropertyRequestMessage* request =
958 dynamic_cast<CIMGetPropertyRequestMessage*>(message);
959 PEGASUS_ASSERT(request != 0);
960
|
961 kumpf 1.3 AutoPtr<CIMGetPropertyResponseMessage> response(
|
962 kumpf 1.1 dynamic_cast<CIMGetPropertyResponseMessage*>(
|
963 kumpf 1.3 request->buildResponse()));
964 PEGASUS_ASSERT(response.get() != 0);
965
966 //
967 // Translate the GetProperty request to a GetInstance request message
968 //
969
970 Array<CIMName> propertyList;
971 propertyList.append(request->propertyName);
972
973 CIMGetInstanceRequestMessage getInstanceRequest(
974 request->messageId,
975 request->nameSpace,
976 request->instanceName,
977 false, // localOnly
978 false, // includeQualifiers
979 false, // includeClassOrigin
980 propertyList,
981 request->queueIds);
|
982 kumpf 1.1
|
983 kumpf 1.3 getInstanceRequest.operationContext = request->operationContext;
984
985 AutoPtr<CIMGetInstanceResponseMessage> getInstanceResponse(
986 dynamic_cast<CIMGetInstanceResponseMessage*>(
987 getInstanceRequest.buildResponse()));
988 PEGASUS_ASSERT(getInstanceResponse.get() != 0);
|
989 kumpf 1.1
|
990 kumpf 1.3 //
991 // Process the GetInstance operation
992 //
|
993 kumpf 1.1
|
994 kumpf 1.3 // create a handler for this request (with chunking disabled)
995 GetInstanceResponseHandler handler(
996 &getInstanceRequest, getInstanceResponse.get(), 0);
|
997 kumpf 1.1
|
998 kumpf 1.3 // make target object path
999 CIMObjectPath objectPath(
1000 System::getHostName(),
1001 getInstanceRequest.nameSpace,
1002 getInstanceRequest.instanceName.getClassName(),
1003 getInstanceRequest.instanceName.getKeyBindings());
|
1004 kumpf 1.1
|
1005 kumpf 1.3 PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1006 "ProviderMessageHandler::_handleGetPropertyRequest - "
1007 "Object path: $0, Property: $1",
1008 objectPath.toString(), request->propertyName.getString()));
|
1009 kumpf 1.1
|
1010 kumpf 1.3 OperationContext providerContext(
1011 _createProviderOperationContext(getInstanceRequest.operationContext));
|
1012 kumpf 1.1
|
1013 kumpf 1.3 AutoPThreadSecurity threadLevelSecurity(providerContext);
|
1014 kumpf 1.1
|
1015 kumpf 1.3 CIMInstanceProvider* provider =
1016 getProviderInterface<CIMInstanceProvider>(_provider);
|
1017 kumpf 1.1
|
1018 kumpf 1.3 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1019 "Calling provider.getInstance: " + _name);
|
1020 kumpf 1.1
|
1021 kumpf 1.3 StatProviderTimeMeasurement providerTime(response.get());
|
1022 kumpf 1.1
|
1023 kumpf 1.3 HANDLE_PROVIDER_EXCEPTION(
|
1024 kumpf 1.1 provider->getInstance(
|
1025 kumpf 1.3 providerContext,
|
1026 kumpf 1.1 objectPath,
|
1027 kumpf 1.3 getInstanceRequest.includeQualifiers,
1028 getInstanceRequest.includeClassOrigin,
1029 getInstanceRequest.propertyList,
1030 handler),
1031 handler)
|
1032 kumpf 1.1
|
1033 kumpf 1.3 //
1034 // Copy the GetInstance response into the GetProperty response message
1035 //
1036
1037 response->cimException = getInstanceResponse->cimException;
1038
1039 if (response->cimException.getCode() == CIM_ERR_SUCCESS)
1040 {
1041 CIMInstance instance = getInstanceResponse->cimInstance;
|
1042 kumpf 1.1
|
1043 kumpf 1.3 Uint32 pos = instance.findProperty(request->propertyName);
|
1044 kumpf 1.1
|
1045 kumpf 1.3 if (pos != PEG_NOT_FOUND)
1046 {
1047 response->value = instance.getProperty(pos).getValue();
1048 }
1049 else // Property not found. Return CIM_ERR_NO_SUCH_PROPERTY.
1050 {
1051 response->cimException = PEGASUS_CIM_EXCEPTION(
1052 CIM_ERR_NO_SUCH_PROPERTY,
1053 request->propertyName.getString());
|
1054 kumpf 1.1 }
|
1055 kumpf 1.3 }
|
1056 kumpf 1.1
|
1057 kumpf 1.3 response->operationContext = getInstanceResponse->operationContext;
|
1058 kumpf 1.1
1059 PEG_METHOD_EXIT();
|
1060 kumpf 1.3 return response.release();
|
1061 kumpf 1.1 }
1062
1063 CIMResponseMessage* ProviderMessageHandler::_handleSetPropertyRequest(
1064 CIMRequestMessage* message)
1065 {
1066 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1067 "ProviderMessageHandler::_handleSetPropertyRequest");
1068
1069 CIMSetPropertyRequestMessage* request =
1070 dynamic_cast<CIMSetPropertyRequestMessage*>(message);
1071 PEGASUS_ASSERT(request != 0);
1072
|
1073 kumpf 1.3 AutoPtr<CIMSetPropertyResponseMessage> response(
|
1074 kumpf 1.1 dynamic_cast<CIMSetPropertyResponseMessage*>(
|
1075 kumpf 1.3 request->buildResponse()));
1076 PEGASUS_ASSERT(response.get() != 0);
|
1077 kumpf 1.1
|
1078 kumpf 1.3 //
1079 // Translate the SetProperty request to a ModifyInstance request message
1080 //
1081
1082 // make target object path
1083 CIMObjectPath objectPath(
1084 System::getHostName(),
1085 request->nameSpace,
1086 request->instanceName.getClassName(),
1087 request->instanceName.getKeyBindings());
1088
1089 CIMInstance instance(request->instanceName.getClassName());
1090 instance.addProperty(CIMProperty(
1091 request->propertyName, request->newValue));
1092 instance.setPath(objectPath);
1093
1094 Array<CIMName> propertyList;
1095 propertyList.append(request->propertyName);
1096
1097 CIMModifyInstanceRequestMessage modifyInstanceRequest(
1098 request->messageId,
1099 kumpf 1.3 request->nameSpace,
1100 instance,
1101 false, // includeQualifiers
1102 propertyList,
1103 request->queueIds);
|
1104 kumpf 1.1
|
1105 kumpf 1.3 modifyInstanceRequest.operationContext = request->operationContext;
|
1106 kumpf 1.1
|
1107 kumpf 1.3 AutoPtr<CIMModifyInstanceResponseMessage> modifyInstanceResponse(
1108 dynamic_cast<CIMModifyInstanceResponseMessage*>(
1109 modifyInstanceRequest.buildResponse()));
1110 PEGASUS_ASSERT(modifyInstanceResponse.get() != 0);
|
1111 kumpf 1.1
|
1112 kumpf 1.3 //
1113 // Process the ModifyInstance operation
1114 //
|
1115 kumpf 1.1
|
1116 kumpf 1.3 // create a handler for this request (with chunking disabled)
1117 ModifyInstanceResponseHandler handler(
1118 &modifyInstanceRequest, modifyInstanceResponse.get(), 0);
|
1119 kumpf 1.1
|
1120 kumpf 1.3 PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1121 "ProviderMessageHandler::_handleSetPropertyRequest - "
1122 "Object path: $0, Property: $1",
1123 objectPath.toString(), request->propertyName.getString()));
|
1124 kumpf 1.1
|
1125 kumpf 1.3 OperationContext providerContext(
1126 _createProviderOperationContext(request->operationContext));
|
1127 kumpf 1.1
|
1128 kumpf 1.3 AutoPThreadSecurity threadLevelSecurity(providerContext);
|
1129 kumpf 1.1
|
1130 kumpf 1.3 CIMInstanceProvider* provider =
1131 getProviderInterface<CIMInstanceProvider>(_provider);
|
1132 kumpf 1.1
|
1133 kumpf 1.3 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1134 "Calling provider.modifyInstance: " + _name);
|
1135 kumpf 1.1
|
1136 kumpf 1.3 StatProviderTimeMeasurement providerTime(response.get());
|
1137 kumpf 1.1
|
1138 kumpf 1.3 HANDLE_PROVIDER_EXCEPTION(
|
1139 kumpf 1.1 provider->modifyInstance(
|
1140 kumpf 1.3 providerContext,
|
1141 kumpf 1.1 objectPath,
|
1142 kumpf 1.3 modifyInstanceRequest.modifiedInstance,
1143 modifyInstanceRequest.includeQualifiers,
1144 modifyInstanceRequest.propertyList,
1145 handler),
1146 handler)
1147
1148 //
1149 // Copy the ModifyInstance response into the GetProperty response message
1150 //
|
1151 kumpf 1.1
|
1152 kumpf 1.3 response->cimException = modifyInstanceResponse->cimException;
1153 response->operationContext = modifyInstanceResponse->operationContext;
|
1154 kumpf 1.1
1155 PEG_METHOD_EXIT();
|
1156 kumpf 1.3 return response.release();
|
1157 kumpf 1.1 }
1158
1159 CIMResponseMessage* ProviderMessageHandler::_handleInvokeMethodRequest(
1160 CIMRequestMessage* message)
1161 {
1162 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1163 "ProviderMessageHandler::_handleInvokeMethodRequest");
1164
1165 CIMInvokeMethodRequestMessage* request =
1166 dynamic_cast<CIMInvokeMethodRequestMessage*>(message);
1167 PEGASUS_ASSERT(request != 0);
1168
|
1169 kumpf 1.3 AutoPtr<CIMInvokeMethodResponseMessage> response(
|
1170 kumpf 1.1 dynamic_cast<CIMInvokeMethodResponseMessage*>(
|
1171 kumpf 1.3 request->buildResponse()));
1172 PEGASUS_ASSERT(response.get() != 0);
|
1173 kumpf 1.1
1174 // create a handler for this request
1175 InvokeMethodResponseHandler handler(
|
1176 kumpf 1.3 request, response.get(), _responseChunkCallback);
|
1177 kumpf 1.1
|
1178 kumpf 1.3 // make target object path
1179 CIMObjectPath objectPath(
1180 System::getHostName(),
1181 request->nameSpace,
1182 request->instanceName.getClassName(),
1183 request->instanceName.getKeyBindings());
|
1184 kumpf 1.1
|
1185 kumpf 1.3 PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1186 "ProviderMessageHandler::_handleInvokeMethodRequest - "
1187 "Object path: $0, Method: $1",
1188 objectPath.toString(), request->methodName.getString()));
|
1189 kumpf 1.1
|
1190 kumpf 1.3 CIMObjectPath instanceReference(request->instanceName);
1191 instanceReference.setNameSpace(request->nameSpace);
|
1192 kumpf 1.1
|
1193 kumpf 1.3 OperationContext providerContext(
1194 _createProviderOperationContext(request->operationContext));
|
1195 kumpf 1.1
|
1196 kumpf 1.3 AutoPThreadSecurity threadLevelSecurity(providerContext);
|
1197 kumpf 1.1
|
1198 kumpf 1.3 CIMMethodProvider* provider =
1199 getProviderInterface<CIMMethodProvider>(_provider);
|
1200 kumpf 1.1
|
1201 kumpf 1.3 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1202 "Calling provider.invokeMethod: " + _name);
|
1203 kumpf 1.1
|
1204 kumpf 1.3 StatProviderTimeMeasurement providerTime(response.get());
|
1205 kumpf 1.1
|
1206 kumpf 1.3 HANDLE_PROVIDER_EXCEPTION(
|
1207 kumpf 1.1 provider->invokeMethod(
|
1208 kumpf 1.3 providerContext,
|
1209 kumpf 1.1 instanceReference,
1210 request->methodName,
1211 request->inParameters,
|
1212 kumpf 1.3 handler),
1213 handler)
|
1214 kumpf 1.1
1215 PEG_METHOD_EXIT();
|
1216 kumpf 1.3 return response.release();
|
1217 kumpf 1.1 }
1218
1219 CIMResponseMessage* ProviderMessageHandler::_handleCreateSubscriptionRequest(
1220 CIMRequestMessage* message)
1221 {
1222 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1223 "ProviderMessageHandler::_handleCreateSubscriptionRequest");
1224
1225 CIMCreateSubscriptionRequestMessage* request =
1226 dynamic_cast<CIMCreateSubscriptionRequestMessage*>(message);
1227 PEGASUS_ASSERT(request != 0);
1228
|
1229 kumpf 1.3 AutoPtr<CIMCreateSubscriptionResponseMessage> response(
|
1230 kumpf 1.1 dynamic_cast<CIMCreateSubscriptionResponseMessage*>(
|
1231 kumpf 1.3 request->buildResponse()));
1232 PEGASUS_ASSERT(response.get() != 0);
|
1233 kumpf 1.1
1234 OperationResponseHandler handler(
|
1235 kumpf 1.3 request, response.get(), _responseChunkCallback);
|
1236 kumpf 1.1
|
1237 kumpf 1.3 String temp;
1238
1239 for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
|
1240 kumpf 1.1 {
|
1241 kumpf 1.3 temp.append(request->classNames[i].getString());
|
1242 kumpf 1.1
|
1243 kumpf 1.3 if (i < (n - 1))
|
1244 kumpf 1.1 {
|
1245 kumpf 1.3 temp.append(", ");
1246 }
1247 }
1248
1249 PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER,
1250 Logger::TRACE,
1251 "ProviderMessageHandler::_handleCreateSubscriptionRequest - "
1252 "Host name: $0 Name space: $1 Class name(s): $2",
1253 System::getHostName(),
1254 request->nameSpace.getString(),
1255 temp));
1256
1257 //
1258 // Save the provider instance from the request
1259 //
1260 ProviderIdContainer pidc = (ProviderIdContainer)
1261 request->operationContext.get(ProviderIdContainer::NAME);
1262 status.setProviderInstance(pidc.getProvider());
1263
1264 // convert arguments
|
1265 kumpf 1.1
|
1266 kumpf 1.3 Array<CIMObjectPath> classNames;
|
1267 kumpf 1.1
|
1268 kumpf 1.3 for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1269 {
1270 CIMObjectPath className(
|
1271 kumpf 1.1 System::getHostName(),
|
1272 kumpf 1.3 request->nameSpace,
1273 request->classNames[i]);
|
1274 kumpf 1.1
|
1275 kumpf 1.3 classNames.append(className);
1276 }
|
1277 kumpf 1.1
|
1278 kumpf 1.3 OperationContext providerContext(
1279 _createProviderOperationContext(request->operationContext));
1280 providerContext.insert(request->operationContext.get(
1281 SubscriptionInstanceContainer::NAME));
1282 providerContext.insert(request->operationContext.get(
1283 SubscriptionFilterConditionContainer::NAME));
1284 providerContext.insert(request->operationContext.get(
1285 SubscriptionFilterQueryContainer::NAME));
|
1286 kumpf 1.1
|
1287 kumpf 1.3 AutoPThreadSecurity threadLevelSecurity(providerContext);
|
1288 kumpf 1.1
|
1289 kumpf 1.3 CIMIndicationProvider* provider =
1290 getProviderInterface<CIMIndicationProvider>(_provider);
|
1291 kumpf 1.1
|
1292 kumpf 1.3 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1293 "Calling provider.createSubscription: " + _name);
|
1294 kumpf 1.1
|
1295 kumpf 1.3 StatProviderTimeMeasurement providerTime(response.get());
|
1296 kumpf 1.1
|
1297 kumpf 1.3 HANDLE_PROVIDER_EXCEPTION(
|
1298 kumpf 1.1 provider->createSubscription(
|
1299 kumpf 1.3 providerContext,
|
1300 kumpf 1.1 request->subscriptionInstance.getPath(),
1301 classNames,
1302 request->propertyList,
|
1303 kumpf 1.3 request->repeatNotificationPolicy),
1304 handler)
1305
1306 //
1307 // Increment count of current subscriptions for this provider
1308 //
1309 if (status.testIfZeroAndIncrementSubscriptions())
1310 {
1311 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1312 "First accepted subscription");
|
1313 kumpf 1.1
1314 //
|
1315 kumpf 1.3 // If there were no current subscriptions before the increment,
1316 // the first subscription has been created
1317 // Call the provider's enableIndications method
|
1318 kumpf 1.1 //
|
1319 kumpf 1.3 if (_subscriptionInitComplete)
|
1320 kumpf 1.1 {
|
1321 kumpf 1.3 _enableIndications();
|
1322 kumpf 1.1 }
1323 }
1324
1325 PEG_METHOD_EXIT();
|
1326 kumpf 1.3 return response.release();
|
1327 kumpf 1.1 }
1328
1329 CIMResponseMessage* ProviderMessageHandler::_handleModifySubscriptionRequest(
1330 CIMRequestMessage* message)
1331 {
1332 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1333 "ProviderMessageHandler::_handleModifySubscriptionRequest");
1334
1335 CIMModifySubscriptionRequestMessage* request =
1336 dynamic_cast<CIMModifySubscriptionRequestMessage*>(message);
1337 PEGASUS_ASSERT(request != 0);
1338
|
1339 kumpf 1.3 AutoPtr<CIMModifySubscriptionResponseMessage> response(
|
1340 kumpf 1.1 dynamic_cast<CIMModifySubscriptionResponseMessage*>(
|
1341 kumpf 1.3 request->buildResponse()));
1342 PEGASUS_ASSERT(response.get() != 0);
|
1343 kumpf 1.1
1344 OperationResponseHandler handler(
|
1345 kumpf 1.3 request, response.get(), _responseChunkCallback);
1346
1347 String temp;
|
1348 kumpf 1.1
|
1349 kumpf 1.3 for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
|
1350 kumpf 1.1 {
|
1351 kumpf 1.3 temp.append(request->classNames[i].getString());
|
1352 kumpf 1.1
|
1353 kumpf 1.3 if (i < (n - 1))
|
1354 kumpf 1.1 {
|
1355 kumpf 1.3 temp.append(", ");
1356 }
1357 }
|
1358 kumpf 1.1
|
1359 kumpf 1.3 PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER,
1360 Logger::TRACE,
1361 "ProviderMessageHandler::_handleCreateSubscriptionRequest - "
1362 "Host name: $0 Name space: $1 Class name(s): $2",
1363 System::getHostName(),
1364 request->nameSpace.getString(),
1365 temp));
1366
1367 // convert arguments
1368
1369 Array<CIMObjectPath> classNames;
|
1370 kumpf 1.1
|
1371 kumpf 1.3 for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1372 {
1373 CIMObjectPath className(
|
1374 kumpf 1.1 System::getHostName(),
|
1375 kumpf 1.3 request->nameSpace,
1376 request->classNames[i]);
|
1377 kumpf 1.1
|
1378 kumpf 1.3 classNames.append(className);
1379 }
|
1380 kumpf 1.1
|
1381 kumpf 1.3 OperationContext providerContext(
1382 _createProviderOperationContext(request->operationContext));
1383 providerContext.insert(request->operationContext.get(
1384 SubscriptionInstanceContainer::NAME));
1385 providerContext.insert(request->operationContext.get(
1386 SubscriptionFilterConditionContainer::NAME));
1387 providerContext.insert(request->operationContext.get(
1388 SubscriptionFilterQueryContainer::NAME));
|
1389 kumpf 1.1
|
1390 kumpf 1.3 AutoPThreadSecurity threadLevelSecurity(providerContext);
|
1391 kumpf 1.1
|
1392 kumpf 1.3 CIMIndicationProvider* provider =
1393 getProviderInterface<CIMIndicationProvider>(_provider);
|
1394 kumpf 1.1
|
1395 kumpf 1.3 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1396 "Calling provider.modifySubscription: " + _name);
|
1397 kumpf 1.1
|
1398 kumpf 1.3 StatProviderTimeMeasurement providerTime(response.get());
|
1399 kumpf 1.1
|
1400 kumpf 1.3 HANDLE_PROVIDER_EXCEPTION(
|
1401 kumpf 1.1 provider->modifySubscription(
|
1402 kumpf 1.3 providerContext,
|
1403 kumpf 1.1 request->subscriptionInstance.getPath(),
1404 classNames,
1405 request->propertyList,
|
1406 kumpf 1.3 request->repeatNotificationPolicy),
1407 handler)
|
1408 kumpf 1.1
1409 PEG_METHOD_EXIT();
|
1410 kumpf 1.3 return response.release();
|
1411 kumpf 1.1 }
1412
1413 CIMResponseMessage* ProviderMessageHandler::_handleDeleteSubscriptionRequest(
1414 CIMRequestMessage* message)
1415 {
1416 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1417 "ProviderMessageHandler::_handleDeleteSubscriptionRequest");
1418
1419 CIMDeleteSubscriptionRequestMessage* request =
1420 dynamic_cast<CIMDeleteSubscriptionRequestMessage*>(message);
1421 PEGASUS_ASSERT(request != 0);
1422
|
1423 kumpf 1.3 AutoPtr<CIMDeleteSubscriptionResponseMessage> response(
|
1424 kumpf 1.1 dynamic_cast<CIMDeleteSubscriptionResponseMessage*>(
|
1425 kumpf 1.3 request->buildResponse()));
1426 PEGASUS_ASSERT(response.get() != 0);
|
1427 kumpf 1.1
1428 OperationResponseHandler handler(
|
1429 kumpf 1.3 request, response.get(), _responseChunkCallback);
1430
1431 String temp;
|
1432 kumpf 1.1
|
1433 kumpf 1.3 for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
|
1434 kumpf 1.1 {
|
1435 kumpf 1.3 temp.append(request->classNames[i].getString());
|
1436 kumpf 1.1
|
1437 kumpf 1.3 if (i < (n - 1))
|
1438 kumpf 1.1 {
|
1439 kumpf 1.3 temp.append(", ");
|
1440 kumpf 1.1 }
|
1441 kumpf 1.3 }
|
1442 kumpf 1.1
|
1443 kumpf 1.3 PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER,
1444 Logger::TRACE,
1445 "ProviderMessageHandler::_handleDeleteSubscriptionRequest - "
1446 "Host name: $0 Name space: $1 Class name(s): $2",
1447 System::getHostName(),
1448 request->nameSpace.getString(),
1449 temp));
|
1450 kumpf 1.1
|
1451 kumpf 1.3 Array<CIMObjectPath> classNames;
|
1452 kumpf 1.1
|
1453 kumpf 1.3 for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1454 {
1455 CIMObjectPath className(
1456 System::getHostName(),
1457 request->nameSpace,
1458 request->classNames[i]);
|
1459 kumpf 1.1
|
1460 kumpf 1.3 classNames.append(className);
1461 }
|
1462 kumpf 1.1
|
1463 kumpf 1.3 OperationContext providerContext(
1464 _createProviderOperationContext(request->operationContext));
1465 providerContext.insert(request->operationContext.get(
1466 SubscriptionInstanceContainer::NAME));
|
1467 kumpf 1.1
|
1468 kumpf 1.3 AutoPThreadSecurity threadLevelSecurity(providerContext);
|
1469 kumpf 1.1
|
1470 kumpf 1.3 CIMIndicationProvider* provider =
1471 getProviderInterface<CIMIndicationProvider>(_provider);
|
1472 kumpf 1.1
|
1473 kumpf 1.3 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1474 "Calling provider.deleteSubscription: " + _name);
|
1475 kumpf 1.1
|
1476 kumpf 1.3 StatProviderTimeMeasurement providerTime(response.get());
|
1477 kumpf 1.1
|
1478 kumpf 1.3 HANDLE_PROVIDER_EXCEPTION(
|
1479 kumpf 1.1 provider->deleteSubscription(
|
1480 kumpf 1.3 providerContext,
|
1481 kumpf 1.1 request->subscriptionInstance.getPath(),
|
1482 kumpf 1.3 classNames),
1483 handler)
|
1484 kumpf 1.1
|
1485 kumpf 1.3 //
1486 // Decrement count of current subscriptions for this provider
1487 //
1488 if (status.decrementSubscriptionsAndTestIfZero())
1489 {
|
1490 kumpf 1.1 //
|
1491 kumpf 1.3 // If there are no current subscriptions after the decrement,
1492 // the last subscription has been deleted
1493 // Call the provider's disableIndications method
|
1494 kumpf 1.1 //
|
1495 kumpf 1.3 if (_subscriptionInitComplete)
|
1496 kumpf 1.1 {
|
1497 kumpf 1.3 _disableIndications();
|
1498 kumpf 1.1 }
1499 }
1500
1501 PEG_METHOD_EXIT();
|
1502 kumpf 1.3 return response.release();
|
1503 kumpf 1.1 }
1504
1505 CIMResponseMessage* ProviderMessageHandler::_handleExportIndicationRequest(
1506 CIMRequestMessage* message)
1507 {
1508 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1509 "ProviderMessageHandler::_handleExportIndicationRequest");
1510
1511 CIMExportIndicationRequestMessage* request =
1512 dynamic_cast<CIMExportIndicationRequestMessage*>(message);
1513 PEGASUS_ASSERT(request != 0);
1514
|
1515 kumpf 1.3 AutoPtr<CIMExportIndicationResponseMessage> response(
|
1516 kumpf 1.1 dynamic_cast<CIMExportIndicationResponseMessage*>(
|
1517 kumpf 1.3 request->buildResponse()));
1518 PEGASUS_ASSERT(response.get() != 0);
|
1519 kumpf 1.1
1520 OperationResponseHandler handler(
|
1521 kumpf 1.3 request, response.get(), _responseChunkCallback);
|
1522 kumpf 1.1
|
1523 kumpf 1.3 // NOTE: Accept-Languages do not need to be set in the consume msg.
1524 OperationContext providerContext;
1525 providerContext.insert(request->operationContext.get(
1526 IdentityContainer::NAME));
|
1527 kumpf 1.1 //L10N_TODO
1528 // ATTN-CEC 06/04/03 NOTE: I can't find where the consume msg is sent. This
1529 // does not appear to be hooked up. When it is added, need to
1530 // make sure that Content-Language is set in the consume msg.
|
1531 kumpf 1.3 providerContext.insert(request->operationContext.get(
1532 ContentLanguageListContainer::NAME));
|
1533 kumpf 1.1
|
1534 kumpf 1.3 AutoPThreadSecurity threadLevelSecurity(providerContext);
|
1535 kumpf 1.1
|
1536 kumpf 1.3 CIMIndicationConsumerProvider* provider =
1537 getProviderInterface<CIMIndicationConsumerProvider>(_provider);
|
1538 kumpf 1.1
|
1539 kumpf 1.3 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1540 "Calling provider.consumeIndication: " + _name);
|
1541 kumpf 1.1
|
1542 kumpf 1.3 StatProviderTimeMeasurement providerTime(response.get());
|
1543 kumpf 1.1
|
1544 kumpf 1.3 HANDLE_PROVIDER_EXCEPTION(
|
1545 kumpf 1.1 provider->consumeIndication(
|
1546 kumpf 1.3 providerContext,
|
1547 kumpf 1.1 request->destinationPath,
|
1548 kumpf 1.3 request->indicationInstance),
1549 handler)
|
1550 kumpf 1.1
1551 PEG_METHOD_EXIT();
|
1552 kumpf 1.3 return response.release();
|
1553 kumpf 1.1 }
1554
1555 void ProviderMessageHandler::_enableIndications()
1556 {
1557 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1558 "DefaultProviderManager::_enableIndications");
1559
1560 try
1561 {
1562 EnableIndicationsResponseHandler* indicationResponseHandler =
1563 new EnableIndicationsResponseHandler(
1564 0, // request
1565 0, // response
1566 status.getProviderInstance(),
1567 _indicationCallback,
1568 _responseChunkCallback);
1569
|
1570 kumpf 1.3 _indicationResponseHandler = indicationResponseHandler;
|
1571 kumpf 1.1
|
1572 kumpf 1.2 status.setIndicationsEnabled(true);
|
1573 kumpf 1.1
1574 CIMIndicationProvider* provider =
1575 getProviderInterface<CIMIndicationProvider>(_provider);
1576
|
1577 kumpf 1.3 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1578 "Calling provider.enableIndications: " + _name);
1579
|
1580 kumpf 1.1 provider->enableIndications(*indicationResponseHandler);
1581 }
1582 catch (Exception& e)
1583 {
|
1584 kumpf 1.3 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
1585 "Exception: " + e.getMessage());
|
1586 kumpf 1.1
|
1587 kumpf 1.3 Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::WARNING,
|
1588 kumpf 1.1 "ProviderManager.Default.DefaultProviderManager."
1589 "ENABLE_INDICATIONS_FAILED",
1590 "Failed to enable indications for provider $0: $1.",
1591 _name, e.getMessage());
1592 }
1593 catch(...)
1594 {
|
1595 kumpf 1.3 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
|
1596 kumpf 1.1 "Unexpected error in _enableIndications");
1597
|
1598 kumpf 1.3 Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::WARNING,
|
1599 kumpf 1.1 "ProviderManager.Default.DefaultProviderManager."
1600 "ENABLE_INDICATIONS_FAILED_UNKNOWN",
1601 "Failed to enable indications for provider $0.",
1602 _name);
1603 }
1604
1605 PEG_METHOD_EXIT();
1606 }
1607
1608 void ProviderMessageHandler::_disableIndications()
1609 {
1610 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1611 "DefaultProviderManager::_disableIndications");
1612
1613 try
1614 {
|
1615 kumpf 1.2 if (status.getIndicationsEnabled())
|
1616 kumpf 1.1 {
1617 CIMIndicationProvider* provider =
1618 getProviderInterface<CIMIndicationProvider>(_provider);
1619
|
1620 kumpf 1.3 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1621 "Calling provider.disableIndications: " + _name);
1622
|
1623 kumpf 1.2 try
1624 {
1625 provider->disableIndications();
1626 }
1627 catch (...)
1628 {
1629 PEG_TRACE_STRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,
1630 "Caught exception from provider " + _name +
|
1631 kumpf 1.3 " disableIndications() method.");
|
1632 kumpf 1.2 }
|
1633 kumpf 1.1
|
1634 kumpf 1.2 status.setIndicationsEnabled(false);
|
1635 kumpf 1.1
1636 status.resetSubscriptions();
1637
1638 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1639 "Destroying indication response handler for " + _name);
1640
1641 delete _indicationResponseHandler;
1642 _indicationResponseHandler = 0;
1643 }
1644 }
1645 catch(...)
1646 {
1647 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL3,
1648 "Error occured disabling indications in provider " + _name);
1649 }
1650 }
1651
1652 PEGASUS_NAMESPACE_END
|