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

   1 karl  1.54 //%2006////////////////////////////////////////////////////////////////////////
   2 kumpf 1.1  //
   3 karl  1.33 // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
   4            // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
   5            // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
   6 karl  1.3  // IBM Corp.; EMC Corporation, The Open Group.
   7 karl  1.33 // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
   8            // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
   9 karl  1.36 // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
  10            // EMC Corporation; VERITAS Software Corporation; The Open Group.
  11 karl  1.54 // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
  12            // EMC Corporation; Symantec Corporation; The Open Group.
  13 kumpf 1.1  //
  14            // Permission is hereby granted, free of charge, to any person obtaining a copy
  15            // of this software and associated documentation files (the "Software"), to
  16            // deal in the Software without restriction, including without limitation the
  17            // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  18            // sell copies of the Software, and to permit persons to whom the Software is
  19            // furnished to do so, subject to the following conditions:
  20 karl  1.54 // 
  21 kumpf 1.1  // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
  22            // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
  23            // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
  24            // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  25            // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  26            // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  27            // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  28            // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  29            //
  30            //==============================================================================
  31            //
  32            //%/////////////////////////////////////////////////////////////////////////////
  33            
  34            #include "CIMClientRep.h"
  35            
  36            #include <Pegasus/Common/MessageLoader.h>
  37 joyce.j 1.41 #include <Pegasus/Common/System.h>
  38 kumpf   1.51 #include <Pegasus/Common/LanguageParser.h>
  39 kumpf   1.1  
  40              #include <iostream>
  41              #include <fstream>
  42 mike    1.55 #include <Pegasus/Common/Network.h>
  43 kumpf   1.1  
  44              PEGASUS_USING_STD;
  45              
  46              PEGASUS_NAMESPACE_BEGIN
  47              
  48              ///////////////////////////////////////////////////////////////////////////////
  49              //
  50              // CIMClientRep
  51              //
  52              ///////////////////////////////////////////////////////////////////////////////
  53              
  54              CIMClientRep::CIMClientRep(Uint32 timeoutMilliseconds)
  55                  :
  56                  MessageQueue(PEGASUS_QUEUENAME_CLIENT),
  57                  _timeoutMilliseconds(timeoutMilliseconds),
  58 a.arora 1.31     _connected(false)
  59 kumpf   1.1  {
  60                  //
  61                  // Create Monitor and HTTPConnector
  62                  //
  63 a.arora 1.31     _monitor.reset(new Monitor());
  64                  _httpConnector.reset(new HTTPConnector(_monitor.get()));
  65 kumpf   1.1  
  66 kumpf   1.51     requestAcceptLanguages.clear();
  67                  requestContentLanguages.clear();
  68 kumpf   1.1  }
  69              
  70              CIMClientRep::~CIMClientRep()
  71              {
  72                 disconnect();
  73              }
  74              
  75              void CIMClientRep::handleEnqueue()
  76              {
  77              
  78              }
  79              
  80              Uint32 _getShowType(String& s)
  81              {
  82                  String log = "log";
  83                  String con = "con";
  84                  String both = "both";
  85                  if (s == log)
  86 tony    1.7          return 2;
  87                  if (s == con)
  88 karl    1.6          return 1;
  89 kumpf   1.1      if (s == both)
  90 karl    1.6          return 3;
  91 kumpf   1.1      return 0;
  92              }
  93              
  94 a.arora 1.32 void CIMClientRep::_connect()
  95 kumpf   1.1  {
  96                  //
  97                  // Test for Display optons of the form
  98                  // Use Env variable PEGASUS_CLIENT_TRACE= <intrace> : <outtrace
  99                  // intrace = "con" | "log" | "both"
 100                  // outtrace = intrace
 101                  // ex set PEGASUS_CLIENT_TRACE=BOTH:BOTH traces input and output
 102                  // to console and log
 103                  // Keywords are case insensitive.
 104                  // PEP 90
 105                  //
 106                  Uint32 showOutput = 0;
 107                  Uint32 showInput = 0;
 108              #ifdef PEGASUS_CLIENT_TRACE_ENABLE
 109                  String input;
 110                  if (char * envVar = getenv("PEGASUS_CLIENT_TRACE"))
 111                  {
 112                      input = envVar;
 113                      input.toLower();
 114                      String io = String::EMPTY;
 115                      Uint32 pos = input.find(':');
 116 kumpf   1.1          if (pos == PEG_NOT_FOUND)
 117                          pos = 0;
 118                      else
 119                          io = input.subString(0,pos);
 120              
 121 tony    1.5          // some compilers do not allow temporaries to be passed to a
 122                      // reference argument - so break into 2 lines
 123                      String out = input.subString(pos + 1);
 124                      showOutput = _getShowType(out);
 125 kumpf   1.1  
 126                      showInput = _getShowType(io);
 127                  }
 128              #endif
 129              
 130                  //
 131                  // Create response decoder:
 132                  //
 133 kumpf   1.60     AutoPtr<CIMOperationResponseDecoder> responseDecoder(
 134                      new CIMOperationResponseDecoder(
 135                          this, _requestEncoder.get(), &_authenticator, showInput));
 136 kumpf   1.1  
 137                  //
 138                  // Attempt to establish a connection:
 139                  //
 140 a.arora 1.31     AutoPtr<HTTPConnection> httpConnection(_httpConnector->connect(
 141 kumpf   1.60         _connectHost,
 142                      _connectPortNumber,
 143                      _connectSSLContext.get(),
 144                      responseDecoder.get()));
 145 david.dillard 1.42 
 146 kumpf         1.1      //
 147                        // Create request encoder:
 148                        //
 149 kumpf         1.30     String connectHost = _connectHost;
 150                        if (connectHost.size())
 151                        {
 152                            char portStr[32];
 153                            sprintf(portStr, ":%u", _connectPortNumber);
 154                            connectHost.append(portStr);
 155                        }
 156                    
 157 kumpf         1.60     AutoPtr<CIMOperationRequestEncoder> requestEncoder(
 158                            new CIMOperationRequestEncoder(
 159 a.arora       1.31             httpConnection.get(), connectHost, &_authenticator, showOutput));
 160 david.dillard 1.42 
 161 a.arora       1.31     _responseDecoder.reset(responseDecoder.release());
 162 denise.eckstein 1.46     _httpConnection = httpConnection.release();
 163 a.arora         1.31     _requestEncoder.reset(requestEncoder.release());
 164                          _responseDecoder->setEncoderQueue(_requestEncoder.get());
 165 kumpf           1.60 
 166                          //pass encoder and decoder a pointer to CIMClientRep::perfDataStore
 167 a.dunfey        1.53     _requestEncoder->setDataStorePointer(&perfDataStore);
 168                          _responseDecoder->setDataStorePointer(&perfDataStore);
 169                      
 170 kumpf           1.1      _connected = true;
 171 marek           1.56     _httpConnection->setSocketWriteTimeout(_timeoutMilliseconds/1000+1);
 172 kumpf           1.1  }
 173                      
 174 kumpf           1.8  void CIMClientRep::_disconnect()
 175                      {
 176                          if (_connected)
 177                          {
 178                              //
 179                              // destroy response decoder
 180                              //
 181 a.arora         1.31         _responseDecoder.reset();
 182 david.dillard   1.42 
 183 kumpf           1.8  
 184                              //
 185                              // Close the connection
 186                              //
 187 a.arora         1.31         if (_httpConnector.get())
 188 kumpf           1.8          {
 189 denise.eckstein 1.46             _httpConnector->disconnect(_httpConnection);
 190                                  _httpConnection = 0;
 191 kumpf           1.8          }
 192                      
 193                              //
 194                              // destroy request encoder
 195                              //
 196 a.arora         1.31         _requestEncoder.reset();
 197 kumpf           1.8  
 198                              _connected = false;
 199                          }
 200                      }
 201                      
 202 kumpf           1.1  void CIMClientRep::_reconnect()
 203                      {
 204 kumpf           1.8      _disconnect();
 205 mateus.baur     1.50     _authenticator.clearReconnect();
 206 a.arora         1.32     _connect();
 207 kumpf           1.1  }
 208                      
 209                      void CIMClientRep::connect(
 210                          const String& host,
 211                          const Uint32 portNumber,
 212                          const String& userName,
 213 kumpf           1.60     const String& password)
 214 kumpf           1.1  {
 215                          //
 216                          // If already connected, bail out!
 217                          //
 218                          if (_connected)
 219                              throw AlreadyConnectedException();
 220                      
 221                          //
 222                          // If the host is empty, set hostName to "localhost"
 223                          //
 224                          String hostName = host;
 225                          if (host == String::EMPTY)
 226                          {
 227                              hostName = "localhost";
 228                          }
 229                      
 230                          //
 231                          // Set authentication information
 232                          //
 233 kumpf           1.8      _authenticator.clear();
 234 kumpf           1.1  
 235                          if (userName.size())
 236                          {
 237                              _authenticator.setUserName(userName);
 238                          }
 239                      
 240                          if (password.size())
 241                          {
 242                              _authenticator.setPassword(password);
 243                          }
 244                      
 245 a.arora         1.31     _connectSSLContext.reset();
 246 kumpf           1.1      _connectHost = hostName;
 247                          _connectPortNumber = portNumber;
 248                      
 249 a.arora         1.32     _connect();
 250 kumpf           1.1  }
 251                      
 252                      
 253                      void CIMClientRep::connect(
 254                          const String& host,
 255                          const Uint32 portNumber,
 256                          const SSLContext& sslContext,
 257                          const String& userName,
 258 kumpf           1.60     const String& password)
 259 kumpf           1.1  {
 260                          //
 261                          // If already connected, bail out!
 262                          //
 263                          if (_connected)
 264                              throw AlreadyConnectedException();
 265                      
 266                          //
 267                          // If the host is empty, set hostName to "localhost"
 268                          //
 269                          String hostName = host;
 270                          if (host == String::EMPTY)
 271                          {
 272                              hostName = "localhost";
 273                          }
 274                      
 275                          //
 276                          // Set authentication information
 277                          //
 278 kumpf           1.8      _authenticator.clear();
 279 kumpf           1.1  
 280                          if (userName.size())
 281                          {
 282                              _authenticator.setUserName(userName);
 283                          }
 284                      
 285                          if (password.size())
 286                          {
 287                              _authenticator.setPassword(password);
 288                          }
 289                      
 290                          _connectHost = hostName;
 291                          _connectPortNumber = portNumber;
 292                      
 293 a.arora         1.32     _connectSSLContext.reset(new SSLContext(sslContext));
 294                          _connect();
 295 kumpf           1.1  }
 296                      
 297                      
 298                      void CIMClientRep::connectLocal()
 299                      {
 300                          //
 301                          // If already connected, bail out!
 302                          //
 303                          if (_connected)
 304                              throw AlreadyConnectedException();
 305                      
 306                          //
 307                          // Set authentication type
 308                          //
 309 kumpf           1.8      _authenticator.clear();
 310 kumpf           1.1      _authenticator.setAuthType(ClientAuthenticator::LOCAL);
 311                      
 312 h.sterling      1.43 #ifndef PEGASUS_DISABLE_LOCAL_DOMAIN_SOCKET
 313 a.arora         1.31     _connectSSLContext.reset();
 314 kumpf           1.30     _connectHost = String::EMPTY;
 315                          _connectPortNumber = 0;
 316 a.arora         1.32     _connect();
 317 kumpf           1.1  #else
 318                      
 319                          try
 320                          {
 321                              //
 322                              // Look up the WBEM HTTP port number for the local system
 323                              //
 324                              _connectPortNumber = System::lookupPort (WBEM_HTTP_SERVICE_NAME,
 325                                  WBEM_DEFAULT_HTTP_PORT);
 326                      
 327                              //
 328                              //  Assign host
 329                              //
 330                              _connectHost.assign(_getLocalHostName());
 331                      
 332 a.arora         1.31         _connectSSLContext.reset();
 333 kumpf           1.1  
 334 a.arora         1.32         _connect();
 335 kumpf           1.1      }
 336 kumpf           1.60     catch (const CannotConnectException &)
 337 kumpf           1.1      {
 338                              //
 339                              // Look up the WBEM HTTPS port number for the local system
 340                              //
 341                              _connectPortNumber = System::lookupPort (WBEM_HTTPS_SERVICE_NAME,
 342                                  WBEM_DEFAULT_HTTPS_PORT);
 343                      
 344                              //
 345                              //  Assign host
 346                              //
 347                              _connectHost.assign(_getLocalHostName());
 348                      
 349                              //
 350                              // Create SSLContext
 351                              //
 352                      #ifdef PEGASUS_OS_OS400
 353                      #pragma convert(37)
 354                              const char* env = getenv("PEGASUS_HOME");
 355                      #pragma convert(0)
 356                              char pegasusHome[256] = {0};
 357                              if (env != NULL && strlen(env) < 256)
 358 kumpf           1.1          {
 359                                  strcpy(pegasusHome, env);
 360                                  EtoA(pegasusHome);
 361                              }
 362                      #else
 363                              const char* pegasusHome = getenv("PEGASUS_HOME");
 364                      #endif
 365                      
 366                              String randFile = String::EMPTY;
 367                      
 368                      #ifdef PEGASUS_SSL_RANDOMFILE
 369                              randFile = FileSystem::getAbsolutePath(
 370                                  pegasusHome, PEGASUS_SSLCLIENT_RANDOMFILE);
 371                      #endif
 372                      
 373                              try
 374                              {
 375 a.arora         1.32             _connectSSLContext.reset(
 376 kumpf           1.28                 new SSLContext(String::EMPTY, NULL, randFile));
 377 kumpf           1.1          }
 378 david.dillard   1.44         catch (const SSLException &)
 379 kumpf           1.1          {
 380 david.dillard   1.44             throw;
 381 kumpf           1.1          }
 382                      
 383 a.arora         1.32         _connect();
 384 kumpf           1.1      }
 385                      #endif
 386                      }
 387                      
 388                      
 389                      void CIMClientRep::disconnect()
 390                      {
 391 kumpf           1.8      _disconnect();
 392                          _authenticator.clear();
 393 kumpf           1.28     _connectSSLContext.reset();
 394 kumpf           1.8  }
 395 kumpf           1.1  
 396 david.dillard   1.42 Boolean CIMClientRep::isConnected() const throw()
 397 marek           1.21 {
 398 david.dillard   1.42     return _connected;
 399 marek           1.21 }
 400                      
 401 kumpf           1.52 AcceptLanguageList CIMClientRep::getRequestAcceptLanguages() const
 402 kumpf           1.1  {
 403                          return requestAcceptLanguages;
 404                      }
 405                      
 406 kumpf           1.52 ContentLanguageList CIMClientRep::getRequestContentLanguages() const
 407 kumpf           1.1  {
 408                          return requestContentLanguages;
 409                      }
 410                      
 411 kumpf           1.52 ContentLanguageList CIMClientRep::getResponseContentLanguages() const
 412 kumpf           1.1  {
 413                          return responseContentLanguages;
 414                      }
 415                      
 416 kumpf           1.52 void CIMClientRep::setRequestAcceptLanguages(const AcceptLanguageList& langs)
 417 kumpf           1.1  {
 418                          requestAcceptLanguages = langs;
 419                      }
 420                      
 421 kumpf           1.52 void CIMClientRep::setRequestContentLanguages(const ContentLanguageList& langs)
 422 kumpf           1.1  {
 423                          requestContentLanguages = langs;
 424                      }
 425                      
 426                      void CIMClientRep::setRequestDefaultLanguages()
 427                      {
 428 kumpf           1.51     requestAcceptLanguages = LanguageParser::getDefaultAcceptLanguages();
 429 kumpf           1.1  }
 430                      
 431                      CIMClass CIMClientRep::getClass(
 432                          const CIMNamespaceName& nameSpace,
 433                          const CIMName& className,
 434                          Boolean localOnly,
 435                          Boolean includeQualifiers,
 436                          Boolean includeClassOrigin,
 437 kumpf           1.60     const CIMPropertyList& propertyList)
 438 kumpf           1.1  {
 439 a.arora         1.31     AutoPtr<CIMRequestMessage> request(new CIMGetClassRequestMessage(
 440 kumpf           1.1          String::EMPTY,
 441                              nameSpace,
 442                              className,
 443                              localOnly,
 444                              includeQualifiers,
 445                              includeClassOrigin,
 446                              propertyList,
 447 a.arora         1.31         QueueIdStack()));
 448 kumpf           1.1  
 449                          Message* message = _doRequest(request, CIM_GET_CLASS_RESPONSE_MESSAGE);
 450                      
 451                          CIMGetClassResponseMessage* response =
 452                              (CIMGetClassResponseMessage*)message;
 453                      
 454 a.arora         1.31     AutoPtr<CIMGetClassResponseMessage> destroyer(response);
 455 kumpf           1.1  
 456 kumpf           1.60     return response->cimClass;
 457 kumpf           1.1  }
 458                      
 459                      CIMInstance CIMClientRep::getInstance(
 460                          const CIMNamespaceName& nameSpace,
 461                          const CIMObjectPath& instanceName,
 462                          Boolean localOnly,
 463                          Boolean includeQualifiers,
 464                          Boolean includeClassOrigin,
 465 kumpf           1.60     const CIMPropertyList& propertyList)
 466 kumpf           1.1  {
 467 a.arora         1.31     AutoPtr<CIMRequestMessage> request(new CIMGetInstanceRequestMessage(
 468 kumpf           1.1          String::EMPTY,
 469                              nameSpace,
 470                              instanceName,
 471                              localOnly,
 472                              includeQualifiers,
 473                              includeClassOrigin,
 474                              propertyList,
 475 a.arora         1.31         QueueIdStack()));
 476 kumpf           1.1  
 477                          Message* message = _doRequest(request, CIM_GET_INSTANCE_RESPONSE_MESSAGE);
 478                      
 479                          CIMGetInstanceResponseMessage* response =
 480                              (CIMGetInstanceResponseMessage*)message;
 481                      
 482 a.arora         1.31     AutoPtr<CIMGetInstanceResponseMessage> destroyer(response);
 483 kumpf           1.1  
 484 kumpf           1.60     return response->cimInstance;
 485 kumpf           1.1  }
 486                      
 487                      void CIMClientRep::deleteClass(
 488                          const CIMNamespaceName& nameSpace,
 489 kumpf           1.60     const CIMName& className)
 490 kumpf           1.1  {
 491 a.arora         1.31     AutoPtr<CIMRequestMessage> request(new CIMDeleteClassRequestMessage(
 492 kumpf           1.1          String::EMPTY,
 493                              nameSpace,
 494                              className,
 495 a.arora         1.31         QueueIdStack()));
 496 kumpf           1.1  
 497                          Message* message = _doRequest(request, CIM_DELETE_CLASS_RESPONSE_MESSAGE);
 498                      
 499                          CIMDeleteClassResponseMessage* response =
 500                              (CIMDeleteClassResponseMessage*)message;
 501                      
 502 a.arora         1.31     AutoPtr<CIMDeleteClassResponseMessage> destroyer(response);
 503 kumpf           1.1  }
 504                      
 505                      void CIMClientRep::deleteInstance(
 506                          const CIMNamespaceName& nameSpace,
 507 kumpf           1.60     const CIMObjectPath& instanceName)
 508 kumpf           1.1  {
 509 a.arora         1.31     AutoPtr<CIMRequestMessage> request(new CIMDeleteInstanceRequestMessage(
 510 kumpf           1.1          String::EMPTY,
 511                              nameSpace,
 512                              instanceName,
 513 a.arora         1.31         QueueIdStack()));
 514 kumpf           1.1  
 515 kumpf           1.60     Message* message =
 516                              _doRequest(request, CIM_DELETE_INSTANCE_RESPONSE_MESSAGE);
 517 kumpf           1.1  
 518                          CIMDeleteInstanceResponseMessage* response =
 519                              (CIMDeleteInstanceResponseMessage*)message;
 520                      
 521 a.arora         1.31     AutoPtr<CIMDeleteInstanceResponseMessage> destroyer(response);
 522 kumpf           1.1  }
 523                      
 524                      void CIMClientRep::createClass(
 525                          const CIMNamespaceName& nameSpace,
 526 kumpf           1.60     const CIMClass& newClass)
 527 kumpf           1.1  {
 528 a.arora         1.31     AutoPtr<CIMRequestMessage> request(new CIMCreateClassRequestMessage(
 529 kumpf           1.1          String::EMPTY,
 530                              nameSpace,
 531                              newClass,
 532 a.arora         1.31         QueueIdStack()));
 533 kumpf           1.1  
 534                          Message* message = _doRequest(request, CIM_CREATE_CLASS_RESPONSE_MESSAGE);
 535                      
 536                          CIMCreateClassResponseMessage* response =
 537                              (CIMCreateClassResponseMessage*)message;
 538                      
 539 a.arora         1.31     AutoPtr<CIMCreateClassResponseMessage> destroyer(response);
 540 kumpf           1.1  }
 541                      
 542                      CIMObjectPath CIMClientRep::createInstance(
 543                          const CIMNamespaceName& nameSpace,
 544 kumpf           1.60     const CIMInstance& newInstance)
 545 kumpf           1.1  {
 546 a.arora         1.31     AutoPtr<CIMRequestMessage> request(new CIMCreateInstanceRequestMessage(
 547 kumpf           1.1          String::EMPTY,
 548                              nameSpace,
 549                              newInstance,
 550 a.arora         1.31         QueueIdStack()));
 551 kumpf           1.1  
 552 kumpf           1.60     Message* message =
 553                              _doRequest(request, CIM_CREATE_INSTANCE_RESPONSE_MESSAGE);
 554 kumpf           1.1  
 555                          CIMCreateInstanceResponseMessage* response =
 556                              (CIMCreateInstanceResponseMessage*)message;
 557                      
 558 a.arora         1.31     AutoPtr<CIMCreateInstanceResponseMessage> destroyer(response);
 559 kumpf           1.1  
 560 kumpf           1.60     return response->instanceName;
 561 kumpf           1.1  }
 562                      
 563                      void CIMClientRep::modifyClass(
 564                          const CIMNamespaceName& nameSpace,
 565 kumpf           1.60     const CIMClass& modifiedClass)
 566 kumpf           1.1  {
 567 a.arora         1.31     AutoPtr<CIMRequestMessage> request(new CIMModifyClassRequestMessage(
 568 kumpf           1.1          String::EMPTY,
 569                              nameSpace,
 570                              modifiedClass,
 571 a.arora         1.31         QueueIdStack()));
 572 kumpf           1.1  
 573                          Message* message = _doRequest(request, CIM_MODIFY_CLASS_RESPONSE_MESSAGE);
 574                      
 575                          CIMModifyClassResponseMessage* response =
 576                              (CIMModifyClassResponseMessage*)message;
 577                      
 578 a.arora         1.31     AutoPtr<CIMModifyClassResponseMessage> destroyer(response);
 579 kumpf           1.1  }
 580                      
 581                      void CIMClientRep::modifyInstance(
 582                          const CIMNamespaceName& nameSpace,
 583                          const CIMInstance& modifiedInstance,
 584                          Boolean includeQualifiers,
 585 kumpf           1.60     const CIMPropertyList& propertyList)
 586 kumpf           1.1  {
 587 a.arora         1.31     AutoPtr<CIMRequestMessage> request(new CIMModifyInstanceRequestMessage(
 588 kumpf           1.1          String::EMPTY,
 589                              nameSpace,
 590                              modifiedInstance,
 591                              includeQualifiers,
 592                              propertyList,
 593 a.arora         1.31         QueueIdStack()));
 594 kumpf           1.1  
 595 kumpf           1.60     Message* message =
 596                              _doRequest(request, CIM_MODIFY_INSTANCE_RESPONSE_MESSAGE);
 597 kumpf           1.1  
 598                          CIMModifyInstanceResponseMessage* response =
 599                              (CIMModifyInstanceResponseMessage*)message;
 600                      
 601 a.arora         1.31     AutoPtr<CIMModifyInstanceResponseMessage> destroyer(response);
 602 kumpf           1.1  }
 603                      
 604                      Array<CIMClass> CIMClientRep::enumerateClasses(
 605                          const CIMNamespaceName& nameSpace,
 606                          const CIMName& className,
 607                          Boolean deepInheritance,
 608                          Boolean localOnly,
 609                          Boolean includeQualifiers,
 610 kumpf           1.60     Boolean includeClassOrigin)
 611 kumpf           1.1  {
 612 a.arora         1.31     AutoPtr<CIMRequestMessage> request(new CIMEnumerateClassesRequestMessage(
 613 kumpf           1.1          String::EMPTY,
 614                              nameSpace,
 615                              className,
 616                              deepInheritance,
 617                              localOnly,
 618                              includeQualifiers,
 619                              includeClassOrigin,
 620 a.arora         1.31         QueueIdStack()));
 621 kumpf           1.1  
 622 kumpf           1.60     Message* message =
 623                              _doRequest(request, CIM_ENUMERATE_CLASSES_RESPONSE_MESSAGE);
 624 kumpf           1.1  
 625                          CIMEnumerateClassesResponseMessage* response =
 626                              (CIMEnumerateClassesResponseMessage*)message;
 627                      
 628 a.arora         1.31     AutoPtr<CIMEnumerateClassesResponseMessage> destroyer(response);
 629 kumpf           1.1  
 630 kumpf           1.60     return response->cimClasses;
 631 kumpf           1.1  }
 632                      
 633                      Array<CIMName> CIMClientRep::enumerateClassNames(
 634                          const CIMNamespaceName& nameSpace,
 635                          const CIMName& className,
 636 kumpf           1.60     Boolean deepInheritance)
 637 kumpf           1.1  {
 638 a.arora         1.31     AutoPtr<CIMRequestMessage> request(new CIMEnumerateClassNamesRequestMessage(
 639 kumpf           1.1          String::EMPTY,
 640                              nameSpace,
 641                              className,
 642                              deepInheritance,
 643 a.arora         1.31         QueueIdStack()));
 644 kumpf           1.1  
 645 kumpf           1.60     Message* message =
 646                              _doRequest(request, CIM_ENUMERATE_CLASS_NAMES_RESPONSE_MESSAGE);
 647 kumpf           1.1  
 648                          CIMEnumerateClassNamesResponseMessage* response =
 649                              (CIMEnumerateClassNamesResponseMessage*)message;
 650                      
 651 a.arora         1.31     AutoPtr<CIMEnumerateClassNamesResponseMessage> destroyer(response);
 652 kumpf           1.1  
 653                          // Temporary code until internal structures use CIMName instead of String
 654                          Array<CIMName> classNameArray;
 655                          classNameArray.reserveCapacity(response->classNames.size());
 656                          for (Uint32 i=0; i<response->classNames.size(); i++)
 657                          {
 658                              classNameArray.append(response->classNames[i]);
 659                          }
 660 kumpf           1.60     return classNameArray;
 661 kumpf           1.1  }
 662                      
 663                      Array<CIMInstance> CIMClientRep::enumerateInstances(
 664                          const CIMNamespaceName& nameSpace,
 665                          const CIMName& className,
 666                          Boolean deepInheritance,
 667                          Boolean localOnly,
 668                          Boolean includeQualifiers,
 669                          Boolean includeClassOrigin,
 670 kumpf           1.60     const CIMPropertyList& propertyList)
 671 kumpf           1.1  {
 672 a.arora         1.31     AutoPtr<CIMRequestMessage> request(new CIMEnumerateInstancesRequestMessage(
 673 kumpf           1.1          String::EMPTY,
 674                              nameSpace,
 675                              className,
 676                              deepInheritance,
 677                              localOnly,
 678                              includeQualifiers,
 679                              includeClassOrigin,
 680                              propertyList,
 681 a.arora         1.31         QueueIdStack()));
 682 kumpf           1.1  
 683 kumpf           1.60     Message* message =
 684                              _doRequest(request, CIM_ENUMERATE_INSTANCES_RESPONSE_MESSAGE);
 685 kumpf           1.1  
 686                          CIMEnumerateInstancesResponseMessage* response =
 687                              (CIMEnumerateInstancesResponseMessage*)message;
 688                      
 689 a.arora         1.31     AutoPtr<CIMEnumerateInstancesResponseMessage> destroyer(response);
 690 kumpf           1.1  
 691 kumpf           1.60     return response->cimNamedInstances;
 692 kumpf           1.1  }
 693                      
 694                      Array<CIMObjectPath> CIMClientRep::enumerateInstanceNames(
 695                          const CIMNamespaceName& nameSpace,
 696 kumpf           1.60     const CIMName& className)
 697 kumpf           1.1  {
 698 kumpf           1.60     AutoPtr<CIMRequestMessage> request(
 699                              new CIMEnumerateInstanceNamesRequestMessage(
 700                                  String::EMPTY,
 701                                  nameSpace,
 702                                  className,
 703                                  QueueIdStack()));
 704 kumpf           1.1  
 705 kumpf           1.60     Message* message =
 706                              _doRequest(request, CIM_ENUMERATE_INSTANCE_NAMES_RESPONSE_MESSAGE);
 707 kumpf           1.1  
 708                          CIMEnumerateInstanceNamesResponseMessage* response =
 709                              (CIMEnumerateInstanceNamesResponseMessage*)message;
 710                      
 711 a.arora         1.31     AutoPtr<CIMEnumerateInstanceNamesResponseMessage> destroyer(response);
 712 kumpf           1.1  
 713 kumpf           1.60     return response->instanceNames;
 714 kumpf           1.1  }
 715                      
 716                      Array<CIMObject> CIMClientRep::execQuery(
 717                          const CIMNamespaceName& nameSpace,
 718                          const String& queryLanguage,
 719 kumpf           1.60     const String& query)
 720 kumpf           1.1  {
 721 a.arora         1.31     AutoPtr<CIMRequestMessage> request(new CIMExecQueryRequestMessage(
 722 kumpf           1.1          String::EMPTY,
 723                              nameSpace,
 724                              queryLanguage,
 725                              query,
 726 a.arora         1.31         QueueIdStack()));
 727 kumpf           1.1  
 728                          Message* message = _doRequest(request, CIM_EXEC_QUERY_RESPONSE_MESSAGE);
 729                      
 730                          CIMExecQueryResponseMessage* response =
 731                              (CIMExecQueryResponseMessage*)message;
 732                      
 733 a.arora         1.31     AutoPtr<CIMExecQueryResponseMessage> destroyer(response);
 734 kumpf           1.1  
 735 kumpf           1.60     return response->cimObjects;
 736 kumpf           1.1  }
 737                      
 738                      Array<CIMObject> CIMClientRep::associators(
 739                          const CIMNamespaceName& nameSpace,
 740                          const CIMObjectPath& objectName,
 741                          const CIMName& assocClass,
 742                          const CIMName& resultClass,
 743                          const String& role,
 744                          const String& resultRole,
 745                          Boolean includeQualifiers,
 746                          Boolean includeClassOrigin,
 747 kumpf           1.60     const CIMPropertyList& propertyList)
 748 kumpf           1.1  {
 749 a.arora         1.31     AutoPtr<CIMRequestMessage> request(new CIMAssociatorsRequestMessage(
 750 kumpf           1.1          String::EMPTY,
 751                              nameSpace,
 752                              objectName,
 753                              assocClass,
 754                              resultClass,
 755                              role,
 756                              resultRole,
 757                              includeQualifiers,
 758                              includeClassOrigin,
 759                              propertyList,
 760 a.arora         1.31         QueueIdStack()));
 761 kumpf           1.1  
 762                          Message* message = _doRequest(request, CIM_ASSOCIATORS_RESPONSE_MESSAGE);
 763                      
 764                          CIMAssociatorsResponseMessage* response =
 765                              (CIMAssociatorsResponseMessage*)message;
 766                      
 767 a.arora         1.31     AutoPtr<CIMAssociatorsResponseMessage> destroyer(response);
 768 kumpf           1.1  
 769 kumpf           1.60     return response->cimObjects;
 770 kumpf           1.1  }
 771                      
 772                      Array<CIMObjectPath> CIMClientRep::associatorNames(
 773                          const CIMNamespaceName& nameSpace,
 774                          const CIMObjectPath& objectName,
 775                          const CIMName& assocClass,
 776                          const CIMName& resultClass,
 777                          const String& role,
 778 kumpf           1.60     const String& resultRole)
 779 kumpf           1.1  {
 780 a.arora         1.31     AutoPtr<CIMRequestMessage> request(new CIMAssociatorNamesRequestMessage(
 781 kumpf           1.1          String::EMPTY,
 782                              nameSpace,
 783                              objectName,
 784                              assocClass,
 785                              resultClass,
 786                              role,
 787                              resultRole,
 788 a.arora         1.31         QueueIdStack()));
 789 kumpf           1.1  
 790 kumpf           1.60     Message* message =
 791                              _doRequest(request, CIM_ASSOCIATOR_NAMES_RESPONSE_MESSAGE);
 792 kumpf           1.1  
 793                          CIMAssociatorNamesResponseMessage* response =
 794                              (CIMAssociatorNamesResponseMessage*)message;
 795                      
 796 a.arora         1.31     AutoPtr<CIMAssociatorNamesResponseMessage> destroyer(response);
 797 kumpf           1.1  
 798 kumpf           1.60     return response->objectNames;
 799 kumpf           1.1  }
 800                      
 801                      Array<CIMObject> CIMClientRep::references(
 802                          const CIMNamespaceName& nameSpace,
 803                          const CIMObjectPath& objectName,
 804                          const CIMName& resultClass,
 805                          const String& role,
 806                          Boolean includeQualifiers,
 807                          Boolean includeClassOrigin,
 808 kumpf           1.60     const CIMPropertyList& propertyList)
 809 kumpf           1.1  {
 810 a.arora         1.31     AutoPtr<CIMRequestMessage> request(new CIMReferencesRequestMessage(
 811 kumpf           1.1          String::EMPTY,
 812                              nameSpace,
 813                              objectName,
 814                              resultClass,
 815                              role,
 816                              includeQualifiers,
 817                              includeClassOrigin,
 818                              propertyList,
 819 a.arora         1.31         QueueIdStack()));
 820 kumpf           1.1  
 821                          Message* message = _doRequest(request, CIM_REFERENCES_RESPONSE_MESSAGE);
 822                      
 823                          CIMReferencesResponseMessage* response =
 824                              (CIMReferencesResponseMessage*)message;
 825                      
 826 a.arora         1.31     AutoPtr<CIMReferencesResponseMessage> destroyer(response);
 827 kumpf           1.1  
 828 kumpf           1.60     return response->cimObjects;
 829 kumpf           1.1  }
 830                      
 831                      Array<CIMObjectPath> CIMClientRep::referenceNames(
 832                          const CIMNamespaceName& nameSpace,
 833                          const CIMObjectPath& objectName,
 834                          const CIMName& resultClass,
 835 kumpf           1.60     const String& role)
 836 kumpf           1.1  {
 837 a.arora         1.31     AutoPtr<CIMRequestMessage> request(new CIMReferenceNamesRequestMessage(
 838 kumpf           1.1          String::EMPTY,
 839                              nameSpace,
 840                              objectName,
 841                              resultClass,
 842                              role,
 843 a.arora         1.31         QueueIdStack()));
 844 kumpf           1.1  
 845 kumpf           1.60     Message* message =
 846                              _doRequest(request, CIM_REFERENCE_NAMES_RESPONSE_MESSAGE);
 847 kumpf           1.1  
 848                          CIMReferenceNamesResponseMessage* response =
 849                              (CIMReferenceNamesResponseMessage*)message;
 850                      
 851 a.arora         1.31     AutoPtr<CIMReferenceNamesResponseMessage> destroyer(response);
 852 kumpf           1.1  
 853 kumpf           1.60     return response->objectNames;
 854 kumpf           1.1  }
 855                      
 856                      CIMValue CIMClientRep::getProperty(
 857                          const CIMNamespaceName& nameSpace,
 858                          const CIMObjectPath& instanceName,
 859 kumpf           1.60     const CIMName& propertyName)
 860 kumpf           1.1  {
 861 a.arora         1.31     AutoPtr<CIMRequestMessage> request(new CIMGetPropertyRequestMessage(
 862 kumpf           1.1          String::EMPTY,
 863                              nameSpace,
 864                              instanceName,
 865                              propertyName,
 866 a.arora         1.31         QueueIdStack()));
 867 kumpf           1.1  
 868                          Message* message = _doRequest(request, CIM_GET_PROPERTY_RESPONSE_MESSAGE);
 869                      
 870                          CIMGetPropertyResponseMessage* response =
 871                              (CIMGetPropertyResponseMessage*)message;
 872                      
 873 a.arora         1.31     AutoPtr<CIMGetPropertyResponseMessage> destroyer(response);
 874 kumpf           1.1  
 875 kumpf           1.60     return response->value;
 876 kumpf           1.1  }
 877                      
 878                      void CIMClientRep::setProperty(
 879                          const CIMNamespaceName& nameSpace,
 880                          const CIMObjectPath& instanceName,
 881                          const CIMName& propertyName,
 882 kumpf           1.60     const CIMValue& newValue)
 883 kumpf           1.1  {
 884 a.arora         1.31     AutoPtr<CIMRequestMessage> request(new CIMSetPropertyRequestMessage(
 885 kumpf           1.1          String::EMPTY,
 886                              nameSpace,
 887                              instanceName,
 888                              propertyName,
 889                              newValue,
 890 a.arora         1.31         QueueIdStack()));
 891 kumpf           1.1  
 892                          Message* message = _doRequest(request, CIM_SET_PROPERTY_RESPONSE_MESSAGE);
 893                      
 894                          CIMSetPropertyResponseMessage* response =
 895                              (CIMSetPropertyResponseMessage*)message;
 896                      
 897 a.arora         1.31     AutoPtr<CIMSetPropertyResponseMessage> destroyer(response);
 898 kumpf           1.1  }
 899                      
 900                      CIMQualifierDecl CIMClientRep::getQualifier(
 901                          const CIMNamespaceName& nameSpace,
 902 kumpf           1.60     const CIMName& qualifierName)
 903 kumpf           1.1  {
 904 a.arora         1.31     AutoPtr<CIMRequestMessage> request(new CIMGetQualifierRequestMessage(
 905 kumpf           1.1          String::EMPTY,
 906                              nameSpace,
 907                              qualifierName,
 908 a.arora         1.31         QueueIdStack()));
 909 kumpf           1.1  
 910                          Message* message = _doRequest(request, CIM_GET_QUALIFIER_RESPONSE_MESSAGE);
 911                      
 912                          CIMGetQualifierResponseMessage* response =
 913                              (CIMGetQualifierResponseMessage*)message;
 914                      
 915 a.arora         1.31     AutoPtr<CIMGetQualifierResponseMessage> destroyer(response);
 916 kumpf           1.1  
 917 kumpf           1.60     return response->cimQualifierDecl;
 918 kumpf           1.1  }
 919                      
 920                      void CIMClientRep::setQualifier(
 921                          const CIMNamespaceName& nameSpace,
 922 kumpf           1.60     const CIMQualifierDecl& qualifierDeclaration)
 923 kumpf           1.1  {
 924 a.arora         1.31     AutoPtr<CIMRequestMessage> request(new CIMSetQualifierRequestMessage(
 925 kumpf           1.1          String::EMPTY,
 926                              nameSpace,
 927                              qualifierDeclaration,
 928 a.arora         1.31         QueueIdStack()));
 929 kumpf           1.1  
 930                          Message* message = _doRequest(request, CIM_SET_QUALIFIER_RESPONSE_MESSAGE);
 931                      
 932                          CIMSetQualifierResponseMessage* response =
 933                              (CIMSetQualifierResponseMessage*)message;
 934                      
 935 a.arora         1.31     AutoPtr<CIMSetQualifierResponseMessage> destroyer(response);
 936 kumpf           1.1  }
 937                      
 938                      void CIMClientRep::deleteQualifier(
 939                          const CIMNamespaceName& nameSpace,
 940 kumpf           1.60     const CIMName& qualifierName)
 941 kumpf           1.1  {
 942 a.arora         1.31     AutoPtr<CIMRequestMessage> request(new CIMDeleteQualifierRequestMessage(
 943 kumpf           1.1          String::EMPTY,
 944                              nameSpace,
 945                              qualifierName,
 946 a.arora         1.31         QueueIdStack()));
 947 kumpf           1.1  
 948 kumpf           1.60     Message* message =
 949                              _doRequest(request, CIM_DELETE_QUALIFIER_RESPONSE_MESSAGE);
 950 kumpf           1.1  
 951                          CIMDeleteQualifierResponseMessage* response =
 952                              (CIMDeleteQualifierResponseMessage*)message;
 953                      
 954 a.arora         1.31     AutoPtr<CIMDeleteQualifierResponseMessage> destroyer(response);
 955 kumpf           1.1  }
 956                      
 957                      Array<CIMQualifierDecl> CIMClientRep::enumerateQualifiers(
 958 kumpf           1.60     const CIMNamespaceName& nameSpace)
 959 kumpf           1.1  {
 960 a.arora         1.31     AutoPtr<CIMRequestMessage> request(new CIMEnumerateQualifiersRequestMessage(
 961 kumpf           1.1          String::EMPTY,
 962                              nameSpace,
 963 a.arora         1.31         QueueIdStack()));
 964 kumpf           1.1  
 965 kumpf           1.60     Message* message =
 966                              _doRequest(request, CIM_ENUMERATE_QUALIFIERS_RESPONSE_MESSAGE);
 967 kumpf           1.1  
 968                          CIMEnumerateQualifiersResponseMessage* response =
 969                              (CIMEnumerateQualifiersResponseMessage*)message;
 970                      
 971 a.arora         1.31     AutoPtr<CIMEnumerateQualifiersResponseMessage> destroyer(response);
 972 kumpf           1.1  
 973 kumpf           1.60     return response->qualifierDeclarations;
 974 kumpf           1.1  }
 975                      
 976                      CIMValue CIMClientRep::invokeMethod(
 977                          const CIMNamespaceName& nameSpace,
 978                          const CIMObjectPath& instanceName,
 979                          const CIMName& methodName,
 980                          const Array<CIMParamValue>& inParameters,
 981 kumpf           1.60     Array<CIMParamValue>& outParameters)
 982 kumpf           1.1  {
 983                          // ATTN-RK-P2-20020301: Does it make sense to have a nameSpace parameter
 984                          // when the namespace should already be included in the instanceName?
 985                          // ATTN-RK-P3-20020301: Do we need to make sure the caller didn't specify
 986                          // a host name in the instanceName?
 987                      
 988 david.dillard   1.42     // solved with PEP#139 Stage1 as other CIMOMs contained in the object path
 989                          // will cause a TypeMisMatchException
 990 marek           1.12 
 991 a.arora         1.31     AutoPtr<CIMRequestMessage> request(new CIMInvokeMethodRequestMessage(
 992 kumpf           1.1          String::EMPTY,
 993                              nameSpace,
 994                              instanceName,
 995                              methodName,
 996                              inParameters,
 997 a.arora         1.31         QueueIdStack()));
 998 kumpf           1.1  
 999                          Message* message = _doRequest(request, CIM_INVOKE_METHOD_RESPONSE_MESSAGE);
1000                      
1001                          CIMInvokeMethodResponseMessage* response =
1002                              (CIMInvokeMethodResponseMessage*)message;
1003                      
1004 a.arora         1.31     AutoPtr<CIMInvokeMethodResponseMessage> destroyer(response);
1005 kumpf           1.1  
1006                          outParameters = response->outParameters;
1007                      
1008 kumpf           1.60     return response->retValue;
1009 kumpf           1.1  }
1010                      
1011                      Message* CIMClientRep::_doRequest(
1012 a.arora         1.31     AutoPtr<CIMRequestMessage>& request,
1013 kumpf           1.60     const Uint32 expectedResponseMessageType)
1014 kumpf           1.1  {
1015                          if (!_connected)
1016                          {
1017 a.arora         1.31         request.reset();
1018 kumpf           1.1          throw NotConnectedException();
1019                          }
1020                      
1021                          String messageId = XmlWriter::getNextMessageId();
1022                          const_cast<String &>(request->messageId) = messageId;
1023                      
1024 kumpf           1.8      _authenticator.setRequestMessage(0);
1025 kumpf           1.1  
1026                          // ATTN-RK-P2-20020416: We should probably clear out the queue first.
1027                          PEGASUS_ASSERT(getCount() == 0);  // Shouldn't be any messages in our queue
1028                      
1029                          //
1030 karl            1.2      //  Set HTTP method in request to POST
1031 kumpf           1.1      //
1032 david.dillard   1.42     //Bug 478/418 - Change this to do post call, not mpost
1033 karl            1.2      request->setHttpMethod (HTTP_METHOD__POST);
1034 kumpf           1.1  
1035                          // Set the Accept-Languages and Content-Languages into
1036                          // the request message
1037                      
1038 kumpf           1.60     request->operationContext.set(
1039                              AcceptLanguageListContainer(requestAcceptLanguages));
1040                          request->operationContext.set(
1041                              ContentLanguageListContainer(requestContentLanguages));
1042 se.gupta        1.22 
1043                      
1044 kumpf           1.60     //gathering statistical information about client operation
1045                          perfDataStore.reset();
1046                          perfDataStore.setOperationType(request->getType());
1047                          perfDataStore.setMessageID(request->messageId);
1048 w.white         1.35 
1049 kumpf           1.1      // Sending a new request, so clear out the response Content-Languages
1050 kumpf           1.51     responseContentLanguages.clear();
1051 kumpf           1.1  
1052 a.arora         1.32     _requestEncoder->enqueue(request.get());
1053                          request.release();
1054 kumpf           1.1  
1055                          Uint64 startMilliseconds = TimeValue::getCurrentTime().toMilliseconds();
1056                          Uint64 nowMilliseconds = startMilliseconds;
1057                          Uint64 stopMilliseconds = nowMilliseconds + _timeoutMilliseconds;
1058                      
1059                          while (nowMilliseconds < stopMilliseconds)
1060                          {
1061                              //
1062                              // Wait until the timeout expires or an event occurs:
1063                              //
1064 kumpf           1.34         _monitor->run(Uint32(stopMilliseconds - nowMilliseconds));
1065 kumpf           1.1  
1066                              //
1067                              // Check to see if incoming queue has a message
1068                              //
1069                      
1070                              Message* response = dequeue();
1071                      
1072                              if (response)
1073                              {
1074                                  // Shouldn't be any more messages in our queue
1075                                  PEGASUS_ASSERT(getCount() == 0);
1076                      
1077                                  //
1078 j.alex          1.47             // Reconnect to reset the connection
1079                                  // if Server response contained a Connection: Close Header
1080                                  //
1081 kumpf           1.60             if (response->getCloseConnect() == true)
1082                                  {
1083 j.alex          1.47                 _reconnect();
1084 j.alex          1.48                 response->setCloseConnect(false);
1085 j.alex          1.47             }
1086                      
1087                                  //
1088 kumpf           1.4              //  Future:  If M-POST is used and HTTP response is 501 Not
1089                                  //  Implemented or 510 Not Extended, retry with POST method
1090 kumpf           1.1              //
1091                      
1092                                  if (response->getType() == CLIENT_EXCEPTION_MESSAGE)
1093                                  {
1094 j.alex          1.47 
1095 kumpf           1.1                  Exception* clientException =
1096                                          ((ClientExceptionMessage*)response)->clientException;
1097                                      delete response;
1098 kumpf           1.4  
1099 a.arora         1.31                 AutoPtr<Exception> d(clientException);
1100 kumpf           1.4  
1101 david.dillard   1.42                 // Make the ContentLanguage of the exception available through
1102                                      // the CIMClient API (its also available in the exception).
1103 kumpf           1.60                 responseContentLanguages =
1104                                          clientException->getContentLanguages();
1105 chuck           1.27 
1106 kumpf           1.4                  //
1107                                      // Determine and throw the specific class of client exception
1108                                      //
1109                      
1110                                      CIMClientMalformedHTTPException* malformedHTTPException =
1111                                          dynamic_cast<CIMClientMalformedHTTPException*>(
1112                                              clientException);
1113                                      if (malformedHTTPException)
1114                                      {
1115                                          throw *malformedHTTPException;
1116                                      }
1117                      
1118                                      CIMClientHTTPErrorException* httpErrorException =
1119                                          dynamic_cast<CIMClientHTTPErrorException*>(
1120                                              clientException);
1121                                      if (httpErrorException)
1122                                      {
1123                                          throw *httpErrorException;
1124                                      }
1125                      
1126                                      CIMClientXmlException* xmlException =
1127 kumpf           1.4                      dynamic_cast<CIMClientXmlException*>(clientException);
1128                                      if (xmlException)
1129                                      {
1130                                          throw *xmlException;
1131                                      }
1132                      
1133                                      CIMClientResponseException* responseException =
1134                                          dynamic_cast<CIMClientResponseException*>(clientException);
1135                                      if (responseException)
1136                                      {
1137                                          throw *responseException;
1138                                      }
1139                      
1140 david.dillard   1.42                 CIMException* cimException =
1141 brian.campbell  1.25                     dynamic_cast<CIMException*>(clientException);
1142                                      if (cimException)
1143                                      {
1144                                          throw *cimException;
1145                                      }
1146                      
1147 kumpf           1.1                  throw *clientException;
1148                                  }
1149                                  else if (response->getType() == expectedResponseMessageType)
1150                                  {
1151                                      CIMResponseMessage* cimResponse = (CIMResponseMessage*)response;
1152                      
1153                                      if (cimResponse->messageId != messageId)
1154                                      {
1155                                          MessageLoaderParms mlParms(
1156                                              "Client.CIMClient.MISMATCHED_RESPONSE",
1157                                              "Mismatched response message ID:  Got \"$0\", "
1158                                                  "expected \"$1\".",
1159                                              cimResponse->messageId, messageId);
1160                                          String mlString(MessageLoader::getMessage(mlParms));
1161                      
1162                                          CIMClientResponseException responseException(mlString);
1163                      
1164                                          delete response;
1165                                          throw responseException;
1166                                      }
1167                      
1168 kumpf           1.60                 // Get the Content-Languages from the response's
1169                                      // operationContext and make available through the
1170                                      // CIMClient API
1171                                      responseContentLanguages = ((ContentLanguageListContainer)
1172                                          cimResponse->operationContext.get(
1173                                              ContentLanguageListContainer::NAME)).getLanguages();
1174 kumpf           1.1  
1175                                      if (cimResponse->cimException.getCode() != CIM_ERR_SUCCESS)
1176                                      {
1177 karl            1.59                     CIMException cimException(cimResponse->cimException);
1178                      
1179 david.dillard   1.42                     cimException.setContentLanguages(responseContentLanguages);
1180 kumpf           1.1                      delete response;
1181                                          throw cimException;
1182                                      }
1183 w.white         1.37 
1184 kumpf           1.60                 // if execution gets here everytihng is working correctly
1185                                      // and a proper response was generated and received.
1186 w.white         1.37 
1187 kumpf           1.60                 // Check that client side statistics are valid before
1188                                      // handing them to the client application via a call back
1189                                      Boolean re_check = perfDataStore.checkMessageIDandType(
1190                                          cimResponse->messageId,
1191                                          cimResponse->getType());
1192                      
1193                                      if (re_check &&
1194                                          !perfDataStore.getStatError() &&
1195                                          perfDataStore.isClassRegistered())
1196 david.dillard   1.42                 {
1197 kumpf           1.60                    // If callback method throws an exception it will be seen
1198                                         // by the client no try/catch block is used here
1199                                         // intentionaly - because exceptions come from the client
1200                                         // application so client app. should handle them
1201                                         ClientOpPerformanceData item =
1202                                             perfDataStore.createPerfDataStruct();
1203                                         perfDataStore.handler_prt->handleClientOpPerformanceData(
1204                                             item);
1205 david.dillard   1.42 
1206 w.white         1.37                 }//end of if statmet that call the callback method
1207 kumpf           1.1                  return response;
1208                                  }
1209 j.alex          1.48             else if (dynamic_cast<CIMRequestMessage*>(response) != 0)
1210                                  {
1211                                      // Respond to an authentication challenge
1212                                      _requestEncoder->enqueue(response);
1213                                      nowMilliseconds = TimeValue::getCurrentTime().toMilliseconds();
1214                                      stopMilliseconds = nowMilliseconds + _timeoutMilliseconds;
1215                                      continue;
1216                                  }
1217 kumpf           1.1              else
1218                                  {
1219                                      MessageLoaderParms mlParms(
1220 kumpf           1.60                     "Client.CIMOperationResponseDecoder."
1221                                              "MISMATCHED_RESPONSE_TYPE",
1222 j.alex          1.48                     "Mismatched response message type.");
1223 kumpf           1.1                  String mlString(MessageLoader::getMessage(mlParms));
1224                      
1225                                      CIMClientResponseException responseException(mlString);
1226                      
1227                                      delete response;
1228                                      throw responseException;
1229                                  }
1230                              }
1231                      
1232                              nowMilliseconds = TimeValue::getCurrentTime().toMilliseconds();
1233 mike            1.58         Threads::yield();
1234 kumpf           1.1      }
1235                      
1236                          //
1237                          // Reconnect to reset the connection (disregard late response)
1238                          //
1239                          try
1240                          {
1241                              _reconnect();
1242                          }
1243                          catch (...)
1244                          {
1245                          }
1246                      
1247                          //
1248                          // Throw timed out exception:
1249                          //
1250                          throw ConnectionTimeoutException();
1251                      }
1252                      
1253                      String CIMClientRep::_getLocalHostName()
1254                      {
1255 joyce.j         1.41     static String hostname;
1256                      
1257                          if (!hostname.size())
1258                          {
1259                              hostname.assign(System::getHostName());
1260                          }
1261 kumpf           1.1  
1262                          return hostname;
1263 marek           1.12 }
1264                      
1265 kumpf           1.60 void CIMClientRep::registerClientOpPerformanceDataHandler(
1266                          ClientOpPerformanceDataHandler& handler)
1267 david.dillard   1.42 {
1268 kumpf           1.60     perfDataStore.handler_prt = &handler;
1269                          perfDataStore.setClassRegistered(true);
1270 w.white         1.37 }
1271 david.dillard   1.42 
1272 w.white         1.37 void CIMClientRep::deregisterClientOpPerformanceDataHandler()
1273                      {
1274 a.dunfey        1.53     perfDataStore.handler_prt = NULL;
1275                          perfDataStore.setClassRegistered(false);
1276 w.white         1.37 }
1277                      
1278 kumpf           1.1  PEGASUS_NAMESPACE_END

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2