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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2