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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2