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

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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2