1 karl 1.7 //%2003////////////////////////////////////////////////////////////////////////
|
2 chip 1.1 //
|
3 karl 1.7 // Copyright (c) 2000, 2001, 2002 BMC Software, Hewlett-Packard Development
4 // Company, L. P., IBM Corp., The Open Group, Tivoli Systems.
5 // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L. P.;
6 // IBM Corp.; EMC Corporation, The Open Group.
|
7 chip 1.1 //
8 // Permission is hereby granted, free of charge, to any person obtaining a copy
9 // of this software and associated documentation files (the "Software"), to
10 // deal in the Software without restriction, including without limitation the
11 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
12 // sell copies of the Software, and to permit persons to whom the Software is
13 // furnished to do so, subject to the following conditions:
|
14 schuur 1.19 //
|
15 chip 1.1 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
16 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
17 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
18 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
19 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
20 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
21 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 //
24 //==============================================================================
25 //
26 // Author: Chip Vincent (cvincent@us.ibm.com)
27 //
28 // Modified By: Carol Ann Krug Graves, Hewlett-Packard Company
29 // (carolann_graves@hp.com)
30 // Mike Day, IBM (mdday@us.ibm.com)
31 // Karl Schopmeyer(k.schopmeyer@opengroup.org) - Fix associators.
|
32 dj.gorey 1.25 // Yi Zhou, Hewlett-Packard Company (yi_zhou@hp.com)
|
33 chip 1.1 //
34 //%/////////////////////////////////////////////////////////////////////////////
35
36 #include "DefaultProviderManager.h"
37
38 #include <Pegasus/Common/CIMMessage.h>
39 #include <Pegasus/Common/OperationContext.h>
40 #include <Pegasus/Common/Destroyer.h>
41 #include <Pegasus/Common/Tracer.h>
42 #include <Pegasus/Common/StatisticalData.h>
43 #include <Pegasus/Common/Logger.h>
44 #include <Pegasus/Common/MessageLoader.h> //l10n
45
|
46 schuur 1.12 #include <Pegasus/Common/QueryExpression.h>
47 #include <Pegasus/ProviderManager2/QueryExpressionFactory.h>
48
|
49 chip 1.1 #include <Pegasus/Config/ConfigManager.h>
50
51 #include <Pegasus/ProviderManager2/Default/Provider.h>
|
52 schuur 1.21 #include <Pegasus/ProviderManager2/OperationResponseHandler.h>
|
53 chip 1.1
54 #include <Pegasus/Server/ProviderRegistrationManager/ProviderRegistrationManager.h>
|
55 schuur 1.14 #include <Pegasus/ProviderManager2/ProviderManagerService.h>
|
56 chip 1.1
57 PEGASUS_NAMESPACE_BEGIN
58
59 // auto variable to protect provider during operations
60 class pm_service_op_lock
61 {
62 private:
63 pm_service_op_lock(void);
64
65 public:
66 pm_service_op_lock(Provider *provider) : _provider(provider)
67 {
68 _provider->protect();
69 }
70
71 ~pm_service_op_lock(void)
72 {
73 _provider->unprotect();
74 }
75
76 Provider * _provider;
77 chip 1.1 };
78
79 //
80 // Provider module status
81 //
82 static const Uint16 _MODULE_OK = 2;
83 static const Uint16 _MODULE_STOPPING = 9;
84 static const Uint16 _MODULE_STOPPED = 10;
85
86 // provider manager
|
87 schuur 1.10 static LocalProviderManager providerManager;
|
88 chip 1.1
89 DefaultProviderManager::DefaultProviderManager(void)
90 {
91 }
92
93 DefaultProviderManager::~DefaultProviderManager(void)
94 {
95 }
96
|
97 dj.gorey 1.25 Message * DefaultProviderManager::processMessage(Message * request)
|
98 chip 1.1 {
99 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
100 "DefaultProviderManager::processMessage()");
101
102 Message * response = 0;
103
104 // pass the request message to a handler method based on message type
105 switch(request->getType())
106 {
107 case CIM_GET_INSTANCE_REQUEST_MESSAGE:
|
108 dj.gorey 1.25 response = handleGetInstanceRequest(request);
|
109 chip 1.1
110 break;
111 case CIM_ENUMERATE_INSTANCES_REQUEST_MESSAGE:
|
112 dj.gorey 1.25 response = handleEnumerateInstancesRequest(request);
|
113 chip 1.1
114 break;
115 case CIM_ENUMERATE_INSTANCE_NAMES_REQUEST_MESSAGE:
|
116 dj.gorey 1.25 response = handleEnumerateInstanceNamesRequest(request);
|
117 chip 1.1
118 break;
119 case CIM_CREATE_INSTANCE_REQUEST_MESSAGE:
|
120 dj.gorey 1.25 response = handleCreateInstanceRequest(request);
|
121 chip 1.1
122 break;
123 case CIM_MODIFY_INSTANCE_REQUEST_MESSAGE:
|
124 dj.gorey 1.25 response = handleModifyInstanceRequest(request);
|
125 chip 1.1
126 break;
127 case CIM_DELETE_INSTANCE_REQUEST_MESSAGE:
|
128 dj.gorey 1.25 response = handleDeleteInstanceRequest(request);
|
129 chip 1.1
130 break;
131 case CIM_EXEC_QUERY_REQUEST_MESSAGE:
|
132 dj.gorey 1.25 response = handleExecQueryRequest(request);
|
133 chip 1.1
134 break;
135 case CIM_ASSOCIATORS_REQUEST_MESSAGE:
|
136 dj.gorey 1.25 response = handleAssociatorsRequest(request);
|
137 chip 1.1
138 break;
139 case CIM_ASSOCIATOR_NAMES_REQUEST_MESSAGE:
|
140 dj.gorey 1.25 response = handleAssociatorNamesRequest(request);
|
141 chip 1.1
142 break;
143 case CIM_REFERENCES_REQUEST_MESSAGE:
|
144 dj.gorey 1.25 response = handleReferencesRequest(request);
|
145 chip 1.1
146 break;
147 case CIM_REFERENCE_NAMES_REQUEST_MESSAGE:
|
148 dj.gorey 1.25 response = handleReferenceNamesRequest(request);
|
149 chip 1.1
150 break;
151 case CIM_GET_PROPERTY_REQUEST_MESSAGE:
|
152 dj.gorey 1.25 response = handleGetPropertyRequest(request);
|
153 chip 1.1
154 break;
155 case CIM_SET_PROPERTY_REQUEST_MESSAGE:
|
156 dj.gorey 1.25 response = handleSetPropertyRequest(request);
|
157 chip 1.1
158 break;
159 case CIM_INVOKE_METHOD_REQUEST_MESSAGE:
|
160 dj.gorey 1.25 response = handleInvokeMethodRequest(request);
|
161 chip 1.1
162 break;
163 case CIM_CREATE_SUBSCRIPTION_REQUEST_MESSAGE:
|
164 dj.gorey 1.25 response = handleCreateSubscriptionRequest(request);
|
165 chip 1.1
166 break;
167 case CIM_MODIFY_SUBSCRIPTION_REQUEST_MESSAGE:
|
168 dj.gorey 1.25 response = handleModifySubscriptionRequest(request);
|
169 chip 1.1
170 break;
171 case CIM_DELETE_SUBSCRIPTION_REQUEST_MESSAGE:
|
172 dj.gorey 1.25 response = handleDeleteSubscriptionRequest(request);
|
173 chip 1.1
174 break;
175 case CIM_ENABLE_INDICATIONS_REQUEST_MESSAGE:
|
176 dj.gorey 1.25 response = handleEnableIndicationsRequest(request);
|
177 chip 1.1
178 break;
179 case CIM_DISABLE_INDICATIONS_REQUEST_MESSAGE:
|
180 dj.gorey 1.25 response = handleDisableIndicationsRequest(request);
|
181 chip 1.1
182 break;
183 case CIM_CONSUME_INDICATION_REQUEST_MESSAGE:
|
184 dj.gorey 1.25 response = handleConsumeIndicationRequest(request);
|
185 chip 1.1 break;
186
|
187 schuur 1.14 case CIM_EXPORT_INDICATION_REQUEST_MESSAGE:
|
188 dj.gorey 1.25 response = handleExportIndicationRequest(request);
|
189 schuur 1.14 break;
190
|
191 chip 1.1 case CIM_DISABLE_MODULE_REQUEST_MESSAGE:
|
192 dj.gorey 1.25 response = handleDisableModuleRequest(request);
|
193 chip 1.1
194 break;
195 case CIM_ENABLE_MODULE_REQUEST_MESSAGE:
|
196 dj.gorey 1.25 response = handleEnableModuleRequest(request);
|
197 chip 1.1
198 break;
199 case CIM_STOP_ALL_PROVIDERS_REQUEST_MESSAGE:
|
200 dj.gorey 1.25 response = handleStopAllProvidersRequest(request);
|
201 chip 1.1
202 break;
203 default:
|
204 dj.gorey 1.25 response = handleUnsupportedRequest(request);
|
205 chip 1.1
206 break;
207 }
208
209 PEG_METHOD_EXIT();
210
211 return(response);
212 }
213
|
214 dj.gorey 1.25 Message * DefaultProviderManager::handleUnsupportedRequest(const Message * message)
|
215 chip 1.1 {
216 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleUnsupportedRequest");
217
218 PEG_METHOD_EXIT();
219
220 // a null response implies unsupported or unknown operation
221 return(0);
222 }
223
|
224 dj.gorey 1.25 Message * DefaultProviderManager::handleGetInstanceRequest(const Message * message)
|
225 chip 1.1 {
226 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleGetInstanceRequest");
227
228 CIMGetInstanceRequestMessage * request =
229 dynamic_cast<CIMGetInstanceRequestMessage *>(const_cast<Message *>(message));
230
231 PEGASUS_ASSERT(request != 0);
232
233 CIMGetInstanceResponseMessage * response =
234 new CIMGetInstanceResponseMessage(
235 request->messageId,
236 CIMException(),
237 request->queueIds.copyAndPop(),
238 CIMInstance());
239
240 PEGASUS_ASSERT(response != 0);
241
242 // preserve message key
243 response->setKey(request->getKey());
244
245 // Set HTTP method in response from request
246 chip 1.1 response->setHttpMethod(request->getHttpMethod());
247
248 // create a handler for this request
249 GetInstanceResponseHandler handler(request, response);
250
251 try
252 {
253 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
254 "DefaultProviderManager::handleGetInstanceRequest - Host name: $0 Name space: $1 Class name: $2",
255 System::getHostName(),
256 request->nameSpace.getString(),
257 request->instanceName.getClassName().getString());
258
259 // make target object path
260 CIMObjectPath objectPath(
261 System::getHostName(),
262 request->nameSpace,
263 request->instanceName.getClassName(),
264 request->instanceName.getKeyBindings());
265
|
266 chip 1.4 ProviderName name(
|
267 schuur 1.20 objectPath,
|
268 schuur 1.11 ProviderType::INSTANCE);
|
269 chip 1.1
|
270 chip 1.5 // resolve provider name
|
271 dj.gorey 1.25 name = _resolveProviderName(name);
|
272 chip 1.1
273 // get cached or load new provider module
274 OpProviderHolder ph =
|
275 schuur 1.10 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
|
276 chip 1.1
277 // convert arguments
278 OperationContext context;
279
280 context.insert(IdentityContainer(request->userName));
281 context.insert(AcceptLanguageListContainer(request->acceptLanguages));
282 context.insert(ContentLanguageListContainer(request->contentLanguages));
283
284 CIMPropertyList propertyList(request->propertyList);
285
286 // forward request
287 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
288 "Calling provider.getInstance: " +
289 ph.GetProvider().getName());
290
291 pm_service_op_lock op_lock(&ph.GetProvider());
292
293 STAT_GETSTARTTIME;
294
295 ph.GetProvider().getInstance(
296 context,
297 chip 1.1 objectPath,
298 request->includeQualifiers,
299 request->includeClassOrigin,
300 propertyList,
301 handler);
302
303 STAT_PMS_PROVIDEREND;
304 }
305 catch(CIMException & e)
306 {
307 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
308 "Exception: " + e.getMessage());
309
310 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
311 }
312 catch(Exception & e)
313 {
314 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
315 "Exception: " + e.getMessage());
|
316 chip 1.2
|
317 chip 1.1 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
318 }
319 catch(...)
320 {
321 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
322 "Exception: Unknown");
|
323 chip 1.2
|
324 chip 1.1 handler.setStatus(CIM_ERR_FAILED, "Unknown error.");
325 }
326
327 PEG_METHOD_EXIT();
328
329 return(response);
330 }
331
|
332 dj.gorey 1.25 Message * DefaultProviderManager::handleEnumerateInstancesRequest(const Message * message)
|
333 chip 1.1 {
334 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleEnumerateInstanceRequest");
335
336 CIMEnumerateInstancesRequestMessage * request =
337 dynamic_cast<CIMEnumerateInstancesRequestMessage *>(const_cast<Message *>(message));
338
339 PEGASUS_ASSERT(request != 0);
340
341 CIMEnumerateInstancesResponseMessage * response =
342 new CIMEnumerateInstancesResponseMessage(
343 request->messageId,
344 CIMException(),
345 request->queueIds.copyAndPop(),
346 Array<CIMInstance>());
347
348 PEGASUS_ASSERT(response != 0);
349
350 // preserve message key
351 response->setKey(request->getKey());
352
353 // Set HTTP method in response from request
354 chip 1.1 response->setHttpMethod (request->getHttpMethod ());
355
356 // create a handler for this request
357 EnumerateInstancesResponseHandler handler(request, response);
358
359 try
360 {
361 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
362 "DefaultProviderManager::handleEnumerateInstancesRequest - Host name: $0 Name space: $1 Class name: $2",
363 System::getHostName(),
364 request->nameSpace.getString(),
365 request->className.getString());
366
367 // make target object path
368 CIMObjectPath objectPath(
369 System::getHostName(),
370 request->nameSpace,
371 request->className);
372
|
373 chip 1.4 ProviderName name(
|
374 schuur 1.20 objectPath,
|
375 schuur 1.11 ProviderType::INSTANCE);
|
376 chip 1.1
|
377 chip 1.5 // resolve provider name
|
378 dj.gorey 1.25 name = _resolveProviderName(name);
|
379 chip 1.1
380 // get cached or load new provider module
|
381 schuur 1.12 OpProviderHolder ph = providerManager.getProvider(name.getPhysicalName(),
|
382 dj.gorey 1.25 name.getLogicalName(), String::EMPTY);
|
383 chip 1.1
384 // convert arguments
385 OperationContext context;
386
387 context.insert(IdentityContainer(request->userName));
388 context.insert(AcceptLanguageListContainer(request->acceptLanguages));
389 context.insert(ContentLanguageListContainer(request->contentLanguages));
390
391 CIMPropertyList propertyList(request->propertyList);
392
393 // forward request
394 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
395 "Calling provider.enumerateInstances: " +
396 ph.GetProvider().getName());
397
398 pm_service_op_lock op_lock(&ph.GetProvider());
399
400 STAT_GETSTARTTIME;
401
402 ph.GetProvider().enumerateInstances(
403 context,
404 chip 1.1 objectPath,
405 request->includeQualifiers,
406 request->includeClassOrigin,
407 propertyList,
408 handler);
409
410 STAT_PMS_PROVIDEREND;
411 }
412 catch(CIMException & e)
413 {
414 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
415 "Exception: " + e.getMessage());
|
416 chip 1.2
|
417 chip 1.1 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
418 }
419 catch(Exception & e)
420 {
421 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
422 "Exception: " + e.getMessage());
|
423 chip 1.2
|
424 chip 1.1 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
425 }
426 catch(...)
427 {
428 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
429 "Exception: Unknown");
|
430 chip 1.2
|
431 chip 1.1 handler.setStatus(CIM_ERR_FAILED, "Unknown error.");
432 }
433
434 PEG_METHOD_EXIT();
435
436 return(response);
437 }
438
|
439 dj.gorey 1.25 Message * DefaultProviderManager::handleEnumerateInstanceNamesRequest(const Message * message)
|
440 chip 1.1 {
441 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleEnumerateInstanceNamesRequest");
442
443 CIMEnumerateInstanceNamesRequestMessage * request =
444 dynamic_cast<CIMEnumerateInstanceNamesRequestMessage *>(const_cast<Message *>(message));
445
446 PEGASUS_ASSERT(request != 0);
447
448 CIMEnumerateInstanceNamesResponseMessage * response =
449 new CIMEnumerateInstanceNamesResponseMessage(
450 request->messageId,
451 CIMException(),
452 request->queueIds.copyAndPop(),
453 Array<CIMObjectPath>());
454
455 PEGASUS_ASSERT(response != 0);
456
457 // preserve message key
458 response->setKey(request->getKey());
459
460 //set HTTP method in response from request
461 chip 1.1 response->setHttpMethod(request->getHttpMethod());;
462
463 // create a handler for this request
464 EnumerateInstanceNamesResponseHandler handler(request, response);
465
466 // process the request
467 try
468 {
469 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
470 "DefaultProviderManager::handleEnumerateInstanceNamesRequest - Host name: $0 Name space: $1 Class name: $2",
471 System::getHostName(),
472 request->nameSpace.getString(),
473 request->className.getString());
474
475 // make target object path
476 CIMObjectPath objectPath(
477 System::getHostName(),
478 request->nameSpace,
479 request->className);
480
481 // build an internal provider name from the request arguments
|
482 chip 1.4 ProviderName name(
|
483 schuur 1.20 objectPath,
|
484 schuur 1.11 ProviderType::INSTANCE);
|
485 chip 1.1
|
486 chip 1.5 // resolve provider name
|
487 dj.gorey 1.25 name = _resolveProviderName(name);
|
488 chip 1.1
489 // get cached or load new provider module
490 OpProviderHolder ph =
|
491 schuur 1.10 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName());
|
492 chip 1.1
493 // convert arguments
494 OperationContext context;
495
496 context.insert(IdentityContainer(request->userName));
497 context.insert(AcceptLanguageListContainer(request->acceptLanguages));
498 context.insert(ContentLanguageListContainer(request->contentLanguages));
499
500 // forward request
501 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
502 "Calling provider.enumerateInstanceNames: " +
503 ph.GetProvider().getName());
504
505 pm_service_op_lock op_lock(&ph.GetProvider());
506
507 STAT_GETSTARTTIME;
508
509 ph.GetProvider().enumerateInstanceNames(
510 context,
511 objectPath,
512 handler);
513 chip 1.1
514 STAT_PMS_PROVIDEREND;
515 }
516 catch(CIMException & e)
517 {
518 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
519 "Exception: " + e.getMessage());
|
520 chip 1.2
|
521 chip 1.1 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
522 }
523 catch(Exception & e)
524 {
525 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
526 "Exception: " + e.getMessage());
|
527 chip 1.2
|
528 chip 1.1 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
529 }
530 catch(...)
531 {
532 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
533 "Exception: Unknown");
|
534 chip 1.2
|
535 chip 1.1 handler.setStatus(CIM_ERR_FAILED, "Unknown error.");
536 }
537
538 PEG_METHOD_EXIT();
539
540 return(response);
541 }
542
|
543 dj.gorey 1.25 Message * DefaultProviderManager::handleCreateInstanceRequest(const Message * message)
|
544 chip 1.1 {
545 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleCreateInstanceRequest");
546
547 CIMCreateInstanceRequestMessage * request =
548 dynamic_cast<CIMCreateInstanceRequestMessage *>(const_cast<Message *>(message));
549
550 PEGASUS_ASSERT(request != 0);
551
552 // create response message
553 CIMCreateInstanceResponseMessage * response =
554 new CIMCreateInstanceResponseMessage(
555 request->messageId,
556 CIMException(),
557 request->queueIds.copyAndPop(),
558 CIMObjectPath());
559
560 PEGASUS_ASSERT(response != 0);
561
562 // preserve message key
563 response->setKey(request->getKey());
564
565 chip 1.1 // Set HTTP method in response from request
566 response->setHttpMethod (request->getHttpMethod ());
567
568 // create a handler for this request
569 CreateInstanceResponseHandler handler(request, response);
570
571 try
572 {
573 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
574 "DefaultProviderManager::handleCreateInstanceRequest - Host name: $0 Name space: $1 Class name: $2",
575 System::getHostName(),
576 request->nameSpace.getString(),
577 request->newInstance.getPath().getClassName().getString());
578
579 // make target object path
580 CIMObjectPath objectPath(
581 System::getHostName(),
582 request->nameSpace,
583 request->newInstance.getPath().getClassName(),
584 request->newInstance.getPath().getKeyBindings());
585
|
586 chip 1.4 ProviderName name(
|
587 schuur 1.20 objectPath,
|
588 schuur 1.11 ProviderType::INSTANCE);
|
589 chip 1.1
|
590 chip 1.5 // resolve provider name
|
591 dj.gorey 1.25 name = _resolveProviderName(name);
|
592 chip 1.1
593 // get cached or load new provider module
594 OpProviderHolder ph =
|
595 schuur 1.10 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
|
596 chip 1.1
597 // convert arguments
598 OperationContext context;
599
600 context.insert(IdentityContainer(request->userName));
601 context.insert(AcceptLanguageListContainer(request->acceptLanguages));
602 context.insert(ContentLanguageListContainer(request->contentLanguages));
603
604 // forward request
605 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
606 "Calling provider.createInstance: " +
607 ph.GetProvider().getName());
608
609 pm_service_op_lock op_lock(&ph.GetProvider());
610
611 STAT_GETSTARTTIME;
612
613 ph.GetProvider().createInstance(
614 context,
615 objectPath,
616 request->newInstance,
617 chip 1.1 handler);
618
619 STAT_PMS_PROVIDEREND;
620 }
621 catch(CIMException & e)
622 {
623 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
624 "Exception: " + e.getMessage());
|
625 chip 1.2
|
626 chip 1.1 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
627 }
628 catch(Exception & e)
629 {
630 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
631 "Exception: " + e.getMessage());
|
632 chip 1.2
|
633 chip 1.1 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
634 }
635 catch(...)
636 {
637 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
638 "Exception: Unknown");
|
639 chip 1.2
|
640 chip 1.1 handler.setStatus(CIM_ERR_FAILED, "Unknown error.");
641 }
642
643 PEG_METHOD_EXIT();
644
645 return(response);
646 }
647
|
648 dj.gorey 1.25 Message * DefaultProviderManager::handleModifyInstanceRequest(const Message * message)
|
649 chip 1.1 {
650 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleModifyInstanceRequest");
651
652 CIMModifyInstanceRequestMessage * request =
653 dynamic_cast<CIMModifyInstanceRequestMessage *>(const_cast<Message *>(message));
654
655 PEGASUS_ASSERT(request != 0);
656
657 // create response message
658 CIMModifyInstanceResponseMessage * response =
659 new CIMModifyInstanceResponseMessage(
660 request->messageId,
661 CIMException(),
662 request->queueIds.copyAndPop());
663
664 PEGASUS_ASSERT(response != 0);
665
666 // preserve message key
667 response->setKey(request->getKey());
668
669 // Set HTTP method in response from request
670 chip 1.1 response->setHttpMethod (request->getHttpMethod ());
671
672 // create a handler for this request
673 ModifyInstanceResponseHandler handler(request, response);
674
675 try
676 {
677 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
678 "DefaultProviderManager::handleModifyInstanceRequest - Host name: $0 Name space: $1 Class name: $2",
679 System::getHostName(),
680 request->nameSpace.getString(),
681 request->modifiedInstance.getPath().getClassName().getString());
682
683 // make target object path
684 CIMObjectPath objectPath(
685 System::getHostName(),
686 request->nameSpace,
687 request->modifiedInstance.getPath ().getClassName(),
688 request->modifiedInstance.getPath ().getKeyBindings());
689
|
690 chip 1.4 ProviderName name(
|
691 schuur 1.20 objectPath,
|
692 schuur 1.11 ProviderType::INSTANCE);
|
693 chip 1.1
|
694 chip 1.5 // resolve provider name
|
695 dj.gorey 1.25 name = _resolveProviderName(name);
|
696 chip 1.1
697 // get cached or load new provider module
698 OpProviderHolder ph =
|
699 schuur 1.10 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
|
700 chip 1.1
701 // convert arguments
702 OperationContext context;
703
704 context.insert(IdentityContainer(request->userName));
705 context.insert(AcceptLanguageListContainer(request->acceptLanguages));
706 context.insert(ContentLanguageListContainer(request->contentLanguages));
707
708 CIMPropertyList propertyList(request->propertyList);
709
710 // forward request
711 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
712 "Calling provider.modifyInstance: " +
713 ph.GetProvider().getName());
714
715 pm_service_op_lock op_lock(&ph.GetProvider());
716
717 STAT_GETSTARTTIME;
718
719 ph.GetProvider().modifyInstance(
720 context,
721 chip 1.1 objectPath,
722 request->modifiedInstance,
723 request->includeQualifiers,
724 propertyList,
725 handler);
726
727 STAT_PMS_PROVIDEREND;
728 }
729 catch(CIMException & e)
730 {
731 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
732 "Exception: " + e.getMessage());
|
733 chip 1.2
|
734 chip 1.1 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
735 }
736 catch(Exception & e)
737 {
738 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
739 "Exception: " + e.getMessage());
|
740 chip 1.2
|
741 chip 1.1 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
742 }
743 catch(...)
744 {
745 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
746 "Exception: Unknown");
|
747 chip 1.2
|
748 chip 1.1 handler.setStatus(CIM_ERR_FAILED, "Unknown error.");
749 }
750
751 PEG_METHOD_EXIT();
752
753 return(response);
754 }
755
|
756 dj.gorey 1.25 Message * DefaultProviderManager::handleDeleteInstanceRequest(const Message * message)
|
757 chip 1.1 {
758 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleDeleteInstanceRequest");
759
760 CIMDeleteInstanceRequestMessage * request =
761 dynamic_cast<CIMDeleteInstanceRequestMessage *>(const_cast<Message *>(message));
762
763 PEGASUS_ASSERT(request != 0);
764
765 // create response message
766 CIMDeleteInstanceResponseMessage * response =
767 new CIMDeleteInstanceResponseMessage(
768 request->messageId,
769 CIMException(),
770 request->queueIds.copyAndPop());
771
772 PEGASUS_ASSERT(response != 0);
773
774 // preserve message key
775 response->setKey(request->getKey());
776
777 // Set HTTP method in response from request
778 chip 1.1 response->setHttpMethod (request->getHttpMethod ());
779
780 // create a handler for this request
781 DeleteInstanceResponseHandler handler(request, response);
782
783 try
784 {
785 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
786 "DefaultProviderManager::handleDeleteInstanceRequest - Host name: $0 Name space: $1 Class name: $2",
787 System::getHostName(),
788 request->nameSpace.getString(),
789 request->instanceName.getClassName().getString());
790
791 // make target object path
792 CIMObjectPath objectPath(
793 System::getHostName(),
794 request->nameSpace,
795 request->instanceName.getClassName(),
796 request->instanceName.getKeyBindings());
797
|
798 chip 1.4 ProviderName name(
|
799 schuur 1.20 objectPath,
|
800 schuur 1.11 ProviderType::INSTANCE);
|
801 chip 1.1
|
802 chip 1.5 // resolve provider name
|
803 dj.gorey 1.25 name = _resolveProviderName(name);
|
804 chip 1.1
805 // get cached or load new provider module
806 OpProviderHolder ph =
|
807 schuur 1.10 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
|
808 chip 1.1
809 // convert arguments
810 OperationContext context;
811
812 context.insert(IdentityContainer(request->userName));
813 context.insert(AcceptLanguageListContainer(request->acceptLanguages));
814 context.insert(ContentLanguageListContainer(request->contentLanguages));
815
816 // forward request
817 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
818 "Calling provider.deleteInstance: " +
819 ph.GetProvider().getName());
820
821 pm_service_op_lock op_lock(&ph.GetProvider());
822
823 STAT_GETSTARTTIME;
824
825 ph.GetProvider().deleteInstance(
826 context,
827 objectPath,
828 handler);
829 chip 1.1
830 STAT_PMS_PROVIDEREND;
831 }
832 catch(CIMException & e)
833 {
834 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
835 "Exception: " + e.getMessage());
|
836 chip 1.2
|
837 chip 1.1 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
838 }
839 catch(Exception & e)
840 {
841 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
842 "Exception: " + e.getMessage());
|
843 chip 1.2
|
844 chip 1.1 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
845 }
846 catch(...)
847 {
848 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
849 "Exception: Unknown");
|
850 chip 1.2
|
851 chip 1.1 handler.setStatus(CIM_ERR_FAILED, "Unknown error.");
852 }
853
854 PEG_METHOD_EXIT();
855
856 return(response);
857 }
858
|
859 dj.gorey 1.25 Message * DefaultProviderManager::handleExecQueryRequest(const Message * message)
|
860 chip 1.1 {
|
861 schuur 1.12 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleExecQueryRequest");
|
862 chip 1.1
863 CIMExecQueryRequestMessage * request =
864 dynamic_cast<CIMExecQueryRequestMessage *>(const_cast<Message *>(message));
865
866 PEGASUS_ASSERT(request != 0);
867
868 CIMExecQueryResponseMessage * response =
869 new CIMExecQueryResponseMessage(
870 request->messageId,
|
871 schuur 1.12 CIMException(),
|
872 chip 1.1 request->queueIds.copyAndPop(),
873 Array<CIMObject>());
874
875 PEGASUS_ASSERT(response != 0);
876
877 // preserve message key
878 response->setKey(request->getKey());
879
880 // Set HTTP method in response from request
|
881 schuur 1.12 response->setHttpMethod (request->getHttpMethod ());
882
883 // create a handler for this request
884 ExecQueryResponseHandler handler(request, response);
885
886 try
887 {
888 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
889 "DefaultProviderManager::handleExecQueryRequest - Host name: $0 Name space: $1 Class name: $2",
890 System::getHostName(),
891 request->nameSpace.getString(),
892 request->className.getString());
893
894 // make target object path
895 CIMObjectPath objectPath(
896 System::getHostName(),
897 request->nameSpace,
898 request->className);
899
900 ProviderName name(
|
901 schuur 1.20 objectPath,
|
902 schuur 1.12 ProviderType::QUERY);
903
904 // resolve provider name
|
905 dj.gorey 1.25 name = _resolveProviderName(name);
|
906 schuur 1.12
907 // get cached or load new provider module
908 OpProviderHolder ph =
909 providerManager.getProvider(name.getPhysicalName(),
|
910 dj.gorey 1.25 name.getLogicalName(), String::EMPTY);
|
911 schuur 1.12
912 if (dynamic_cast<CIMInstanceQueryProvider*>(ph.GetCIMProvider()) == 0) {
913 String errorString = " instance provider is registered supporting execQuery "
|
914 dj.gorey 1.25 "but is not a CIMQueryInstanceProvider subclass.";
|
915 schuur 1.12 throw CIMException(CIM_ERR_FAILED,"ProviderLoadFailure (" + name.getPhysicalName() + ":" +
|
916 dj.gorey 1.25 name.getLogicalName() + "):" + errorString);
|
917 schuur 1.12 }
918
919 // convert arguments
920 OperationContext context;
921
922 context.insert(IdentityContainer(request->userName));
923 context.insert(AcceptLanguageListContainer(request->acceptLanguages));
924 context.insert(ContentLanguageListContainer(request->contentLanguages));
925
|
926 schuur 1.18 QueryExpression qx(QueryExpressionFactory::routeBuildQueryExpressionRep
927 (request->queryLanguage,request->query));
|
928 schuur 1.12
929 // forward request
930 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
931 "Calling provider.executeQueryRequest: " +
932 ph.GetProvider().getName());
933
934 pm_service_op_lock op_lock(&ph.GetProvider());
935
936 STAT_GETSTARTTIME;
937
938 ph.GetProvider().execQuery(
939 context,
940 objectPath,
941 qx,
942 handler);
943
944 STAT_PMS_PROVIDEREND;
945 }
946 catch(CIMException & e)
947 {
948 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
949 schuur 1.12 "Exception: " + e.getMessage());
950
951 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
952 }
953 catch(Exception & e)
954 {
|
955 dj.gorey 1.25 cout<<"--- exception not a CIMInstanceQueryProvider"<<endl;
|
956 schuur 1.12 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
957 "Exception: " + e.getMessage());
958
959 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
960 }
961 catch(...)
962 {
963 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
964 "Exception: Unknown");
|
965 chip 1.1
|
966 schuur 1.12 handler.setStatus(CIM_ERR_FAILED, "Unknown error.");
967 }
|
968 chip 1.1
969 PEG_METHOD_EXIT();
970
971 return(response);
972 }
973
|
974 dj.gorey 1.25 Message * DefaultProviderManager::handleAssociatorsRequest(const Message * message)
|
975 chip 1.1 {
976 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleAssociatorsRequest");
977
978 CIMAssociatorsRequestMessage * request =
979 dynamic_cast<CIMAssociatorsRequestMessage *>(const_cast<Message *>(message));
980
981 PEGASUS_ASSERT(request != 0);
982
983 CIMAssociatorsResponseMessage * response =
984 new CIMAssociatorsResponseMessage(
985 request->messageId,
986 CIMException(),
987 request->queueIds.copyAndPop(),
988 Array<CIMObject>());
989
990 PEGASUS_ASSERT(response != 0);
991
992 // preserve message key
993 response->setKey(request->getKey());
994
995 // create a handler for this request
996 chip 1.1 AssociatorsResponseHandler handler(request, response);
997
998 // process the request
999 try
1000 {
1001 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1002 "DefaultProviderManager::handleAssociatorsRequest - Host name: $0 Name space: $1 Class name: $2",
1003 System::getHostName(),
1004 request->nameSpace.getString(),
1005 request->objectName.getClassName().getString());
1006
1007 // make target object path
1008 CIMObjectPath objectPath(
1009 System::getHostName(),
1010 request->nameSpace,
1011 request->objectName.getClassName());
1012
1013 objectPath.setKeyBindings(request->objectName.getKeyBindings());
1014
|
1015 schuur 1.19 CIMObjectPath assocPath(
1016 System::getHostName(),
1017 request->nameSpace,
1018 request->assocClass.getString());
1019
|
1020 chip 1.4 ProviderName name(
|
1021 schuur 1.20 assocPath,
|
1022 schuur 1.11 ProviderType::ASSOCIATION);
|
1023 chip 1.2
|
1024 chip 1.5 // resolve provider name
|
1025 dj.gorey 1.25 name = _resolveProviderName(name);
|
1026 chip 1.2
1027 // get cached or load new provider module
1028 OpProviderHolder ph =
|
1029 schuur 1.10 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
|
1030 chip 1.2
1031 // convert arguments
1032 OperationContext context;
1033
1034 context.insert(IdentityContainer(request->userName));
1035 context.insert(AcceptLanguageListContainer(request->acceptLanguages));
1036 context.insert(ContentLanguageListContainer(request->contentLanguages));
|
1037 chip 1.1
|
1038 chip 1.2 // ATTN KS STAT_GETSTARTTIME;
1039 pm_service_op_lock op_lock(&ph.GetProvider());
|
1040 chip 1.1
|
1041 chip 1.2 ph.GetProvider().associators(
1042 context,
1043 objectPath,
1044 request->assocClass,
1045 request->resultClass,
1046 request->role,
1047 request->resultRole,
1048 request->includeQualifiers,
1049 request->includeClassOrigin,
1050 request->propertyList.getPropertyNameArray(),
1051 handler);
|
1052 chip 1.1
|
1053 chip 1.2 STAT_PMS_PROVIDEREND;
|
1054 chip 1.1 }
1055 catch(CIMException & e)
1056 {
1057 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1058 "Exception: " + e.getMessage());
|
1059 chip 1.2
|
1060 chip 1.1 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
1061 }
1062 catch(Exception & e)
1063 {
1064 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1065 "Exception: " + e.getMessage());
|
1066 chip 1.2
|
1067 chip 1.1 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
1068 }
1069 catch(...)
1070 {
1071 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1072 "Exception: Unknown");
|
1073 chip 1.2
|
1074 chip 1.1 handler.setStatus(CIM_ERR_FAILED, "Unknown error.");
1075 }
1076
1077 PEG_METHOD_EXIT();
1078
1079 return(response);
1080 }
1081
|
1082 dj.gorey 1.25 Message * DefaultProviderManager::handleAssociatorNamesRequest(const Message * message)
|
1083 chip 1.1 {
1084 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleAssociatorNamesRequest");
1085
1086 CIMAssociatorNamesRequestMessage * request =
1087 dynamic_cast<CIMAssociatorNamesRequestMessage *>(const_cast<Message *>(message));
1088
1089 PEGASUS_ASSERT(request != 0);
1090
1091 CIMAssociatorNamesResponseMessage * response =
1092 new CIMAssociatorNamesResponseMessage(
1093 request->messageId,
1094 CIMException(),
1095 request->queueIds.copyAndPop(),
1096 Array<CIMObjectPath>());
1097
1098 PEGASUS_ASSERT(response != 0);
1099
1100 // preserve message key
1101 response->setKey(request->getKey());
1102
1103 // Set HTTP method in response from request
1104 chip 1.1 response->setHttpMethod(request->getHttpMethod());
1105
1106 // create a handler for this request
1107 AssociatorNamesResponseHandler handler(request, response);
1108
1109 // process the request
1110 try
1111 {
1112 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1113 "DefaultProviderManager::handleAssociationNamesRequest - Host name: $0 Name space: $1 Class name: $2",
1114 System::getHostName(),
1115 request->nameSpace.getString(),
1116 request->objectName.getClassName().getString());
1117
1118 // make target object path
1119 CIMObjectPath objectPath(
1120 System::getHostName(),
1121 request->nameSpace,
1122 request->objectName.getClassName());
1123
1124 objectPath.setKeyBindings(request->objectName.getKeyBindings());
1125 chip 1.1
|
1126 schuur 1.19 CIMObjectPath assocPath(
1127 System::getHostName(),
1128 request->nameSpace,
1129 request->assocClass.getString());
1130
|
1131 chip 1.4 ProviderName name(
|
1132 schuur 1.20 assocPath,
|
1133 schuur 1.11 ProviderType::ASSOCIATION);
|
1134 chip 1.2
|
1135 chip 1.5 // resolve provider name
|
1136 dj.gorey 1.25 name = _resolveProviderName(name);
|
1137 chip 1.2
1138 // get cached or load new provider module
1139 OpProviderHolder ph =
|
1140 schuur 1.10 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
|
1141 chip 1.2
1142 // convert arguments
1143 OperationContext context;
|
1144 chip 1.1
|
1145 chip 1.2 context.insert(IdentityContainer(request->userName));
1146 context.insert(AcceptLanguageListContainer(request->acceptLanguages));
1147 context.insert(ContentLanguageListContainer(request->contentLanguages));
|
1148 chip 1.1
|
1149 chip 1.2 pm_service_op_lock op_lock(&ph.GetProvider());
|
1150 chip 1.1
|
1151 chip 1.2 ph.GetProvider().associatorNames(
1152 context,
1153 objectPath,
1154 request->assocClass,
1155 request->resultClass,
1156 request->role,
1157 request->resultRole,
1158 handler);
|
1159 chip 1.1
|
1160 chip 1.2 STAT_PMS_PROVIDEREND;
|
1161 chip 1.1 }
1162 catch(CIMException & e)
1163 {
|
1164 chip 1.2 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1165 "Exception: " + e.getMessage());
1166
|
1167 chip 1.1 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
1168 }
1169 catch(Exception & e)
1170 {
|
1171 chip 1.2 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1172 "Exception: " + e.getMessage());
1173
|
1174 chip 1.1 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
1175 }
1176 catch(...)
1177 {
1178 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1179 "Exception: Unknown");
|
1180 chip 1.2
|
1181 chip 1.1 handler.setStatus(CIM_ERR_FAILED, "Unknown error.");
1182 }
1183
1184 PEG_METHOD_EXIT();
1185
1186 return(response);
1187 }
1188
|
1189 dj.gorey 1.25 Message * DefaultProviderManager::handleReferencesRequest(const Message * message)
|
1190 chip 1.1 {
1191 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleReferencesRequest");
1192
1193 CIMReferencesRequestMessage * request =
1194 dynamic_cast<CIMReferencesRequestMessage *>(const_cast<Message *>(message));
1195
1196 PEGASUS_ASSERT(request != 0);
1197
1198 CIMReferencesResponseMessage * response =
1199 new CIMReferencesResponseMessage(
1200 request->messageId,
1201 CIMException(),
1202 request->queueIds.copyAndPop(),
1203 Array<CIMObject>());
1204
1205 PEGASUS_ASSERT(response != 0);
1206
1207 // preserve message key
1208 response->setKey(request->getKey());
1209
1210 // Set HTTP method in response from request
1211 chip 1.1 response->setHttpMethod (request->getHttpMethod ());
1212
1213 // create a handler for this request
1214 ReferencesResponseHandler handler(request, response);
1215
1216 // process the request
1217 try
1218 {
1219 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1220 "DefaultProviderManager::handleReferencesRequest - Host name: $0 Name space: $1 Class name: $2",
1221 System::getHostName(),
1222 request->nameSpace.getString(),
1223 request->objectName.getClassName().getString());
1224
1225 // make target object path
1226 CIMObjectPath objectPath(
1227 System::getHostName(),
1228 request->nameSpace,
1229 request->objectName.getClassName());
1230
1231 objectPath.setKeyBindings(request->objectName.getKeyBindings());
1232 chip 1.1
|
1233 schuur 1.19 CIMObjectPath resultPath(
1234 System::getHostName(),
1235 request->nameSpace,
1236 request->resultClass.getString());
1237
|
1238 chip 1.4 ProviderName name(
|
1239 schuur 1.20 resultPath,
|
1240 schuur 1.11 ProviderType::ASSOCIATION);
|
1241 chip 1.2
|
1242 chip 1.5 // resolve provider name
|
1243 dj.gorey 1.25 name = _resolveProviderName(name);
|
1244 chip 1.2
1245 // get cached or load new provider module
1246 OpProviderHolder ph =
|
1247 schuur 1.10 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
|
1248 chip 1.2
1249 // convert arguments
1250 OperationContext context;
1251
1252 context.insert(IdentityContainer(request->userName));
1253 context.insert(AcceptLanguageListContainer(request->acceptLanguages));
1254 context.insert(ContentLanguageListContainer(request->contentLanguages));
1255
1256 STAT_GETSTARTTIME;
|
1257 chip 1.1
|
1258 chip 1.2 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1259 "Calling provider.references: " +
1260 ph.GetProvider().getName());
|
1261 chip 1.1
|
1262 chip 1.2 pm_service_op_lock op_lock(&ph.GetProvider());
|
1263 chip 1.1
|
1264 chip 1.2 ph.GetProvider().references(
1265 context,
1266 objectPath,
1267 request->resultClass,
1268 request->role,
1269 request->includeQualifiers,
1270 request->includeClassOrigin,
1271 request->propertyList.getPropertyNameArray(),
1272 handler);
|
1273 chip 1.1
|
1274 chip 1.2 STAT_PMS_PROVIDEREND;
|
1275 chip 1.1 }
1276 catch(CIMException & e)
1277 {
1278 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1279 "Exception: " + e.getMessage());
|
1280 chip 1.2
|
1281 chip 1.1 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
1282 }
1283 catch(Exception & e)
1284 {
1285 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1286 "Exception: " + e.getMessage());
|
1287 chip 1.2
|
1288 chip 1.1 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
1289 }
1290 catch(...)
1291 {
1292 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1293 "Exception: Unknown");
|
1294 chip 1.2
|
1295 chip 1.1 handler.setStatus(CIM_ERR_FAILED, "Unknown error.");
1296 }
1297
1298 PEG_METHOD_EXIT();
1299
1300 return(response);
1301 }
1302
|
1303 dj.gorey 1.25 Message * DefaultProviderManager::handleReferenceNamesRequest(const Message * message)
|
1304 chip 1.1 {
1305 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleReferenceNamesRequest");
1306
1307 CIMReferenceNamesRequestMessage * request =
1308 dynamic_cast<CIMReferenceNamesRequestMessage *>(const_cast<Message *>(message));
1309
1310 PEGASUS_ASSERT(request != 0);
1311
1312 CIMReferenceNamesResponseMessage * response =
1313 new CIMReferenceNamesResponseMessage(
1314 request->messageId,
1315 CIMException(),
1316 request->queueIds.copyAndPop(),
1317 Array<CIMObjectPath>());
1318
1319 // preserve message key
1320 response->setKey(request->getKey());
1321
1322 // Set HTTP method in response from request
1323 response->setHttpMethod (request->getHttpMethod ());
1324
1325 chip 1.1 // create a handler for this request
1326 ReferenceNamesResponseHandler handler(request, response);
1327
1328 // process the request
1329 try
1330 {
1331 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1332 "DefaultProviderManager::handleReferenceNamesRequest - Host name: $0 Name space: $1 Class name: $2",
1333 System::getHostName(),
1334 request->nameSpace.getString(),
1335 request->objectName.getClassName().getString());
1336
1337 // make target object path
1338 CIMObjectPath objectPath(
1339 System::getHostName(),
1340 request->nameSpace,
1341 request->objectName.getClassName());
1342
1343 objectPath.setKeyBindings(request->objectName.getKeyBindings());
1344
|
1345 schuur 1.19 CIMObjectPath resultPath(
1346 System::getHostName(),
1347 request->nameSpace,
1348 request->resultClass.getString());
1349
|
1350 chip 1.4 ProviderName name(
|
1351 schuur 1.20 resultPath,
|
1352 schuur 1.11 ProviderType::ASSOCIATION);
|
1353 chip 1.1
|
1354 chip 1.5 // resolve provider name
|
1355 dj.gorey 1.25 name = _resolveProviderName(name);
|
1356 chip 1.1
|
1357 chip 1.2 // get cached or load new provider module
1358 OpProviderHolder ph =
|
1359 schuur 1.10 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
|
1360 chip 1.1
|
1361 chip 1.2 // convert arguments
1362 OperationContext context;
|
1363 chip 1.1
|
1364 chip 1.2 context.insert(IdentityContainer(request->userName));
1365 context.insert(AcceptLanguageListContainer(request->acceptLanguages));
1366 context.insert(ContentLanguageListContainer(request->contentLanguages));
|
1367 chip 1.1
|
1368 chip 1.2 STAT_GETSTARTTIME;
|
1369 chip 1.1
|
1370 chip 1.2 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1371 "Calling provider.referenceNames: " +
1372 ph.GetProvider().getName());
|
1373 chip 1.1
|
1374 chip 1.2 pm_service_op_lock op_lock(&ph.GetProvider());
|
1375 chip 1.1
|
1376 chip 1.2 ph.GetProvider().referenceNames(
1377 context,
1378 objectPath,
1379 request->resultClass,
1380 request->role,
1381 handler);
|
1382 chip 1.1
|
1383 chip 1.2 STAT_PMS_PROVIDEREND;
|
1384 chip 1.1 }
1385 catch(CIMException & e)
1386 {
1387 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1388 "Exception: " + e.getMessage());
|
1389 chip 1.2
|
1390 chip 1.1 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
1391 }
1392 catch(Exception & e)
1393 {
1394 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1395 "Exception: " + e.getMessage());
|
1396 chip 1.2
|
1397 chip 1.1 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
1398 }
1399 catch(...)
1400 {
1401 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1402 "Exception: Unknown");
|
1403 chip 1.2
|
1404 chip 1.1 handler.setStatus(CIM_ERR_FAILED, "Unknown error.");
1405 }
1406
1407 PEG_METHOD_EXIT();
1408
1409 return(response);
1410 }
1411
|
1412 dj.gorey 1.25 Message * DefaultProviderManager::handleGetPropertyRequest(const Message * message)
|
1413 chip 1.1 {
1414 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleGetPropertyRequest");
1415
1416 CIMGetPropertyRequestMessage * request =
1417 dynamic_cast<CIMGetPropertyRequestMessage *>(const_cast<Message *>(message));
1418
1419 PEGASUS_ASSERT(request != 0);
1420
1421 // create response message
1422 CIMGetPropertyResponseMessage * response =
1423 new CIMGetPropertyResponseMessage(
1424 request->messageId,
1425 CIMException(),
1426 request->queueIds.copyAndPop(),
1427 CIMValue());
1428
1429 PEGASUS_ASSERT(response != 0);
1430
1431 // preserve message key
1432 response->setKey(request->getKey());
1433
1434 chip 1.1 // Set HTTP method in response from request
1435 response->setHttpMethod(request->getHttpMethod());
1436
1437 GetPropertyResponseHandler handler(request, response);
1438
1439 try
1440 {
1441 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1442 "DefaultProviderManager::handleGetPropertyRequest - Host name: $0 Name space: $1 Class name: $2",
1443 System::getHostName(),
1444 request->nameSpace.getString(),
1445 request->instanceName.getClassName().getString());
1446
1447 // make target object path
1448 CIMObjectPath objectPath(
1449 System::getHostName(),
1450 request->nameSpace,
1451 request->instanceName.getClassName(),
1452 request->instanceName.getKeyBindings());
1453
|
1454 chip 1.4 ProviderName name(
|
1455 schuur 1.20 objectPath,
|
1456 chip 1.4 0);
|
1457 chip 1.1
|
1458 chip 1.5 // resolve provider name
|
1459 dj.gorey 1.25 name = _resolveProviderName(name);
|
1460 chip 1.1
1461 // get cached or load new provider module
1462 OpProviderHolder ph =
|
1463 schuur 1.10 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
|
1464 chip 1.1
1465 // convert arguments
1466 OperationContext context;
1467
1468 context.insert(IdentityContainer(request->userName));
1469 context.insert(AcceptLanguageListContainer(request->acceptLanguages));
1470 context.insert(ContentLanguageListContainer(request->contentLanguages));
1471
1472 CIMName propertyName = request->propertyName;
1473
1474 STAT_GETSTARTTIME;
1475
1476 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1477 "Calling provider.getProperty: " +
1478 ph.GetProvider().getName());
1479
1480 // forward request
1481 pm_service_op_lock op_lock(&ph.GetProvider());
1482
1483 ph.GetProvider().getProperty(
1484 context,
1485 chip 1.1 objectPath,
1486 propertyName,
1487 handler);
1488
1489 STAT_PMS_PROVIDEREND;
1490 }
1491 catch(CIMException & e)
1492 {
1493 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1494 "Exception: " + e.getMessage());
|
1495 chip 1.2
|
1496 chip 1.1 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
1497 }
1498 catch(Exception & e)
1499 {
1500 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1501 "Exception: " + e.getMessage());
|
1502 chip 1.2
|
1503 chip 1.1 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
1504 }
1505 catch(...)
1506 {
1507 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1508 "Exception: Unknown");
|
1509 chip 1.2
|
1510 chip 1.1 handler.setStatus(CIM_ERR_FAILED, "Unknown error.");
1511 }
1512
1513 PEG_METHOD_EXIT();
1514
1515 return(response);
1516 }
1517
|
1518 dj.gorey 1.25 Message * DefaultProviderManager::handleSetPropertyRequest(const Message * message)
|
1519 chip 1.1 {
1520 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleSetPropertyRequest");
1521
1522 CIMSetPropertyRequestMessage * request =
1523 dynamic_cast<CIMSetPropertyRequestMessage *>(const_cast<Message *>(message));
1524
1525 PEGASUS_ASSERT(request != 0);
1526
1527 // create response message
1528 //l10n
1529 CIMSetPropertyResponseMessage * response =
1530 new CIMSetPropertyResponseMessage(
1531 request->messageId,
1532 PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, MessageLoaderParms(
1533 "ProviderManager.DefaultProviderManager.NOT_IMPLEMENTED",
1534 "not implemented")),
1535 request->queueIds.copyAndPop());
1536
1537 PEGASUS_ASSERT(response != 0);
1538
1539 // preserve message key
1540 chip 1.1 response->setKey(request->getKey());
1541
1542 // Set HTTP method in response from request
1543 response->setHttpMethod(request->getHttpMethod());
1544
1545 SetPropertyResponseHandler handler(request, response);
1546
1547 try
1548 {
1549 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1550 "DefaultProviderManager::handleSetPropertyRequest - Host name: $0 Name space: $1 Class name: $2",
1551 System::getHostName(),
1552 request->nameSpace.getString(),
1553 request->instanceName.getClassName().getString());
1554
1555 // make target object path
1556 CIMObjectPath objectPath(
1557 System::getHostName(),
1558 request->nameSpace,
1559 request->instanceName.getClassName(),
1560 request->instanceName.getKeyBindings());
1561 chip 1.1
|
1562 chip 1.4 ProviderName name(
|
1563 schuur 1.20 objectPath,
|
1564 chip 1.4 0);
|
1565 chip 1.1
|
1566 chip 1.5 // resolve provider name
|
1567 dj.gorey 1.25 name = _resolveProviderName(name);
|
1568 chip 1.1
1569 // get cached or load new provider module
1570 OpProviderHolder ph =
|
1571 schuur 1.10 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
|
1572 chip 1.1
1573 // convert arguments
1574 OperationContext context;
1575
1576 context.insert(IdentityContainer(request->userName));
1577 context.insert(AcceptLanguageListContainer(request->acceptLanguages));
1578 context.insert(ContentLanguageListContainer(request->contentLanguages));
1579
1580 CIMName propertyName = request->propertyName;
1581 CIMValue propertyValue = request->newValue;
1582
1583 STAT_GETSTARTTIME;
1584
1585 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1586 "Calling provider.setProperty: " +
1587 ph.GetProvider().getName());
1588
1589 // forward request
1590 pm_service_op_lock op_lock(&ph.GetProvider());
1591
1592 ph.GetProvider().setProperty(
1593 chip 1.1 context,
1594 objectPath,
1595 propertyName,
1596 propertyValue,
1597 handler);
1598
1599 STAT_PMS_PROVIDEREND;
1600 }
1601 catch(CIMException & e)
1602 {
1603 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1604 "Exception: " + e.getMessage());
|
1605 chip 1.2
|
1606 chip 1.1 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
1607 }
1608 catch(Exception & e)
1609 {
1610 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1611 "Exception: " + e.getMessage());
|
1612 chip 1.2
|
1613 chip 1.1 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
1614 }
1615 catch(...)
1616 {
1617 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1618 "Exception: Unknown");
|
1619 chip 1.2
|
1620 chip 1.1 handler.setStatus(CIM_ERR_FAILED, "Unknown error.");
1621 }
1622
1623 PEG_METHOD_EXIT();
1624
1625 return(response);
1626 }
1627
|
1628 dj.gorey 1.25 Message * DefaultProviderManager::handleInvokeMethodRequest(const Message * message)
|
1629 chip 1.1 {
1630 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleInvokeMethodRequest");
1631
1632 CIMInvokeMethodRequestMessage * request =
1633 dynamic_cast<CIMInvokeMethodRequestMessage *>(const_cast<Message *>(message));
1634
1635 PEGASUS_ASSERT(request != 0);
1636
1637 // create response message
1638 CIMInvokeMethodResponseMessage * response =
1639 new CIMInvokeMethodResponseMessage(
1640 request->messageId,
1641 CIMException(),
1642 request->queueIds.copyAndPop(),
1643 CIMValue(),
1644 Array<CIMParamValue>(),
1645 request->methodName);
1646
1647 PEGASUS_ASSERT(response != 0);
1648
1649 // propagate message key
1650 chip 1.1 response->setKey(request->getKey());
1651
1652 // Set HTTP method in response from request
1653 response->setHttpMethod (request->getHttpMethod ());
1654
1655 // create a handler for this request
1656 InvokeMethodResponseHandler handler(request, response);
1657
1658 try
1659 {
1660 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1661 "DefaultProviderManager::handleInvokeMethodRequest - Host name: $0 Name space: $1 Class name: $2",
1662 System::getHostName(),
1663 request->nameSpace.getString(),
1664 request->instanceName.getClassName().getString());
1665
1666 // make target object path
1667 CIMObjectPath objectPath(
1668 System::getHostName(),
1669 request->nameSpace,
1670 request->instanceName.getClassName(),
1671 chip 1.1 request->instanceName.getKeyBindings());
1672
|
1673 chip 1.4 ProviderName name(
|
1674 schuur 1.20 objectPath,
|
1675 schuur 1.16 ProviderType::METHOD,
1676 request->methodName);
|
1677 chip 1.1
|
1678 chip 1.5 // resolve provider name
|
1679 dj.gorey 1.25 name = _resolveProviderName(name);
|
1680 chip 1.1
1681 // get cached or load new provider module
1682 OpProviderHolder ph =
|
1683 schuur 1.10 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
|
1684 chip 1.1
1685 // convert arguments
1686 OperationContext context;
1687
1688 context.insert(IdentityContainer(request->userName));
1689 context.insert(AcceptLanguageListContainer(request->acceptLanguages));
1690 context.insert(ContentLanguageListContainer(request->contentLanguages));
1691
1692 CIMObjectPath instanceReference(request->instanceName);
1693
1694 // ATTN: propagate namespace
1695 instanceReference.setNameSpace(request->nameSpace);
1696
1697 // forward request
1698 STAT_GETSTARTTIME;
1699
1700 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1701 "Calling provider.invokeMethod: " +
1702 ph.GetProvider().getName());
1703
1704 pm_service_op_lock op_lock(&ph.GetProvider());
1705 chip 1.1
1706 ph.GetProvider().invokeMethod(
1707 context,
1708 instanceReference,
1709 request->methodName,
1710 request->inParameters,
1711 handler);
1712
1713 STAT_PMS_PROVIDEREND;
1714 }
1715 catch(CIMException & e)
1716 {
1717 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1718 "Exception: " + e.getMessage());
|
1719 chip 1.2
|
1720 chip 1.1 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
1721 }
1722 catch(Exception & e)
1723 {
1724 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1725 "Exception: " + e.getMessage());
|
1726 chip 1.2
|
1727 chip 1.1 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
1728 }
1729 catch(...)
1730 {
1731 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1732 "Exception: Unknown");
|
1733 chip 1.2
|
1734 chip 1.1 handler.setStatus(CIM_ERR_FAILED, "Unknown error.");
1735 }
1736
1737 PEG_METHOD_EXIT();
1738
1739 return(response);
1740 }
1741
|
1742 dj.gorey 1.25 Message * DefaultProviderManager::handleCreateSubscriptionRequest(const Message * message)
|
1743 chip 1.1 {
1744 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleCreateSubscriptionRequest");
1745
1746 CIMCreateSubscriptionRequestMessage * request =
1747 dynamic_cast<CIMCreateSubscriptionRequestMessage *>(const_cast<Message *>(message));
1748
1749 PEGASUS_ASSERT(request != 0);
1750
1751 CIMCreateSubscriptionResponseMessage * response =
1752 new CIMCreateSubscriptionResponseMessage(
1753 request->messageId,
1754 CIMException(),
1755 request->queueIds.copyAndPop());
1756
1757 PEGASUS_ASSERT(response != 0);
1758
1759 // preserve message key
1760 response->setKey(request->getKey());
1761
1762 // Set HTTP method in response from request
1763 response->setHttpMethod (request->getHttpMethod ());
1764 chip 1.1
1765 OperationResponseHandler handler(request, response);
1766
1767 try
1768 {
|
1769 chip 1.2 String temp;
1770
1771 for(Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1772 {
1773 temp.append(request->classNames[i].getString());
1774
1775 if(i == (n - 1))
1776 {
1777 temp.append(", ");
1778 }
1779 }
1780
1781 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1782 "DefaultProviderManager::handleCreateSubscriptionRequest - Host name: $0 Name space: $1 Class name(s): $2",
1783 System::getHostName(),
1784 request->nameSpace.getString(),
1785 temp);
1786
|
1787 schuur 1.18 String physicalName=_resolvePhysicalName(
1788 request->providerModule.getProperty(
1789 request->providerModule.findProperty("Location")).getValue().toString());
1790
|
1791 schuur 1.20 ProviderName name(
|
1792 schuur 1.18 request->provider.getProperty(request->provider.findProperty
1793 ("Name")).getValue ().toString (),
1794 physicalName,
1795 request->providerModule.getProperty(request->providerModule.findProperty
1796 ("InterfaceType")).getValue().toString(),
1797 0);
|
1798 chip 1.1
1799 // get cached or load new provider module
1800 OpProviderHolder ph =
|
1801 schuur 1.10 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
|
1802 dj.gorey 1.25
|
1803 chip 1.1 // convert arguments
1804 OperationContext context;
1805
1806 context.insert(IdentityContainer(request->userName));
1807 context.insert(SubscriptionInstanceContainer
1808 (request->subscriptionInstance));
1809 context.insert(SubscriptionFilterConditionContainer
1810 (request->condition, request->queryLanguage));
1811 context.insert(SubscriptionLanguageListContainer
1812 (request->acceptLanguages));
1813 context.insert(AcceptLanguageListContainer(request->acceptLanguages));
1814 context.insert(ContentLanguageListContainer(request->contentLanguages));
1815
1816 CIMObjectPath subscriptionName = request->subscriptionInstance.getPath();
1817
1818 Array<CIMObjectPath> classNames;
1819
1820 for(Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1821 {
1822 CIMObjectPath className(
1823 System::getHostName(),
1824 chip 1.1 request->nameSpace,
1825 request->classNames[i]);
1826
1827 classNames.append(className);
1828 }
1829
1830 CIMPropertyList propertyList = request->propertyList;
1831
1832 Uint16 repeatNotificationPolicy = request->repeatNotificationPolicy;
1833
1834 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1835 "Calling provider.createSubscription: " +
1836 ph.GetProvider().getName());
1837
1838 pm_service_op_lock op_lock(&ph.GetProvider());
1839
1840 ph.GetProvider().createSubscription(
1841 context,
1842 subscriptionName,
1843 classNames,
1844 propertyList,
1845 chip 1.1 repeatNotificationPolicy);
1846 }
1847 catch(CIMException & e)
1848 {
1849 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1850 "Exception: " + e.getMessage());
|
1851 chip 1.2
|
1852 chip 1.1 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
1853 }
1854 catch(Exception & e)
1855 {
1856 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1857 "Exception: " + e.getMessage());
|
1858 chip 1.2
|
1859 chip 1.1 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
1860 }
1861 catch(...)
1862 {
1863 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1864 "Exception: Unknown");
|
1865 chip 1.2
|
1866 chip 1.1 handler.setStatus(CIM_ERR_FAILED, "Unknown Error");
1867 }
1868
1869 PEG_METHOD_EXIT();
1870
1871 return(response);
1872 }
1873
|
1874 dj.gorey 1.25 Message * DefaultProviderManager::handleModifySubscriptionRequest( const Message * message)
|
1875 chip 1.1 {
1876 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleModifySubscriptionRequest");
1877
1878 CIMModifySubscriptionRequestMessage * request =
1879 dynamic_cast<CIMModifySubscriptionRequestMessage *>(const_cast<Message *>(message));
1880
1881 PEGASUS_ASSERT(request != 0);
1882
1883 CIMModifySubscriptionResponseMessage * response =
1884 new CIMModifySubscriptionResponseMessage(
1885 request->messageId,
1886 CIMException(),
1887 request->queueIds.copyAndPop());
1888
1889 PEGASUS_ASSERT(response != 0);
1890
1891 // preserve message key
1892 response->setKey(request->getKey());
1893
1894 // Set HTTP method in response from request
1895 response->setHttpMethod (request->getHttpMethod ());
1896 chip 1.1
1897 OperationResponseHandler handler(request, response);
1898
1899 try
1900 {
|
1901 chip 1.2 String temp;
1902
1903 for(Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1904 {
1905 temp.append(request->classNames[i].getString());
1906
1907 if(i == (n - 1))
1908 {
1909 temp.append(", ");
1910 }
1911 }
1912
1913 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
|
1914 schuur 1.18 "DefaultProviderManager::handleCreateSubscriptionRequest - Host name: $0 Name space: $1 Class name(s): $2",
|
1915 chip 1.2 System::getHostName(),
1916 request->nameSpace.getString(),
1917 temp);
1918
|
1919 schuur 1.18 String physicalName=_resolvePhysicalName(
1920 request->providerModule.getProperty(
1921 request->providerModule.findProperty("Location")).getValue().toString());
1922
|
1923 schuur 1.20 ProviderName name(
|
1924 schuur 1.18 request->provider.getProperty(request->provider.findProperty
1925 ("Name")).getValue ().toString (),
1926 physicalName,
1927 request->providerModule.getProperty(request->providerModule.findProperty
1928 ("InterfaceType")).getValue().toString(),
1929 0);
|
1930 chip 1.1
1931 // get cached or load new provider module
1932 OpProviderHolder ph =
|
1933 schuur 1.10 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
|
1934 dj.gorey 1.25
|
1935 chip 1.1 // convert arguments
1936 OperationContext context;
1937
1938 context.insert(IdentityContainer(request->userName));
1939 context.insert(SubscriptionInstanceContainer
1940 (request->subscriptionInstance));
1941 context.insert(SubscriptionFilterConditionContainer
1942 (request->condition, request->queryLanguage));
1943 context.insert(SubscriptionLanguageListContainer
1944 (request->acceptLanguages));
1945 context.insert(AcceptLanguageListContainer(request->acceptLanguages));
1946 context.insert(ContentLanguageListContainer(request->contentLanguages));
1947
1948 CIMObjectPath subscriptionName = request->subscriptionInstance.getPath();
1949
1950 Array<CIMObjectPath> classNames;
1951
1952 for(Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1953 {
1954 CIMObjectPath className(
1955 System::getHostName(),
1956 chip 1.1 request->nameSpace,
1957 request->classNames[i]);
1958
1959 classNames.append(className);
1960 }
1961
1962 CIMPropertyList propertyList = request->propertyList;
1963
1964 Uint16 repeatNotificationPolicy = request->repeatNotificationPolicy;
1965
1966 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1967 "Calling provider.modifySubscription: " +
1968 ph.GetProvider().getName());
1969
1970 pm_service_op_lock op_lock(&ph.GetProvider());
1971
1972 ph.GetProvider().modifySubscription(
1973 context,
1974 subscriptionName,
1975 classNames,
1976 propertyList,
1977 chip 1.1 repeatNotificationPolicy);
1978 }
1979 catch(CIMException & e)
1980 {
1981 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1982 "Exception: " + e.getMessage());
|
1983 chip 1.2
|
1984 chip 1.1 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
1985 }
1986 catch(Exception & e)
1987 {
1988 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1989 "Exception: " + e.getMessage());
|
1990 chip 1.2
|
1991 chip 1.1 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
1992 }
1993 catch(...)
1994 {
1995 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1996 "Exception: Unknown");
|
1997 chip 1.2
|
1998 chip 1.1 handler.setStatus(CIM_ERR_FAILED, "Unknown Error");
1999 }
2000
2001 PEG_METHOD_EXIT();
2002
2003 return(response);
2004 }
2005
|
2006 dj.gorey 1.25 Message * DefaultProviderManager::handleDeleteSubscriptionRequest(const Message * message)
|
2007 chip 1.1 {
2008 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleDeleteSubscriptionRequest");
2009
2010 CIMDeleteSubscriptionRequestMessage * request =
2011 dynamic_cast<CIMDeleteSubscriptionRequestMessage *>(const_cast<Message *>(message));
2012
2013 PEGASUS_ASSERT(request != 0);
2014
2015 CIMDeleteSubscriptionResponseMessage * response =
2016 new CIMDeleteSubscriptionResponseMessage(
2017 request->messageId,
2018 CIMException(),
2019 request->queueIds.copyAndPop());
2020
2021 PEGASUS_ASSERT(response != 0);
2022
2023 // preserve message key
2024 response->setKey(request->getKey());
2025
2026 // Set HTTP method in response from request
2027 response->setHttpMethod(request->getHttpMethod());
2028 chip 1.1
2029 OperationResponseHandler handler(request, response);
2030
2031 try
2032 {
|
2033 chip 1.2 String temp;
2034
2035 for(Uint32 i = 0, n = request->classNames.size(); i < n; i++)
2036 {
2037 temp.append(request->classNames[i].getString());
2038
2039 if(i == (n - 1))
2040 {
2041 temp.append(", ");
2042 }
2043 }
2044
2045 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
2046 "DefaultProviderManager::handleDeleteSubscriptionRequest - Host name: $0 Name space: $1 Class name(s): $2",
2047 System::getHostName(),
2048 request->nameSpace.getString(),
2049 temp);
2050
|
2051 schuur 1.18 String physicalName=_resolvePhysicalName(
2052 request->providerModule.getProperty(
2053 request->providerModule.findProperty("Location")).getValue().toString());
2054
|
2055 schuur 1.20 ProviderName name(
|
2056 schuur 1.18 request->provider.getProperty(request->provider.findProperty
2057 ("Name")).getValue ().toString (),
2058 physicalName,
2059 request->providerModule.getProperty(request->providerModule.findProperty
2060 ("InterfaceType")).getValue().toString(),
2061 0);
|
2062 chip 1.1
2063 // get cached or load new provider module
2064 OpProviderHolder ph =
|
2065 schuur 1.10 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
|
2066 dj.gorey 1.25
|
2067 chip 1.1 // convert arguments
2068 OperationContext context;
2069
2070 context.insert(IdentityContainer(request->userName));
2071 context.insert(SubscriptionInstanceContainer
2072 (request->subscriptionInstance));
2073 context.insert(SubscriptionLanguageListContainer
2074 (request->acceptLanguages));
2075 context.insert(AcceptLanguageListContainer(request->acceptLanguages));
2076 context.insert(ContentLanguageListContainer(request->contentLanguages));
2077
2078 CIMObjectPath subscriptionName = request->subscriptionInstance.getPath();
2079
2080 Array<CIMObjectPath> classNames;
2081
2082 for(Uint32 i = 0, n = request->classNames.size(); i < n; i++)
2083 {
2084 CIMObjectPath className(
2085 System::getHostName(),
2086 request->nameSpace,
2087 request->classNames[i]);
2088 chip 1.1
2089 classNames.append(className);
2090 }
2091
2092 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2093 "Calling provider.deleteSubscription: " +
2094 ph.GetProvider().getName());
2095
2096 pm_service_op_lock op_lock(&ph.GetProvider());
2097
2098 ph.GetProvider().deleteSubscription(
2099 context,
2100 subscriptionName,
2101 classNames);
2102 }
2103 catch(CIMException & e)
2104 {
2105 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2106 "Exception: " + e.getMessage());
|
2107 chip 1.2
|
2108 chip 1.1 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
2109 }
2110 catch(Exception & e)
2111 {
2112 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2113 "Exception: " + e.getMessage());
|
2114 chip 1.2
|
2115 chip 1.1 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
2116 }
2117 catch(...)
2118 {
2119 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2120 "Exception: Unknown");
|
2121 chip 1.2
|
2122 chip 1.1 handler.setStatus(CIM_ERR_FAILED, "Unknown Error");
2123 }
2124
2125 PEG_METHOD_EXIT();
2126
2127 return(response);
2128 }
2129
|
2130 dj.gorey 1.25 Message * DefaultProviderManager::handleEnableIndicationsRequest(const Message * message)
|
2131 chip 1.1 {
2132 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager:: handleEnableIndicationsRequest");
2133
2134 CIMEnableIndicationsRequestMessage * request =
2135 dynamic_cast<CIMEnableIndicationsRequestMessage *>(const_cast<Message *>(message));
2136
2137 PEGASUS_ASSERT(request != 0);
2138
2139 CIMEnableIndicationsResponseMessage * response =
2140 new CIMEnableIndicationsResponseMessage(
2141 request->messageId,
2142 CIMException(),
2143 request->queueIds.copyAndPop());
2144
2145 CIMEnableIndicationsResponseMessage * responseforhandler =
2146 new CIMEnableIndicationsResponseMessage(
2147 request->messageId,
2148 CIMException(),
2149 request->queueIds.copyAndPop());
2150
2151 PEGASUS_ASSERT(response != 0);
2152 chip 1.1
2153 // preserve message key
2154 response->setKey(request->getKey());
2155
2156 // Set HTTP method in response from request
2157 response->setHttpMethod(request->getHttpMethod());
2158
2159 response->dest = request->queueIds.top();
2160
2161 // ATTN: need pointer to Provider Manager Server!
|
2162 schuur 1.14 EnableIndicationsResponseHandler *handler =
2163 new EnableIndicationsResponseHandler(request, response,
2164 request->provider, ProviderManagerService::providerManagerService);
|
2165 chip 1.1
2166 try
2167 {
|
2168 schuur 1.14 String physicalName=_resolvePhysicalName(
2169 request->providerModule.getProperty(
|
2170 dj.gorey 1.25 request->providerModule.findProperty("Location")).getValue().toString());
|
2171 schuur 1.14
|
2172 schuur 1.20 ProviderName name(
|
2173 schuur 1.16 request->provider.getProperty(request->provider.findProperty
|
2174 schuur 1.14 ("Name")).getValue ().toString (),
|
2175 dj.gorey 1.25 physicalName,
|
2176 schuur 1.14 request->providerModule.getProperty(request->providerModule.findProperty
2177 ("InterfaceType")).getValue().toString(),
2178 0);
|
2179 chip 1.1
2180 // get cached or load new provider module
2181 OpProviderHolder ph =
|
2182 schuur 1.14 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
|
2183 chip 1.1
2184 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2185 "Calling provider.enableIndications: " +
2186 ph.GetProvider().getName());
|
2187 schuur 1.14
2188 pm_service_op_lock op_lock(&ph.GetProvider());
|
2189 schuur 1.23 ph.GetProvider().protect();
|
2190 schuur 1.14
|
2191 chip 1.1 ph.GetProvider().enableIndications(*handler);
2192
2193
2194 // if no exception, store the handler so it is persistent for as
2195 // long as the provider has indications enabled.
2196 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2197 "Storing indication handler for " + ph.GetProvider().getName());
2198
2199 _insertEntry(ph.GetProvider(), handler);
2200 }
2201 catch(CIMException & e)
2202 {
2203 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2204 "Exception: " + e.getMessage());
|
2205 schuur 1.14
|
2206 chip 1.1 response->cimException = CIMException(e);
2207 }
2208 catch(Exception & e)
2209 {
2210 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2211 "Exception: " + e.getMessage());
2212 response->cimException = CIMException(CIM_ERR_FAILED, MessageLoaderParms(
2213 "ProviderManager.DefaultProviderManager.INTERNAL_ERROR",
2214 "Internal Error"));
2215 }
2216 catch(...)
2217 {
2218 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2219 "Exception: Unknown");
2220 response->cimException = CIMException(CIM_ERR_FAILED, MessageLoaderParms(
2221 "ProviderManager.DefaultProviderManager.UNKNOWN_ERROR",
2222 "Unknown Error"));
2223 }
2224
2225 PEG_METHOD_EXIT();
2226
2227 chip 1.1 return(response);
2228 }
2229
|
2230 dj.gorey 1.25 Message * DefaultProviderManager::handleDisableIndicationsRequest(const Message * message)
|
2231 chip 1.1 {
2232 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleDisableIndicationsRequest");
2233
2234 CIMDisableIndicationsRequestMessage * request =
2235 dynamic_cast<CIMDisableIndicationsRequestMessage *>(const_cast<Message *>(message));
2236
2237 PEGASUS_ASSERT(request != 0);
2238
2239 CIMDisableIndicationsResponseMessage * response =
2240 new CIMDisableIndicationsResponseMessage(
2241 request->messageId,
2242 CIMException(),
2243 request->queueIds.copyAndPop());
2244
2245 // preserve message key
2246 response->setKey(request->getKey());
2247
2248 // Set HTTP method in response from request
2249 response->setHttpMethod (request->getHttpMethod ());
2250
2251 OperationResponseHandler handler(request, response);
2252 chip 1.1
2253 try
2254 {
|
2255 schuur 1.14 String physicalName=_resolvePhysicalName(
2256 request->providerModule.getProperty(
|
2257 dj.gorey 1.25 request->providerModule.findProperty("Location")).getValue().toString());
|
2258 schuur 1.14
|
2259 schuur 1.20 ProviderName name(
|
2260 schuur 1.16 request->provider.getProperty(request->provider.findProperty
|
2261 schuur 1.14 ("Name")).getValue ().toString (),
|
2262 dj.gorey 1.25 physicalName,
|
2263 schuur 1.14 request->providerModule.getProperty(request->providerModule.findProperty
2264 ("InterfaceType")).getValue().toString(),
|
2265 chip 1.6 0);
|
2266 chip 1.1
2267 // get cached or load new provider module
2268 OpProviderHolder ph =
|
2269 schuur 1.10 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
|
2270 chip 1.1
2271 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2272 "Calling provider.disableIndications: " +
2273 ph.GetProvider().getName());
2274
2275 ph.GetProvider().disableIndications();
2276
2277 ph.GetProvider().unprotect();
2278
2279 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2280 "Removing and Destroying indication handler for " +
2281 ph.GetProvider().getName());
2282
2283 delete _removeEntry(_generateKey(ph.GetProvider()));
2284 }
2285
2286 catch(CIMException & e)
2287 {
2288 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2289 "Exception: " + e.getMessage());
|
2290 chip 1.2
|
2291 chip 1.1 response->cimException = CIMException(e);
2292 }
2293 catch(Exception & e)
2294 {
2295 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2296 "Exception: " + e.getMessage());
|
2297 chip 1.2 response->cimException = CIMException(CIM_ERR_FAILED, MessageLoaderParms(
|
2298 chip 1.1 "ProviderManager.DefaultProviderManager.INTERNAL_ERROR",
2299 "Internal Error"));
2300 }
2301 catch(...)
2302 {
2303 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2304 "Exception: Unknown");
|
2305 chip 1.2 response->cimException = CIMException(CIM_ERR_FAILED, MessageLoaderParms(
|
2306 chip 1.1 "ProviderManager.DefaultProviderManager.UNKNOWN_ERROR",
2307 "Unknown Error"));
2308 }
2309
2310 PEG_METHOD_EXIT();
2311
2312 return(response);
2313 }
2314
|
2315 dj.gorey 1.25 Message * DefaultProviderManager::handleConsumeIndicationRequest(const Message *message)
|
2316 chip 1.1 {
2317 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handlConsumeIndicationRequest");
2318
2319 CIMConsumeIndicationRequestMessage *request =
2320 dynamic_cast<CIMConsumeIndicationRequestMessage *>(const_cast<Message *>(message));
2321
2322 PEGASUS_ASSERT(request != 0);
2323
2324 CIMResponseMessage * response =
2325 new CIMResponseMessage(
2326 CIM_CONSUME_INDICATION_RESPONSE_MESSAGE,
2327 request->messageId,
2328 CIMException(),
2329 request->queueIds.copyAndPop());
2330
2331 PEGASUS_ASSERT(response != 0);
2332
2333 response->setKey(request->getKey());
2334
2335 // Set HTTP method in response from request
2336 response->setHttpMethod (request->getHttpMethod ());
2337 chip 1.1
2338 Uint32 type = 3;
2339
2340 try
2341 {
|
2342 chip 1.6 ProviderName name(
2343 String::EMPTY,
2344 String::EMPTY,
2345 String::EMPTY,
2346 0);
|
2347 chip 1.1
|
2348 dj.gorey 1.25 /*
|
2349 chip 1.4 ProviderName name(
|
2350 chip 1.1 String::EMPTY,
2351 String::EMPTY,
2352 objectPath.toString());
2353
|
2354 chip 1.5 // resolve provider name
2355 name = _resolveProviderName(name);
|
2356 chip 1.1 */
2357
2358 // get cached or load new provider module
2359 OpProviderHolder ph =
|
2360 schuur 1.10 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
|
2361 chip 1.1
2362 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2363 "Calling provider.: " +
2364 ph.GetProvider().getName());
2365
2366 OperationContext context;
2367
2368 //l10n
2369 // ATTN-CEC 06/04/03 NOTE: I can't find where the consume msg is sent. This
2370 // does not appear to be hooked-up. When it is added, need to
2371 // make sure that Content-Language is set in the consume msg.
2372 // NOTE: A-L is not needed to be set in the consume msg.
2373 // add the langs to the context
2374 context.insert(ContentLanguageListContainer(request->contentLanguages));
2375
2376 CIMInstance indication_copy = request->indicationInstance;
2377
2378 SimpleIndicationResponseHandler handler;
2379
2380 ph.GetProvider().consumeIndication(context,
2381 "",
2382 chip 1.1 indication_copy);
2383 }
2384 catch(CIMException & e)
2385 {
2386 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2387 "Exception: " + e.getMessage());
|
2388 chip 1.2
|
2389 chip 1.1 response->cimException = CIMException(e);
2390 }
2391 catch(Exception & e)
2392 {
2393 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2394 "Exception: " + e.getMessage());
2395 //l10n
2396 //response->cimException = CIMException(CIM_ERR_FAILED, "Internal Error");
2397 response->cimException = CIMException(CIM_ERR_FAILED, MessageLoaderParms(
2398 "ProviderManager.DefaultProviderManager.INTERNAL_ERROR",
2399 "Internal Error"));
2400 }
2401 catch(...)
2402 {
2403 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2404 "Exception: Unknown");
2405 //l10n
2406 //response->cimException = CIMException(CIM_ERR_FAILED, "Unknown Error");
2407 response->cimException = CIMException(CIM_ERR_FAILED, MessageLoaderParms(
2408 "ProviderManager.DefaultProviderManager.UNKNOWN_ERROR",
2409 "Unknown Error"));
2410 chip 1.1 }
2411
2412 PEG_METHOD_EXIT();
2413
2414 return(response);
2415 }
2416
|
2417 schuur 1.14
|
2418 dj.gorey 1.25 Message *DefaultProviderManager::handleExportIndicationRequest(const Message *message)
|
2419 schuur 1.14 {
2420 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManagerService::handlExportIndicationRequest");
2421
2422 CIMExportIndicationRequestMessage * request =
2423 dynamic_cast<CIMExportIndicationRequestMessage *>(const_cast<Message *>(message));
2424
2425 PEGASUS_ASSERT(request != 0);
2426
2427 CIMExportIndicationResponseMessage * response =
2428 new CIMExportIndicationResponseMessage(
2429 request->messageId,
2430 CIMException(),
2431 request->queueIds.copyAndPop());
2432
2433 PEGASUS_ASSERT(response != 0);
2434
2435 // preserve message key
2436 response->setKey(request->getKey());
2437
2438 // Set HTTP method in response from request
2439 response->setHttpMethod (request->getHttpMethod ());
2440 schuur 1.14
2441 OperationResponseHandler handler(request, response);
2442
2443 try
2444 {
2445 ProviderName name(
2446 String::EMPTY,
2447 String::EMPTY,
2448 String::EMPTY,
2449 0);
2450
2451 // resolve provider name
2452 name = _resolveProviderName(request->destinationPath);
2453
2454 // get cached or load new provider module
2455 OpProviderHolder ph =
2456 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
2457
2458 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
|
2459 dj.gorey 1.25 "Calling provider.: " +
2460 ph.GetProvider().getName());
|
2461 schuur 1.14
2462 OperationContext context;
2463
2464 //L10N_TODO
2465 //l10n
2466 // ATTN-CEC 06/04/03 NOTE: I can't find where the consume msg is sent. This
2467 // does not appear to be hooked-up. When it is added, need to
2468 // make sure that Content-Language is set in the consume msg.
2469 // NOTE: A-L is not needed to be set in the consume msg.
2470 // add the langs to the context
2471 context.insert(ContentLanguageListContainer(request->contentLanguages));
2472
2473 CIMInstance indication_copy = request->indicationInstance;
2474 pm_service_op_lock op_lock(&ph.GetProvider());
2475
2476 ph.GetProvider().consumeIndication(context,
|
2477 dj.gorey 1.25 request->destinationPath,
2478 indication_copy);
|
2479 schuur 1.14
2480 }
2481
2482 catch(CIMException & e)
2483 {
2484 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2485 "Exception: " + e.getMessage());
2486
2487 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
2488 }
2489 catch(Exception & e)
2490 {
2491 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2492 "Exception: " + e.getMessage());
2493
2494 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
2495 }
2496 catch(...)
2497 {
2498 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2499 "Exception: Unknown");
2500 schuur 1.14
2501 handler.setStatus(CIM_ERR_FAILED, "Unknown Error");
2502 }
2503
2504 PEG_METHOD_EXIT();
2505
2506 return(response);
2507 }
2508
2509
2510
2511
|
2512 chip 1.1 //
2513 // This function disables a provider module if disableProviderOnly is not true,
2514 // otherwise, disables a provider. Disable provider module means that
2515 // block all the providers which contain in the module and unload the
2516 // providers.
2517 // Disable provider means unload the provider and the provider is not blocked.
2518 //
2519 // ATTN-YZ-P2-20030519: Provider needs to be blocked when disable a provider.
2520 //
|
2521 dj.gorey 1.25 Message * DefaultProviderManager::handleDisableModuleRequest(const Message * message)
|
2522 chip 1.1 {
2523 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleDisableModuleRequest");
|
2524 schuur 1.19
|
2525 chip 1.1 CIMDisableModuleRequestMessage * request =
2526 dynamic_cast<CIMDisableModuleRequestMessage *>(const_cast<Message *>(message));
2527
2528 PEGASUS_ASSERT(request != 0);
|
2529 dj.gorey 1.25
|
2530 schuur 1.18 Array<Uint16> operationalStatus;
|
2531 chip 1.1 Boolean disableProviderOnly = request->disableProviderOnly;
|
2532 schuur 1.18 CIMException cimException;
|
2533 chip 1.1
|
2534 schuur 1.18 ProviderRegistrationManager * _providerRegistrationManager = GetProviderRegistrationManager();
|
2535 dj.gorey 1.25
|
2536 schuur 1.18 try
|
2537 chip 1.1 {
|
2538 schuur 1.18 // get provider module name
2539 String moduleName;
2540 CIMInstance mInstance = request->providerModule;
2541 Uint32 pos = mInstance.findProperty(CIMName ("Name"));
|
2542 chip 1.2
|
2543 schuur 1.18 if(pos != PEG_NOT_FOUND)
|
2544 chip 1.1 {
|
2545 dj.gorey 1.25 mInstance.getProperty(pos).getValue().get(moduleName);
|
2546 chip 1.1 }
2547
|
2548 schuur 1.18 Boolean disableProviderOnly = request->disableProviderOnly;
2549
|
2550 chip 1.1 //
|
2551 schuur 1.18 // get operational status
|
2552 chip 1.1 //
|
2553 schuur 1.18 if (!disableProviderOnly)
|
2554 chip 1.1 {
|
2555 schuur 1.18 Uint32 pos2 = mInstance.findProperty(CIMName ("OperationalStatus"));
2556 if (pos2 != PEG_NOT_FOUND)
2557 {
2558 //
2559 // ATTN-CAKG-P2-20020821: Check for null status?
2560 //
2561 mInstance.getProperty(pos2).getValue().get(operationalStatus);
2562 }
2563
2564 //
2565 // update module status from OK to Stopping
2566 //
2567 for (Uint32 i=0, n = operationalStatus.size(); i < n; i++)
|
2568 chip 1.1 {
|
2569 schuur 1.18 if (operationalStatus[i] == _MODULE_OK)
2570 {
2571 operationalStatus.remove(i);
2572 }
2573 }
2574
2575 operationalStatus.append(_MODULE_STOPPING);
2576
2577 if(_providerRegistrationManager->setProviderModuleStatus
2578 (moduleName, operationalStatus) == false)
2579 {
2580 //l10n
2581 //throw PEGASUS_CIM_EXCEPTION(CIM_ERR_FAILED, "set module status failed.");
2582 throw PEGASUS_CIM_EXCEPTION_L(
2583 CIM_ERR_FAILED,
2584 MessageLoaderParms(
2585 "ProviderManager.ProviderManagerService."
2586 "SET_MODULE_STATUS_FAILED",
2587 "set module status failed."));
|
2588 chip 1.1 }
2589 }
2590
|
2591 schuur 1.18 // Unload providers
2592 Array<CIMInstance> _pInstances = request->providers;
2593 Array<Boolean> _indicationProviders = request->indicationProviders;
|
2594 dj.gorey 1.25
|
2595 schuur 1.18 String physicalName=_resolvePhysicalName(
2596 mInstance.getProperty(
2597 mInstance.findProperty("Location")).getValue().toString());
|
2598 dj.gorey 1.25
|
2599 schuur 1.18 for(Uint32 i = 0, n = _pInstances.size(); i < n; i++)
|
2600 chip 1.1 {
|
2601 schuur 1.18 String pName(_pInstances[i].getProperty(
2602 _pInstances[i].findProperty("Name")).getValue().toString());
|
2603 chip 1.1
|
2604 schuur 1.18 Sint16 ret_value = providerManager.disableProvider(physicalName,pName);
|
2605 chip 1.1
|
2606 schuur 1.18 if (ret_value == 0)
2607 {
|
2608 schuur 1.23 // disable failed since there are pending requests,
|
2609 dj.gorey 1.25 // update module status from Stopping to OK if
|
2610 schuur 1.18 // disableProviderOnly is not true
2611 if (!disableProviderOnly)
2612 {
|
2613 dj.gorey 1.25 for(Uint32 j=0, m = operationalStatus.size(); j < m; j++)
2614 {
|
2615 schuur 1.18 if (operationalStatus[j] == _MODULE_STOPPING)
2616 {
2617 operationalStatus.remove(j);
2618 }
|
2619 dj.gorey 1.25 }
|
2620 schuur 1.18
2621 operationalStatus.append(_MODULE_OK);
2622
2623 if(_providerRegistrationManager->setProviderModuleStatus
2624 (moduleName, operationalStatus) == false)
2625 {
2626 throw PEGASUS_CIM_EXCEPTION_L(
2627 CIM_ERR_FAILED,
2628 MessageLoaderParms(
2629 "ProviderManager.ProviderManagerService."
2630 "SET_MODULE_STATUS_FAILED",
2631 "set module status failed."));
2632 }
2633 }
|
2634 dj.gorey 1.25 }
2635 else if (ret_value == 1)
2636 {
|
2637 schuur 1.18 // if It is an indication provider
|
2638 dj.gorey 1.25 // remove the entry from the table since the
|
2639 schuur 1.18 // provider has been disabled
2640 if (_indicationProviders[i])
|
2641 dj.gorey 1.25 {
|
2642 schuur 1.18 _removeEntry(_generateKey(pName,physicalName));
|
2643 dj.gorey 1.25 }
2644 }
|
2645 schuur 1.18 else
2646 {
|
2647 dj.gorey 1.25 // disable failed for other reason, throw exception
2648 // update module status from Stopping to OK if
2649 // disableProviderOnly is not true
|
2650 schuur 1.18 if (!disableProviderOnly)
2651 {
|
2652 dj.gorey 1.25 for(Uint32 j=0, m = operationalStatus.size(); j < m; j++)
2653 {
|
2654 schuur 1.18 if (operationalStatus[j] == _MODULE_STOPPING)
2655 {
2656 operationalStatus.remove(j);
2657 }
|
2658 dj.gorey 1.25 }
|
2659 schuur 1.18
2660 operationalStatus.append(_MODULE_OK);
2661
2662 if(_providerRegistrationManager->setProviderModuleStatus
2663 (moduleName, operationalStatus) == false)
2664 {
2665 throw PEGASUS_CIM_EXCEPTION_L(
2666 CIM_ERR_FAILED,
2667 MessageLoaderParms(
2668 "ProviderManager.ProviderManagerService."
2669 "SET_MODULE_STATUS_FAILED",
2670 "set module status failed."));
2671 }
2672 }
2673
2674 throw PEGASUS_CIM_EXCEPTION_L(
2675 CIM_ERR_FAILED,
2676 MessageLoaderParms(
2677 "ProviderManager.ProviderManagerService."
2678 "DISABLE_PROVIDER_FAILED",
2679 "Failed to disable the provider."));
2680 schuur 1.18 }
2681 }
|
2682 dj.gorey 1.25 // disable succeed
2683 // update module status from Stopping to Stopped if
2684 // disableProviderOnly is not true
|
2685 schuur 1.18 if (!disableProviderOnly)
|
2686 chip 1.1 {
|
2687 schuur 1.18 // update module status from Stopping to Stopped
2688 for(Uint32 j=0, m = operationalStatus.size(); j < m; j++)
|
2689 chip 1.1 {
|
2690 schuur 1.18 if (operationalStatus[j] == _MODULE_STOPPING)
2691 {
2692 operationalStatus.remove(j);
2693 operationalStatus.append(_MODULE_STOPPED);
2694 }
|
2695 chip 1.1 }
|
2696 chip 1.2
|
2697 schuur 1.18 if(_providerRegistrationManager->setProviderModuleStatus
2698 (moduleName, operationalStatus) == false)
2699 {
2700 //l10n
|
2701 dj.gorey 1.25 //throw PEGASUS_CIM_EXCEPTION(CIM_ERR_FAILED,
|
2702 schuur 1.18 //"set module status failed.");
2703 throw PEGASUS_CIM_EXCEPTION_L(
2704 CIM_ERR_FAILED,
2705 MessageLoaderParms(
2706 "ProviderManager.ProviderManagerService."
2707 "SET_MODULE_STATUS_FAILED",
2708 "set module status failed."));
2709 }
2710 }
2711 }
2712 catch(CIMException & e)
2713 {
|
2714 dj.gorey 1.25 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
|
2715 schuur 1.18 "Exception: " + e.getMessage());
2716 cimException = e;
2717 }
2718 catch(Exception & e)
2719 {
|
2720 dj.gorey 1.25 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
|
2721 schuur 1.18 "Exception: " + e.getMessage());
2722 cimException = CIMException(CIM_ERR_FAILED, e.getMessage());
2723 }
2724 catch(...)
2725 {
|
2726 dj.gorey 1.25 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
|
2727 schuur 1.18 "Exception: Unknown");
2728 //l10n
2729 //response->cimException = CIMException(CIM_ERR_FAILED, "Unknown Error");
2730 cimException = PEGASUS_CIM_EXCEPTION_L(
2731 CIM_ERR_FAILED,
2732 MessageLoaderParms(
2733 "ProviderManager.ProviderManagerService.UNKNOWN_ERROR",
2734 "Unknown Error"));
|
2735 chip 1.1 }
2736
2737 CIMDisableModuleResponseMessage * response =
2738 new CIMDisableModuleResponseMessage(
2739 request->messageId,
2740 CIMException(),
2741 request->queueIds.copyAndPop(),
2742 operationalStatus);
2743
2744 // preserve message key
2745 response->setKey(request->getKey());
2746
2747 // Set HTTP method in response from request
2748 response->setHttpMethod (request->getHttpMethod ());
2749
2750 PEG_METHOD_EXIT();
2751
2752 return(response);
2753 }
2754
|
2755 dj.gorey 1.25 Message * DefaultProviderManager::handleEnableModuleRequest(const Message * message)
|
2756 chip 1.1 {
2757 // HACK
|
2758 chip 1.4 ProviderRegistrationManager * _providerRegistrationManager = GetProviderRegistrationManager();
|
2759 chip 1.1
2760 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleEnableModuleRequest");
2761
2762 CIMEnableModuleRequestMessage * request =
2763 dynamic_cast<CIMEnableModuleRequestMessage *>(const_cast<Message *>(message));
2764
2765 PEGASUS_ASSERT(request != 0);
2766
2767 //
2768 // get module status
2769 //
2770 CIMInstance mInstance = request->providerModule;
2771 Array<Uint16> operationalStatus;
2772 Uint32 pos = mInstance.findProperty(CIMName ("OperationalStatus"));
2773
2774 if(pos != PEG_NOT_FOUND)
2775 {
2776 //
2777 // ATTN-CAKG-P2-20020821: Check for null status?
2778 //
2779 mInstance.getProperty(pos).getValue().get(operationalStatus);
2780 chip 1.1 }
2781
2782 // update module status from Stopped to OK
2783 for(Uint32 i=0, n = operationalStatus.size(); i < n; i++)
2784 {
2785 if(operationalStatus[i] == _MODULE_STOPPED)
2786 {
2787 operationalStatus.remove(i);
2788 }
2789 }
2790
2791 operationalStatus.append(_MODULE_OK);
2792
2793 //
2794 // get module name
2795 //
2796 String moduleName;
2797
2798 Uint32 pos2 = mInstance.findProperty(CIMName ("Name"));
2799
2800 if(pos2 != PEG_NOT_FOUND)
2801 chip 1.1 {
2802 mInstance.getProperty(pos2).getValue().get(moduleName);
2803 }
2804
2805 if(_providerRegistrationManager->setProviderModuleStatus
2806 (moduleName, operationalStatus) == false)
2807 {
2808 //l10n
2809 //throw PEGASUS_CIM_EXCEPTION(CIM_ERR_FAILED, "set module status failed.");
2810 throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, MessageLoaderParms(
2811 "ProviderManager.DefaultProviderManager.SET_MODULE_STATUS_FAILED",
2812 "set module status failed."));
2813 }
2814
2815 CIMEnableModuleResponseMessage * response =
2816 new CIMEnableModuleResponseMessage(
2817 request->messageId,
2818 CIMException(),
2819 request->queueIds.copyAndPop(),
2820 operationalStatus);
2821
2822 chip 1.1 PEGASUS_ASSERT(response != 0);
2823
2824 // preserve message key
2825 response->setKey(request->getKey());
2826
2827 // Set HTTP method in response from request
2828 response->setHttpMethod (request->getHttpMethod ());
2829
2830 PEG_METHOD_EXIT();
2831
2832 return(response);
2833 }
2834
|
2835 dj.gorey 1.25 Message * DefaultProviderManager::handleStopAllProvidersRequest(const Message * message)
|
2836 chip 1.1 {
2837 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleStopAllProvidersRequest");
2838
2839 CIMStopAllProvidersRequestMessage * request =
2840 dynamic_cast<CIMStopAllProvidersRequestMessage *>(const_cast<Message *>(message));
2841
2842 PEGASUS_ASSERT(request != 0);
2843
2844 CIMStopAllProvidersResponseMessage * response =
2845 new CIMStopAllProvidersResponseMessage(
2846 request->messageId,
2847 CIMException(),
2848 request->queueIds.copyAndPop());
2849
2850 PEGASUS_ASSERT(response != 0);
2851
2852 // preserve message key
2853 response->setKey(request->getKey());
2854
2855 // Set HTTP method in response from request
2856 response->setHttpMethod (request->getHttpMethod ());
2857 chip 1.1
2858 // tell the provider manager to shutdown all the providers
|
2859 schuur 1.10 providerManager.shutdownAllProviders();
|
2860 chip 1.1
2861 PEG_METHOD_EXIT();
2862
2863 return(response);
2864 }
2865
2866 void DefaultProviderManager::_insertEntry (
2867 const Provider & provider,
2868 const EnableIndicationsResponseHandler *handler)
2869 {
2870 PEG_METHOD_ENTER (TRC_INDICATION_SERVICE,
2871 "DefaultProviderManager::_insertEntry");
2872
2873 String tableKey = _generateKey
2874 (provider);
2875
2876 _responseTable.insert (tableKey, const_cast<EnableIndicationsResponseHandler *>(handler));
2877
2878 PEG_METHOD_EXIT();
2879 }
2880
2881 chip 1.1 EnableIndicationsResponseHandler * DefaultProviderManager::_removeEntry(
2882 const String & key)
2883 {
2884 PEG_METHOD_ENTER (TRC_INDICATION_SERVICE,
2885 "DefaultProviderManager::_removeEntry");
2886 EnableIndicationsResponseHandler *ret = 0;
2887
2888 _responseTable.lookup(key, ret);
|
2889 dj.gorey 1.25 _responseTable.remove(key); // why is this needed ? - we get killed when removed...
|
2890 chip 1.1
2891 PEG_METHOD_EXIT();
2892
2893 return(ret);
2894 }
2895
2896 String DefaultProviderManager::_generateKey (
2897 const Provider & provider)
2898 {
2899 String tableKey;
2900
2901 PEG_METHOD_ENTER (TRC_INDICATION_SERVICE,
2902 "DefaultProviderManager::_generateKey");
2903
2904 //
2905 // Append provider key values to key
2906 //
2907 String providerName = provider.getName();
2908 String providerFileName = provider.getModule()->getFileName();
2909 tableKey.append (providerName);
2910 tableKey.append (providerFileName);
2911 chip 1.1
2912 PEG_METHOD_EXIT();
2913
2914 return(tableKey);
|
2915 schuur 1.18 }
2916
2917 String DefaultProviderManager::_generateKey (
2918 const String & providerName,
2919 const String & providerFileName)
2920 {
2921 String tableKey;
2922
2923 PEG_METHOD_ENTER (TRC_INDICATION_SERVICE,
2924 "DefaultProviderManagerService::_generateKey");
2925
2926 //
2927 // Append providerName and providerFileName to key
2928 //
2929 tableKey.append (providerName);
2930 tableKey.append (providerFileName);
2931
2932 PEG_METHOD_EXIT ();
2933 return tableKey;
|
2934 chip 1.5 }
2935
2936 ProviderName DefaultProviderManager::_resolveProviderName(const ProviderName & providerName)
2937 {
|
2938 dj.gorey 1.25 ProviderName temp = findProvider(providerName);
|
2939 schuur 1.14 String physicalName = _resolvePhysicalName(temp.getPhysicalName());
2940 temp.setPhysicalName(physicalName);
|
2941 chip 1.5
|
2942 schuur 1.14 return(temp);
2943 }
2944
2945 ProviderName DefaultProviderManager::_resolveProviderName(String & destinationPath)
2946 {
2947 ProviderName temp = findProvider(destinationPath);
|
2948 kv.le 1.8
|
2949 schuur 1.14 String physicalName = _resolvePhysicalName(temp.getPhysicalName());
|
2950 chip 1.5
2951 temp.setPhysicalName(physicalName);
2952
2953 return(temp);
|
2954 schuur 1.23 }
2955
2956 void DefaultProviderManager::unload_idle_providers()
2957 {
2958 providerManager.unload_idle_providers();
|
2959 chip 1.1 }
2960
|
2961 dj.gorey 1.25 PEGASUS_NAMESPACE_END
|