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