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