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

   1 martin 1.72 //%LICENSE////////////////////////////////////////////////////////////////
   2 martin 1.73 //
   3 martin 1.72 // Licensed to The Open Group (TOG) under one or more contributor license
   4             // agreements.  Refer to the OpenPegasusNOTICE.txt file distributed with
   5             // this work for additional information regarding copyright ownership.
   6             // Each contributor licenses this file to you under the OpenPegasus Open
   7             // Source License; you may not use this file except in compliance with the
   8             // License.
   9 martin 1.73 //
  10 martin 1.72 // Permission is hereby granted, free of charge, to any person obtaining a
  11             // copy of this software and associated documentation files (the "Software"),
  12             // to deal in the Software without restriction, including without limitation
  13             // the rights to use, copy, modify, merge, publish, distribute, sublicense,
  14             // and/or sell copies of the Software, and to permit persons to whom the
  15             // Software is furnished to do so, subject to the following conditions:
  16 martin 1.73 //
  17 martin 1.72 // The above copyright notice and this permission notice shall be included
  18             // in all copies or substantial portions of the Software.
  19 martin 1.73 //
  20 martin 1.72 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  21 martin 1.73 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  22 martin 1.72 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
  23             // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
  24             // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  25             // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  26             // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  27 martin 1.73 //
  28 martin 1.72 //////////////////////////////////////////////////////////////////////////
  29 kumpf  1.1  //
  30             //%/////////////////////////////////////////////////////////////////////////////
  31             
  32             #include "CIMClientRep.h"
  33             
  34             #include <Pegasus/Common/MessageLoader.h>
  35 joyce.j 1.41 #include <Pegasus/Common/System.h>
  36 kumpf   1.51 #include <Pegasus/Common/LanguageParser.h>
  37 kumpf   1.1  
  38              #include <iostream>
  39              #include <fstream>
  40 mike    1.55 #include <Pegasus/Common/Network.h>
  41 karl    1.81.2.4 #include <Pegasus/Common/Logger.h>
  42 kumpf   1.1      
  43                  PEGASUS_USING_STD;
  44                  
  45                  PEGASUS_NAMESPACE_BEGIN
  46                  
  47 mike    1.71     
  48 kumpf   1.1      ///////////////////////////////////////////////////////////////////////////////
  49                  //
  50                  // CIMClientRep
  51                  //
  52                  ///////////////////////////////////////////////////////////////////////////////
  53                  
  54                  CIMClientRep::CIMClientRep(Uint32 timeoutMilliseconds)
  55                      :
  56                      MessageQueue(PEGASUS_QUEUENAME_CLIENT),
  57 karl    1.81.2.2     _binaryResponse(false),
  58 kumpf   1.1          _timeoutMilliseconds(timeoutMilliseconds),
  59 kumpf   1.61         _connected(false),
  60 mike    1.71         _doReconnect(false),
  61                      _binaryRequest(false),
  62 r.kieninger 1.77         _localConnect(false)
  63 kumpf       1.1      {
  64                          //
  65                          // Create Monitor and HTTPConnector
  66                          //
  67 a.arora     1.31         _monitor.reset(new Monitor());
  68                          _httpConnector.reset(new HTTPConnector(_monitor.get()));
  69 kumpf       1.1      
  70 kumpf       1.51         requestAcceptLanguages.clear();
  71                          requestContentLanguages.clear();
  72 kumpf       1.1      }
  73                      
  74                      CIMClientRep::~CIMClientRep()
  75                      {
  76                         disconnect();
  77                      }
  78                      
  79                      void CIMClientRep::handleEnqueue()
  80                      {
  81                      }
  82                      
  83 mike        1.71     void CIMClientRep::_connect(bool binaryRequest, bool binaryResponse)
  84 kumpf       1.1      {
  85 karl        1.81.2.4     ClientTrace::setup();
  86 kumpf       1.1      
  87                          //
  88                          // Create response decoder:
  89                          //
  90 kumpf       1.60         AutoPtr<CIMOperationResponseDecoder> responseDecoder(
  91                              new CIMOperationResponseDecoder(
  92 karl        1.81.2.4             this, _requestEncoder.get(), &_authenticator ));
  93 kumpf       1.1      
  94                          //
  95                          // Attempt to establish a connection:
  96                          //
  97 a.arora     1.31         AutoPtr<HTTPConnection> httpConnection(_httpConnector->connect(
  98 kumpf       1.60             _connectHost,
  99                              _connectPortNumber,
 100                              _connectSSLContext.get(),
 101 kumpf       1.68             _timeoutMilliseconds,
 102 kumpf       1.60             responseDecoder.get()));
 103 david.dillard 1.42     
 104 kumpf         1.1          //
 105                            // Create request encoder:
 106                            //
 107 kumpf         1.30         String connectHost = _connectHost;
 108                            if (connectHost.size())
 109                            {
 110                                char portStr[32];
 111                                sprintf(portStr, ":%u", _connectPortNumber);
 112                                connectHost.append(portStr);
 113                            }
 114                        
 115 kumpf         1.60         AutoPtr<CIMOperationRequestEncoder> requestEncoder(
 116                                new CIMOperationRequestEncoder(
 117 karl          1.81.2.4             httpConnection.get(), connectHost, &_authenticator,
 118 mike          1.71                 binaryRequest,
 119                                    binaryResponse));
 120 david.dillard 1.42     
 121 a.arora       1.31         _responseDecoder.reset(responseDecoder.release());
 122 denise.eckstein 1.46         _httpConnection = httpConnection.release();
 123 a.arora         1.31         _requestEncoder.reset(requestEncoder.release());
 124                              _responseDecoder->setEncoderQueue(_requestEncoder.get());
 125 kumpf           1.60     
 126                              //pass encoder and decoder a pointer to CIMClientRep::perfDataStore
 127 a.dunfey        1.53         _requestEncoder->setDataStorePointer(&perfDataStore);
 128                              _responseDecoder->setDataStorePointer(&perfDataStore);
 129                          
 130 kumpf           1.61         _doReconnect = false;
 131 kumpf           1.1          _connected = true;
 132 mike            1.71         _binaryRequest = binaryRequest;
 133                              _binaryResponse = binaryResponse;
 134 marek           1.56         _httpConnection->setSocketWriteTimeout(_timeoutMilliseconds/1000+1);
 135 kumpf           1.1      }
 136                          
 137 kumpf           1.8      void CIMClientRep::_disconnect()
 138                          {
 139                              if (_connected)
 140                              {
 141                                  //
 142                                  // destroy response decoder
 143                                  //
 144 a.arora         1.31             _responseDecoder.reset();
 145 david.dillard   1.42     
 146 kumpf           1.8      
 147                                  //
 148                                  // Close the connection
 149                                  //
 150 a.arora         1.31             if (_httpConnector.get())
 151 kumpf           1.8              {
 152 denise.eckstein 1.46                 _httpConnector->disconnect(_httpConnection);
 153                                      _httpConnection = 0;
 154 kumpf           1.8              }
 155                          
 156                                  //
 157                                  // destroy request encoder
 158                                  //
 159 a.arora         1.31             _requestEncoder.reset();
 160 kumpf           1.8      
 161                                  _connected = false;
 162                              }
 163                          
 164 kumpf           1.61         // Reconnect no longer applies
 165                              _doReconnect = false;
 166                          
 167                              // Let go of the cached request message if we have one
 168                              _authenticator.setRequestMessage(0);
 169 venkat.puvvada  1.81     
 170                              // Reset the challenge status
 171                              _authenticator.resetChallengeStatus();
 172 kumpf           1.1      }
 173                          
 174                          void CIMClientRep::connect(
 175                              const String& host,
 176                              const Uint32 portNumber,
 177                              const String& userName,
 178 kumpf           1.60         const String& password)
 179 kumpf           1.1      {
 180                              //
 181                              // If already connected, bail out!
 182                              //
 183                              if (_connected)
 184                                  throw AlreadyConnectedException();
 185                          
 186                              //
 187 b.whiteley      1.69         // If the host is empty and port is valid, set hostName to "localhost"
 188 kumpf           1.74         // Otherwise, HTTPConnector will use the unix domain socket.
 189 kumpf           1.1          //
 190                              String hostName = host;
 191 b.whiteley      1.69         if (!host.size() && (portNumber != 0))
 192 kumpf           1.1          {
 193                                  hostName = "localhost";
 194                              }
 195                          
 196                              //
 197                              // Set authentication information
 198                              //
 199 kumpf           1.8          _authenticator.clear();
 200 kumpf           1.1      
 201                              if (userName.size())
 202                              {
 203                                  _authenticator.setUserName(userName);
 204                              }
 205                          
 206                              if (password.size())
 207                              {
 208                                  _authenticator.setPassword(password);
 209                              }
 210                          
 211 a.arora         1.31         _connectSSLContext.reset();
 212 kumpf           1.1          _connectHost = hostName;
 213                              _connectPortNumber = portNumber;
 214 mike            1.71         _connect(_binaryRequest, _binaryResponse);
 215 kumpf           1.1      }
 216                          
 217                          
 218                          void CIMClientRep::connect(
 219                              const String& host,
 220                              const Uint32 portNumber,
 221                              const SSLContext& sslContext,
 222                              const String& userName,
 223 kumpf           1.60         const String& password)
 224 kumpf           1.1      {
 225                              //
 226                              // If already connected, bail out!
 227                              //
 228                              if (_connected)
 229                                  throw AlreadyConnectedException();
 230                          
 231                              //
 232                              // If the host is empty, set hostName to "localhost"
 233                              //
 234                              String hostName = host;
 235                              if (host == String::EMPTY)
 236                              {
 237                                  hostName = "localhost";
 238                              }
 239                          
 240                              //
 241                              // Set authentication information
 242                              //
 243 kumpf           1.8          _authenticator.clear();
 244 kumpf           1.1      
 245                              if (userName.size())
 246                              {
 247                                  _authenticator.setUserName(userName);
 248                              }
 249                          
 250                              if (password.size())
 251                              {
 252                                  _authenticator.setPassword(password);
 253                              }
 254                          
 255                              _connectHost = hostName;
 256                              _connectPortNumber = portNumber;
 257                          
 258 a.arora         1.32         _connectSSLContext.reset(new SSLContext(sslContext));
 259 mike            1.71         _connect(_binaryRequest, _binaryResponse);
 260 kumpf           1.1      }
 261                          
 262                          
 263                          void CIMClientRep::connectLocal()
 264                          {
 265 mike            1.71     #if defined(PEGASUS_ENABLE_PROTOCOL_BINARY)
 266 karl            1.81.2.2     _connectLocal(true);
 267 mike            1.71     #else
 268 karl            1.81.2.2     _connectLocal(false);
 269 mike            1.71     #endif
 270 karl            1.81.2.2 }
 271                          
 272                          void CIMClientRep::connectLocalBinary()
 273                          {
 274                              _connectLocal(true);
 275                          }
 276                          
 277                          void CIMClientRep::_connectLocal(bool binary)
 278                          {
 279                              bool binaryRequest = binary;
 280                              bool binaryResponse = binary;
 281 mike            1.71     
 282 kumpf           1.1          //
 283                              // If already connected, bail out!
 284                              //
 285                              if (_connected)
 286                                  throw AlreadyConnectedException();
 287                          
 288                              //
 289                              // Set authentication type
 290                              //
 291 kumpf           1.8          _authenticator.clear();
 292 kumpf           1.1          _authenticator.setAuthType(ClientAuthenticator::LOCAL);
 293                          
 294 r.kieninger     1.77         _localConnect=true;
 295                          
 296 h.sterling      1.43     #ifndef PEGASUS_DISABLE_LOCAL_DOMAIN_SOCKET
 297 a.arora         1.31         _connectSSLContext.reset();
 298 kumpf           1.30         _connectHost = String::EMPTY;
 299                              _connectPortNumber = 0;
 300 mike            1.71         _connect(binaryRequest, binaryResponse);
 301 kumpf           1.1      #else
 302                          
 303                              try
 304                              {
 305                                  //
 306                                  // Look up the WBEM HTTP port number for the local system
 307                                  //
 308                                  _connectPortNumber = System::lookupPort (WBEM_HTTP_SERVICE_NAME,
 309                                      WBEM_DEFAULT_HTTP_PORT);
 310                          
 311                                  //
 312                                  //  Assign host
 313                                  //
 314 kumpf           1.61             _connectHost.assign(System::getHostName());
 315 kumpf           1.1      
 316 a.arora         1.31             _connectSSLContext.reset();
 317 kumpf           1.1      
 318 mike            1.71             _connect(binaryRequest, binaryResponse);
 319 kumpf           1.1          }
 320 kumpf           1.60         catch (const CannotConnectException &)
 321 kumpf           1.1          {
 322                                  //
 323                                  // Look up the WBEM HTTPS port number for the local system
 324                                  //
 325                                  _connectPortNumber = System::lookupPort (WBEM_HTTPS_SERVICE_NAME,
 326                                      WBEM_DEFAULT_HTTPS_PORT);
 327                          
 328                                  //
 329                                  //  Assign host
 330                                  //
 331 kumpf           1.61             _connectHost.assign(System::getHostName());
 332 kumpf           1.1      
 333                                  //
 334                                  // Create SSLContext
 335                                  //
 336                                  const char* pegasusHome = getenv("PEGASUS_HOME");
 337                          
 338 kumpf           1.63             String randFile;
 339 kumpf           1.1      
 340 kumpf           1.66     # ifdef PEGASUS_SSL_RANDOMFILE
 341 kumpf           1.1              randFile = FileSystem::getAbsolutePath(
 342                                      pegasusHome, PEGASUS_SSLCLIENT_RANDOMFILE);
 343 kumpf           1.66     # endif
 344 kumpf           1.1      
 345 kumpf           1.66             // May throw SSLException
 346                                  _connectSSLContext.reset(
 347                                      new SSLContext(String::EMPTY, NULL, randFile));
 348 kumpf           1.1      
 349 mike            1.71             _connect(binaryRequest, binaryResponse);
 350 kumpf           1.1          }
 351                          #endif
 352                          }
 353                          
 354                          void CIMClientRep::disconnect()
 355                          {
 356 kumpf           1.8          _disconnect();
 357                              _authenticator.clear();
 358 kumpf           1.28         _connectSSLContext.reset();
 359 r.kieninger     1.77         _localConnect=false;
 360 kumpf           1.8      }
 361 kumpf           1.1      
 362 david.dillard   1.42     Boolean CIMClientRep::isConnected() const throw()
 363 marek           1.21     {
 364 david.dillard   1.42         return _connected;
 365 marek           1.21     }
 366                          
 367 r.kieninger     1.77     Boolean CIMClientRep::isLocalConnect() const throw()
 368                          {
 369                              return _localConnect;
 370                          }
 371                          
 372 kumpf           1.52     AcceptLanguageList CIMClientRep::getRequestAcceptLanguages() const
 373 kumpf           1.1      {
 374                              return requestAcceptLanguages;
 375                          }
 376                          
 377 kumpf           1.52     ContentLanguageList CIMClientRep::getRequestContentLanguages() const
 378 kumpf           1.1      {
 379                              return requestContentLanguages;
 380                          }
 381                          
 382 kumpf           1.52     ContentLanguageList CIMClientRep::getResponseContentLanguages() const
 383 kumpf           1.1      {
 384                              return responseContentLanguages;
 385                          }
 386                          
 387 kumpf           1.52     void CIMClientRep::setRequestAcceptLanguages(const AcceptLanguageList& langs)
 388 kumpf           1.1      {
 389                              requestAcceptLanguages = langs;
 390                          }
 391                          
 392 kumpf           1.52     void CIMClientRep::setRequestContentLanguages(const ContentLanguageList& langs)
 393 kumpf           1.1      {
 394                              requestContentLanguages = langs;
 395                          }
 396                          
 397                          void CIMClientRep::setRequestDefaultLanguages()
 398                          {
 399 kumpf           1.51         requestAcceptLanguages = LanguageParser::getDefaultAcceptLanguages();
 400 kumpf           1.1      }
 401                          
 402                          CIMClass CIMClientRep::getClass(
 403                              const CIMNamespaceName& nameSpace,
 404                              const CIMName& className,
 405                              Boolean localOnly,
 406                              Boolean includeQualifiers,
 407                              Boolean includeClassOrigin,
 408 kumpf           1.60         const CIMPropertyList& propertyList)
 409 kumpf           1.1      {
 410 a.arora         1.31         AutoPtr<CIMRequestMessage> request(new CIMGetClassRequestMessage(
 411 kumpf           1.1              String::EMPTY,
 412                                  nameSpace,
 413                                  className,
 414                                  localOnly,
 415                                  includeQualifiers,
 416                                  includeClassOrigin,
 417                                  propertyList,
 418 a.arora         1.31             QueueIdStack()));
 419 kumpf           1.1      
 420                              Message* message = _doRequest(request, CIM_GET_CLASS_RESPONSE_MESSAGE);
 421                          
 422                              CIMGetClassResponseMessage* response =
 423                                  (CIMGetClassResponseMessage*)message;
 424                          
 425 a.arora         1.31         AutoPtr<CIMGetClassResponseMessage> destroyer(response);
 426 kumpf           1.1      
 427 kumpf           1.60         return response->cimClass;
 428 kumpf           1.1      }
 429                          
 430 thilo.boehm     1.79     CIMResponseData CIMClientRep::getInstance(
 431 kumpf           1.1          const CIMNamespaceName& nameSpace,
 432                              const CIMObjectPath& instanceName,
 433                              Boolean localOnly,
 434                              Boolean includeQualifiers,
 435                              Boolean includeClassOrigin,
 436 kumpf           1.60         const CIMPropertyList& propertyList)
 437 kumpf           1.1      {
 438 a.arora         1.31         AutoPtr<CIMRequestMessage> request(new CIMGetInstanceRequestMessage(
 439 kumpf           1.1              String::EMPTY,
 440                                  nameSpace,
 441                                  instanceName,
 442                                  includeQualifiers,
 443                                  includeClassOrigin,
 444                                  propertyList,
 445 a.arora         1.31             QueueIdStack()));
 446 kumpf           1.75         dynamic_cast<CIMGetInstanceRequestMessage*>(request.get())->localOnly =
 447                                  localOnly;
 448 kumpf           1.1      
 449                              Message* message = _doRequest(request, CIM_GET_INSTANCE_RESPONSE_MESSAGE);
 450                          
 451                              CIMGetInstanceResponseMessage* response =
 452                                  (CIMGetInstanceResponseMessage*)message;
 453                          
 454 a.arora         1.31         AutoPtr<CIMGetInstanceResponseMessage> destroyer(response);
 455 kumpf           1.1      
 456 thilo.boehm     1.79         return response->getResponseData();
 457 kumpf           1.1      }
 458                          
 459                          void CIMClientRep::deleteClass(
 460                              const CIMNamespaceName& nameSpace,
 461 kumpf           1.60         const CIMName& className)
 462 kumpf           1.1      {
 463 a.arora         1.31         AutoPtr<CIMRequestMessage> request(new CIMDeleteClassRequestMessage(
 464 kumpf           1.1              String::EMPTY,
 465                                  nameSpace,
 466                                  className,
 467 a.arora         1.31             QueueIdStack()));
 468 kumpf           1.1      
 469                              Message* message = _doRequest(request, CIM_DELETE_CLASS_RESPONSE_MESSAGE);
 470                          
 471                              CIMDeleteClassResponseMessage* response =
 472                                  (CIMDeleteClassResponseMessage*)message;
 473                          
 474 a.arora         1.31         AutoPtr<CIMDeleteClassResponseMessage> destroyer(response);
 475 kumpf           1.1      }
 476                          
 477                          void CIMClientRep::deleteInstance(
 478                              const CIMNamespaceName& nameSpace,
 479 kumpf           1.60         const CIMObjectPath& instanceName)
 480 kumpf           1.1      {
 481 a.arora         1.31         AutoPtr<CIMRequestMessage> request(new CIMDeleteInstanceRequestMessage(
 482 kumpf           1.1              String::EMPTY,
 483                                  nameSpace,
 484                                  instanceName,
 485 a.arora         1.31             QueueIdStack()));
 486 kumpf           1.1      
 487 kumpf           1.60         Message* message =
 488                                  _doRequest(request, CIM_DELETE_INSTANCE_RESPONSE_MESSAGE);
 489 kumpf           1.1      
 490                              CIMDeleteInstanceResponseMessage* response =
 491                                  (CIMDeleteInstanceResponseMessage*)message;
 492                          
 493 a.arora         1.31         AutoPtr<CIMDeleteInstanceResponseMessage> destroyer(response);
 494 kumpf           1.1      }
 495                          
 496                          void CIMClientRep::createClass(
 497                              const CIMNamespaceName& nameSpace,
 498 kumpf           1.60         const CIMClass& newClass)
 499 kumpf           1.1      {
 500 a.arora         1.31         AutoPtr<CIMRequestMessage> request(new CIMCreateClassRequestMessage(
 501 kumpf           1.1              String::EMPTY,
 502                                  nameSpace,
 503                                  newClass,
 504 a.arora         1.31             QueueIdStack()));
 505 kumpf           1.1      
 506                              Message* message = _doRequest(request, CIM_CREATE_CLASS_RESPONSE_MESSAGE);
 507                          
 508                              CIMCreateClassResponseMessage* response =
 509                                  (CIMCreateClassResponseMessage*)message;
 510                          
 511 a.arora         1.31         AutoPtr<CIMCreateClassResponseMessage> destroyer(response);
 512 kumpf           1.1      }
 513                          
 514                          CIMObjectPath CIMClientRep::createInstance(
 515                              const CIMNamespaceName& nameSpace,
 516 kumpf           1.60         const CIMInstance& newInstance)
 517 kumpf           1.1      {
 518 a.arora         1.31         AutoPtr<CIMRequestMessage> request(new CIMCreateInstanceRequestMessage(
 519 kumpf           1.1              String::EMPTY,
 520                                  nameSpace,
 521                                  newInstance,
 522 a.arora         1.31             QueueIdStack()));
 523 kumpf           1.1      
 524 kumpf           1.60         Message* message =
 525                                  _doRequest(request, CIM_CREATE_INSTANCE_RESPONSE_MESSAGE);
 526 kumpf           1.1      
 527                              CIMCreateInstanceResponseMessage* response =
 528                                  (CIMCreateInstanceResponseMessage*)message;
 529                          
 530 a.arora         1.31         AutoPtr<CIMCreateInstanceResponseMessage> destroyer(response);
 531 kumpf           1.1      
 532 kumpf           1.60         return response->instanceName;
 533 kumpf           1.1      }
 534                          
 535                          void CIMClientRep::modifyClass(
 536                              const CIMNamespaceName& nameSpace,
 537 kumpf           1.60         const CIMClass& modifiedClass)
 538 kumpf           1.1      {
 539 a.arora         1.31         AutoPtr<CIMRequestMessage> request(new CIMModifyClassRequestMessage(
 540 kumpf           1.1              String::EMPTY,
 541                                  nameSpace,
 542                                  modifiedClass,
 543 a.arora         1.31             QueueIdStack()));
 544 kumpf           1.1      
 545                              Message* message = _doRequest(request, CIM_MODIFY_CLASS_RESPONSE_MESSAGE);
 546                          
 547                              CIMModifyClassResponseMessage* response =
 548                                  (CIMModifyClassResponseMessage*)message;
 549                          
 550 a.arora         1.31         AutoPtr<CIMModifyClassResponseMessage> destroyer(response);
 551 kumpf           1.1      }
 552                          
 553                          void CIMClientRep::modifyInstance(
 554                              const CIMNamespaceName& nameSpace,
 555                              const CIMInstance& modifiedInstance,
 556                              Boolean includeQualifiers,
 557 kumpf           1.60         const CIMPropertyList& propertyList)
 558 kumpf           1.1      {
 559 a.arora         1.31         AutoPtr<CIMRequestMessage> request(new CIMModifyInstanceRequestMessage(
 560 kumpf           1.1              String::EMPTY,
 561                                  nameSpace,
 562                                  modifiedInstance,
 563                                  includeQualifiers,
 564                                  propertyList,
 565 a.arora         1.31             QueueIdStack()));
 566 kumpf           1.1      
 567 kumpf           1.60         Message* message =
 568                                  _doRequest(request, CIM_MODIFY_INSTANCE_RESPONSE_MESSAGE);
 569 kumpf           1.1      
 570                              CIMModifyInstanceResponseMessage* response =
 571                                  (CIMModifyInstanceResponseMessage*)message;
 572                          
 573 a.arora         1.31         AutoPtr<CIMModifyInstanceResponseMessage> destroyer(response);
 574 kumpf           1.1      }
 575                          
 576                          Array<CIMClass> CIMClientRep::enumerateClasses(
 577                              const CIMNamespaceName& nameSpace,
 578                              const CIMName& className,
 579                              Boolean deepInheritance,
 580                              Boolean localOnly,
 581                              Boolean includeQualifiers,
 582 kumpf           1.60         Boolean includeClassOrigin)
 583 kumpf           1.1      {
 584 a.arora         1.31         AutoPtr<CIMRequestMessage> request(new CIMEnumerateClassesRequestMessage(
 585 kumpf           1.1              String::EMPTY,
 586                                  nameSpace,
 587                                  className,
 588                                  deepInheritance,
 589                                  localOnly,
 590                                  includeQualifiers,
 591                                  includeClassOrigin,
 592 a.arora         1.31             QueueIdStack()));
 593 kumpf           1.1      
 594 kumpf           1.60         Message* message =
 595                                  _doRequest(request, CIM_ENUMERATE_CLASSES_RESPONSE_MESSAGE);
 596 kumpf           1.1      
 597                              CIMEnumerateClassesResponseMessage* response =
 598                                  (CIMEnumerateClassesResponseMessage*)message;
 599                          
 600 a.arora         1.31         AutoPtr<CIMEnumerateClassesResponseMessage> destroyer(response);
 601 kumpf           1.1      
 602 kumpf           1.60         return response->cimClasses;
 603 kumpf           1.1      }
 604                          
 605                          Array<CIMName> CIMClientRep::enumerateClassNames(
 606                              const CIMNamespaceName& nameSpace,
 607                              const CIMName& className,
 608 kumpf           1.60         Boolean deepInheritance)
 609 kumpf           1.1      {
 610 a.arora         1.31         AutoPtr<CIMRequestMessage> request(new CIMEnumerateClassNamesRequestMessage(
 611 kumpf           1.1              String::EMPTY,
 612                                  nameSpace,
 613                                  className,
 614                                  deepInheritance,
 615 a.arora         1.31             QueueIdStack()));
 616 kumpf           1.1      
 617 kumpf           1.60         Message* message =
 618                                  _doRequest(request, CIM_ENUMERATE_CLASS_NAMES_RESPONSE_MESSAGE);
 619 kumpf           1.1      
 620                              CIMEnumerateClassNamesResponseMessage* response =
 621                                  (CIMEnumerateClassNamesResponseMessage*)message;
 622                          
 623 a.arora         1.31         AutoPtr<CIMEnumerateClassNamesResponseMessage> destroyer(response);
 624 kumpf           1.1      
 625                              // Temporary code until internal structures use CIMName instead of String
 626                              Array<CIMName> classNameArray;
 627                              classNameArray.reserveCapacity(response->classNames.size());
 628                              for (Uint32 i=0; i<response->classNames.size(); i++)
 629                              {
 630                                  classNameArray.append(response->classNames[i]);
 631                              }
 632 kumpf           1.60         return classNameArray;
 633 kumpf           1.1      }
 634                          
 635 thilo.boehm     1.79     CIMResponseData CIMClientRep::enumerateInstances(
 636 kumpf           1.1          const CIMNamespaceName& nameSpace,
 637                              const CIMName& className,
 638                              Boolean deepInheritance,
 639                              Boolean localOnly,
 640                              Boolean includeQualifiers,
 641                              Boolean includeClassOrigin,
 642 kumpf           1.60         const CIMPropertyList& propertyList)
 643 kumpf           1.1      {
 644 a.arora         1.31         AutoPtr<CIMRequestMessage> request(new CIMEnumerateInstancesRequestMessage(
 645 kumpf           1.1              String::EMPTY,
 646                                  nameSpace,
 647                                  className,
 648                                  deepInheritance,
 649                                  includeQualifiers,
 650                                  includeClassOrigin,
 651                                  propertyList,
 652 a.arora         1.31             QueueIdStack()));
 653 kumpf           1.75         dynamic_cast<CIMEnumerateInstancesRequestMessage*>(
 654                                  request.get())->localOnly = localOnly;
 655 kumpf           1.1      
 656 kumpf           1.60         Message* message =
 657                                  _doRequest(request, CIM_ENUMERATE_INSTANCES_RESPONSE_MESSAGE);
 658 kumpf           1.1      
 659                              CIMEnumerateInstancesResponseMessage* response =
 660                                  (CIMEnumerateInstancesResponseMessage*)message;
 661                          
 662 a.arora         1.31         AutoPtr<CIMEnumerateInstancesResponseMessage> destroyer(response);
 663 kumpf           1.1      
 664 thilo.boehm     1.79         return response->getResponseData();
 665 kumpf           1.1      }
 666                          
 667 thilo.boehm     1.79     CIMResponseData CIMClientRep::enumerateInstanceNames(
 668 kumpf           1.1          const CIMNamespaceName& nameSpace,
 669 kumpf           1.60         const CIMName& className)
 670 kumpf           1.1      {
 671 kumpf           1.60         AutoPtr<CIMRequestMessage> request(
 672                                  new CIMEnumerateInstanceNamesRequestMessage(
 673                                      String::EMPTY,
 674                                      nameSpace,
 675                                      className,
 676                                      QueueIdStack()));
 677 kumpf           1.1      
 678 kumpf           1.60         Message* message =
 679                                  _doRequest(request, CIM_ENUMERATE_INSTANCE_NAMES_RESPONSE_MESSAGE);
 680 kumpf           1.1      
 681                              CIMEnumerateInstanceNamesResponseMessage* response =
 682                                  (CIMEnumerateInstanceNamesResponseMessage*)message;
 683                          
 684 a.arora         1.31         AutoPtr<CIMEnumerateInstanceNamesResponseMessage> destroyer(response);
 685 kumpf           1.1      
 686 thilo.boehm     1.79         return response->getResponseData();
 687 kumpf           1.1      }
 688                          
 689 thilo.boehm     1.79     CIMResponseData CIMClientRep::execQuery(
 690 r.kieninger     1.77         const CIMNamespaceName& nameSpace,
 691                              const String& queryLanguage,
 692                              const String& query)
 693                          {
 694                              AutoPtr<CIMRequestMessage> request(new CIMExecQueryRequestMessage(
 695                                  String::EMPTY,
 696                                  nameSpace,
 697                                  queryLanguage,
 698                                  query,
 699                                  QueueIdStack()));
 700                          
 701                              Message* message = _doRequest(request, CIM_EXEC_QUERY_RESPONSE_MESSAGE);
 702                          
 703                              CIMExecQueryResponseMessage* response =
 704                                  (CIMExecQueryResponseMessage*)message;
 705                          
 706                              AutoPtr<CIMExecQueryResponseMessage> destroyer(response);
 707                          
 708 thilo.boehm     1.79         return response->getResponseData();
 709 kumpf           1.1      }
 710                          
 711 thilo.boehm     1.79     CIMResponseData CIMClientRep::associators(
 712 r.kieninger     1.77         const CIMNamespaceName& nameSpace,
 713                              const CIMObjectPath& objectName,
 714                              const CIMName& assocClass,
 715                              const CIMName& resultClass,
 716                              const String& role,
 717                              const String& resultRole,
 718                              Boolean includeQualifiers,
 719                              Boolean includeClassOrigin,
 720                              const CIMPropertyList& propertyList)
 721                          {
 722                              AutoPtr<CIMRequestMessage> request(new CIMAssociatorsRequestMessage(
 723                                  String::EMPTY,
 724                                  nameSpace,
 725                                  objectName,
 726                                  assocClass,
 727                                  resultClass,
 728                                  role,
 729                                  resultRole,
 730                                  includeQualifiers,
 731                                  includeClassOrigin,
 732                                  propertyList,
 733 r.kieninger     1.77             QueueIdStack()));
 734                          
 735                              Message* message = _doRequest(request, CIM_ASSOCIATORS_RESPONSE_MESSAGE);
 736                          
 737                              CIMAssociatorsResponseMessage* response =
 738                                  (CIMAssociatorsResponseMessage*)message;
 739                          
 740                              AutoPtr<CIMAssociatorsResponseMessage> destroyer(response);
 741                          
 742 thilo.boehm     1.79         return response->getResponseData();
 743 r.kieninger     1.77     }
 744                          
 745 thilo.boehm     1.79     CIMResponseData CIMClientRep::associatorNames(
 746 kumpf           1.1          const CIMNamespaceName& nameSpace,
 747                              const CIMObjectPath& objectName,
 748                              const CIMName& assocClass,
 749                              const CIMName& resultClass,
 750                              const String& role,
 751 kumpf           1.60         const String& resultRole)
 752 kumpf           1.1      {
 753 a.arora         1.31         AutoPtr<CIMRequestMessage> request(new CIMAssociatorNamesRequestMessage(
 754 kumpf           1.1              String::EMPTY,
 755                                  nameSpace,
 756                                  objectName,
 757                                  assocClass,
 758                                  resultClass,
 759                                  role,
 760                                  resultRole,
 761 a.arora         1.31             QueueIdStack()));
 762 kumpf           1.1      
 763 kumpf           1.60         Message* message =
 764                                  _doRequest(request, CIM_ASSOCIATOR_NAMES_RESPONSE_MESSAGE);
 765 kumpf           1.1      
 766                              CIMAssociatorNamesResponseMessage* response =
 767                                  (CIMAssociatorNamesResponseMessage*)message;
 768                          
 769 a.arora         1.31         AutoPtr<CIMAssociatorNamesResponseMessage> destroyer(response);
 770 kumpf           1.1      
 771 thilo.boehm     1.79         return response->getResponseData();
 772 kumpf           1.1      }
 773                          
 774 thilo.boehm     1.79     CIMResponseData CIMClientRep::references(
 775 kumpf           1.1          const CIMNamespaceName& nameSpace,
 776                              const CIMObjectPath& objectName,
 777                              const CIMName& resultClass,
 778                              const String& role,
 779                              Boolean includeQualifiers,
 780                              Boolean includeClassOrigin,
 781 kumpf           1.60         const CIMPropertyList& propertyList)
 782 kumpf           1.1      {
 783 a.arora         1.31         AutoPtr<CIMRequestMessage> request(new CIMReferencesRequestMessage(
 784 kumpf           1.1              String::EMPTY,
 785                                  nameSpace,
 786                                  objectName,
 787                                  resultClass,
 788                                  role,
 789                                  includeQualifiers,
 790                                  includeClassOrigin,
 791                                  propertyList,
 792 a.arora         1.31             QueueIdStack()));
 793 kumpf           1.1      
 794                              Message* message = _doRequest(request, CIM_REFERENCES_RESPONSE_MESSAGE);
 795                          
 796                              CIMReferencesResponseMessage* response =
 797                                  (CIMReferencesResponseMessage*)message;
 798                          
 799 a.arora         1.31         AutoPtr<CIMReferencesResponseMessage> destroyer(response);
 800 kumpf           1.1      
 801 thilo.boehm     1.79         return response->getResponseData();
 802 kumpf           1.1      }
 803                          
 804 thilo.boehm     1.79     CIMResponseData CIMClientRep::referenceNames(
 805 kumpf           1.1          const CIMNamespaceName& nameSpace,
 806                              const CIMObjectPath& objectName,
 807                              const CIMName& resultClass,
 808 kumpf           1.60         const String& role)
 809 kumpf           1.1      {
 810 a.arora         1.31         AutoPtr<CIMRequestMessage> request(new CIMReferenceNamesRequestMessage(
 811 kumpf           1.1              String::EMPTY,
 812                                  nameSpace,
 813                                  objectName,
 814                                  resultClass,
 815                                  role,
 816 a.arora         1.31             QueueIdStack()));
 817 kumpf           1.1      
 818 kumpf           1.60         Message* message =
 819                                  _doRequest(request, CIM_REFERENCE_NAMES_RESPONSE_MESSAGE);
 820 kumpf           1.1      
 821                              CIMReferenceNamesResponseMessage* response =
 822                                  (CIMReferenceNamesResponseMessage*)message;
 823                          
 824 a.arora         1.31         AutoPtr<CIMReferenceNamesResponseMessage> destroyer(response);
 825 kumpf           1.1      
 826 thilo.boehm     1.79         return response->getResponseData();
 827 kumpf           1.1      }
 828                          
 829                          CIMValue CIMClientRep::getProperty(
 830                              const CIMNamespaceName& nameSpace,
 831                              const CIMObjectPath& instanceName,
 832 kumpf           1.60         const CIMName& propertyName)
 833 kumpf           1.1      {
 834 a.arora         1.31         AutoPtr<CIMRequestMessage> request(new CIMGetPropertyRequestMessage(
 835 kumpf           1.1              String::EMPTY,
 836                                  nameSpace,
 837                                  instanceName,
 838                                  propertyName,
 839 a.arora         1.31             QueueIdStack()));
 840 kumpf           1.1      
 841                              Message* message = _doRequest(request, CIM_GET_PROPERTY_RESPONSE_MESSAGE);
 842                          
 843                              CIMGetPropertyResponseMessage* response =
 844                                  (CIMGetPropertyResponseMessage*)message;
 845                          
 846 a.arora         1.31         AutoPtr<CIMGetPropertyResponseMessage> destroyer(response);
 847 kumpf           1.1      
 848 kumpf           1.60         return response->value;
 849 kumpf           1.1      }
 850                          
 851                          void CIMClientRep::setProperty(
 852                              const CIMNamespaceName& nameSpace,
 853                              const CIMObjectPath& instanceName,
 854                              const CIMName& propertyName,
 855 kumpf           1.60         const CIMValue& newValue)
 856 kumpf           1.1      {
 857 a.arora         1.31         AutoPtr<CIMRequestMessage> request(new CIMSetPropertyRequestMessage(
 858 kumpf           1.1              String::EMPTY,
 859                                  nameSpace,
 860                                  instanceName,
 861                                  propertyName,
 862                                  newValue,
 863 a.arora         1.31             QueueIdStack()));
 864 kumpf           1.1      
 865                              Message* message = _doRequest(request, CIM_SET_PROPERTY_RESPONSE_MESSAGE);
 866                          
 867                              CIMSetPropertyResponseMessage* response =
 868                                  (CIMSetPropertyResponseMessage*)message;
 869                          
 870 a.arora         1.31         AutoPtr<CIMSetPropertyResponseMessage> destroyer(response);
 871 kumpf           1.1      }
 872                          
 873                          CIMQualifierDecl CIMClientRep::getQualifier(
 874                              const CIMNamespaceName& nameSpace,
 875 kumpf           1.60         const CIMName& qualifierName)
 876 kumpf           1.1      {
 877 a.arora         1.31         AutoPtr<CIMRequestMessage> request(new CIMGetQualifierRequestMessage(
 878 kumpf           1.1              String::EMPTY,
 879                                  nameSpace,
 880                                  qualifierName,
 881 a.arora         1.31             QueueIdStack()));
 882 kumpf           1.1      
 883                              Message* message = _doRequest(request, CIM_GET_QUALIFIER_RESPONSE_MESSAGE);
 884                          
 885                              CIMGetQualifierResponseMessage* response =
 886                                  (CIMGetQualifierResponseMessage*)message;
 887                          
 888 a.arora         1.31         AutoPtr<CIMGetQualifierResponseMessage> destroyer(response);
 889 kumpf           1.1      
 890 kumpf           1.60         return response->cimQualifierDecl;
 891 kumpf           1.1      }
 892                          
 893                          void CIMClientRep::setQualifier(
 894                              const CIMNamespaceName& nameSpace,
 895 kumpf           1.60         const CIMQualifierDecl& qualifierDeclaration)
 896 kumpf           1.1      {
 897 a.arora         1.31         AutoPtr<CIMRequestMessage> request(new CIMSetQualifierRequestMessage(
 898 kumpf           1.1              String::EMPTY,
 899                                  nameSpace,
 900                                  qualifierDeclaration,
 901 a.arora         1.31             QueueIdStack()));
 902 kumpf           1.1      
 903                              Message* message = _doRequest(request, CIM_SET_QUALIFIER_RESPONSE_MESSAGE);
 904                          
 905                              CIMSetQualifierResponseMessage* response =
 906                                  (CIMSetQualifierResponseMessage*)message;
 907                          
 908 a.arora         1.31         AutoPtr<CIMSetQualifierResponseMessage> destroyer(response);
 909 kumpf           1.1      }
 910                          
 911                          void CIMClientRep::deleteQualifier(
 912                              const CIMNamespaceName& nameSpace,
 913 kumpf           1.60         const CIMName& qualifierName)
 914 kumpf           1.1      {
 915 a.arora         1.31         AutoPtr<CIMRequestMessage> request(new CIMDeleteQualifierRequestMessage(
 916 kumpf           1.1              String::EMPTY,
 917                                  nameSpace,
 918                                  qualifierName,
 919 a.arora         1.31             QueueIdStack()));
 920 kumpf           1.1      
 921 kumpf           1.60         Message* message =
 922                                  _doRequest(request, CIM_DELETE_QUALIFIER_RESPONSE_MESSAGE);
 923 kumpf           1.1      
 924                              CIMDeleteQualifierResponseMessage* response =
 925                                  (CIMDeleteQualifierResponseMessage*)message;
 926                          
 927 a.arora         1.31         AutoPtr<CIMDeleteQualifierResponseMessage> destroyer(response);
 928 kumpf           1.1      }
 929                          
 930                          Array<CIMQualifierDecl> CIMClientRep::enumerateQualifiers(
 931 kumpf           1.60         const CIMNamespaceName& nameSpace)
 932 kumpf           1.1      {
 933 a.arora         1.31         AutoPtr<CIMRequestMessage> request(new CIMEnumerateQualifiersRequestMessage(
 934 kumpf           1.1              String::EMPTY,
 935                                  nameSpace,
 936 a.arora         1.31             QueueIdStack()));
 937 kumpf           1.1      
 938 kumpf           1.60         Message* message =
 939                                  _doRequest(request, CIM_ENUMERATE_QUALIFIERS_RESPONSE_MESSAGE);
 940 kumpf           1.1      
 941                              CIMEnumerateQualifiersResponseMessage* response =
 942                                  (CIMEnumerateQualifiersResponseMessage*)message;
 943                          
 944 a.arora         1.31         AutoPtr<CIMEnumerateQualifiersResponseMessage> destroyer(response);
 945 kumpf           1.1      
 946 kumpf           1.60         return response->qualifierDeclarations;
 947 kumpf           1.1      }
 948                          
 949                          CIMValue CIMClientRep::invokeMethod(
 950                              const CIMNamespaceName& nameSpace,
 951                              const CIMObjectPath& instanceName,
 952                              const CIMName& methodName,
 953                              const Array<CIMParamValue>& inParameters,
 954 kumpf           1.60         Array<CIMParamValue>& outParameters)
 955 kumpf           1.1      {
 956                              // ATTN-RK-P2-20020301: Does it make sense to have a nameSpace parameter
 957                              // when the namespace should already be included in the instanceName?
 958                              // ATTN-RK-P3-20020301: Do we need to make sure the caller didn't specify
 959                              // a host name in the instanceName?
 960                          
 961 david.dillard   1.42         // solved with PEP#139 Stage1 as other CIMOMs contained in the object path
 962                              // will cause a TypeMisMatchException
 963 marek           1.12     
 964 a.arora         1.31         AutoPtr<CIMRequestMessage> request(new CIMInvokeMethodRequestMessage(
 965 kumpf           1.1              String::EMPTY,
 966                                  nameSpace,
 967                                  instanceName,
 968                                  methodName,
 969                                  inParameters,
 970 a.arora         1.31             QueueIdStack()));
 971 kumpf           1.1      
 972                              Message* message = _doRequest(request, CIM_INVOKE_METHOD_RESPONSE_MESSAGE);
 973                          
 974                              CIMInvokeMethodResponseMessage* response =
 975                                  (CIMInvokeMethodResponseMessage*)message;
 976                          
 977 a.arora         1.31         AutoPtr<CIMInvokeMethodResponseMessage> destroyer(response);
 978 kumpf           1.1      
 979                              outParameters = response->outParameters;
 980                          
 981 kumpf           1.60         return response->retValue;
 982 kumpf           1.1      }
 983                          
 984 karl            1.81.2.3 // EXP_PULL_BEGIN
 985 karl            1.81.2.1 CIMResponseData CIMClientRep::openEnumerateInstances(
 986                              CIMEnumerationContext& enumerationContext,
 987                              Boolean& endOfSequence,
 988                              const CIMNamespaceName& nameSpace,
 989                              const CIMName& className,
 990                              Boolean deepInheritance,
 991                              Boolean includeClassOrigin,
 992                              const CIMPropertyList& propertyList,
 993                              const String& filterQueryLanguage,
 994                              const String& filterQuery,
 995                              const Uint32Arg& operationTimeout,
 996 karl            1.81.2.4     Boolean continueOnError,
 997                              Uint32 maxObjectCount)
 998 karl            1.81.2.1 {
 999                              // Save requied information in enumerationContext
1000                              enumerationContext.setNameSpace(nameSpace);
1001                          
1002                              // Create/send the request message
1003                              AutoPtr<CIMRequestMessage> request(
1004                                  new CIMOpenEnumerateInstancesRequestMessage(
1005                                      String::EMPTY,                  // messageId_ param
1006                                      nameSpace,
1007                                      className,
1008                                      deepInheritance,
1009                                      includeClassOrigin,
1010                                      propertyList,
1011                                      filterQueryLanguage,
1012                                      filterQuery,
1013                                      operationTimeout,
1014                                      continueOnError,
1015                                      maxObjectCount,
1016                                      QueueIdStack()));
1017                          
1018                              Message* message =
1019 karl            1.81.2.1         _doRequest(request, CIM_OPEN_ENUMERATE_INSTANCES_RESPONSE_MESSAGE);
1020                          
1021                              // When Response received, get response message, get output parameters
1022                              // and return data
1023                              CIMOpenEnumerateInstancesResponseMessage* response =
1024                                  (CIMOpenEnumerateInstancesResponseMessage*)message;
1025                          
1026                              AutoPtr<CIMOpenEnumerateInstancesResponseMessage> destroyer(response);
1027                          
1028                              // set endOfSequence and context return parameters
1029                              endOfSequence = response->endOfSequence;
1030                              enumerationContext.setContextString(response->enumerationContext);
1031                          
1032                              return response->getResponseData();
1033                          }
1034                          
1035                          
1036                          CIMResponseData CIMClientRep::openEnumerateInstancePaths(
1037                              CIMEnumerationContext& enumerationContext,
1038                              Boolean& endOfSequence,
1039                              const CIMNamespaceName& nameSpace,
1040 karl            1.81.2.1     const CIMName& className,
1041                              const String& filterQueryLanguage,
1042                              const String& filterQuery,
1043                              const Uint32Arg& operationTimeout,
1044 karl            1.81.2.4     Boolean continueOnError,
1045                              Uint32 maxObjectCount)
1046 karl            1.81.2.1 {
1047                              AutoPtr<CIMRequestMessage> request(
1048                                  new CIMOpenEnumerateInstancePathsRequestMessage(
1049                                      String::EMPTY,                  // messageId_ param
1050                                      nameSpace,
1051                                      className,
1052                                      filterQueryLanguage,
1053                                      filterQuery,
1054                                      operationTimeout,
1055                                      continueOnError,
1056                                      maxObjectCount,
1057                                      QueueIdStack()));
1058                          
1059                              enumerationContext.setNameSpace(nameSpace);
1060                              Message* message =
1061                                  _doRequest(request, CIM_OPEN_ENUMERATE_INSTANCE_PATHS_RESPONSE_MESSAGE);
1062                          
1063                              CIMOpenEnumerateInstancePathsResponseMessage* response =
1064                                  (CIMOpenEnumerateInstancePathsResponseMessage*)message;
1065                          
1066                              AutoPtr<CIMOpenEnumerateInstancePathsResponseMessage> destroyer(response);
1067 karl            1.81.2.1 
1068                              // set paramters to be returned to caller
1069                              endOfSequence = response->endOfSequence;
1070                              enumerationContext.setContextString(response->enumerationContext);
1071                          
1072                              return response->getResponseData();
1073                          }
1074                          
1075                          CIMResponseData  CIMClientRep::openReferenceInstances(
1076                                  CIMEnumerationContext& enumerationContext,
1077                                  Boolean& endOfSequence,
1078                                  const CIMNamespaceName& nameSpace,
1079                                  const CIMObjectPath& objectName,
1080                                  const CIMName& resultClass,
1081                                  const String& role,
1082                                  Boolean includeClassOrigin,
1083                                  const CIMPropertyList& propertyList,
1084                                  const String& filterQueryLanguage,
1085                                  const String& filterQuery,
1086                                  const Uint32Arg& operationTimeout,
1087 karl            1.81.2.4         Boolean continueOnError,
1088                                  Uint32 maxObjectCount)
1089 karl            1.81.2.1 {
1090                              AutoPtr<CIMRequestMessage> request(
1091                                  new CIMOpenReferenceInstancesRequestMessage(
1092                                      String::EMPTY,                  // messageId_ param
1093                                      nameSpace,
1094                                      objectName,
1095                                      resultClass,
1096                                      role,
1097                                      includeClassOrigin,
1098                                      propertyList,
1099                                      filterQueryLanguage,
1100                                      filterQuery,
1101                                      operationTimeout,
1102                                      continueOnError,
1103                                      maxObjectCount,
1104                                      QueueIdStack()));
1105                          
1106                              enumerationContext.setNameSpace(nameSpace);
1107                              Message* message =
1108                                  _doRequest(request, CIM_OPEN_REFERENCE_INSTANCES_RESPONSE_MESSAGE);
1109                          
1110 karl            1.81.2.1     CIMOpenReferenceInstancesResponseMessage* response =
1111                                  (CIMOpenReferenceInstancesResponseMessage*)message;
1112                          
1113                              AutoPtr<CIMOpenReferenceInstancesResponseMessage> destroyer(response);
1114                          
1115                              // set paramters to be returned to caller
1116                              endOfSequence = response->endOfSequence;
1117                              enumerationContext.setContextString(response->enumerationContext);
1118                          
1119                              return response->getResponseData();
1120                          }
1121                          
1122                          
1123                          CIMResponseData CIMClientRep::openReferenceInstancePaths(
1124                              CIMEnumerationContext& enumerationContext,
1125                              Boolean& endOfSequence,
1126                              const CIMNamespaceName& nameSpace,
1127                              const CIMObjectPath& objectName,
1128                              const CIMName& resultClass,
1129                              const String& role,
1130                              const String& filterQueryLanguage,
1131 karl            1.81.2.1     const String& filterQuery,
1132                              const Uint32Arg& operationTimeout,
1133 karl            1.81.2.4     Boolean continueOnError,
1134                              Uint32 maxObjectCount)
1135 karl            1.81.2.1 {
1136                              AutoPtr<CIMRequestMessage> request(
1137                                  new CIMOpenReferenceInstancePathsRequestMessage(
1138                                      String::EMPTY,                  // messageId_ param
1139                                      nameSpace,
1140                                      objectName,
1141                                      resultClass,
1142                                      role,
1143                                      filterQueryLanguage,
1144                                      filterQuery,
1145                                      operationTimeout,
1146                                      continueOnError,
1147                                      maxObjectCount,
1148                                      QueueIdStack()));
1149                          
1150                              enumerationContext.setNameSpace(nameSpace);
1151                              Message* message =
1152                                  _doRequest(request, CIM_OPEN_REFERENCE_INSTANCE_PATHS_RESPONSE_MESSAGE);
1153                          
1154                              CIMOpenReferenceInstancePathsResponseMessage* response =
1155                                  (CIMOpenReferenceInstancePathsResponseMessage*)message;
1156 karl            1.81.2.1 
1157                              AutoPtr<CIMOpenReferenceInstancePathsResponseMessage> destroyer(response);
1158                          
1159                              // set paramters to be returned to caller
1160                              endOfSequence = response->endOfSequence;
1161                              enumerationContext.setContextString(response->enumerationContext);
1162                          
1163                              return response->getResponseData();
1164                          }
1165                          
1166                          CIMResponseData CIMClientRep::openAssociatorInstances(
1167                              CIMEnumerationContext& enumerationContext,
1168                              Boolean& endOfSequence,
1169                              const CIMNamespaceName& nameSpace,
1170                              const CIMObjectPath& objectName,
1171                              const CIMName& assocClass,
1172                              const CIMName& resultClass,
1173                              const String& role,
1174                              const String& resultRole,
1175                              Boolean includeClassOrigin,
1176                              const CIMPropertyList& propertyList,
1177 karl            1.81.2.1     const String& filterQueryLanguage,
1178                              const String& filterQuery,
1179                              const Uint32Arg& operationTimeout,
1180 karl            1.81.2.4     Boolean continueOnError,
1181                              Uint32 maxObjectCount
1182 karl            1.81.2.1     )
1183                          {
1184                              AutoPtr<CIMRequestMessage> request(
1185                                  new CIMOpenAssociatorInstancesRequestMessage(
1186                                      String::EMPTY,                  // messageId_ param
1187                                      nameSpace,
1188                                      objectName,
1189                                      assocClass,
1190                                      resultClass,
1191                                      role,
1192                                      resultRole,
1193                                      includeClassOrigin,
1194                                      propertyList,
1195                                      filterQueryLanguage,
1196                                      filterQuery,
1197                                      operationTimeout,
1198                                      continueOnError,
1199                                      maxObjectCount,
1200                                      QueueIdStack()));
1201                          
1202                              enumerationContext.setNameSpace(nameSpace);
1203 karl            1.81.2.1 
1204                              Message* message =
1205                                  _doRequest(request, CIM_OPEN_ASSOCIATOR_INSTANCES_RESPONSE_MESSAGE);
1206                          
1207                              CIMOpenAssociatorInstancesResponseMessage* response =
1208                                  (CIMOpenAssociatorInstancesResponseMessage*)message;
1209                          
1210                              AutoPtr<CIMOpenAssociatorInstancesResponseMessage> destroyer(response);
1211                          
1212                              // set parameters to be returned to caller
1213                              endOfSequence = response->endOfSequence;
1214                              enumerationContext.setContextString(response->enumerationContext);
1215                          
1216                              return response->getResponseData();
1217                          }
1218                          
1219                          CIMResponseData CIMClientRep::openAssociatorInstancePaths(
1220                              CIMEnumerationContext& enumerationContext,
1221                              Boolean& endOfSequence,
1222                              const CIMNamespaceName& nameSpace,
1223                              const CIMObjectPath& objectName,
1224 karl            1.81.2.1     const CIMName& assocClass,
1225                              const CIMName& resultClass,
1226                              const String& role,
1227                              const String& resultRole,
1228                              const String& filterQueryLanguage,
1229                              const String& filterQuery,
1230                              const Uint32Arg& operationTimeout,
1231 karl            1.81.2.4     Boolean continueOnError,
1232                              Uint32 maxObjectCount)
1233 karl            1.81.2.1 {
1234                              AutoPtr<CIMRequestMessage> request(
1235                                  new CIMOpenAssociatorInstancePathsRequestMessage(
1236                                      String::EMPTY,                  // messageId_ param
1237                                      nameSpace,
1238                                      objectName,
1239                                      assocClass,
1240                                      resultClass,
1241                                      role,
1242                                      resultRole,
1243                                      filterQueryLanguage,
1244                                      filterQuery,
1245                                      operationTimeout,
1246                                      continueOnError,
1247                                      maxObjectCount,
1248                                      QueueIdStack()));
1249                          
1250                              enumerationContext.setNameSpace(nameSpace);
1251                              Message* message =
1252 karl            1.81.2.4         _doRequest(request,
1253 karl            1.81.2.1                    CIM_OPEN_ASSOCIATOR_INSTANCE_PATHS_RESPONSE_MESSAGE);
1254                          
1255                              CIMOpenAssociatorInstancePathsResponseMessage* response =
1256                                  (CIMOpenAssociatorInstancePathsResponseMessage*)message;
1257                          
1258                              AutoPtr<CIMOpenAssociatorInstancePathsResponseMessage> destroyer(response);
1259                          
1260                              // set paramters to be returned to caller
1261                              endOfSequence = response->endOfSequence;
1262                              enumerationContext.setContextString(response->enumerationContext);
1263                          
1264                              return response->getResponseData();
1265                          }
1266                          
1267                          CIMResponseData CIMClientRep::pullInstancesWithPath(
1268                              CIMEnumerationContext& enumerationContext,
1269                              Boolean& endOfSequence,
1270 karl            1.81.2.4     const Uint32 maxObjectCount)
1271 karl            1.81.2.1 {
1272                              // Issue local exception if the context is invalid
1273                              // KS_TODO - Why not just let server do this.
1274                          //  if (endOfSequence == false &&
1275                          //      enumerationContext.getContextString().size())
1276                          //  {
1277                          //      throw InvalidEnumerationContextException();
1278                          //  }
1279                              AutoPtr<CIMRequestMessage> request(
1280                                  new CIMPullInstancesWithPathRequestMessage(
1281                                      String::EMPTY,                  // messageId_ param
1282                                      enumerationContext.getNameSpace(),
1283                                      enumerationContext.getContextString(),
1284                                      maxObjectCount,
1285                                      QueueIdStack() ));
1286                          
1287                                  Message* message =
1288                                      _doRequest(request, CIM_PULL_INSTANCES_WITH_PATH_RESPONSE_MESSAGE);
1289                          
1290                                  CIMPullInstancesWithPathResponseMessage* response =
1291                                      (CIMPullInstancesWithPathResponseMessage*)message;
1292 karl            1.81.2.1 
1293                                  AutoPtr<CIMPullInstancesWithPathResponseMessage> destroyer(response);
1294                          
1295                                  // set paramters to be returned to caller
1296                                  endOfSequence = response->endOfSequence;
1297                                  enumerationContext.setContextString(response->enumerationContext);
1298                          
1299                                  return response->getResponseData();
1300                          }
1301                          
1302                          CIMResponseData CIMClientRep::pullInstancePaths(
1303                              CIMEnumerationContext& enumerationContext,
1304                              Boolean& endOfSequence,
1305 karl            1.81.2.4     Uint32 maxObjectCount)
1306 karl            1.81.2.1 {
1307                              // Issue local exception of context is invalid
1308                          //  if (endOfSequence == false &&
1309                          //      enumerationContext.getContextString().size())
1310                          //  {
1311                          //      throw InvalidEnumerationContextException();
1312                          //  }
1313                              AutoPtr<CIMRequestMessage> request(
1314                                  new CIMPullInstancePathsRequestMessage(
1315                                      String::EMPTY,                  // messageId_ param
1316                                      enumerationContext.getNameSpace(),
1317                                      enumerationContext.getContextString(),
1318                                      maxObjectCount,
1319                                      QueueIdStack()
1320                                      ));
1321                          
1322                                  Message* message =
1323                                      _doRequest(request, CIM_PULL_INSTANCE_PATHS_RESPONSE_MESSAGE);
1324                          
1325                                  CIMPullInstancePathsResponseMessage* response =
1326                                      (CIMPullInstancePathsResponseMessage*)message;
1327 karl            1.81.2.1 
1328                                  AutoPtr<CIMPullInstancePathsResponseMessage> destroyer(response);
1329                          
1330                                  // set paramters to be returned to caller
1331                                  endOfSequence = response->endOfSequence;
1332                                  enumerationContext.setContextString(response->enumerationContext);
1333                          
1334                                  return response->getResponseData();
1335                          }
1336                          
1337                          void CIMClientRep::closeEnumeration(
1338                              CIMEnumerationContext& enumerationContext)
1339                          {
1340                              // Issue local exception of context invalid
1341                              // KS_TODO - Why even getting enumerationContext???
1342                          //  if (enumerationContext.getContextString().size())
1343                          //  {
1344                          //      throw InvalidEnumerationContextException();
1345                          //  }
1346                              AutoPtr<CIMRequestMessage> request(
1347                                  new CIMCloseEnumerationRequestMessage(
1348 karl            1.81.2.1             String::EMPTY,                  // messageId_ param
1349                                      enumerationContext.getNameSpace(),
1350                                      enumerationContext.getContextString(),
1351                                      QueueIdStack()
1352                                      ));
1353                          
1354                                  Message* message =
1355                                      _doRequest(request, CIM_CLOSE_ENUMERATION_RESPONSE_MESSAGE);
1356                          
1357                                  CIMCloseEnumerationResponseMessage* response =
1358                                      (CIMCloseEnumerationResponseMessage*)message;
1359                          
1360                                  AutoPtr<CIMCloseEnumerationResponseMessage> destroyer(response);
1361                          
1362                                  // KS_PULL_QUESTION - Should we touch the enumeration context??
1363                          
1364                                  return;
1365                          }
1366                          
1367                          Uint64Arg CIMClientRep::enumerationCount(
1368                              CIMEnumerationContext& enumerationContext)
1369 karl            1.81.2.1 {
1370                          
1371                              if (enumerationContext.getContextString().size())
1372                              {
1373                                  throw InvalidEnumerationContextException();
1374                              }
1375                              AutoPtr<CIMRequestMessage> request(
1376                                  new CIMEnumerationCountRequestMessage(
1377                                      String::EMPTY,                  // messageId_ param
1378                                      enumerationContext.getNameSpace(),
1379                                      enumerationContext.getContextString(),
1380                                      QueueIdStack()
1381                                      ));
1382                          
1383                                  Message* message =
1384                                      _doRequest(request, CIM_ENUMERATION_COUNT_RESPONSE_MESSAGE);
1385                          
1386                                  CIMEnumerationCountResponseMessage* response =
1387                                      (CIMEnumerationCountResponseMessage*)message;
1388                          
1389                                  AutoPtr<CIMEnumerationCountResponseMessage> destroyer(response);
1390 karl            1.81.2.1 
1391                                  return response->count ;
1392                          }
1393 karl            1.81.2.3 //EXP_PULL_END
1394 karl            1.81.2.1 
1395 kumpf           1.1      Message* CIMClientRep::_doRequest(
1396 a.arora         1.31         AutoPtr<CIMRequestMessage>& request,
1397 kumpf           1.65         MessageType expectedResponseMessageType)
1398 kumpf           1.1      {
1399 kumpf           1.61         if (!_connected && !_doReconnect)
1400 kumpf           1.1          {
1401                                  throw NotConnectedException();
1402                              }
1403                          
1404 harsha.bm       1.78         // Check if the connection has to be re-established
1405 harsha.bm       1.80         if ( _connected && _httpConnection->needsReconnect() )
1406 harsha.bm       1.78         {
1407                                  _disconnect();
1408                                  _doReconnect = true;
1409                              }
1410                          
1411 kumpf           1.61         if (_doReconnect)
1412                              {
1413 mike            1.71             _connect(_binaryRequest, _binaryResponse);
1414 kumpf           1.61             _doReconnect = false;
1415                              }
1416                          
1417 kumpf           1.1          String messageId = XmlWriter::getNextMessageId();
1418                              const_cast<String &>(request->messageId) = messageId;
1419                          
1420 kumpf           1.8          _authenticator.setRequestMessage(0);
1421 kumpf           1.1      
1422                              // ATTN-RK-P2-20020416: We should probably clear out the queue first.
1423                              PEGASUS_ASSERT(getCount() == 0);  // Shouldn't be any messages in our queue
1424                          
1425                              //
1426 karl            1.2          //  Set HTTP method in request to POST
1427 kumpf           1.1          //
1428 david.dillard   1.42         //Bug 478/418 - Change this to do post call, not mpost
1429 karl            1.2          request->setHttpMethod (HTTP_METHOD__POST);
1430 kumpf           1.1      
1431                              // Set the Accept-Languages and Content-Languages into
1432                              // the request message
1433                          
1434 kumpf           1.60         request->operationContext.set(
1435                                  AcceptLanguageListContainer(requestAcceptLanguages));
1436                              request->operationContext.set(
1437                                  ContentLanguageListContainer(requestContentLanguages));
1438 se.gupta        1.22     
1439                          
1440 kumpf           1.60         //gathering statistical information about client operation
1441                              perfDataStore.reset();
1442                              perfDataStore.setOperationType(request->getType());
1443                              perfDataStore.setMessageID(request->messageId);
1444 w.white         1.35     
1445 kumpf           1.1          // Sending a new request, so clear out the response Content-Languages
1446 kumpf           1.51         responseContentLanguages.clear();
1447 kumpf           1.1      
1448 a.arora         1.32         _requestEncoder->enqueue(request.get());
1449                              request.release();
1450 kumpf           1.1      
1451                              Uint64 startMilliseconds = TimeValue::getCurrentTime().toMilliseconds();
1452                              Uint64 nowMilliseconds = startMilliseconds;
1453 dmitry.mikulin  1.67     #ifdef PEGASUS_DISABLE_CLIENT_TIMEOUT
1454                              Uint64 stopMilliseconds = (Uint64) -1;
1455                          #else
1456 kumpf           1.1          Uint64 stopMilliseconds = nowMilliseconds + _timeoutMilliseconds;
1457 dmitry.mikulin  1.67     #endif
1458 kumpf           1.1      
1459                              while (nowMilliseconds < stopMilliseconds)
1460                              {
1461                                  //
1462                                  // Wait until the timeout expires or an event occurs:
1463                                  //
1464 kumpf           1.34             _monitor->run(Uint32(stopMilliseconds - nowMilliseconds));
1465 kumpf           1.1      
1466                                  //
1467                                  // Check to see if incoming queue has a message
1468                                  //
1469                          
1470 kumpf           1.61             AutoPtr<Message> response(dequeue());
1471 kumpf           1.1      
1472 kumpf           1.61             if (response.get())
1473 kumpf           1.1              {
1474                                      // Shouldn't be any more messages in our queue
1475                                      PEGASUS_ASSERT(getCount() == 0);
1476                          
1477                                      //
1478 kumpf           1.61                 // Close the connection if response contained a "Connection: Close"
1479                                      // header (e.g. at authentication challenge)
1480 j.alex          1.47                 //
1481 kumpf           1.60                 if (response->getCloseConnect() == true)
1482                                      {
1483 kumpf           1.61                     _disconnect();
1484                                          _doReconnect = true;
1485 j.alex          1.48                     response->setCloseConnect(false);
1486 j.alex          1.47                 }
1487                          
1488                                      //
1489 kumpf           1.4                  //  Future:  If M-POST is used and HTTP response is 501 Not
1490                                      //  Implemented or 510 Not Extended, retry with POST method
1491 kumpf           1.1                  //
1492                          
1493                                      if (response->getType() == CLIENT_EXCEPTION_MESSAGE)
1494                                      {
1495                                          Exception* clientException =
1496 kumpf           1.61                         ((ClientExceptionMessage*)response.get())->clientException;
1497 kumpf           1.4      
1498 a.arora         1.31                     AutoPtr<Exception> d(clientException);
1499 kumpf           1.4      
1500 david.dillard   1.42                     // Make the ContentLanguage of the exception available through
1501                                          // the CIMClient API (its also available in the exception).
1502 kumpf           1.60                     responseContentLanguages =
1503                                              clientException->getContentLanguages();
1504 chuck           1.27     
1505 kumpf           1.4                      //
1506                                          // Determine and throw the specific class of client exception
1507                                          //
1508                          
1509                                          CIMClientMalformedHTTPException* malformedHTTPException =
1510                                              dynamic_cast<CIMClientMalformedHTTPException*>(
1511                                                  clientException);
1512                                          if (malformedHTTPException)
1513                                          {
1514                                              throw *malformedHTTPException;
1515                                          }
1516                          
1517                                          CIMClientHTTPErrorException* httpErrorException =
1518                                              dynamic_cast<CIMClientHTTPErrorException*>(
1519                                                  clientException);
1520                                          if (httpErrorException)
1521                                          {
1522                                              throw *httpErrorException;
1523                                          }
1524                          
1525                                          CIMClientXmlException* xmlException =
1526 kumpf           1.4                          dynamic_cast<CIMClientXmlException*>(clientException);
1527                                          if (xmlException)
1528                                          {
1529                                              throw *xmlException;
1530                                          }
1531                          
1532                                          CIMClientResponseException* responseException =
1533                                              dynamic_cast<CIMClientResponseException*>(clientException);
1534                                          if (responseException)
1535                                          {
1536                                              throw *responseException;
1537                                          }
1538                          
1539 david.dillard   1.42                     CIMException* cimException =
1540 brian.campbell  1.25                         dynamic_cast<CIMException*>(clientException);
1541                                          if (cimException)
1542                                          {
1543                                              throw *cimException;
1544                                          }
1545                          
1546 kumpf           1.1                      throw *clientException;
1547                                      }
1548                                      else if (response->getType() == expectedResponseMessageType)
1549                                      {
1550 kumpf           1.61                     CIMResponseMessage* cimResponse =
1551                                              (CIMResponseMessage*)response.get();
1552 kumpf           1.1      
1553                                          if (cimResponse->messageId != messageId)
1554                                          {
1555                                              MessageLoaderParms mlParms(
1556                                                  "Client.CIMClient.MISMATCHED_RESPONSE",
1557                                                  "Mismatched response message ID:  Got \"$0\", "
1558                                                      "expected \"$1\".",
1559                                                  cimResponse->messageId, messageId);
1560                                              String mlString(MessageLoader::getMessage(mlParms));
1561                          
1562                                              CIMClientResponseException responseException(mlString);
1563                          
1564                                              throw responseException;
1565                                          }
1566                          
1567 kumpf           1.60                     // Get the Content-Languages from the response's
1568                                          // operationContext and make available through the
1569                                          // CIMClient API
1570                                          responseContentLanguages = ((ContentLanguageListContainer)
1571                                              cimResponse->operationContext.get(
1572                                                  ContentLanguageListContainer::NAME)).getLanguages();
1573 kumpf           1.1      
1574                                          if (cimResponse->cimException.getCode() != CIM_ERR_SUCCESS)
1575                                          {
1576 karl            1.59                         CIMException cimException(cimResponse->cimException);
1577                          
1578 david.dillard   1.42                         cimException.setContentLanguages(responseContentLanguages);
1579 kumpf           1.1                          throw cimException;
1580                                          }
1581 w.white         1.37     
1582 kumpf           1.60                     // if execution gets here everytihng is working correctly
1583                                          // and a proper response was generated and received.
1584 w.white         1.37     
1585 kumpf           1.60                     // Check that client side statistics are valid before
1586                                          // handing them to the client application via a call back
1587                                          Boolean re_check = perfDataStore.checkMessageIDandType(
1588                                              cimResponse->messageId,
1589                                              cimResponse->getType());
1590                          
1591                                          if (re_check &&
1592                                              !perfDataStore.getStatError() &&
1593                                              perfDataStore.isClassRegistered())
1594 david.dillard   1.42                     {
1595 kumpf           1.60                        // If callback method throws an exception it will be seen
1596                                             // by the client no try/catch block is used here
1597                                             // intentionaly - because exceptions come from the client
1598                                             // application so client app. should handle them
1599                                             ClientOpPerformanceData item =
1600                                                 perfDataStore.createPerfDataStruct();
1601                                             perfDataStore.handler_prt->handleClientOpPerformanceData(
1602                                                 item);
1603 david.dillard   1.42     
1604 w.white         1.37                     }//end of if statmet that call the callback method
1605 kumpf           1.61                     return response.release();
1606 kumpf           1.1                  }
1607 kumpf           1.61                 else if (dynamic_cast<CIMRequestMessage*>(response.get()) != 0)
1608 j.alex          1.48                 {
1609 kumpf           1.61                     //
1610                                          // Respond to an authentication challenge.
1611                                          // Reconnect if the connection was closed.
1612                                          //
1613                                          if (_doReconnect)
1614                                          {
1615 mike            1.71                         _connect(_binaryRequest, _binaryResponse);
1616 kumpf           1.61                     }
1617                          
1618                                          _requestEncoder->enqueue(response.release());
1619 j.alex          1.48                     nowMilliseconds = TimeValue::getCurrentTime().toMilliseconds();
1620                                          stopMilliseconds = nowMilliseconds + _timeoutMilliseconds;
1621                                          continue;
1622                                      }
1623 kumpf           1.1                  else
1624                                      {
1625                                          MessageLoaderParms mlParms(
1626 kumpf           1.60                         "Client.CIMOperationResponseDecoder."
1627                                                  "MISMATCHED_RESPONSE_TYPE",
1628 j.alex          1.48                         "Mismatched response message type.");
1629 kumpf           1.1                      String mlString(MessageLoader::getMessage(mlParms));
1630                          
1631                                          CIMClientResponseException responseException(mlString);
1632                          
1633                                          throw responseException;
1634                                      }
1635                                  }
1636                          
1637                                  nowMilliseconds = TimeValue::getCurrentTime().toMilliseconds();
1638                              }
1639                          
1640                              //
1641                              // Reconnect to reset the connection (disregard late response)
1642                              //
1643 kumpf           1.61     
1644                              _disconnect();
1645                              _doReconnect = true;
1646 kumpf           1.1      
1647                              //
1648                              // Throw timed out exception:
1649                              //
1650                              throw ConnectionTimeoutException();
1651                          }
1652                          
1653 kumpf           1.60     void CIMClientRep::registerClientOpPerformanceDataHandler(
1654                              ClientOpPerformanceDataHandler& handler)
1655 david.dillard   1.42     {
1656 kumpf           1.60         perfDataStore.handler_prt = &handler;
1657                              perfDataStore.setClassRegistered(true);
1658 w.white         1.37     }
1659 david.dillard   1.42     
1660 w.white         1.37     void CIMClientRep::deregisterClientOpPerformanceDataHandler()
1661                          {
1662 a.dunfey        1.53         perfDataStore.handler_prt = NULL;
1663                              perfDataStore.setClassRegistered(false);
1664 w.white         1.37     }
1665                          
1666 karl            1.81.2.4 
1667                          /*
1668                              Implementation of the Trace mechanism
1669                          */
1670                          
1671                          // static variables to store the display state for input and output.
1672                          Uint32 ClientTrace::inputState;
1673                          Uint32 ClientTrace::outputState;
1674                          
1675                          ClientTrace::TraceType ClientTrace::selectType(const String& str)
1676                          {
1677                              if (str == "con")
1678                              {
1679                                  return TRACE_CON;
1680                              }
1681                              if (str == "log")
1682                              {
1683                                  return TRACE_LOG;
1684                              }
1685                              if (str == "both")
1686                              {
1687 karl            1.81.2.4         return TRACE_BOTH;
1688                              }
1689                              return TRACE_NONE;
1690                          }
1691                          
1692                          Boolean ClientTrace::displayOutput(TraceType tt)
1693                          {
1694                              return (tt & outputState);
1695                          }
1696                          
1697                          Boolean ClientTrace::displayInput(TraceType tt)
1698                          {
1699                              return (tt & inputState);
1700                          }
1701                          
1702                          // Set up the input and output state variables from the input
1703                          // environment variable.
1704                          void ClientTrace::setup()
1705                          {
1706                              String input;
1707                              if (char * envVar = getenv("PEGASUS_CLIENT_TRACE"))
1708 karl            1.81.2.4     {
1709                                  input = envVar;
1710                                  input.toLower();
1711                                  String in;
1712                                  String out;
1713                                  Uint32 pos = input.find(':');
1714                          
1715                                  // if no colon found, input and output have same mask
1716                                  if (pos == PEG_NOT_FOUND)
1717                                  {
1718                                      in = input;
1719                                      out = input;
1720                                  }
1721                                  else
1722                                  {
1723                                      // if string starts with colon, input empty, else
1724                                      // either both or output empty
1725                                      if (input[0] == ':')
1726                                      {
1727                                          in = "";
1728                                          out = input.subString(1);
1729 karl            1.81.2.4             }
1730                                      else
1731                                      {
1732                                          in = input.subString(0,pos);
1733                                          if (pos == (input.size() - 1))
1734                                          {
1735                                              out = "";
1736                                          }
1737                                          else
1738                                          {
1739                                              out =input.subString(pos + 1);
1740                                          }
1741                                      }
1742                                  }
1743                          
1744                                  // set the state variables
1745                                  outputState = ClientTrace::selectType(out);
1746                                  inputState = ClientTrace::selectType(in);
1747                          
1748                                  // Test for logging requested and if so set log parameters
1749                                  if (((outputState| inputState) & TRACE_LOG) != 0)
1750 karl            1.81.2.4         {
1751                                      Logger::setlogLevelMask("");
1752                                  }
1753                              }
1754                          }
1755 kumpf           1.1      PEGASUS_NAMESPACE_END

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2