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