(file) Return to InternalCIMOMHandleRep.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Provider

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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2