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

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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2