1 martin 1.149 //%LICENSE////////////////////////////////////////////////////////////////
|
2 martin 1.150 //
|
3 martin 1.149 // Licensed to The Open Group (TOG) under one or more contributor license
4 // agreements. Refer to the OpenPegasusNOTICE.txt file distributed with
5 // this work for additional information regarding copyright ownership.
6 // Each contributor licenses this file to you under the OpenPegasus Open
7 // Source License; you may not use this file except in compliance with the
8 // License.
|
9 martin 1.150 //
|
10 martin 1.149 // Permission is hereby granted, free of charge, to any person obtaining a
11 // copy of this software and associated documentation files (the "Software"),
12 // to deal in the Software without restriction, including without limitation
13 // the rights to use, copy, modify, merge, publish, distribute, sublicense,
14 // and/or sell copies of the Software, and to permit persons to whom the
15 // Software is furnished to do so, subject to the following conditions:
|
16 martin 1.150 //
|
17 martin 1.149 // The above copyright notice and this permission notice shall be included
18 // in all copies or substantial portions of the Software.
|
19 martin 1.150 //
|
20 martin 1.149 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
21 martin 1.150 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
22 martin 1.149 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
23 // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
24 // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
25 // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
26 // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
27 martin 1.150 //
|
28 martin 1.149 //////////////////////////////////////////////////////////////////////////
|
29 marek 1.63 //
30 //%/////////////////////////////////////////////////////////////////////////////
31
32 #include "CMPI_Version.h"
33
34 #include "CMPIProviderManager.h"
35
36 #include "CMPI_Object.h"
37 #include "CMPI_Instance.h"
38 #include "CMPI_ObjectPath.h"
39 #include "CMPI_Result.h"
40 #include "CMPI_SelectExp.h"
41
42 #include <Pegasus/Common/CIMMessage.h>
43 #include <Pegasus/Common/OperationContext.h>
|
44 a.dunfey 1.85 #include <Pegasus/Common/OperationContextInternal.h>
|
45 marek 1.63 #include <Pegasus/Common/Tracer.h>
46 #include <Pegasus/Common/StatisticalData.h>
47 #include <Pegasus/Common/Logger.h>
|
48 kumpf 1.79 #include <Pegasus/Common/LanguageParser.h>
|
49 marek 1.63 #include <Pegasus/Common/MessageLoader.h> //l10n
50 #include <Pegasus/Common/Constants.h>
|
51 thilo.boehm 1.89 #include <Pegasus/Common/FileSystem.h>
|
52 marek 1.63
53 #include <Pegasus/Config/ConfigManager.h>
54
55 #include <Pegasus/Provider/CIMOMHandleQueryContext.h>
|
56 a.dunfey 1.85 #include <Pegasus/ProviderManager2/CIMOMHandleContext.h>
|
57 marek 1.63 #include <Pegasus/ProviderManager2/ProviderName.h>
|
58 kumpf 1.93 #include <Pegasus/ProviderManager2/AutoPThreadSecurity.h>
|
59 marek 1.63 #include <Pegasus/ProviderManager2/CMPI/CMPIProviderModule.h>
60 #include <Pegasus/ProviderManager2/CMPI/CMPIProvider.h>
|
61 venkat.puvvada 1.145 #include <Pegasus/Query/QueryExpression/QueryExpression.h>
62 #include <Pegasus/Query/QueryCommon/QueryException.h>
|
63 marek 1.63
|
64 kumpf 1.93 PEGASUS_USING_STD;
|
65 marek 1.63
66 PEGASUS_NAMESPACE_BEGIN
67
|
68 dave.sudlik 1.96
|
69 s.kodali 1.151.2.2 ReadWriteSem CMPIProviderManager::rwSemProvTab;
70 CMPIProviderManager::IndProvTab CMPIProviderManager::indProvTab;
|
71 marek 1.95
|
72 venkat.puvvada 1.108 class CMPIPropertyList
73 {
74 char **props;
75 int pCount;
76 public:
77 CMPIPropertyList(CIMPropertyList &propertyList) : props(0), pCount(0)
78 {
|
79 ms.aruran 1.115 PEG_METHOD_ENTER(
80 TRC_PROVIDERMANAGER,
81 "CMPIPropertyList::CMPIPropertyList()");
|
82 venkat.puvvada 1.108 if (!propertyList.isNull())
83 {
84 Array<CIMName> p=propertyList.getPropertyNameArray();
85 pCount=p.size();
86 props = new char*[1+pCount];
87 for (int i=0; i<pCount; i++)
88 {
89 props[i]=strdup(p[i].getString().getCString());
90 }
91 props[pCount]=NULL;
92 }
93 else props=NULL;
|
94 ms.aruran 1.115 PEG_METHOD_EXIT();
|
95 venkat.puvvada 1.108 }
96 ~CMPIPropertyList()
97 {
|
98 ms.aruran 1.115 PEG_METHOD_ENTER(
99 TRC_PROVIDERMANAGER,
100 "CMPIPropertyList::~CMPIPropertyList()");
|
101 venkat.puvvada 1.108 if (props)
102 {
103 for (int i=0; i<pCount; i++)
104 free(props[i]);
105 delete [] props;
106 }
|
107 ms.aruran 1.115 PEG_METHOD_EXIT();
|
108 venkat.puvvada 1.108 }
109 char **getList()
110 {
111 return props;
112 }
|
113 marek 1.63 };
114
|
115 marek 1.127 CMPIProviderManager::CMPIProviderManager()
|
116 marek 1.63 {
|
117 ms.aruran 1.115 PEG_METHOD_ENTER(
118 TRC_PROVIDERMANAGER,
119 "CMPIProviderManager::CMPIProviderManager()");
120
|
121 venkat.puvvada 1.108 _subscriptionInitComplete = false;
|
122 ms.aruran 1.115 PEG_TRACE_CSTRING (
123 TRC_PROVIDERMANAGER,
124 Tracer::LEVEL2,
125 "-- CMPI Provider Manager activated");
126 PEG_METHOD_EXIT();
|
127 marek 1.63 }
128
|
129 venkat.puvvada 1.108 CMPIProviderManager::~CMPIProviderManager()
|
130 marek 1.63 {
|
131 ms.aruran 1.115 PEG_METHOD_ENTER(
132 TRC_PROVIDERMANAGER,
133 "CMPIProviderManager::~CMPIProviderManager()");
|
134 venkat.puvvada 1.108 /* Clean up the hash-tables */
|
135 s.kodali 1.151.2.2 IndProvRecord *indProvRec;
136
137 WriteLock writeLock(rwSemProvTab);
138
139 for (IndProvTab::Iterator i = indProvTab.start(); i; i++)
|
140 marek 1.95 {
|
141 s.kodali 1.151.2.2 indProvTab.lookup(i.key(), indProvRec);
142 delete indProvRec;
|
143 marek 1.95 }
144
|
145 ms.aruran 1.115 PEG_METHOD_EXIT();
|
146 marek 1.63 }
147
148 Message * CMPIProviderManager::processMessage(Message * request)
149 {
|
150 ms.aruran 1.115 PEG_METHOD_ENTER(
151 TRC_PROVIDERMANAGER,
|
152 marek 1.63 "CMPIProviderManager::processMessage()");
153
154 Message * response = 0;
155
156 // pass the request message to a handler method based on message type
|
157 venkat.puvvada 1.108 switch (request->getType())
|
158 marek 1.63 {
|
159 venkat.puvvada 1.108 case CIM_GET_INSTANCE_REQUEST_MESSAGE:
160 response = handleGetInstanceRequest(request);
|
161 marek 1.63
|
162 venkat.puvvada 1.108 break;
163 case CIM_ENUMERATE_INSTANCES_REQUEST_MESSAGE:
164 response = handleEnumerateInstancesRequest(request);
165
166 break;
167 case CIM_ENUMERATE_INSTANCE_NAMES_REQUEST_MESSAGE:
168 response = handleEnumerateInstanceNamesRequest(request);
169
170 break;
171 case CIM_CREATE_INSTANCE_REQUEST_MESSAGE:
172 response = handleCreateInstanceRequest(request);
173
174 break;
175 case CIM_MODIFY_INSTANCE_REQUEST_MESSAGE:
176 response = handleModifyInstanceRequest(request);
177
178 break;
179 case CIM_DELETE_INSTANCE_REQUEST_MESSAGE:
180 response = handleDeleteInstanceRequest(request);
181
182 break;
183 venkat.puvvada 1.108 case CIM_EXEC_QUERY_REQUEST_MESSAGE:
184 response = handleExecQueryRequest(request);
185
186 break;
187 case CIM_ASSOCIATORS_REQUEST_MESSAGE:
188 response = handleAssociatorsRequest(request);
189
190 break;
191 case CIM_ASSOCIATOR_NAMES_REQUEST_MESSAGE:
192 response = handleAssociatorNamesRequest(request);
193
194 break;
195 case CIM_REFERENCES_REQUEST_MESSAGE:
196 response = handleReferencesRequest(request);
197
198 break;
199 case CIM_REFERENCE_NAMES_REQUEST_MESSAGE:
200 response = handleReferenceNamesRequest(request);
201
202 break;
203 case CIM_INVOKE_METHOD_REQUEST_MESSAGE:
204 venkat.puvvada 1.108 response = handleInvokeMethodRequest(request);
205
206 break;
207 case CIM_CREATE_SUBSCRIPTION_REQUEST_MESSAGE:
208 response = handleCreateSubscriptionRequest(request);
|
209 marek 1.63
|
210 venkat.puvvada 1.108 break;
|
211 marek 1.63 /* case CIM_MODIFY_SUBSCRIPTION_REQUEST_MESSAGE:
212 response = handleModifySubscriptionRequest(request);
213
214 break;
|
215 venkat.puvvada 1.108 */
216 case CIM_DELETE_SUBSCRIPTION_REQUEST_MESSAGE:
217 response = handleDeleteSubscriptionRequest(request);
|
218 marek 1.63
|
219 venkat.puvvada 1.108 break;
|
220 marek 1.63 /* case CIM_EXPORT_INDICATION_REQUEST_MESSAGE:
221 response = handleExportIndicationRequest(request);
222 break;
223 */
|
224 venkat.puvvada 1.108 case CIM_DISABLE_MODULE_REQUEST_MESSAGE:
225 response = handleDisableModuleRequest(request);
|
226 marek 1.63
|
227 venkat.puvvada 1.108 break;
228 case CIM_ENABLE_MODULE_REQUEST_MESSAGE:
229 response = handleEnableModuleRequest(request);
230
231 break;
232 case CIM_STOP_ALL_PROVIDERS_REQUEST_MESSAGE:
233 response = handleStopAllProvidersRequest(request);
234
235 break;
236 case CIM_SUBSCRIPTION_INIT_COMPLETE_REQUEST_MESSAGE:
237 response = handleSubscriptionInitCompleteRequest (request);
238
239 break;
240 case CIM_GET_PROPERTY_REQUEST_MESSAGE:
241 response = handleGetPropertyRequest(request);
242
243 break;
244 case CIM_SET_PROPERTY_REQUEST_MESSAGE:
245 response = handleSetPropertyRequest(request);
246
247 break;
248 venkat.puvvada 1.108 default:
249 response = handleUnsupportedRequest(request);
|
250 marek 1.63
|
251 venkat.puvvada 1.108 break;
|
252 marek 1.63 }
253
254 PEG_METHOD_EXIT();
255
256 return(response);
257 }
258
259 Boolean CMPIProviderManager::hasActiveProviders()
260 {
|
261 venkat.puvvada 1.108 return providerManager.hasActiveProviders();
|
262 marek 1.63 }
263
264 void CMPIProviderManager::unloadIdleProviders()
265 {
|
266 venkat.puvvada 1.108 providerManager.unloadIdleProviders();
|
267 marek 1.63 }
268
269
270 #define CHARS(cstring) (char*)(strlen(cstring)?(const char*)cstring:NULL)
271
272
|
273 kumpf 1.92 #define HandlerIntroBase(type,type1,message,request,response,handler) \
|
274 marek 1.63 CIM##type##RequestMessage * request = \
|
275 venkat.puvvada 1.108 dynamic_cast<CIM##type##RequestMessage *>(const_cast<Message *> \
276 (message)); \
|
277 marek 1.63 PEGASUS_ASSERT(request != 0); \
278 CIM##type##ResponseMessage * response = \
|
279 kumpf 1.92 dynamic_cast<CIM##type##ResponseMessage*>(request->buildResponse()); \
|
280 marek 1.63 PEGASUS_ASSERT(response != 0); \
|
281 kumpf 1.84 type1##ResponseHandler handler(request, response, _responseChunkCallback);
|
282 marek 1.63
283 #define HandlerIntroInd(type,message,request,response,handler) \
|
284 kumpf 1.92 HandlerIntroBase(type,Operation,message,request,response,handler)
|
285 marek 1.63
286 #define HandlerIntroInit(type,message,request,response,handler) \
|
287 kumpf 1.92 HandlerIntroBase(type,Operation,message,request,response,handler)
|
288 marek 1.63
|
289 kumpf 1.92 #define HandlerIntro(type,message,request,response,handler) \
290 HandlerIntroBase(type,type,message,request,response,handler)
|
291 marek 1.63
292 #define HandlerCatch(handler) \
|
293 konrad.r 1.64 catch(const CIMException & e) \
|
294 thilo.boehm 1.138 { PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1, \
295 "CIMException: %s",(const char*)e.getMessage().getCString())); \
|
296 dave.sudlik 1.103 handler.setCIMException(e); \
|
297 marek 1.63 } \
|
298 konrad.r 1.64 catch(const Exception & e) \
|
299 thilo.boehm 1.138 { PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1, \
300 "Exception: %s",(const char*)e.getMessage().getCString())); \
|
301 venkat.puvvada 1.108 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), \
302 e.getMessage()); \
|
303 marek 1.63 } \
304 catch(...) \
|
305 marek 1.131 { PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1, \
|
306 marek 1.63 "Exception: Unknown"); \
307 handler.setStatus(CIM_ERR_FAILED, "Unknown error."); \
308 }
309
|
310 marek 1.124 void CMPIProviderManager::_setupCMPIContexts(
311 CMPI_ContextOnStack * eCtx,
312 OperationContext * context,
313 ProviderIdContainer * pidc,
314 const String &nameSpace,
315 Boolean remote,
316 Boolean includeQualifiers,
317 Boolean includeClassOrigin,
318 Boolean setFlags)
319 {
320 if (setFlags)
321 {
322 // set CMPI invocation flags
|
323 kumpf 1.125 CMPIValue value;
324 value.uint32 = 0;
325 if (includeQualifiers) value.uint32 |= CMPI_FLAG_IncludeQualifiers;
326 if (includeClassOrigin) value.uint32 |= CMPI_FLAG_IncludeClassOrigin;
|
327 marek 1.124 eCtx->ft->addEntry(
328 eCtx,
329 CMPIInvocationFlags,
|
330 kumpf 1.125 &value,
|
331 marek 1.124 CMPI_uint32);
332 }
333
334 // add identity context
335 const IdentityContainer container =
336 context->get(IdentityContainer::NAME);
337 eCtx->ft->addEntry(
338 eCtx,
339 CMPIPrincipal,
340 (CMPIValue*)(const char*)container.getUserName().getCString(),
341 CMPI_chars);
342
343 // add AcceptLanguages to CMPI context
|
344 kumpf 1.151 const AcceptLanguageListContainer accept_language=
345 context->get(AcceptLanguageListContainer::NAME);
|
346 marek 1.124 const AcceptLanguageList acceptLangs = accept_language.getLanguages();
347
348 eCtx->ft->addEntry(
349 eCtx,
350 CMPIAcceptLanguage,
351 (CMPIValue*)(const char*)
352 LanguageParser::buildAcceptLanguageHeader(acceptLangs).getCString(),
353 CMPI_chars);
354
355 // add initial namespace to context
356 eCtx->ft->addEntry(
357 eCtx,
358 CMPIInitNameSpace,
359 (CMPIValue*)(const char*)nameSpace.getCString(),
360 CMPI_chars);
361
362 // add remote info to context
363 if (remote)
364 {
365 CString info=pidc->getRemoteInfo().getCString();
366 eCtx->ft->addEntry(
367 marek 1.124 eCtx,
368 "CMPIRRemoteInfo",(CMPIValue*)(const char*)info,
369 CMPI_chars);
370 }
371 }
372
|
373 venkat.puvvada 1.108 Message * CMPIProviderManager::handleGetInstanceRequest(
374 const Message * message)
|
375 marek 1.63 {
|
376 ms.aruran 1.115 PEG_METHOD_ENTER(
377 TRC_PROVIDERMANAGER,
378 "CMPIProviderManager::handleGetInstanceRequest()");
|
379 marek 1.63
|
380 kumpf 1.92 HandlerIntro(GetInstance,message,request,response,handler);
|
381 marek 1.63
|
382 venkat.puvvada 1.108 try
383 {
|
384 thilo.boehm 1.138 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
|
385 marek 1.129 "CMPIProviderManager::handleGetInstanceRequest - Host name:"
386 " %s Name space: %s Class name: %s",
387 (const char*) System::getHostName().getCString(),
388 (const char*) request->nameSpace.getString().getCString(),
389 (const char*)
390 request->instanceName.getClassName().getString().getCString()));
|
391 kumpf 1.151
|
392 marek 1.63 // make target object path
393 CIMObjectPath objectPath(
394 System::getHostName(),
395 request->nameSpace,
396 request->instanceName.getClassName(),
397 request->instanceName.getKeyBindings());
398
399 Boolean remote=false;
|
400 venkat.puvvada 1.132 OpProviderHolder ph;
|
401 marek 1.63
402 // resolve provider name
|
403 kumpf 1.151 ProviderIdContainer pidc =
|
404 venkat.puvvada 1.108 request->operationContext.get(ProviderIdContainer::NAME);
405
|
406 marek 1.63 ProviderName name = _resolveProviderName(pidc);
407
|
408 venkat.puvvada 1.108 if ((remote=pidc.isRemoteNameSpace()))
409 {
410 ph = providerManager.getRemoteProvider(
411 name.getLocation(), name.getLogicalName());
|
412 a.dunfey 1.85 }
|
413 venkat.puvvada 1.108 else
414 {
|
415 a.dunfey 1.85 // get cached or load new provider module
|
416 venkat.puvvada 1.108 ph = providerManager.getProvider(
417 name.getPhysicalName(), name.getLogicalName());
|
418 marek 1.63 }
419
420 // convert arguments
421 OperationContext context;
422
423 context.insert(request->operationContext.get(IdentityContainer::NAME));
|
424 venkat.puvvada 1.108 context.insert(
425 request->operationContext.get(AcceptLanguageListContainer::NAME));
426 context.insert(
427 request->operationContext.get(ContentLanguageListContainer::NAME));
|
428 marek 1.63 // forward request
429 CMPIProvider & pr=ph.GetProvider();
430
431 CMPIStatus rc={CMPI_RC_OK,NULL};
432 CMPI_ContextOnStack eCtx(context);
433 CMPI_ObjectPathOnStack eRef(objectPath);
|
434 venkat.puvvada 1.132 CMPI_ResultOnStack eRes(handler,pr.getBroker());
435 CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
|
436 marek 1.63
437 CMPIPropertyList props(request->propertyList);
|
438 kumpf 1.151
|
439 marek 1.124 _setupCMPIContexts(
|
440 venkat.puvvada 1.108 &eCtx,
|
441 marek 1.124 &context,
442 &pidc,
443 request->nameSpace.getString(),
444 remote,
445 request->includeQualifiers,
446 request->includeClassOrigin,
447 true);
|
448 marek 1.63
449 CMPIProvider::pm_service_op_lock op_lock(&pr);
450
|
451 thilo.boehm 1.143 PEG_TRACE((
452 TRC_PROVIDERMANAGER,
453 Tracer::LEVEL2,
454 "Calling provider.getInstance: %s",
455 (const char*)pr.getName().getCString()));
456
|
457 kumpf 1.92 {
|
458 thilo.boehm 1.144 AutoPThreadSecurity threadLevelSecurity(request->operationContext);
459
|
460 kumpf 1.92 StatProviderTimeMeasurement providerTime(response);
|
461 marek 1.63
|
462 venkat.puvvada 1.132 rc = pr.getInstMI()->ft->getInstance(
463 pr.getInstMI(),
|
464 venkat.puvvada 1.108 &eCtx,
465 &eRes,
466 &eRef,
|
467 kumpf 1.92 (const char **)props.getList());
468 }
|
469 marek 1.63
|
470 thilo.boehm 1.143 PEG_TRACE((
471 TRC_PROVIDERMANAGER,
472 Tracer::LEVEL2,
473 "Returning from provider.getInstance: %s",
474 (const char*)pr.getName().getCString()));
475
|
476 dave.sudlik 1.99 // Need to save ContentLanguage value into operation context of response
|
477 kumpf 1.151 // Do this before checking rc from provider to throw exception in case
|
478 dave.sudlik 1.99 // rc.msg is also localized.
479 CMPIStatus tmprc={CMPI_RC_OK,NULL};
|
480 kumpf 1.151 CMPIData cldata =
|
481 venkat.puvvada 1.108 eCtx.ft->getEntry (&eCtx, CMPIContentLanguage, &tmprc);
|
482 dave.sudlik 1.99 if (tmprc.rc == CMPI_RC_OK)
483 {
484 response->operationContext.set(
485 ContentLanguageListContainer(
|
486 venkat.puvvada 1.108 ContentLanguageList(
487 LanguageParser::parseContentLanguageHeader(
|
488 s.kodali 1.137 CMGetCharsPtr(cldata.value.string, NULL)))));
|
489 dave.sudlik 1.103 handler.setContext(response->operationContext);
|
490 dave.sudlik 1.99 }
491
|
492 marek 1.63 if (rc.rc!=CMPI_RC_OK)
|
493 dave.sudlik 1.102 {
|
494 venkat.puvvada 1.108 CIMException cimException(
495 (CIMStatusCode)rc.rc,
|
496 s.kodali 1.137 rc.msg ? CMGetCharsPtr(rc.msg, NULL) : String::EMPTY);
|
497 venkat.puvvada 1.108
498 if (eRes.resError)
499 {
|
500 kumpf 1.151 for (CMPI_Error* currErr=eRes.resError;
501 currErr!=NULL;
|
502 dave.sudlik 1.102 currErr=currErr->nextError)
|
503 venkat.puvvada 1.108 {
504 cimException.addError(
505 ((CIMError*)currErr->hdl)->getInstance());
506 }
507 }
508 throw cimException;
|
509 dave.sudlik 1.102 }
|
510 marek 1.63 }
511 HandlerCatch(handler);
512
513 PEG_METHOD_EXIT();
514
515 return(response);
516 }
517
|
518 venkat.puvvada 1.108 Message * CMPIProviderManager::handleEnumerateInstancesRequest(
519 const Message * message)
|
520 marek 1.63 {
|
521 ms.aruran 1.115 PEG_METHOD_ENTER(
522 TRC_PROVIDERMANAGER,
523 "CMPIProviderManager::handleEnumerateInstanceRequest()");
|
524 marek 1.63
|
525 kumpf 1.92 HandlerIntro(EnumerateInstances,message,request,response,handler);
|
526 venkat.puvvada 1.108 try
527 {
|
528 thilo.boehm 1.138 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
|
529 venkat.puvvada 1.108 "CMPIProviderManager::handleEnumerateInstancesRequest - Host name:"
|
530 marek 1.129 " %s Name space: %s Class name: %s",
531 (const char*) System::getHostName().getCString(),
532 (const char*) request->nameSpace.getString().getCString(),
533 (const char*) request->className.getString().getCString()));
|
534 marek 1.63
535 // make target object path
536 CIMObjectPath objectPath(
537 System::getHostName(),
538 request->nameSpace,
539 request->className);
540
541 Boolean remote=false;
|
542 venkat.puvvada 1.132 OpProviderHolder ph;
|
543 marek 1.63
544 // resolve provider name
|
545 kumpf 1.151 ProviderIdContainer pidc =
|
546 venkat.puvvada 1.108 request->operationContext.get(ProviderIdContainer::NAME);
|
547 marek 1.63 ProviderName name = _resolveProviderName(pidc);
548
|
549 venkat.puvvada 1.108 if ((remote=pidc.isRemoteNameSpace()))
550 {
551 ph = providerManager.getRemoteProvider(
552 name.getLocation(), name.getLogicalName());
553 }
554 else
555 {
556 // get cached or load new provider module
557 ph = providerManager.getProvider(
558 name.getPhysicalName(), name.getLogicalName());
|
559 marek 1.63 }
560
561 // convert arguments
562 OperationContext context;
563
564 context.insert(request->operationContext.get(IdentityContainer::NAME));
|
565 venkat.puvvada 1.108 context.insert(
566 request->operationContext.get(AcceptLanguageListContainer::NAME));
567 context.insert(
568 request->operationContext.get(ContentLanguageListContainer::NAME));
|
569 marek 1.63
570 CIMPropertyList propertyList(request->propertyList);
571
572 // forward request
573 CMPIProvider & pr=ph.GetProvider();
574
575 CMPIStatus rc={CMPI_RC_OK,NULL};
576 CMPI_ContextOnStack eCtx(context);
577 CMPI_ObjectPathOnStack eRef(objectPath);
|
578 venkat.puvvada 1.132 CMPI_ResultOnStack eRes(handler,pr.getBroker());
579 CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
|
580 marek 1.63
581 CMPIPropertyList props(propertyList);
582
|
583 marek 1.124 _setupCMPIContexts(
|
584 venkat.puvvada 1.108 &eCtx,
|
585 marek 1.124 &context,
586 &pidc,
587 request->nameSpace.getString(),
588 remote,
589 request->includeQualifiers,
590 request->includeClassOrigin,
591 true);
|
592 marek 1.63
593 CMPIProvider::pm_service_op_lock op_lock(&pr);
594
|
595 thilo.boehm 1.143 PEG_TRACE((
596 TRC_PROVIDERMANAGER,
597 Tracer::LEVEL2,
598 "Calling provider.enumerateInstances: %s",
599 (const char*)pr.getName().getCString()));
600
|
601 kumpf 1.92 {
|
602 thilo.boehm 1.144 AutoPThreadSecurity threadLevelSecurity(request->operationContext);
603
|
604 kumpf 1.92 StatProviderTimeMeasurement providerTime(response);
|
605 marek 1.63
|
606 venkat.puvvada 1.132 rc = pr.getInstMI()->ft->enumerateInstances(
607 pr.getInstMI(),
|
608 venkat.puvvada 1.108 &eCtx,
609 &eRes,
610 &eRef,
|
611 kumpf 1.92 (const char **)props.getList());
612 }
|
613 marek 1.63
|
614 thilo.boehm 1.143 PEG_TRACE((
615 TRC_PROVIDERMANAGER,
616 Tracer::LEVEL2,
617 "Returning from provider.enumerateInstances: %s",
618 (const char*)pr.getName().getCString()));
619
|
620 dave.sudlik 1.99 // Need to save ContentLanguage value into operation context of response
|
621 kumpf 1.151 // Do this before checking rc from provider to throw exception in case
|
622 dave.sudlik 1.99 // rc.msg is also localized.
623 CMPIStatus tmprc={CMPI_RC_OK,NULL};
|
624 kumpf 1.151 CMPIData cldata =
|
625 venkat.puvvada 1.108 eCtx.ft->getEntry(&eCtx, CMPIContentLanguage, &tmprc);
|
626 dave.sudlik 1.99 if (tmprc.rc == CMPI_RC_OK)
627 {
628 response->operationContext.set(
629 ContentLanguageListContainer(
|
630 venkat.puvvada 1.108 ContentLanguageList(
631 LanguageParser::parseContentLanguageHeader(
|
632 s.kodali 1.137 CMGetCharsPtr(cldata.value.string, NULL)))));
|
633 dave.sudlik 1.103 handler.setContext(response->operationContext);
|
634 dave.sudlik 1.99 }
635
|
636 marek 1.63 if (rc.rc!=CMPI_RC_OK)
|
637 dave.sudlik 1.102 {
|
638 venkat.puvvada 1.108 CIMException cimException(
639 (CIMStatusCode)rc.rc,
|
640 s.kodali 1.137 rc.msg ? CMGetCharsPtr(rc.msg, NULL) : String::EMPTY);
|
641 venkat.puvvada 1.108
642 if (eRes.resError)
643 {
|
644 kumpf 1.151 for (CMPI_Error* currErr=eRes.resError;
645 currErr!=NULL;
|
646 dave.sudlik 1.102 currErr=currErr->nextError)
|
647 venkat.puvvada 1.108 {
648 cimException.addError(
649 ((CIMError*)currErr->hdl)->getInstance());
650 }
651 }
652 throw cimException;
|
653 dave.sudlik 1.102 }
654
|
655 marek 1.63 }
656 HandlerCatch(handler);
657
658 PEG_METHOD_EXIT();
659
660 return(response);
661 }
662
|
663 venkat.puvvada 1.108 Message * CMPIProviderManager::handleEnumerateInstanceNamesRequest(
664 const Message * message)
|
665 marek 1.63 {
|
666 ms.aruran 1.115 PEG_METHOD_ENTER(
667 TRC_PROVIDERMANAGER,
668 "CMPIProviderManager::handleEnumerateInstanceNamesRequest()");
|
669 marek 1.63
|
670 kumpf 1.92 HandlerIntro(EnumerateInstanceNames,message,request,response,handler);
|
671 venkat.puvvada 1.108 try
672 {
|
673 thilo.boehm 1.138 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
|
674 marek 1.129 "CMPIProviderManager::handleEnumerateInstanceNamesRequest"
675 " - Host name: %s Name space: %s Class name: %s",
676 (const char*) System::getHostName().getCString(),
677 (const char*) request->nameSpace.getString().getCString(),
678 (const char*) request->className.getString().getCString()));
|
679 marek 1.63
|
680 venkat.puvvada 1.108 // make target object path
|
681 marek 1.63 CIMObjectPath objectPath(
682 System::getHostName(),
683 request->nameSpace,
684 request->className);
685
686 Boolean remote=false;
|
687 venkat.puvvada 1.132 OpProviderHolder ph;
|
688 marek 1.63
689 // resolve provider name
|
690 kumpf 1.151 ProviderIdContainer pidc =
|
691 venkat.puvvada 1.108 request->operationContext.get(ProviderIdContainer::NAME);
|
692 marek 1.63 ProviderName name = _resolveProviderName(pidc);
693
|
694 venkat.puvvada 1.108 if ((remote=pidc.isRemoteNameSpace()))
695 {
696 ph = providerManager.getRemoteProvider(
697 name.getLocation(), name.getLogicalName());
|
698 marek 1.63 }
|
699 venkat.puvvada 1.108 else
700 {
701 // get cached or load new provider module
702 ph = providerManager.getProvider(
703 name.getPhysicalName(), name.getLogicalName());
|
704 marek 1.63 }
705
706 // convert arguments
707 OperationContext context;
708
709 context.insert(request->operationContext.get(IdentityContainer::NAME));
|
710 venkat.puvvada 1.108 context.insert(
711 request->operationContext.get(AcceptLanguageListContainer::NAME));
712 context.insert(
713 request->operationContext.get(ContentLanguageListContainer::NAME));
|
714 marek 1.63 CMPIProvider & pr=ph.GetProvider();
715
716 CMPIStatus rc={CMPI_RC_OK,NULL};
717 CMPI_ContextOnStack eCtx(context);
718 CMPI_ObjectPathOnStack eRef(objectPath);
|
719 venkat.puvvada 1.132 CMPI_ResultOnStack eRes(handler,pr.getBroker());
720 CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
|
721 marek 1.63
|
722 marek 1.124 _setupCMPIContexts(
|
723 venkat.puvvada 1.108 &eCtx,
|
724 marek 1.124 &context,
725 &pidc,
726 request->nameSpace.getString(),
727 remote,
728 false,
729 false,
730 true);
|
731 marek 1.63
732 CMPIProvider::pm_service_op_lock op_lock(&pr);
733
|
734 thilo.boehm 1.143 PEG_TRACE((
735 TRC_PROVIDERMANAGER,
736 Tracer::LEVEL2,
737 "Calling provider.enumerateInstanceNames: %s",
738 (const char*)pr.getName().getCString()));
739
|
740 kumpf 1.92 {
|
741 thilo.boehm 1.144 AutoPThreadSecurity threadLevelSecurity(request->operationContext);
742
|
743 kumpf 1.92 StatProviderTimeMeasurement providerTime(response);
|
744 marek 1.63
|
745 venkat.puvvada 1.132 rc = pr.getInstMI()->ft->enumerateInstanceNames(
746 pr.getInstMI(),
747 &eCtx,
748 &eRes,
749 &eRef);
|
750 kumpf 1.92 }
|
751 marek 1.63
|
752 thilo.boehm 1.143 PEG_TRACE((
753 TRC_PROVIDERMANAGER,
754 Tracer::LEVEL2,
755 "Returning from provider.enumerateInstanceNames: %s",
756 (const char*)pr.getName().getCString()));
757
|
758 dave.sudlik 1.99 // Need to save ContentLanguage value into operation context of response
|
759 kumpf 1.151 // Do this before checking rc from provider to throw exception in case
|
760 dave.sudlik 1.99 // rc.msg is also localized.
761 CMPIStatus tmprc={CMPI_RC_OK,NULL};
|
762 kumpf 1.151 CMPIData cldata =
|
763 venkat.puvvada 1.108 eCtx.ft->getEntry (&eCtx, CMPIContentLanguage, &tmprc);
|
764 dave.sudlik 1.99 if (tmprc.rc == CMPI_RC_OK)
765 {
766 response->operationContext.set(
767 ContentLanguageListContainer(
|
768 venkat.puvvada 1.108 ContentLanguageList(
769 LanguageParser::parseContentLanguageHeader(
|
770 s.kodali 1.137 CMGetCharsPtr(cldata.value.string, NULL)))));
|
771 dave.sudlik 1.103 handler.setContext(response->operationContext);
|
772 dave.sudlik 1.99 }
773
|
774 marek 1.63 if (rc.rc!=CMPI_RC_OK)
|
775 dave.sudlik 1.102 {
|
776 venkat.puvvada 1.108 CIMException cimException(
777 (CIMStatusCode)rc.rc,
|
778 s.kodali 1.137 rc.msg ? CMGetCharsPtr(rc.msg, NULL) : String::EMPTY);
|
779 venkat.puvvada 1.108
780 if (eRes.resError)
781 {
|
782 kumpf 1.151 for (CMPI_Error* currErr=eRes.resError;
783 currErr!=NULL;
|
784 dave.sudlik 1.102 currErr=currErr->nextError)
|
785 venkat.puvvada 1.108 {
786 cimException.addError(
787 ((CIMError*)currErr->hdl)->getInstance());
788 }
789 }
790 throw cimException;
|
791 dave.sudlik 1.102 }
|
792 marek 1.63 }
793 HandlerCatch(handler);
794
795 PEG_METHOD_EXIT();
796
797 return(response);
798 }
799
|
800 venkat.puvvada 1.108 Message * CMPIProviderManager::handleCreateInstanceRequest(
801 const Message * message)
|
802 marek 1.63 {
|
803 ms.aruran 1.115 PEG_METHOD_ENTER(
804 TRC_PROVIDERMANAGER,
805 "CMPIProviderManager::handleCreateInstanceRequest()");
|
806 marek 1.63
|
807 kumpf 1.92 HandlerIntro(CreateInstance,message,request,response,handler);
|
808 venkat.puvvada 1.108 try
809 {
|
810 thilo.boehm 1.138 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
|
811 marek 1.129 "CMPIProviderManager::handleCreateInstanceRequest"
812 " - Host name: %s Name space: %s Class name: %s",
813 (const char*) System::getHostName().getCString(),
814 (const char*) request->nameSpace.getString().getCString(),
815 (const char*)
816 request->newInstance.getPath().getClassName().getString().getCString()
817 ));
|
818 marek 1.63
819 // make target object path
820 CIMObjectPath objectPath(
821 System::getHostName(),
822 request->nameSpace,
823 request->newInstance.getPath().getClassName(),
824 request->newInstance.getPath().getKeyBindings());
|
825 venkat.puvvada 1.108 request->newInstance.setPath(objectPath);
|
826 marek 1.63
827 Boolean remote=false;
|
828 venkat.puvvada 1.132 OpProviderHolder ph;
|
829 marek 1.63
830 // resolve provider name
|
831 kumpf 1.151 ProviderIdContainer pidc =
|
832 venkat.puvvada 1.108 request->operationContext.get(ProviderIdContainer::NAME);
|
833 marek 1.63 ProviderName name = _resolveProviderName(pidc);
834
|
835 venkat.puvvada 1.108 if ((remote=pidc.isRemoteNameSpace()))
836 {
837 ph = providerManager.getRemoteProvider(
838 name.getLocation(), name.getLogicalName());
839 }
840 else
841 {
842 // get cached or load new provider module
843 ph = providerManager.getProvider(
844 name.getPhysicalName(), name.getLogicalName());
|
845 marek 1.63 }
846
847 // convert arguments
848 OperationContext context;
849
850 context.insert(request->operationContext.get(IdentityContainer::NAME));
|
851 venkat.puvvada 1.108 context.insert(
852 request->operationContext.get(AcceptLanguageListContainer::NAME));
853 context.insert(
854 request->operationContext.get(ContentLanguageListContainer::NAME));
|
855 marek 1.63 // forward request
856 CMPIProvider & pr=ph.GetProvider();
857
858 CMPIStatus rc={CMPI_RC_OK,NULL};
859 CMPI_ContextOnStack eCtx(context);
860 CMPI_ObjectPathOnStack eRef(objectPath);
|
861 venkat.puvvada 1.132 CMPI_ResultOnStack eRes(handler,pr.getBroker());
|
862 marek 1.63 CMPI_InstanceOnStack eInst(request->newInstance);
|
863 venkat.puvvada 1.132 CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
|
864 marek 1.63
|
865 marek 1.124 _setupCMPIContexts(
|
866 venkat.puvvada 1.108 &eCtx,
|
867 marek 1.124 &context,
868 &pidc,
869 request->nameSpace.getString(),
870 remote,
871 false,
872 false,
873 true);
|
874 marek 1.63
875 CMPIProvider::pm_service_op_lock op_lock(&pr);
876
|
877 thilo.boehm 1.143 PEG_TRACE((
878 TRC_PROVIDERMANAGER,
879 Tracer::LEVEL2,
880 "Calling provider.createInstance: %s",
881 (const char*)ph.GetProvider().getName().getCString()));
882
|
883 kumpf 1.92 {
|
884 thilo.boehm 1.144 AutoPThreadSecurity threadLevelSecurity(request->operationContext);
885
|
886 kumpf 1.92 StatProviderTimeMeasurement providerTime(response);
|
887 marek 1.63
|
888 venkat.puvvada 1.132 rc = pr.getInstMI()->ft->createInstance(
889 pr.getInstMI(),
890 &eCtx,
891 &eRes,
892 &eRef,
893 &eInst);
|
894 kumpf 1.92 }
|
895 marek 1.63
|
896 thilo.boehm 1.143 PEG_TRACE((
897 TRC_PROVIDERMANAGER,
898 Tracer::LEVEL2,
899 "Returning from provider.createInstance: %s",
900 (const char*)ph.GetProvider().getName().getCString()));
901
|
902 dave.sudlik 1.99 // Need to save ContentLanguage value into operation context of response
|
903 kumpf 1.151 // Do this before checking rc from provider to throw exception in case
|
904 dave.sudlik 1.99 // rc.msg is also localized.
905 CMPIStatus tmprc={CMPI_RC_OK,NULL};
|
906 kumpf 1.151 CMPIData cldata =
|
907 venkat.puvvada 1.108 eCtx.ft->getEntry (&eCtx, CMPIContentLanguage, &tmprc);
|
908 dave.sudlik 1.99 if (tmprc.rc == CMPI_RC_OK)
909 {
910 response->operationContext.set(
911 ContentLanguageListContainer(
|
912 venkat.puvvada 1.108 ContentLanguageList(
913 LanguageParser::parseContentLanguageHeader(
|
914 s.kodali 1.137 CMGetCharsPtr(cldata.value.string, NULL)))));
|
915 dave.sudlik 1.103 handler.setContext(response->operationContext);
|
916 dave.sudlik 1.99 }
917
|
918 marek 1.63 if (rc.rc!=CMPI_RC_OK)
|
919 dave.sudlik 1.102 {
|
920 venkat.puvvada 1.108 CIMException cimException(
921 (CIMStatusCode)rc.rc,
|
922 s.kodali 1.137 rc.msg ? CMGetCharsPtr(rc.msg, NULL) : String::EMPTY);
|
923 venkat.puvvada 1.108
924 if (eRes.resError)
925 {
|
926 kumpf 1.151 for (CMPI_Error* currErr=eRes.resError;
927 currErr!=NULL;
|
928 dave.sudlik 1.102 currErr=currErr->nextError)
|
929 venkat.puvvada 1.108 {
930 cimException.addError(
931 ((CIMError*)currErr->hdl)->getInstance());
932 }
933 }
934 throw cimException;
|
935 dave.sudlik 1.102 }
|
936 marek 1.63 }
937 HandlerCatch(handler);
938
939 PEG_METHOD_EXIT();
940
941 return(response);
942 }
943
|
944 venkat.puvvada 1.108 Message * CMPIProviderManager::handleModifyInstanceRequest(
945 const Message * message)
|
946 marek 1.63 {
|
947 ms.aruran 1.115 PEG_METHOD_ENTER(
948 TRC_PROVIDERMANAGER,
949 "CMPIProviderManager::handleModifyInstanceRequest()");
|
950 marek 1.63
|
951 kumpf 1.92 HandlerIntro(ModifyInstance,message,request,response,handler);
|
952 venkat.puvvada 1.108 try
953 {
|
954 thilo.boehm 1.138 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
|
955 marek 1.129 "CMPIProviderManager::handleModifyInstanceRequest"
956 " - Host name: %s Name space: %s Class name: %s",
957 (const char*) System::getHostName().getCString(),
958 (const char*) request->nameSpace.getString().getCString(),
959 (const char*) request->modifiedInstance.\
960 getPath().getClassName().getString().getCString()));
|
961 marek 1.63
962 // make target object path
963 CIMObjectPath objectPath(
964 System::getHostName(),
965 request->nameSpace,
966 request->modifiedInstance.getPath ().getClassName(),
967 request->modifiedInstance.getPath ().getKeyBindings());
968
969 Boolean remote=false;
|
970 venkat.puvvada 1.132 OpProviderHolder ph;
|
971 marek 1.63
972 // resolve provider name
|
973 kumpf 1.151 ProviderIdContainer pidc =
|
974 venkat.puvvada 1.108 request->operationContext.get(ProviderIdContainer::NAME);
|
975 marek 1.63 ProviderName name = _resolveProviderName(pidc);
976
|
977 venkat.puvvada 1.108 if ((remote=pidc.isRemoteNameSpace()))
978 {
979 ph = providerManager.getRemoteProvider(
980 name.getLocation(), name.getLogicalName());
|
981 marek 1.63 }
|
982 venkat.puvvada 1.108 else
983 {
984 // get cached or load new provider module
985 ph = providerManager.getProvider(
986 name.getPhysicalName(), name.getLogicalName());
|
987 marek 1.63 }
988
989 // convert arguments
990 OperationContext context;
991
992 context.insert(request->operationContext.get(IdentityContainer::NAME));
|
993 venkat.puvvada 1.108 context.insert(
994 request->operationContext.get(AcceptLanguageListContainer::NAME));
995 context.insert(
996 request->operationContext.get(ContentLanguageListContainer::NAME));
|
997 marek 1.63 // forward request
998 CMPIProvider & pr=ph.GetProvider();
999
1000 CMPIStatus rc={CMPI_RC_OK,NULL};
1001 CMPI_ContextOnStack eCtx(context);
1002 CMPI_ObjectPathOnStack eRef(objectPath);
|
1003 venkat.puvvada 1.132 CMPI_ResultOnStack eRes(handler,pr.getBroker());
|
1004 marek 1.63 CMPI_InstanceOnStack eInst(request->modifiedInstance);
|
1005 venkat.puvvada 1.132 CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
|
1006 marek 1.63
1007 CMPIPropertyList props(request->propertyList);
1008
|
1009 marek 1.124 _setupCMPIContexts(
|
1010 venkat.puvvada 1.108 &eCtx,
|
1011 marek 1.124 &context,
1012 &pidc,
1013 request->nameSpace.getString(),
1014 remote,
1015 request->includeQualifiers,
1016 false,
1017 true);
|
1018 marek 1.63
1019 CMPIProvider::pm_service_op_lock op_lock(&pr);
1020
|
1021 thilo.boehm 1.143 PEG_TRACE((
1022 TRC_PROVIDERMANAGER,
1023 Tracer::LEVEL2,
1024 "Calling provider.modifyInstance: %s",
1025 (const char*)pr.getName().getCString()));
1026
|
1027 kumpf 1.92 {
|
1028 thilo.boehm 1.144 AutoPThreadSecurity threadLevelSecurity(request->operationContext);
1029
|
1030 kumpf 1.92 StatProviderTimeMeasurement providerTime(response);
|
1031 marek 1.63
|
1032 venkat.puvvada 1.132 rc = pr.getInstMI()->ft->modifyInstance(
1033 pr.getInstMI(),
1034 &eCtx,
1035 &eRes,
1036 &eRef,
1037 &eInst,
|
1038 kumpf 1.92 (const char **)props.getList());
1039 }
|
1040 marek 1.63
|
1041 thilo.boehm 1.143 PEG_TRACE((
1042 TRC_PROVIDERMANAGER,
1043 Tracer::LEVEL2,
1044 "Returning from provider.modifyInstance: %s",
1045 (const char*)pr.getName().getCString()));
1046
|
1047 dave.sudlik 1.99 // Need to save ContentLanguage value into operation context of response
|
1048 kumpf 1.151 // Do this before checking rc from provider to throw exception in case
|
1049 dave.sudlik 1.99 // rc.msg is also localized.
1050 CMPIStatus tmprc={CMPI_RC_OK,NULL};
|
1051 kumpf 1.151 CMPIData cldata =
|
1052 venkat.puvvada 1.108 eCtx.ft->getEntry (&eCtx, CMPIContentLanguage, &tmprc);
|
1053 dave.sudlik 1.99 if (tmprc.rc == CMPI_RC_OK)
1054 {
1055 response->operationContext.set(
1056 ContentLanguageListContainer(
|
1057 venkat.puvvada 1.108 ContentLanguageList(
1058 LanguageParser::parseContentLanguageHeader(
|
1059 s.kodali 1.137 CMGetCharsPtr(cldata.value.string, NULL)))));
|
1060 dave.sudlik 1.103 handler.setContext(response->operationContext);
|
1061 dave.sudlik 1.99 }
1062
|
1063 marek 1.63 if (rc.rc!=CMPI_RC_OK)
|
1064 dave.sudlik 1.102 {
|
1065 venkat.puvvada 1.108 CIMException cimException(
1066 (CIMStatusCode)rc.rc,
|
1067 s.kodali 1.137 rc.msg ? CMGetCharsPtr(rc.msg, NULL) : String::EMPTY);
|
1068 venkat.puvvada 1.108
1069 if (eRes.resError)
1070 {
|
1071 kumpf 1.151 for (CMPI_Error* currErr=eRes.resError;
1072 currErr!=NULL;
|
1073 dave.sudlik 1.102 currErr=currErr->nextError)
|
1074 venkat.puvvada 1.108 {
1075 cimException.addError(
1076 ((CIMError*)currErr->hdl)->getInstance());
1077 }
1078 }
1079 throw cimException;
|
1080 dave.sudlik 1.102 }
|
1081 marek 1.63 }
1082 HandlerCatch(handler);
1083
1084 PEG_METHOD_EXIT();
1085
1086 return(response);
1087 }
1088
|
1089 venkat.puvvada 1.108 Message * CMPIProviderManager::handleDeleteInstanceRequest(
1090 const Message * message)
|
1091 marek 1.63 {
|
1092 ms.aruran 1.115 PEG_METHOD_ENTER(
1093 TRC_PROVIDERMANAGER,
1094 "CMPIProviderManager::handleDeleteInstanceRequest()");
|
1095 marek 1.63
|
1096 kumpf 1.92 HandlerIntro(DeleteInstance,message,request,response,handler);
|
1097 venkat.puvvada 1.108 try
1098 {
|
1099 thilo.boehm 1.138 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
|
1100 marek 1.129 "CMPIProviderManager::handleDeleteInstanceRequest"
1101 " - Host name: %s Name space: %s Class name: %s",
1102 (const char*) System::getHostName().getCString(),
1103 (const char*) request->nameSpace.getString().getCString(),
1104 (const char*)
1105 request->instanceName.getClassName().getString().getCString()));
|
1106 kumpf 1.151
|
1107 marek 1.63 // make target object path
1108 CIMObjectPath objectPath(
1109 System::getHostName(),
1110 request->nameSpace,
1111 request->instanceName.getClassName(),
1112 request->instanceName.getKeyBindings());
1113
1114 Boolean remote=false;
|
1115 venkat.puvvada 1.132 OpProviderHolder ph;
|
1116 marek 1.63
1117 // resolve provider name
|
1118 kumpf 1.151 ProviderIdContainer pidc =
|
1119 venkat.puvvada 1.108 request->operationContext.get(ProviderIdContainer::NAME);
|
1120 marek 1.63 ProviderName name = _resolveProviderName(pidc);
1121
|
1122 venkat.puvvada 1.108 if ((remote=pidc.isRemoteNameSpace()))
1123 {
1124 ph = providerManager.getRemoteProvider(
1125 name.getLocation(), name.getLogicalName());
|
1126 marek 1.63 }
|
1127 venkat.puvvada 1.108 else
1128 {
1129 // get cached or load new provider module
1130 ph = providerManager.getProvider(
1131 name.getPhysicalName(), name.getLogicalName());
|
1132 marek 1.63 }
1133
1134 // convert arguments
1135 OperationContext context;
1136
1137 context.insert(request->operationContext.get(IdentityContainer::NAME));
|
1138 venkat.puvvada 1.108 context.insert(
1139 request->operationContext.get(AcceptLanguageListContainer::NAME));
1140 context.insert(
1141 request->operationContext.get(ContentLanguageListContainer::NAME));
|
1142 marek 1.63 // forward request
1143 CMPIProvider & pr=ph.GetProvider();
1144
1145 CMPIStatus rc={CMPI_RC_OK,NULL};
1146 CMPI_ContextOnStack eCtx(context);
1147 CMPI_ObjectPathOnStack eRef(objectPath);
|
1148 venkat.puvvada 1.132 CMPI_ResultOnStack eRes(handler,pr.getBroker());
1149 CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
|
1150 marek 1.63
|
1151 marek 1.124 _setupCMPIContexts(
|
1152 venkat.puvvada 1.108 &eCtx,
|
1153 marek 1.124 &context,
1154 &pidc,
1155 request->nameSpace.getString(),
1156 remote,
1157 false,
1158 false,
1159 true);
|
1160 marek 1.63
1161 CMPIProvider::pm_service_op_lock op_lock(&pr);
1162
|
1163 thilo.boehm 1.143 PEG_TRACE((
1164 TRC_PROVIDERMANAGER,
1165 Tracer::LEVEL2,
1166 "Calling provider.deleteInstance: %s",
1167 (const char*)pr.getName().getCString()));
1168
|
1169 kumpf 1.92 {
|
1170 thilo.boehm 1.144 AutoPThreadSecurity threadLevelSecurity(request->operationContext);
1171
|
1172 kumpf 1.92 StatProviderTimeMeasurement providerTime(response);
|
1173 marek 1.63
|
1174 venkat.puvvada 1.132 rc = pr.getInstMI()->ft->deleteInstance(
1175 pr.getInstMI(),
1176 &eCtx,
1177 &eRes,
1178 &eRef);
|
1179 kumpf 1.92 }
|
1180 marek 1.63
|
1181 thilo.boehm 1.143 PEG_TRACE((
1182 TRC_PROVIDERMANAGER,
1183 Tracer::LEVEL2,
1184 "Returning from provider.deleteInstance: %s",
1185 (const char*)pr.getName().getCString()));
1186
|
1187 dave.sudlik 1.99 // Need to save ContentLanguage value into operation context of response
|
1188 kumpf 1.151 // Do this before checking rc from provider to throw exception in case
|
1189 dave.sudlik 1.99 // rc.msg is also localized.
1190 CMPIStatus tmprc={CMPI_RC_OK,NULL};
|
1191 kumpf 1.151 CMPIData cldata =
|
1192 venkat.puvvada 1.108 eCtx.ft->getEntry (&eCtx, CMPIContentLanguage, &tmprc);
|
1193 dave.sudlik 1.99 if (tmprc.rc == CMPI_RC_OK)
1194 {
1195 response->operationContext.set(
1196 ContentLanguageListContainer(
|
1197 venkat.puvvada 1.108 ContentLanguageList(
1198 LanguageParser::parseContentLanguageHeader(
|
1199 s.kodali 1.137 CMGetCharsPtr(cldata.value.string, NULL)))));
|
1200 dave.sudlik 1.103 handler.setContext(response->operationContext);
|
1201 dave.sudlik 1.99 }
1202
|
1203 marek 1.63 if (rc.rc!=CMPI_RC_OK)
|
1204 dave.sudlik 1.102 {
|
1205 venkat.puvvada 1.108 CIMException cimException(
1206 (CIMStatusCode)rc.rc,
|
1207 s.kodali 1.137 rc.msg ? CMGetCharsPtr(rc.msg, NULL) : String::EMPTY);
|
1208 venkat.puvvada 1.108
1209 if (eRes.resError)
1210 {
|
1211 kumpf 1.151 for (CMPI_Error* currErr=eRes.resError;
1212 currErr!=NULL;
|
1213 dave.sudlik 1.102 currErr=currErr->nextError)
|
1214 venkat.puvvada 1.108 {
1215 cimException.addError(
1216 ((CIMError*)currErr->hdl)->getInstance());
1217 }
1218 }
1219 throw cimException;
|
1220 dave.sudlik 1.102 }
|
1221 marek 1.63 }
1222 HandlerCatch(handler);
1223
1224 PEG_METHOD_EXIT();
1225
1226 return(response);
1227 }
1228
1229 Message * CMPIProviderManager::handleExecQueryRequest(const Message * message)
1230 {
|
1231 ms.aruran 1.115 PEG_METHOD_ENTER(
1232 TRC_PROVIDERMANAGER,
1233 "CMPIProviderManager::handleExecQueryRequest()");
|
1234 marek 1.63
|
1235 kumpf 1.92 HandlerIntro(ExecQuery,message,request,response,handler);
|
1236 marek 1.63
|
1237 venkat.puvvada 1.108 try
1238 {
|
1239 thilo.boehm 1.138 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
|
1240 marek 1.129 "CMPIProviderManager::ExecQueryRequest"
1241 " - Host name: %s Name space: %s Class name: %s",
1242 (const char*) System::getHostName().getCString(),
1243 (const char*) request->nameSpace.getString().getCString(),
1244 (const char*) request->className.getString().getCString()));
|
1245 marek 1.63
1246 // make target object path
1247 CIMObjectPath objectPath(
1248 System::getHostName(),
1249 request->nameSpace,
1250 request->className);
1251
1252 Boolean remote=false;
1253
|
1254 venkat.puvvada 1.132 OpProviderHolder ph;
|
1255 marek 1.63
1256 // resolve provider name
|
1257 kumpf 1.151 ProviderIdContainer pidc =
|
1258 venkat.puvvada 1.108 request->operationContext.get(ProviderIdContainer::NAME);
|
1259 marek 1.63 ProviderName name = _resolveProviderName(pidc);
1260
|
1261 venkat.puvvada 1.108 if ((remote=pidc.isRemoteNameSpace()))
1262 {
1263 ph = providerManager.getRemoteProvider(
1264 name.getLocation(), name.getLogicalName());
|
1265 marek 1.63 }
|
1266 venkat.puvvada 1.108 else
1267 {
1268 // get cached or load new provider module
1269 ph = providerManager.getProvider(
1270 name.getPhysicalName(), name.getLogicalName());
|
1271 marek 1.63 }
1272
1273 // convert arguments
1274 OperationContext context;
1275
1276 context.insert(request->operationContext.get(IdentityContainer::NAME));
|
1277 venkat.puvvada 1.108 context.insert(
1278 request->operationContext.get(AcceptLanguageListContainer::NAME));
1279 context.insert(
1280 request->operationContext.get(ContentLanguageListContainer::NAME));
|
1281 marek 1.63
1282 // forward request
1283 CMPIProvider & pr=ph.GetProvider();
1284
1285 const char **props=NULL;
1286
1287 CMPIStatus rc={CMPI_RC_OK,NULL};
1288 CMPI_ContextOnStack eCtx(context);
1289 CMPI_ObjectPathOnStack eRef(objectPath);
|
1290 venkat.puvvada 1.132 CMPI_ResultOnStack eRes(handler,pr.getBroker());
1291 CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
|
1292 marek 1.63
1293 const CString queryLan=request->queryLanguage.getCString();
1294 const CString query=request->query.getCString();
1295
|
1296 marek 1.124 _setupCMPIContexts(
|
1297 venkat.puvvada 1.108 &eCtx,
|
1298 marek 1.124 &context,
1299 &pidc,
1300 request->nameSpace.getString(),
1301 remote,
1302 false,
1303 false,
1304 true);
|
1305 marek 1.63
1306 CMPIProvider::pm_service_op_lock op_lock(&pr);
1307
|
1308 thilo.boehm 1.143 PEG_TRACE((
1309 TRC_PROVIDERMANAGER,
1310 Tracer::LEVEL2,
1311 "Calling provider.execQuery: %s",
1312 (const char*)pr.getName().getCString()));
1313
|
1314 kumpf 1.92 {
|
1315 thilo.boehm 1.144 AutoPThreadSecurity threadLevelSecurity(request->operationContext);
1316
|
1317 kumpf 1.92 StatProviderTimeMeasurement providerTime(response);
|
1318 marek 1.63
|
1319 venkat.puvvada 1.132 rc = pr.getInstMI()->ft->execQuery(
1320 pr.getInstMI(),
1321 &eCtx,
1322 &eRes,
1323 &eRef,
1324 CHARS(queryLan),
1325 CHARS(query));
|
1326 kumpf 1.92 }
|
1327 marek 1.63
|
1328 thilo.boehm 1.143 PEG_TRACE((
1329 TRC_PROVIDERMANAGER,
1330 Tracer::LEVEL2,
1331 "Returning from provider.execQuery: %s",
1332 (const char*)pr.getName().getCString()));
1333
|
1334 dave.sudlik 1.99 // Need to save ContentLanguage value into operation context of response
|
1335 kumpf 1.151 // Do this before checking rc from provider to throw exception in case
|
1336 dave.sudlik 1.99 // rc.msg is also localized.
1337 CMPIStatus tmprc={CMPI_RC_OK,NULL};
|
1338 kumpf 1.151 CMPIData cldata =
|
1339 venkat.puvvada 1.108 eCtx.ft->getEntry (&eCtx, CMPIContentLanguage, &tmprc);
|
1340 dave.sudlik 1.99 if (tmprc.rc == CMPI_RC_OK)
1341 {
1342 response->operationContext.set(
1343 ContentLanguageListContainer(
|
1344 venkat.puvvada 1.108 ContentLanguageList(
1345 LanguageParser::parseContentLanguageHeader(
|
1346 s.kodali 1.137 CMGetCharsPtr(cldata.value.string, NULL)))));
|
1347 dave.sudlik 1.103 handler.setContext(response->operationContext);
|
1348 dave.sudlik 1.99 }
1349
|
1350 marek 1.63 if (rc.rc!=CMPI_RC_OK)
|
1351 dave.sudlik 1.102 {
|
1352 venkat.puvvada 1.108 CIMException cimException(
1353 (CIMStatusCode)rc.rc,
|
1354 s.kodali 1.137 rc.msg ? CMGetCharsPtr(rc.msg, NULL) : String::EMPTY);
|
1355 venkat.puvvada 1.108
1356 if (eRes.resError)
1357 {
|
1358 kumpf 1.151 for (CMPI_Error* currErr=eRes.resError;
1359 currErr!=NULL;
|
1360 dave.sudlik 1.102 currErr=currErr->nextError)
|
1361 venkat.puvvada 1.108 {
1362 cimException.addError(
1363 ((CIMError*)currErr->hdl)->getInstance());
1364 }
1365 }
1366 throw cimException;
|
1367 dave.sudlik 1.102 }
1368
|
1369 marek 1.63 }
1370 HandlerCatch(handler);
1371
1372 PEG_METHOD_EXIT();
1373
1374 return(response);
1375 }
1376
1377 Message * CMPIProviderManager::handleAssociatorsRequest(const Message * message)
1378 {
|
1379 ms.aruran 1.115 PEG_METHOD_ENTER(
1380 TRC_PROVIDERMANAGER,
1381 "CMPIProviderManager::handleAssociatorsRequest()");
|
1382 marek 1.63
|
1383 kumpf 1.92 HandlerIntro(Associators,message,request,response,handler);
|
1384 venkat.puvvada 1.108 try
1385 {
|
1386 thilo.boehm 1.138 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
|
1387 marek 1.129 "CMPIProviderManager::handleAssociatorsRequest"
1388 " - Host name: %s Name space: %s Class name: %s",
1389 (const char*) System::getHostName().getCString(),
1390 (const char*) request->nameSpace.getString().getCString(),
1391 (const char*)
1392 request->objectName.getClassName().getString().getCString()));
|
1393 marek 1.63
1394 // make target object path
1395 CIMObjectPath objectPath(
1396 System::getHostName(),
1397 request->nameSpace,
1398 request->objectName.getClassName());
1399
1400 objectPath.setKeyBindings(request->objectName.getKeyBindings());
1401
1402 CIMObjectPath assocPath(
1403 System::getHostName(),
1404 request->nameSpace,
1405 request->assocClass.getString());
1406
1407 Boolean remote=false;
1408
|
1409 venkat.puvvada 1.132 OpProviderHolder ph;
|
1410 marek 1.63
1411 // resolve provider name
|
1412 kumpf 1.151 ProviderIdContainer pidc =
|
1413 venkat.puvvada 1.108 request->operationContext.get(ProviderIdContainer::NAME);
|
1414 marek 1.63 ProviderName name = _resolveProviderName(pidc);
1415
|
1416 venkat.puvvada 1.108 if ((remote=pidc.isRemoteNameSpace()))
1417 {
1418 ph = providerManager.getRemoteProvider(
1419 name.getLocation(), name.getLogicalName());
|
1420 marek 1.63 }
|
1421 venkat.puvvada 1.108 else
1422 {
1423 // get cached or load new provider module
1424 ph = providerManager.getProvider(
1425 name.getPhysicalName(), name.getLogicalName());
|
1426 marek 1.63 }
1427
|
1428 venkat.puvvada 1.108 // convert arguments
|
1429 marek 1.63 OperationContext context;
1430
1431 context.insert(request->operationContext.get(IdentityContainer::NAME));
|
1432 venkat.puvvada 1.108 context.insert(
1433 request->operationContext.get(AcceptLanguageListContainer::NAME));
1434 context.insert(
1435 request->operationContext.get(ContentLanguageListContainer::NAME));
|
1436 marek 1.63
1437 // forward request
1438 CMPIProvider & pr=ph.GetProvider();
1439
|
1440 thilo.boehm 1.138 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4,
1441 "--- CMPIProviderManager::associators < role: > %s%s",
1442 (const char*)request->role.getCString(),
1443 (const char*)request->assocClass.getString().getCString()));
|
1444 marek 1.63
1445 CMPIStatus rc={CMPI_RC_OK,NULL};
1446 CMPI_ContextOnStack eCtx(context);
1447 CMPI_ObjectPathOnStack eRef(objectPath);
|
1448 venkat.puvvada 1.132 CMPI_ResultOnStack eRes(handler,pr.getBroker());
1449 CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
|
1450 marek 1.63 const CString aClass=request->assocClass.getString().getCString();
1451 const CString rClass=request->resultClass.getString().getCString();
1452 const CString rRole=request->role.getCString();
1453 const CString resRole=request->resultRole.getCString();
1454
1455 CMPIPropertyList props(request->propertyList);
1456
|
1457 marek 1.124 _setupCMPIContexts(
|
1458 venkat.puvvada 1.108 &eCtx,
|
1459 marek 1.124 &context,
1460 &pidc,
1461 request->nameSpace.getString(),
1462 remote,
1463 request->includeQualifiers,
1464 request->includeClassOrigin,
1465 true);
|
1466 marek 1.63
1467 CMPIProvider::pm_service_op_lock op_lock(&pr);
1468
|
1469 thilo.boehm 1.143 PEG_TRACE((
1470 TRC_PROVIDERMANAGER,
1471 Tracer::LEVEL2,
1472 "Calling provider.associators: %s",
1473 (const char*)pr.getName().getCString()));
1474
|
1475 kumpf 1.92 {
|
1476 thilo.boehm 1.144 AutoPThreadSecurity threadLevelSecurity(request->operationContext);
1477
|
1478 kumpf 1.92 StatProviderTimeMeasurement providerTime(response);
|
1479 marek 1.63
|
1480 venkat.puvvada 1.132 rc = pr.getAssocMI()->ft->associators(
1481 pr.getAssocMI(),
1482 &eCtx,
1483 &eRes,
1484 &eRef,
1485 CHARS(aClass),
1486 CHARS(rClass),
1487 CHARS(rRole),
1488 CHARS(resRole),
|
1489 kumpf 1.92 (const char **)props.getList());
1490 }
|
1491 marek 1.63
|
1492 thilo.boehm 1.143 PEG_TRACE((
1493 TRC_PROVIDERMANAGER,
1494 Tracer::LEVEL2,
1495 "Returning from provider.associators: %s",
1496 (const char*)pr.getName().getCString()));
1497
|
1498 dave.sudlik 1.99 // Need to save ContentLanguage value into operation context of response
|
1499 kumpf 1.151 // Do this before checking rc from provider to throw exception in case
|
1500 dave.sudlik 1.99 // rc.msg is also localized.
1501 CMPIStatus tmprc={CMPI_RC_OK,NULL};
|
1502 venkat.puvvada 1.108 CMPIData cldata = eCtx.ft->getEntry (
|
1503 kumpf 1.151 &eCtx,
1504 CMPIContentLanguage,
|
1505 venkat.puvvada 1.108 &tmprc);
|
1506 dave.sudlik 1.99 if (tmprc.rc == CMPI_RC_OK)
1507 {
1508 response->operationContext.set(
1509 ContentLanguageListContainer(
|
1510 venkat.puvvada 1.108 ContentLanguageList(
1511 LanguageParser::parseContentLanguageHeader(
|
1512 s.kodali 1.137 CMGetCharsPtr(cldata.value.string, NULL)))));
|
1513 dave.sudlik 1.103 handler.setContext(response->operationContext);
|
1514 dave.sudlik 1.99 }
1515
|
1516 marek 1.63 if (rc.rc!=CMPI_RC_OK)
|
1517 dave.sudlik 1.102 {
|
1518 venkat.puvvada 1.108 CIMException cimException(
1519 (CIMStatusCode)rc.rc,
|
1520 s.kodali 1.137 rc.msg ? CMGetCharsPtr(rc.msg, NULL) : String::EMPTY);
|
1521 venkat.puvvada 1.108
1522 if (eRes.resError)
1523 {
|
1524 kumpf 1.151 for (CMPI_Error* currErr=eRes.resError;
1525 currErr!=NULL;
|
1526 dave.sudlik 1.102 currErr=currErr->nextError)
|
1527 venkat.puvvada 1.108 {
1528 cimException.addError(
1529 ((CIMError*)currErr->hdl)->getInstance());
1530 }
1531 }
1532 throw cimException;
|
1533 dave.sudlik 1.102 }
|
1534 marek 1.63 }
1535 HandlerCatch(handler);
1536
1537 PEG_METHOD_EXIT();
1538
1539 return(response);
1540 }
1541
|
1542 venkat.puvvada 1.108 Message * CMPIProviderManager::handleAssociatorNamesRequest(
1543 const Message * message)
|
1544 marek 1.63 {
|
1545 ms.aruran 1.115 PEG_METHOD_ENTER(
1546 TRC_PROVIDERMANAGER,
1547 "CMPIProviderManager::handleAssociatorNamesRequest()");
|
1548 marek 1.63
|
1549 kumpf 1.92 HandlerIntro(AssociatorNames,message,request,response,handler);
|
1550 venkat.puvvada 1.108 try
1551 {
|
1552 thilo.boehm 1.138 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
|
1553 marek 1.129 "CMPIProviderManager::handleAssociatorNamesRequest"
1554 " - Host name: %s Name space: %s Class name: %s",
1555 (const char*) System::getHostName().getCString(),
1556 (const char*) request->nameSpace.getString().getCString(),
1557 (const char*)
1558 request->objectName.getClassName().getString().getCString()));
|
1559 marek 1.63
1560 // make target object path
1561 CIMObjectPath objectPath(
1562 System::getHostName(),
1563 request->nameSpace,
1564 request->objectName.getClassName());
1565
1566 objectPath.setKeyBindings(request->objectName.getKeyBindings());
1567
1568 CIMObjectPath assocPath(
1569 System::getHostName(),
1570 request->nameSpace,
1571 request->assocClass.getString());
1572
1573 Boolean remote=false;
|
1574 venkat.puvvada 1.132 OpProviderHolder ph;
|
1575 marek 1.63
1576 // resolve provider name
|
1577 kumpf 1.151 ProviderIdContainer pidc =
|
1578 venkat.puvvada 1.108 request->operationContext.get(ProviderIdContainer::NAME);
|
1579 marek 1.63 ProviderName name = _resolveProviderName(pidc);
1580
|
1581 venkat.puvvada 1.108 if ((remote=pidc.isRemoteNameSpace()))
1582 {
1583 ph = providerManager.getRemoteProvider(
1584 name.getLocation(), name.getLogicalName());
|
1585 marek 1.63 }
|
1586 venkat.puvvada 1.108 else
1587 {
1588 // get cached or load new provider module
1589 ph = providerManager.getProvider(
1590 name.getPhysicalName(), name.getLogicalName());
|
1591 marek 1.63 }
1592
1593 // convert arguments
1594 OperationContext context;
1595
1596 context.insert(request->operationContext.get(IdentityContainer::NAME));
|
1597 venkat.puvvada 1.108 context.insert(
1598 request->operationContext.get(AcceptLanguageListContainer::NAME));
1599 context.insert(
1600 request->operationContext.get(ContentLanguageListContainer::NAME));
|
1601 marek 1.63
1602 // forward request
1603 CMPIProvider & pr=ph.GetProvider();
1604
|
1605 thilo.boehm 1.138 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4,
|
1606 kumpf 1.151 "--- CMPIProviderManager::associatorNames -- role: %s< aCls %s",
|
1607 thilo.boehm 1.138 (const char*)request->role.getCString(),
1608 (const char*)request->assocClass.getString().getCString()));
|
1609 marek 1.63
1610 CMPIStatus rc={CMPI_RC_OK,NULL};
1611 CMPI_ContextOnStack eCtx(context);
1612 CMPI_ObjectPathOnStack eRef(objectPath);
|
1613 venkat.puvvada 1.132 CMPI_ResultOnStack eRes(handler,pr.getBroker());
1614 CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
|
1615 marek 1.63 const CString aClass=request->assocClass.getString().getCString();
1616 const CString rClass=request->resultClass.getString().getCString();
1617 const CString rRole=request->role.getCString();
1618 const CString resRole=request->resultRole.getCString();
1619
|
1620 marek 1.124 _setupCMPIContexts(
|
1621 venkat.puvvada 1.108 &eCtx,
|
1622 marek 1.124 &context,
1623 &pidc,
1624 request->nameSpace.getString(),
1625 remote,
1626 false,
1627 false,
1628 true);
|
1629 marek 1.63
1630 CMPIProvider::pm_service_op_lock op_lock(&pr);
1631
|
1632 thilo.boehm 1.143 PEG_TRACE((
1633 TRC_PROVIDERMANAGER,
1634 Tracer::LEVEL2,
1635 "Calling provider.associatorNames: %s",
1636 (const char*)pr.getName().getCString()));
1637
|
1638 kumpf 1.92 {
|
1639 thilo.boehm 1.144 AutoPThreadSecurity threadLevelSecurity(request->operationContext);
1640
|
1641 kumpf 1.92 StatProviderTimeMeasurement providerTime(response);
|
1642 marek 1.63
|
1643 venkat.puvvada 1.132 rc = pr.getAssocMI()->ft->associatorNames(
1644 pr.getAssocMI(),
1645 &eCtx,
1646 &eRes,
1647 &eRef,
1648 CHARS(aClass),
1649 CHARS(rClass),
1650 CHARS(rRole),
1651 CHARS(resRole));
|
1652 kumpf 1.92 }
|
1653 marek 1.63
|
1654 thilo.boehm 1.143 PEG_TRACE((
1655 TRC_PROVIDERMANAGER,
1656 Tracer::LEVEL2,
1657 "Returning from provider.associatorNames: %s",
1658 (const char*)pr.getName().getCString()));
1659
|
1660 dave.sudlik 1.99 // Need to save ContentLanguage value into operation context of response
|
1661 kumpf 1.151 // Do this before checking rc from provider to throw exception in case
|
1662 dave.sudlik 1.99 // rc.msg is also localized.
1663 CMPIStatus tmprc={CMPI_RC_OK,NULL};
|
1664 kumpf 1.151 CMPIData cldata =
|
1665 venkat.puvvada 1.108 eCtx.ft->getEntry (&eCtx, CMPIContentLanguage, &tmprc);
|
1666 dave.sudlik 1.99 if (tmprc.rc == CMPI_RC_OK)
1667 {
1668 response->operationContext.set(
1669 ContentLanguageListContainer(
|
1670 venkat.puvvada 1.108 ContentLanguageList(
1671 LanguageParser::parseContentLanguageHeader(
|
1672 s.kodali 1.137 CMGetCharsPtr(cldata.value.string, NULL)))));
|
1673 dave.sudlik 1.103 handler.setContext(response->operationContext);
|
1674 dave.sudlik 1.99 }
1675
|
1676 marek 1.63 if (rc.rc!=CMPI_RC_OK)
|
1677 dave.sudlik 1.102 {
|
1678 venkat.puvvada 1.108 CIMException cimException(
1679 (CIMStatusCode)rc.rc,
|
1680 s.kodali 1.137 rc.msg ? CMGetCharsPtr(rc.msg, NULL) : String::EMPTY);
|
1681 venkat.puvvada 1.108
1682 if (eRes.resError)
1683 {
|
1684 kumpf 1.151 for (CMPI_Error* currErr=eRes.resError;
1685 currErr!=NULL;
|
1686 dave.sudlik 1.102 currErr=currErr->nextError)
|
1687 venkat.puvvada 1.108 {
1688 cimException.addError(
1689 ((CIMError*)currErr->hdl)->getInstance());
1690 }
1691 }
1692 throw cimException;
|
1693 dave.sudlik 1.102 }
|
1694 marek 1.63 }
1695 HandlerCatch(handler);
1696
1697 PEG_METHOD_EXIT();
1698
1699 return(response);
1700 }
1701
1702 Message * CMPIProviderManager::handleReferencesRequest(const Message * message)
1703 {
|
1704 ms.aruran 1.115 PEG_METHOD_ENTER(
1705 TRC_PROVIDERMANAGER,
1706 "CMPIProviderManager::handleReferencesRequest()");
|
1707 marek 1.63
|
1708 kumpf 1.92 HandlerIntro(References,message,request,response,handler);
|
1709 venkat.puvvada 1.108 try
1710 {
|
1711 thilo.boehm 1.138 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
|
1712 marek 1.129 "CMPIProviderManager::handleReferencesRequest"
1713 " - Host name: %s Name space: %s Class name: %s",
1714 (const char*) System::getHostName().getCString(),
1715 (const char*) request->nameSpace.getString().getCString(),
1716 (const char*)
1717 request->objectName.getClassName().getString().getCString()));
|
1718 marek 1.63
1719 // make target object path
1720 CIMObjectPath objectPath(
1721 System::getHostName(),
1722 request->nameSpace,
1723 request->objectName.getClassName());
1724
1725 objectPath.setKeyBindings(request->objectName.getKeyBindings());
1726
1727 CIMObjectPath resultPath(
1728 System::getHostName(),
1729 request->nameSpace,
1730 request->resultClass.getString());
1731
1732 Boolean remote=false;
|
1733 venkat.puvvada 1.132 OpProviderHolder ph;
|
1734 marek 1.63
1735 // resolve provider name
|
1736 kumpf 1.151 ProviderIdContainer pidc =
|
1737 venkat.puvvada 1.108 request->operationContext.get(ProviderIdContainer::NAME);
|
1738 marek 1.63 ProviderName name = _resolveProviderName(pidc);
1739
|
1740 venkat.puvvada 1.108 if ((remote=pidc.isRemoteNameSpace()))
1741 {
1742 ph = providerManager.getRemoteProvider(
1743 name.getLocation(), name.getLogicalName());
|
1744 marek 1.63 }
|
1745 venkat.puvvada 1.108 else
1746 {
1747 // get cached or load new provider module
1748 ph = providerManager.getProvider(
1749 name.getPhysicalName(), name.getLogicalName());
|
1750 marek 1.63 }
1751
1752 // convert arguments
1753 OperationContext context;
1754
1755 context.insert(request->operationContext.get(IdentityContainer::NAME));
|
1756 venkat.puvvada 1.108 context.insert(
1757 request->operationContext.get(AcceptLanguageListContainer::NAME));
1758 context.insert(
1759 request->operationContext.get(ContentLanguageListContainer::NAME));
|
1760 marek 1.63 // forward request
1761 CMPIProvider & pr=ph.GetProvider();
1762
|
1763 thilo.boehm 1.138 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4,
1764 "--- CMPIProviderManager::references -- role:%s< aCls %s",
1765 (const char*)request->role.getCString(),
1766 (const char*)request->resultClass.getString().getCString()));
|
1767 marek 1.63
1768 CMPIStatus rc={CMPI_RC_OK,NULL};
1769 CMPI_ContextOnStack eCtx(context);
1770 CMPI_ObjectPathOnStack eRef(objectPath);
|
1771 venkat.puvvada 1.132 CMPI_ResultOnStack eRes(handler,pr.getBroker());
1772 CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
|
1773 marek 1.63 const CString rClass=request->resultClass.getString().getCString();
1774 const CString rRole=request->role.getCString();
1775
1776 CMPIPropertyList props(request->propertyList);
1777
|
1778 marek 1.124 _setupCMPIContexts(
|
1779 venkat.puvvada 1.108 &eCtx,
|
1780 marek 1.124 &context,
1781 &pidc,
1782 request->nameSpace.getString(),
1783 remote,
1784 request->includeQualifiers,
1785 request->includeClassOrigin,
1786 true);
|
1787 marek 1.63
1788 CMPIProvider::pm_service_op_lock op_lock(&pr);
1789
|
1790 thilo.boehm 1.143 PEG_TRACE((
1791 TRC_PROVIDERMANAGER,
1792 Tracer::LEVEL2,
1793 "Calling provider.references: %s",
1794 (const char*)pr.getName().getCString()));
1795
|
1796 kumpf 1.92 {
|
1797 thilo.boehm 1.144 AutoPThreadSecurity threadLevelSecurity(request->operationContext);
1798
|
1799 kumpf 1.92 StatProviderTimeMeasurement providerTime(response);
|
1800 marek 1.63
|
1801 venkat.puvvada 1.132 rc = pr.getAssocMI()->ft->references(
1802 pr.getAssocMI(),
1803 &eCtx,
1804 &eRes,
1805 &eRef,
1806 CHARS(rClass),
1807 CHARS(rRole),
1808 (const char **)props.getList());
|
1809 kumpf 1.92 }
|
1810 marek 1.63
|
1811 thilo.boehm 1.143 PEG_TRACE((
1812 TRC_PROVIDERMANAGER,
1813 Tracer::LEVEL2,
1814 "Returning from provider.references: %s",
1815 (const char*)pr.getName().getCString()));
1816
|
1817 dave.sudlik 1.99 // Need to save ContentLanguage value into operation context of response
|
1818 kumpf 1.151 // Do this before checking rc from provider to throw exception in case
|
1819 dave.sudlik 1.99 // rc.msg is also localized.
1820 CMPIStatus tmprc={CMPI_RC_OK,NULL};
|
1821 kumpf 1.151 CMPIData cldata =
|
1822 venkat.puvvada 1.108 eCtx.ft->getEntry (&eCtx, CMPIContentLanguage, &tmprc);
|
1823 dave.sudlik 1.99 if (tmprc.rc == CMPI_RC_OK)
1824 {
1825 response->operationContext.set(
1826 ContentLanguageListContainer(
|
1827 venkat.puvvada 1.108 ContentLanguageList(
1828 LanguageParser::parseContentLanguageHeader(
|
1829 s.kodali 1.137 CMGetCharsPtr(cldata.value.string, NULL)))));
|
1830 dave.sudlik 1.103 handler.setContext(response->operationContext);
|
1831 dave.sudlik 1.99 }
1832
|
1833 marek 1.63 if (rc.rc!=CMPI_RC_OK)
|
1834 dave.sudlik 1.102 {
|
1835 venkat.puvvada 1.108 CIMException cimException(
1836 (CIMStatusCode)rc.rc,
|
1837 s.kodali 1.137 rc.msg ? CMGetCharsPtr(rc.msg, NULL) : String::EMPTY);
|
1838 venkat.puvvada 1.108
1839 if (eRes.resError)
1840 {
|
1841 kumpf 1.151 for (CMPI_Error* currErr=eRes.resError;
1842 currErr!=NULL;
|
1843 dave.sudlik 1.102 currErr=currErr->nextError)
|
1844 venkat.puvvada 1.108 {
1845 cimException.addError(
1846 ((CIMError*)currErr->hdl)->getInstance());
1847 }
1848 }
1849 throw cimException;
|
1850 dave.sudlik 1.102 }
|
1851 marek 1.63 }
1852 HandlerCatch(handler);
1853
1854 PEG_METHOD_EXIT();
1855
1856 return(response);
1857 }
1858
|
1859 venkat.puvvada 1.108 Message * CMPIProviderManager::handleReferenceNamesRequest(
1860 const Message * message)
|
1861 marek 1.63 {
|
1862 ms.aruran 1.115 PEG_METHOD_ENTER(
1863 TRC_PROVIDERMANAGER,
1864 "CMPIProviderManager::handleReferenceNamesRequest()");
|
1865 marek 1.63
|
1866 kumpf 1.92 HandlerIntro(ReferenceNames,message,request,response,handler);
|
1867 venkat.puvvada 1.108 try
1868 {
|
1869 thilo.boehm 1.138 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
|
1870 marek 1.129 "CMPIProviderManager::handleReferenceNamesRequest"
1871 " - Host name: %s Name space: %s Class name: %s",
1872 (const char*) System::getHostName().getCString(),
1873 (const char*) request->nameSpace.getString().getCString(),
1874 (const char*)
1875 request->objectName.getClassName().getString().getCString()));
|
1876 kumpf 1.151
|
1877 marek 1.63 // make target object path
1878 CIMObjectPath objectPath(
1879 System::getHostName(),
1880 request->nameSpace,
1881 request->objectName.getClassName());
1882
1883 objectPath.setKeyBindings(request->objectName.getKeyBindings());
1884
1885 CIMObjectPath resultPath(
1886 System::getHostName(),
1887 request->nameSpace,
1888 request->resultClass.getString());
1889
1890 Boolean remote=false;
|
1891 venkat.puvvada 1.132 OpProviderHolder ph;
|
1892 marek 1.63
1893 // resolve provider name
|
1894 kumpf 1.151 ProviderIdContainer pidc =
|
1895 venkat.puvvada 1.108 request->operationContext.get(ProviderIdContainer::NAME);
|
1896 marek 1.63 ProviderName name = _resolveProviderName(pidc);
1897
|
1898 venkat.puvvada 1.108 if ((remote=pidc.isRemoteNameSpace()))
1899 {
1900 ph = providerManager.getRemoteProvider(
1901 name.getLocation(), name.getLogicalName());
|
1902 marek 1.63 }
|
1903 venkat.puvvada 1.108 else
1904 {
1905 // get cached or load new provider module
1906 ph = providerManager.getProvider(
1907 name.getPhysicalName(), name.getLogicalName());
|
1908 marek 1.63 }
1909
1910 // convert arguments
1911 OperationContext context;
1912
|
1913 venkat.puvvada 1.108 context.insert(request->operationContext.get(IdentityContainer::NAME));
1914 context.insert(
1915 request->operationContext.get(AcceptLanguageListContainer::NAME));
1916 context.insert(
1917 request->operationContext.get(ContentLanguageListContainer::NAME));
|
1918 marek 1.63 CMPIProvider & pr=ph.GetProvider();
1919
|
1920 thilo.boehm 1.138 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4,
1921 "--- CMPIProviderManager::referenceNames -- role: %s< aCls %s",
1922 (const char*)request->role.getCString(),
1923 (const char*)request->resultClass.getString().getCString()));
|
1924 marek 1.63
1925 CMPIStatus rc={CMPI_RC_OK,NULL};
1926 CMPI_ContextOnStack eCtx(context);
1927 CMPI_ObjectPathOnStack eRef(objectPath);
|
1928 venkat.puvvada 1.132 CMPI_ResultOnStack eRes(handler,pr.getBroker());
1929 CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
|
1930 marek 1.63 const CString rClass=request->resultClass.getString().getCString();
1931 const CString rRole=request->role.getCString();
1932
|
1933 marek 1.124 _setupCMPIContexts(
|
1934 venkat.puvvada 1.108 &eCtx,
|
1935 marek 1.124 &context,
1936 &pidc,
1937 request->nameSpace.getString(),
1938 remote,
1939 false,
1940 false,
1941 true);
|
1942 marek 1.63
1943 CMPIProvider::pm_service_op_lock op_lock(&pr);
1944
|
1945 thilo.boehm 1.143 PEG_TRACE((
1946 TRC_PROVIDERMANAGER,
1947 Tracer::LEVEL2,
1948 "Calling provider.referenceNames: %s",
1949 (const char*)pr.getName().getCString()));
1950
|
1951 kumpf 1.92 {
|
1952 thilo.boehm 1.144 AutoPThreadSecurity threadLevelSecurity(request->operationContext);
1953
|
1954 kumpf 1.92 StatProviderTimeMeasurement providerTime(response);
|
1955 marek 1.63
|
1956 venkat.puvvada 1.132 rc = pr.getAssocMI()->ft->referenceNames(
1957 pr.getAssocMI(),
1958 &eCtx,
1959 &eRes,
1960 &eRef,
1961 CHARS(rClass),
1962 CHARS(rRole));
|
1963 kumpf 1.92 }
|
1964 marek 1.63
|
1965 thilo.boehm 1.143 PEG_TRACE((
1966 TRC_PROVIDERMANAGER,
1967 Tracer::LEVEL2,
1968 "Returning from provider.referenceNames: %s",
1969 (const char*)pr.getName().getCString()));
1970
|
1971 dave.sudlik 1.99 // Need to save ContentLanguage value into operation context of response
|
1972 kumpf 1.151 // Do this before checking rc from provider to throw exception in case
|
1973 dave.sudlik 1.99 // rc.msg is also localized.
1974 CMPIStatus tmprc={CMPI_RC_OK,NULL};
|
1975 kumpf 1.151 CMPIData cldata =
|
1976 venkat.puvvada 1.108 eCtx.ft->getEntry (&eCtx, CMPIContentLanguage, &tmprc);
|
1977 dave.sudlik 1.99 if (tmprc.rc == CMPI_RC_OK)
1978 {
1979 response->operationContext.set(
1980 ContentLanguageListContainer(
|
1981 venkat.puvvada 1.108 ContentLanguageList(
1982 LanguageParser::parseContentLanguageHeader(
|
1983 s.kodali 1.137 CMGetCharsPtr(cldata.value.string, NULL)))));
|
1984 dave.sudlik 1.103 handler.setContext(response->operationContext);
|
1985 dave.sudlik 1.99 }
1986
|
1987 marek 1.63 if (rc.rc!=CMPI_RC_OK)
|
1988 dave.sudlik 1.102 {
|
1989 venkat.puvvada 1.108 CIMException cimException(
1990 (CIMStatusCode)rc.rc,
|
1991 s.kodali 1.137 rc.msg ? CMGetCharsPtr(rc.msg, NULL) : String::EMPTY);
|
1992 venkat.puvvada 1.108
1993 if (eRes.resError)
1994 {
|
1995 kumpf 1.151 for (CMPI_Error* currErr=eRes.resError;
1996 currErr!=NULL;
|
1997 dave.sudlik 1.102 currErr=currErr->nextError)
|
1998 venkat.puvvada 1.108 {
1999 cimException.addError(
2000 ((CIMError*)currErr->hdl)->getInstance());
2001 }
2002 }
2003 throw cimException;
|
2004 dave.sudlik 1.102 }
|
2005 marek 1.63 }
2006 HandlerCatch(handler);
2007
2008 PEG_METHOD_EXIT();
2009
2010 return(response);
2011 }
2012
|
2013 venkat.puvvada 1.108 Message * CMPIProviderManager::handleInvokeMethodRequest(
2014 const Message * message)
|
2015 marek 1.63 {
|
2016 ms.aruran 1.115 PEG_METHOD_ENTER(
2017 TRC_PROVIDERMANAGER,
2018 "CMPIProviderManager::handleInvokeMethodRequest()");
|
2019 marek 1.63
|
2020 kumpf 1.92 HandlerIntro(InvokeMethod,message,request,response,handler);
|
2021 venkat.puvvada 1.108 try
2022 {
|
2023 thilo.boehm 1.138 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
|
2024 marek 1.129 "CMPIProviderManager::handleInvokeMethodRequest"
2025 " - Host name: %s Name space: %s Class name: %s",
2026 (const char*) System::getHostName().getCString(),
2027 (const char*) request->nameSpace.getString().getCString(),
2028 (const char*)
2029 request->instanceName.getClassName().getString().getCString()));
|
2030 marek 1.63
2031 // make target object path
2032 CIMObjectPath objectPath(
2033 System::getHostName(),
2034 request->nameSpace,
2035 request->instanceName.getClassName(),
2036 request->instanceName.getKeyBindings());
2037
2038 Boolean remote=false;
|
2039 venkat.puvvada 1.132 OpProviderHolder ph;
|
2040 marek 1.63
2041 // resolve provider name
|
2042 kumpf 1.151 ProviderIdContainer pidc =
|
2043 venkat.puvvada 1.108 request->operationContext.get(ProviderIdContainer::NAME);
|
2044 marek 1.63 ProviderName name = _resolveProviderName(pidc);
2045
|
2046 venkat.puvvada 1.108 if ((remote=pidc.isRemoteNameSpace()))
2047 {
2048 ph = providerManager.getRemoteProvider(
2049 name.getLocation(), name.getLogicalName());
|
2050 marek 1.63 }
|
2051 venkat.puvvada 1.108 else
2052 {
2053 // get cached or load new provider module
2054 ph = providerManager.getProvider(
2055 name.getPhysicalName(), name.getLogicalName());
|
2056 marek 1.63 }
2057
2058 // convert arguments
2059 OperationContext context;
2060
2061 context.insert(request->operationContext.get(IdentityContainer::NAME));
|
2062 venkat.puvvada 1.108 context.insert(
2063 request->operationContext.get(AcceptLanguageListContainer::NAME));
2064 context.insert(
2065 request->operationContext.get(ContentLanguageListContainer::NAME));
|
2066 marek 1.63
2067 CIMObjectPath instanceReference(request->instanceName);
2068
2069 // ATTN: propagate namespace
2070 instanceReference.setNameSpace(request->nameSpace);
2071
2072 // forward request
2073 CMPIProvider & pr=ph.GetProvider();
2074
2075 CMPIStatus rc={CMPI_RC_OK,NULL};
2076 CMPI_ContextOnStack eCtx(context);
2077 CMPI_ObjectPathOnStack eRef(objectPath);
|
2078 venkat.puvvada 1.132 CMPI_ResultOnStack eRes(handler,pr.getBroker());
2079 CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
|
2080 marek 1.63 CMPI_ArgsOnStack eArgsIn(request->inParameters);
2081 Array<CIMParamValue> outArgs;
2082 CMPI_ArgsOnStack eArgsOut(outArgs);
2083 CString mName=request->methodName.getString().getCString();
2084
|
2085 marek 1.124 _setupCMPIContexts(
|
2086 venkat.puvvada 1.108 &eCtx,
|
2087 marek 1.124 &context,
2088 &pidc,
2089 request->nameSpace.getString(),
2090 remote,
2091 false,
2092 false,
2093 true);
|
2094 marek 1.63
2095 CMPIProvider::pm_service_op_lock op_lock(&pr);
2096
|
2097 thilo.boehm 1.143 PEG_TRACE((
2098 TRC_PROVIDERMANAGER,
2099 Tracer::LEVEL2,
2100 "Calling provider.invokeMethod: %s",
2101 (const char*)pr.getName().getCString()));
2102
|
2103 kumpf 1.92 {
|
2104 thilo.boehm 1.144 AutoPThreadSecurity threadLevelSecurity(request->operationContext);
2105
|
2106 kumpf 1.92 StatProviderTimeMeasurement providerTime(response);
|
2107 marek 1.63
|
2108 venkat.puvvada 1.132 rc = pr.getMethMI()->ft->invokeMethod(
2109 pr.getMethMI(),
2110 &eCtx,
2111 &eRes,
2112 &eRef,
2113 CHARS(mName),
2114 &eArgsIn,
2115 &eArgsOut);
|
2116 kumpf 1.92 }
|
2117 marek 1.63
|
2118 thilo.boehm 1.143 PEG_TRACE((
2119 TRC_PROVIDERMANAGER,
2120 Tracer::LEVEL2,
2121 "Returning from provider.invokeMethod: %s",
2122 (const char*)pr.getName().getCString()));
2123
|
2124 dave.sudlik 1.99 // Need to save ContentLanguage value into operation context of response
|
2125 kumpf 1.151 // Do this before checking rc from provider to throw exception in case
|
2126 dave.sudlik 1.99 // rc.msg is also localized.
2127 CMPIStatus tmprc={CMPI_RC_OK,NULL};
|
2128 kumpf 1.151 CMPIData cldata =
|
2129 venkat.puvvada 1.108 eCtx.ft->getEntry (&eCtx, CMPIContentLanguage, &tmprc);
|
2130 dave.sudlik 1.99 if (tmprc.rc == CMPI_RC_OK)
2131 {
2132 response->operationContext.set(
2133 ContentLanguageListContainer(
|
2134 venkat.puvvada 1.108 ContentLanguageList(
2135 LanguageParser::parseContentLanguageHeader(
|
2136 s.kodali 1.137 CMGetCharsPtr(cldata.value.string, NULL)))));
|
2137 dave.sudlik 1.103 handler.setContext(response->operationContext);
|
2138 dave.sudlik 1.99 }
2139
|
2140 marek 1.63 if (rc.rc!=CMPI_RC_OK)
|
2141 dave.sudlik 1.102 {
|
2142 venkat.puvvada 1.108 CIMException cimException(
2143 (CIMStatusCode)rc.rc,
|
2144 s.kodali 1.137 rc.msg ? CMGetCharsPtr(rc.msg, NULL) : String::EMPTY);
|
2145 venkat.puvvada 1.108
2146 if (eRes.resError)
2147 {
|
2148 kumpf 1.151 for (CMPI_Error* currErr=eRes.resError;
2149 currErr!=NULL;
|
2150 dave.sudlik 1.102 currErr=currErr->nextError)
|
2151 venkat.puvvada 1.108 {
2152 cimException.addError(
2153 ((CIMError*)currErr->hdl)->getInstance());
2154 }
2155 }
2156 throw cimException;
|
2157 dave.sudlik 1.102 }
2158
|
2159 kumpf 1.151 // Even if external normalization is enabled we don't normalize the
|
2160 venkat.puvvada 1.121 // Embedded instances present in output args. Normalize them here.
|
2161 a.dunfey 1.85 {
2162 // There is no try catch here because if there is no external
2163 // normalization, then these containers were added by this method.
2164 const CachedClassDefinitionContainer * classCont =
2165 dynamic_cast<const CachedClassDefinitionContainer *>(
|
2166 venkat.puvvada 1.108 &request->operationContext.get(
2167 CachedClassDefinitionContainer::NAME));
|
2168 kumpf 1.106 PEGASUS_ASSERT(classCont != 0);
2169
|
2170 mike 1.148 CIMConstClass classDef(classCont->getClass());
|
2171 a.dunfey 1.85 Uint32 methodIndex = classDef.findMethod(request->methodName);
|
2172 venkat.puvvada 1.151.2.1 CIMConstMethod methodDef;
2173 if (methodIndex != PEG_NOT_FOUND)
2174 {
2175 methodDef = classDef.getMethod(methodIndex);
2176 }
|
2177 venkat.puvvada 1.108 for (unsigned int i = 0, n = outArgs.size(); i < n; ++i)
|
2178 a.dunfey 1.85 {
2179 CIMParamValue currentParam(outArgs[i]);
2180 CIMValue paramValue(currentParam.getValue());
2181 // If the parameter value is an EmbeddedObject type, we have
2182 // to check against the type of the parameter definition.
2183 // CMPI does not distinguish between EmbeddedObjects and
2184 // EmbeddedInstances, so if the parameter definition has a type
2185 // of EmbeddedInstance, the type of the output parameter must
2186 // be changed.
|
2187 venkat.puvvada 1.151.2.1 if (paramValue.getType() == CIMTYPE_OBJECT &&
2188 methodIndex != PEG_NOT_FOUND)
|
2189 a.dunfey 1.85 {
2190 String currentParamName(currentParam.getParameterName());
2191 Uint32 paramIndex = methodDef.findParameter(
2192 CIMName(currentParamName));
|
2193 venkat.puvvada 1.108 if (paramIndex == PEG_NOT_FOUND)
|
2194 a.dunfey 1.85 {
2195 MessageLoaderParms msg("ProviderManager.CMPI."
2196 "CMPIProviderManager.PARAMETER_NOT_FOUND",
|
2197 dave.sudlik 1.117 "Parameter $0 not found in definition for "
2198 "method $1.", currentParamName,
|
2199 a.dunfey 1.85 request->methodName.getString());
|
2200 thilo.boehm 1.138
2201 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
2202 "Parameter %s not found in definition for "
2203 "method %s.",
2204 (const char*)currentParamName.getCString(),
2205 (const char*)
2206 request->methodName.getString().getCString()));
2207
|
2208 a.dunfey 1.85 handler.setStatus(CIM_ERR_FAILED,
|
2209 dave.sudlik 1.117 MessageLoader::getMessage(msg));
|
2210 a.dunfey 1.85 }
2211 else
2212 {
2213 CIMConstParameter paramDef(
2214 methodDef.getParameter(paramIndex));
|
2215 thilo.boehm 1.135 if (paramDef.findQualifier(
2216 PEGASUS_QUALIFIERNAME_EMBEDDEDINSTANCE)
|
2217 a.dunfey 1.85 != PEG_NOT_FOUND)
2218 {
|
2219 venkat.puvvada 1.126 if (paramValue.isArray())
|
2220 kumpf 1.151 {
|
2221 venkat.puvvada 1.126 Array<CIMInstance> paramInstArr;
2222 Array<CIMObject> paramObjectArr;
2223 paramValue.get(paramObjectArr);
|
2224 kumpf 1.151 for (Uint32 j = 0 ;
|
2225 kumpf 1.134 j < paramObjectArr.size() ; ++j)
|
2226 venkat.puvvada 1.126 {
2227 paramInstArr.append(
|
2228 kumpf 1.134 CIMInstance(paramObjectArr[j]));
|
2229 venkat.puvvada 1.126 }
2230 currentParam = CIMParamValue(currentParamName,
2231 CIMValue(paramInstArr));
2232 }
2233 else
2234 {
2235 CIMObject paramObject;
2236 paramValue.get(paramObject);
2237 CIMInstance paramInst(paramObject);
2238 currentParam = CIMParamValue(currentParamName,
2239 CIMValue(paramInst));
2240 }
|
2241 a.dunfey 1.85 }
2242 else
2243 {
2244 currentParam = CIMParamValue(currentParamName,
|
2245 venkat.puvvada 1.126 paramValue);
|
2246 a.dunfey 1.85 }
2247
2248 handler.deliverParamValue(currentParam);
2249 }
2250 }
2251 else
2252 {
2253 handler.deliverParamValue(currentParam);
2254 }
2255 }
2256 }
|
2257 venkat.puvvada 1.108 handler.complete();
|
2258 marek 1.63 }
2259 HandlerCatch(handler);
2260
2261 PEG_METHOD_EXIT();
2262
2263 return(response);
2264 }
2265
|
2266 venkat.puvvada 1.108 int LocateIndicationProviderNames(
2267 const CIMInstance& pInstance,
2268 const CIMInstance& pmInstance,
|
2269 kumpf 1.151 String& providerName,
|
2270 venkat.puvvada 1.108 String& location)
|
2271 marek 1.63 {
|
2272 ms.aruran 1.115 PEG_METHOD_ENTER(
2273 TRC_PROVIDERMANAGER,
2274 "CMPIProviderManager:LocateIndicationProviderNames()");
|
2275 marek 1.139 Uint32 pos = pInstance.findProperty(PEGASUS_PROPERTYNAME_NAME);
|
2276 marek 1.63 pInstance.getProperty(pos).getValue().get(providerName);
2277
2278 pos = pmInstance.findProperty(CIMName ("Location"));
2279 pmInstance.getProperty(pos).getValue().get(location);
|
2280 ms.aruran 1.115 PEG_METHOD_EXIT();
|
2281 marek 1.63 return 0;
2282 }
2283
|
2284 venkat.puvvada 1.145 String CMPIProviderManager::_getClassNameFromQuery(
2285 CIMOMHandleQueryContext *context,
2286 String &query,
2287 String &lang)
2288 {
|
2289 venkat.puvvada 1.146 String className;
2290
|
2291 venkat.puvvada 1.145 try
2292 {
2293 QueryExpression qe(lang, query, *context);
2294 // Neither WQL nor CQL support joins, we should get only
2295 // one class path here.
2296 PEGASUS_ASSERT(qe.getClassPathList().size() == 1);
|
2297 venkat.puvvada 1.146 className = qe.getClassPathList()[0].getClassName().getString();
|
2298 venkat.puvvada 1.145 }
2299 catch(QueryException&)
2300 {
2301 // We should never get query parsing exceptions, IndicationService
2302 // already performed this checking.
2303 PEGASUS_ASSERT(0);
2304 }
|
2305 venkat.puvvada 1.146 return className;
|
2306 venkat.puvvada 1.145 }
2307
|
2308 venkat.puvvada 1.108 Message * CMPIProviderManager::handleCreateSubscriptionRequest(
2309 const Message * message)
|
2310 marek 1.63 {
|
2311 ms.aruran 1.115 PEG_METHOD_ENTER(
2312 TRC_PROVIDERMANAGER,
2313 "CMPIProviderManager::handleCreateSubscriptionRequest()");
|
2314 marek 1.63
2315 HandlerIntroInd(CreateSubscription,message,request,response,
|
2316 venkat.puvvada 1.108 handler);
2317 try
2318 {
|
2319 marek 1.63 CIMInstance req_provider, req_providerModule;
|
2320 kumpf 1.151 ProviderIdContainer pidc =
|
2321 venkat.puvvada 1.108 (ProviderIdContainer)request->operationContext.get(
2322 ProviderIdContainer::NAME);
|
2323 marek 1.63 req_provider = pidc.getProvider();
2324 req_providerModule = pidc.getModule();
2325
2326 String providerName,providerLocation;
2327 LocateIndicationProviderNames(req_provider, req_providerModule,
|
2328 venkat.puvvada 1.108 providerName,providerLocation);
|
2329 marek 1.63
|
2330 thilo.boehm 1.138 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
|
2331 marek 1.129 "CMPIProviderManager::handleCreateSubscriptionRequest"
2332 " - Host name: %s Name space: %s Provider name(s): %s",
2333 (const char*) System::getHostName().getCString(),
2334 (const char*) request->nameSpace.getString().getCString(),
2335 (const char*) providerName.getCString()));
|
2336 marek 1.63
2337 Boolean remote=false;
|
2338 venkat.puvvada 1.132 OpProviderHolder ph;
|
2339 s.kodali 1.151.2.2 String remoteInfo;
|
2340 venkat.puvvada 1.108 if ((remote=pidc.isRemoteNameSpace()))
2341 {
2342 ph = providerManager.getRemoteProvider(
2343 providerLocation, providerName);
|
2344 s.kodali 1.151.2.2 remoteInfo = pidc.getRemoteInfo();
|
2345 marek 1.63 }
|
2346 venkat.puvvada 1.108 else
2347 {
2348 // get cached or load new provider module
2349 ph = providerManager.getProvider(
2350 providerLocation, providerName);
|
2351 marek 1.63 }
2352
2353 //
2354 // Save the provider instance from the request
2355 //
2356 ph.GetProvider ().setProviderInstance (req_provider);
2357
2358 // convert arguments
2359 OperationContext context;
2360 context.insert(request->operationContext.get(IdentityContainer::NAME));
|
2361 venkat.puvvada 1.108 context.insert(
2362 request->operationContext.get(AcceptLanguageListContainer::NAME));
2363 context.insert(
2364 request->operationContext.get(ContentLanguageListContainer::NAME));
2365 context.insert(
2366 request->operationContext.get(SubscriptionInstanceContainer::NAME));
2367 context.insert(
2368 request->operationContext.get(
2369 SubscriptionFilterConditionContainer::NAME));
|
2370 marek 1.63
|
2371 kumpf 1.151 CIMObjectPath subscriptionName =
|
2372 venkat.puvvada 1.108 request->subscriptionInstance.getPath();
|
2373 marek 1.63
2374 CMPIProvider & pr=ph.GetProvider();
2375
2376 CMPIStatus rc={CMPI_RC_OK,NULL};
2377 CMPI_ContextOnStack eCtx(context);
|
2378 kumpf 1.151 SubscriptionFilterConditionContainer sub_cntr =
|
2379 venkat.puvvada 1.108 request->operationContext.get(
2380 SubscriptionFilterConditionContainer::NAME);
2381
|
2382 kumpf 1.151 CIMOMHandleQueryContext *_context=
|
2383 venkat.puvvada 1.108 new CIMOMHandleQueryContext(
2384 CIMNamespaceName(
2385 request->nameSpace.getString()),
|
2386 venkat.puvvada 1.132 *pr.getCIMOMHandle());
|
2387 venkat.puvvada 1.108
2388 CMPI_SelectExp *eSelx=new CMPI_SelectExp(
2389 context,
2390 _context,
2391 request->query,
2392 sub_cntr.getQueryLanguage());
|
2393 marek 1.63
|
2394 s.kodali 1.151.2.2 IndProvRecord *indProvRec=NULL;
2395 const CIMObjectPath &sPath=request->subscriptionInstance.getPath();
|
2396 marek 1.63
|
2397 s.kodali 1.151.2.2 {
2398 WriteLock lock(rwSemProvTab);
2399 indProvTab.lookup(pr.getName(), indProvRec);
2400 if (indProvRec == NULL)
2401 {
2402 indProvRec = new IndProvRecord();
2403 #ifdef PEGASUS_ENABLE_REMOTE_CMPI
2404 if (remote)
2405 {
2406 indProvRec->setRemoteInfo(
2407 (const char*)remoteInfo.getCString());
2408 }
2409 #endif
2410 indProvTab.insert(pr.getName(), indProvRec);
2411 }
2412 // Note that per provider subscription path MUST be unique.
2413 Boolean ok = indProvRec->addSelectExp(sPath, eSelx);
2414 PEGASUS_ASSERT(ok);
2415 }
2416
|
2417 venkat.puvvada 1.132 CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
|
2418 marek 1.63
|
2419 venkat.puvvada 1.145 String lang(sub_cntr.getQueryLanguage());
2420 CString className = _getClassNameFromQuery(
|
2421 kumpf 1.151 _context,
|
2422 venkat.puvvada 1.145 request->query,
2423 lang).getCString();
|
2424 kumpf 1.151
|
2425 venkat.puvvada 1.145 CIMObjectPath indClassPath(
2426 System::getHostName(),
2427 request->nameSpace,
2428 (const char*)className);
2429
2430 eSelx->classNames.append(indClassPath);
|
2431 marek 1.63
2432 CIMPropertyList propertyList = request->propertyList;
|
2433 venkat.puvvada 1.108 if (!propertyList.isNull())
2434 {
2435 Array<CIMName> p=propertyList.getPropertyNameArray();
2436 int pCount=p.size();
2437 eSelx->props = new const char*[1+pCount];
2438 for (int i=0; i<pCount; i++)
2439 {
2440 eSelx->props[i]=strdup(p[i].getString().getCString());
2441 }
2442 eSelx->props[pCount]=NULL;
|
2443 marek 1.63 }
2444
|
2445 marek 1.124 // includeQualifiers and includeClassOrigin not of interest for
2446 // this type of request
2447 _setupCMPIContexts(
|
2448 kumpf 1.79 &eCtx,
|
2449 marek 1.124 &context,
2450 &pidc,
2451 request->nameSpace.getString(),
2452 remote);
|
2453 marek 1.63
2454 CMPIProvider::pm_service_op_lock op_lock(&pr);
2455
|
2456 thilo.boehm 1.143 PEG_TRACE((
2457 TRC_PROVIDERMANAGER,
2458 Tracer::LEVEL2,
2459 "Calling provider.createSubscriptionRequest: %s",
2460 (const char*)pr.getName().getCString()));
2461
|
2462 venkat.puvvada 1.145 Boolean filterActivated = false;
|
2463 kumpf 1.92 {
|
2464 thilo.boehm 1.144 AutoPThreadSecurity threadLevelSecurity(request->operationContext);
2465
|
2466 kumpf 1.92 StatProviderTimeMeasurement providerTime(response);
|
2467 s.kodali 1.151.2.2
|
2468 venkat.puvvada 1.145 // Call activateFilter() on each subclass name, Check if atleast one
2469 // filter can be activated for any of the subclasses.
2470 for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
2471 {
2472 CIMObjectPath classPath(
2473 System::getHostName(),
2474 request->nameSpace,
2475 request->classNames[i]);
2476
2477 CMPI_ObjectPathOnStack eRef(classPath);
2478
2479 if (pr.getIndMI()->ft->ftVersion >= 100)
2480 {
2481 rc = pr.getIndMI()->ft->activateFilter(
2482 pr.getIndMI(),
2483 &eCtx,
2484 eSelx,
2485 CHARS(className),
2486 &eRef,
|
2487 s.kodali 1.151.2.2 i == 0);
|
2488 venkat.puvvada 1.145 }
2489 else
2490 {
2491 // Older version of (pre 1.00) also pass in a CMPIResult
|
2492 kumpf 1.92
|
2493 venkat.puvvada 1.145 rc = ((CMPIStatus (*)(
2494 CMPIIndicationMI*,
2495 CMPIContext*,
2496 CMPIResult*,
2497 CMPISelectExp*,
2498 const char *,
2499 CMPIObjectPath*,
2500 CMPIBoolean))pr.getIndMI()->ft->activateFilter)
2501 (pr.getIndMI(),
2502 &eCtx,
2503 NULL,
2504 eSelx,
2505 CHARS(className),
2506 &eRef,
|
2507 s.kodali 1.151.2.2 i == 0);
|
2508 venkat.puvvada 1.145 }
|
2509 s.kodali 1.151.2.2
|
2510 venkat.puvvada 1.145 if (rc.rc == CMPI_RC_OK)
2511 {
2512 filterActivated = true;
2513 eSelx->classNames.append(classPath);
2514 }
2515 else
2516 {
2517 PEG_TRACE((
2518 TRC_PROVIDERMANAGER,
2519 Tracer::LEVEL2,
2520 "activateFilter() for class %s in namespace %s "
2521 "failed. Error : %s",
2522 CHARS(classPath.getClassName().
2523 getString().getCString()),
2524 CHARS(request->nameSpace.getString().getCString()),
2525 rc.msg ? CMGetCharsPtr(rc.msg, NULL) : "Unknown"));
2526 }
|
2527 kumpf 1.92 }
2528 }
|
2529 marek 1.63
|
2530 thilo.boehm 1.143 PEG_TRACE((
2531 TRC_PROVIDERMANAGER,
2532 Tracer::LEVEL2,
2533 "Returning from provider.createSubscriptionRequest: %s",
2534 (const char*)pr.getName().getCString()));
2535
|
2536 dave.sudlik 1.99 // Need to save ContentLanguage value into operation context of response
|
2537 kumpf 1.151 // Do this before checking rc from provider to throw exception in case
|
2538 dave.sudlik 1.99 // rc.msg is also localized.
2539 CMPIStatus tmprc={CMPI_RC_OK,NULL};
|
2540 kumpf 1.151 CMPIData cldata =
|
2541 venkat.puvvada 1.108 eCtx.ft->getEntry (&eCtx, CMPIContentLanguage, &tmprc);
|
2542 dave.sudlik 1.99 if (tmprc.rc == CMPI_RC_OK)
2543 {
2544 response->operationContext.set(
2545 ContentLanguageListContainer(
|
2546 venkat.puvvada 1.108 ContentLanguageList(
2547 LanguageParser::parseContentLanguageHeader(
|
2548 s.kodali 1.137 CMGetCharsPtr(cldata.value.string, NULL)))));
|
2549 dave.sudlik 1.99 }
2550
|
2551 venkat.puvvada 1.145 if (!filterActivated)
|
2552 marek 1.63 {
|
2553 s.kodali 1.151.2.2 // Remove the select expression from the cache
2554 WriteLock lock(rwSemProvTab);
2555 Boolean ok = indProvRec->deleteSelectExp(sPath);
2556 PEGASUS_ASSERT(ok);
2557 delete eSelx;
2558
|
2559 venkat.puvvada 1.108 throw CIMException((CIMStatusCode)rc.rc,
|
2560 s.kodali 1.137 rc.msg ? CMGetCharsPtr(rc.msg, NULL) : String::EMPTY);
|
2561 marek 1.63 }
2562 else
2563 {
2564 //
2565 // Increment count of current subscriptions for this provider
2566 //
2567 if (ph.GetProvider ().testIfZeroAndIncrementSubscriptions ())
2568 {
2569 //
2570 // If there were no current subscriptions before the increment,
2571 // the first subscription has been created
2572 // Call the provider's enableIndications method
2573 //
2574 if (_subscriptionInitComplete)
2575 {
2576 _callEnableIndications (req_provider, _indicationCallback,
|
2577 marek 1.124 ph, (const char*)pidc.getRemoteInfo().getCString());
|
2578 marek 1.63 }
2579 }
2580 }
2581 }
2582 HandlerCatch(handler);
2583
2584 PEG_METHOD_EXIT();
2585
2586 return(response);
2587 }
2588
|
2589 venkat.puvvada 1.108 Message * CMPIProviderManager::handleDeleteSubscriptionRequest(
2590 const Message * message)
|
2591 marek 1.63 {
|
2592 ms.aruran 1.115 PEG_METHOD_ENTER(
2593 TRC_PROVIDERMANAGER,
2594 "CMPIProviderManager::handleDeleteSubscriptionRequest()");
|
2595 marek 1.63
2596 HandlerIntroInd(DeleteSubscription,message,request,response,
|
2597 venkat.puvvada 1.108 handler);
2598 try
2599 {
|
2600 marek 1.63 String providerName,providerLocation;
2601
2602 CIMInstance req_provider, req_providerModule;
|
2603 kumpf 1.151 ProviderIdContainer pidc =
|
2604 venkat.puvvada 1.108 (ProviderIdContainer)request->operationContext.get(
2605 ProviderIdContainer::NAME);
|
2606 marek 1.63 req_provider = pidc.getProvider();
2607 req_providerModule = pidc.getModule();
2608
2609 LocateIndicationProviderNames(req_provider, req_providerModule,
|
2610 venkat.puvvada 1.108 providerName,providerLocation);
|
2611 marek 1.63
|
2612 thilo.boehm 1.138 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
|
2613 marek 1.129 "CMPIProviderManager::handleDeleteSubscriptionRequest"
2614 " - Host name: %s Name space: %s Provider name(s): %s",
2615 (const char*) System::getHostName().getCString(),
2616 (const char*) request->nameSpace.getString().getCString(),
2617 (const char*) providerName.getCString()));
|
2618 marek 1.63
2619 Boolean remote=false;
|
2620 venkat.puvvada 1.132 OpProviderHolder ph;
|
2621 marek 1.63
|
2622 venkat.puvvada 1.108 if ((remote=pidc.isRemoteNameSpace()))
2623 {
2624 ph = providerManager.getRemoteProvider(
2625 providerLocation, providerName);
|
2626 marek 1.63 }
|
2627 venkat.puvvada 1.108 else
2628 {
2629 // get cached or load new provider module
2630 ph = providerManager.getProvider(
2631 providerLocation, providerName);
|
2632 marek 1.63 }
2633
|
2634 s.kodali 1.151.2.2 const CIMObjectPath &sPath=request->subscriptionInstance.getPath();
2635 IndProvRecord *indProvRec=NULL;
2636 CMPIProvider & pr = ph.GetProvider();
2637 CMPI_SelectExp *eSelx=NULL;
|
2638 marek 1.95 {
|
2639 s.kodali 1.151.2.2 WriteLock lock(rwSemProvTab);
2640 indProvTab.lookup(pr.getName(),indProvRec);
2641 if (!indProvRec->lookupSelectExp(sPath, eSelx))
|
2642 venkat.puvvada 1.108 {
|
2643 s.kodali 1.151.2.2 MessageLoaderParms parms(
2644 "ProviderManager.CMPI.CMPIProviderManager."
2645 "FAILED_LOCATE_SUBSCRIPTION_FILTER",
2646 "Failed to locate the subscription filter.");
2647 // failed to get select expression from hash table
2648 throw CIMException(CIM_ERR_FAILED, parms);
|
2649 venkat.puvvada 1.108 }
|
2650 s.kodali 1.151.2.2 Boolean ok = indProvRec->deleteSelectExp(sPath);
2651 PEGASUS_ASSERT(ok);
|
2652 marek 1.95 }
|
2653 marek 1.63
2654
|
2655 venkat.puvvada 1.145 CString className = eSelx->classNames[0].getClassName().
2656 getString().getCString();
2657
|
2658 marek 1.63 // convert arguments
2659 OperationContext context;
2660 context.insert(request->operationContext.get(IdentityContainer::NAME));
|
2661 venkat.puvvada 1.108 context.insert(
2662 request->operationContext.get(AcceptLanguageListContainer::NAME));
2663 context.insert(
2664 request->operationContext.get(ContentLanguageListContainer::NAME));
2665 context.insert(
2666 request->operationContext.get(SubscriptionInstanceContainer::NAME));
|
2667 marek 1.63
|
2668 kumpf 1.151 CIMObjectPath subscriptionName =
|
2669 venkat.puvvada 1.108 request->subscriptionInstance.getPath();
|
2670 marek 1.63
2671 CMPIStatus rc={CMPI_RC_OK,NULL};
2672 CMPI_ContextOnStack eCtx(context);
|
2673 venkat.puvvada 1.132 CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
|
2674 marek 1.63
|
2675 marek 1.124 // includeQualifiers and includeClassOrigin not of interest for
2676 // this type of request
2677 _setupCMPIContexts(
|
2678 venkat.puvvada 1.108 &eCtx,
|
2679 marek 1.124 &context,
2680 &pidc,
2681 request->nameSpace.getString(),
2682 remote);
|
2683 marek 1.63
2684 CMPIProvider::pm_service_op_lock op_lock(&pr);
2685
|
2686 thilo.boehm 1.143 PEG_TRACE((
2687 TRC_PROVIDERMANAGER,
2688 Tracer::LEVEL2,
2689 "Calling provider.deleteSubscriptionRequest: %s",
2690 (const char*)pr.getName().getCString()));
2691
|
2692 kumpf 1.92 {
|
2693 thilo.boehm 1.144 AutoPThreadSecurity threadLevelSecurity(request->operationContext);
2694
|
2695 kumpf 1.92 StatProviderTimeMeasurement providerTime(response);
2696
|
2697 venkat.puvvada 1.145 Array<CIMObjectPath> subClassPaths = eSelx->classNames;
2698 // Call deactivateFilter() for each subclass name those were
2699 // activated previously using activateFilter().
2700 // Note: Start from Index 1, first name is actual class name in
2701 // the FROM clause of filter query.
2702 for (Uint32 i = 1, n = eSelx->classNames.size(); i < n ; ++i)
2703 {
2704 CMPI_ObjectPathOnStack eRef(eSelx->classNames[i]);
2705 if (pr.getIndMI()->ft->ftVersion >= 100)
2706 {
2707 rc = pr.getIndMI()->ft->deActivateFilter(
2708 pr.getIndMI(),
2709 &eCtx,
2710 eSelx,
2711 CHARS(className),
2712 &eRef,
|
2713 s.kodali 1.151.2.2 i == n - 1);
|
2714 venkat.puvvada 1.145 }
2715 else
2716 {
2717 // Older version of (pre 1.00) also pass in a CMPIResult
|
2718 marek 1.63
|
2719 venkat.puvvada 1.145 rc = ((CMPIStatus (*)(
2720 CMPIIndicationMI*,
2721 CMPIContext*,
2722 CMPIResult*,
2723 CMPISelectExp*,
|
2724 kumpf 1.151 const char *,
|
2725 venkat.puvvada 1.145 CMPIObjectPath*,
2726 CMPIBoolean)) pr.getIndMI()->ft->deActivateFilter)(
2727 pr.getIndMI(),
2728 &eCtx,
2729 NULL,
2730 eSelx,
2731 CHARS(className),
2732 &eRef,
|
2733 s.kodali 1.151.2.2 i == n - 1);
|
2734 venkat.puvvada 1.145 }
2735 if (rc.rc != CMPI_RC_OK)
2736 {
2737 PEG_TRACE((
2738 TRC_PROVIDERMANAGER,
2739 Tracer::LEVEL2,
2740 "deactivateFilter() for class %s in namespace %s"
2741 "failed. Error : %s",
2742 CHARS(eSelx->classNames[i].getClassName().
2743 getString().getCString()),
2744 CHARS(request->nameSpace.getString().getCString()),
2745 rc.msg ? CMGetCharsPtr(rc.msg, NULL) : "Unknown"));
2746 }
|
2747 kumpf 1.92 }
2748 }
|
2749 marek 1.63
|
2750 thilo.boehm 1.143 PEG_TRACE((
2751 TRC_PROVIDERMANAGER,
2752 Tracer::LEVEL2,
2753 "Returning from provider.deleteSubscriptionRequest: %s",
2754 (const char*)pr.getName().getCString()));
2755
|
2756 s.kodali 1.151.2.2 delete eSelx;
|
2757 marek 1.63
|
2758 dave.sudlik 1.99 // Need to save ContentLanguage value into operation context of response
|
2759 kumpf 1.151 // Do this before checking rc from provider to throw exception in case
|
2760 dave.sudlik 1.99 // rc.msg is also localized.
2761 CMPIStatus tmprc={CMPI_RC_OK,NULL};
|
2762 kumpf 1.151 CMPIData cldata =
|
2763 venkat.puvvada 1.108 eCtx.ft->getEntry (&eCtx, CMPIContentLanguage, &tmprc);
|
2764 dave.sudlik 1.99 if (tmprc.rc == CMPI_RC_OK)
2765 {
2766 response->operationContext.set(
2767 ContentLanguageListContainer(
|
2768 venkat.puvvada 1.108 ContentLanguageList(
2769 LanguageParser::parseContentLanguageHeader(
|
2770 s.kodali 1.137 CMGetCharsPtr(cldata.value.string, NULL)))));
|
2771 dave.sudlik 1.99 }
2772
|
2773 marek 1.63 if (rc.rc!=CMPI_RC_OK)
2774 {
|
2775 venkat.puvvada 1.108 throw CIMException((CIMStatusCode)rc.rc,
|
2776 s.kodali 1.137 rc.msg ? CMGetCharsPtr(rc.msg, NULL) : String::EMPTY);
|
2777 marek 1.63 }
2778 else
2779 {
2780 //
2781 // Decrement count of current subscriptions for this provider
2782 //
2783 if (ph.GetProvider ().decrementSubscriptionsAndTestIfZero ())
2784 {
|
2785 s.kodali 1.151.2.2 Boolean callDisable = false;
2786 {
2787 WriteLock lock(rwSemProvTab);
2788 if (!indProvRec->getSelectExpCount())
2789 {
2790 indProvTab.remove(pr.getName());
2791 delete indProvRec;
2792 callDisable = true;
2793 }
2794 }
2795
|
2796 marek 1.63 //
2797 // If there are no current subscriptions after the decrement,
2798 // the last subscription has been deleted
2799 // Call the provider's disableIndications method
2800 //
|
2801 s.kodali 1.151.2.2 if (_subscriptionInitComplete && callDisable)
|
2802 marek 1.63 {
|
2803 marek 1.124 _callDisableIndications(
2804 ph,
2805 (const char*)pidc.getRemoteInfo().getCString());
|
2806 marek 1.63 }
2807 }
2808 }
2809 }
2810 HandlerCatch(handler);
2811
2812 PEG_METHOD_EXIT();
2813
2814 return(response);
2815 }
2816
|
2817 venkat.puvvada 1.108 Message * CMPIProviderManager::handleDisableModuleRequest(
2818 const Message * message)
|
2819 marek 1.63 {
|
2820 ms.aruran 1.115 PEG_METHOD_ENTER(
2821 TRC_PROVIDERMANAGER,
2822 "CMPIProviderManager::handleDisableModuleRequest()");
|
2823 marek 1.63
2824 CIMDisableModuleRequestMessage * request =
|
2825 venkat.puvvada 1.108 dynamic_cast<CIMDisableModuleRequestMessage *>(
2826 const_cast<Message *>(message));
|
2827 marek 1.63
2828 PEGASUS_ASSERT(request != 0);
2829
|
2830 venkat.puvvada 1.133 //Set to false when provider refused to unload due to pending operations.
2831 Boolean disableModuleOk = true;
2832
|
2833 marek 1.63 // get provider module name
2834 Boolean disableProviderOnly = request->disableProviderOnly;
2835
2836 //
2837 // Unload providers
2838 //
2839 Array<CIMInstance> _pInstances = request->providers;
2840 Array <Boolean> _indicationProviders = request->indicationProviders;
|
2841 kumpf 1.151 /* The CIMInstances on request->providers array is completly _different_
|
2842 venkat.puvvada 1.108 than the request->providerModule CIMInstance. Hence */
|
2843 marek 1.63
|
2844 konrad.r 1.69 String physicalName=(request->providerModule.getProperty(
|
2845 venkat.puvvada 1.108 request->
2846 providerModule.findProperty("Location")).getValue().toString());
|
2847 marek 1.63
|
2848 venkat.puvvada 1.108 for (Uint32 i = 0, n = _pInstances.size(); i < n; i++)
|
2849 marek 1.63 {
2850 String providerName;
|
2851 marek 1.139 _pInstances[i].getProperty(_pInstances [i].findProperty
2852 (PEGASUS_PROPERTYNAME_NAME)).getValue().get(providerName);
|
2853 marek 1.63
|
2854 marek 1.139 Uint32 pos = _pInstances[i].findProperty(PEGASUS_PROPERTYNAME_NAME);
|
2855 marek 1.63
|
2856 venkat.puvvada 1.128 if (!providerManager.isProviderActive(providerName))
2857 {
2858 continue;
|
2859 venkat.puvvada 1.133 }
|
2860 kumpf 1.151
|
2861 venkat.puvvada 1.133 Boolean unloadOk = providerManager.unloadProvider(
|
2862 kumpf 1.151 physicalName,
|
2863 venkat.puvvada 1.133 _pInstances[i].getProperty(
|
2864 marek 1.139 _pInstances[i].findProperty(PEGASUS_PROPERTYNAME_NAME)
|
2865 venkat.puvvada 1.133 ).getValue ().toString ());
2866
2867 if (!unloadOk)
2868 {
2869 disableModuleOk = false;
2870 continue;
2871 }
|
2872 marek 1.63 //
2873 // Reset the indication provider's count of current
2874 // subscriptions since it has been disabled
2875 //
2876 if (_indicationProviders [i])
2877 {
2878 if (physicalName.size () > 0)
2879 {
|
2880 venkat.puvvada 1.108 try
2881 {
|
2882 kumpf 1.151 OpProviderHolder ph =
|
2883 venkat.puvvada 1.108 providerManager.getProvider(
|
2884 kumpf 1.151 physicalName,
|
2885 venkat.puvvada 1.108 providerName);
2886 ph.GetProvider ().resetSubscriptions ();
|
2887 s.kodali 1.151.2.2
2888 // Remove from IndProvRecord table
2889 IndProvRecord *rec = 0;
2890 WriteLock lock(rwSemProvTab);
2891 indProvTab.lookup(ph.GetProvider().getName(), rec);
2892 delete rec;
2893 indProvTab.remove(ph.GetProvider().getName());
|
2894 venkat.puvvada 1.108 }
2895 catch (const Exception &e)
2896 {
|
2897 thilo.boehm 1.138 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
2898 "Exception during reset subscriptions on indication "
|
2899 kumpf 1.151 "provider %s: %s",
|
2900 thilo.boehm 1.138 (const char*)providerName.getCString(),
2901 (const char*)e.getMessage().getCString()));
|
2902 venkat.puvvada 1.108 }
|
2903 marek 1.63 }
2904 }
2905 }
2906
|
2907 kumpf 1.123 CIMDisableModuleResponseMessage* response =
2908 dynamic_cast<CIMDisableModuleResponseMessage*>(
2909 request->buildResponse());
|
2910 marek 1.63 PEGASUS_ASSERT(response != 0);
|
2911 venkat.puvvada 1.133
2912 if (disableModuleOk)
2913 {
2914 response->operationalStatus.append(
2915 CIM_MSE_OPSTATUS_VALUE_STOPPED);
2916 }
2917 else
2918 {
2919 response->operationalStatus.append(
2920 CIM_MSE_OPSTATUS_VALUE_OK);
2921 }
|
2922 marek 1.63
2923 PEG_METHOD_EXIT();
2924
2925 return(response);
2926 }
2927
|
2928 venkat.puvvada 1.108 Message * CMPIProviderManager::handleEnableModuleRequest(
2929 const Message * message)
|
2930 marek 1.63 {
|
2931 ms.aruran 1.115 PEG_METHOD_ENTER(
2932 TRC_PROVIDERMANAGER,
2933 "CMPIProviderManager::handleEnableModuleRequest()");
|
2934 marek 1.63
2935 CIMEnableModuleRequestMessage * request =
|
2936 venkat.puvvada 1.108 dynamic_cast<CIMEnableModuleRequestMessage *>(
2937 const_cast<Message *>(message));
|
2938 marek 1.63
2939 PEGASUS_ASSERT(request != 0);
2940
2941 Array<Uint16> operationalStatus;
2942 operationalStatus.append(CIM_MSE_OPSTATUS_VALUE_OK);
2943
|
2944 kumpf 1.123 CIMEnableModuleResponseMessage* response =
2945 dynamic_cast<CIMEnableModuleResponseMessage*>(
2946 request->buildResponse());
|
2947 marek 1.63 PEGASUS_ASSERT(response != 0);
|
2948 kumpf 1.123 response->operationalStatus = operationalStatus;
|
2949 marek 1.63
2950 PEG_METHOD_EXIT();
2951
2952 return(response);
2953 }
2954
|
2955 venkat.puvvada 1.108 Message * CMPIProviderManager::handleStopAllProvidersRequest(
2956 const Message * message)
|
2957 marek 1.63 {
|
2958 ms.aruran 1.115 PEG_METHOD_ENTER(
2959 TRC_PROVIDERMANAGER,
2960 "CMPIProviderManager::handleStopAllProvidersRequest()");
|
2961 marek 1.63
2962 CIMStopAllProvidersRequestMessage * request =
|
2963 venkat.puvvada 1.108 dynamic_cast<CIMStopAllProvidersRequestMessage *>(
2964 const_cast<Message *>(message));
|
2965 marek 1.63
2966 PEGASUS_ASSERT(request != 0);
2967
|
2968 kumpf 1.123 CIMStopAllProvidersResponseMessage* response =
2969 dynamic_cast<CIMStopAllProvidersResponseMessage*>(
2970 request->buildResponse());
|
2971 marek 1.63 PEGASUS_ASSERT(response != 0);
2972
2973 // tell the provider manager to shutdown all the providers
2974 providerManager.shutdownAllProviders();
2975
2976 PEG_METHOD_EXIT();
2977
2978 return(response);
2979 }
2980
|
2981 venkat.puvvada 1.108 Message * CMPIProviderManager::handleSubscriptionInitCompleteRequest(
2982 const Message * message)
|
2983 marek 1.63 {
|
2984 ms.aruran 1.115 PEG_METHOD_ENTER(
2985 TRC_PROVIDERMANAGER,
2986 "CMPIProviderManager::handleSubscriptionInitCompleteRequest()");
|
2987 marek 1.63
2988 CIMSubscriptionInitCompleteRequestMessage * request =
2989 dynamic_cast <CIMSubscriptionInitCompleteRequestMessage *>
|
2990 venkat.puvvada 1.108 (const_cast <Message *> (message));
|
2991 marek 1.63
2992 PEGASUS_ASSERT (request != 0);
2993
2994 CIMSubscriptionInitCompleteResponseMessage * response =
2995 dynamic_cast <CIMSubscriptionInitCompleteResponseMessage *>
|
2996 venkat.puvvada 1.108 (request->buildResponse ());
|
2997 marek 1.63
2998 PEGASUS_ASSERT (response != 0);
2999
3000 //
3001 // Set indicator
3002 //
3003 _subscriptionInitComplete = true;
3004
3005 //
3006 // For each provider that has at least one subscription, call
3007 // provider's enableIndications method
3008 //
3009 Array <CMPIProvider *> enableProviders;
3010 enableProviders = providerManager.getIndicationProvidersToEnable ();
3011
3012 Uint32 numProviders = enableProviders.size ();
3013 for (Uint32 i = 0; i < numProviders; i++)
3014 {
3015 try
3016 {
3017 CIMInstance provider;
3018 marek 1.63 provider = enableProviders [i]->getProviderInstance ();
3019
|
3020 venkat.puvvada 1.110 CString info;
3021 #ifdef PEGASUS_ENABLE_REMOTE_CMPI
|
3022 s.kodali 1.151.2.2 IndProvRecord *provRec = 0;
3023 if (indProvTab.lookup (enableProviders [i]->getName(), provRec))
|
3024 venkat.puvvada 1.110 {
|
3025 s.kodali 1.151.2.2 if (provRec->getRemoteInfo() != String::EMPTY)
|
3026 venkat.puvvada 1.110 {
|
3027 s.kodali 1.151.2.2 info = provRec->getRemoteInfo().getCString();
|
3028 venkat.puvvada 1.110 }
3029 }
3030 #endif
|
3031 marek 1.63 //
3032 // Get cached or load new provider module
3033 //
|
3034 venkat.puvvada 1.132 OpProviderHolder ph;
|
3035 venkat.puvvada 1.110 if ((const char*)info)
3036 {
3037 ph = providerManager.getRemoteProvider
3038 (enableProviders [i]->getModule ()->getFileName (),
3039 enableProviders [i]->getName ());
3040 }
3041 else
3042 {
3043 ph = providerManager.getProvider
3044 (enableProviders [i]->getModule ()->getFileName (),
3045 enableProviders [i]->getName ());
3046 }
|
3047 venkat.puvvada 1.108 _callEnableIndications(
|
3048 kumpf 1.151 provider,
3049 _indicationCallback,
3050 ph,
|
3051 venkat.puvvada 1.108 (const char*)info);
|
3052 marek 1.63 }
|
3053 konrad.r 1.64 catch (const CIMException & e)
|
3054 marek 1.63 {
|
3055 thilo.boehm 1.138 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL1,
3056 "CIMException: %s",(const char*)e.getMessage().getCString()));
|
3057 marek 1.63 }
|
3058 konrad.r 1.64 catch (const Exception & e)
|
3059 marek 1.63 {
|
3060 thilo.boehm 1.138 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL1,
3061 "Exception: %s",(const char*)e.getMessage().getCString()));
|
3062 marek 1.63 }
|
3063 venkat.puvvada 1.108 catch (...)
|
3064 marek 1.63 {
|
3065 ms.aruran 1.115 PEG_TRACE_CSTRING(
3066 TRC_PROVIDERMANAGER,
|
3067 marek 1.131 Tracer::LEVEL1,
|
3068 marek 1.63 "Unknown error in handleSubscriptionInitCompleteRequest");
3069 }
3070 }
3071
3072 PEG_METHOD_EXIT ();
|
3073 venkat.puvvada 1.108 return(response);
|
3074 marek 1.63 }
3075
|
3076 venkat.puvvada 1.108 Message * CMPIProviderManager::handleGetPropertyRequest(
3077 const Message * message)
|
3078 dave.sudlik 1.98 {
|
3079 ms.aruran 1.115 PEG_METHOD_ENTER(
3080 TRC_PROVIDERMANAGER,
3081 "CMPIProviderManager::handleGetPropertyRequest()");
|
3082 dave.sudlik 1.98
3083 HandlerIntro(GetProperty,message,request,response,handler);
3084
3085 // We're only going to be interested in the specific property from this
3086 // instance.
3087 Array<CIMName> localPropertyListArray;
3088 localPropertyListArray.append(request->propertyName);
3089 CIMPropertyList localPropertyList(localPropertyListArray);
3090
3091 // NOTE: GetProperty will use the CIMInstanceProvider interface, so we
|
3092 kumpf 1.151 // must manually define a request, response, and handler (emulate
|
3093 dave.sudlik 1.98 // HandlerIntro macro)
|
3094 kumpf 1.151 CIMGetInstanceRequestMessage * GI_request =
|
3095 dave.sudlik 1.98 new CIMGetInstanceRequestMessage(
|
3096 kumpf 1.151 request->messageId,
|
3097 venkat.puvvada 1.108 request->nameSpace,
3098 request->instanceName,
3099 false,
3100 false,
3101 false,
3102 localPropertyList,
3103 request->queueIds,
3104 request->authType,
3105 request->userName
3106 );
|
3107 dave.sudlik 1.98
|
3108 kumpf 1.151 PEGASUS_ASSERT(GI_request != 0);
|
3109 dave.sudlik 1.98
|
3110 kumpf 1.151 CIMGetInstanceResponseMessage * GI_response =
|
3111 venkat.puvvada 1.108 dynamic_cast<CIMGetInstanceResponseMessage*>
3112 (GI_request->buildResponse());
|
3113 dave.sudlik 1.98
|
3114 kumpf 1.151 PEGASUS_ASSERT(GI_response != 0);
|
3115 dave.sudlik 1.98
|
3116 venkat.puvvada 1.108 GetInstanceResponseHandler GI_handler(
|
3117 kumpf 1.151 GI_request,
3118 GI_response,
|
3119 venkat.puvvada 1.108 _responseChunkCallback);
|
3120 dave.sudlik 1.98
|
3121 venkat.puvvada 1.108 try
|
3122 dave.sudlik 1.98 {
|
3123 thilo.boehm 1.138 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
|
3124 marek 1.129 "CMPIProviderManager::handleGetPropertyRequest"
3125 " - Host name: %s Name space: %s "
3126 "Class name: %s Property name: %s",
3127 (const char*) System::getHostName().getCString(),
3128 (const char*) request->nameSpace.getString().getCString(),
3129 (const char*)
3130 request->instanceName.getClassName().getString().getCString(),
3131 (const char*) request->propertyName.getString().getCString()));
|
3132 kumpf 1.151
|
3133 dave.sudlik 1.98 // make target object path
3134 CIMObjectPath objectPath(
3135 System::getHostName(),
3136 request->nameSpace,
3137 request->instanceName.getClassName(),
3138 request->instanceName.getKeyBindings());
3139
3140 Boolean remote=false;
|
3141 venkat.puvvada 1.132 OpProviderHolder ph;
|
3142 dave.sudlik 1.98
3143 // resolve provider name
|
3144 kumpf 1.151 ProviderIdContainer pidc =
|
3145 venkat.puvvada 1.108 request->operationContext.get(ProviderIdContainer::NAME);
|
3146 dave.sudlik 1.98 ProviderName name = _resolveProviderName(pidc);
3147
|
3148 venkat.puvvada 1.108 if ((remote=pidc.isRemoteNameSpace()))
3149 {
3150 ph = providerManager.getRemoteProvider(
3151 name.getLocation(), name.getLogicalName());
|
3152 dave.sudlik 1.98 }
|
3153 venkat.puvvada 1.108 else
3154 {
3155 // get cached or load new provider module
3156 ph = providerManager.getProvider(
3157 name.getPhysicalName(), name.getLogicalName());
|
3158 dave.sudlik 1.98 }
3159
3160 // convert arguments
3161 OperationContext context;
3162
3163 context.insert(request->operationContext.get(IdentityContainer::NAME));
|
3164 venkat.puvvada 1.108 context.insert(
3165 request->operationContext.get(AcceptLanguageListContainer::NAME));
3166 context.insert(
3167 request->operationContext.get(ContentLanguageListContainer::NAME));
|
3168 dave.sudlik 1.98 // forward request
3169 CMPIProvider & pr=ph.GetProvider();
3170
|
3171 venkat.puvvada 1.121 AutoPtr<NormalizerContext> tmpNormalizerContext(
|
3172 venkat.puvvada 1.132 new CIMOMHandleContext(*pr.getCIMOMHandle()));
|
3173 venkat.puvvada 1.121 request->operationContext.insert(
3174 NormalizerContextContainer(tmpNormalizerContext));
|
3175 dave.sudlik 1.98
3176 CMPIStatus rc={CMPI_RC_OK,NULL};
3177 CMPI_ContextOnStack eCtx(context);
3178 CMPI_ObjectPathOnStack eRef(objectPath);
|
3179 venkat.puvvada 1.132 CMPI_ResultOnStack eRes(GI_handler,pr.getBroker());
3180 CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
|
3181 dave.sudlik 1.98
|
3182 kumpf 1.151 // For the getInstance provider call, use the property list that we
|
3183 dave.sudlik 1.98 // created containing the single property from the getProperty call.
3184 CMPIPropertyList props(localPropertyList);
3185
|
3186 kumpf 1.151 // Leave includeQualifiers and includeClassOrigin as false for this
|
3187 venkat.puvvada 1.108 // call to getInstance
|
3188 marek 1.124 _setupCMPIContexts(
|
3189 venkat.puvvada 1.108 &eCtx,
|
3190 marek 1.124 &context,
3191 &pidc,
3192 request->nameSpace.getString(),
3193 remote,
3194 false,
3195 false,
3196 true);
|
3197 dave.sudlik 1.98
3198 CMPIProvider::pm_service_op_lock op_lock(&pr);
3199
|
3200 thilo.boehm 1.143 PEG_TRACE((
3201 TRC_PROVIDERMANAGER,
3202 Tracer::LEVEL2,
3203 "Calling provider.getInstance via getProperty: %s",
3204 (const char*)pr.getName().getCString()));
3205
|
3206 dave.sudlik 1.98 {
|
3207 thilo.boehm 1.144 AutoPThreadSecurity threadLevelSecurity(request->operationContext);
3208
|
3209 dave.sudlik 1.98 StatProviderTimeMeasurement providerTime(response);
3210
|
3211 venkat.puvvada 1.132 rc = pr.getInstMI()->ft->getInstance(
3212 pr.getInstMI(),
3213 &eCtx,
3214 &eRes,
3215 &eRef,
|
3216 dave.sudlik 1.98 (const char **)props.getList());
3217 }
3218
|
3219 thilo.boehm 1.143 PEG_TRACE((
3220 TRC_PROVIDERMANAGER,
3221 Tracer::LEVEL2,
3222 "Returning from provider.getInstance via getProperty: %s",
3223 (const char*)pr.getName().getCString()));
3224
|
3225 dave.sudlik 1.99 // Need to save ContentLanguage value into operation context of response
|
3226 kumpf 1.151 // Do this before checking rc from provider to throw exception in case
|
3227 dave.sudlik 1.99 // rc.msg is also localized.
3228 CMPIStatus tmprc={CMPI_RC_OK,NULL};
|
3229 kumpf 1.151 CMPIData cldata =
|
3230 venkat.puvvada 1.108 eCtx.ft->getEntry (&eCtx, CMPIContentLanguage, &tmprc);
|
3231 dave.sudlik 1.99 if (tmprc.rc == CMPI_RC_OK)
3232 {
3233 response->operationContext.set(
3234 ContentLanguageListContainer(
|
3235 venkat.puvvada 1.108 ContentLanguageList(
3236 LanguageParser::parseContentLanguageHeader(
|
3237 s.kodali 1.137 CMGetCharsPtr(cldata.value.string, NULL)))));
|
3238 dave.sudlik 1.103 handler.setContext(response->operationContext);
|
3239 dave.sudlik 1.99 }
3240
|
3241 dave.sudlik 1.98 if (rc.rc!=CMPI_RC_OK)
|
3242 dave.sudlik 1.102 {
|
3243 venkat.puvvada 1.108 CIMException cimException(
3244 (CIMStatusCode)rc.rc,
|
3245 s.kodali 1.137 rc.msg ? CMGetCharsPtr(rc.msg, NULL) : String::EMPTY);
|
3246 venkat.puvvada 1.108
3247 if (eRes.resError)
3248 {
|
3249 kumpf 1.151 for (CMPI_Error* currErr=eRes.resError;
3250 currErr!=NULL;
|
3251 dave.sudlik 1.102 currErr=currErr->nextError)
|
3252 venkat.puvvada 1.108 {
3253 cimException.addError(
3254 ((CIMError*)currErr->hdl)->getInstance());
3255 }
3256 }
3257 throw cimException;
|
3258 dave.sudlik 1.102 }
|
3259 dave.sudlik 1.98
3260 // Copy property value from instance to getProperty response
|
3261 mike 1.147 if (!(GI_response->getCimInstance().isUninitialized()))
|
3262 dave.sudlik 1.98 {
|
3263 mike 1.147 Uint32 pos = GI_response->getCimInstance().findProperty(
3264 request->propertyName);
|
3265 dave.sudlik 1.98
|
3266 venkat.puvvada 1.108 if (pos != PEG_NOT_FOUND)
|
3267 dave.sudlik 1.98 {
|
3268 kumpf 1.151 response->value =
|
3269 mike 1.147 GI_response->getCimInstance().getProperty(pos).getValue();
|
3270 dave.sudlik 1.98 }
3271 // Else property not found. Return CIM_ERR_NO_SUCH_PROPERTY.
3272 else
3273 {
3274 throw PEGASUS_CIM_EXCEPTION(
3275 CIM_ERR_NO_SUCH_PROPERTY,
3276 request->propertyName.getString()
3277 );
3278 }
3279 }
3280 }
3281 HandlerCatch(handler);
3282
3283 delete GI_request;
3284 delete GI_response;
3285
3286 PEG_METHOD_EXIT();
3287
3288 return(response);
3289 }
3290
|
3291 venkat.puvvada 1.108 Message * CMPIProviderManager::handleSetPropertyRequest(
3292 const Message * message)
|
3293 dave.sudlik 1.98 {
|
3294 ms.aruran 1.115 PEG_METHOD_ENTER(
3295 TRC_PROVIDERMANAGER,
3296 "CMPIProviderManager::handleSetPropertyRequest()");
|
3297 dave.sudlik 1.98
3298 HandlerIntro(SetProperty,message,request,response,handler);
3299
|
3300 kumpf 1.151 // We're only going to be interested in the specific property from this
|
3301 venkat.puvvada 1.108 // instance.
|
3302 dave.sudlik 1.98 Array<CIMName> localPropertyListArray;
3303 localPropertyListArray.append(request->propertyName);
3304 CIMPropertyList localPropertyList(localPropertyListArray);
3305
|
3306 kumpf 1.151 // Build a modified instance with just the specific property and its
|
3307 venkat.puvvada 1.108 // new value.
|
3308 dave.sudlik 1.98 CIMInstance localModifiedInstance(request->instanceName.getClassName());
3309 localModifiedInstance.setPath(request->instanceName);
|
3310 venkat.puvvada 1.108 localModifiedInstance.addProperty(
3311 CIMProperty(request->propertyName, request->newValue));
|
3312 dave.sudlik 1.98
|
3313 venkat.puvvada 1.108 // NOTE: SetProperty will use the CIMInstanceProvider interface, so we must
3314 // manually define a request, response, and handler.
|
3315 kumpf 1.151 CIMModifyInstanceRequestMessage * MI_request =
|
3316 dave.sudlik 1.98 new CIMModifyInstanceRequestMessage(
|
3317 kumpf 1.151 request->messageId,
|
3318 venkat.puvvada 1.108 request->nameSpace,
3319 localModifiedInstance,
3320 false,
3321 localPropertyList,
3322 request->queueIds,
3323 request->authType,
3324 request->userName
3325 );
|
3326 dave.sudlik 1.98
|
3327 kumpf 1.151 PEGASUS_ASSERT(MI_request != 0);
|
3328 dave.sudlik 1.98
|
3329 kumpf 1.151 CIMModifyInstanceResponseMessage * MI_response =
|
3330 venkat.puvvada 1.108 dynamic_cast<CIMModifyInstanceResponseMessage*>(
3331 MI_request->buildResponse());
|
3332 dave.sudlik 1.98
|
3333 kumpf 1.151 PEGASUS_ASSERT(MI_response != 0);
|
3334 dave.sudlik 1.98
|
3335 venkat.puvvada 1.108 ModifyInstanceResponseHandler MI_handler(
|
3336 kumpf 1.151 MI_request,
3337 MI_response,
|
3338 venkat.puvvada 1.108 _responseChunkCallback);
|
3339 dave.sudlik 1.98
|
3340 venkat.puvvada 1.108 try
|
3341 dave.sudlik 1.98 {
|
3342 thilo.boehm 1.138 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
|
3343 marek 1.129 "CMPIProviderManager::handleSetPropertyRequest"
3344 " - Host name: %s Name space: %s "
3345 "Class name: %s Property name: %s",
3346 (const char*) System::getHostName().getCString(),
3347 (const char*) request->nameSpace.getString().getCString(),
3348 (const char*)
3349 request->instanceName.getClassName().getString().getCString(),
3350 (const char*) request->propertyName.getString().getCString()));
|
3351 kumpf 1.151
|
3352 dave.sudlik 1.98 // make target object path
3353 CIMObjectPath objectPath(
3354 System::getHostName(),
3355 request->nameSpace,
3356 request->instanceName.getClassName(),
3357 request->instanceName.getKeyBindings());
3358
3359 Boolean remote=false;
|
3360 venkat.puvvada 1.132 OpProviderHolder ph;
|
3361 dave.sudlik 1.98
3362 // resolve provider name
|
3363 kumpf 1.151 ProviderIdContainer pidc =
|
3364 venkat.puvvada 1.108 request->operationContext.get(ProviderIdContainer::NAME);
|
3365 dave.sudlik 1.98 ProviderName name = _resolveProviderName(pidc);
3366
|
3367 venkat.puvvada 1.108 if ((remote=pidc.isRemoteNameSpace()))
3368 {
3369 ph = providerManager.getRemoteProvider(
3370 name.getLocation(), name.getLogicalName());
|
3371 dave.sudlik 1.98 }
|
3372 venkat.puvvada 1.108 else
3373 {
3374 // get cached or load new provider module
3375 ph = providerManager.getProvider(
3376 name.getPhysicalName(), name.getLogicalName());
|
3377 dave.sudlik 1.98 }
3378
3379 // convert arguments
3380 OperationContext context;
3381
3382 context.insert(request->operationContext.get(IdentityContainer::NAME));
|
3383 venkat.puvvada 1.108 context.insert(
3384 request->operationContext.get(AcceptLanguageListContainer::NAME));
3385 context.insert(
3386 request->operationContext.get(ContentLanguageListContainer::NAME));
|
3387 dave.sudlik 1.98 // forward request
3388 CMPIProvider & pr=ph.GetProvider();
3389
3390 CMPIStatus rc={CMPI_RC_OK,NULL};
3391 CMPI_ContextOnStack eCtx(context);
3392 CMPI_ObjectPathOnStack eRef(objectPath);
|
3393 venkat.puvvada 1.132 CMPI_ResultOnStack eRes(MI_handler,pr.getBroker());
|
3394 dave.sudlik 1.98 CMPI_InstanceOnStack eInst(localModifiedInstance);
|
3395 venkat.puvvada 1.132 CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
|
3396 dave.sudlik 1.98
3397 CMPIPropertyList props(localPropertyList);
3398
3399 // Leave includeQualifiers as false for this call to modifyInstance
|
3400 marek 1.124 _setupCMPIContexts(
|
3401 venkat.puvvada 1.108 &eCtx,
|
3402 marek 1.124 &context,
3403 &pidc,
3404 request->nameSpace.getString(),
3405 remote,
3406 false,
3407 false,
3408 true);
|
3409 dave.sudlik 1.98
3410 CMPIProvider::pm_service_op_lock op_lock(&pr);
3411
|
3412 thilo.boehm 1.143 PEG_TRACE((
3413 TRC_PROVIDERMANAGER,
3414 Tracer::LEVEL2,
3415 "Calling provider.modifyInstance via setProperty: %s",
3416 (const char*)pr.getName().getCString()));
3417
|
3418 dave.sudlik 1.98 {
|
3419 thilo.boehm 1.144 AutoPThreadSecurity threadLevelSecurity(request->operationContext);
3420
|
3421 dave.sudlik 1.98 StatProviderTimeMeasurement providerTime(response);
3422
|
3423 venkat.puvvada 1.132 rc = pr.getInstMI()->ft->modifyInstance(
3424 pr.getInstMI(),
3425 &eCtx,
3426 &eRes,
3427 &eRef,
3428 &eInst,
|
3429 dave.sudlik 1.98 (const char **)props.getList());
3430 }
3431
|
3432 thilo.boehm 1.143 PEG_TRACE((
3433 TRC_PROVIDERMANAGER,
3434 Tracer::LEVEL2,
3435 "Returning from provider.modifyInstance via setProperty: %s",
3436 (const char*)pr.getName().getCString()));
3437
|
3438 dave.sudlik 1.99 // Need to save ContentLanguage value into operation context of response
|
3439 kumpf 1.151 // Do this before checking rc from provider to throw exception in case
|
3440 dave.sudlik 1.99 // rc.msg is also localized.
3441 CMPIStatus tmprc={CMPI_RC_OK,NULL};
|
3442 kumpf 1.151 CMPIData cldata =
|
3443 venkat.puvvada 1.108 eCtx.ft->getEntry (&eCtx, CMPIContentLanguage, &tmprc);
|
3444 dave.sudlik 1.99 if (tmprc.rc == CMPI_RC_OK)
3445 {
3446 response->operationContext.set(
3447 ContentLanguageListContainer(
|
3448 venkat.puvvada 1.108 ContentLanguageList(
3449 LanguageParser::parseContentLanguageHeader(
|
3450 s.kodali 1.137 CMGetCharsPtr(cldata.value.string, NULL)))));
|
3451 dave.sudlik 1.103 handler.setContext(response->operationContext);
|
3452 dave.sudlik 1.99 }
3453
|
3454 dave.sudlik 1.98 if (rc.rc!=CMPI_RC_OK)
|
3455 dave.sudlik 1.102 {
|
3456 venkat.puvvada 1.108 CIMException cimException(
3457 (CIMStatusCode)rc.rc,
|
3458 s.kodali 1.137 rc.msg ? CMGetCharsPtr(rc.msg, NULL) : String::EMPTY);
|
3459 venkat.puvvada 1.108
3460 if (eRes.resError)
3461 {
|
3462 kumpf 1.151 for (CMPI_Error* currErr=eRes.resError;
3463 currErr!=NULL;
|
3464 dave.sudlik 1.102 currErr=currErr->nextError)
|
3465 venkat.puvvada 1.108 {
3466 cimException.addError(
3467 ((CIMError*)currErr->hdl)->getInstance());
3468 }
3469 }
3470 throw cimException;
|
3471 dave.sudlik 1.102 }
|
3472 dave.sudlik 1.98 }
3473 HandlerCatch(handler);
3474
3475 delete MI_request;
3476 delete MI_response;
3477
3478 PEG_METHOD_EXIT();
3479
3480 return(response);
3481 }
3482
|
3483 venkat.puvvada 1.108 Message * CMPIProviderManager::handleUnsupportedRequest(
3484 const Message * message)
|
3485 marek 1.63 {
|
3486 ms.aruran 1.115 PEG_METHOD_ENTER(
3487 TRC_PROVIDERMANAGER,
3488 "CMPIProviderManager::handleUnsupportedRequest()");
|
3489 marek 1.63 CIMRequestMessage* request =
3490 dynamic_cast<CIMRequestMessage *>(const_cast<Message *>(message));
3491 PEGASUS_ASSERT(request != 0 );
3492
3493 CIMResponseMessage* response = request->buildResponse();
3494 response->cimException =
3495 PEGASUS_CIM_EXCEPTION(CIM_ERR_NOT_SUPPORTED, String::EMPTY);
3496
3497 PEG_METHOD_EXIT();
3498 return response;
3499 }
3500
3501 ProviderName CMPIProviderManager::_resolveProviderName(
3502 const ProviderIdContainer & providerId)
3503 {
3504 String providerName;
3505 String fileName;
3506 String location;
|
3507 dmitry.mikulin 1.114 String moduleName;
|
3508 marek 1.63 CIMValue genericValue;
3509
|
3510 ms.aruran 1.115 PEG_METHOD_ENTER(
3511 TRC_PROVIDERMANAGER,
3512 "CMPIProviderManager::_resolveProviderName()");
3513
|
3514 dmitry.mikulin 1.114 genericValue = providerId.getModule().getProperty(
|
3515 marek 1.139 providerId.getModule().findProperty(
3516 PEGASUS_PROPERTYNAME_NAME)).getValue();
|
3517 dmitry.mikulin 1.114 genericValue.get(moduleName);
3518
|
3519 marek 1.63 genericValue = providerId.getProvider().getProperty(
|
3520 marek 1.139 providerId.getProvider().findProperty(
3521 PEGASUS_PROPERTYNAME_NAME)).getValue();
|
3522 marek 1.63 genericValue.get(providerName);
3523
3524 genericValue = providerId.getModule().getProperty(
3525 providerId.getModule().findProperty("Location")).getValue();
3526 genericValue.get(location);
3527 fileName = _resolvePhysicalName(location);
3528
|
3529 kumpf 1.151 // An empty file name is only for interest if we are in the
|
3530 thilo.boehm 1.89 // local name space. So the message is only issued if not
3531 // in the remote Name Space.
3532 if (fileName == String::EMPTY && (!providerId.isRemoteNameSpace()))
3533 {
|
3534 venkat.puvvada 1.108 genericValue.get(location);
3535 String fullName = FileSystem::buildLibraryFileName(location);
3536 Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::SEVERE,
|
3537 kumpf 1.136 MessageLoaderParms(
3538 "ProviderManager.CMPI.CMPIProviderManager.CANNOT_FIND_LIBRARY",
|
3539 kumpf 1.151 "For provider $0 library $1 was not found.",
|
3540 kumpf 1.136 providerName, fullName));
|
3541 thilo.boehm 1.89
3542 }
|
3543 dmitry.mikulin 1.114 ProviderName name(moduleName, providerName, fileName);
|
3544 marek 1.63 name.setLocation(location);
|
3545 ms.aruran 1.115 PEG_METHOD_EXIT();
|
3546 marek 1.63 return name;
3547 }
3548
3549 void CMPIProviderManager::_callEnableIndications
3550 (CIMInstance & req_provider,
|
3551 venkat.puvvada 1.108 PEGASUS_INDICATION_CALLBACK_T _indicationCallback,
|
3552 venkat.puvvada 1.132 OpProviderHolder & ph,
|
3553 venkat.puvvada 1.108 const char* remoteInfo)
|
3554 marek 1.63 {
|
3555 ms.aruran 1.115 PEG_METHOD_ENTER(
3556 TRC_PROVIDERMANAGER,
3557 "CMPIProviderManager::_callEnableIndications()");
|
3558 marek 1.63
3559 try
3560 {
|
3561 s.kodali 1.151.2.2 IndProvRecord *indProvRec =0;
|
3562 marek 1.95 {
3563 WriteLock lock(rwSemProvTab);
3564
|
3565 s.kodali 1.151.2.2 if (indProvTab.lookup (ph.GetProvider ().getName (),indProvRec))
|
3566 venkat.puvvada 1.108 {
3567 CIMRequestMessage * request = 0;
3568 CIMResponseMessage * response = 0;
|
3569 s.kodali 1.151.2.2 indProvRec->setHandler(new EnableIndicationsResponseHandler(
|
3570 venkat.puvvada 1.108 request,
3571 response,
3572 req_provider,
3573 _indicationCallback,
|
3574 s.kodali 1.151.2.2 _responseChunkCallback));
|
3575 venkat.puvvada 1.108 }
|
3576 marek 1.95 }
|
3577 marek 1.63
3578 CMPIProvider & pr=ph.GetProvider();
3579
3580 //
3581 // Versions prior to 86 did not include enableIndications routine
3582 //
|
3583 venkat.puvvada 1.132 if (pr.getIndMI()->ft->ftVersion >= 86)
|
3584 marek 1.63 {
3585 OperationContext context;
|
3586 kumpf 1.112 #ifdef PEGASUS_ZOS_THREADLEVEL_SECURITY
|
3587 venkat.puvvada 1.108 // For the z/OS security model we always need an Identity container
|
3588 kumpf 1.151 // in the operation context. Since we don't have a client request
3589 // ID here we have to use the cim servers identity for the time
|
3590 venkat.puvvada 1.108 // being.
3591 IdentityContainer idContainer(System::getEffectiveUserName());
3592 context.insert(idContainer);
|
3593 kumpf 1.112 #endif
|
3594 marek 1.90
|
3595 marek 1.63 CMPIStatus rc={CMPI_RC_OK,NULL};
3596 CMPI_ContextOnStack eCtx(context);
|
3597 venkat.puvvada 1.132 CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
|
3598 marek 1.63
|
3599 dave.sudlik 1.100 // Add RemoteInformation -V 5245
3600 if (remoteInfo)
3601 {
3602 eCtx.ft->addEntry(&eCtx,"CMPIRRemoteInfo",
|
3603 venkat.puvvada 1.108 (CMPIValue*)(const char*)remoteInfo,CMPI_chars);
|
3604 dave.sudlik 1.100 }
3605
|
3606 thilo.boehm 1.143 PEG_TRACE((
3607 TRC_PROVIDERMANAGER,
3608 Tracer::LEVEL2,
|
3609 thilo.boehm 1.138 "Calling provider.enableIndications: %s",
3610 (const char*)pr.getName().getCString()));
|
3611 marek 1.63
|
3612 venkat.puvvada 1.111 pr.protect();
|
3613 marek 1.63
|
3614 dave.sudlik 1.101 // enableIndications() is defined by the CMPI standard as
3615 // returning a CMPIStatus return value. Unfortunately, Pegasus
3616 // originally implemented enableIndications() with a void
|
3617 kumpf 1.151 // return type, and this incompatibility was not detected for
3618 // some time. Since exceptions thrown from enableIndications()
|
3619 dave.sudlik 1.101 // are not reported (other than via logging), it was decided to
3620 // discard the returned CMPIStatus here. This will prevent us from
3621 // breaking existing CMPI Indication providers. This is ok since
3622 // there really isn't a user to which the problem should be
3623 // reported.
|
3624 venkat.puvvada 1.132 pr.getIndMI()->ft->enableIndications(pr.getIndMI(),&eCtx);
|
3625 thilo.boehm 1.143
3626 PEG_TRACE((
3627 TRC_PROVIDERMANAGER,
3628 Tracer::LEVEL2,
3629 "Returning from provider.enableIndications: %s",
3630 (const char*)pr.getName().getCString()));
3631
|
3632 marek 1.63 }
3633 else
3634 {
|
3635 thilo.boehm 1.143 PEG_TRACE((
3636 TRC_PROVIDERMANAGER,
3637 Tracer::LEVEL2,
|
3638 thilo.boehm 1.138 "Not calling provider.enableIndications: %s routine as it is "
3639 "an earlier version that does not support this function",
3640 (const char*)pr.getName().getCString()));
|
3641 marek 1.63 }
3642 }
|
3643 konrad.r 1.64 catch (const Exception & e)
|
3644 marek 1.63 {
|
3645 kumpf 1.136 Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::WARNING,
3646 MessageLoaderParms(
3647 "ProviderManager.CMPI.CMPIProviderManager."
3648 "ENABLE_INDICATIONS_FAILED",
3649 "Failed to enable indications for provider $0: $1.",
3650 ph.GetProvider().getName(), e.getMessage()));
|
3651 marek 1.63 }
|
3652 venkat.puvvada 1.108 catch (...)
|
3653 marek 1.63 {
|
3654 kumpf 1.136 Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::WARNING,
3655 MessageLoaderParms(
3656 "ProviderManager.CMPI.CMPIProviderManager."
3657 "ENABLE_INDICATIONS_FAILED_UNKNOWN",
3658 "Failed to enable indications for provider $0.",
3659 ph.GetProvider().getName()));
|
3660 marek 1.63 }
3661
3662 PEG_METHOD_EXIT ();
3663 }
3664
3665 void CMPIProviderManager::_callDisableIndications
|
3666 venkat.puvvada 1.132 (OpProviderHolder & ph, const char *remoteInfo)
|
3667 marek 1.63 {
|
3668 ms.aruran 1.115 PEG_METHOD_ENTER(
3669 TRC_PROVIDERMANAGER,
3670 "CMPIProviderManager::_callDisableIndications()");
|
3671 marek 1.63
|
3672 dave.sudlik 1.101 try
|
3673 marek 1.95 {
|
3674 dave.sudlik 1.101 CMPIProvider & pr=ph.GetProvider();
|
3675 marek 1.63
|
3676 dave.sudlik 1.101 //
3677 // Versions prior to 86 did not include disableIndications routine
3678 //
|
3679 venkat.puvvada 1.132 if (pr.getIndMI()->ft->ftVersion >= 86)
|
3680 dave.sudlik 1.101 {
3681 OperationContext context;
3682 CMPIStatus rc={CMPI_RC_OK,NULL};
3683 CMPI_ContextOnStack eCtx(context);
3684
3685 if (remoteInfo)
3686 {
|
3687 venkat.puvvada 1.108 eCtx.ft->addEntry(&eCtx,"CMPIRRemoteInfo",
3688 (CMPIValue*)(const char*)remoteInfo,CMPI_chars);
|
3689 dave.sudlik 1.101 }
|
3690 venkat.puvvada 1.132 CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
|
3691 dave.sudlik 1.96
|
3692 thilo.boehm 1.143 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL2,
|
3693 thilo.boehm 1.138 "Calling provider.disableIndications: %s",
3694 (const char*)pr.getName().getCString()));
|
3695 dave.sudlik 1.100
|
3696 dave.sudlik 1.101 // disableIndications() is defined by the CMPI standard as
3697 // returning a CMPIStatus return value. Unfortunately, Pegasus
3698 // originally implemented disableIndications() with a void
|
3699 kumpf 1.151 // return type, and this incompatibility was not detected for
|
3700 dave.sudlik 1.101 // some time. For consistency with the enableIndications()
|
3701 kumpf 1.151 // interface, it was decided to discard the returned CMPIStatus
3702 // here. This will prevent us from breaking existing CMPI
3703 // Indication providers. This is ok since there really isn't a
|
3704 dave.sudlik 1.101 // user to which the problem should be reported.
|
3705 venkat.puvvada 1.132 pr.getIndMI()->ft->disableIndications(
|
3706 kumpf 1.151 pr.getIndMI(),
|
3707 venkat.puvvada 1.108 &eCtx);
|
3708 marek 1.63
|
3709 venkat.puvvada 1.111 pr.unprotect();
|
3710 thilo.boehm 1.143
3711 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL2,
3712 "Returning from provider.disableIndications: %s",
3713 (const char*)pr.getName().getCString()));
3714
|
3715 dave.sudlik 1.101 }
3716 else
3717 {
|
3718 thilo.boehm 1.143 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL2,
|
3719 thilo.boehm 1.138 "Not calling provider.disableIndications: %s routine as it is "
3720 "an earlier version that does not support this function",
3721 (const char*)pr.getName().getCString()));
|
3722 dave.sudlik 1.101 }
3723 }
3724 catch (const Exception & e)
3725 {
|
3726 kumpf 1.136 Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::WARNING,
3727 MessageLoaderParms(
3728 "ProviderManager.CMPI.CMPIProviderManager."
3729 "DISABLE_INDICATIONS_FAILED",
3730 "Failed to disable indications for provider $0: $1.",
3731 ph.GetProvider().getName(), e.getMessage()));
|
3732 marek 1.63 }
|
3733 venkat.puvvada 1.108 catch (...)
|
3734 marek 1.63 {
|
3735 kumpf 1.136 Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::WARNING,
3736 MessageLoaderParms(
3737 "ProviderManager.CMPI.CMPIProviderManager."
3738 "DISABLE_INDICATIONS_FAILED_UNKNOWN",
3739 "Failed to disable indications for provider $0.",
3740 ph.GetProvider().getName()));
|
3741 marek 1.63 }
3742
3743 PEG_METHOD_EXIT ();
3744 }
3745
3746 PEGASUS_NAMESPACE_END
|
3747 kumpf 1.151
|