(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 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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2