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 PEGASUS_ASSERT(0);
306 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 karl 1.25.4.1 // KS_TODO Confirm that the following is cruft and not needed.
981 // CIMObjectPath resultPath(
982 // System::getHostName(),
983 // request->nameSpace,
984 // request->resultClass.getString());
|
985 kumpf 1.1
|
986 kumpf 1.3 OperationContext providerContext(
987 _createProviderOperationContext(request->operationContext));
|
988 kumpf 1.1
|
989 r.kieninger 1.12 AutoPThreadSecurity threadLevelSecurity(request->operationContext);
|
990 kumpf 1.1
|
991 kumpf 1.3 CIMAssociationProvider* provider =
992 getProviderInterface<CIMAssociationProvider>(_provider);
|
993 kumpf 1.1
|
994 kumpf 1.3 StatProviderTimeMeasurement providerTime(response.get());
|
995 kumpf 1.1
|
996 dmitry.mikulin 1.11 HANDLE_PROVIDER_CALL(
997 referenceNames,
|
998 kumpf 1.1 provider->referenceNames(
|
999 kumpf 1.3 providerContext,
|
1000 kumpf 1.1 objectPath,
1001 request->resultClass,
1002 request->role,
|
1003 kumpf 1.3 handler),
|
1004 dmitry.mikulin 1.11 handler);
|
1005 kumpf 1.1
1006 PEG_METHOD_EXIT();
|
1007 kumpf 1.3 return response.release();
|
1008 kumpf 1.1 }
1009
1010 CIMResponseMessage* ProviderMessageHandler::_handleGetPropertyRequest(
1011 CIMRequestMessage* message)
1012 {
1013 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1014 "ProviderMessageHandler::_handleGetPropertyRequest");
1015
1016 CIMGetPropertyRequestMessage* request =
1017 dynamic_cast<CIMGetPropertyRequestMessage*>(message);
1018 PEGASUS_ASSERT(request != 0);
1019
|
1020 kumpf 1.3 AutoPtr<CIMGetPropertyResponseMessage> response(
|
1021 kumpf 1.1 dynamic_cast<CIMGetPropertyResponseMessage*>(
|
1022 kumpf 1.3 request->buildResponse()));
1023 PEGASUS_ASSERT(response.get() != 0);
1024
1025 //
1026 // Translate the GetProperty request to a GetInstance request message
1027 //
1028
1029 Array<CIMName> propertyList;
1030 propertyList.append(request->propertyName);
1031
1032 CIMGetInstanceRequestMessage getInstanceRequest(
1033 request->messageId,
1034 request->nameSpace,
1035 request->instanceName,
1036 false, // includeQualifiers
1037 false, // includeClassOrigin
1038 propertyList,
1039 request->queueIds);
|
1040 kumpf 1.1
|
1041 kumpf 1.3 getInstanceRequest.operationContext = request->operationContext;
1042
1043 AutoPtr<CIMGetInstanceResponseMessage> getInstanceResponse(
1044 dynamic_cast<CIMGetInstanceResponseMessage*>(
1045 getInstanceRequest.buildResponse()));
1046 PEGASUS_ASSERT(getInstanceResponse.get() != 0);
|
1047 kumpf 1.1
|
1048 kumpf 1.3 //
1049 // Process the GetInstance operation
1050 //
|
1051 kumpf 1.1
|
1052 kumpf 1.3 // create a handler for this request (with chunking disabled)
1053 GetInstanceResponseHandler handler(
1054 &getInstanceRequest, getInstanceResponse.get(), 0);
|
1055 kumpf 1.1
|
1056 kumpf 1.3 // make target object path
1057 CIMObjectPath objectPath(
1058 System::getHostName(),
1059 getInstanceRequest.nameSpace,
1060 getInstanceRequest.instanceName.getClassName(),
1061 getInstanceRequest.instanceName.getKeyBindings());
|
1062 kumpf 1.1
|
1063 marek 1.13 PEG_TRACE((
1064 TRC_PROVIDERMANAGER,
1065 Tracer::LEVEL3,
|
1066 kumpf 1.3 "ProviderMessageHandler::_handleGetPropertyRequest - "
|
1067 marek 1.13 "Object path: %s, Property: %s",
1068 (const char*) objectPath.toString().getCString(),
1069 (const char*) request->propertyName.getString().getCString()));
|
1070 kumpf 1.1
|
1071 kumpf 1.3 OperationContext providerContext(
1072 _createProviderOperationContext(getInstanceRequest.operationContext));
|
1073 kumpf 1.1
|
1074 r.kieninger 1.12 AutoPThreadSecurity threadLevelSecurity(request->operationContext);
|
1075 kumpf 1.1
|
1076 kumpf 1.3 CIMInstanceProvider* provider =
1077 getProviderInterface<CIMInstanceProvider>(_provider);
|
1078 kumpf 1.1
|
1079 kumpf 1.3 StatProviderTimeMeasurement providerTime(response.get());
|
1080 kumpf 1.1
|
1081 dmitry.mikulin 1.11 HANDLE_PROVIDER_CALL(
1082 getInstance,
|
1083 kumpf 1.1 provider->getInstance(
|
1084 kumpf 1.3 providerContext,
|
1085 kumpf 1.1 objectPath,
|
1086 kumpf 1.3 getInstanceRequest.includeQualifiers,
1087 getInstanceRequest.includeClassOrigin,
1088 getInstanceRequest.propertyList,
1089 handler),
|
1090 dmitry.mikulin 1.11 handler);
|
1091 kumpf 1.1
|
1092 kumpf 1.3 //
1093 // Copy the GetInstance response into the GetProperty response message
1094 //
1095
1096 response->cimException = getInstanceResponse->cimException;
1097
1098 if (response->cimException.getCode() == CIM_ERR_SUCCESS)
1099 {
|
1100 r.kieninger 1.24 CIMInstance instance =
|
1101 thilo.boehm 1.25 getInstanceResponse->getResponseData().getInstance();
|
1102 kumpf 1.1
|
1103 kumpf 1.3 Uint32 pos = instance.findProperty(request->propertyName);
|
1104 kumpf 1.1
|
1105 kumpf 1.3 if (pos != PEG_NOT_FOUND)
1106 {
1107 response->value = instance.getProperty(pos).getValue();
1108 }
1109 else // Property not found. Return CIM_ERR_NO_SUCH_PROPERTY.
1110 {
1111 response->cimException = PEGASUS_CIM_EXCEPTION(
1112 CIM_ERR_NO_SUCH_PROPERTY,
1113 request->propertyName.getString());
|
1114 kumpf 1.1 }
|
1115 kumpf 1.3 }
|
1116 kumpf 1.1
|
1117 kumpf 1.3 response->operationContext = getInstanceResponse->operationContext;
|
1118 kumpf 1.1
1119 PEG_METHOD_EXIT();
|
1120 kumpf 1.3 return response.release();
|
1121 kumpf 1.1 }
1122
1123 CIMResponseMessage* ProviderMessageHandler::_handleSetPropertyRequest(
1124 CIMRequestMessage* message)
1125 {
1126 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1127 "ProviderMessageHandler::_handleSetPropertyRequest");
1128
1129 CIMSetPropertyRequestMessage* request =
1130 dynamic_cast<CIMSetPropertyRequestMessage*>(message);
1131 PEGASUS_ASSERT(request != 0);
1132
|
1133 kumpf 1.3 AutoPtr<CIMSetPropertyResponseMessage> response(
|
1134 kumpf 1.1 dynamic_cast<CIMSetPropertyResponseMessage*>(
|
1135 kumpf 1.3 request->buildResponse()));
1136 PEGASUS_ASSERT(response.get() != 0);
|
1137 kumpf 1.1
|
1138 kumpf 1.3 //
1139 // Translate the SetProperty request to a ModifyInstance request message
1140 //
1141
1142 // make target object path
1143 CIMObjectPath objectPath(
1144 System::getHostName(),
1145 request->nameSpace,
1146 request->instanceName.getClassName(),
1147 request->instanceName.getKeyBindings());
1148
1149 CIMInstance instance(request->instanceName.getClassName());
1150 instance.addProperty(CIMProperty(
1151 request->propertyName, request->newValue));
1152 instance.setPath(objectPath);
1153
1154 Array<CIMName> propertyList;
1155 propertyList.append(request->propertyName);
1156
1157 CIMModifyInstanceRequestMessage modifyInstanceRequest(
1158 request->messageId,
1159 kumpf 1.3 request->nameSpace,
1160 instance,
1161 false, // includeQualifiers
1162 propertyList,
1163 request->queueIds);
|
1164 kumpf 1.1
|
1165 kumpf 1.3 modifyInstanceRequest.operationContext = request->operationContext;
|
1166 kumpf 1.1
|
1167 kumpf 1.3 AutoPtr<CIMModifyInstanceResponseMessage> modifyInstanceResponse(
1168 dynamic_cast<CIMModifyInstanceResponseMessage*>(
1169 modifyInstanceRequest.buildResponse()));
1170 PEGASUS_ASSERT(modifyInstanceResponse.get() != 0);
|
1171 kumpf 1.1
|
1172 kumpf 1.3 //
1173 // Process the ModifyInstance operation
1174 //
|
1175 kumpf 1.1
|
1176 kumpf 1.3 // create a handler for this request (with chunking disabled)
1177 ModifyInstanceResponseHandler handler(
1178 &modifyInstanceRequest, modifyInstanceResponse.get(), 0);
|
1179 kumpf 1.1
|
1180 marek 1.13 PEG_TRACE((
1181 TRC_PROVIDERMANAGER,
1182 Tracer::LEVEL3,
|
1183 kumpf 1.3 "ProviderMessageHandler::_handleSetPropertyRequest - "
|
1184 marek 1.13 "Object path: %s, Property: %s",
1185 (const char*) objectPath.toString().getCString(),
1186 (const char*) request->propertyName.getString().getCString()));
|
1187 kumpf 1.1
|
1188 kumpf 1.3 OperationContext providerContext(
1189 _createProviderOperationContext(request->operationContext));
|
1190 kumpf 1.1
|
1191 r.kieninger 1.12 AutoPThreadSecurity threadLevelSecurity(request->operationContext);
|
1192 kumpf 1.1
|
1193 kumpf 1.3 CIMInstanceProvider* provider =
1194 getProviderInterface<CIMInstanceProvider>(_provider);
|
1195 kumpf 1.1
|
1196 kumpf 1.3 StatProviderTimeMeasurement providerTime(response.get());
|
1197 kumpf 1.1
|
1198 dmitry.mikulin 1.11 HANDLE_PROVIDER_CALL(
1199 modifyInstance,
|
1200 kumpf 1.1 provider->modifyInstance(
|
1201 kumpf 1.3 providerContext,
|
1202 kumpf 1.1 objectPath,
|
1203 kumpf 1.3 modifyInstanceRequest.modifiedInstance,
1204 modifyInstanceRequest.includeQualifiers,
1205 modifyInstanceRequest.propertyList,
1206 handler),
|
1207 dmitry.mikulin 1.11 handler);
|
1208 kumpf 1.3
1209 //
1210 // Copy the ModifyInstance response into the GetProperty response message
1211 //
|
1212 kumpf 1.1
|
1213 kumpf 1.3 response->cimException = modifyInstanceResponse->cimException;
1214 response->operationContext = modifyInstanceResponse->operationContext;
|
1215 kumpf 1.1
1216 PEG_METHOD_EXIT();
|
1217 kumpf 1.3 return response.release();
|
1218 kumpf 1.1 }
1219
1220 CIMResponseMessage* ProviderMessageHandler::_handleInvokeMethodRequest(
1221 CIMRequestMessage* message)
1222 {
1223 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1224 "ProviderMessageHandler::_handleInvokeMethodRequest");
1225
1226 CIMInvokeMethodRequestMessage* request =
1227 dynamic_cast<CIMInvokeMethodRequestMessage*>(message);
1228 PEGASUS_ASSERT(request != 0);
1229
|
1230 kumpf 1.3 AutoPtr<CIMInvokeMethodResponseMessage> response(
|
1231 kumpf 1.1 dynamic_cast<CIMInvokeMethodResponseMessage*>(
|
1232 kumpf 1.3 request->buildResponse()));
1233 PEGASUS_ASSERT(response.get() != 0);
|
1234 kumpf 1.1
1235 // create a handler for this request
1236 InvokeMethodResponseHandler handler(
|
1237 kumpf 1.3 request, response.get(), _responseChunkCallback);
|
1238 kumpf 1.1
|
1239 kumpf 1.3 // make target object path
1240 CIMObjectPath objectPath(
1241 System::getHostName(),
1242 request->nameSpace,
1243 request->instanceName.getClassName(),
1244 request->instanceName.getKeyBindings());
|
1245 kumpf 1.1
|
1246 marek 1.13 PEG_TRACE((
1247 TRC_PROVIDERMANAGER,
1248 Tracer::LEVEL3,
|
1249 kumpf 1.3 "ProviderMessageHandler::_handleInvokeMethodRequest - "
|
1250 marek 1.13 "Object path: %s, Method: %s",
1251 (const char*) objectPath.toString().getCString(),
1252 (const char*) request->methodName.getString().getCString()));
|
1253 kumpf 1.21
|
1254 kumpf 1.3 OperationContext providerContext(
1255 _createProviderOperationContext(request->operationContext));
|
1256 kumpf 1.1
|
1257 r.kieninger 1.12 AutoPThreadSecurity threadLevelSecurity(request->operationContext);
|
1258 kumpf 1.1
|
1259 kumpf 1.3 CIMMethodProvider* provider =
1260 getProviderInterface<CIMMethodProvider>(_provider);
|
1261 kumpf 1.1
|
1262 kumpf 1.3 StatProviderTimeMeasurement providerTime(response.get());
|
1263 kumpf 1.1
|
1264 dmitry.mikulin 1.11 HANDLE_PROVIDER_CALL(
1265 invokeMethod,
|
1266 kumpf 1.1 provider->invokeMethod(
|
1267 kumpf 1.3 providerContext,
|
1268 kumpf 1.7 objectPath,
|
1269 kumpf 1.1 request->methodName,
1270 request->inParameters,
|
1271 kumpf 1.3 handler),
|
1272 dmitry.mikulin 1.11 handler);
|
1273 kumpf 1.1
1274 PEG_METHOD_EXIT();
|
1275 kumpf 1.3 return response.release();
|
1276 kumpf 1.1 }
1277
1278 CIMResponseMessage* ProviderMessageHandler::_handleCreateSubscriptionRequest(
1279 CIMRequestMessage* message)
1280 {
1281 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1282 "ProviderMessageHandler::_handleCreateSubscriptionRequest");
1283
1284 CIMCreateSubscriptionRequestMessage* request =
1285 dynamic_cast<CIMCreateSubscriptionRequestMessage*>(message);
1286 PEGASUS_ASSERT(request != 0);
1287
|
1288 kumpf 1.3 AutoPtr<CIMCreateSubscriptionResponseMessage> response(
|
1289 kumpf 1.1 dynamic_cast<CIMCreateSubscriptionResponseMessage*>(
|
1290 kumpf 1.3 request->buildResponse()));
1291 PEGASUS_ASSERT(response.get() != 0);
|
1292 kumpf 1.1
1293 OperationResponseHandler handler(
|
1294 kumpf 1.3 request, response.get(), _responseChunkCallback);
|
1295 kumpf 1.1
|
1296 kumpf 1.3 String temp;
1297
1298 for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
|
1299 kumpf 1.1 {
|
1300 kumpf 1.3 temp.append(request->classNames[i].getString());
|
1301 kumpf 1.1
|
1302 kumpf 1.3 if (i < (n - 1))
|
1303 kumpf 1.1 {
|
1304 kumpf 1.3 temp.append(", ");
1305 }
1306 }
1307
|
1308 marek 1.13 PEG_TRACE((
1309 TRC_PROVIDERMANAGER,
1310 Tracer::LEVEL3,
|
1311 kumpf 1.3 "ProviderMessageHandler::_handleCreateSubscriptionRequest - "
|
1312 marek 1.13 "Host name: %s Name space: %s Class name(s): %s",
1313 (const char*) System::getHostName().getCString(),
1314 (const char*) request->nameSpace.getString().getCString(),
1315 (const char*) temp.getCString()));
|
1316 kumpf 1.3
1317 //
1318 // Save the provider instance from the request
1319 //
1320 ProviderIdContainer pidc = (ProviderIdContainer)
1321 request->operationContext.get(ProviderIdContainer::NAME);
1322 status.setProviderInstance(pidc.getProvider());
1323
1324 // convert arguments
|
1325 kumpf 1.1
|
1326 kumpf 1.3 Array<CIMObjectPath> classNames;
|
1327 kumpf 1.1
|
1328 kumpf 1.3 for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1329 {
1330 CIMObjectPath className(
|
1331 kumpf 1.1 System::getHostName(),
|
1332 kumpf 1.3 request->nameSpace,
1333 request->classNames[i]);
|
1334 kumpf 1.1
|
1335 kumpf 1.3 classNames.append(className);
1336 }
|
1337 kumpf 1.1
|
1338 kumpf 1.3 OperationContext providerContext(
1339 _createProviderOperationContext(request->operationContext));
1340 providerContext.insert(request->operationContext.get(
1341 SubscriptionInstanceContainer::NAME));
1342 providerContext.insert(request->operationContext.get(
1343 SubscriptionFilterConditionContainer::NAME));
1344 providerContext.insert(request->operationContext.get(
1345 SubscriptionFilterQueryContainer::NAME));
|
1346 kumpf 1.1
|
1347 r.kieninger 1.12 AutoPThreadSecurity threadLevelSecurity(request->operationContext);
|
1348 kumpf 1.1
|
1349 kumpf 1.3 CIMIndicationProvider* provider =
1350 getProviderInterface<CIMIndicationProvider>(_provider);
|
1351 kumpf 1.1
|
1352 kumpf 1.3 StatProviderTimeMeasurement providerTime(response.get());
|
1353 kumpf 1.1
|
1354 dmitry.mikulin 1.11 HANDLE_PROVIDER_CALL(
1355 createSubscription,
|
1356 kumpf 1.1 provider->createSubscription(
|
1357 kumpf 1.3 providerContext,
|
1358 kumpf 1.1 request->subscriptionInstance.getPath(),
1359 classNames,
1360 request->propertyList,
|
1361 kumpf 1.3 request->repeatNotificationPolicy),
|
1362 dmitry.mikulin 1.11 handler);
|
1363 kumpf 1.3
1364 //
1365 // Increment count of current subscriptions for this provider
1366 //
1367 if (status.testIfZeroAndIncrementSubscriptions())
1368 {
|
1369 marek 1.8 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
|
1370 kumpf 1.3 "First accepted subscription");
|
1371 kumpf 1.1
1372 //
|
1373 kumpf 1.3 // If there were no current subscriptions before the increment,
1374 // the first subscription has been created
1375 // Call the provider's enableIndications method
|
1376 kumpf 1.1 //
|
1377 kumpf 1.3 if (_subscriptionInitComplete)
|
1378 kumpf 1.1 {
|
1379 kumpf 1.3 _enableIndications();
|
1380 kumpf 1.1 }
1381 }
1382
1383 PEG_METHOD_EXIT();
|
1384 kumpf 1.3 return response.release();
|
1385 kumpf 1.1 }
1386
1387 CIMResponseMessage* ProviderMessageHandler::_handleModifySubscriptionRequest(
1388 CIMRequestMessage* message)
1389 {
1390 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1391 "ProviderMessageHandler::_handleModifySubscriptionRequest");
1392
1393 CIMModifySubscriptionRequestMessage* request =
1394 dynamic_cast<CIMModifySubscriptionRequestMessage*>(message);
1395 PEGASUS_ASSERT(request != 0);
1396
|
1397 kumpf 1.3 AutoPtr<CIMModifySubscriptionResponseMessage> response(
|
1398 kumpf 1.1 dynamic_cast<CIMModifySubscriptionResponseMessage*>(
|
1399 kumpf 1.3 request->buildResponse()));
1400 PEGASUS_ASSERT(response.get() != 0);
|
1401 kumpf 1.1
1402 OperationResponseHandler handler(
|
1403 kumpf 1.3 request, response.get(), _responseChunkCallback);
1404
1405 String temp;
|
1406 kumpf 1.1
|
1407 kumpf 1.3 for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
|
1408 kumpf 1.1 {
|
1409 kumpf 1.3 temp.append(request->classNames[i].getString());
|
1410 kumpf 1.1
|
1411 kumpf 1.3 if (i < (n - 1))
|
1412 kumpf 1.1 {
|
1413 kumpf 1.3 temp.append(", ");
1414 }
1415 }
|
1416 kumpf 1.1
|
1417 marek 1.13 PEG_TRACE((
1418 TRC_PROVIDERMANAGER,
1419 Tracer::LEVEL3,
1420 "ProviderMessageHandler::_handleModifySubscriptionRequest - "
1421 "Host name: %s Name space: %s Class name(s): %s",
1422 (const char*) System::getHostName().getCString(),
1423 (const char*) request->nameSpace.getString().getCString(),
1424 (const char*) temp.getCString()));
|
1425 kumpf 1.21
|
1426 kumpf 1.3 // convert arguments
1427
1428 Array<CIMObjectPath> classNames;
|
1429 kumpf 1.1
|
1430 kumpf 1.3 for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1431 {
1432 CIMObjectPath className(
|
1433 kumpf 1.1 System::getHostName(),
|
1434 kumpf 1.3 request->nameSpace,
1435 request->classNames[i]);
|
1436 kumpf 1.1
|
1437 kumpf 1.3 classNames.append(className);
1438 }
|
1439 kumpf 1.1
|
1440 kumpf 1.3 OperationContext providerContext(
1441 _createProviderOperationContext(request->operationContext));
1442 providerContext.insert(request->operationContext.get(
1443 SubscriptionInstanceContainer::NAME));
1444 providerContext.insert(request->operationContext.get(
1445 SubscriptionFilterConditionContainer::NAME));
1446 providerContext.insert(request->operationContext.get(
1447 SubscriptionFilterQueryContainer::NAME));
|
1448 kumpf 1.1
|
1449 r.kieninger 1.12 AutoPThreadSecurity threadLevelSecurity(request->operationContext);
|
1450 kumpf 1.1
|
1451 kumpf 1.3 CIMIndicationProvider* provider =
1452 getProviderInterface<CIMIndicationProvider>(_provider);
|
1453 kumpf 1.1
|
1454 kumpf 1.3 StatProviderTimeMeasurement providerTime(response.get());
|
1455 kumpf 1.1
|
1456 dmitry.mikulin 1.11 HANDLE_PROVIDER_CALL(
1457 modifySubscription,
|
1458 kumpf 1.1 provider->modifySubscription(
|
1459 kumpf 1.3 providerContext,
|
1460 kumpf 1.1 request->subscriptionInstance.getPath(),
1461 classNames,
1462 request->propertyList,
|
1463 kumpf 1.3 request->repeatNotificationPolicy),
|
1464 dmitry.mikulin 1.11 handler);
|
1465 kumpf 1.1
1466 PEG_METHOD_EXIT();
|
1467 kumpf 1.3 return response.release();
|
1468 kumpf 1.1 }
1469
1470 CIMResponseMessage* ProviderMessageHandler::_handleDeleteSubscriptionRequest(
1471 CIMRequestMessage* message)
1472 {
1473 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1474 "ProviderMessageHandler::_handleDeleteSubscriptionRequest");
1475
1476 CIMDeleteSubscriptionRequestMessage* request =
1477 dynamic_cast<CIMDeleteSubscriptionRequestMessage*>(message);
1478 PEGASUS_ASSERT(request != 0);
1479
|
1480 kumpf 1.3 AutoPtr<CIMDeleteSubscriptionResponseMessage> response(
|
1481 kumpf 1.1 dynamic_cast<CIMDeleteSubscriptionResponseMessage*>(
|
1482 kumpf 1.3 request->buildResponse()));
1483 PEGASUS_ASSERT(response.get() != 0);
|
1484 kumpf 1.1
1485 OperationResponseHandler handler(
|
1486 kumpf 1.3 request, response.get(), _responseChunkCallback);
1487
1488 String temp;
|
1489 kumpf 1.1
|
1490 kumpf 1.3 for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
|
1491 kumpf 1.1 {
|
1492 kumpf 1.3 temp.append(request->classNames[i].getString());
|
1493 kumpf 1.1
|
1494 kumpf 1.3 if (i < (n - 1))
|
1495 kumpf 1.1 {
|
1496 kumpf 1.3 temp.append(", ");
|
1497 kumpf 1.1 }
|
1498 kumpf 1.3 }
|
1499 kumpf 1.1
|
1500 marek 1.13 PEG_TRACE((
1501 TRC_PROVIDERMANAGER,
1502 Tracer::LEVEL3,
|
1503 kumpf 1.3 "ProviderMessageHandler::_handleDeleteSubscriptionRequest - "
|
1504 marek 1.13 "Host name: %s Name space: %s Class name(s): %s",
1505 (const char*) System::getHostName().getCString(),
1506 (const char*) request->nameSpace.getString().getCString(),
1507 (const char*) temp.getCString()));
|
1508 kumpf 1.21
|
1509 kumpf 1.3 Array<CIMObjectPath> classNames;
|
1510 kumpf 1.1
|
1511 kumpf 1.3 for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1512 {
1513 CIMObjectPath className(
1514 System::getHostName(),
1515 request->nameSpace,
1516 request->classNames[i]);
|
1517 kumpf 1.1
|
1518 kumpf 1.3 classNames.append(className);
1519 }
|
1520 kumpf 1.1
|
1521 kumpf 1.3 OperationContext providerContext(
1522 _createProviderOperationContext(request->operationContext));
1523 providerContext.insert(request->operationContext.get(
1524 SubscriptionInstanceContainer::NAME));
|
1525 kumpf 1.1
|
1526 r.kieninger 1.12 AutoPThreadSecurity threadLevelSecurity(request->operationContext);
|
1527 kumpf 1.1
|
1528 kumpf 1.3 CIMIndicationProvider* provider =
1529 getProviderInterface<CIMIndicationProvider>(_provider);
|
1530 kumpf 1.1
|
1531 kumpf 1.3 StatProviderTimeMeasurement providerTime(response.get());
|
1532 kumpf 1.1
|
1533 dmitry.mikulin 1.11 HANDLE_PROVIDER_CALL(
1534 deleteSubscription,
|
1535 kumpf 1.1 provider->deleteSubscription(
|
1536 kumpf 1.3 providerContext,
|
1537 kumpf 1.1 request->subscriptionInstance.getPath(),
|
1538 kumpf 1.3 classNames),
|
1539 dmitry.mikulin 1.11 handler);
|
1540 kumpf 1.1
|
1541 kumpf 1.3 //
1542 // Decrement count of current subscriptions for this provider
1543 //
1544 if (status.decrementSubscriptionsAndTestIfZero())
1545 {
|
1546 kumpf 1.1 //
|
1547 kumpf 1.3 // If there are no current subscriptions after the decrement,
1548 // the last subscription has been deleted
1549 // Call the provider's disableIndications method
|
1550 kumpf 1.1 //
|
1551 kumpf 1.3 if (_subscriptionInitComplete)
|
1552 kumpf 1.1 {
|
1553 kumpf 1.3 _disableIndications();
|
1554 kumpf 1.1 }
1555 }
1556
1557 PEG_METHOD_EXIT();
|
1558 kumpf 1.3 return response.release();
|
1559 kumpf 1.1 }
1560
1561 CIMResponseMessage* ProviderMessageHandler::_handleExportIndicationRequest(
1562 CIMRequestMessage* message)
1563 {
1564 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1565 "ProviderMessageHandler::_handleExportIndicationRequest");
1566
1567 CIMExportIndicationRequestMessage* request =
1568 dynamic_cast<CIMExportIndicationRequestMessage*>(message);
1569 PEGASUS_ASSERT(request != 0);
1570
|
1571 kumpf 1.3 AutoPtr<CIMExportIndicationResponseMessage> response(
|
1572 kumpf 1.1 dynamic_cast<CIMExportIndicationResponseMessage*>(
|
1573 kumpf 1.3 request->buildResponse()));
1574 PEGASUS_ASSERT(response.get() != 0);
|
1575 kumpf 1.1
1576 OperationResponseHandler handler(
|
1577 kumpf 1.3 request, response.get(), _responseChunkCallback);
|
1578 kumpf 1.1
|
1579 kumpf 1.3 // NOTE: Accept-Languages do not need to be set in the consume msg.
1580 OperationContext providerContext;
1581 providerContext.insert(request->operationContext.get(
1582 IdentityContainer::NAME));
|
1583 kumpf 1.1 //L10N_TODO
1584 // ATTN-CEC 06/04/03 NOTE: I can't find where the consume msg is sent. This
1585 // does not appear to be hooked up. When it is added, need to
1586 // make sure that Content-Language is set in the consume msg.
|
1587 kumpf 1.3 providerContext.insert(request->operationContext.get(
1588 ContentLanguageListContainer::NAME));
|
1589 kumpf 1.1
|
1590 kumpf 1.3 CIMIndicationConsumerProvider* provider =
1591 getProviderInterface<CIMIndicationConsumerProvider>(_provider);
|
1592 kumpf 1.1
|
1593 kumpf 1.3 StatProviderTimeMeasurement providerTime(response.get());
|
1594 kumpf 1.1
|
1595 dmitry.mikulin 1.11 HANDLE_PROVIDER_CALL(
1596 consumeIndication,
|
1597 kumpf 1.1 provider->consumeIndication(
|
1598 kumpf 1.3 providerContext,
|
1599 kumpf 1.1 request->destinationPath,
|
1600 kumpf 1.3 request->indicationInstance),
|
1601 dmitry.mikulin 1.11 handler);
|
1602 kumpf 1.1
1603 PEG_METHOD_EXIT();
|
1604 kumpf 1.3 return response.release();
|
1605 kumpf 1.1 }
1606
1607 void ProviderMessageHandler::_enableIndications()
1608 {
1609 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1610 "DefaultProviderManager::_enableIndications");
1611
1612 try
1613 {
1614 EnableIndicationsResponseHandler* indicationResponseHandler =
1615 new EnableIndicationsResponseHandler(
1616 0, // request
1617 0, // response
1618 status.getProviderInstance(),
1619 _indicationCallback,
1620 _responseChunkCallback);
1621
|
1622 kumpf 1.3 _indicationResponseHandler = indicationResponseHandler;
|
1623 kumpf 1.1
|
1624 kumpf 1.2 status.setIndicationsEnabled(true);
|
1625 kumpf 1.1
1626 CIMIndicationProvider* provider =
1627 getProviderInterface<CIMIndicationProvider>(_provider);
1628
|
1629 dmitry.mikulin 1.11 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1630 "Calling provider.enableIndications: %s",
1631 (const char*)_fullyQualifiedProviderName.getCString()));
1632
1633 try
1634 {
1635 provider->enableIndications(*indicationResponseHandler);
1636 }
1637 catch (...)
1638 {
|
1639 marek 1.15 PEG_TRACE((TRC_DISCARDED_DATA, Tracer::LEVEL1,
|
1640 dmitry.mikulin 1.11 "Caught exception from provider %s "
1641 "enableIndications() method.",
1642 (const char*)_fullyQualifiedProviderName.getCString()));
1643 throw;
1644 }
|
1645 kumpf 1.3
|
1646 dmitry.mikulin 1.11 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1647 "Returned from provider.enableIndications: %s",
1648 (const char*)_fullyQualifiedProviderName.getCString()));
|
1649 kumpf 1.1 }
1650 catch (Exception& e)
1651 {
|
1652 kumpf 1.3 Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::WARNING,
|
1653 kumpf 1.16 MessageLoaderParms(
1654 "ProviderManager.Default.DefaultProviderManager."
1655 "ENABLE_INDICATIONS_FAILED",
1656 "Failed to enable indications for provider $0: $1.",
1657 _fullyQualifiedProviderName, e.getMessage()));
|
1658 kumpf 1.1 }
1659 catch(...)
1660 {
|
1661 kumpf 1.3 Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::WARNING,
|
1662 kumpf 1.16 MessageLoaderParms(
1663 "ProviderManager.Default.DefaultProviderManager."
1664 "ENABLE_INDICATIONS_FAILED_UNKNOWN",
1665 "Failed to enable indications for provider $0.",
1666 _fullyQualifiedProviderName));
|
1667 kumpf 1.1 }
1668
1669 PEG_METHOD_EXIT();
1670 }
1671
1672 void ProviderMessageHandler::_disableIndications()
1673 {
1674 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1675 "DefaultProviderManager::_disableIndications");
1676
1677 try
1678 {
|
1679 kumpf 1.2 if (status.getIndicationsEnabled())
|
1680 kumpf 1.1 {
1681 CIMIndicationProvider* provider =
1682 getProviderInterface<CIMIndicationProvider>(_provider);
1683
|
1684 dmitry.mikulin 1.11 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1685 "Calling provider.disableIndications: %s",
1686 (const char*)_fullyQualifiedProviderName.getCString()));
|
1687 kumpf 1.3
|
1688 kumpf 1.2 try
1689 {
1690 provider->disableIndications();
1691 }
1692 catch (...)
1693 {
|
1694 marek 1.15 PEG_TRACE((TRC_DISCARDED_DATA, Tracer::LEVEL1,
|
1695 dmitry.mikulin 1.11 "Caught exception from provider %s "
1696 "disableIndications() method.",
1697 (const char*)_fullyQualifiedProviderName.getCString()));
1698 throw;
|
1699 kumpf 1.2 }
|
1700 kumpf 1.1
|
1701 dmitry.mikulin 1.11 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1702 "Returned from provider.disableIndications: %s",
1703 (const char*)_fullyQualifiedProviderName.getCString()));
1704
|
1705 kumpf 1.2 status.setIndicationsEnabled(false);
|
1706 kumpf 1.1
1707 status.resetSubscriptions();
1708
|
1709 dmitry.mikulin 1.11 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1710 "Destroying indication response handler for %s",
1711 (const char*)_fullyQualifiedProviderName.getCString()));
|
1712 kumpf 1.1
1713 delete _indicationResponseHandler;
1714 _indicationResponseHandler = 0;
1715 }
1716 }
1717 catch(...)
1718 {
|
1719 dmitry.mikulin 1.11 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
1720 "Error occured disabling indications in provider %s",
1721 (const char*)_fullyQualifiedProviderName.getCString()));
|
1722 kumpf 1.1 }
|
1723 dmitry.mikulin 1.11 PEG_METHOD_EXIT();
|
1724 kumpf 1.1 }
1725 PEGASUS_NAMESPACE_END
|