1 karl 1.21 //%2006////////////////////////////////////////////////////////////////////////
|
2 david.dillard 1.9 //
|
3 karl 1.12 // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
4 // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
5 // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
|
6 david.dillard 1.9 // IBM Corp.; EMC Corporation, The Open Group.
|
7 karl 1.12 // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
8 // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
|
9 karl 1.13 // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
10 // EMC Corporation; VERITAS Software Corporation; The Open Group.
|
11 karl 1.21 // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
12 // EMC Corporation; Symantec Corporation; The Open Group.
|
13 david.dillard 1.9 //
14 // Permission is hereby granted, free of charge, to any person obtaining a copy
15 // of this software and associated documentation files (the "Software"), to
16 // deal in the Software without restriction, including without limitation the
17 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
18 // sell copies of the Software, and to permit persons to whom the Software is
19 // furnished to do so, subject to the following conditions:
|
20 karl 1.21 //
|
21 david.dillard 1.9 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
22 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
23 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
24 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
25 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
26 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
27 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 //
30 //==============================================================================
31 //
32 //%/////////////////////////////////////////////////////////////////////////////
33
34
35 #include <Pegasus/Common/Constants.h>
36 #include <Pegasus/Common/XmlWriter.h>
37 #include <Pegasus/Common/Thread.h>
38 #include <Pegasus/Common/CIMMessage.h>
39 #include <Pegasus/Common/Tracer.h>
|
40 chip 1.17 #include <Pegasus/Common/AutoPtr.h>
|
41 david.dillard 1.9
42 #ifdef PEGASUS_OS_OS400
43 #include <qycmutilu2.H>
44 #include "OS400ConvertChar.h"
45 #include "CIMOMHandleOS400UserState.h"
46 #include "CIMOMHandleOS400SystemState.h"
47 #endif
48
49 #include "InternalCIMOMHandleRep.h"
50
51 PEGASUS_NAMESPACE_BEGIN
52
|
53 kumpf 1.26 InternalCIMOMHandleMessageQueue::InternalCIMOMHandleMessageQueue()
|
54 david.dillard 1.9 : MessageQueue(PEGASUS_QUEUENAME_INTERNALCLIENT),
|
55 chip 1.17 _output_qid(0),
56 _return_qid(0),
|
57 mike 1.22 _response(0)
|
58 david.dillard 1.9 {
|
59 chip 1.17 // output queue is the binary message handler
|
60 david.dillard 1.9 MessageQueue* out = MessageQueue::lookup(PEGASUS_QUEUENAME_BINARY_HANDLER);
61
|
62 chip 1.17 PEGASUS_ASSERT(out != 0);
|
63 david.dillard 1.9
|
64 chip 1.17 _output_qid = out->getQueueId();
|
65 a.arora 1.11
|
66 chip 1.17 // input queue is this
67 _return_qid = getQueueId();
|
68 a.arora 1.11 }
69
|
70 kumpf 1.26 InternalCIMOMHandleMessageQueue::~InternalCIMOMHandleMessageQueue()
|
71 david.dillard 1.9 {
72 try
73 {
|
74 chip 1.17 // ATTN: release any unprocessed responses
|
75 mike 1.24 _response.clear();
|
76 david.dillard 1.9 }
|
77 kumpf 1.26 catch (...)
|
78 david.dillard 1.9 {
79 }
80 }
81
|
82 kumpf 1.26 void InternalCIMOMHandleMessageQueue::handleEnqueue()
|
83 david.dillard 1.9 {
|
84 kumpf 1.26 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE,
85 "InternalCIMOMHandleMessageQueue::handleEnqueue");
|
86 david.dillard 1.9
87 Message* message = dequeue();
88
|
89 chip 1.17 switch(message->getType())
|
90 david.dillard 1.9 {
|
91 chip 1.17 /*
92 case CIM_GET_CLASS_REQUEST_MESSAGE:
93 case CIM_ENUMERATE_CLASSES_REQUEST_MESSAGE:
94 case CIM_ENUMERATE_CLASS_NAMES_REQUEST_MESSAGE:
95 case CIM_CREATE_CLASS_REQUEST_MESSAGE:
96 case CIM_MODIFY_CLASS_REQUEST_MESSAGE:
97 case CIM_DELETE_CLASS_REQUEST_MESSAGE:
98 case CIM_GET_INSTANCE_REQUEST_MESSAGE:
99 case CIM_ENUMERATE_INSTANCES_REQUEST_MESSAGE:
100 case CIM_ENUMERATE_INSTANCE_NAMES_REQUEST_MESSAGE:
101 case CIM_CREATE_INSTANCE_REQUEST_MESSAGE:
102 case CIM_MODIFY_INSTANCE_REQUEST_MESSAGE:
103 case CIM_DELETE_INSTANCE_REQUEST_MESSAGE:
104 case CIM_EXEC_QUERY_REQUEST_MESSAGE:
105 case CIM_ASSOCIATORS_REQUEST_MESSAGE:
106 case CIM_ASSOCIATOR_NAMES_REQUEST_MESSAGE:
107 case CIM_REFERENCES_REQUEST_MESSAGE:
108 case CIM_REFERENCE_NAMES_REQUEST_MESSAGE:
109 case CIM_GET_PROPERTY_REQUEST_MESSAGE:
110 case CIM_SET_PROPERTY_REQUEST_MESSAGE:
111 case CIM_INVOKE_METHOD_REQUEST_MESSAGE:
112 chip 1.17 sendRequest(message);
|
113 david.dillard 1.9
|
114 chip 1.17 break;
115 */
|
116 david.dillard 1.9 case CIM_GET_CLASS_RESPONSE_MESSAGE:
117 case CIM_ENUMERATE_CLASSES_RESPONSE_MESSAGE:
118 case CIM_ENUMERATE_CLASS_NAMES_RESPONSE_MESSAGE:
119 case CIM_CREATE_CLASS_RESPONSE_MESSAGE:
120 case CIM_MODIFY_CLASS_RESPONSE_MESSAGE:
121 case CIM_DELETE_CLASS_RESPONSE_MESSAGE:
122 case CIM_GET_INSTANCE_RESPONSE_MESSAGE:
123 case CIM_ENUMERATE_INSTANCES_RESPONSE_MESSAGE:
124 case CIM_ENUMERATE_INSTANCE_NAMES_RESPONSE_MESSAGE:
125 case CIM_CREATE_INSTANCE_RESPONSE_MESSAGE:
126 case CIM_MODIFY_INSTANCE_RESPONSE_MESSAGE:
127 case CIM_DELETE_INSTANCE_RESPONSE_MESSAGE:
128 case CIM_EXEC_QUERY_RESPONSE_MESSAGE:
129 case CIM_ASSOCIATORS_RESPONSE_MESSAGE:
130 case CIM_ASSOCIATOR_NAMES_RESPONSE_MESSAGE:
131 case CIM_REFERENCES_RESPONSE_MESSAGE:
132 case CIM_REFERENCE_NAMES_RESPONSE_MESSAGE:
133 case CIM_GET_PROPERTY_RESPONSE_MESSAGE:
134 case CIM_SET_PROPERTY_RESPONSE_MESSAGE:
|
135 kumpf 1.15 case CIM_INVOKE_METHOD_RESPONSE_MESSAGE:
|
136 mike 1.22 _response.enqueue(message);
|
137 chip 1.17
|
138 david.dillard 1.9 break;
|
139 chip 1.17 default:
140 PEG_TRACE_STRING(
141 TRC_DISCARDED_DATA,
142 Tracer::LEVEL2,
143 "Error: unexpected message type");
144
145 delete message;
|
146 david.dillard 1.9
|
147 chip 1.17 break;
|
148 david.dillard 1.9 }
|
149 chip 1.17
|
150 david.dillard 1.9 PEG_METHOD_EXIT();
151 }
152
|
153 kumpf 1.26 CIMResponseMessage* InternalCIMOMHandleMessageQueue::sendRequest(
154 CIMRequestMessage* request)
|
155 david.dillard 1.9 {
|
156 chip 1.17 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE, "InternalCIMOMHandleRep::sendRequest");
157
158 AutoMutex autoMutex(_mutex);
159
160 // update message to include routing information
161 request->dest = _output_qid;
162 request->queueIds.push(_return_qid);
163 request->queueIds.push(_output_qid);
164
165 // locate destination
166 MessageQueueService* service =
167 dynamic_cast<MessageQueueService *>(
168 MessageQueue::lookup(_output_qid));
169
170 PEGASUS_ASSERT(service != 0);
|
171 david.dillard 1.9
|
172 chip 1.17 // forward request
|
173 kumpf 1.26 if (service->SendForget(request) == false)
|
174 david.dillard 1.9 {
|
175 chip 1.17 PEG_METHOD_EXIT();
176 throw Exception("Failed to send message");
177 }
|
178 david.dillard 1.9
|
179 chip 1.17 // wait for response
180 CIMResponseMessage* response =
|
181 mike 1.22 dynamic_cast<CIMResponseMessage *>(_response.dequeue_wait());
|
182 david.dillard 1.9
183 PEG_METHOD_EXIT();
|
184 kumpf 1.26 return response;
|
185 chip 1.17 }
186
187 static void _deleteContentLanguage(void* data)
188 {
|
189 kumpf 1.26 if (data != 0)
|
190 chip 1.17 {
|
191 kumpf 1.19 ContentLanguageList* cl = static_cast<ContentLanguageList*>(data);
|
192 chip 1.17
193 delete cl;
194 }
|
195 david.dillard 1.9 }
196
|
197 chip 1.17 static OperationContext _filterOperationContext(const OperationContext& context)
|
198 david.dillard 1.9 {
|
199 chip 1.17 OperationContext temp;
200
|
201 kumpf 1.26 #ifdef PEGASUS_OS_OS400
|
202 chip 1.17 // on OS/400, do not allow the provider set the user name for the request
203 // get the user name from the current thread.
204 char os400UserName[11];
205
|
206 kumpf 1.26 if (ycmGetCurrentUser(os400UserName) == 0)
|
207 chip 1.17 {
|
208 kumpf 1.26 throw CIMException(CIM_ERR_FAILED, MessageLoaderParms(
209 "Common.CIMOMHandleOS400UserState.UNKNOWN_ERROR",
210 "An internal error occurred during the processing of the "
211 "CIMOM handle"));
|
212 chip 1.17 }
|
213 david.dillard 1.9
|
214 chip 1.17 EtoA(os400UserName);
215 temp.insert(IdentityContainer(String(os400UserName)));
|
216 kumpf 1.26 #else
217 if (context.contains(IdentityContainer::NAME))
|
218 david.dillard 1.9 {
|
219 chip 1.17 // propagate the identity container if it exists (get() with throw
220 // an exception if it does not)
221 temp.insert(context.get(IdentityContainer::NAME));
|
222 david.dillard 1.9 }
|
223 kumpf 1.26 else
|
224 david.dillard 1.9 {
|
225 chip 1.17 temp.insert(IdentityContainer(String::EMPTY));
|
226 david.dillard 1.9 }
|
227 kumpf 1.26 #endif
|
228 chip 1.17
|
229 kumpf 1.26 if (context.contains(AcceptLanguageListContainer::NAME))
|
230 david.dillard 1.9 {
|
231 kumpf 1.26 // propagate the accept languages container if it exists
232 // (get() with throw an exception if it does not exist)
|
233 chip 1.17 temp.insert(context.get(AcceptLanguageListContainer::NAME));
|
234 david.dillard 1.9 }
|
235 kumpf 1.26 else
|
236 chip 1.17 {
237 // If the container is not found then try to use the
|
238 kumpf 1.19 // AcceptLanguageList from the current thread
239 AcceptLanguageList* pal = Thread::getLanguages();
|
240 david.dillard 1.9
|
241 kumpf 1.26 if (pal != 0)
|
242 david.dillard 1.9 {
|
243 chip 1.17 temp.insert(AcceptLanguageListContainer(*pal));
|
244 david.dillard 1.9 }
|
245 dave.sudlik 1.20 else
246 {
247 temp.insert(AcceptLanguageListContainer(AcceptLanguageList()));
248 }
|
249 chip 1.17 }
|
250 david.dillard 1.9
|
251 kumpf 1.26 if (context.contains(ContentLanguageListContainer::NAME))
|
252 chip 1.17 {
|
253 kumpf 1.26 // propagate the accept languages container if it exists
254 // (get() with throw an exception if it does not)
|
255 chip 1.17 temp.insert(context.get(ContentLanguageListContainer::NAME));
|
256 david.dillard 1.9 }
|
257 kumpf 1.26 else
|
258 david.dillard 1.9 {
|
259 kumpf 1.19 temp.insert(ContentLanguageListContainer(ContentLanguageList()));
|
260 david.dillard 1.9 }
261
|
262 a.dunfey 1.23 return temp;
|
263 chip 1.17 }
264
265 InternalCIMOMHandleRep::InternalCIMOMHandleRep()
266 {
267 }
268
269 InternalCIMOMHandleRep::~InternalCIMOMHandleRep()
270 {
271 }
|
272 david.dillard 1.9
273 #ifdef PEGASUS_OS_OS400
|
274 chip 1.17 InternalCIMOMHandleRep::InternalCIMOMHandleRep(Uint32 os400UserStateKey)
275 : _chOS400(os400UserStateKey)
276 {
277 }
278
279 void InternalCIMOMHandleRep::setOS400ProfileHandle(const char* profileHandle)
280 {
281 memcpy(os400PH, profileHandle, 12);
282 }
|
283 david.dillard 1.9 #endif
|
284 chip 1.17
|
285 kumpf 1.26 CIMResponseMessage* InternalCIMOMHandleRep::do_request(
286 CIMRequestMessage* request)
|
287 chip 1.17 {
288 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE, "InternalCIMOMHandleRep::do_request");
289
|
290 kumpf 1.26 #ifdef PEGASUS_OS_OS400
|
291 chip 1.17 // On OS/400, this code runs in a system state thread. Swap the
292 // thread profile to be able to access server resources.
|
293 kumpf 1.26 if (CIMOMHandleOS400SystemState::setProfileHandle(os400PH) !=
294 CIM_ERR_SUCCESS)
|
295 konrad.r 1.16 {
|
296 chip 1.17 PEG_METHOD_EXIT();
297 throw Exception("Could not set profile handle");
|
298 konrad.r 1.16 }
|
299 kumpf 1.26 #endif
|
300 david.dillard 1.9
|
301 chip 1.17 /*
302 Uint32 timeout = 0;
|
303 david.dillard 1.9
304 try
305 {
306 const TimeoutContainer* p = dynamic_cast<const TimeoutContainer*>(
307 &(context.get(TimeoutContainer::NAME)));
308 if (p)
309 {
310 timeout = p->getTimeOut();
311 }
312 }
|
313 kumpf 1.26 catch (Exception &)
|
314 david.dillard 1.9 {
315 }
316
317 try
318 {
|
319 kumpf 1.26 if (timeout)
|
320 david.dillard 1.9 {
321 _msg_avail.time_wait(timeout);
322 }
323 else
324 {
325 _msg_avail.wait();
326 }
327 }
|
328 kumpf 1.26 catch (TimeOut&)
|
329 david.dillard 1.9 {
330 PEG_TRACE_STRING(TRC_CIMOM_HANDLE, Tracer::LEVEL2,
331 "timeout waiting for response");
332 throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, MessageLoaderParms(
333 "Provider.CIMOMHandle.EMPTY_CIM_RESPONSE",
334 "Empty CIM Response"));
335 }
|
336 kumpf 1.26 catch (...)
|
337 david.dillard 1.9 {
338 PEG_TRACE_STRING(TRC_CIMOM_HANDLE, Tracer::LEVEL2,
339 "Unexpected Exception");
340 throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, MessageLoaderParms(
341 "Provider.CIMOMHandle.EMPTY_CIM_RESPONSE",
342 "Empty CIM Response"));
343 }
|
344 chip 1.17 */
345
346 Message* temp = _queue.sendRequest(request);
347
348 CIMResponseMessage* response = dynamic_cast<CIMResponseMessage*>(temp);
349
|
350 kumpf 1.26 if (response == 0)
|
351 david.dillard 1.9 {
|
352 chip 1.17 delete response;
353
354 PEG_METHOD_EXIT();
|
355 kumpf 1.26 throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, MessageLoaderParms(
356 "Provider.CIMOMHandle.EMPTY_CIM_RESPONSE",
357 "Empty CIM Response"));
|
358 david.dillard 1.9 }
359
|
360 kumpf 1.26 if (response->cimException.getCode() != CIM_ERR_SUCCESS)
|
361 david.dillard 1.9 {
|
362 chip 1.17 CIMException e(response->cimException);
|
363 david.dillard 1.9
364 delete response;
|
365 chip 1.17
366 PEG_METHOD_EXIT();
367 throw e;
|
368 david.dillard 1.9 }
369
|
370 kumpf 1.26 if (response->operationContext.contains(ContentLanguageListContainer::NAME))
|
371 chip 1.17 {
|
372 kumpf 1.26 // If the response has a Content-Language then save it into
373 // thread-specific storage
|
374 chip 1.17 ContentLanguageListContainer container =
375 response->operationContext.get(ContentLanguageListContainer::NAME);
376
|
377 kumpf 1.26 if (container.getLanguages().size() > 0)
|
378 chip 1.17 {
379 Thread* currentThread = Thread::getCurrent();
380
|
381 kumpf 1.26 if (currentThread != 0)
|
382 chip 1.17 {
383 // deletes the old tsd and creates a new one
384 currentThread->put_tsd(
385 "cimomHandleContentLanguages",
386 _deleteContentLanguage,
|
387 kumpf 1.19 sizeof(ContentLanguageList*),
388 new ContentLanguageList(container.getLanguages()));
|
389 chip 1.17 }
390 }
391 }
|
392 david.dillard 1.9
393 PEG_METHOD_EXIT();
|
394 a.dunfey 1.23 return response;
|
395 david.dillard 1.9 }
396
397
398 //
399 // CIM Operations
400 //
401
402 CIMClass InternalCIMOMHandleRep::getClass(
403 const OperationContext & context,
404 const CIMNamespaceName& nameSpace,
405 const CIMName& className,
406 Boolean localOnly,
407 Boolean includeQualifiers,
408 Boolean includeClassOrigin,
409 const CIMPropertyList& propertyList)
410 {
411 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE, "InternalCIMOMHandleRep::getClass");
412
|
413 kumpf 1.26 #ifdef PEGASUS_OS_OS400
|
414 david.dillard 1.9 // If this is running in user-state, then run the request
415 // through the user-state layer
416 if (_chOS400.hasKey())
417 {
|
418 chip 1.17 CIMClass cimClass =
419 _chOS400.getClass(
420 context,
421 nameSpace,
422 className,
423 localOnly,
424 includeQualifiers,
425 includeClassOrigin,
426 propertyList);
427
428 PEG_METHOD_EXIT();
|
429 kumpf 1.26 return cimClass;
|
430 chip 1.17 }
|
431 kumpf 1.26 #endif
|
432 chip 1.17
433 // encode request
434 CIMGetClassRequestMessage* request =
435 new CIMGetClassRequestMessage(
436 XmlWriter::getNextMessageId(),
|
437 david.dillard 1.9 nameSpace,
438 className,
439 localOnly,
440 includeQualifiers,
441 includeClassOrigin,
|
442 chip 1.17 propertyList,
443 QueueIdStack());
444
445 // copy and adjust, as needed, the operation context
446 request->operationContext = _filterOperationContext(context);
|
447 dave.sudlik 1.20 // request->operationContext.get(AcceptLanguageListContainer::NAME);
|
448 chip 1.17
449 AutoPtr<CIMGetClassResponseMessage> response;
450
451 try
452 {
453 response.reset(dynamic_cast<CIMGetClassResponseMessage*>(
454 do_request(request)));
|
455 david.dillard 1.9
|
456 kumpf 1.26 if (response.get() == 0)
|
457 chip 1.17 {
458 PEG_TRACE_STRING(
459 TRC_CIMOM_HANDLE,
460 Tracer::LEVEL2,
461 "Incorrect response type in CIMOMHandle");
|
462 david.dillard 1.9
|
463 chip 1.17 throw CIMException(CIM_ERR_FAILED);
464 }
|
465 david.dillard 1.9 }
|
466 kumpf 1.26 catch (CIMException &)
|
467 david.dillard 1.9 {
|
468 chip 1.17 PEG_METHOD_EXIT();
|
469 david.dillard 1.9 throw;
470 }
|
471 kumpf 1.26 catch (...)
|
472 david.dillard 1.9 {
|
473 chip 1.17 PEG_TRACE_STRING(
474 TRC_CIMOM_HANDLE,
475 Tracer::LEVEL2,
|
476 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
477 chip 1.17
478 PEG_METHOD_EXIT();
|
479 kumpf 1.26 throw CIMException(CIM_ERR_FAILED, MessageLoaderParms(
480 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
481 "Exception caught in CIMOMHandle"));
|
482 david.dillard 1.9 }
483
484 CIMClass cimClass = response->cimClass;
485
486 PEG_METHOD_EXIT();
|
487 kumpf 1.26 return cimClass;
|
488 david.dillard 1.9 }
489
490
491 Array<CIMClass> InternalCIMOMHandleRep::enumerateClasses(
492 const OperationContext & context,
493 const CIMNamespaceName& nameSpace,
494 const CIMName& className,
495 Boolean deepInheritance,
496 Boolean localOnly,
497 Boolean includeQualifiers,
498 Boolean includeClassOrigin)
499 {
500 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE,
501 "InternalCIMOMHandleRep::enumerateClasses");
502
|
503 kumpf 1.26 #ifdef PEGASUS_OS_OS400
|
504 david.dillard 1.9 // If this is running in user-state, then run the request
505 // through the user-state layer
506 if (_chOS400.hasKey())
507 {
|
508 chip 1.17 Array<CIMClass> cimClasses =
509 _chOS400.enumerateClasses(
510 context,
511 nameSpace,
512 className,
513 deepInheritance,
514 localOnly,
515 includeQualifiers,
516 includeClassOrigin);
517
518 PEG_METHOD_EXIT();
|
519 kumpf 1.26 return cimClasses;
|
520 chip 1.17 }
|
521 kumpf 1.26 #endif
|
522 david.dillard 1.9
523 CIMEnumerateClassesRequestMessage* request =
524 new CIMEnumerateClassesRequestMessage(
525 XmlWriter::getNextMessageId(),
526 nameSpace,
527 className,
528 deepInheritance,
529 localOnly,
530 includeQualifiers,
531 includeClassOrigin,
|
532 chip 1.17 QueueIdStack());
|
533 david.dillard 1.9
|
534 chip 1.17 // copy and adjust, as needed, the operation context
535 request->operationContext = _filterOperationContext(context);
|
536 david.dillard 1.9
|
537 chip 1.17 AutoPtr<CIMEnumerateClassesResponseMessage> response;
|
538 david.dillard 1.9
539 try
540 {
|
541 chip 1.17 response.reset(dynamic_cast<CIMEnumerateClassesResponseMessage*>(
542 do_request(request)));
543
|
544 kumpf 1.26 if (response.get() == 0)
|
545 chip 1.17 {
546 PEG_TRACE_STRING(
547 TRC_CIMOM_HANDLE,
548 Tracer::LEVEL2,
549 "Incorrect response type in CIMOMHandle");
550
551 throw CIMException(CIM_ERR_FAILED);
552 }
|
553 david.dillard 1.9 }
|
554 kumpf 1.26 catch (CIMException &)
|
555 david.dillard 1.9 {
|
556 chip 1.17 PEG_METHOD_EXIT();
|
557 david.dillard 1.9 throw;
558 }
|
559 kumpf 1.26 catch (...)
|
560 david.dillard 1.9 {
|
561 chip 1.17 PEG_TRACE_STRING(
562 TRC_CIMOM_HANDLE,
563 Tracer::LEVEL2,
|
564 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
565 chip 1.17
566 PEG_METHOD_EXIT();
567 throw CIMException(
568 CIM_ERR_FAILED,
569 MessageLoaderParms(
570 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
571 "Exception caught in CIMOMHandle"));
|
572 david.dillard 1.9 }
|
573 chip 1.17
|
574 david.dillard 1.9 Array<CIMClass> cimClasses = response->cimClasses;
|
575 chip 1.17
|
576 david.dillard 1.9 PEG_METHOD_EXIT();
|
577 kumpf 1.26 return cimClasses;
|
578 david.dillard 1.9 }
579
580
581 Array<CIMName> InternalCIMOMHandleRep::enumerateClassNames(
582 const OperationContext & context,
583 const CIMNamespaceName &nameSpace,
584 const CIMName& className,
585 Boolean deepInheritance)
586 {
587 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE,
588 "InternalCIMOMHandleRep::enumerateClassNames");
589
|
590 kumpf 1.26 #ifdef PEGASUS_OS_OS400
|
591 david.dillard 1.9 // If this is running in user-state, then run the request
592 // through the user-state layer
593 if (_chOS400.hasKey())
594 {
|
595 chip 1.17 Array<CIMName> cimClassNames =
596 _chOS400.enumerateClassNames(
597 context,
598 nameSpace,
599 className,
600 deepInheritance);
601
602 PEG_METHOD_EXIT();
|
603 kumpf 1.26 return cimClassNames;
|
604 chip 1.17 }
|
605 kumpf 1.26 #endif
|
606 david.dillard 1.9
607 CIMEnumerateClassNamesRequestMessage* request =
608 new CIMEnumerateClassNamesRequestMessage(
|
609 chip 1.17 XmlWriter::getNextMessageId(),
610 nameSpace,
611 className,
612 deepInheritance,
613 QueueIdStack());
614
615 // copy and adjust, as needed, the operation context
616 request->operationContext = _filterOperationContext(context);
|
617 david.dillard 1.9
|
618 chip 1.17 AutoPtr<CIMEnumerateClassNamesResponseMessage> response;
|
619 david.dillard 1.9
620 try
621 {
|
622 chip 1.17 response.reset(dynamic_cast<CIMEnumerateClassNamesResponseMessage*>(
623 do_request(request)));
624
|
625 kumpf 1.26 if (response.get() == 0)
|
626 chip 1.17 {
627 PEG_TRACE_STRING(
628 TRC_CIMOM_HANDLE,
629 Tracer::LEVEL2,
630 "Incorrect response type in CIMOMHandle");
631
632 throw CIMException(CIM_ERR_FAILED);
633 }
|
634 david.dillard 1.9 }
|
635 kumpf 1.26 catch (CIMException &)
|
636 david.dillard 1.9 {
|
637 chip 1.17 PEG_METHOD_EXIT();
|
638 david.dillard 1.9 throw;
639 }
|
640 kumpf 1.26 catch (...)
|
641 david.dillard 1.9 {
|
642 chip 1.17 PEG_TRACE_STRING(
643 TRC_CIMOM_HANDLE,
644 Tracer::LEVEL2,
|
645 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
646 chip 1.17
647 PEG_METHOD_EXIT();
648 throw CIMException(
649 CIM_ERR_FAILED,
650 MessageLoaderParms(
651 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
652 "Exception caught in CIMOMHandle"));
|
653 david.dillard 1.9 }
654
|
655 chip 1.17 Array<CIMName> cimClassNames = response->classNames;
656
|
657 david.dillard 1.9 PEG_METHOD_EXIT();
|
658 kumpf 1.26 return cimClassNames;
|
659 david.dillard 1.9 }
660
661
662 void InternalCIMOMHandleRep::createClass(
663 const OperationContext & context,
664 const CIMNamespaceName& nameSpace,
665 const CIMClass& newClass)
666 {
667 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE, "InternalCIMOMHandleRep::createClass");
668
|
669 kumpf 1.26 #ifdef PEGASUS_OS_OS400
|
670 david.dillard 1.9 // If this is running in user-state, then run the request
671 // through the user-state layer
672 if (_chOS400.hasKey())
673 {
674 _chOS400.createClass(
675 context,
676 nameSpace,
677 newClass);
|
678 chip 1.17
679 PEG_METHOD_EXIT();
|
680 david.dillard 1.9 return;
681 }
|
682 kumpf 1.26 #endif
|
683 david.dillard 1.9
684 CIMCreateClassRequestMessage* request =
685 new CIMCreateClassRequestMessage(
686 XmlWriter::getNextMessageId(),
687 nameSpace,
688 newClass,
|
689 chip 1.17 QueueIdStack());
|
690 david.dillard 1.9
|
691 chip 1.17 // copy and adjust, as needed, the operation context
692 request->operationContext = _filterOperationContext(context);
|
693 david.dillard 1.9
|
694 chip 1.17 AutoPtr<CIMCreateClassResponseMessage> response;
|
695 david.dillard 1.9
696 try
697 {
|
698 chip 1.17 response.reset(dynamic_cast<CIMCreateClassResponseMessage*>(
699 do_request(request)));
700
|
701 kumpf 1.26 if (response.get() == 0)
|
702 chip 1.17 {
703 PEG_TRACE_STRING(
704 TRC_CIMOM_HANDLE,
705 Tracer::LEVEL2,
706 "Incorrect response type in CIMOMHandle");
707
708 throw CIMException(CIM_ERR_FAILED);
709 }
|
710 david.dillard 1.9 }
|
711 kumpf 1.26 catch (CIMException &)
|
712 david.dillard 1.9 {
|
713 chip 1.17 PEG_METHOD_EXIT();
|
714 david.dillard 1.9 throw;
715 }
|
716 kumpf 1.26 catch (...)
|
717 david.dillard 1.9 {
|
718 chip 1.17 PEG_TRACE_STRING(
719 TRC_CIMOM_HANDLE,
720 Tracer::LEVEL2,
|
721 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
722 chip 1.17
723 PEG_METHOD_EXIT();
724 throw CIMException(
725 CIM_ERR_FAILED,
726 MessageLoaderParms(
727 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
728 "Exception caught in CIMOMHandle"));
|
729 david.dillard 1.9 }
730
731 PEG_METHOD_EXIT();
732 return;
733 }
734
735
736 void InternalCIMOMHandleRep::modifyClass(
737 const OperationContext & context,
738 const CIMNamespaceName &nameSpace,
739 const CIMClass& modifiedClass)
740 {
741 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE, "InternalCIMOMHandleRep::modifyClass");
742
|
743 kumpf 1.26 #ifdef PEGASUS_OS_OS400
|
744 david.dillard 1.9 // If this is running in user-state, then run the request
745 // through the user-state layer
746 if (_chOS400.hasKey())
747 {
748 _chOS400.modifyClass(
749 context,
750 nameSpace,
751 modifiedClass);
|
752 chip 1.17
753 PEG_METHOD_EXIT();
|
754 david.dillard 1.9 return;
755 }
|
756 kumpf 1.26 #endif
|
757 david.dillard 1.9
758 CIMModifyClassRequestMessage* request =
759 new CIMModifyClassRequestMessage(
760 XmlWriter::getNextMessageId(),
761 nameSpace,
762 modifiedClass,
|
763 chip 1.17 QueueIdStack());
|
764 david.dillard 1.9
|
765 chip 1.17 // copy and adjust, as needed, the operation context
766 request->operationContext = _filterOperationContext(context);
767
768 AutoPtr<CIMModifyClassResponseMessage> response;
|
769 david.dillard 1.9
770 try
771 {
|
772 chip 1.17 response.reset(dynamic_cast<CIMModifyClassResponseMessage*>(
773 do_request(request)));
774
|
775 kumpf 1.26 if (response.get() == 0)
|
776 chip 1.17 {
777 PEG_TRACE_STRING(
778 TRC_CIMOM_HANDLE,
779 Tracer::LEVEL2,
780 "Incorrect response type in CIMOMHandle");
781
782 throw CIMException(CIM_ERR_FAILED);
783 }
|
784 david.dillard 1.9 }
|
785 kumpf 1.26 catch (CIMException &)
|
786 david.dillard 1.9 {
|
787 chip 1.17 PEG_METHOD_EXIT();
|
788 david.dillard 1.9 throw;
789 }
|
790 kumpf 1.26 catch (...)
|
791 david.dillard 1.9 {
|
792 chip 1.17 PEG_TRACE_STRING(
793 TRC_CIMOM_HANDLE,
794 Tracer::LEVEL2,
|
795 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
796 chip 1.17
797 PEG_METHOD_EXIT();
798 throw CIMException(
799 CIM_ERR_FAILED,
800 MessageLoaderParms(
801 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
802 "Exception caught in CIMOMHandle"));
|
803 david.dillard 1.9 }
804
805 PEG_METHOD_EXIT();
806 return;
807 }
808
809
810 void InternalCIMOMHandleRep::deleteClass(
811 const OperationContext & context,
812 const CIMNamespaceName &nameSpace,
813 const CIMName& className)
814 {
815 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE, "InternalCIMOMHandleRep::deleteClass");
816
|
817 kumpf 1.26 #ifdef PEGASUS_OS_OS400
|
818 david.dillard 1.9 // If this is running in user-state, then run the request
819 // through the user-state layer
820 if (_chOS400.hasKey())
821 {
822 _chOS400.deleteClass(
823 context,
824 nameSpace,
825 className);
|
826 chip 1.17
827 PEG_METHOD_EXIT();
|
828 david.dillard 1.9 return;
829 }
|
830 kumpf 1.26 #endif
|
831 david.dillard 1.9
832 // encode request
833 CIMDeleteClassRequestMessage* request =
834 new CIMDeleteClassRequestMessage(
835 XmlWriter::getNextMessageId(),
836 nameSpace,
837 className,
|
838 chip 1.17 QueueIdStack());
839
840 // copy and adjust, as needed, the operation context
841 request->operationContext = _filterOperationContext(context);
|
842 david.dillard 1.9
|
843 chip 1.17 AutoPtr<CIMDeleteClassResponseMessage> response;
|
844 david.dillard 1.9
|
845 chip 1.17 try
846 {
847 response.reset(dynamic_cast<CIMDeleteClassResponseMessage*>(
848 do_request(request)));
849
|
850 kumpf 1.26 if (response.get() == 0)
|
851 chip 1.17 {
852 PEG_TRACE_STRING(
853 TRC_CIMOM_HANDLE,
854 Tracer::LEVEL2,
855 "Incorrect response type in CIMOMHandle");
856
857 throw CIMException(CIM_ERR_FAILED);
858 }
|
859 david.dillard 1.9 }
|
860 kumpf 1.26 catch (CIMException &)
|
861 david.dillard 1.9 {
|
862 chip 1.17 PEG_METHOD_EXIT();
|
863 david.dillard 1.9 throw;
864 }
|
865 kumpf 1.26 catch (...)
|
866 david.dillard 1.9 {
|
867 chip 1.17 PEG_TRACE_STRING(
868 TRC_CIMOM_HANDLE,
869 Tracer::LEVEL2,
|
870 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
871 chip 1.17
872 PEG_METHOD_EXIT();
873 throw CIMException(
874 CIM_ERR_FAILED,
875 MessageLoaderParms(
876 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
877 "Exception caught in CIMOMHandle"));
|
878 david.dillard 1.9 }
|
879 chip 1.17
|
880 david.dillard 1.9 PEG_METHOD_EXIT();
881 return;
882 }
883
884
885 CIMInstance InternalCIMOMHandleRep::getInstance(
886 const OperationContext & context,
887 const CIMNamespaceName &nameSpace,
888 const CIMObjectPath& instanceName,
889 Boolean localOnly,
890 Boolean includeQualifiers,
891 Boolean includeClassOrigin,
892 const CIMPropertyList& propertyList)
893 {
894 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE, "InternalCIMOMHandleRep::getInstance");
895
|
896 kumpf 1.26 #ifdef PEGASUS_OS_OS400
|
897 david.dillard 1.9 // If this is running in user-state, then run the request
898 // through the user-state layer
899 if (_chOS400.hasKey())
900 {
|
901 chip 1.17 CIMInstance cimInstance =
902 _chOS400.getInstance(
903 context,
904 nameSpace,
905 instanceName,
906 localOnly,
907 includeQualifiers,
908 includeClassOrigin,
909 propertyList);
910
911 PEG_METHOD_EXIT();
|
912 kumpf 1.26 return cimInstance;
|
913 david.dillard 1.9 }
|
914 kumpf 1.26 #endif
|
915 david.dillard 1.9
916 // encode request
917 CIMGetInstanceRequestMessage* request =
918 new CIMGetInstanceRequestMessage(
919 XmlWriter::getNextMessageId(),
920 nameSpace,
921 instanceName,
922 localOnly,
923 includeQualifiers,
924 includeClassOrigin,
925 propertyList,
|
926 chip 1.17 QueueIdStack());
927
928 // copy and adjust, as needed, the operation context
929 request->operationContext = _filterOperationContext(context);
|
930 david.dillard 1.9
|
931 chip 1.17 AutoPtr<CIMGetInstanceResponseMessage> response;
|
932 david.dillard 1.9
933 try
934 {
|
935 chip 1.17 response.reset(dynamic_cast<CIMGetInstanceResponseMessage*>(
936 do_request(request)));
937
|
938 kumpf 1.26 if (response.get() == 0)
|
939 chip 1.17 {
940 PEG_TRACE_STRING(
941 TRC_CIMOM_HANDLE,
942 Tracer::LEVEL2,
943 "Incorrect response type in CIMOMHandle");
944
945 throw CIMException(CIM_ERR_FAILED);
946 }
|
947 david.dillard 1.9 }
|
948 kumpf 1.26 catch (CIMException &)
|
949 david.dillard 1.9 {
|
950 chip 1.17 PEG_METHOD_EXIT();
|
951 david.dillard 1.9 throw;
952 }
|
953 kumpf 1.26 catch (...)
|
954 david.dillard 1.9 {
|
955 chip 1.17 PEG_TRACE_STRING(
956 TRC_CIMOM_HANDLE,
957 Tracer::LEVEL2,
|
958 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
959 chip 1.17
960 PEG_METHOD_EXIT();
961 throw CIMException(
962 CIM_ERR_FAILED,
963 MessageLoaderParms(
964 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
965 "Exception caught in CIMOMHandle"));
|
966 david.dillard 1.9 }
967
968 CIMInstance cimInstance = response->cimInstance;
969
970 PEG_METHOD_EXIT();
|
971 kumpf 1.26 return cimInstance;
|
972 david.dillard 1.9 }
973
974 Array<CIMInstance> InternalCIMOMHandleRep::enumerateInstances(
975 const OperationContext & context,
976 const CIMNamespaceName &nameSpace,
977 const CIMName& className,
978 Boolean deepInheritance,
979 Boolean localOnly,
980 Boolean includeQualifiers,
981 Boolean includeClassOrigin,
982 const CIMPropertyList& propertyList)
983 {
984 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE,
985 "InternalCIMOMHandleRep::enumerateInstances");
986
|
987 kumpf 1.26 #ifdef PEGASUS_OS_OS400
|
988 david.dillard 1.9 // If this is running in user-state, then run the request
989 // through the user-state layer
990 if (_chOS400.hasKey())
991 {
|
992 chip 1.17 Array<CIMInstance> cimInstances =
993 _chOS400.enumerateInstances(
994 context,
995 nameSpace,
996 className,
997 deepInheritance,
998 localOnly,
999 includeQualifiers,
1000 includeClassOrigin,
1001 propertyList);
1002
1003 PEG_METHOD_EXIT();
|
1004 kumpf 1.26 return cimInstances;
|
1005 david.dillard 1.9 }
|
1006 kumpf 1.26 #endif
|
1007 david.dillard 1.9
1008 // encode request
1009 CIMEnumerateInstancesRequestMessage* request =
1010 new CIMEnumerateInstancesRequestMessage(
1011 XmlWriter::getNextMessageId(),
1012 nameSpace,
1013 className,
1014 deepInheritance,
1015 localOnly,
1016 includeQualifiers,
1017 includeClassOrigin,
1018 propertyList,
|
1019 chip 1.17 QueueIdStack());
|
1020 david.dillard 1.9
|
1021 chip 1.17 // copy and adjust, as needed, the operation context
1022 request->operationContext = _filterOperationContext(context);
1023
1024 AutoPtr<CIMEnumerateInstancesResponseMessage> response;
|
1025 david.dillard 1.9
1026 try
1027 {
|
1028 chip 1.17 response.reset(dynamic_cast<CIMEnumerateInstancesResponseMessage*>(
1029 do_request(request)));
1030
|
1031 kumpf 1.26 if (response.get() == 0)
|
1032 chip 1.17 {
1033 PEG_TRACE_STRING(
1034 TRC_CIMOM_HANDLE,
1035 Tracer::LEVEL2,
1036 "Incorrect response type in CIMOMHandle");
1037
1038 throw CIMException(CIM_ERR_FAILED);
1039 }
|
1040 david.dillard 1.9 }
|
1041 kumpf 1.26 catch (CIMException &)
|
1042 david.dillard 1.9 {
|
1043 chip 1.17 PEG_METHOD_EXIT();
|
1044 david.dillard 1.9 throw;
1045 }
|
1046 kumpf 1.26 catch (...)
|
1047 david.dillard 1.9 {
|
1048 chip 1.17 PEG_TRACE_STRING(
1049 TRC_CIMOM_HANDLE,
1050 Tracer::LEVEL2,
|
1051 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
1052 chip 1.17
1053 PEG_METHOD_EXIT();
1054 throw CIMException(
1055 CIM_ERR_FAILED,
1056 MessageLoaderParms(
1057 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
1058 "Exception caught in CIMOMHandle"));
|
1059 david.dillard 1.9 }
1060
1061 Array<CIMInstance> cimInstances = response->cimNamedInstances;
1062
1063 PEG_METHOD_EXIT();
|
1064 kumpf 1.26 return cimInstances;
|
1065 david.dillard 1.9 }
1066
1067
1068 Array<CIMObjectPath> InternalCIMOMHandleRep::enumerateInstanceNames(
1069 const OperationContext & context,
1070 const CIMNamespaceName &nameSpace,
1071 const CIMName& className)
1072 {
1073 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE,
1074 "InternalCIMOMHandleRep::enumerateInstanceNames");
1075
|
1076 kumpf 1.26 #ifdef PEGASUS_OS_OS400
|
1077 david.dillard 1.9 // If this is running in user-state, then run the request
1078 // through the user-state layer
1079 if (_chOS400.hasKey())
1080 {
|
1081 chip 1.17 Array<CIMObjectPath> cimObjectPaths =
1082 _chOS400.enumerateInstanceNames(
1083 context,
1084 nameSpace,
1085 className);
1086
1087 PEG_METHOD_EXIT();
|
1088 kumpf 1.26 return cimObjectPaths;
|
1089 david.dillard 1.9 }
|
1090 kumpf 1.26 #endif
|
1091 david.dillard 1.9
1092 // encode request
1093 CIMEnumerateInstanceNamesRequestMessage* request =
1094 new CIMEnumerateInstanceNamesRequestMessage(
1095 XmlWriter::getNextMessageId(),
1096 nameSpace,
1097 className,
|
1098 chip 1.17 QueueIdStack());
|
1099 david.dillard 1.9
|
1100 chip 1.17 // copy and adjust, as needed, the operation context
1101 request->operationContext = _filterOperationContext(context);
1102
1103 AutoPtr<CIMEnumerateInstanceNamesResponseMessage> response;
|
1104 david.dillard 1.9
1105 try
1106 {
|
1107 chip 1.17 response.reset(dynamic_cast<CIMEnumerateInstanceNamesResponseMessage*>(
1108 do_request(request)));
1109
|
1110 kumpf 1.26 if (response.get() == 0)
|
1111 chip 1.17 {
1112 PEG_TRACE_STRING(
1113 TRC_CIMOM_HANDLE,
1114 Tracer::LEVEL2,
1115 "Incorrect response type in CIMOMHandle");
1116
1117 throw CIMException(CIM_ERR_FAILED);
1118 }
|
1119 david.dillard 1.9 }
|
1120 kumpf 1.26 catch (CIMException &)
|
1121 david.dillard 1.9 {
|
1122 chip 1.17 PEG_METHOD_EXIT();
|
1123 david.dillard 1.9 throw;
1124 }
|
1125 kumpf 1.26 catch (...)
|
1126 david.dillard 1.9 {
|
1127 chip 1.17 PEG_TRACE_STRING(
1128 TRC_CIMOM_HANDLE,
1129 Tracer::LEVEL2,
|
1130 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
1131 chip 1.17
1132 PEG_METHOD_EXIT();
1133 throw CIMException(
1134 CIM_ERR_FAILED,
1135 MessageLoaderParms(
1136 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
1137 "Exception caught in CIMOMHandle"));
|
1138 david.dillard 1.9 }
1139
|
1140 chip 1.17 Array<CIMObjectPath> cimObjectPaths = response->instanceNames;
|
1141 david.dillard 1.9
1142 PEG_METHOD_EXIT();
|
1143 kumpf 1.26 return cimObjectPaths;
|
1144 david.dillard 1.9 }
1145
1146 CIMObjectPath InternalCIMOMHandleRep::createInstance(
1147 const OperationContext & context,
1148 const CIMNamespaceName &nameSpace,
1149 const CIMInstance& newInstance)
1150 {
1151 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE,
1152 "InternalCIMOMHandleRep::createInstance");
1153
|
1154 kumpf 1.26 #ifdef PEGASUS_OS_OS400
|
1155 david.dillard 1.9 // If this is running in user-state, then run the request
1156 // through the user-state layer
1157 if (_chOS400.hasKey())
1158 {
|
1159 chip 1.17 CIMObjectPath cimReference =
1160 _chOS400.createInstance(
1161 context,
1162 nameSpace,
1163 newInstance);
1164
1165 PEG_METHOD_EXIT();
|
1166 kumpf 1.26 return cimReference;
|
1167 david.dillard 1.9 }
|
1168 kumpf 1.26 #endif
|
1169 david.dillard 1.9
1170 CIMCreateInstanceRequestMessage* request =
1171 new CIMCreateInstanceRequestMessage(
1172 XmlWriter::getNextMessageId(),
1173 nameSpace,
1174 newInstance,
|
1175 chip 1.17 QueueIdStack());
|
1176 david.dillard 1.9
|
1177 chip 1.17 // copy and adjust, as needed, the operation context
1178 request->operationContext = _filterOperationContext(context);
1179
1180 AutoPtr<CIMCreateInstanceResponseMessage> response;
|
1181 david.dillard 1.9
1182 try
1183 {
|
1184 chip 1.17 response.reset(dynamic_cast<CIMCreateInstanceResponseMessage*>(
1185 do_request(request)));
1186
|
1187 kumpf 1.26 if (response.get() == 0)
|
1188 chip 1.17 {
1189 PEG_TRACE_STRING(
1190 TRC_CIMOM_HANDLE,
1191 Tracer::LEVEL2,
1192 "Incorrect response type in CIMOMHandle");
1193
1194 throw CIMException(CIM_ERR_FAILED);
1195 }
|
1196 david.dillard 1.9 }
|
1197 kumpf 1.26 catch (CIMException &)
|
1198 david.dillard 1.9 {
|
1199 chip 1.17 PEG_METHOD_EXIT();
|
1200 david.dillard 1.9 throw;
1201 }
|
1202 kumpf 1.26 catch (...)
|
1203 david.dillard 1.9 {
|
1204 chip 1.17 PEG_TRACE_STRING(
1205 TRC_CIMOM_HANDLE,
1206 Tracer::LEVEL2,
|
1207 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
1208 chip 1.17
1209 PEG_METHOD_EXIT();
1210 throw CIMException(
1211 CIM_ERR_FAILED,
1212 MessageLoaderParms(
1213 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
1214 "Exception caught in CIMOMHandle"));
|
1215 david.dillard 1.9 }
1216
1217 CIMObjectPath cimReference = response->instanceName;
1218
1219 PEG_METHOD_EXIT();
|
1220 kumpf 1.26 return cimReference;
|
1221 david.dillard 1.9 }
1222
1223
1224 void InternalCIMOMHandleRep::modifyInstance(
1225 const OperationContext & context,
1226 const CIMNamespaceName &nameSpace,
1227 const CIMInstance& modifiedInstance,
1228 Boolean includeQualifiers,
1229 const CIMPropertyList& propertyList)
1230 {
1231 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE,
1232 "InternalCIMOMHandleRep::modifyInstance");
1233
|
1234 kumpf 1.26 #ifdef PEGASUS_OS_OS400
|
1235 david.dillard 1.9 // If this is running in user-state, then run the request
1236 // through the user-state layer
1237 if (_chOS400.hasKey())
1238 {
1239 _chOS400.modifyInstance(
1240 context,
1241 nameSpace,
1242 modifiedInstance,
1243 includeQualifiers,
1244 propertyList);
|
1245 chip 1.17
1246 PEG_METHOD_EXIT();
|
1247 david.dillard 1.9 return;
1248 }
|
1249 kumpf 1.26 #endif
|
1250 david.dillard 1.9
1251 CIMModifyInstanceRequestMessage* request =
1252 new CIMModifyInstanceRequestMessage(
1253 XmlWriter::getNextMessageId(),
1254 nameSpace,
1255 modifiedInstance,
1256 includeQualifiers,
1257 propertyList,
|
1258 chip 1.17 QueueIdStack());
|
1259 david.dillard 1.9
|
1260 chip 1.17 // copy and adjust, as needed, the operation context
1261 request->operationContext = _filterOperationContext(context);
|
1262 david.dillard 1.9
|
1263 chip 1.17 AutoPtr<CIMModifyInstanceResponseMessage> response;
|
1264 david.dillard 1.9
1265 try
1266 {
|
1267 chip 1.17 response.reset(dynamic_cast<CIMModifyInstanceResponseMessage*>(
1268 do_request(request)));
1269
|
1270 kumpf 1.26 if (response.get() == 0)
|
1271 chip 1.17 {
1272 PEG_TRACE_STRING(
1273 TRC_CIMOM_HANDLE,
1274 Tracer::LEVEL2,
1275 "Incorrect response type in CIMOMHandle");
1276
1277 throw CIMException(CIM_ERR_FAILED);
1278 }
|
1279 david.dillard 1.9 }
|
1280 kumpf 1.26 catch (CIMException &)
|
1281 david.dillard 1.9 {
|
1282 chip 1.17 PEG_METHOD_EXIT();
|
1283 david.dillard 1.9 throw;
1284 }
|
1285 kumpf 1.26 catch (...)
|
1286 david.dillard 1.9 {
|
1287 chip 1.17 PEG_TRACE_STRING(
1288 TRC_CIMOM_HANDLE,
1289 Tracer::LEVEL2,
|
1290 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
1291 chip 1.17
1292 PEG_METHOD_EXIT();
1293 throw CIMException(
1294 CIM_ERR_FAILED,
1295 MessageLoaderParms(
1296 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
1297 "Exception caught in CIMOMHandle"));
|
1298 david.dillard 1.9 }
1299
1300 PEG_METHOD_EXIT();
1301 return;
1302 }
1303
1304
1305 void InternalCIMOMHandleRep::deleteInstance(
1306 const OperationContext & context,
1307 const CIMNamespaceName &nameSpace,
1308 const CIMObjectPath& instanceName)
1309 {
1310 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE,
1311 "InternalCIMOMHandleRep::deleteInstance");
1312
|
1313 kumpf 1.26 #ifdef PEGASUS_OS_OS400
|
1314 david.dillard 1.9 // If this is running in user-state, then run the request
1315 // through the user-state layer
1316 if (_chOS400.hasKey())
1317 {
1318 _chOS400.deleteInstance(
1319 context,
1320 nameSpace,
1321 instanceName);
|
1322 chip 1.17
1323 PEG_METHOD_EXIT();
|
1324 david.dillard 1.9 return;
1325 }
|
1326 kumpf 1.26 #endif
|
1327 david.dillard 1.9
1328 CIMDeleteInstanceRequestMessage* request =
1329 new CIMDeleteInstanceRequestMessage(
1330 XmlWriter::getNextMessageId(),
1331 nameSpace,
1332 instanceName,
|
1333 chip 1.17 QueueIdStack());
|
1334 david.dillard 1.9
|
1335 chip 1.17 // copy and adjust, as needed, the operation context
1336 request->operationContext = _filterOperationContext(context);
|
1337 david.dillard 1.9
|
1338 chip 1.17 AutoPtr<CIMDeleteInstanceResponseMessage> response;
|
1339 david.dillard 1.9
1340 try
1341 {
|
1342 chip 1.17 response.reset(dynamic_cast<CIMDeleteInstanceResponseMessage*>(
1343 do_request(request)));
1344
|
1345 kumpf 1.26 if (response.get() == 0)
|
1346 chip 1.17 {
1347 PEG_TRACE_STRING(
1348 TRC_CIMOM_HANDLE,
1349 Tracer::LEVEL2,
1350 "Incorrect response type in CIMOMHandle");
1351
1352 throw CIMException(CIM_ERR_FAILED);
1353 }
|
1354 david.dillard 1.9 }
|
1355 kumpf 1.26 catch (CIMException &)
|
1356 david.dillard 1.9 {
|
1357 chip 1.17 PEG_METHOD_EXIT();
|
1358 david.dillard 1.9 throw;
1359 }
|
1360 kumpf 1.26 catch (...)
|
1361 david.dillard 1.9 {
|
1362 chip 1.17 PEG_TRACE_STRING(
1363 TRC_CIMOM_HANDLE,
1364 Tracer::LEVEL2,
|
1365 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
1366 chip 1.17
1367 PEG_METHOD_EXIT();
1368 throw CIMException(
1369 CIM_ERR_FAILED,
1370 MessageLoaderParms(
1371 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
1372 "Exception caught in CIMOMHandle"));
|
1373 david.dillard 1.9 }
1374
1375 PEG_METHOD_EXIT();
1376 return;
1377 }
1378
1379
1380 Array<CIMObject> InternalCIMOMHandleRep::execQuery(
1381 const OperationContext & context,
1382 const CIMNamespaceName &nameSpace,
1383 const String& queryLanguage,
1384 const String& query)
1385 {
1386 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE, "InternalCIMOMHandleRep::execQuery");
1387
|
1388 kumpf 1.26 #ifdef PEGASUS_OS_OS400
|
1389 david.dillard 1.9 // If this is running in user-state, then run the request
1390 // through the user-state layer
1391 if (_chOS400.hasKey())
1392 {
|
1393 chip 1.17 Array<CIMObject> cimObjects =
1394 _chOS400.execQuery(
1395 context,
1396 nameSpace,
1397 queryLanguage,
1398 query);
1399
1400 PEG_METHOD_EXIT();
|
1401 kumpf 1.26 return cimObjects;
|
1402 david.dillard 1.9 }
|
1403 kumpf 1.26 #endif
|
1404 david.dillard 1.9
1405 CIMExecQueryRequestMessage* request =
1406 new CIMExecQueryRequestMessage(
1407 XmlWriter::getNextMessageId(),
1408 nameSpace,
1409 queryLanguage,
1410 query,
|
1411 chip 1.17 QueueIdStack());
|
1412 david.dillard 1.9
|
1413 chip 1.17 // copy and adjust, as needed, the operation context
1414 request->operationContext = _filterOperationContext(context);
|
1415 david.dillard 1.9
|
1416 chip 1.17 AutoPtr<CIMExecQueryResponseMessage> response;
|
1417 david.dillard 1.9
1418 try
1419 {
|
1420 chip 1.17 response.reset(dynamic_cast<CIMExecQueryResponseMessage*>(
1421 do_request(request)));
1422
|
1423 kumpf 1.26 if (response.get() == 0)
|
1424 chip 1.17 {
1425 PEG_TRACE_STRING(
1426 TRC_CIMOM_HANDLE,
1427 Tracer::LEVEL2,
1428 "Incorrect response type in CIMOMHandle");
1429
1430 throw CIMException(CIM_ERR_FAILED);
1431 }
|
1432 david.dillard 1.9 }
|
1433 kumpf 1.26 catch (CIMException &)
|
1434 david.dillard 1.9 {
|
1435 chip 1.17 PEG_METHOD_EXIT();
|
1436 david.dillard 1.9 throw;
1437 }
|
1438 kumpf 1.26 catch (...)
|
1439 david.dillard 1.9 {
|
1440 chip 1.17 PEG_TRACE_STRING(
1441 TRC_CIMOM_HANDLE,
1442 Tracer::LEVEL2,
|
1443 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
1444 chip 1.17
1445 PEG_METHOD_EXIT();
1446 throw CIMException(
1447 CIM_ERR_FAILED,
1448 MessageLoaderParms(
1449 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
1450 "Exception caught in CIMOMHandle"));
|
1451 david.dillard 1.9 }
1452
1453 Array<CIMObject> cimObjects = response->cimObjects;
1454
1455 PEG_METHOD_EXIT();
|
1456 kumpf 1.26 return cimObjects;
|
1457 david.dillard 1.9 }
1458
1459
1460 Array<CIMObject> InternalCIMOMHandleRep::associators(
1461 const OperationContext & context,
1462 const CIMNamespaceName &nameSpace,
1463 const CIMObjectPath& objectName,
1464 const CIMName& assocClass,
1465 const CIMName& resultClass,
1466 const String& role,
1467 const String& resultRole,
1468 Boolean includeQualifiers,
1469 Boolean includeClassOrigin,
1470 const CIMPropertyList& propertyList)
1471 {
1472 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE, "InternalCIMOMHandleRep::associators");
1473
|
1474 kumpf 1.26 #ifdef PEGASUS_OS_OS400
|
1475 david.dillard 1.9 // If this is running in user-state, then run the request
1476 // through the user-state layer
1477 if (_chOS400.hasKey())
1478 {
|
1479 chip 1.17 Array<CIMObject> cimObjects =
1480 _chOS400.associators(
1481 context,
1482 nameSpace,
1483 objectName,
1484 assocClass,
1485 resultClass,
1486 role,
1487 resultRole,
1488 includeQualifiers,
1489 includeClassOrigin,
1490 propertyList);
1491
1492 PEG_METHOD_EXIT();
|
1493 kumpf 1.26 return cimObjects;
|
1494 chip 1.17 }
|
1495 kumpf 1.26 #endif
|
1496 chip 1.17
1497 CIMAssociatorsRequestMessage* request =
1498 new CIMAssociatorsRequestMessage(
1499 XmlWriter::getNextMessageId(),
|
1500 david.dillard 1.9 nameSpace,
1501 objectName,
1502 assocClass,
1503 resultClass,
1504 role,
1505 resultRole,
1506 includeQualifiers,
1507 includeClassOrigin,
|
1508 chip 1.17 propertyList,
1509 QueueIdStack());
|
1510 david.dillard 1.9
|
1511 chip 1.17 // copy and adjust, as needed, the operation context
1512 request->operationContext = _filterOperationContext(context);
|
1513 david.dillard 1.9
|
1514 chip 1.17 AutoPtr<CIMAssociatorsResponseMessage> response;
|
1515 david.dillard 1.9
1516 try
1517 {
|
1518 chip 1.17 response.reset(dynamic_cast<CIMAssociatorsResponseMessage*>(
1519 do_request(request)));
1520
|
1521 kumpf 1.26 if (response.get() == 0)
|
1522 chip 1.17 {
1523 PEG_TRACE_STRING(
1524 TRC_CIMOM_HANDLE,
1525 Tracer::LEVEL2,
1526 "Incorrect response type in CIMOMHandle");
1527
1528 throw CIMException(CIM_ERR_FAILED);
1529 }
|
1530 david.dillard 1.9 }
|
1531 kumpf 1.26 catch (CIMException &)
|
1532 david.dillard 1.9 {
|
1533 chip 1.17 PEG_METHOD_EXIT();
|
1534 david.dillard 1.9 throw;
1535 }
|
1536 kumpf 1.26 catch (...)
|
1537 david.dillard 1.9 {
|
1538 chip 1.17 PEG_TRACE_STRING(
1539 TRC_CIMOM_HANDLE,
1540 Tracer::LEVEL2,
|
1541 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
1542 chip 1.17
1543 PEG_METHOD_EXIT();
1544 throw CIMException(
1545 CIM_ERR_FAILED,
1546 MessageLoaderParms(
1547 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
1548 "Exception caught in CIMOMHandle"));
|
1549 david.dillard 1.9 }
1550
1551 Array<CIMObject> cimObjects = response->cimObjects;
1552
1553 PEG_METHOD_EXIT();
|
1554 kumpf 1.26 return cimObjects;
|
1555 david.dillard 1.9 }
1556
1557
1558 Array<CIMObjectPath> InternalCIMOMHandleRep::associatorNames(
1559 const OperationContext & context,
1560 const CIMNamespaceName &nameSpace,
1561 const CIMObjectPath& objectName,
1562 const CIMName& assocClass,
1563 const CIMName& resultClass,
1564 const String& role,
1565 const String& resultRole)
1566 {
1567 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE,
1568 "InternalCIMOMHandleRep::associatorNames");
1569
|
1570 kumpf 1.26 #ifdef PEGASUS_OS_OS400
|
1571 david.dillard 1.9 // If this is running in user-state, then run the request
1572 // through the user-state layer
1573 if (_chOS400.hasKey())
1574 {
|
1575 chip 1.17 Array<CIMObjectPath> cimObjectPaths =
1576 _chOS400.associatorNames(
1577 context,
1578 nameSpace,
1579 objectName,
1580 assocClass,
1581 resultClass,
1582 role,
1583 resultRole);
1584
1585 PEG_METHOD_EXIT();
|
1586 kumpf 1.26 return cimObjectPaths;
|
1587 david.dillard 1.9 }
|
1588 kumpf 1.26 #endif
|
1589 david.dillard 1.9
1590 CIMAssociatorNamesRequestMessage* request =
1591 new CIMAssociatorNamesRequestMessage(
1592 XmlWriter::getNextMessageId(),
1593 nameSpace,
1594 objectName,
1595 assocClass,
1596 resultClass,
1597 role,
1598 resultRole,
|
1599 chip 1.17 QueueIdStack());
|
1600 david.dillard 1.9
|
1601 chip 1.17 // copy and adjust, as needed, the operation context
1602 request->operationContext = _filterOperationContext(context);
|
1603 david.dillard 1.9
|
1604 chip 1.17 AutoPtr<CIMAssociatorNamesResponseMessage> response;
|
1605 david.dillard 1.9
1606 try
1607 {
|
1608 chip 1.17 response.reset(dynamic_cast<CIMAssociatorNamesResponseMessage*>(
1609 do_request(request)));
1610
|
1611 kumpf 1.26 if (response.get() == 0)
|
1612 chip 1.17 {
1613 PEG_TRACE_STRING(
1614 TRC_CIMOM_HANDLE,
1615 Tracer::LEVEL2,
1616 "Incorrect response type in CIMOMHandle");
1617
1618 throw CIMException(CIM_ERR_FAILED);
1619 }
|
1620 david.dillard 1.9 }
|
1621 kumpf 1.26 catch (CIMException &)
|
1622 david.dillard 1.9 {
|
1623 chip 1.17 PEG_METHOD_EXIT();
|
1624 david.dillard 1.9 throw;
1625 }
|
1626 kumpf 1.26 catch (...)
|
1627 david.dillard 1.9 {
|
1628 chip 1.17 PEG_TRACE_STRING(
1629 TRC_CIMOM_HANDLE,
1630 Tracer::LEVEL2,
|
1631 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
1632 chip 1.17
1633 PEG_METHOD_EXIT();
1634 throw CIMException(
1635 CIM_ERR_FAILED,
1636 MessageLoaderParms(
1637 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
1638 "Exception caught in CIMOMHandle"));
|
1639 david.dillard 1.9 }
1640
1641 Array<CIMObjectPath> cimObjectPaths = response->objectNames;
1642
1643 PEG_METHOD_EXIT();
|
1644 kumpf 1.26 return cimObjectPaths;
|
1645 david.dillard 1.9 }
1646
1647
1648 Array<CIMObject> InternalCIMOMHandleRep::references(
1649 const OperationContext & context,
1650 const CIMNamespaceName &nameSpace,
1651 const CIMObjectPath& objectName,
1652 const CIMName& resultClass,
1653 const String& role,
1654 Boolean includeQualifiers,
1655 Boolean includeClassOrigin,
1656 const CIMPropertyList& propertyList)
1657 {
1658 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE, "InternalCIMOMHandleRep::references");
1659
|
1660 kumpf 1.26 #ifdef PEGASUS_OS_OS400
|
1661 david.dillard 1.9 // If this is running in user-state, then run the request
1662 // through the user-state layer
1663 if (_chOS400.hasKey())
1664 {
|
1665 chip 1.17 Array<CIMObject> cimObjects =
1666 _chOS400.references(
1667 context,
1668 nameSpace,
1669 objectName,
1670 resultClass,
1671 role,
1672 includeQualifiers,
1673 includeClassOrigin,
1674 propertyList);
1675
1676 PEG_METHOD_EXIT();
|
1677 kumpf 1.26 return cimObjects;
|
1678 david.dillard 1.9 }
|
1679 kumpf 1.26 #endif
|
1680 david.dillard 1.9
1681 CIMReferencesRequestMessage* request =
1682 new CIMReferencesRequestMessage(
1683 XmlWriter::getNextMessageId(),
1684 nameSpace,
1685 objectName,
1686 resultClass,
1687 role,
1688 includeQualifiers,
1689 includeClassOrigin,
1690 propertyList,
|
1691 chip 1.17 QueueIdStack());
|
1692 david.dillard 1.9
|
1693 chip 1.17 // copy and adjust, as needed, the operation context
1694 request->operationContext = _filterOperationContext(context);
|
1695 david.dillard 1.9
|
1696 chip 1.17 AutoPtr<CIMReferencesResponseMessage> response;
|
1697 david.dillard 1.9
1698 try
1699 {
|
1700 chip 1.17 response.reset(dynamic_cast<CIMReferencesResponseMessage*>(
1701 do_request(request)));
1702
|
1703 kumpf 1.26 if (response.get() == 0)
|
1704 chip 1.17 {
1705 PEG_TRACE_STRING(
1706 TRC_CIMOM_HANDLE,
1707 Tracer::LEVEL2,
1708 "Incorrect response type in CIMOMHandle");
1709
1710 throw CIMException(CIM_ERR_FAILED);
1711 }
|
1712 david.dillard 1.9 }
|
1713 kumpf 1.26 catch (CIMException &)
|
1714 david.dillard 1.9 {
|
1715 chip 1.17 PEG_METHOD_EXIT();
|
1716 david.dillard 1.9 throw;
1717 }
|
1718 kumpf 1.26 catch (...)
|
1719 david.dillard 1.9 {
|
1720 chip 1.17 PEG_TRACE_STRING(
1721 TRC_CIMOM_HANDLE,
1722 Tracer::LEVEL2,
|
1723 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
1724 chip 1.17
1725 PEG_METHOD_EXIT();
1726 throw CIMException(
1727 CIM_ERR_FAILED,
1728 MessageLoaderParms(
1729 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
1730 "Exception caught in CIMOMHandle"));
|
1731 david.dillard 1.9 }
1732
1733 Array<CIMObject> cimObjects = response->cimObjects;
1734
1735 PEG_METHOD_EXIT();
|
1736 kumpf 1.26 return cimObjects;
|
1737 david.dillard 1.9 }
1738
1739
1740 Array<CIMObjectPath> InternalCIMOMHandleRep::referenceNames(
1741 const OperationContext & context,
1742 const CIMNamespaceName &nameSpace,
1743 const CIMObjectPath& objectName,
1744 const CIMName& resultClass,
1745 const String& role)
1746 {
1747 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE,
1748 "InternalCIMOMHandleRep::referenceNames");
1749
|
1750 kumpf 1.26 #ifdef PEGASUS_OS_OS400
|
1751 david.dillard 1.9 // If this is running in user-state, then run the request
1752 // through the user-state layer
1753 if (_chOS400.hasKey())
1754 {
|
1755 chip 1.17 Array<CIMObjectPath> cimObjectPaths =
1756 _chOS400.referenceNames(
1757 context,
1758 nameSpace,
1759 objectName,
1760 resultClass,
1761 role);
1762
1763 PEG_METHOD_EXIT();
|
1764 kumpf 1.26 return cimObjectPaths;
|
1765 david.dillard 1.9 }
|
1766 kumpf 1.26 #endif
|
1767 david.dillard 1.9
1768 CIMReferenceNamesRequestMessage* request =
1769 new CIMReferenceNamesRequestMessage(
1770 XmlWriter::getNextMessageId(),
1771 nameSpace,
1772 objectName,
1773 resultClass,
1774 role,
|
1775 chip 1.17 QueueIdStack());
|
1776 david.dillard 1.9
|
1777 chip 1.17 // copy and adjust, as needed, the operation context
1778 request->operationContext = _filterOperationContext(context);
|
1779 david.dillard 1.9
|
1780 chip 1.17 AutoPtr<CIMReferenceNamesResponseMessage> response;
|
1781 david.dillard 1.9
1782 try
1783 {
|
1784 chip 1.17 response.reset(dynamic_cast<CIMReferenceNamesResponseMessage*>(
1785 do_request(request)));
1786
|
1787 kumpf 1.26 if (response.get() == 0)
|
1788 chip 1.17 {
1789 PEG_TRACE_STRING(
1790 TRC_CIMOM_HANDLE,
1791 Tracer::LEVEL2,
1792 "Incorrect response type in CIMOMHandle");
1793
1794 throw CIMException(CIM_ERR_FAILED);
1795 }
|
1796 david.dillard 1.9 }
|
1797 kumpf 1.26 catch (CIMException &)
|
1798 david.dillard 1.9 {
|
1799 chip 1.17 PEG_METHOD_EXIT();
|
1800 david.dillard 1.9 throw;
1801 }
|
1802 kumpf 1.26 catch (...)
|
1803 david.dillard 1.9 {
|
1804 chip 1.17 PEG_TRACE_STRING(
1805 TRC_CIMOM_HANDLE,
1806 Tracer::LEVEL2,
|
1807 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
1808 chip 1.17
1809 PEG_METHOD_EXIT();
1810 throw CIMException(
1811 CIM_ERR_FAILED,
1812 MessageLoaderParms(
1813 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
1814 "Exception caught in CIMOMHandle"));
|
1815 david.dillard 1.9 }
1816
1817 Array<CIMObjectPath> cimObjectPaths = response->objectNames;
1818
1819 PEG_METHOD_EXIT();
|
1820 kumpf 1.26 return cimObjectPaths;
|
1821 david.dillard 1.9 }
1822
1823
1824 CIMValue InternalCIMOMHandleRep::getProperty(
1825 const OperationContext & context,
1826 const CIMNamespaceName &nameSpace,
1827 const CIMObjectPath& instanceName,
1828 const CIMName& propertyName)
1829 {
1830 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE, "InternalCIMOMHandleRep::getProperty");
1831
|
1832 kumpf 1.26 #ifdef PEGASUS_OS_OS400
|
1833 david.dillard 1.9 // If this is running in user-state, then run the request
1834 // through the user-state layer
1835 if (_chOS400.hasKey())
1836 {
|
1837 chip 1.17 CIMValue cimValue =
1838 _chOS400.getProperty(
1839 context,
1840 nameSpace,
1841 instanceName,
1842 propertyName);
1843
1844 PEG_METHOD_EXIT();
|
1845 kumpf 1.26 return cimValue;
|
1846 david.dillard 1.9 }
|
1847 kumpf 1.26 #endif
|
1848 david.dillard 1.9
1849 CIMGetPropertyRequestMessage* request =
1850 new CIMGetPropertyRequestMessage(
|
1851 chip 1.17 XmlWriter::getNextMessageId(),
1852 nameSpace,
1853 instanceName,
1854 propertyName,
1855 QueueIdStack());
|
1856 david.dillard 1.9
|
1857 chip 1.17 // copy and adjust, as needed, the operation context
1858 request->operationContext = _filterOperationContext(context);
|
1859 david.dillard 1.9
|
1860 chip 1.17 AutoPtr<CIMGetPropertyResponseMessage> response;
|
1861 david.dillard 1.9
1862 try
1863 {
|
1864 chip 1.17 response.reset(dynamic_cast<CIMGetPropertyResponseMessage*>(
1865 do_request(request)));
1866
|
1867 kumpf 1.26 if (response.get() == 0)
|
1868 chip 1.17 {
1869 PEG_TRACE_STRING(
1870 TRC_CIMOM_HANDLE,
1871 Tracer::LEVEL2,
1872 "Incorrect response type in CIMOMHandle");
1873
1874 throw CIMException(CIM_ERR_FAILED);
1875 }
|
1876 david.dillard 1.9 }
|
1877 kumpf 1.26 catch (CIMException &)
|
1878 david.dillard 1.9 {
|
1879 chip 1.17 PEG_METHOD_EXIT();
|
1880 david.dillard 1.9 throw;
1881 }
|
1882 kumpf 1.26 catch (...)
|
1883 david.dillard 1.9 {
|
1884 chip 1.17 PEG_TRACE_STRING(
1885 TRC_CIMOM_HANDLE,
1886 Tracer::LEVEL2,
|
1887 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
1888 chip 1.17
1889 PEG_METHOD_EXIT();
1890 throw CIMException(
1891 CIM_ERR_FAILED,
1892 MessageLoaderParms(
1893 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
1894 "Exception caught in CIMOMHandle"));
|
1895 david.dillard 1.9 }
1896
1897 CIMValue cimValue = response->value;
1898
1899 PEG_METHOD_EXIT();
|
1900 kumpf 1.26 return cimValue;
|
1901 david.dillard 1.9 }
1902
1903
1904 void InternalCIMOMHandleRep::setProperty(
1905 const OperationContext & context,
1906 const CIMNamespaceName &nameSpace,
1907 const CIMObjectPath& instanceName,
1908 const CIMName& propertyName,
1909 const CIMValue& newValue)
1910 {
1911 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE, "InternalCIMOMHandleRep::setProperty");
1912
|
1913 kumpf 1.26 #ifdef PEGASUS_OS_OS400
|
1914 david.dillard 1.9 // If this is running in user-state, then run the request
1915 // through the user-state layer
1916 if (_chOS400.hasKey())
1917 {
1918 _chOS400.setProperty(
1919 context,
1920 nameSpace,
1921 instanceName,
1922 propertyName,
1923 newValue);
|
1924 chip 1.17
1925 PEG_METHOD_EXIT();
|
1926 david.dillard 1.9 return;
1927 }
|
1928 kumpf 1.26 #endif
|
1929 david.dillard 1.9
1930 CIMSetPropertyRequestMessage* request =
1931 new CIMSetPropertyRequestMessage(
1932 XmlWriter::getNextMessageId(),
1933 nameSpace,
1934 instanceName,
1935 propertyName,
1936 newValue,
|
1937 chip 1.17 QueueIdStack());
|
1938 david.dillard 1.9
|
1939 chip 1.17 // copy and adjust, as needed, the operation context
1940 request->operationContext = _filterOperationContext(context);
|
1941 david.dillard 1.9
|
1942 chip 1.17 AutoPtr<CIMSetPropertyResponseMessage> response;
|
1943 david.dillard 1.9
1944 try
1945 {
|
1946 chip 1.17 response.reset(dynamic_cast<CIMSetPropertyResponseMessage*>(
1947 do_request(request)));
1948
|
1949 kumpf 1.26 if (response.get() == 0)
|
1950 chip 1.17 {
1951 PEG_TRACE_STRING(
1952 TRC_CIMOM_HANDLE,
1953 Tracer::LEVEL2,
1954 "Incorrect response type in CIMOMHandle");
1955
1956 throw CIMException(CIM_ERR_FAILED);
1957 }
|
1958 david.dillard 1.9 }
|
1959 kumpf 1.26 catch (CIMException &)
|
1960 david.dillard 1.9 {
|
1961 chip 1.17 PEG_METHOD_EXIT();
|
1962 david.dillard 1.9 throw;
1963 }
|
1964 kumpf 1.26 catch (...)
|
1965 david.dillard 1.9 {
|
1966 chip 1.17 PEG_TRACE_STRING(
1967 TRC_CIMOM_HANDLE,
1968 Tracer::LEVEL2,
|
1969 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
1970 chip 1.17
1971 PEG_METHOD_EXIT();
1972 throw CIMException(
1973 CIM_ERR_FAILED,
1974 MessageLoaderParms(
1975 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
1976 "Exception caught in CIMOMHandle"));
|
1977 david.dillard 1.9 }
1978
1979 PEG_METHOD_EXIT();
1980 return;
1981 }
1982
1983
1984 CIMValue InternalCIMOMHandleRep::invokeMethod(
1985 const OperationContext & context,
1986 const CIMNamespaceName &nameSpace,
1987 const CIMObjectPath& instanceName,
1988 const CIMName& methodName,
1989 const Array<CIMParamValue>& inParameters,
1990 Array<CIMParamValue>& outParameters)
1991 {
1992 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE, "InternalCIMOMHandleRep::invokeMethod");
1993
|
1994 kumpf 1.26 #ifdef PEGASUS_OS_OS400
|
1995 david.dillard 1.9 // If this is running in user-state, then run the request
1996 // through the user-state layer
1997 if (_chOS400.hasKey())
1998 {
|
1999 chip 1.17 CIMValue cimValue =
2000 _chOS400.invokeMethod(
2001 context,
2002 nameSpace,
2003 instanceName,
2004 methodName,
2005 inParameters,
2006 outParameters);
2007
2008 PEG_METHOD_EXIT();
|
2009 kumpf 1.26 return cimValue;
|
2010 david.dillard 1.9 }
|
2011 kumpf 1.26 #endif
|
2012 david.dillard 1.9
2013 CIMInvokeMethodRequestMessage* request =
2014 new CIMInvokeMethodRequestMessage(
2015 XmlWriter::getNextMessageId(),
2016 nameSpace,
2017 instanceName,
2018 methodName,
2019 inParameters,
|
2020 chip 1.17 QueueIdStack());
2021
2022 // copy and adjust, as needed, the operation context
2023 request->operationContext = _filterOperationContext(context);
|
2024 david.dillard 1.9
|
2025 chip 1.17 AutoPtr<CIMInvokeMethodResponseMessage> response;
|
2026 david.dillard 1.9
2027 try
2028 {
|
2029 chip 1.17 response.reset(dynamic_cast<CIMInvokeMethodResponseMessage*>(
2030 do_request(request)));
2031
|
2032 kumpf 1.26 if (response.get() == 0)
|
2033 chip 1.17 {
2034 PEG_TRACE_STRING(
2035 TRC_CIMOM_HANDLE,
2036 Tracer::LEVEL2,
2037 "Incorrect response type in CIMOMHandle");
2038
2039 throw CIMException(CIM_ERR_FAILED);
2040 }
|
2041 david.dillard 1.9 }
|
2042 kumpf 1.26 catch (CIMException &)
|
2043 david.dillard 1.9 {
|
2044 chip 1.17 PEG_METHOD_EXIT();
|
2045 david.dillard 1.9 throw;
2046 }
|
2047 kumpf 1.26 catch (...)
|
2048 david.dillard 1.9 {
|
2049 chip 1.17 PEG_TRACE_STRING(
2050 TRC_CIMOM_HANDLE,
2051 Tracer::LEVEL2,
|
2052 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
2053 chip 1.17
2054 PEG_METHOD_EXIT();
2055 throw CIMException(
2056 CIM_ERR_FAILED,
2057 MessageLoaderParms(
2058 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
2059 "Exception caught in CIMOMHandle"));
|
2060 david.dillard 1.9 }
2061
|
2062 chip 1.17 CIMValue cimValue = response->retValue;
|
2063 kumpf 1.15 outParameters = response->outParameters;
|
2064 david.dillard 1.9
2065 PEG_METHOD_EXIT();
|
2066 kumpf 1.26 return cimValue;
|
2067 david.dillard 1.9 }
2068
2069
2070 //
2071 // Public CIMOMHandle Methods
2072 //
2073
2074 void InternalCIMOMHandleRep::disallowProviderUnload()
2075 {
|
2076 kumpf 1.26 #ifdef PEGASUS_OS_OS400
|
2077 david.dillard 1.9 // If this is running in user-state, then run the request
2078 // through the user-state layer
2079 if (_chOS400.hasKey())
2080 {
2081 _chOS400.disallowProviderUnload();
2082 return;
2083 }
|
2084 kumpf 1.26 #endif
|
2085 david.dillard 1.9
2086 CIMOMHandleRep::disallowProviderUnload();
2087 }
2088
2089 void InternalCIMOMHandleRep::allowProviderUnload()
2090 {
|
2091 kumpf 1.26 #ifdef PEGASUS_OS_OS400
|
2092 david.dillard 1.9 // If this is running in user-state, then run the request
2093 // through the user-state layer
2094 if (_chOS400.hasKey())
2095 {
2096 _chOS400.allowProviderUnload();
2097 return;
2098 }
|
2099 kumpf 1.26 #endif
|
2100 david.dillard 1.9
2101 CIMOMHandleRep::allowProviderUnload();
2102 }
2103
2104 #ifdef PEGASUS_USE_EXPERIMENTAL_INTERFACES
2105 OperationContext InternalCIMOMHandleRep::getResponseContext()
2106 {
2107 OperationContext ctx;
2108
2109 Thread* curThrd = Thread::getCurrent();
2110 if (curThrd == NULL)
2111 {
|
2112 kumpf 1.19 ctx.insert(ContentLanguageListContainer(ContentLanguageList()));
|
2113 david.dillard 1.9 }
2114 else
2115 {
|
2116 kumpf 1.19 ContentLanguageList* contentLangs = (ContentLanguageList*)
|
2117 david.dillard 1.9 curThrd->reference_tsd("cimomHandleContentLanguages");
2118 curThrd->dereference_tsd();
|
2119 chip 1.17
|
2120 david.dillard 1.9 if (contentLangs == NULL)
2121 {
|
2122 kumpf 1.19 ctx.insert(ContentLanguageListContainer(ContentLanguageList()));
|
2123 david.dillard 1.9 }
2124 else
2125 {
2126 ctx.insert(ContentLanguageListContainer(*contentLangs));
2127 // delete the old tsd to free the memory
2128 curThrd->delete_tsd("cimomHandleContentLanguages");
2129 }
2130 }
2131
2132 return ctx;
2133 }
2134 #endif
2135
2136 PEGASUS_NAMESPACE_END
|