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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2