1 martin 1.38 //%LICENSE////////////////////////////////////////////////////////////////
|
2 martin 1.39 //
|
3 martin 1.38 // Licensed to The Open Group (TOG) under one or more contributor license
4 // agreements. Refer to the OpenPegasusNOTICE.txt file distributed with
5 // this work for additional information regarding copyright ownership.
6 // Each contributor licenses this file to you under the OpenPegasus Open
7 // Source License; you may not use this file except in compliance with the
8 // License.
|
9 martin 1.39 //
|
10 martin 1.38 // Permission is hereby granted, free of charge, to any person obtaining a
11 // copy of this software and associated documentation files (the "Software"),
12 // to deal in the Software without restriction, including without limitation
13 // the rights to use, copy, modify, merge, publish, distribute, sublicense,
14 // and/or sell copies of the Software, and to permit persons to whom the
15 // Software is furnished to do so, subject to the following conditions:
|
16 martin 1.39 //
|
17 martin 1.38 // The above copyright notice and this permission notice shall be included
18 // in all copies or substantial portions of the Software.
|
19 martin 1.39 //
|
20 martin 1.38 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
21 martin 1.39 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
22 martin 1.38 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
23 // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
24 // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
25 // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
26 // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
27 martin 1.39 //
|
28 martin 1.38 //////////////////////////////////////////////////////////////////////////
|
29 david.dillard 1.9 //
30 //%/////////////////////////////////////////////////////////////////////////////
31
32
33 #include <Pegasus/Common/Constants.h>
34 #include <Pegasus/Common/XmlWriter.h>
|
35 venkat.puvvada 1.29 #include <Pegasus/Common/XmlReader.h>
36 #include <Pegasus/Common/XmlParser.h>
|
37 david.dillard 1.9 #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 thilo.boehm 1.43 #include <Pegasus/ProviderManager2/AutoPThreadSecurity.h>
|
42 david.dillard 1.9
43 #include "InternalCIMOMHandleRep.h"
44
45 PEGASUS_NAMESPACE_BEGIN
46
|
47 karl 1.44 // If is class only, return true. This is used only to determine
48 // if the input for associators, etc. requests objectPath is a class or
49 // instance request.
50 Boolean _isClassRequest(const CIMObjectPath& ref)
51 {
52 return ref.getKeyBindings().size () == 0;
53 }
54
|
55 kumpf 1.26 InternalCIMOMHandleMessageQueue::InternalCIMOMHandleMessageQueue()
|
56 david.dillard 1.9 : MessageQueue(PEGASUS_QUEUENAME_INTERNALCLIENT),
|
57 chip 1.17 _output_qid(0),
|
58 kumpf 1.34 _return_qid(0),
59 _responseReady(0),
60 _response(0)
|
61 david.dillard 1.9 {
|
62 venkat.puvvada 1.35 // output queue is the request dispatcher
63 MessageQueue* out = MessageQueue::lookup(PEGASUS_QUEUENAME_OPREQDISPATCHER);
|
64 david.dillard 1.9
|
65 chip 1.17 PEGASUS_ASSERT(out != 0);
|
66 david.dillard 1.9
|
67 chip 1.17 _output_qid = out->getQueueId();
|
68 a.arora 1.11
|
69 chip 1.17 // input queue is this
70 _return_qid = getQueueId();
|
71 a.arora 1.11 }
72
|
73 kumpf 1.26 InternalCIMOMHandleMessageQueue::~InternalCIMOMHandleMessageQueue()
|
74 david.dillard 1.9 {
75 }
76
|
77 kumpf 1.26 void InternalCIMOMHandleMessageQueue::handleEnqueue()
|
78 david.dillard 1.9 {
|
79 kumpf 1.26 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE,
80 "InternalCIMOMHandleMessageQueue::handleEnqueue");
|
81 david.dillard 1.9
82 Message* message = dequeue();
83
|
84 chip 1.17 switch(message->getType())
|
85 david.dillard 1.9 {
|
86 chip 1.17 /*
87 case CIM_GET_CLASS_REQUEST_MESSAGE:
88 case CIM_ENUMERATE_CLASSES_REQUEST_MESSAGE:
89 case CIM_ENUMERATE_CLASS_NAMES_REQUEST_MESSAGE:
90 case CIM_CREATE_CLASS_REQUEST_MESSAGE:
91 case CIM_MODIFY_CLASS_REQUEST_MESSAGE:
92 case CIM_DELETE_CLASS_REQUEST_MESSAGE:
93 case CIM_GET_INSTANCE_REQUEST_MESSAGE:
94 case CIM_ENUMERATE_INSTANCES_REQUEST_MESSAGE:
95 case CIM_ENUMERATE_INSTANCE_NAMES_REQUEST_MESSAGE:
96 case CIM_CREATE_INSTANCE_REQUEST_MESSAGE:
97 case CIM_MODIFY_INSTANCE_REQUEST_MESSAGE:
98 case CIM_DELETE_INSTANCE_REQUEST_MESSAGE:
99 case CIM_EXEC_QUERY_REQUEST_MESSAGE:
100 case CIM_ASSOCIATORS_REQUEST_MESSAGE:
101 case CIM_ASSOCIATOR_NAMES_REQUEST_MESSAGE:
102 case CIM_REFERENCES_REQUEST_MESSAGE:
103 case CIM_REFERENCE_NAMES_REQUEST_MESSAGE:
104 case CIM_GET_PROPERTY_REQUEST_MESSAGE:
105 case CIM_SET_PROPERTY_REQUEST_MESSAGE:
106 case CIM_INVOKE_METHOD_REQUEST_MESSAGE:
107 chip 1.17 sendRequest(message);
|
108 david.dillard 1.9
|
109 chip 1.17 break;
110 */
|
111 david.dillard 1.9 case CIM_GET_CLASS_RESPONSE_MESSAGE:
112 case CIM_ENUMERATE_CLASSES_RESPONSE_MESSAGE:
113 case CIM_ENUMERATE_CLASS_NAMES_RESPONSE_MESSAGE:
114 case CIM_CREATE_CLASS_RESPONSE_MESSAGE:
115 case CIM_MODIFY_CLASS_RESPONSE_MESSAGE:
116 case CIM_DELETE_CLASS_RESPONSE_MESSAGE:
117 case CIM_GET_INSTANCE_RESPONSE_MESSAGE:
118 case CIM_ENUMERATE_INSTANCES_RESPONSE_MESSAGE:
119 case CIM_ENUMERATE_INSTANCE_NAMES_RESPONSE_MESSAGE:
120 case CIM_CREATE_INSTANCE_RESPONSE_MESSAGE:
121 case CIM_MODIFY_INSTANCE_RESPONSE_MESSAGE:
122 case CIM_DELETE_INSTANCE_RESPONSE_MESSAGE:
123 case CIM_EXEC_QUERY_RESPONSE_MESSAGE:
124 case CIM_ASSOCIATORS_RESPONSE_MESSAGE:
125 case CIM_ASSOCIATOR_NAMES_RESPONSE_MESSAGE:
126 case CIM_REFERENCES_RESPONSE_MESSAGE:
127 case CIM_REFERENCE_NAMES_RESPONSE_MESSAGE:
128 case CIM_GET_PROPERTY_RESPONSE_MESSAGE:
129 case CIM_SET_PROPERTY_RESPONSE_MESSAGE:
|
130 kumpf 1.15 case CIM_INVOKE_METHOD_RESPONSE_MESSAGE:
|
131 kumpf 1.34 _response = message;
132 _responseReady.signal();
|
133 david.dillard 1.9 break;
|
134 chip 1.17 default:
|
135 marek 1.27 PEG_TRACE_CSTRING(
|
136 chip 1.17 TRC_DISCARDED_DATA,
137 Tracer::LEVEL2,
138 "Error: unexpected message type");
139
140 delete message;
|
141 david.dillard 1.9
|
142 chip 1.17 break;
|
143 david.dillard 1.9 }
|
144 chip 1.17
|
145 david.dillard 1.9 PEG_METHOD_EXIT();
146 }
147
|
148 kumpf 1.26 CIMResponseMessage* InternalCIMOMHandleMessageQueue::sendRequest(
149 CIMRequestMessage* request)
|
150 david.dillard 1.9 {
|
151 chip 1.17 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE, "InternalCIMOMHandleRep::sendRequest");
152
153 AutoMutex autoMutex(_mutex);
154
155 // update message to include routing information
156 request->dest = _output_qid;
157 request->queueIds.push(_return_qid);
158
159 // locate destination
160 MessageQueueService* service =
161 dynamic_cast<MessageQueueService *>(
162 MessageQueue::lookup(_output_qid));
163
164 PEGASUS_ASSERT(service != 0);
|
165 david.dillard 1.9
|
166 chip 1.17 // forward request
|
167 venkat.puvvada 1.35 service->enqueue(request);
|
168 david.dillard 1.9
|
169 chip 1.17 // wait for response
|
170 kumpf 1.34 _responseReady.wait();
171 CIMResponseMessage* response = dynamic_cast<CIMResponseMessage*>(_response);
172 _response = 0;
|
173 david.dillard 1.9
174 PEG_METHOD_EXIT();
|
175 kumpf 1.26 return response;
|
176 chip 1.17 }
177
178 static void _deleteContentLanguage(void* data)
179 {
|
180 kumpf 1.26 if (data != 0)
|
181 chip 1.17 {
|
182 kumpf 1.19 ContentLanguageList* cl = static_cast<ContentLanguageList*>(data);
|
183 chip 1.17
184 delete cl;
185 }
|
186 david.dillard 1.9 }
187
|
188 chip 1.17 static OperationContext _filterOperationContext(const OperationContext& context)
|
189 david.dillard 1.9 {
|
190 chip 1.17 OperationContext temp;
191
|
192 kumpf 1.26 if (context.contains(IdentityContainer::NAME))
|
193 david.dillard 1.9 {
|
194 chip 1.17 // propagate the identity container if it exists (get() with throw
195 // an exception if it does not)
196 temp.insert(context.get(IdentityContainer::NAME));
|
197 david.dillard 1.9 }
|
198 kumpf 1.26 else
|
199 david.dillard 1.9 {
|
200 chip 1.17 temp.insert(IdentityContainer(String::EMPTY));
|
201 david.dillard 1.9 }
|
202 chip 1.17
|
203 kumpf 1.26 if (context.contains(AcceptLanguageListContainer::NAME))
|
204 david.dillard 1.9 {
|
205 kumpf 1.26 // propagate the accept languages container if it exists
206 // (get() with throw an exception if it does not exist)
|
207 chip 1.17 temp.insert(context.get(AcceptLanguageListContainer::NAME));
|
208 david.dillard 1.9 }
|
209 kumpf 1.26 else
|
210 chip 1.17 {
211 // If the container is not found then try to use the
|
212 kumpf 1.19 // AcceptLanguageList from the current thread
213 AcceptLanguageList* pal = Thread::getLanguages();
|
214 david.dillard 1.9
|
215 kumpf 1.26 if (pal != 0)
|
216 david.dillard 1.9 {
|
217 chip 1.17 temp.insert(AcceptLanguageListContainer(*pal));
|
218 david.dillard 1.9 }
|
219 dave.sudlik 1.20 else
220 {
221 temp.insert(AcceptLanguageListContainer(AcceptLanguageList()));
222 }
|
223 chip 1.17 }
|
224 david.dillard 1.9
|
225 kumpf 1.26 if (context.contains(ContentLanguageListContainer::NAME))
|
226 chip 1.17 {
|
227 kumpf 1.26 // propagate the accept languages container if it exists
228 // (get() with throw an exception if it does not)
|
229 chip 1.17 temp.insert(context.get(ContentLanguageListContainer::NAME));
|
230 david.dillard 1.9 }
|
231 kumpf 1.26 else
|
232 david.dillard 1.9 {
|
233 kumpf 1.19 temp.insert(ContentLanguageListContainer(ContentLanguageList()));
|
234 david.dillard 1.9 }
|
235 marek 1.45
236 if (context.contains(UserRoleContainer::NAME))
237 {
238 // propagate the user role container if it exists (get() with throw
239 // an exception if it does not)
240 temp.insert(context.get(UserRoleContainer::NAME));
241 }
242 else
243 {
244 temp.insert(UserRoleContainer(String::EMPTY));
245 }
|
246 david.dillard 1.9
|
247 a.dunfey 1.23 return temp;
|
248 chip 1.17 }
249
250 InternalCIMOMHandleRep::InternalCIMOMHandleRep()
251 {
252 }
253
254 InternalCIMOMHandleRep::~InternalCIMOMHandleRep()
255 {
256 }
|
257 david.dillard 1.9
|
258 kumpf 1.26 CIMResponseMessage* InternalCIMOMHandleRep::do_request(
259 CIMRequestMessage* request)
|
260 chip 1.17 {
261 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE, "InternalCIMOMHandleRep::do_request");
262 /*
263 Uint32 timeout = 0;
|
264 david.dillard 1.9
265 try
266 {
267 const TimeoutContainer* p = dynamic_cast<const TimeoutContainer*>(
268 &(context.get(TimeoutContainer::NAME)));
269 if (p)
270 {
271 timeout = p->getTimeOut();
272 }
273 }
|
274 kumpf 1.26 catch (Exception &)
|
275 david.dillard 1.9 {
276 }
277
278 try
279 {
|
280 kumpf 1.26 if (timeout)
|
281 david.dillard 1.9 {
|
282 kumpf 1.32 if (!_msg_avail.time_wait(timeout))
283 {
284 PEG_TRACE_CSTRING(TRC_CIMOM_HANDLE, Tracer::LEVEL2,
285 "timeout waiting for response");
286 throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED,
287 MessageLoaderParms(
288 "Provider.CIMOMHandle.EMPTY_CIM_RESPONSE",
289 "Empty CIM Response"));
290 }
|
291 david.dillard 1.9 }
292 else
293 {
294 _msg_avail.wait();
295 }
296 }
|
297 kumpf 1.32 catch (CIMException&)
|
298 david.dillard 1.9 {
|
299 kumpf 1.32 throw;
|
300 david.dillard 1.9 }
|
301 kumpf 1.26 catch (...)
|
302 david.dillard 1.9 {
|
303 marek 1.27 PEG_TRACE_CSTRING(TRC_CIMOM_HANDLE, Tracer::LEVEL2,
|
304 david.dillard 1.9 "Unexpected Exception");
305 throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, MessageLoaderParms(
306 "Provider.CIMOMHandle.EMPTY_CIM_RESPONSE",
307 "Empty CIM Response"));
308 }
|
309 chip 1.17 */
310
311 Message* temp = _queue.sendRequest(request);
312
313 CIMResponseMessage* response = dynamic_cast<CIMResponseMessage*>(temp);
314
|
315 kumpf 1.26 if (response == 0)
|
316 david.dillard 1.9 {
|
317 chip 1.17 delete response;
318
319 PEG_METHOD_EXIT();
|
320 kumpf 1.26 throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, MessageLoaderParms(
321 "Provider.CIMOMHandle.EMPTY_CIM_RESPONSE",
322 "Empty CIM Response"));
|
323 david.dillard 1.9 }
324
|
325 kumpf 1.26 if (response->cimException.getCode() != CIM_ERR_SUCCESS)
|
326 david.dillard 1.9 {
|
327 chip 1.17 CIMException e(response->cimException);
|
328 david.dillard 1.9
329 delete response;
|
330 chip 1.17
331 PEG_METHOD_EXIT();
332 throw e;
|
333 david.dillard 1.9 }
334
|
335 kumpf 1.26 if (response->operationContext.contains(ContentLanguageListContainer::NAME))
|
336 chip 1.17 {
|
337 kumpf 1.26 // If the response has a Content-Language then save it into
338 // thread-specific storage
|
339 chip 1.17 ContentLanguageListContainer container =
340 response->operationContext.get(ContentLanguageListContainer::NAME);
341
|
342 kumpf 1.26 if (container.getLanguages().size() > 0)
|
343 chip 1.17 {
344 Thread* currentThread = Thread::getCurrent();
345
|
346 kumpf 1.26 if (currentThread != 0)
|
347 chip 1.17 {
348 // deletes the old tsd and creates a new one
349 currentThread->put_tsd(
|
350 mike 1.37 TSD_CIMOM_HANDLE_CONTENT_LANGUAGES,
|
351 chip 1.17 _deleteContentLanguage,
|
352 kumpf 1.19 sizeof(ContentLanguageList*),
353 new ContentLanguageList(container.getLanguages()));
|
354 chip 1.17 }
355 }
356 }
|
357 david.dillard 1.9
358 PEG_METHOD_EXIT();
|
359 a.dunfey 1.23 return response;
|
360 david.dillard 1.9 }
361
362
363 //
364 // CIM Operations
365 //
366
367 CIMClass InternalCIMOMHandleRep::getClass(
368 const OperationContext & context,
369 const CIMNamespaceName& nameSpace,
370 const CIMName& className,
371 Boolean localOnly,
372 Boolean includeQualifiers,
373 Boolean includeClassOrigin,
374 const CIMPropertyList& propertyList)
375 {
376 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE, "InternalCIMOMHandleRep::getClass");
377
|
378 thilo.boehm 1.43 AutoPThreadSecurity revPthreadSec(context, true);
379
|
380 chip 1.17 // encode request
381 CIMGetClassRequestMessage* request =
382 new CIMGetClassRequestMessage(
383 XmlWriter::getNextMessageId(),
|
384 david.dillard 1.9 nameSpace,
385 className,
386 localOnly,
387 includeQualifiers,
388 includeClassOrigin,
|
389 chip 1.17 propertyList,
390 QueueIdStack());
391
392 // copy and adjust, as needed, the operation context
393 request->operationContext = _filterOperationContext(context);
|
394 dave.sudlik 1.20 // request->operationContext.get(AcceptLanguageListContainer::NAME);
|
395 chip 1.17
396 AutoPtr<CIMGetClassResponseMessage> response;
397
398 try
399 {
400 response.reset(dynamic_cast<CIMGetClassResponseMessage*>(
401 do_request(request)));
|
402 david.dillard 1.9
|
403 kumpf 1.26 if (response.get() == 0)
|
404 chip 1.17 {
|
405 marek 1.27 PEG_TRACE_CSTRING(
|
406 chip 1.17 TRC_CIMOM_HANDLE,
|
407 marek 1.31 Tracer::LEVEL1,
|
408 chip 1.17 "Incorrect response type in CIMOMHandle");
|
409 david.dillard 1.9
|
410 chip 1.17 throw CIMException(CIM_ERR_FAILED);
411 }
|
412 david.dillard 1.9 }
|
413 kumpf 1.26 catch (CIMException &)
|
414 david.dillard 1.9 {
|
415 chip 1.17 PEG_METHOD_EXIT();
|
416 david.dillard 1.9 throw;
417 }
|
418 kumpf 1.26 catch (...)
|
419 david.dillard 1.9 {
|
420 marek 1.27 PEG_TRACE_CSTRING(
|
421 chip 1.17 TRC_CIMOM_HANDLE,
|
422 marek 1.31 Tracer::LEVEL1,
|
423 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
424 chip 1.17
425 PEG_METHOD_EXIT();
|
426 kumpf 1.26 throw CIMException(CIM_ERR_FAILED, MessageLoaderParms(
427 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
428 "Exception caught in CIMOMHandle"));
|
429 david.dillard 1.9 }
430
431 CIMClass cimClass = response->cimClass;
432
433 PEG_METHOD_EXIT();
|
434 kumpf 1.26 return cimClass;
|
435 david.dillard 1.9 }
436
437
438 Array<CIMClass> InternalCIMOMHandleRep::enumerateClasses(
439 const OperationContext & context,
440 const CIMNamespaceName& nameSpace,
441 const CIMName& className,
442 Boolean deepInheritance,
443 Boolean localOnly,
444 Boolean includeQualifiers,
445 Boolean includeClassOrigin)
446 {
447 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE,
448 "InternalCIMOMHandleRep::enumerateClasses");
449
|
450 thilo.boehm 1.43 AutoPThreadSecurity revPthreadSec(context, true);
451
|
452 david.dillard 1.9 CIMEnumerateClassesRequestMessage* request =
453 new CIMEnumerateClassesRequestMessage(
454 XmlWriter::getNextMessageId(),
455 nameSpace,
456 className,
457 deepInheritance,
458 localOnly,
459 includeQualifiers,
460 includeClassOrigin,
|
461 chip 1.17 QueueIdStack());
|
462 david.dillard 1.9
|
463 chip 1.17 // copy and adjust, as needed, the operation context
464 request->operationContext = _filterOperationContext(context);
|
465 david.dillard 1.9
|
466 chip 1.17 AutoPtr<CIMEnumerateClassesResponseMessage> response;
|
467 david.dillard 1.9
468 try
469 {
|
470 chip 1.17 response.reset(dynamic_cast<CIMEnumerateClassesResponseMessage*>(
471 do_request(request)));
472
|
473 kumpf 1.26 if (response.get() == 0)
|
474 chip 1.17 {
|
475 marek 1.27 PEG_TRACE_CSTRING(
|
476 chip 1.17 TRC_CIMOM_HANDLE,
|
477 marek 1.31 Tracer::LEVEL1,
|
478 chip 1.17 "Incorrect response type in CIMOMHandle");
479
480 throw CIMException(CIM_ERR_FAILED);
481 }
|
482 david.dillard 1.9 }
|
483 kumpf 1.26 catch (CIMException &)
|
484 david.dillard 1.9 {
|
485 chip 1.17 PEG_METHOD_EXIT();
|
486 david.dillard 1.9 throw;
487 }
|
488 kumpf 1.26 catch (...)
|
489 david.dillard 1.9 {
|
490 marek 1.27 PEG_TRACE_CSTRING(
|
491 chip 1.17 TRC_CIMOM_HANDLE,
|
492 marek 1.31 Tracer::LEVEL1,
|
493 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
494 chip 1.17
495 PEG_METHOD_EXIT();
496 throw CIMException(
497 CIM_ERR_FAILED,
498 MessageLoaderParms(
499 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
500 "Exception caught in CIMOMHandle"));
|
501 david.dillard 1.9 }
|
502 chip 1.17
|
503 david.dillard 1.9 Array<CIMClass> cimClasses = response->cimClasses;
|
504 chip 1.17
|
505 david.dillard 1.9 PEG_METHOD_EXIT();
|
506 kumpf 1.26 return cimClasses;
|
507 david.dillard 1.9 }
508
509
510 Array<CIMName> InternalCIMOMHandleRep::enumerateClassNames(
511 const OperationContext & context,
512 const CIMNamespaceName &nameSpace,
513 const CIMName& className,
514 Boolean deepInheritance)
515 {
516 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE,
517 "InternalCIMOMHandleRep::enumerateClassNames");
518
|
519 thilo.boehm 1.43 AutoPThreadSecurity revPthreadSec(context, true);
520
|
521 david.dillard 1.9 CIMEnumerateClassNamesRequestMessage* request =
522 new CIMEnumerateClassNamesRequestMessage(
|
523 chip 1.17 XmlWriter::getNextMessageId(),
524 nameSpace,
525 className,
526 deepInheritance,
527 QueueIdStack());
528
529 // copy and adjust, as needed, the operation context
530 request->operationContext = _filterOperationContext(context);
|
531 david.dillard 1.9
|
532 chip 1.17 AutoPtr<CIMEnumerateClassNamesResponseMessage> response;
|
533 david.dillard 1.9
534 try
535 {
|
536 chip 1.17 response.reset(dynamic_cast<CIMEnumerateClassNamesResponseMessage*>(
537 do_request(request)));
538
|
539 kumpf 1.26 if (response.get() == 0)
|
540 chip 1.17 {
|
541 marek 1.27 PEG_TRACE_CSTRING(
|
542 chip 1.17 TRC_CIMOM_HANDLE,
|
543 marek 1.31 Tracer::LEVEL1,
|
544 chip 1.17 "Incorrect response type in CIMOMHandle");
545
546 throw CIMException(CIM_ERR_FAILED);
547 }
|
548 david.dillard 1.9 }
|
549 kumpf 1.26 catch (CIMException &)
|
550 david.dillard 1.9 {
|
551 chip 1.17 PEG_METHOD_EXIT();
|
552 david.dillard 1.9 throw;
553 }
|
554 kumpf 1.26 catch (...)
|
555 david.dillard 1.9 {
|
556 marek 1.27 PEG_TRACE_CSTRING(
|
557 chip 1.17 TRC_CIMOM_HANDLE,
|
558 marek 1.31 Tracer::LEVEL1,
|
559 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
560 chip 1.17
561 PEG_METHOD_EXIT();
562 throw CIMException(
563 CIM_ERR_FAILED,
564 MessageLoaderParms(
565 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
566 "Exception caught in CIMOMHandle"));
|
567 david.dillard 1.9 }
568
|
569 chip 1.17 Array<CIMName> cimClassNames = response->classNames;
570
|
571 david.dillard 1.9 PEG_METHOD_EXIT();
|
572 kumpf 1.26 return cimClassNames;
|
573 david.dillard 1.9 }
574
575
576 void InternalCIMOMHandleRep::createClass(
577 const OperationContext & context,
578 const CIMNamespaceName& nameSpace,
579 const CIMClass& newClass)
580 {
581 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE, "InternalCIMOMHandleRep::createClass");
582
|
583 thilo.boehm 1.43 AutoPThreadSecurity revPthreadSec(context, true);
584
|
585 david.dillard 1.9 CIMCreateClassRequestMessage* request =
586 new CIMCreateClassRequestMessage(
587 XmlWriter::getNextMessageId(),
588 nameSpace,
589 newClass,
|
590 chip 1.17 QueueIdStack());
|
591 david.dillard 1.9
|
592 chip 1.17 // copy and adjust, as needed, the operation context
593 request->operationContext = _filterOperationContext(context);
|
594 david.dillard 1.9
|
595 chip 1.17 AutoPtr<CIMCreateClassResponseMessage> response;
|
596 david.dillard 1.9
597 try
598 {
|
599 chip 1.17 response.reset(dynamic_cast<CIMCreateClassResponseMessage*>(
600 do_request(request)));
601
|
602 kumpf 1.26 if (response.get() == 0)
|
603 chip 1.17 {
|
604 marek 1.27 PEG_TRACE_CSTRING(
|
605 chip 1.17 TRC_CIMOM_HANDLE,
|
606 marek 1.31 Tracer::LEVEL1,
|
607 chip 1.17 "Incorrect response type in CIMOMHandle");
608
609 throw CIMException(CIM_ERR_FAILED);
610 }
|
611 david.dillard 1.9 }
|
612 kumpf 1.26 catch (CIMException &)
|
613 david.dillard 1.9 {
|
614 chip 1.17 PEG_METHOD_EXIT();
|
615 david.dillard 1.9 throw;
616 }
|
617 kumpf 1.26 catch (...)
|
618 david.dillard 1.9 {
|
619 marek 1.27 PEG_TRACE_CSTRING(
|
620 chip 1.17 TRC_CIMOM_HANDLE,
|
621 marek 1.31 Tracer::LEVEL1,
|
622 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
623 chip 1.17
624 PEG_METHOD_EXIT();
625 throw CIMException(
626 CIM_ERR_FAILED,
627 MessageLoaderParms(
628 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
629 "Exception caught in CIMOMHandle"));
|
630 david.dillard 1.9 }
631
632 PEG_METHOD_EXIT();
633 return;
634 }
635
636
637 void InternalCIMOMHandleRep::modifyClass(
638 const OperationContext & context,
639 const CIMNamespaceName &nameSpace,
640 const CIMClass& modifiedClass)
641 {
642 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE, "InternalCIMOMHandleRep::modifyClass");
643
|
644 thilo.boehm 1.43 AutoPThreadSecurity revPthreadSec(context, true);
645
|
646 david.dillard 1.9 CIMModifyClassRequestMessage* request =
647 new CIMModifyClassRequestMessage(
648 XmlWriter::getNextMessageId(),
649 nameSpace,
650 modifiedClass,
|
651 chip 1.17 QueueIdStack());
|
652 david.dillard 1.9
|
653 chip 1.17 // copy and adjust, as needed, the operation context
654 request->operationContext = _filterOperationContext(context);
655
656 AutoPtr<CIMModifyClassResponseMessage> response;
|
657 david.dillard 1.9
658 try
659 {
|
660 chip 1.17 response.reset(dynamic_cast<CIMModifyClassResponseMessage*>(
661 do_request(request)));
662
|
663 kumpf 1.26 if (response.get() == 0)
|
664 chip 1.17 {
|
665 marek 1.27 PEG_TRACE_CSTRING(
|
666 chip 1.17 TRC_CIMOM_HANDLE,
|
667 marek 1.31 Tracer::LEVEL1,
|
668 chip 1.17 "Incorrect response type in CIMOMHandle");
669
670 throw CIMException(CIM_ERR_FAILED);
671 }
|
672 david.dillard 1.9 }
|
673 kumpf 1.26 catch (CIMException &)
|
674 david.dillard 1.9 {
|
675 chip 1.17 PEG_METHOD_EXIT();
|
676 david.dillard 1.9 throw;
677 }
|
678 kumpf 1.26 catch (...)
|
679 david.dillard 1.9 {
|
680 marek 1.27 PEG_TRACE_CSTRING(
|
681 chip 1.17 TRC_CIMOM_HANDLE,
|
682 marek 1.31 Tracer::LEVEL1,
|
683 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
684 chip 1.17
685 PEG_METHOD_EXIT();
686 throw CIMException(
687 CIM_ERR_FAILED,
688 MessageLoaderParms(
689 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
690 "Exception caught in CIMOMHandle"));
|
691 david.dillard 1.9 }
692
693 PEG_METHOD_EXIT();
694 return;
695 }
696
697
698 void InternalCIMOMHandleRep::deleteClass(
699 const OperationContext & context,
700 const CIMNamespaceName &nameSpace,
701 const CIMName& className)
702 {
703 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE, "InternalCIMOMHandleRep::deleteClass");
704
|
705 thilo.boehm 1.43 AutoPThreadSecurity revPthreadSec(context, true);
|
706 david.dillard 1.9 // encode request
707 CIMDeleteClassRequestMessage* request =
708 new CIMDeleteClassRequestMessage(
709 XmlWriter::getNextMessageId(),
710 nameSpace,
711 className,
|
712 chip 1.17 QueueIdStack());
713
714 // copy and adjust, as needed, the operation context
715 request->operationContext = _filterOperationContext(context);
|
716 david.dillard 1.9
|
717 chip 1.17 AutoPtr<CIMDeleteClassResponseMessage> response;
|
718 david.dillard 1.9
|
719 chip 1.17 try
720 {
721 response.reset(dynamic_cast<CIMDeleteClassResponseMessage*>(
722 do_request(request)));
723
|
724 kumpf 1.26 if (response.get() == 0)
|
725 chip 1.17 {
|
726 marek 1.27 PEG_TRACE_CSTRING(
|
727 chip 1.17 TRC_CIMOM_HANDLE,
|
728 marek 1.31 Tracer::LEVEL1,
|
729 chip 1.17 "Incorrect response type in CIMOMHandle");
730
731 throw CIMException(CIM_ERR_FAILED);
732 }
|
733 david.dillard 1.9 }
|
734 kumpf 1.26 catch (CIMException &)
|
735 david.dillard 1.9 {
|
736 chip 1.17 PEG_METHOD_EXIT();
|
737 david.dillard 1.9 throw;
738 }
|
739 kumpf 1.26 catch (...)
|
740 david.dillard 1.9 {
|
741 marek 1.27 PEG_TRACE_CSTRING(
|
742 chip 1.17 TRC_CIMOM_HANDLE,
|
743 marek 1.31 Tracer::LEVEL1,
|
744 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
745 chip 1.17
746 PEG_METHOD_EXIT();
747 throw CIMException(
748 CIM_ERR_FAILED,
749 MessageLoaderParms(
750 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
751 "Exception caught in CIMOMHandle"));
|
752 david.dillard 1.9 }
|
753 chip 1.17
|
754 david.dillard 1.9 PEG_METHOD_EXIT();
755 return;
756 }
757
758
|
759 thilo.boehm 1.43 CIMResponseData InternalCIMOMHandleRep::getInstance(
|
760 david.dillard 1.9 const OperationContext & context,
761 const CIMNamespaceName &nameSpace,
762 const CIMObjectPath& instanceName,
763 Boolean includeQualifiers,
764 Boolean includeClassOrigin,
765 const CIMPropertyList& propertyList)
766 {
767 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE, "InternalCIMOMHandleRep::getInstance");
768
|
769 thilo.boehm 1.43 AutoPThreadSecurity revPthreadSec(context, true);
|
770 david.dillard 1.9 // encode request
771 CIMGetInstanceRequestMessage* request =
772 new CIMGetInstanceRequestMessage(
773 XmlWriter::getNextMessageId(),
774 nameSpace,
775 instanceName,
776 includeQualifiers,
777 includeClassOrigin,
778 propertyList,
|
779 chip 1.17 QueueIdStack());
780
781 // copy and adjust, as needed, the operation context
782 request->operationContext = _filterOperationContext(context);
|
783 david.dillard 1.9
|
784 chip 1.17 AutoPtr<CIMGetInstanceResponseMessage> response;
|
785 david.dillard 1.9
786 try
787 {
|
788 chip 1.17 response.reset(dynamic_cast<CIMGetInstanceResponseMessage*>(
789 do_request(request)));
790
|
791 kumpf 1.26 if (response.get() == 0)
|
792 chip 1.17 {
|
793 marek 1.27 PEG_TRACE_CSTRING(
|
794 chip 1.17 TRC_CIMOM_HANDLE,
|
795 marek 1.31 Tracer::LEVEL1,
|
796 chip 1.17 "Incorrect response type in CIMOMHandle");
797
798 throw CIMException(CIM_ERR_FAILED);
799 }
|
800 david.dillard 1.9 }
|
801 kumpf 1.26 catch (CIMException &)
|
802 david.dillard 1.9 {
|
803 chip 1.17 PEG_METHOD_EXIT();
|
804 david.dillard 1.9 throw;
805 }
|
806 kumpf 1.26 catch (...)
|
807 david.dillard 1.9 {
|
808 marek 1.27 PEG_TRACE_CSTRING(
|
809 chip 1.17 TRC_CIMOM_HANDLE,
|
810 marek 1.31 Tracer::LEVEL1,
|
811 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
812 chip 1.17
813 PEG_METHOD_EXIT();
814 throw CIMException(
815 CIM_ERR_FAILED,
816 MessageLoaderParms(
817 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
818 "Exception caught in CIMOMHandle"));
|
819 david.dillard 1.9 }
820
821 PEG_METHOD_EXIT();
|
822 thilo.boehm 1.43 return response->getResponseData();
|
823 david.dillard 1.9 }
824
|
825 thilo.boehm 1.43 CIMResponseData InternalCIMOMHandleRep::enumerateInstances(
|
826 david.dillard 1.9 const OperationContext & context,
827 const CIMNamespaceName &nameSpace,
828 const CIMName& className,
829 Boolean deepInheritance,
830 Boolean includeQualifiers,
831 Boolean includeClassOrigin,
832 const CIMPropertyList& propertyList)
833 {
834 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE,
835 "InternalCIMOMHandleRep::enumerateInstances");
836
|
837 thilo.boehm 1.43 AutoPThreadSecurity revPthreadSec(context, true);
838
|
839 david.dillard 1.9 // encode request
840 CIMEnumerateInstancesRequestMessage* request =
841 new CIMEnumerateInstancesRequestMessage(
842 XmlWriter::getNextMessageId(),
843 nameSpace,
844 className,
845 deepInheritance,
846 includeQualifiers,
847 includeClassOrigin,
848 propertyList,
|
849 chip 1.17 QueueIdStack());
|
850 david.dillard 1.9
|
851 chip 1.17 // copy and adjust, as needed, the operation context
852 request->operationContext = _filterOperationContext(context);
853
854 AutoPtr<CIMEnumerateInstancesResponseMessage> response;
|
855 david.dillard 1.9
856 try
857 {
|
858 chip 1.17 response.reset(dynamic_cast<CIMEnumerateInstancesResponseMessage*>(
859 do_request(request)));
860
|
861 kumpf 1.26 if (response.get() == 0)
|
862 chip 1.17 {
|
863 marek 1.27 PEG_TRACE_CSTRING(
|
864 chip 1.17 TRC_CIMOM_HANDLE,
|
865 marek 1.31 Tracer::LEVEL1,
|
866 chip 1.17 "Incorrect response type in CIMOMHandle");
867
868 throw CIMException(CIM_ERR_FAILED);
869 }
|
870 david.dillard 1.9 }
|
871 kumpf 1.26 catch (CIMException &)
|
872 david.dillard 1.9 {
|
873 chip 1.17 PEG_METHOD_EXIT();
|
874 david.dillard 1.9 throw;
875 }
|
876 kumpf 1.26 catch (...)
|
877 david.dillard 1.9 {
|
878 marek 1.27 PEG_TRACE_CSTRING(
|
879 chip 1.17 TRC_CIMOM_HANDLE,
|
880 marek 1.31 Tracer::LEVEL1,
|
881 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
882 chip 1.17
883 PEG_METHOD_EXIT();
884 throw CIMException(
885 CIM_ERR_FAILED,
886 MessageLoaderParms(
887 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
888 "Exception caught in CIMOMHandle"));
|
889 david.dillard 1.9 }
890
891 PEG_METHOD_EXIT();
|
892 thilo.boehm 1.43 return response->getResponseData();
|
893 david.dillard 1.9 }
894
895
|
896 thilo.boehm 1.43 CIMResponseData InternalCIMOMHandleRep::enumerateInstanceNames(
|
897 david.dillard 1.9 const OperationContext & context,
898 const CIMNamespaceName &nameSpace,
899 const CIMName& className)
900 {
901 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE,
902 "InternalCIMOMHandleRep::enumerateInstanceNames");
903
|
904 thilo.boehm 1.43 AutoPThreadSecurity revPthreadSec(context, true);
905
|
906 david.dillard 1.9 // encode request
907 CIMEnumerateInstanceNamesRequestMessage* request =
908 new CIMEnumerateInstanceNamesRequestMessage(
909 XmlWriter::getNextMessageId(),
910 nameSpace,
911 className,
|
912 chip 1.17 QueueIdStack());
|
913 david.dillard 1.9
|
914 chip 1.17 // copy and adjust, as needed, the operation context
915 request->operationContext = _filterOperationContext(context);
916
917 AutoPtr<CIMEnumerateInstanceNamesResponseMessage> response;
|
918 david.dillard 1.9
919 try
920 {
|
921 chip 1.17 response.reset(dynamic_cast<CIMEnumerateInstanceNamesResponseMessage*>(
922 do_request(request)));
923
|
924 kumpf 1.26 if (response.get() == 0)
|
925 chip 1.17 {
|
926 marek 1.27 PEG_TRACE_CSTRING(
|
927 chip 1.17 TRC_CIMOM_HANDLE,
|
928 marek 1.31 Tracer::LEVEL1,
|
929 chip 1.17 "Incorrect response type in CIMOMHandle");
930
931 throw CIMException(CIM_ERR_FAILED);
932 }
|
933 david.dillard 1.9 }
|
934 kumpf 1.26 catch (CIMException &)
|
935 david.dillard 1.9 {
|
936 chip 1.17 PEG_METHOD_EXIT();
|
937 david.dillard 1.9 throw;
938 }
|
939 kumpf 1.26 catch (...)
|
940 david.dillard 1.9 {
|
941 marek 1.27 PEG_TRACE_CSTRING(
|
942 chip 1.17 TRC_CIMOM_HANDLE,
|
943 marek 1.31 Tracer::LEVEL1,
|
944 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
945 chip 1.17
946 PEG_METHOD_EXIT();
947 throw CIMException(
948 CIM_ERR_FAILED,
949 MessageLoaderParms(
950 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
951 "Exception caught in CIMOMHandle"));
|
952 david.dillard 1.9 }
953 PEG_METHOD_EXIT();
|
954 thilo.boehm 1.43 return response->getResponseData();
|
955 david.dillard 1.9 }
956
957 CIMObjectPath InternalCIMOMHandleRep::createInstance(
958 const OperationContext & context,
959 const CIMNamespaceName &nameSpace,
960 const CIMInstance& newInstance)
961 {
962 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE,
963 "InternalCIMOMHandleRep::createInstance");
964
|
965 thilo.boehm 1.43 AutoPThreadSecurity revPthreadSec(context, true);
966
|
967 david.dillard 1.9 CIMCreateInstanceRequestMessage* request =
968 new CIMCreateInstanceRequestMessage(
969 XmlWriter::getNextMessageId(),
970 nameSpace,
971 newInstance,
|
972 chip 1.17 QueueIdStack());
|
973 david.dillard 1.9
|
974 chip 1.17 // copy and adjust, as needed, the operation context
975 request->operationContext = _filterOperationContext(context);
976
977 AutoPtr<CIMCreateInstanceResponseMessage> response;
|
978 david.dillard 1.9
979 try
980 {
|
981 chip 1.17 response.reset(dynamic_cast<CIMCreateInstanceResponseMessage*>(
982 do_request(request)));
983
|
984 kumpf 1.26 if (response.get() == 0)
|
985 chip 1.17 {
|
986 marek 1.27 PEG_TRACE_CSTRING(
|
987 chip 1.17 TRC_CIMOM_HANDLE,
|
988 marek 1.31 Tracer::LEVEL1,
|
989 chip 1.17 "Incorrect response type in CIMOMHandle");
990
991 throw CIMException(CIM_ERR_FAILED);
992 }
|
993 david.dillard 1.9 }
|
994 kumpf 1.26 catch (CIMException &)
|
995 david.dillard 1.9 {
|
996 chip 1.17 PEG_METHOD_EXIT();
|
997 david.dillard 1.9 throw;
998 }
|
999 kumpf 1.26 catch (...)
|
1000 david.dillard 1.9 {
|
1001 marek 1.27 PEG_TRACE_CSTRING(
|
1002 chip 1.17 TRC_CIMOM_HANDLE,
|
1003 marek 1.31 Tracer::LEVEL1,
|
1004 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
1005 chip 1.17
1006 PEG_METHOD_EXIT();
1007 throw CIMException(
1008 CIM_ERR_FAILED,
1009 MessageLoaderParms(
1010 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
1011 "Exception caught in CIMOMHandle"));
|
1012 david.dillard 1.9 }
1013
1014 CIMObjectPath cimReference = response->instanceName;
1015
1016 PEG_METHOD_EXIT();
|
1017 kumpf 1.26 return cimReference;
|
1018 david.dillard 1.9 }
1019
1020
1021 void InternalCIMOMHandleRep::modifyInstance(
1022 const OperationContext & context,
1023 const CIMNamespaceName &nameSpace,
1024 const CIMInstance& modifiedInstance,
1025 Boolean includeQualifiers,
1026 const CIMPropertyList& propertyList)
1027 {
1028 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE,
1029 "InternalCIMOMHandleRep::modifyInstance");
1030
|
1031 thilo.boehm 1.43 AutoPThreadSecurity revPthreadSec(context, true);
1032
|
1033 david.dillard 1.9 CIMModifyInstanceRequestMessage* request =
1034 new CIMModifyInstanceRequestMessage(
1035 XmlWriter::getNextMessageId(),
1036 nameSpace,
1037 modifiedInstance,
1038 includeQualifiers,
1039 propertyList,
|
1040 chip 1.17 QueueIdStack());
|
1041 david.dillard 1.9
|
1042 chip 1.17 // copy and adjust, as needed, the operation context
1043 request->operationContext = _filterOperationContext(context);
|
1044 david.dillard 1.9
|
1045 chip 1.17 AutoPtr<CIMModifyInstanceResponseMessage> response;
|
1046 david.dillard 1.9
1047 try
1048 {
|
1049 chip 1.17 response.reset(dynamic_cast<CIMModifyInstanceResponseMessage*>(
1050 do_request(request)));
1051
|
1052 kumpf 1.26 if (response.get() == 0)
|
1053 chip 1.17 {
|
1054 marek 1.27 PEG_TRACE_CSTRING(
|
1055 chip 1.17 TRC_CIMOM_HANDLE,
|
1056 marek 1.31 Tracer::LEVEL1,
|
1057 chip 1.17 "Incorrect response type in CIMOMHandle");
1058
1059 throw CIMException(CIM_ERR_FAILED);
1060 }
|
1061 david.dillard 1.9 }
|
1062 kumpf 1.26 catch (CIMException &)
|
1063 david.dillard 1.9 {
|
1064 chip 1.17 PEG_METHOD_EXIT();
|
1065 david.dillard 1.9 throw;
1066 }
|
1067 kumpf 1.26 catch (...)
|
1068 david.dillard 1.9 {
|
1069 marek 1.27 PEG_TRACE_CSTRING(
|
1070 chip 1.17 TRC_CIMOM_HANDLE,
|
1071 marek 1.31 Tracer::LEVEL1,
|
1072 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
1073 chip 1.17
1074 PEG_METHOD_EXIT();
1075 throw CIMException(
1076 CIM_ERR_FAILED,
1077 MessageLoaderParms(
1078 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
1079 "Exception caught in CIMOMHandle"));
|
1080 david.dillard 1.9 }
1081
1082 PEG_METHOD_EXIT();
1083 return;
1084 }
1085
1086
1087 void InternalCIMOMHandleRep::deleteInstance(
1088 const OperationContext & context,
1089 const CIMNamespaceName &nameSpace,
1090 const CIMObjectPath& instanceName)
1091 {
1092 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE,
1093 "InternalCIMOMHandleRep::deleteInstance");
1094
|
1095 thilo.boehm 1.43 AutoPThreadSecurity revPthreadSec(context, true);
1096
|
1097 david.dillard 1.9 CIMDeleteInstanceRequestMessage* request =
1098 new CIMDeleteInstanceRequestMessage(
1099 XmlWriter::getNextMessageId(),
1100 nameSpace,
1101 instanceName,
|
1102 chip 1.17 QueueIdStack());
|
1103 david.dillard 1.9
|
1104 chip 1.17 // copy and adjust, as needed, the operation context
1105 request->operationContext = _filterOperationContext(context);
|
1106 david.dillard 1.9
|
1107 chip 1.17 AutoPtr<CIMDeleteInstanceResponseMessage> response;
|
1108 david.dillard 1.9
1109 try
1110 {
|
1111 chip 1.17 response.reset(dynamic_cast<CIMDeleteInstanceResponseMessage*>(
1112 do_request(request)));
1113
|
1114 kumpf 1.26 if (response.get() == 0)
|
1115 chip 1.17 {
|
1116 marek 1.27 PEG_TRACE_CSTRING(
|
1117 chip 1.17 TRC_CIMOM_HANDLE,
|
1118 marek 1.31 Tracer::LEVEL1,
|
1119 chip 1.17 "Incorrect response type in CIMOMHandle");
1120
1121 throw CIMException(CIM_ERR_FAILED);
1122 }
|
1123 david.dillard 1.9 }
|
1124 kumpf 1.26 catch (CIMException &)
|
1125 david.dillard 1.9 {
|
1126 chip 1.17 PEG_METHOD_EXIT();
|
1127 david.dillard 1.9 throw;
1128 }
|
1129 kumpf 1.26 catch (...)
|
1130 david.dillard 1.9 {
|
1131 marek 1.27 PEG_TRACE_CSTRING(
|
1132 chip 1.17 TRC_CIMOM_HANDLE,
|
1133 marek 1.31 Tracer::LEVEL1,
|
1134 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
1135 chip 1.17
1136 PEG_METHOD_EXIT();
1137 throw CIMException(
1138 CIM_ERR_FAILED,
1139 MessageLoaderParms(
1140 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
1141 "Exception caught in CIMOMHandle"));
|
1142 david.dillard 1.9 }
1143
1144 PEG_METHOD_EXIT();
1145 return;
1146 }
1147
1148
|
1149 thilo.boehm 1.43 CIMResponseData InternalCIMOMHandleRep::execQuery(
|
1150 david.dillard 1.9 const OperationContext & context,
1151 const CIMNamespaceName &nameSpace,
1152 const String& queryLanguage,
1153 const String& query)
1154 {
1155 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE, "InternalCIMOMHandleRep::execQuery");
1156
|
1157 thilo.boehm 1.43 AutoPThreadSecurity revPthreadSec(context, true);
1158
|
1159 david.dillard 1.9 CIMExecQueryRequestMessage* request =
1160 new CIMExecQueryRequestMessage(
1161 XmlWriter::getNextMessageId(),
1162 nameSpace,
1163 queryLanguage,
1164 query,
|
1165 chip 1.17 QueueIdStack());
|
1166 david.dillard 1.9
|
1167 chip 1.17 // copy and adjust, as needed, the operation context
1168 request->operationContext = _filterOperationContext(context);
|
1169 david.dillard 1.9
|
1170 chip 1.17 AutoPtr<CIMExecQueryResponseMessage> response;
|
1171 david.dillard 1.9
1172 try
1173 {
|
1174 chip 1.17 response.reset(dynamic_cast<CIMExecQueryResponseMessage*>(
1175 do_request(request)));
1176
|
1177 kumpf 1.26 if (response.get() == 0)
|
1178 chip 1.17 {
|
1179 marek 1.27 PEG_TRACE_CSTRING(
|
1180 chip 1.17 TRC_CIMOM_HANDLE,
|
1181 marek 1.31 Tracer::LEVEL1,
|
1182 chip 1.17 "Incorrect response type in CIMOMHandle");
1183
1184 throw CIMException(CIM_ERR_FAILED);
1185 }
|
1186 david.dillard 1.9 }
|
1187 kumpf 1.26 catch (CIMException &)
|
1188 david.dillard 1.9 {
|
1189 chip 1.17 PEG_METHOD_EXIT();
|
1190 david.dillard 1.9 throw;
1191 }
|
1192 kumpf 1.26 catch (...)
|
1193 david.dillard 1.9 {
|
1194 marek 1.27 PEG_TRACE_CSTRING(
|
1195 chip 1.17 TRC_CIMOM_HANDLE,
|
1196 marek 1.31 Tracer::LEVEL1,
|
1197 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
1198 chip 1.17
1199 PEG_METHOD_EXIT();
1200 throw CIMException(
1201 CIM_ERR_FAILED,
1202 MessageLoaderParms(
1203 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
1204 "Exception caught in CIMOMHandle"));
|
1205 david.dillard 1.9 }
1206 PEG_METHOD_EXIT();
|
1207 thilo.boehm 1.43 return response->getResponseData();
|
1208 david.dillard 1.9 }
1209
1210
|
1211 thilo.boehm 1.43 CIMResponseData InternalCIMOMHandleRep::associators(
|
1212 david.dillard 1.9 const OperationContext & context,
1213 const CIMNamespaceName &nameSpace,
1214 const CIMObjectPath& objectName,
1215 const CIMName& assocClass,
1216 const CIMName& resultClass,
1217 const String& role,
1218 const String& resultRole,
1219 Boolean includeQualifiers,
1220 Boolean includeClassOrigin,
1221 const CIMPropertyList& propertyList)
1222 {
1223 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE, "InternalCIMOMHandleRep::associators");
1224
|
1225 thilo.boehm 1.43 AutoPThreadSecurity revPthreadSec(context, true);
1226
|
1227 chip 1.17 CIMAssociatorsRequestMessage* request =
1228 new CIMAssociatorsRequestMessage(
1229 XmlWriter::getNextMessageId(),
|
1230 david.dillard 1.9 nameSpace,
1231 objectName,
1232 assocClass,
1233 resultClass,
1234 role,
1235 resultRole,
1236 includeQualifiers,
1237 includeClassOrigin,
|
1238 chip 1.17 propertyList,
|
1239 karl 1.44 QueueIdStack(),
1240 _isClassRequest(objectName));
|
1241 david.dillard 1.9
|
1242 chip 1.17 // copy and adjust, as needed, the operation context
1243 request->operationContext = _filterOperationContext(context);
|
1244 david.dillard 1.9
|
1245 chip 1.17 AutoPtr<CIMAssociatorsResponseMessage> response;
|
1246 david.dillard 1.9
1247 try
1248 {
|
1249 chip 1.17 response.reset(dynamic_cast<CIMAssociatorsResponseMessage*>(
1250 do_request(request)));
1251
|
1252 kumpf 1.26 if (response.get() == 0)
|
1253 chip 1.17 {
|
1254 marek 1.27 PEG_TRACE_CSTRING(
|
1255 chip 1.17 TRC_CIMOM_HANDLE,
|
1256 marek 1.31 Tracer::LEVEL1,
|
1257 chip 1.17 "Incorrect response type in CIMOMHandle");
1258
1259 throw CIMException(CIM_ERR_FAILED);
1260 }
|
1261 david.dillard 1.9 }
|
1262 kumpf 1.26 catch (CIMException &)
|
1263 david.dillard 1.9 {
|
1264 chip 1.17 PEG_METHOD_EXIT();
|
1265 david.dillard 1.9 throw;
1266 }
|
1267 kumpf 1.26 catch (...)
|
1268 david.dillard 1.9 {
|
1269 marek 1.27 PEG_TRACE_CSTRING(
|
1270 chip 1.17 TRC_CIMOM_HANDLE,
|
1271 marek 1.31 Tracer::LEVEL1,
|
1272 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
1273 chip 1.17
1274 PEG_METHOD_EXIT();
1275 throw CIMException(
1276 CIM_ERR_FAILED,
1277 MessageLoaderParms(
1278 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
1279 "Exception caught in CIMOMHandle"));
|
1280 david.dillard 1.9 }
1281 PEG_METHOD_EXIT();
|
1282 thilo.boehm 1.43 return response->getResponseData();
|
1283 david.dillard 1.9 }
1284
1285
|
1286 thilo.boehm 1.43 CIMResponseData InternalCIMOMHandleRep::associatorNames(
|
1287 david.dillard 1.9 const OperationContext & context,
1288 const CIMNamespaceName &nameSpace,
1289 const CIMObjectPath& objectName,
1290 const CIMName& assocClass,
1291 const CIMName& resultClass,
1292 const String& role,
1293 const String& resultRole)
1294 {
1295 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE,
1296 "InternalCIMOMHandleRep::associatorNames");
1297
|
1298 thilo.boehm 1.43 AutoPThreadSecurity revPthreadSec(context, true);
1299
|
1300 david.dillard 1.9 CIMAssociatorNamesRequestMessage* request =
1301 new CIMAssociatorNamesRequestMessage(
1302 XmlWriter::getNextMessageId(),
1303 nameSpace,
1304 objectName,
1305 assocClass,
1306 resultClass,
1307 role,
1308 resultRole,
|
1309 karl 1.44 QueueIdStack(),
1310 _isClassRequest(objectName));
|
1311 david.dillard 1.9
|
1312 chip 1.17 // copy and adjust, as needed, the operation context
1313 request->operationContext = _filterOperationContext(context);
|
1314 david.dillard 1.9
|
1315 chip 1.17 AutoPtr<CIMAssociatorNamesResponseMessage> response;
|
1316 david.dillard 1.9
1317 try
1318 {
|
1319 chip 1.17 response.reset(dynamic_cast<CIMAssociatorNamesResponseMessage*>(
1320 do_request(request)));
1321
|
1322 kumpf 1.26 if (response.get() == 0)
|
1323 chip 1.17 {
|
1324 marek 1.27 PEG_TRACE_CSTRING(
|
1325 chip 1.17 TRC_CIMOM_HANDLE,
|
1326 marek 1.31 Tracer::LEVEL1,
|
1327 chip 1.17 "Incorrect response type in CIMOMHandle");
1328
1329 throw CIMException(CIM_ERR_FAILED);
1330 }
|
1331 david.dillard 1.9 }
|
1332 kumpf 1.26 catch (CIMException &)
|
1333 david.dillard 1.9 {
|
1334 chip 1.17 PEG_METHOD_EXIT();
|
1335 david.dillard 1.9 throw;
1336 }
|
1337 kumpf 1.26 catch (...)
|
1338 david.dillard 1.9 {
|
1339 marek 1.27 PEG_TRACE_CSTRING(
|
1340 chip 1.17 TRC_CIMOM_HANDLE,
|
1341 marek 1.31 Tracer::LEVEL1,
|
1342 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
1343 chip 1.17
1344 PEG_METHOD_EXIT();
1345 throw CIMException(
1346 CIM_ERR_FAILED,
1347 MessageLoaderParms(
1348 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
1349 "Exception caught in CIMOMHandle"));
|
1350 david.dillard 1.9 }
1351 PEG_METHOD_EXIT();
|
1352 thilo.boehm 1.43 return response->getResponseData();
|
1353 david.dillard 1.9 }
1354
1355
|
1356 thilo.boehm 1.43 CIMResponseData InternalCIMOMHandleRep::references(
|
1357 david.dillard 1.9 const OperationContext & context,
1358 const CIMNamespaceName &nameSpace,
1359 const CIMObjectPath& objectName,
1360 const CIMName& resultClass,
1361 const String& role,
1362 Boolean includeQualifiers,
1363 Boolean includeClassOrigin,
1364 const CIMPropertyList& propertyList)
1365 {
1366 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE, "InternalCIMOMHandleRep::references");
1367
|
1368 thilo.boehm 1.43 AutoPThreadSecurity revPthreadSec(context, true);
1369
|
1370 david.dillard 1.9 CIMReferencesRequestMessage* request =
1371 new CIMReferencesRequestMessage(
1372 XmlWriter::getNextMessageId(),
1373 nameSpace,
1374 objectName,
1375 resultClass,
1376 role,
1377 includeQualifiers,
1378 includeClassOrigin,
1379 propertyList,
|
1380 karl 1.44 QueueIdStack(),
1381 _isClassRequest(objectName));
|
1382 david.dillard 1.9
|
1383 chip 1.17 // copy and adjust, as needed, the operation context
1384 request->operationContext = _filterOperationContext(context);
|
1385 david.dillard 1.9
|
1386 chip 1.17 AutoPtr<CIMReferencesResponseMessage> response;
|
1387 david.dillard 1.9
1388 try
1389 {
|
1390 chip 1.17 response.reset(dynamic_cast<CIMReferencesResponseMessage*>(
1391 do_request(request)));
1392
|
1393 kumpf 1.26 if (response.get() == 0)
|
1394 chip 1.17 {
|
1395 marek 1.27 PEG_TRACE_CSTRING(
|
1396 chip 1.17 TRC_CIMOM_HANDLE,
|
1397 marek 1.31 Tracer::LEVEL1,
|
1398 chip 1.17 "Incorrect response type in CIMOMHandle");
1399
1400 throw CIMException(CIM_ERR_FAILED);
1401 }
|
1402 david.dillard 1.9 }
|
1403 kumpf 1.26 catch (CIMException &)
|
1404 david.dillard 1.9 {
|
1405 chip 1.17 PEG_METHOD_EXIT();
|
1406 david.dillard 1.9 throw;
1407 }
|
1408 kumpf 1.26 catch (...)
|
1409 david.dillard 1.9 {
|
1410 marek 1.27 PEG_TRACE_CSTRING(
|
1411 chip 1.17 TRC_CIMOM_HANDLE,
|
1412 marek 1.31 Tracer::LEVEL1,
|
1413 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
1414 chip 1.17
1415 PEG_METHOD_EXIT();
1416 throw CIMException(
1417 CIM_ERR_FAILED,
1418 MessageLoaderParms(
1419 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
1420 "Exception caught in CIMOMHandle"));
|
1421 david.dillard 1.9 }
1422 PEG_METHOD_EXIT();
|
1423 thilo.boehm 1.43 return response->getResponseData();
|
1424 david.dillard 1.9 }
1425
1426
|
1427 thilo.boehm 1.43 CIMResponseData InternalCIMOMHandleRep::referenceNames(
|
1428 david.dillard 1.9 const OperationContext & context,
1429 const CIMNamespaceName &nameSpace,
1430 const CIMObjectPath& objectName,
1431 const CIMName& resultClass,
1432 const String& role)
1433 {
1434 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE,
1435 "InternalCIMOMHandleRep::referenceNames");
1436
|
1437 thilo.boehm 1.43 AutoPThreadSecurity revPthreadSec(context, true);
1438
|
1439 david.dillard 1.9 CIMReferenceNamesRequestMessage* request =
1440 new CIMReferenceNamesRequestMessage(
1441 XmlWriter::getNextMessageId(),
1442 nameSpace,
1443 objectName,
1444 resultClass,
1445 role,
|
1446 karl 1.44 QueueIdStack(),
1447 _isClassRequest(objectName));
|
1448 david.dillard 1.9
|
1449 chip 1.17 // copy and adjust, as needed, the operation context
1450 request->operationContext = _filterOperationContext(context);
|
1451 david.dillard 1.9
|
1452 chip 1.17 AutoPtr<CIMReferenceNamesResponseMessage> response;
|
1453 david.dillard 1.9
1454 try
1455 {
|
1456 chip 1.17 response.reset(dynamic_cast<CIMReferenceNamesResponseMessage*>(
1457 do_request(request)));
1458
|
1459 kumpf 1.26 if (response.get() == 0)
|
1460 chip 1.17 {
|
1461 marek 1.27 PEG_TRACE_CSTRING(
|
1462 chip 1.17 TRC_CIMOM_HANDLE,
|
1463 marek 1.31 Tracer::LEVEL1,
|
1464 chip 1.17 "Incorrect response type in CIMOMHandle");
1465
1466 throw CIMException(CIM_ERR_FAILED);
1467 }
|
1468 david.dillard 1.9 }
|
1469 kumpf 1.26 catch (CIMException &)
|
1470 david.dillard 1.9 {
|
1471 chip 1.17 PEG_METHOD_EXIT();
|
1472 david.dillard 1.9 throw;
1473 }
|
1474 kumpf 1.26 catch (...)
|
1475 david.dillard 1.9 {
|
1476 marek 1.27 PEG_TRACE_CSTRING(
|
1477 chip 1.17 TRC_CIMOM_HANDLE,
|
1478 marek 1.31 Tracer::LEVEL1,
|
1479 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
1480 chip 1.17
1481 PEG_METHOD_EXIT();
1482 throw CIMException(
1483 CIM_ERR_FAILED,
1484 MessageLoaderParms(
1485 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
1486 "Exception caught in CIMOMHandle"));
|
1487 david.dillard 1.9 }
1488 PEG_METHOD_EXIT();
|
1489 thilo.boehm 1.43 return response->getResponseData();
|
1490 david.dillard 1.9 }
1491
1492
1493 CIMValue InternalCIMOMHandleRep::getProperty(
1494 const OperationContext & context,
1495 const CIMNamespaceName &nameSpace,
1496 const CIMObjectPath& instanceName,
1497 const CIMName& propertyName)
1498 {
1499 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE, "InternalCIMOMHandleRep::getProperty");
1500
|
1501 thilo.boehm 1.43 AutoPThreadSecurity revPthreadSec(context, true);
1502
|
1503 david.dillard 1.9 CIMGetPropertyRequestMessage* request =
1504 new CIMGetPropertyRequestMessage(
|
1505 chip 1.17 XmlWriter::getNextMessageId(),
1506 nameSpace,
1507 instanceName,
1508 propertyName,
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<CIMGetPropertyResponseMessage> response;
|
1515 david.dillard 1.9
1516 try
1517 {
|
1518 chip 1.17 response.reset(dynamic_cast<CIMGetPropertyResponseMessage*>(
1519 do_request(request)));
1520
|
1521 kumpf 1.26 if (response.get() == 0)
|
1522 chip 1.17 {
|
1523 marek 1.27 PEG_TRACE_CSTRING(
|
1524 chip 1.17 TRC_CIMOM_HANDLE,
|
1525 marek 1.31 Tracer::LEVEL1,
|
1526 chip 1.17 "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 marek 1.27 PEG_TRACE_CSTRING(
|
1539 chip 1.17 TRC_CIMOM_HANDLE,
|
1540 marek 1.31 Tracer::LEVEL1,
|
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 CIMValue cimValue = response->value;
1552
|
1553 kumpf 1.40 // Return value in String form.
1554 if (cimValue.getType() != CIMTYPE_STRING &&
|
1555 venkat.puvvada 1.29 cimValue.getType() != CIMTYPE_REFERENCE && !cimValue.isNull())
1556 {
1557 Buffer out;
1558 XmlWriter::appendValueElement(out, cimValue);
1559 XmlParser parser((char*)out.getData());
1560 XmlReader::getPropertyValue(parser,cimValue);
1561 }
1562
|
1563 david.dillard 1.9 PEG_METHOD_EXIT();
|
1564 kumpf 1.26 return cimValue;
|
1565 david.dillard 1.9 }
1566
1567
1568 void InternalCIMOMHandleRep::setProperty(
1569 const OperationContext & context,
1570 const CIMNamespaceName &nameSpace,
1571 const CIMObjectPath& instanceName,
1572 const CIMName& propertyName,
1573 const CIMValue& newValue)
1574 {
1575 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE, "InternalCIMOMHandleRep::setProperty");
1576
|
1577 thilo.boehm 1.43 AutoPThreadSecurity revPthreadSec(context, true);
1578
|
1579 david.dillard 1.9 CIMSetPropertyRequestMessage* request =
1580 new CIMSetPropertyRequestMessage(
1581 XmlWriter::getNextMessageId(),
1582 nameSpace,
1583 instanceName,
1584 propertyName,
1585 newValue,
|
1586 chip 1.17 QueueIdStack());
|
1587 david.dillard 1.9
|
1588 chip 1.17 // copy and adjust, as needed, the operation context
1589 request->operationContext = _filterOperationContext(context);
|
1590 david.dillard 1.9
|
1591 chip 1.17 AutoPtr<CIMSetPropertyResponseMessage> response;
|
1592 david.dillard 1.9
1593 try
1594 {
|
1595 chip 1.17 response.reset(dynamic_cast<CIMSetPropertyResponseMessage*>(
1596 do_request(request)));
1597
|
1598 kumpf 1.26 if (response.get() == 0)
|
1599 chip 1.17 {
|
1600 marek 1.27 PEG_TRACE_CSTRING(
|
1601 chip 1.17 TRC_CIMOM_HANDLE,
|
1602 marek 1.31 Tracer::LEVEL1,
|
1603 chip 1.17 "Incorrect response type in CIMOMHandle");
1604
1605 throw CIMException(CIM_ERR_FAILED);
1606 }
|
1607 david.dillard 1.9 }
|
1608 kumpf 1.26 catch (CIMException &)
|
1609 david.dillard 1.9 {
|
1610 chip 1.17 PEG_METHOD_EXIT();
|
1611 david.dillard 1.9 throw;
1612 }
|
1613 kumpf 1.26 catch (...)
|
1614 david.dillard 1.9 {
|
1615 marek 1.27 PEG_TRACE_CSTRING(
|
1616 chip 1.17 TRC_CIMOM_HANDLE,
|
1617 marek 1.31 Tracer::LEVEL1,
|
1618 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
1619 chip 1.17
1620 PEG_METHOD_EXIT();
1621 throw CIMException(
1622 CIM_ERR_FAILED,
1623 MessageLoaderParms(
1624 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
1625 "Exception caught in CIMOMHandle"));
|
1626 david.dillard 1.9 }
1627
1628 PEG_METHOD_EXIT();
1629 return;
1630 }
1631
1632
1633 CIMValue InternalCIMOMHandleRep::invokeMethod(
1634 const OperationContext & context,
1635 const CIMNamespaceName &nameSpace,
1636 const CIMObjectPath& instanceName,
1637 const CIMName& methodName,
1638 const Array<CIMParamValue>& inParameters,
1639 Array<CIMParamValue>& outParameters)
1640 {
1641 PEG_METHOD_ENTER(TRC_CIMOM_HANDLE, "InternalCIMOMHandleRep::invokeMethod");
1642
|
1643 thilo.boehm 1.43 AutoPThreadSecurity revPthreadSec(context, true);
1644
|
1645 david.dillard 1.9 CIMInvokeMethodRequestMessage* request =
1646 new CIMInvokeMethodRequestMessage(
1647 XmlWriter::getNextMessageId(),
1648 nameSpace,
1649 instanceName,
1650 methodName,
1651 inParameters,
|
1652 chip 1.17 QueueIdStack());
1653
1654 // copy and adjust, as needed, the operation context
1655 request->operationContext = _filterOperationContext(context);
|
1656 david.dillard 1.9
|
1657 chip 1.17 AutoPtr<CIMInvokeMethodResponseMessage> response;
|
1658 david.dillard 1.9
1659 try
1660 {
|
1661 chip 1.17 response.reset(dynamic_cast<CIMInvokeMethodResponseMessage*>(
1662 do_request(request)));
1663
|
1664 kumpf 1.26 if (response.get() == 0)
|
1665 chip 1.17 {
|
1666 marek 1.27 PEG_TRACE_CSTRING(
|
1667 chip 1.17 TRC_CIMOM_HANDLE,
|
1668 marek 1.31 Tracer::LEVEL1,
|
1669 chip 1.17 "Incorrect response type in CIMOMHandle");
1670
1671 throw CIMException(CIM_ERR_FAILED);
1672 }
|
1673 david.dillard 1.9 }
|
1674 kumpf 1.26 catch (CIMException &)
|
1675 david.dillard 1.9 {
|
1676 chip 1.17 PEG_METHOD_EXIT();
|
1677 david.dillard 1.9 throw;
1678 }
|
1679 kumpf 1.26 catch (...)
|
1680 david.dillard 1.9 {
|
1681 marek 1.27 PEG_TRACE_CSTRING(
|
1682 chip 1.17 TRC_CIMOM_HANDLE,
|
1683 marek 1.31 Tracer::LEVEL1,
|
1684 david.dillard 1.9 "Exception caught in CIMOMHandle");
|
1685 chip 1.17
1686 PEG_METHOD_EXIT();
1687 throw CIMException(
1688 CIM_ERR_FAILED,
1689 MessageLoaderParms(
1690 "Provider.CIMOMHandle.CAUGHT_EXCEPTION",
1691 "Exception caught in CIMOMHandle"));
|
1692 david.dillard 1.9 }
1693
|
1694 chip 1.17 CIMValue cimValue = response->retValue;
|
1695 kumpf 1.15 outParameters = response->outParameters;
|
1696 david.dillard 1.9
1697 PEG_METHOD_EXIT();
|
1698 kumpf 1.26 return cimValue;
|
1699 david.dillard 1.9 }
1700
1701
1702 //
1703 // Public CIMOMHandle Methods
1704 //
1705
1706 void InternalCIMOMHandleRep::disallowProviderUnload()
1707 {
1708 CIMOMHandleRep::disallowProviderUnload();
1709 }
1710
1711 void InternalCIMOMHandleRep::allowProviderUnload()
1712 {
1713 CIMOMHandleRep::allowProviderUnload();
1714 }
1715
1716 #ifdef PEGASUS_USE_EXPERIMENTAL_INTERFACES
1717 OperationContext InternalCIMOMHandleRep::getResponseContext()
1718 {
1719 OperationContext ctx;
1720 david.dillard 1.9
1721 Thread* curThrd = Thread::getCurrent();
1722 if (curThrd == NULL)
1723 {
|
1724 kumpf 1.19 ctx.insert(ContentLanguageListContainer(ContentLanguageList()));
|
1725 david.dillard 1.9 }
1726 else
1727 {
|
1728 kumpf 1.19 ContentLanguageList* contentLangs = (ContentLanguageList*)
|
1729 mike 1.37 curThrd->reference_tsd(TSD_CIMOM_HANDLE_CONTENT_LANGUAGES);
|
1730 david.dillard 1.9 curThrd->dereference_tsd();
|
1731 chip 1.17
|
1732 david.dillard 1.9 if (contentLangs == NULL)
1733 {
|
1734 kumpf 1.19 ctx.insert(ContentLanguageListContainer(ContentLanguageList()));
|
1735 david.dillard 1.9 }
1736 else
1737 {
1738 ctx.insert(ContentLanguageListContainer(*contentLangs));
1739 // delete the old tsd to free the memory
|
1740 mike 1.37 curThrd->delete_tsd(TSD_CIMOM_HANDLE_CONTENT_LANGUAGES);
|
1741 david.dillard 1.9 }
1742 }
1743
1744 return ctx;
1745 }
1746 #endif
1747
1748 PEGASUS_NAMESPACE_END
|