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