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