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