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