1 kumpf 1.1 //%2006////////////////////////////////////////////////////////////////////////
2 //
3 // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
4 // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
5 // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
6 // IBM Corp.; EMC Corporation, The Open Group.
7 // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
8 // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
9 // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
10 // EMC Corporation; VERITAS Software Corporation; The Open Group.
11 // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
12 // EMC Corporation; Symantec Corporation; The Open Group.
13 //
14 // Permission is hereby granted, free of charge, to any person obtaining a copy
15 // of this software and associated documentation files (the "Software"), to
16 // deal in the Software without restriction, including without limitation the
17 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
18 // sell copies of the Software, and to permit persons to whom the Software is
19 // furnished to do so, subject to the following conditions:
20 //
21 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
22 kumpf 1.1 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
23 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
24 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
25 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
26 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
27 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 //
30 //==============================================================================
31 //
32 //%/////////////////////////////////////////////////////////////////////////////
33
34 #include "ProviderMessageHandler.h"
35
36 #include <Pegasus/Common/OperationContextInternal.h>
37 #include <Pegasus/Common/Tracer.h>
38 #include <Pegasus/Common/StatisticalData.h>
39 #include <Pegasus/Common/Logger.h>
40 #include <Pegasus/Common/MessageLoader.h>
41 #include <Pegasus/Common/Constants.h>
42
43 kumpf 1.1 #include <Pegasus/Provider/CIMInstanceQueryProvider.h>
44 #include <Pegasus/Provider/CIMAssociationProvider.h>
45 #include <Pegasus/Provider/CIMMethodProvider.h>
46 #include <Pegasus/Provider/CIMIndicationProvider.h>
47 #include <Pegasus/Provider/CIMIndicationConsumerProvider.h>
48
49 #include <Pegasus/Query/QueryExpression/QueryExpression.h>
50 #include <Pegasus/ProviderManager2/QueryExpressionFactory.h>
51
52 #include <Pegasus/ProviderManager2/SimpleResponseHandler.h>
53 #include <Pegasus/ProviderManager2/OperationResponseHandler.h>
54 #include <Pegasus/ProviderManager2/AutoPThreadSecurity.h>
55
|
56 kumpf 1.3 #define HANDLE_PROVIDER_EXCEPTION(providerCall, handler) \
57 try \
58 { \
59 providerCall; \
60 } \
61 catch (CIMException& e) \
62 { \
63 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, \
64 "Provider Exception: " + e.getMessage()); \
|
65 mike 1.4 handler.setCIMException(e); \
|
66 kumpf 1.3 } \
67 catch (Exception& e) \
68 { \
69 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, \
70 "Provider Exception: " + e.getMessage()); \
71 handler.setStatus( \
72 CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); \
73 } \
74 catch (...) \
75 { \
76 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, \
77 "Provider Exception: Unknown"); \
78 handler.setStatus(CIM_ERR_FAILED, "Unknown error."); \
79 }
|
80 kumpf 1.1
81
82 PEGASUS_NAMESPACE_BEGIN
83
84 template<class T>
85 inline T* getProviderInterface(CIMProvider* provider)
86 {
|
87 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 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
276 "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 mike 1.6.2.1 /*
990 MEB: propagate SessionKey here?
991 */
|
992 kumpf 1.3 getInstanceRequest.operationContext = request->operationContext;
993
994 AutoPtr<CIMGetInstanceResponseMessage> getInstanceResponse(
995 dynamic_cast<CIMGetInstanceResponseMessage*>(
996 getInstanceRequest.buildResponse()));
997 PEGASUS_ASSERT(getInstanceResponse.get() != 0);
|
998 kumpf 1.1
|
999 kumpf 1.3 //
1000 // Process the GetInstance operation
1001 //
|
1002 kumpf 1.1
|
1003 kumpf 1.3 // create a handler for this request (with chunking disabled)
1004 GetInstanceResponseHandler handler(
1005 &getInstanceRequest, getInstanceResponse.get(), 0);
|
1006 kumpf 1.1
|
1007 kumpf 1.3 // make target object path
1008 CIMObjectPath objectPath(
1009 System::getHostName(),
1010 getInstanceRequest.nameSpace,
1011 getInstanceRequest.instanceName.getClassName(),
1012 getInstanceRequest.instanceName.getKeyBindings());
|
1013 kumpf 1.1
|
1014 kumpf 1.3 PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1015 "ProviderMessageHandler::_handleGetPropertyRequest - "
1016 "Object path: $0, Property: $1",
1017 objectPath.toString(), request->propertyName.getString()));
|
1018 kumpf 1.1
|
1019 kumpf 1.3 OperationContext providerContext(
1020 _createProviderOperationContext(getInstanceRequest.operationContext));
|
1021 kumpf 1.1
|
1022 kumpf 1.3 AutoPThreadSecurity threadLevelSecurity(providerContext);
|
1023 kumpf 1.1
|
1024 kumpf 1.3 CIMInstanceProvider* provider =
1025 getProviderInterface<CIMInstanceProvider>(_provider);
|
1026 kumpf 1.1
|
1027 kumpf 1.3 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1028 "Calling provider.getInstance: " + _name);
|
1029 kumpf 1.1
|
1030 kumpf 1.3 StatProviderTimeMeasurement providerTime(response.get());
|
1031 kumpf 1.1
|
1032 kumpf 1.3 HANDLE_PROVIDER_EXCEPTION(
|
1033 kumpf 1.1 provider->getInstance(
|
1034 kumpf 1.3 providerContext,
|
1035 kumpf 1.1 objectPath,
|
1036 kumpf 1.3 getInstanceRequest.includeQualifiers,
1037 getInstanceRequest.includeClassOrigin,
1038 getInstanceRequest.propertyList,
1039 handler),
1040 handler)
|
1041 kumpf 1.1
|
1042 kumpf 1.3 //
1043 // Copy the GetInstance response into the GetProperty response message
1044 //
1045
1046 response->cimException = getInstanceResponse->cimException;
1047
1048 if (response->cimException.getCode() == CIM_ERR_SUCCESS)
1049 {
1050 CIMInstance instance = getInstanceResponse->cimInstance;
|
1051 kumpf 1.1
|
1052 kumpf 1.3 Uint32 pos = instance.findProperty(request->propertyName);
|
1053 kumpf 1.1
|
1054 kumpf 1.3 if (pos != PEG_NOT_FOUND)
1055 {
1056 response->value = instance.getProperty(pos).getValue();
1057 }
1058 else // Property not found. Return CIM_ERR_NO_SUCH_PROPERTY.
1059 {
1060 response->cimException = PEGASUS_CIM_EXCEPTION(
1061 CIM_ERR_NO_SUCH_PROPERTY,
1062 request->propertyName.getString());
|
1063 kumpf 1.1 }
|
1064 kumpf 1.3 }
|
1065 kumpf 1.1
|
1066 mike 1.6.2.1 /*
1067 MEB: propagate SessionKey here?
1068 */
|
1069 kumpf 1.3 response->operationContext = getInstanceResponse->operationContext;
|
1070 kumpf 1.1
1071 PEG_METHOD_EXIT();
|
1072 kumpf 1.3 return response.release();
|
1073 kumpf 1.1 }
1074
1075 CIMResponseMessage* ProviderMessageHandler::_handleSetPropertyRequest(
1076 CIMRequestMessage* message)
1077 {
1078 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1079 "ProviderMessageHandler::_handleSetPropertyRequest");
1080
1081 CIMSetPropertyRequestMessage* request =
1082 dynamic_cast<CIMSetPropertyRequestMessage*>(message);
1083 PEGASUS_ASSERT(request != 0);
1084
|
1085 kumpf 1.3 AutoPtr<CIMSetPropertyResponseMessage> response(
|
1086 kumpf 1.1 dynamic_cast<CIMSetPropertyResponseMessage*>(
|
1087 kumpf 1.3 request->buildResponse()));
1088 PEGASUS_ASSERT(response.get() != 0);
|
1089 kumpf 1.1
|
1090 kumpf 1.3 //
1091 // Translate the SetProperty request to a ModifyInstance request message
1092 //
1093
1094 // make target object path
1095 CIMObjectPath objectPath(
1096 System::getHostName(),
1097 request->nameSpace,
1098 request->instanceName.getClassName(),
1099 request->instanceName.getKeyBindings());
1100
1101 CIMInstance instance(request->instanceName.getClassName());
1102 instance.addProperty(CIMProperty(
1103 request->propertyName, request->newValue));
1104 instance.setPath(objectPath);
1105
1106 Array<CIMName> propertyList;
1107 propertyList.append(request->propertyName);
1108
1109 CIMModifyInstanceRequestMessage modifyInstanceRequest(
1110 request->messageId,
1111 kumpf 1.3 request->nameSpace,
1112 instance,
1113 false, // includeQualifiers
1114 propertyList,
1115 request->queueIds);
|
1116 kumpf 1.1
|
1117 mike 1.6.2.1 /*
1118 MEB: propagate SessionKey here?
1119 */
|
1120 kumpf 1.3 modifyInstanceRequest.operationContext = request->operationContext;
|
1121 kumpf 1.1
|
1122 kumpf 1.3 AutoPtr<CIMModifyInstanceResponseMessage> modifyInstanceResponse(
1123 dynamic_cast<CIMModifyInstanceResponseMessage*>(
1124 modifyInstanceRequest.buildResponse()));
1125 PEGASUS_ASSERT(modifyInstanceResponse.get() != 0);
|
1126 kumpf 1.1
|
1127 kumpf 1.3 //
1128 // Process the ModifyInstance operation
1129 //
|
1130 kumpf 1.1
|
1131 kumpf 1.3 // create a handler for this request (with chunking disabled)
1132 ModifyInstanceResponseHandler handler(
1133 &modifyInstanceRequest, modifyInstanceResponse.get(), 0);
|
1134 kumpf 1.1
|
1135 kumpf 1.3 PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1136 "ProviderMessageHandler::_handleSetPropertyRequest - "
1137 "Object path: $0, Property: $1",
1138 objectPath.toString(), request->propertyName.getString()));
|
1139 kumpf 1.1
|
1140 kumpf 1.3 OperationContext providerContext(
1141 _createProviderOperationContext(request->operationContext));
|
1142 kumpf 1.1
|
1143 kumpf 1.3 AutoPThreadSecurity threadLevelSecurity(providerContext);
|
1144 kumpf 1.1
|
1145 kumpf 1.3 CIMInstanceProvider* provider =
1146 getProviderInterface<CIMInstanceProvider>(_provider);
|
1147 kumpf 1.1
|
1148 kumpf 1.3 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1149 "Calling provider.modifyInstance: " + _name);
|
1150 kumpf 1.1
|
1151 kumpf 1.3 StatProviderTimeMeasurement providerTime(response.get());
|
1152 kumpf 1.1
|
1153 kumpf 1.3 HANDLE_PROVIDER_EXCEPTION(
|
1154 kumpf 1.1 provider->modifyInstance(
|
1155 kumpf 1.3 providerContext,
|
1156 kumpf 1.1 objectPath,
|
1157 kumpf 1.3 modifyInstanceRequest.modifiedInstance,
1158 modifyInstanceRequest.includeQualifiers,
1159 modifyInstanceRequest.propertyList,
1160 handler),
1161 handler)
1162
1163 //
1164 // Copy the ModifyInstance response into the GetProperty response message
1165 //
|
1166 kumpf 1.1
|
1167 kumpf 1.3 response->cimException = modifyInstanceResponse->cimException;
|
1168 mike 1.6.2.1 /*
1169 MEB: propagate SessionKey here?
1170 */
|
1171 kumpf 1.3 response->operationContext = modifyInstanceResponse->operationContext;
|
1172 kumpf 1.1
1173 PEG_METHOD_EXIT();
|
1174 kumpf 1.3 return response.release();
|
1175 kumpf 1.1 }
1176
1177 CIMResponseMessage* ProviderMessageHandler::_handleInvokeMethodRequest(
1178 CIMRequestMessage* message)
1179 {
1180 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1181 "ProviderMessageHandler::_handleInvokeMethodRequest");
1182
1183 CIMInvokeMethodRequestMessage* request =
1184 dynamic_cast<CIMInvokeMethodRequestMessage*>(message);
1185 PEGASUS_ASSERT(request != 0);
1186
|
1187 kumpf 1.3 AutoPtr<CIMInvokeMethodResponseMessage> response(
|
1188 kumpf 1.1 dynamic_cast<CIMInvokeMethodResponseMessage*>(
|
1189 kumpf 1.3 request->buildResponse()));
1190 PEGASUS_ASSERT(response.get() != 0);
|
1191 kumpf 1.1
1192 // create a handler for this request
1193 InvokeMethodResponseHandler handler(
|
1194 kumpf 1.3 request, response.get(), _responseChunkCallback);
|
1195 kumpf 1.1
|
1196 kumpf 1.3 // make target object path
1197 CIMObjectPath objectPath(
1198 System::getHostName(),
1199 request->nameSpace,
1200 request->instanceName.getClassName(),
1201 request->instanceName.getKeyBindings());
|
1202 kumpf 1.1
|
1203 kumpf 1.3 PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1204 "ProviderMessageHandler::_handleInvokeMethodRequest - "
1205 "Object path: $0, Method: $1",
1206 objectPath.toString(), request->methodName.getString()));
|
1207 kumpf 1.1
|
1208 kumpf 1.3 CIMObjectPath instanceReference(request->instanceName);
1209 instanceReference.setNameSpace(request->nameSpace);
|
1210 kumpf 1.1
|
1211 kumpf 1.3 OperationContext providerContext(
1212 _createProviderOperationContext(request->operationContext));
|
1213 kumpf 1.1
|
1214 kumpf 1.3 AutoPThreadSecurity threadLevelSecurity(providerContext);
|
1215 kumpf 1.1
|
1216 kumpf 1.3 CIMMethodProvider* provider =
1217 getProviderInterface<CIMMethodProvider>(_provider);
|
1218 kumpf 1.1
|
1219 kumpf 1.3 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1220 "Calling provider.invokeMethod: " + _name);
|
1221 kumpf 1.1
|
1222 kumpf 1.3 StatProviderTimeMeasurement providerTime(response.get());
|
1223 kumpf 1.1
|
1224 kumpf 1.3 HANDLE_PROVIDER_EXCEPTION(
|
1225 kumpf 1.1 provider->invokeMethod(
|
1226 kumpf 1.3 providerContext,
|
1227 kumpf 1.1 instanceReference,
1228 request->methodName,
1229 request->inParameters,
|
1230 kumpf 1.3 handler),
1231 handler)
|
1232 kumpf 1.1
1233 PEG_METHOD_EXIT();
|
1234 kumpf 1.3 return response.release();
|
1235 kumpf 1.1 }
1236
1237 CIMResponseMessage* ProviderMessageHandler::_handleCreateSubscriptionRequest(
1238 CIMRequestMessage* message)
1239 {
1240 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1241 "ProviderMessageHandler::_handleCreateSubscriptionRequest");
1242
1243 CIMCreateSubscriptionRequestMessage* request =
1244 dynamic_cast<CIMCreateSubscriptionRequestMessage*>(message);
1245 PEGASUS_ASSERT(request != 0);
1246
|
1247 kumpf 1.3 AutoPtr<CIMCreateSubscriptionResponseMessage> response(
|
1248 kumpf 1.1 dynamic_cast<CIMCreateSubscriptionResponseMessage*>(
|
1249 kumpf 1.3 request->buildResponse()));
1250 PEGASUS_ASSERT(response.get() != 0);
|
1251 kumpf 1.1
1252 OperationResponseHandler handler(
|
1253 kumpf 1.3 request, response.get(), _responseChunkCallback);
|
1254 kumpf 1.1
|
1255 kumpf 1.3 String temp;
1256
1257 for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
|
1258 kumpf 1.1 {
|
1259 kumpf 1.3 temp.append(request->classNames[i].getString());
|
1260 kumpf 1.1
|
1261 kumpf 1.3 if (i < (n - 1))
|
1262 kumpf 1.1 {
|
1263 kumpf 1.3 temp.append(", ");
1264 }
1265 }
1266
1267 PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER,
1268 Logger::TRACE,
1269 "ProviderMessageHandler::_handleCreateSubscriptionRequest - "
1270 "Host name: $0 Name space: $1 Class name(s): $2",
1271 System::getHostName(),
1272 request->nameSpace.getString(),
1273 temp));
1274
1275 //
1276 // Save the provider instance from the request
1277 //
1278 ProviderIdContainer pidc = (ProviderIdContainer)
1279 request->operationContext.get(ProviderIdContainer::NAME);
1280 status.setProviderInstance(pidc.getProvider());
1281
1282 // convert arguments
|
1283 kumpf 1.1
|
1284 kumpf 1.3 Array<CIMObjectPath> classNames;
|
1285 kumpf 1.1
|
1286 kumpf 1.3 for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1287 {
1288 CIMObjectPath className(
|
1289 kumpf 1.1 System::getHostName(),
|
1290 kumpf 1.3 request->nameSpace,
1291 request->classNames[i]);
|
1292 kumpf 1.1
|
1293 kumpf 1.3 classNames.append(className);
1294 }
|
1295 kumpf 1.1
|
1296 kumpf 1.3 OperationContext providerContext(
1297 _createProviderOperationContext(request->operationContext));
1298 providerContext.insert(request->operationContext.get(
1299 SubscriptionInstanceContainer::NAME));
1300 providerContext.insert(request->operationContext.get(
1301 SubscriptionFilterConditionContainer::NAME));
1302 providerContext.insert(request->operationContext.get(
1303 SubscriptionFilterQueryContainer::NAME));
|
1304 kumpf 1.1
|
1305 kumpf 1.3 AutoPThreadSecurity threadLevelSecurity(providerContext);
|
1306 kumpf 1.1
|
1307 kumpf 1.3 CIMIndicationProvider* provider =
1308 getProviderInterface<CIMIndicationProvider>(_provider);
|
1309 kumpf 1.1
|
1310 kumpf 1.3 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1311 "Calling provider.createSubscription: " + _name);
|
1312 kumpf 1.1
|
1313 kumpf 1.3 StatProviderTimeMeasurement providerTime(response.get());
|
1314 kumpf 1.1
|
1315 kumpf 1.3 HANDLE_PROVIDER_EXCEPTION(
|
1316 kumpf 1.1 provider->createSubscription(
|
1317 kumpf 1.3 providerContext,
|
1318 kumpf 1.1 request->subscriptionInstance.getPath(),
1319 classNames,
1320 request->propertyList,
|
1321 kumpf 1.3 request->repeatNotificationPolicy),
1322 handler)
1323
1324 //
1325 // Increment count of current subscriptions for this provider
1326 //
1327 if (status.testIfZeroAndIncrementSubscriptions())
1328 {
1329 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1330 "First accepted subscription");
|
1331 kumpf 1.1
1332 //
|
1333 kumpf 1.3 // If there were no current subscriptions before the increment,
1334 // the first subscription has been created
1335 // Call the provider's enableIndications method
|
1336 kumpf 1.1 //
|
1337 kumpf 1.3 if (_subscriptionInitComplete)
|
1338 kumpf 1.1 {
|
1339 kumpf 1.3 _enableIndications();
|
1340 kumpf 1.1 }
1341 }
1342
1343 PEG_METHOD_EXIT();
|
1344 kumpf 1.3 return response.release();
|
1345 kumpf 1.1 }
1346
1347 CIMResponseMessage* ProviderMessageHandler::_handleModifySubscriptionRequest(
1348 CIMRequestMessage* message)
1349 {
1350 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1351 "ProviderMessageHandler::_handleModifySubscriptionRequest");
1352
1353 CIMModifySubscriptionRequestMessage* request =
1354 dynamic_cast<CIMModifySubscriptionRequestMessage*>(message);
1355 PEGASUS_ASSERT(request != 0);
1356
|
1357 kumpf 1.3 AutoPtr<CIMModifySubscriptionResponseMessage> response(
|
1358 kumpf 1.1 dynamic_cast<CIMModifySubscriptionResponseMessage*>(
|
1359 kumpf 1.3 request->buildResponse()));
1360 PEGASUS_ASSERT(response.get() != 0);
|
1361 kumpf 1.1
1362 OperationResponseHandler handler(
|
1363 kumpf 1.3 request, response.get(), _responseChunkCallback);
1364
1365 String temp;
|
1366 kumpf 1.1
|
1367 kumpf 1.3 for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
|
1368 kumpf 1.1 {
|
1369 kumpf 1.3 temp.append(request->classNames[i].getString());
|
1370 kumpf 1.1
|
1371 kumpf 1.3 if (i < (n - 1))
|
1372 kumpf 1.1 {
|
1373 kumpf 1.3 temp.append(", ");
1374 }
1375 }
|
1376 kumpf 1.1
|
1377 kumpf 1.3 PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER,
1378 Logger::TRACE,
1379 "ProviderMessageHandler::_handleCreateSubscriptionRequest - "
1380 "Host name: $0 Name space: $1 Class name(s): $2",
1381 System::getHostName(),
1382 request->nameSpace.getString(),
1383 temp));
1384
1385 // convert arguments
1386
1387 Array<CIMObjectPath> classNames;
|
1388 kumpf 1.1
|
1389 kumpf 1.3 for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1390 {
1391 CIMObjectPath className(
|
1392 kumpf 1.1 System::getHostName(),
|
1393 kumpf 1.3 request->nameSpace,
1394 request->classNames[i]);
|
1395 kumpf 1.1
|
1396 kumpf 1.3 classNames.append(className);
1397 }
|
1398 kumpf 1.1
|
1399 kumpf 1.3 OperationContext providerContext(
1400 _createProviderOperationContext(request->operationContext));
1401 providerContext.insert(request->operationContext.get(
1402 SubscriptionInstanceContainer::NAME));
1403 providerContext.insert(request->operationContext.get(
1404 SubscriptionFilterConditionContainer::NAME));
1405 providerContext.insert(request->operationContext.get(
1406 SubscriptionFilterQueryContainer::NAME));
|
1407 kumpf 1.1
|
1408 kumpf 1.3 AutoPThreadSecurity threadLevelSecurity(providerContext);
|
1409 kumpf 1.1
|
1410 kumpf 1.3 CIMIndicationProvider* provider =
1411 getProviderInterface<CIMIndicationProvider>(_provider);
|
1412 kumpf 1.1
|
1413 kumpf 1.3 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1414 "Calling provider.modifySubscription: " + _name);
|
1415 kumpf 1.1
|
1416 kumpf 1.3 StatProviderTimeMeasurement providerTime(response.get());
|
1417 kumpf 1.1
|
1418 kumpf 1.3 HANDLE_PROVIDER_EXCEPTION(
|
1419 kumpf 1.1 provider->modifySubscription(
|
1420 kumpf 1.3 providerContext,
|
1421 kumpf 1.1 request->subscriptionInstance.getPath(),
1422 classNames,
1423 request->propertyList,
|
1424 kumpf 1.3 request->repeatNotificationPolicy),
1425 handler)
|
1426 kumpf 1.1
1427 PEG_METHOD_EXIT();
|
1428 kumpf 1.3 return response.release();
|
1429 kumpf 1.1 }
1430
1431 CIMResponseMessage* ProviderMessageHandler::_handleDeleteSubscriptionRequest(
1432 CIMRequestMessage* message)
1433 {
1434 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1435 "ProviderMessageHandler::_handleDeleteSubscriptionRequest");
1436
1437 CIMDeleteSubscriptionRequestMessage* request =
1438 dynamic_cast<CIMDeleteSubscriptionRequestMessage*>(message);
1439 PEGASUS_ASSERT(request != 0);
1440
|
1441 kumpf 1.3 AutoPtr<CIMDeleteSubscriptionResponseMessage> response(
|
1442 kumpf 1.1 dynamic_cast<CIMDeleteSubscriptionResponseMessage*>(
|
1443 kumpf 1.3 request->buildResponse()));
1444 PEGASUS_ASSERT(response.get() != 0);
|
1445 kumpf 1.1
1446 OperationResponseHandler handler(
|
1447 kumpf 1.3 request, response.get(), _responseChunkCallback);
1448
1449 String temp;
|
1450 kumpf 1.1
|
1451 kumpf 1.3 for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
|
1452 kumpf 1.1 {
|
1453 kumpf 1.3 temp.append(request->classNames[i].getString());
|
1454 kumpf 1.1
|
1455 kumpf 1.3 if (i < (n - 1))
|
1456 kumpf 1.1 {
|
1457 kumpf 1.3 temp.append(", ");
|
1458 kumpf 1.1 }
|
1459 kumpf 1.3 }
|
1460 kumpf 1.1
|
1461 kumpf 1.3 PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER,
1462 Logger::TRACE,
1463 "ProviderMessageHandler::_handleDeleteSubscriptionRequest - "
1464 "Host name: $0 Name space: $1 Class name(s): $2",
1465 System::getHostName(),
1466 request->nameSpace.getString(),
1467 temp));
|
1468 kumpf 1.1
|
1469 kumpf 1.3 Array<CIMObjectPath> classNames;
|
1470 kumpf 1.1
|
1471 kumpf 1.3 for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1472 {
1473 CIMObjectPath className(
1474 System::getHostName(),
1475 request->nameSpace,
1476 request->classNames[i]);
|
1477 kumpf 1.1
|
1478 kumpf 1.3 classNames.append(className);
1479 }
|
1480 kumpf 1.1
|
1481 kumpf 1.3 OperationContext providerContext(
1482 _createProviderOperationContext(request->operationContext));
1483 providerContext.insert(request->operationContext.get(
1484 SubscriptionInstanceContainer::NAME));
|
1485 kumpf 1.1
|
1486 kumpf 1.3 AutoPThreadSecurity threadLevelSecurity(providerContext);
|
1487 kumpf 1.1
|
1488 kumpf 1.3 CIMIndicationProvider* provider =
1489 getProviderInterface<CIMIndicationProvider>(_provider);
|
1490 kumpf 1.1
|
1491 kumpf 1.3 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1492 "Calling provider.deleteSubscription: " + _name);
|
1493 kumpf 1.1
|
1494 kumpf 1.3 StatProviderTimeMeasurement providerTime(response.get());
|
1495 kumpf 1.1
|
1496 kumpf 1.3 HANDLE_PROVIDER_EXCEPTION(
|
1497 kumpf 1.1 provider->deleteSubscription(
|
1498 kumpf 1.3 providerContext,
|
1499 kumpf 1.1 request->subscriptionInstance.getPath(),
|
1500 kumpf 1.3 classNames),
1501 handler)
|
1502 kumpf 1.1
|
1503 kumpf 1.3 //
1504 // Decrement count of current subscriptions for this provider
1505 //
1506 if (status.decrementSubscriptionsAndTestIfZero())
1507 {
|
1508 kumpf 1.1 //
|
1509 kumpf 1.3 // If there are no current subscriptions after the decrement,
1510 // the last subscription has been deleted
1511 // Call the provider's disableIndications method
|
1512 kumpf 1.1 //
|
1513 kumpf 1.3 if (_subscriptionInitComplete)
|
1514 kumpf 1.1 {
|
1515 kumpf 1.3 _disableIndications();
|
1516 kumpf 1.1 }
1517 }
1518
1519 PEG_METHOD_EXIT();
|
1520 kumpf 1.3 return response.release();
|
1521 kumpf 1.1 }
1522
1523 CIMResponseMessage* ProviderMessageHandler::_handleExportIndicationRequest(
1524 CIMRequestMessage* message)
1525 {
1526 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1527 "ProviderMessageHandler::_handleExportIndicationRequest");
1528
1529 CIMExportIndicationRequestMessage* request =
1530 dynamic_cast<CIMExportIndicationRequestMessage*>(message);
1531 PEGASUS_ASSERT(request != 0);
1532
|
1533 kumpf 1.3 AutoPtr<CIMExportIndicationResponseMessage> response(
|
1534 kumpf 1.1 dynamic_cast<CIMExportIndicationResponseMessage*>(
|
1535 kumpf 1.3 request->buildResponse()));
1536 PEGASUS_ASSERT(response.get() != 0);
|
1537 kumpf 1.1
1538 OperationResponseHandler handler(
|
1539 kumpf 1.3 request, response.get(), _responseChunkCallback);
|
1540 kumpf 1.1
|
1541 kumpf 1.3 // NOTE: Accept-Languages do not need to be set in the consume msg.
1542 OperationContext providerContext;
1543 providerContext.insert(request->operationContext.get(
1544 IdentityContainer::NAME));
|
1545 kumpf 1.1 //L10N_TODO
1546 // ATTN-CEC 06/04/03 NOTE: I can't find where the consume msg is sent. This
1547 // does not appear to be hooked up. When it is added, need to
1548 // make sure that Content-Language is set in the consume msg.
|
1549 kumpf 1.3 providerContext.insert(request->operationContext.get(
1550 ContentLanguageListContainer::NAME));
|
1551 kumpf 1.1
|
1552 kumpf 1.3 AutoPThreadSecurity threadLevelSecurity(providerContext);
|
1553 kumpf 1.1
|
1554 kumpf 1.3 CIMIndicationConsumerProvider* provider =
1555 getProviderInterface<CIMIndicationConsumerProvider>(_provider);
|
1556 kumpf 1.1
|
1557 kumpf 1.3 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1558 "Calling provider.consumeIndication: " + _name);
|
1559 kumpf 1.1
|
1560 kumpf 1.3 StatProviderTimeMeasurement providerTime(response.get());
|
1561 kumpf 1.1
|
1562 kumpf 1.3 HANDLE_PROVIDER_EXCEPTION(
|
1563 kumpf 1.1 provider->consumeIndication(
|
1564 kumpf 1.3 providerContext,
|
1565 kumpf 1.1 request->destinationPath,
|
1566 kumpf 1.3 request->indicationInstance),
1567 handler)
|
1568 kumpf 1.1
1569 PEG_METHOD_EXIT();
|
1570 kumpf 1.3 return response.release();
|
1571 kumpf 1.1 }
1572
1573 void ProviderMessageHandler::_enableIndications()
1574 {
1575 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1576 "DefaultProviderManager::_enableIndications");
1577
1578 try
1579 {
1580 EnableIndicationsResponseHandler* indicationResponseHandler =
1581 new EnableIndicationsResponseHandler(
1582 0, // request
1583 0, // response
1584 status.getProviderInstance(),
1585 _indicationCallback,
1586 _responseChunkCallback);
1587
|
1588 kumpf 1.3 _indicationResponseHandler = indicationResponseHandler;
|
1589 kumpf 1.1
|
1590 kumpf 1.2 status.setIndicationsEnabled(true);
|
1591 kumpf 1.1
1592 CIMIndicationProvider* provider =
1593 getProviderInterface<CIMIndicationProvider>(_provider);
1594
|
1595 kumpf 1.3 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1596 "Calling provider.enableIndications: " + _name);
1597
|
1598 kumpf 1.1 provider->enableIndications(*indicationResponseHandler);
1599 }
1600 catch (Exception& e)
1601 {
|
1602 kumpf 1.3 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
1603 "Exception: " + e.getMessage());
|
1604 kumpf 1.1
|
1605 kumpf 1.3 Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::WARNING,
|
1606 kumpf 1.1 "ProviderManager.Default.DefaultProviderManager."
1607 "ENABLE_INDICATIONS_FAILED",
1608 "Failed to enable indications for provider $0: $1.",
1609 _name, e.getMessage());
1610 }
1611 catch(...)
1612 {
|
1613 kumpf 1.3 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
|
1614 kumpf 1.1 "Unexpected error in _enableIndications");
1615
|
1616 kumpf 1.3 Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::WARNING,
|
1617 kumpf 1.1 "ProviderManager.Default.DefaultProviderManager."
1618 "ENABLE_INDICATIONS_FAILED_UNKNOWN",
1619 "Failed to enable indications for provider $0.",
1620 _name);
1621 }
1622
1623 PEG_METHOD_EXIT();
1624 }
1625
1626 void ProviderMessageHandler::_disableIndications()
1627 {
1628 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1629 "DefaultProviderManager::_disableIndications");
1630
1631 try
1632 {
|
1633 kumpf 1.2 if (status.getIndicationsEnabled())
|
1634 kumpf 1.1 {
1635 CIMIndicationProvider* provider =
1636 getProviderInterface<CIMIndicationProvider>(_provider);
1637
|
1638 kumpf 1.3 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1639 "Calling provider.disableIndications: " + _name);
1640
|
1641 kumpf 1.2 try
1642 {
1643 provider->disableIndications();
1644 }
1645 catch (...)
1646 {
1647 PEG_TRACE_STRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,
1648 "Caught exception from provider " + _name +
|
1649 kumpf 1.3 " disableIndications() method.");
|
1650 kumpf 1.2 }
|
1651 kumpf 1.1
|
1652 kumpf 1.2 status.setIndicationsEnabled(false);
|
1653 kumpf 1.1
1654 status.resetSubscriptions();
1655
1656 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1657 "Destroying indication response handler for " + _name);
1658
1659 delete _indicationResponseHandler;
1660 _indicationResponseHandler = 0;
1661 }
1662 }
1663 catch(...)
1664 {
1665 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL3,
1666 "Error occured disabling indications in provider " + _name);
1667 }
1668 }
1669
1670 PEGASUS_NAMESPACE_END
|