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