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