(file) Return to cimserver.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / WMIMapper / WMIServer

Diff for /pegasus/src/WMIMapper/WMIServer/cimserver.cpp between version 1.11 and 1.32

version 1.11, 2004/10/17 20:40:42 version 1.32, 2007/06/11 15:07:48
Line 1 
Line 1 
 //%2004////////////////////////////////////////////////////////////////////////  //%2006////////////////////////////////////////////////////////////////////////
 // //
 // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
 // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems. // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
Line 6 
Line 6 
 // IBM Corp.; EMC Corporation, The Open Group. // IBM Corp.; EMC Corporation, The Open Group.
 // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.; // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
 // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group. // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
   // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
   // EMC Corporation; VERITAS Software Corporation; The Open Group.
   // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
   // EMC Corporation; Symantec Corporation; The Open Group.
 // //
 // Permission is hereby granted, free of charge, to any person obtaining a copy // Permission is hereby granted, free of charge, to any person obtaining a copy
 // of this software and associated documentation files (the "Software"), to // of this software and associated documentation files (the "Software"), to
Line 25 
Line 29 
 // //
 //============================================================================== //==============================================================================
 // //
 // Author: Mike Brasher (mbrasher@bmc.com)  
 //  
 // Modified By: Mike Day (mdday@us.ibm.com)  
 //  
 // Modified By: Karl Schopmeyer (k.schopmeyer@opengroup.org)  
 //  
 // Modified By: Nag Boranna (nagaraja_boranna@hp.com)  
 //  
 // Modified By: Jenny Yu (jenny_yu@hp.com)  
 //  
 // Modified By: Sushma Fernandes (sushma_fernandes@hp.com)  
 //              Carol Ann Krug Graves, Hewlett-Packard Company  
 //                (carolann_graves@hp.com)  
 //              Yi Zhou, Hewlett-Packard Company (yi_zhou@hp.com)  
 //  
 // Modified By: Dave Rosckes (rosckes@us.ibm.com)  
 //  
 // Modified By: Humberto Rivero (hurivero@us.ibm.com)  
 //  
 // Modified By: Jair Santos, Hewlett-Packard Company (jair.santos@hp.com)  
 //  
 // Modified By: Dan Gorey (djgorey@us.ibm.com)  
 //%///////////////////////////////////////////////////////////////////////////// //%/////////////////////////////////////////////////////////////////////////////
  
  
Line 82 
Line 64 
 // To START the Pegasus service, // To START the Pegasus service,
 // //
 // net start cimserver // net start cimserver
   // or
   // cimserver -start
 // //
 // To STOP the Pegasus service, // To STOP the Pegasus service,
 // //
 // net stop cimserver // net stop cimserver
   // or
   // cimserver -stop
 // //
 // Alternatively, you can use the windows service manager. Pegasus shows up // Alternatively, you can use the windows service manager. Pegasus shows up
 // in the service database as "Pegasus CIM Object Manager" // in the service database as "Pegasus CIM Object Manager"
 // //
 // Mike Day, mdday@us.ibm.com  
 //  
 ////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
  
  
 #include <Pegasus/Common/Config.h> #include <Pegasus/Common/Config.h>
 #include <Pegasus/Common/Constants.h> #include <Pegasus/Common/Constants.h>
 #include <iostream> #include <iostream>
 #include <cassert>  #include <Pegasus/Common/PegasusAssert.h>
 #include <cstdlib>  
 #include <fstream> #include <fstream>
 #include <Pegasus/Common/FileSystem.h> #include <Pegasus/Common/FileSystem.h>
 #include <Pegasus/Common/Monitor.h> #include <Pegasus/Common/Monitor.h>
 #include <WMIMapper/PegServer/CIMServer.h>  
 #include <Pegasus/Common/PegasusVersion.h> #include <Pegasus/Common/PegasusVersion.h>
 #include <Pegasus/Common/Logger.h> #include <Pegasus/Common/Logger.h>
 #include <Pegasus/Common/System.h> #include <Pegasus/Common/System.h>
 #include <Pegasus/Common/Tracer.h> #include <Pegasus/Common/Tracer.h>
   #include <Pegasus/Common/LanguageParser.h>
 #include <Pegasus/Config/ConfigManager.h> #include <Pegasus/Config/ConfigManager.h>
 #include <Pegasus/Client/CIMClient.h> #include <Pegasus/Client/CIMClient.h>
 #include <Pegasus/Server/ShutdownService.h>  #include <Pegasus/Server/CIMServer.h>
   #include <Service/ServerProcess.h>
   #include <Service/ServerShutdownClient.h>
   #include <Service/ServerRunStatus.h>
   
   PEGASUS_USING_PEGASUS;
   PEGASUS_USING_STD;
  
   #define PEGASUS_PROCESS_NAME "WMI Mapper"
  
 #if defined(PEGASUS_OS_TYPE_WINDOWS)  //Windows service variables are not defined elsewhere in the product
 # include "cimserver_windows.cpp"  //enable ability to override these
 #elif defined(PEGASUS_OS_TYPE_UNIX)  #ifndef PEGASUS_SERVICE_NAME
 # if defined(PEGASUS_OS_OS400)  #define PEGASUS_SERVICE_NAME "Pegasus WMI Mapper";
 #  include "cimserver_os400.cpp"  
 # else  
 #  include "cimserver_unix.cpp"  
 #endif #endif
 #else  #ifndef PEGASUS_SERVICE_DESCRIPTION
 # error "Unsupported platform"  #define PEGASUS_SERVICE_DESCRIPTION "Pegasus WMI Mapper Service";
 #endif #endif
  
 PEGASUS_USING_PEGASUS;  class CIMServerProcess : public ServerProcess
 PEGASUS_USING_STD;  {
   public:
   
       CIMServerProcess(void)
       {
           cimserver_set_process(this);
       }
   
       virtual ~CIMServerProcess(void)
       {
       }
   
       //defined in PegasusVersion.h
       virtual const char* getProductName() const
       {
           return PEGASUS_PRODUCT_NAME;
       }
   
       virtual const char* getExtendedName() const
       {
           return PEGASUS_SERVICE_NAME;
       }
   
       virtual const char* getDescription() const
       {
           return PEGASUS_SERVICE_DESCRIPTION;
       }
   
       //defined in PegasusVersion.h
       virtual const char* getVersion() const
       {
           return PEGASUS_PRODUCT_VERSION;
       }
   
       virtual const char* getProcessName() const
       {
           return PEGASUS_PROCESS_NAME;
       }
   
       //defined in Constants.h
       virtual const char* getPIDFileName() const
       {
           return PEGASUS_CIMSERVER_START_FILE;
       }
   
       int cimserver_run(
           int argc,
           char** argv,
           Boolean shutdownOption,
           Boolean debugOutputOption);
   
       void cimserver_stop(void);
   };
   
   ServerRunStatus _serverRunStatus(
       PEGASUS_PROCESS_NAME, PEGASUS_CIMSERVER_START_FILE);
   AutoPtr<CIMServerProcess> _cimServerProcess(new CIMServerProcess());
   static CIMServer* _cimServer = 0;
   static Monitor* _monitor = 0;
  
 // //
 //  The command name. //  The command name.
Line 149 
Line 194 
  
 static const char OPTION_SHUTDOWN    = 's'; static const char OPTION_SHUTDOWN    = 's';
  
 static const char OPTION_INSTALL[]   = "install";  static const char   LONG_HELP []  = "help";
  
 static const char OPTION_REMOVE[]   = "remove";  static const char   LONG_VERSION []  = "version";
   
 static const char OPTION_START[]   = "start";  
   
 static const char OPTION_STOP[]   = "stop";  
  
 #if defined(PEGASUS_OS_HPUX) #if defined(PEGASUS_OS_HPUX)
 static const char OPTION_BINDVERBOSE = 'X'; static const char OPTION_BINDVERBOSE = 'X';
Line 167 
Line 208 
  
 /** GetOptions function - This function defines the Options Table /** GetOptions function - This function defines the Options Table
     and sets up the options from that table using the config manager.     and sets up the options from that table using the config manager.
   
       Some possible exceptions:  NoSuchFile, FileNotReadable, CannotRenameFile,
       ConfigFileSyntaxError, UnrecognizedConfigProperty, InvalidPropertyValue,
       CannotOpenFile.
 */ */
 void GetOptions( void GetOptions(
     ConfigManager* cm,     ConfigManager* cm,
     int& argc,     int& argc,
     char** argv,      char** argv)
     const String& pegasusHome)  
 {  
     try  
     {     {
         cm->mergeConfigFiles();         cm->mergeConfigFiles();
   
         cm->mergeCommandLine(argc, argv);         cm->mergeCommandLine(argc, argv);
     }     }
     catch (NoSuchFile&)  
     {  
         throw;  
     }  
     catch (FileNotReadable&)  
     {  
         throw;  
     }  
     catch (CannotRenameFile&)  
     {  
         throw;  
     }  
     catch (ConfigFileSyntaxError&)  
     {  
         throw;  
     }  
     catch(UnrecognizedConfigProperty&)  
     {  
         throw;  
     }  
     catch(InvalidPropertyValue&)  
     {  
         throw;  
     }  
 }  
  
 /* PrintHelp - This is temporary until we expand the options manager to allow /* PrintHelp - This is temporary until we expand the options manager to allow
    options help to be defined with the OptionRow entries and presented from    options help to be defined with the OptionRow entries and presented from
Line 212 
Line 228 
 */ */
 void PrintHelp(const char* arg0) void PrintHelp(const char* arg0)
 { {
     /**  
         Build the usage string for the config command.  
     */  
     String usage = String (USAGE);     String usage = String (USAGE);
     usage.append (COMMAND_NAME);     usage.append (COMMAND_NAME);
     usage.append (" [ [ options ] | [ configProperty=value, ... ] ]\n");     usage.append (" [ [ options ] | [ configProperty=value, ... ] ]\n");
     usage.append ("  options\n");     usage.append ("  options\n");
     usage.append ("    -v              - displays CIM Server version number\n");      usage.append ("    -v, --version   - displays CIM Server version number\n");
     usage.append ("    -h              - prints this help message\n");      usage.append ("    -h, --help      - prints this help message\n");
     usage.append ("    -s              - shuts down CIM Server\n");     usage.append ("    -s              - shuts down CIM Server\n");
 #if !defined(PEGASUS_OS_HPUX) && !defined(PEGASUS_PLATFORM_LINUX_IA64_GNU)  #if !defined(PEGASUS_USE_RELEASE_DIRS)
     usage.append ("    -D [home]       - sets pegasus home directory\n");     usage.append ("    -D [home]       - sets pegasus home directory\n");
 #endif #endif
 #if defined(PEGASUS_OS_TYPE_WINDOWS) #if defined(PEGASUS_OS_TYPE_WINDOWS)
     usage.append ("    -install [name] - installs pegasus as a Windows NT Service\n");      usage.append ("    -install [name] - installs pegasus as a Windows Service\n");
     usage.append ("                      [name] is optional and overrides the\n");     usage.append ("                      [name] is optional and overrides the\n");
     usage.append ("                      default CIM Server Service Name\n");     usage.append ("                      default CIM Server Service Name\n");
     usage.append ("    -remove [name]  - removes pegasus as a Windows NT Service\n");      usage.append ("    -remove [name]  - removes pegasus as a Windows Service\n");
     usage.append ("                      [name] is optional and overrides the\n");     usage.append ("                      [name] is optional and overrides the\n");
     usage.append ("                      default CIM Server Service Name\n");     usage.append ("                      default CIM Server Service Name\n");
     usage.append ("    -start [name]   - starts pegasus as a Windows NT Service\n");      usage.append ("    -start [name]   - starts pegasus as a Windows Service\n");
     usage.append ("                      [name] is optional and overrides the\n");     usage.append ("                      [name] is optional and overrides the\n");
     usage.append ("                      default CIM Server Service Name\n");     usage.append ("                      default CIM Server Service Name\n");
     usage.append ("    -stop [name]    - stops pegasus as a Windows NT Service\n");      usage.append ("    -stop [name]    - stops pegasus as a Windows Service\n");
     usage.append ("                      [name] is optional and overrides the\n");     usage.append ("                      [name] is optional and overrides the\n");
     usage.append ("                      default CIM Server Service Name\n\n");     usage.append ("                      default CIM Server Service Name\n\n");
 #endif #endif
Line 243 
Line 256 
     usage.append ("                    - sets CIM Server configuration property\n");     usage.append ("                    - sets CIM Server configuration property\n");
  
     cout << endl;     cout << endl;
 #if defined(PEGASUS_OS_HPUX) || defined(PEGASUS_PLATFORM_LINUX_IA64_GNU)      cout << _cimServerProcess->getProductName() << " " << _cimServerProcess->getVersion() << endl;
     cout << PLATFORM_PRODUCT_NAME << " " << PLATFORM_PRODUCT_VERSION << endl;  
 #else  
     cout << PEGASUS_NAME << PEGASUS_VERSION << endl;  
 #endif  
     cout << endl;     cout << endl;
     cout << usage << endl;  
 }  
   
 //  
 // cimserver_exit: platform specific exit routine calls  
 //  
 void cimserver_exit( int rc ){  
 #ifdef PEGASUS_OS_OS400  
     cimserver_exitRC(rc);  
 #endif  
     exit(rc);  
 }  
   
 void shutdownCIMOM(Uint32 timeoutValue)  
 {  
     //  
     // Create CIMClient object  
     //  
     CIMClient client;  
  
     //  #if defined(PEGASUS_OS_TYPE_WINDOWS)
     // Get local host name      MessageLoaderParms parms("src.Server.cimserver.MENU.WINDOWS", usage);
     //  #elif defined(PEGASUS_USE_RELEASE_DIRS)
     String hostStr = System::getHostName();      MessageLoaderParms parms("src.Server.cimserver.MENU.HPUXLINUXIA64GNU", usage);
   
     //  
     // open connection to CIMOM  
     //  
     try  
     {  
         client.connectLocal();  
   
         //  
         // set client timeout to 2 seconds  
         //  
         client.setTimeout(2000);  
     }  
     catch(Exception& e)  
     {  
 #ifdef PEGASUS_OS_OS400  
         Logger::put(Logger::ERROR_LOG, System::CIMSERVER, Logger::SEVERE,  
                     "Unable to connect to CIM Server.  CIM Server may not be running." );  
         // The server job may still be active but not responding.  
         // Kill the job if it exists.  
         if(cimserver_kill() == -1)  
            cimserver_exit(2);  
         cimserver_exit(1);  
 #else #else
         PEGASUS_STD(cerr) << "Unable to connect to CIM Server." << PEGASUS_STD(endl);      MessageLoaderParms parms("src.Server.cimserver.MENU.STANDARD", usage);
         PEGASUS_STD(cerr) << "CIM Server may not be running." << PEGASUS_STD(endl);  
 #endif #endif
         cimserver_exit(1);      cout << MessageLoader::getMessage(parms) << endl;
     }     }
  
     try  //This needs to be called at various points in the code depending on the platform and error conditions.
     {  //We need to delete the _cimServer reference on exit in order for the destructors to get called.
         //  void deleteCIMServer()
         // construct CIMObjectPath  
         //  
         String referenceStr = "//";  
         referenceStr.append(hostStr);  
         referenceStr.append("/");  
         referenceStr.append(PEGASUS_NAMESPACENAME_SHUTDOWN.getString());  
         referenceStr.append(":");  
         referenceStr.append(PEGASUS_CLASSNAME_SHUTDOWN.getString());  
         CIMObjectPath reference(referenceStr);  
   
         //  
         // issue the invokeMethod request on the shutdown method  
         //  
         Array<CIMParamValue> inParams;  
         Array<CIMParamValue> outParams;  
   
         // set force option to true for now  
         inParams.append(CIMParamValue("force",  
             CIMValue(Boolean(true))));  
   
         inParams.append(CIMParamValue("timeout",  
             CIMValue(Uint32(timeoutValue))));  
   
         CIMValue retValue = client.invokeMethod(  
             PEGASUS_NAMESPACENAME_SHUTDOWN,  
             reference,  
             "shutdown",  
             inParams,  
             outParams);  
     }  
     catch(CIMException& e)  
     {     {
 #ifdef PEGASUS_OS_OS400      if (_cimServer)
   
         if (e.getCode() == CIM_ERR_INVALID_NAMESPACE)  
         {         {
             Logger::put(Logger::ERROR_LOG, System::CIMSERVER, Logger::SEVERE,          delete _cimServer;
                     "Failed to shutdown server: $0", "The repository may be empty.");          _cimServer = 0;
         }         }
         else  
           if (_monitor)
         {         {
             Logger::put(Logger::ERROR_LOG, System::CIMSERVER, Logger::SEVERE,                  delete _monitor;
                         "Failed to shutdown server: $0", e.getMessage());  
         }         }
         // Kill the server job.  
         if(cimserver_kill() == -1)  
            cimserver_exit(2);  
 #else  
         PEGASUS_STD(cerr) << "Failed to shutdown server: ";  
         if (e.getCode() == CIM_ERR_INVALID_NAMESPACE)  
         {  
             PEGASUS_STD(cerr) << "The repository may be empty.";  
             PEGASUS_STD(cerr) << PEGASUS_STD(endl);  
         }         }
         else  
         {  
             PEGASUS_STD(cerr) << e.getMessage() << PEGASUS_STD(endl);  
         }  
 #endif  
         cimserver_exit(1);  
  
     }  // l10n
     catch(Exception& e)  
     {  
         //  
         // This may mean that the CIM Server has terminated, causing this  
         // client to get a "Empty HTTP response message" exception.  It may  
         // also mean that the CIM Server is taking longer than 2 seconds  
         // (client timeout value) to terminate, causing this client to  
         // timeout with a "connection timeout" exception.  
         //         //
         // Check to see if CIM Server is still running.  If CIM Server  // Dummy function for the Thread object associated with the initial thread.
         // is still running and the shutdown timeout has not expired,  // Since the initial thread is used to process CIM requests, this is
         // loop and wait one second until either the CIM Server is  // needed to localize the exceptions thrown during CIM request processing.
         // terminated or timeout expires.  If timeout expires and  // Note: This function should never be called!
         // the CIM Server is still running, kill the CIMServer process.  
         //         //
         Uint32 maxWaitTime = timeoutValue - 2;  ThreadReturnType PEGASUS_THREAD_CDECL dummyThreadFunc(void *parm)
         Boolean running = isCIMServerRunning();  
         while ( running && maxWaitTime > 0 )  
         {         {
             System::sleep(1);     return((ThreadReturnType)0);
             running = isCIMServerRunning();  
             maxWaitTime = maxWaitTime - 1;  
         }  
   
         if (running)  
         {  
             int kill_rc = cimserver_kill();  
 #ifdef PEGASUS_OS_OS400  
             if(kill_rc == -1)  
                 cimserver_exit(2);  
             cimserver_exit(1);  
 #endif  
   
 #if defined(PEGASUS_OS_HPUX) || defined(PEGASUS_PLATFORM_LINUX_GENERIC_GNU) || defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM)  
             if (kill_rc != -1)  
             {  
                 cout << "Shutdown timeout expired.  CIM Server process killed." << endl;  
                 exit(0);  
             }  
 #endif  
         }  
     }  
   
     return;  
 } }
  
  
Line 420 
Line 303 
 ////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
 int main(int argc, char** argv) int main(int argc, char** argv)
 { {
     String pegasusHome  = String::EMPTY;      String pegasusHome;
     String logsDirectory = String::EMPTY;  
     Boolean useSLP = false;  
     Boolean daemonOption = false;  
     Boolean shutdownOption = false;     Boolean shutdownOption = false;
     Uint32 timeoutValue  = 0;      Boolean debugOutputOption = false;
   
   //l10n
   // Set Message loading to process locale
   MessageLoader::_useProcessLocale = true;
   //l10n
  
 #ifdef PEGASUS_OS_OS400  //l10n
     // Initialize Pegasus home to the shipped OS/400 directory.  #if defined(PEGASUS_OS_AIX) && defined(PEGASUS_HAS_MESSAGES)
     pegasusHome = OS400_DEFAULT_PEGASUS_HOME;  setlocale(LC_ALL, "");
 #endif #endif
  
 #ifndef PEGASUS_OS_TYPE_WINDOWS #ifndef PEGASUS_OS_TYPE_WINDOWS
     //     //
     // Get environment variables:     // Get environment variables:
     //     //
     #if defined(PEGASUS_OS_AIX) && defined(PEGASUS_USE_RELEASE_DIRS)
       pegasusHome = AIX_RELEASE_PEGASUS_HOME;
     #elif !defined(PEGASUS_USE_RELEASE_DIRS)
     const char* tmp = getenv("PEGASUS_HOME");     const char* tmp = getenv("PEGASUS_HOME");
  
     if (tmp)     if (tmp)
     {     {
         pegasusHome = tmp;         pegasusHome = tmp;
     }     }
     #endif
  
     FileSystem::translateSlashes(pegasusHome);     FileSystem::translateSlashes(pegasusHome);
 #else #else
  
   // windows only   // windows only
   setHome(pegasusHome);    //setHome(pegasusHome);
     pegasusHome = _cimServerProcess->getHome();
 #endif #endif
     // on Windows NT if there are no command-line options, run as a service  
  
     if (argc == 1 )  
     {  
       cim_server_service(argc, argv);  
     }  
     else  
     {  
         // Get help, version, and shutdown options         // Get help, version, and shutdown options
  
         for (int i = 1; i < argc; )         for (int i = 1; i < argc; )
         {         {
             const char* arg = argv[i];             const char* arg = argv[i];
               if(String::equal(arg,"--help"))
               {
                       PrintHelp(argv[0]);
                       exit(0);
               }
               else if(String::equal(arg,"--version"))
               {
                   cout << _cimServerProcess->getVersion() << endl;
                   exit(0);
               }
             // Check for -option             // Check for -option
             if (*arg == '-')              else if (*arg == '-')
             {             {
                 // Get the option                 // Get the option
                 const char* option = arg + 1;                 const char* option = arg + 1;
Line 475 
Line 367 
                 if (*option == OPTION_VERSION &&                 if (*option == OPTION_VERSION &&
                     strlen(option) == 1)                     strlen(option) == 1)
                 {                 {
 #if defined(PEGASUS_OS_HPUX) || defined(PEGASUS_PLATFORM_LINUX_IA64_GNU)                      cout << _cimServerProcess->getVersion() << endl;
                     cout << PLATFORM_PRODUCT_VERSION << endl;  
 #else  
                     cout << PEGASUS_VERSION << endl;  
 #endif  
                     exit(0);                     exit(0);
                 }                 }
                 //                 //
Line 491 
Line 379 
                     PrintHelp(argv[0]);                     PrintHelp(argv[0]);
                     exit(0);                     exit(0);
                 }                 }
 #if !defined(PEGASUS_OS_HPUX) && !defined(PEGASUS_PLATFORM_LINUX_IA64_GNU)  #if !defined(PEGASUS_USE_RELEASE_DIRS)
                 else if (*option == OPTION_HOME &&                 else if (*option == OPTION_HOME &&
                         (strlen(option) == 1))                         (strlen(option) == 1))
                 {                 {
Line 501 
Line 389 
                     }                     }
                     else                     else
                     {                     {
                         cout << "Missing argument for option -" << option << endl;                          //l10n
                           //cout << "Missing argument for option -" << option << endl;
                           String opt(option);
                           MessageLoaderParms parms("src.Server.cimserver.MISSING_ARGUMENT",
                                            "Missing argument for option -$0",
                                            opt);
                           cout << MessageLoader::getMessage(parms) << endl;
                         exit(0);                         exit(0);
                     }                     }
  
Line 517 
Line 411 
                         (strlen(option) == 1))                         (strlen(option) == 1))
                 {                 {
                     System::bindVerbose = true;                     System::bindVerbose = true;
                     cout << "Unsupported debug option, BIND_VERBOSE, enabled."                      //l10n
                          << endl;                      //cout << "Unsupported debug option, BIND_VERBOSE, enabled."
                            //<< endl;
                       MessageLoaderParms parms("src.Server.cimserver.UNSUPPORTED_DEBUG_OPTION",
                                            "Unsupported debug option, BIND_VERBOSE, enabled.");
                       cout << MessageLoader::getMessage(parms) << endl;
                     // remove the option from the command line                     // remove the option from the command line
                     memmove(&argv[i], &argv[i + 1], (argc-i) * sizeof(char*));                     memmove(&argv[i], &argv[i + 1], (argc-i) * sizeof(char*));
                     argc--;                     argc--;
Line 531 
Line 429 
                         (strlen(option) == 1))                         (strlen(option) == 1))
                 {                 {
                     //                     //
                     // check to see if user is root  
                     //  
 #ifndef PEGASUS_OS_OS400  
                     if (!System::isPrivilegedUser(System::getEffectiveUserName()))  
                     {  
                         cout << "You must have superuser privilege to run ";  
                         cout << "cimserver." << endl;  
                         exit(0);  
                     }  
 #endif  
   
                     //  
                     // Check to see if shutdown has already been specified:                     // Check to see if shutdown has already been specified:
                     //                     //
                     if (shutdownOption)                     if (shutdownOption)
                     {                     {
                         cout << "Duplicate shutdown option specified." << endl;                          //l10n
                           //cout << "Duplicate shutdown option specified." << endl;
                           MessageLoaderParms parms("src.Server.cimserver.DUPLICATE_SHUTDOWN_OPTION",
                                                    "Duplicate shutdown option specified.");
   
                           cout << MessageLoader::getMessage(parms) << endl;
                         exit(0);                         exit(0);
                     }                     }
  
Line 557 
Line 448 
                     memmove(&argv[i], &argv[i + 1], (argc-i) * sizeof(char*));                     memmove(&argv[i], &argv[i + 1], (argc-i) * sizeof(char*));
                     argc--;                     argc--;
                 }                 }
 #ifdef PEGASUS_OS_TYPE_WINDOWS  
                 else if (strcmp(option, OPTION_INSTALL) == 0)  
                 {  
                   //  
                   // Install as a NT service  
                   //  
                   char *opt_arg = NULL;  
                   if (i+1 < argc)  
                   {  
                     opt_arg = argv[i+1];  
   
                   }  
                   if(cimserver_install_nt_service(opt_arg))  
                   {  
                       cout << "\nPegasus installed as NT Service";  
                       exit(0);  
                   }  
                   else                   else
                   {                      i++;
                       exit(0);  
                   }  
                 }  
                 else if (strcmp(option, OPTION_REMOVE) == 0)  
                 {  
                   //  
                   // Remove Pegasus as an NT service  
                   //  
                   char *opt_arg = NULL;  
                   if (i+1 < argc)  
                   {  
                     opt_arg = argv[i+1];  
                   }  
                   if(cimserver_remove_nt_service(opt_arg))  
                   {  
                       cout << "\nPegasus removed as NT Service";  
                       exit(0);  
                   }                   }
                   else                   else
                   {                  i++;
                       exit(0);  
                   }                   }
  
                 }  
                 else if (strcmp(option, OPTION_START) == 0)  
                 {  
                   //                   //
                   // Start as a NT service      // Set the value for pegasusHome property
                   //                   //
                   char *opt_arg = NULL;      ConfigManager::setPegasusHome(pegasusHome);
                   if (i+1 < argc)  
                   {  
                     opt_arg = argv[i+1];  
                   }  
                   if(cimserver_start_nt_service(opt_arg))  
                   {  
                       cout << "\nPegasus started as NT Service";  
                       exit(0);  
                   }  
                   else  
                   {  
                       exit(0);  
                   }  
                 }  
                 else if (strcmp(option, OPTION_STOP) == 0)  
                 {  
                   //                   //
                   // Stop as a NT service      // Do the plaform specific run
                   //                   //
                   char *opt_arg = NULL;  
                   if (i+1 < argc)      return _cimServerProcess->platform_run(
                   {          argc, argv, shutdownOption, debugOutputOption);
                     opt_arg = argv[i+1];  
                   }  
                   if(cimserver_stop_nt_service(opt_arg))  
                   {  
                       cout << "\nPegasus stopped as NT Service";  
                       exit(0);  
                   }                   }
                   else  
   void CIMServerProcess::cimserver_stop()
                   {                   {
                       exit(0);      _cimServer->shutdownSignal();
                   }  
                 }  
 #endif  
                 else  
                     i++;  
             }  
             else  
                 i++;  
         }  
     }     }
  
     //     //
     // Set the value for pegasusHome property  // The main, common, running code
     //     //
     ConfigManager::setPegasusHome(pegasusHome);  // NOTE: Do NOT call exit().  Use return(), otherwise some platforms
   // will fail to shutdown properly/cleanly.
   //
   // TODO: Current change minimal for platform "service" shutdown bug fixes.
   // Perhpas further extract out common stuff and put into main(), put
   // daemon stuff into platform specific platform_run(), etc.
   // Note: make sure to not put error handling stuff that platform
   // specific runs may need to deal with bettter (instead of exit(), etc).
   //
   
   int CIMServerProcess::cimserver_run(
       int argc,
       char** argv,
       Boolean shutdownOption,
       Boolean debugOutputOption)
   {
       String logsDirectory;
       Boolean daemonOption = false;
  
     //     //
     // Get an instance of the Config Manager.     // Get an instance of the Config Manager.
Line 667 
Line 508 
     //     //
     try     try
     {     {
         GetOptions(configManager, argc, argv, pegasusHome);          GetOptions(configManager, argc, argv);
     }     }
     catch (Exception& e)     catch (Exception& e)
     {     {
 #ifdef PEGASUS_OS_OS400          Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::SEVERE,
         Logger::put(Logger::ERROR_LOG, System::CIMSERVER, Logger::SEVERE,              "src.Server.cimserver.SERVER_NOT_STARTED",
                         "$0: $1",argv[0] ,e.getMessage());              "cimserver not started:  $0", e.getMessage());
 #else  
         cerr << argv[0] << ": " << e.getMessage() << endl;          MessageLoaderParms parms("src.Server.cimserver.SERVER_NOT_STARTED",
 #endif              "cimserver not started: $0", e.getMessage());
         exit(1);  
           PEGASUS_STD(cerr) << argv[0] << ": " << MessageLoader::getMessage(parms)
               << PEGASUS_STD(endl);
   
           return(1);
     }     }
  
 // l10n // l10n
         // Set the home directory, msg sub-dir, into the MessageLoader.         // Set the home directory, msg sub-dir, into the MessageLoader.
         // This will be the default directory where the resource bundles         // This will be the default directory where the resource bundles
         // are found.         // are found.
         String messagesDir = String::EMPTY;      MessageLoader::setPegasusMsgHome(ConfigManager::getHomedPath(
 #ifdef PEGASUS_PLATFORM_OS400_ISERIES_IBM          ConfigManager::getInstance()->getCurrentValue("messageDir")));
         messagesDir = OS400_DEFAULT_MESSAGE_SOURCE;  
 #else  
         messagesDir = ConfigManager::getHomedPath("msg");  
 #endif  
         MessageLoader::setPegasusMsgHome(messagesDir);  
  
     Boolean enableHttpConnection = String::equal(      Boolean enableHttpConnection = ConfigManager::parseBooleanValue(
         configManager->getCurrentValue("enableHttpConnection"), "true");          configManager->getCurrentValue("enableHttpConnection"));
     Boolean enableHttpsConnection = String::equal(      Boolean enableHttpsConnection = ConfigManager::parseBooleanValue(
         configManager->getCurrentValue("enableHttpsConnection"), "true");          configManager->getCurrentValue("enableHttpsConnection"));
     Boolean enableSSLExportClientVerification  = String::equal(  
         configManager->getCurrentValue("enableSSLExportClientVerification"), "true");  
  
     // Make sure at least one connection is enabled     // Make sure at least one connection is enabled
 #ifndef PEGASUS_LOCAL_DOMAIN_SOCKET  #ifdef PEGASUS_DISABLE_LOCAL_DOMAIN_SOCKET
     if (!enableHttpConnection && !enableHttpsConnection)     if (!enableHttpConnection && !enableHttpsConnection)
     {     {
         Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::WARNING,          //l10n
             "Neither HTTP nor HTTPS connection is enabled.  "          //Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::WARNING,
             "CIMServer will not be started.");              //"Neither HTTP nor HTTPS connection is enabled.  "
         cerr << "Neither HTTP nor HTTPS connection is enabled.  "              //"CIMServer will not be started.");
             "CIMServer will not be started." << endl;          Logger::put_l(Logger::STANDARD_LOG, System::CIMSERVER, Logger::WARNING,
         exit(1);              "src.Server.cimserver.HTTP_NOT_ENABLED_SERVER_NOT_STARTING",
               "Neither HTTP nor HTTPS connection is enabled.  CIMServer will not be started.");
           //cerr << "Neither HTTP nor HTTPS connection is enabled.  "
               //"CIMServer will not be started." << endl;
           MessageLoaderParms parms("src.Server.cimserver.HTTP_NOT_ENABLED_SERVER_NOT_STARTING",
                                    "Neither HTTP nor HTTPS connection is enabled.  CIMServer will not be started.");
           cerr << MessageLoader::getMessage(parms) << endl;
           return(1);
     }     }
 #endif #endif
  
Line 718 
Line 563 
         // Check to see if we should Pegasus as a daemon         // Check to see if we should Pegasus as a daemon
         //         //
  
         if (String::equal(configManager->getCurrentValue("daemon"), "true"))          daemonOption = ConfigManager::parseBooleanValue(
         {              configManager->getCurrentValue("daemon"));
             daemonOption = true;  
         }  
   
         // Get the log file directory definition.  
         // We put String into Cstring because  
         // Directory functions only handle Cstring.  
         // ATTN-KS: create String based directory functions.  
  
         logsDirectory = configManager->getCurrentValue("logdir");  
         logsDirectory =         logsDirectory =
             ConfigManager::getHomedPath(configManager->getCurrentValue("logdir"));             ConfigManager::getHomedPath(configManager->getCurrentValue("logdir"));
  
Line 736 
Line 573 
         // Might be more logical to clean before set.         // Might be more logical to clean before set.
         // ATTN: Need tool to completely disable logging.         // ATTN: Need tool to completely disable logging.
  
 #if !defined(PEGASUS_OS_HPUX) && !defined(PEGASUS_PLATFORM_LINUX_IA64_GNU) && \  #if !defined(PEGASUS_OS_HPUX) && !defined(PEGASUS_PLATFORM_LINUX_IA64_GNU)
 !defined(PEGASUS_OS_OS400)  
         Logger::setHomeDirectory(logsDirectory);         Logger::setHomeDirectory(logsDirectory);
 #endif #endif
  
Line 748 
Line 584 
         {         {
             String configTimeout =             String configTimeout =
                 configManager->getCurrentValue("shutdownTimeout");                 configManager->getCurrentValue("shutdownTimeout");
             timeoutValue = strtol(configTimeout.getCString(), (char **)0, 10);              Uint32 timeoutValue = strtol(configTimeout.getCString(), (char **)0, 10);
  
             shutdownCIMOM(timeoutValue);              ServerShutdownClient serverShutdownClient(&_serverRunStatus);
               serverShutdownClient.shutdown(timeoutValue);
  
 #ifdef PEGASUS_OS_OS400              MessageLoaderParms parms(
             Logger::put(Logger::ERROR_LOG, System::CIMSERVER, Logger::INFORMATION,                  "src.Server.cimserver.SERVER_STOPPED",
                         "CIM Server stopped.");                         "CIM Server stopped.");
 #else  
             cout << "CIM Server stopped." << endl;              cout << MessageLoader::getMessage(parms) << endl;
 #endif              return(0);
             cimserver_exit(0);  
         }         }
  
   #if defined(PEGASUS_DEBUG) && !defined(PEGASUS_USE_SYSLOGS)
         // Leave this in until people get familiar with the logs.         // Leave this in until people get familiar with the logs.
 #if !defined(PEGASUS_OS_HPUX) && !defined(PEGASUS_PLATFORM_LINUX_IA64_GNU) && \          MessageLoaderParms parms("src.Server.cimserver.LOGS_DIRECTORY",
 !defined(PEGASUS_OS_OS400)                                   "Logs Directory = ");
         cout << "Logs Directory = " << logsDirectory << endl;          cout << MessageLoader::getMessage(parms) << logsDirectory << endl;
 #endif #endif
   
         if (String::equal(configManager->getCurrentValue("slp"), "true"))  
         {  
             useSLP =  true;  
         }  
     }     }
     catch (UnrecognizedConfigProperty& e)     catch (UnrecognizedConfigProperty& e)
     {     {
       //l10n
 #ifdef PEGASUS_OS_OS400      //cout << "Error: " << e.getMessage() << endl;
         Logger::put(Logger::ERROR_LOG, System::CIMSERVER, Logger::SEVERE,      MessageLoaderParms parms("src.Server.cimserver.ERROR",
                     "Error: $0",e.getMessage());                               "Error: $0",
 #else                               e.getMessage());
         cout << "Error: " << e.getMessage() << endl;      cout << MessageLoader::getMessage(parms) << endl;
 #endif  
     }     }
  
     Uint32 portNumberHttps;      // Bug 2148 - Here is the order of operations for determining the server HTTP and HTTPS ports.
     Uint32 portNumberHttp;      // 1) If the user explicitly specified a port, use it.
     Uint32 portNumberExportHttps;      // 2) If the user did not specify a port, get the port from the services file.
       // 3) If no value is specified in the services file, use the IANA WBEM default port.
       // Note that 2 and 3 are done within the System::lookupPort method
       // An empty string from the ConfigManager implies that the user did not specify a port.
   
       Uint32 portNumberHttps=0;
       Uint32 portNumberHttp=0;
       Uint32 portNumberExportHttps=0;
  
     if (enableHttpsConnection)     if (enableHttpsConnection)
     {     {
         String httpsPort = configManager->getCurrentValue("httpsPort");         String httpsPort = configManager->getCurrentValue("httpsPort");
         CString portString = httpsPort.getCString();          if (httpsPort == String::EMPTY)
         char* end = 0;          {
         Uint32 port = strtol(portString, &end, 10);  
         assert(end != 0 && *end == '\0');  
   
         //         //
         // Look up the WBEM-HTTPS port number         // Look up the WBEM-HTTPS port number
         //         //
         portNumberHttps = System::lookupPort(WBEM_HTTPS_SERVICE_NAME, port);              portNumberHttps = System::lookupPort(WBEM_HTTPS_SERVICE_NAME, WBEM_DEFAULT_HTTPS_PORT);
   
           } else
           {
               //
               // user-specified
               //
               CString portString = httpsPort.getCString();
               char* end = 0;
               portNumberHttps = strtol(portString, &end, 10);
               if(!(end != 0 && *end == '\0'))
               {
                   InvalidPropertyValue e("httpsPort", httpsPort);
                   cerr << e.getMessage() << endl;
                   exit(1);
               }
           }
     }     }
  
     if (enableHttpConnection)     if (enableHttpConnection)
     {     {
         String httpPort = configManager->getCurrentValue("httpPort");         String httpPort = configManager->getCurrentValue("httpPort");
         CString portString = httpPort.getCString();          if (httpPort == String::EMPTY)
         char* end = 0;          {
         Uint32 port = strtol(portString, &end, 10);  
         assert(end != 0 && *end == '\0');  
   
         //         //
         // Look up the WBEM-HTTP port number         // Look up the WBEM-HTTP port number
         //         //
         portNumberHttp = System::lookupPort(WBEM_HTTP_SERVICE_NAME, port);              portNumberHttp = System::lookupPort(WBEM_HTTP_SERVICE_NAME, WBEM_DEFAULT_HTTP_PORT);
     }  
  
     if (enableSSLExportClientVerification)          } else
     {     {
        //        //
        // No config property is looked up to get the default port number.              // user-specified
        // Lookup the port defined in /etc/services for the service name  
        // wbem-exp-https and bind to that port. If the service is  not defined  
        // then log a warning message and do not start the cimserver.  
        //        //
        Uint32 port = 0;              CString portString = httpPort.getCString();
               char* end = 0;
        portNumberExportHttps = System::lookupPort(WBEM_EXPORT_HTTPS_SERVICE_NAME, port);              portNumberHttp = strtol(portString, &end, 10);
               if(!(end != 0 && *end == '\0'))
        if (portNumberExportHttps == 0)  
        {        {
            Logger::put_l(Logger::STANDARD_LOG, System::CIMSERVER, Logger::WARNING,                  InvalidPropertyValue e("httpPort", httpPort);
                "src.Server.cimserver.EXPORT_HTTPS_PORT_NOT_DEFINED",                  cerr << e.getMessage() << endl;
                "Port not defined for the service wbem-exp-https. CIMServer will not be started.");                  exit(1);
               }
            MessageLoaderParms parms("src.Server.cimserver.EXPORT_HTTPS_PORT_NOT_DEFINED",  
                "Port not defined for the service wbem-exp-https. CIMServer will not be started.");  
   
            cerr << MessageLoader::getMessage(parms) << endl;  
   
            return(1);  
        }        }
     }     }
  
   #if defined(PEGASUS_DEBUG)
     // Put out startup up message.     // Put out startup up message.
 #if !defined(PEGASUS_OS_HPUX) && !defined(PEGASUS_PLATFORM_LINUX_IA64_GNU) && \      cout << _cimServerProcess->getProductName() << " " << _cimServerProcess->getVersion() << endl;
 !defined(PEGASUS_OS_OS400)      //l10n
     cout << PEGASUS_NAME << PEGASUS_VERSION << endl;      //cout << "Built " << __DATE__ << " " << __TIME__ << endl;
     cout << "Built " << __DATE__ << " " << __TIME__ << endl;      //cout <<"Starting..."
     cout <<"Starting..."      MessageLoaderParms parms("src.Server.cimserver.STARTUP_MESSAGE",
          << (useSLP ? " SLP reg. " : " No SLP ")                               "Built $0 $1\nStarting...",
         << endl;                               __DATE__,
                                __TIME__);
 #endif #endif
  
   //l10n
   // reset message loading to NON-process locale
   MessageLoader::_useProcessLocale = false;
   //l10n
   
       // Get the parent's PID before forking
       _serverRunStatus.setParentPid(System::getPID());
   
     // do we need to run as a daemon ?     // do we need to run as a daemon ?
     if (daemonOption)     if (daemonOption)
     {     {
         if(-1 == cimserver_fork())          if(-1 == _cimServerProcess->cimserver_fork())
 #ifndef PEGASUS_OS_OS400  
         {  
             exit(-1);  
         }  
 #else  
         {         {
             return(-1);             return(-1);
         }         }
         else  
         {  
             return(0);  
         }         }
 #endif  
  
     }  // l10n
       // Now we are after the fork...
 #ifdef PEGASUS_OS_OS400      // Create a dummy Thread object that can be used to store the
     // Special server initialization code for OS/400.      // AcceptLanguageList object for CIM requests that are serviced
     if (cimserver_initialize() != 0)      // by this thread (initial thread of server).  Need to do this
     {      // because this thread is not in a ThreadPool, but is used
         // do some logging here!      // to service CIM requests.
       // The run function for the dummy Thread should never be called,
       Thread *dummyInitialThread = new Thread(dummyThreadFunc, NULL, false);
       Thread::setCurrent(dummyInitialThread);
       AcceptLanguageList default_al;
       try{
            default_al = LanguageParser::getDefaultAcceptLanguages();
            Thread::setLanguages(new AcceptLanguageList(default_al));
       }catch(InvalidAcceptLanguageHeader& e){
             Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::SEVERE,
                     "src.Server.cimserver.FAILED_TO_SET_PROCESS_LOCALE",
                     "Could not convert the system process locale into a valid AcceptLanguage format.");
         Logger::put(Logger::ERROR_LOG, System::CIMSERVER, Logger::SEVERE,         Logger::put(Logger::ERROR_LOG, System::CIMSERVER, Logger::SEVERE,
                     "CIM Server failed to initialize");                               e.getMessage());
         exit(-1);  
     }     }
 #endif  
  
 #if defined(PEGASUS_OS_HPUX) || defined(PEGASUS_PLATFORM_LINUX_GENERIC_GNU) || defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM)  #if defined(PEGASUS_OS_HPUX) || defined(PEGASUS_PLATFORM_LINUX_GENERIC_GNU) \
   || defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM) || defined(PEGASUS_OS_AIX) \
   || defined(PEGASUS_OS_SOLARIS) || defined (PEGASUS_OS_VMS)
     umask(S_IWGRP|S_IWOTH);     umask(S_IWGRP|S_IWOTH);
  
     //     //
Line 891 
Line 740 
     // if CIMServer is already running, print message and     // if CIMServer is already running, print message and
     // notify parent process (if there is a parent process) to terminate     // notify parent process (if there is a parent process) to terminate
     //     //
     if(isCIMServerRunning())      if (_serverRunStatus.isServerRunning())
     {     {
         cout << "Unable to start CIMServer." << endl;          MessageLoaderParms parms(
         cout << "CIMServer is already running." << endl;              "src.Server.cimserver.UNABLE_TO_START_SERVER_ALREADY_RUNNING",
               "Unable to start CIMServer.\nCIMServer is already running.");
           PEGASUS_STD(cerr) << MessageLoader::getMessage(parms) <<
               PEGASUS_STD(endl);
  
         //         //
         // notify parent process (if there is a parent process) to terminate         // notify parent process (if there is a parent process) to terminate
         //         //
         if (daemonOption)         if (daemonOption)
                 notify_parent(1);          {
               _cimServerProcess->notify_parent(1);
           }
  
         exit(1);          return 1;
     }     }
  
 #endif #endif
Line 910 
Line 764 
     // try loop to bind the address, and run the server     // try loop to bind the address, and run the server
     try     try
     {     {
         #ifdef PEGASUS_USE_23HTTPMONITOR_CLIENT          _monitor  = new Monitor();
         Monitor monitor(true);          _cimServer = new CIMServer(_monitor);
         #else  
         monitor_2 monitor();  
         #endif  
         CIMServer server(&monitor);  
  
         if (enableHttpConnection)         if (enableHttpConnection)
         {         {
             server.addAcceptor(false, portNumberHttp, false, false);              _cimServer->addAcceptor(false, portNumberHttp, false);
             Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::INFORMATION,  
               Logger::put_l(
                   Logger::STANDARD_LOG, System::CIMSERVER, Logger::INFORMATION,
                   "src.Server.cimserver.LISTENING_ON_HTTP_PORT",
                         "Listening on HTTP port $0.", portNumberHttp);                         "Listening on HTTP port $0.", portNumberHttp);
         }         }
   
         if (enableHttpsConnection)         if (enableHttpsConnection)
         {         {
             server.addAcceptor(false, portNumberHttps, true, false);              _cimServer->addAcceptor(false, portNumberHttps, true);
             Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::INFORMATION,  
                         "Listening on HTTPS port $0.", portNumberHttps);  
         }  
         if (enableSSLExportClientVerification)  
         {  
             server.addAcceptor(false, portNumberExportHttps, true, true);  
  
             Logger::put_l(Logger::STANDARD_LOG, System::CIMSERVER, Logger::INFORMATION,              Logger::put_l(
                 "src.Server.cimserver.LISTENING_ON_EXPORT_HTTPS_PORT",                  Logger::STANDARD_LOG, System::CIMSERVER, Logger::INFORMATION,
                 "Listening on Export HTTPS port $0.", portNumberExportHttps);                  "src.Server.cimserver.LISTENING_ON_HTTPS_PORT",
                   "Listening on HTTPS port $0.", portNumberHttps);
         }         }
  
 #ifdef PEGASUS_LOCAL_DOMAIN_SOCKET  #ifndef PEGASUS_DISABLE_LOCAL_DOMAIN_SOCKET
         server.addAcceptor(true, 0, false, false);          _cimServer->addAcceptor(true, 0, false, false);
         Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::INFORMATION,          Logger::put_l(
               Logger::STANDARD_LOG, System::CIMSERVER, Logger::INFORMATION,
               "src.Server.cimserver.LISTENING_ON_LOCAL",
                     "Listening on local connection socket.");                     "Listening on local connection socket.");
 #endif #endif
  
 #if !defined(PEGASUS_OS_HPUX) && !defined(PEGASUS_PLATFORM_LINUX_IA64_GNU) && !defined(PEGASUS_OS_OS400)  #if defined(PEGASUS_DEBUG)
         if (enableHttpConnection)         if (enableHttpConnection)
         {         {
             cout << "Listening on HTTP port " << portNumberHttp << endl;              MessageLoaderParms parms(
                   "src.Server.cimserver.LISTENING_ON_HTTP_PORT",
                   "Listening on HTTP port $0.", portNumberHttp);
               cout << MessageLoader::getMessage(parms) << endl;
         }         }
         if (enableHttpsConnection)         if (enableHttpsConnection)
         {         {
             cout << "Listening on HTTPS port " << portNumberHttps << endl;              MessageLoaderParms parms(
         }                  "src.Server.cimserver.LISTENING_ON_HTTPS_PORT",
         if (enableSSLExportClientVerification)                  "Listening on HTTPS port $0.", portNumberHttps);
         {  
             MessageLoaderParms parms("src.Server.cimserver.LISTENING_ON_EXPORT_HTTPS_PORT",  
                 "Listening on Export HTTPS port $0.", portNumberExportHttps);  
   
             cout << MessageLoader::getMessage(parms) << endl;             cout << MessageLoader::getMessage(parms) << endl;
         }         }
  
   # ifndef PEGASUS_DISABLE_LOCAL_DOMAIN_SOCKET
 # ifdef PEGASUS_LOCAL_DOMAIN_SOCKET          MessageLoaderParms parms(
         cout << "Listening on local connection socket" << endl;              "src.Server.cimserver.LISTENING_ON_LOCAL",
               "Listening on local connection socket.");
           cout << MessageLoader::getMessage(parms) << endl;
 # endif # endif
 #endif #endif
  
         // bind throws an exception if the bind fails         // bind throws an exception if the bind fails
         server.bind();          try {
               _cimServer->bind();
           }
           catch (const BindFailedException &e)
           {
   #ifdef PEGASUS_DEBUG
           MessageLoaderParms parms("src.Server.cimserver.BIND_FAILED",
                    "Could not bind: $0.", e.getMessage());
           cout << MessageLoader::getMessage(parms) << endl;
   #endif
           Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::SEVERE,
               "src.Server.cimserver.BIND.FAILED",
               "Could not bind:  $0", e.getMessage());
  
              deleteCIMServer();
              return 1;
           }
         // notify parent process (if there is a parent process) to terminate         // notify parent process (if there is a parent process) to terminate
         // so user knows that there is cimserver ready to serve CIM requests.         // so user knows that there is cimserver ready to serve CIM requests.
         if (daemonOption)         if (daemonOption)
                 notify_parent(0);          {
               _cimServerProcess->notify_parent(0);
         time_t last = 0;          }
  
 #if defined(PEGASUS_OS_HPUX) || defined(PEGASUS_PLATFORM_LINUX_GENERIC_GNU) || defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM)  #if defined(PEGASUS_OS_HPUX) || \
       defined(PEGASUS_OS_LINUX) || \
       defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM) || \
       defined(PEGASUS_OS_AIX) || \
       defined(PEGASUS_OS_SOLARIS) || \
       defined(PEGASUS_OS_VMS)
         //         //
         // create a file to indicate that the cimserver has started and         // create a file to indicate that the cimserver has started and
         // save the process id of the cimserver process in the file         // save the process id of the cimserver process in the file
         //         //
         // remove the old file if it exists          _serverRunStatus.setServerRunning();
         System::removeFile(CIMSERVER_START_FILE);  
   
         // open the file  
         FILE *pid_file = fopen(CIMSERVER_START_FILE, "w");  
   
         if (pid_file)  
         {  
             // save the pid in the file  
             fprintf(pid_file, "%ld\n", (long)server_pid);  
             fclose(pid_file);  
         }  
 #endif #endif
  
 #if !defined(PEGASUS_OS_HPUX) && !defined(PEGASUS_PLATFORM_LINUX_IA64_GNU) && \  #if defined(PEGASUS_DEBUG)
 !defined(PEGASUS_OS_OS400)  
         cout << "Started. " << endl;         cout << "Started. " << endl;
 #endif #endif
  
         // Put server started message to the logger         // Put server started message to the logger
 #if defined(PEGASUS_OS_HPUX) || defined(PEGASUS_PLATFORM_LINUX_IA64_GNU)          Logger::put_l(Logger::STANDARD_LOG, System::CIMSERVER,
         Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::INFORMATION,              Logger::INFORMATION,
               "src.Server.cimserver.STARTED_VERSION",
                     "Started $0 version $1.",                     "Started $0 version $1.",
                     PLATFORM_PRODUCT_NAME, PLATFORM_PRODUCT_VERSION);              _cimServerProcess->getProductName(), _cimServerProcess->getVersion());
 #else  
         Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::INFORMATION,  
                     "Started $0 version $1.",  
                     PEGASUS_NAME, PEGASUS_VERSION);  
 #endif  
   
  
         //         //
         // Loop to call CIMServer's runForever() method until CIMServer         // Loop to call CIMServer's runForever() method until CIMServer
         // has been shutdown         // has been shutdown
         //         //
         while( !server.terminated() )      while( !_cimServer->terminated() )
         {         {
           server.runForever();  
         _cimServer->runForever();
   
         }         }
  
         //         //
         // normal termination         // normal termination
         //         //
         // Put server shutdown message to the logger  
 #if defined(PEGASUS_OS_HPUX) || defined(PEGASUS_PLATFORM_LINUX_IA64_GNU)  
         Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::INFORMATION,  
             "$0 stopped.", PLATFORM_PRODUCT_NAME);  
 #else  
         Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::INFORMATION,  
             "$0 stopped.", PEGASUS_NAME);  
 #endif  
  
 #if defined(PEGASUS_OS_HPUX) || defined(PEGASUS_PLATFORM_LINUX_GENERIC_GNU) || defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM)          // Put server shutdown message to the logger
           Logger::put_l(Logger::STANDARD_LOG, System::CIMSERVER,
               Logger::INFORMATION, "src.Server.cimserver.STOPPED",
               "$0 stopped.", _cimServerProcess->getProductName());
   
   #if defined(PEGASUS_OS_HPUX) || defined(PEGASUS_PLATFORM_LINUX_GENERIC_GNU) \
   || defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM) || defined(PEGASUS_OS_AIX) \
   || defined(PEGASUS_OS_SOLARIS) || defined(PEGASUS_OS_VMS)
         //         //
         // close the file created at startup time to indicate that the         // close the file created at startup time to indicate that the
         // cimserver has terminated normally.         // cimserver has terminated normally.
         //         //
         FileSystem::removeFile(CIMSERVER_START_FILE);          FileSystem::removeFile(_cimServerProcess->getPIDFileName());
 #endif #endif
     }     }
     catch(Exception& e)     catch(Exception& e)
     {     {
         Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::WARNING,  
       //l10n
       //Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::WARNING,
               //"Error: $0", e.getMessage());
       Logger::put_l(Logger::STANDARD_LOG, System::CIMSERVER, Logger::WARNING,
               "src.Server.cimserver.ERROR",
                     "Error: $0", e.getMessage());                     "Error: $0", e.getMessage());
  
 #ifndef PEGASUS_OS_OS400      //l10n
         PEGASUS_STD(cerr) << "Error: " << e.getMessage() << PEGASUS_STD(endl);      //PEGASUS_STD(cerr) << "Error: " << e.getMessage() << PEGASUS_STD(endl);
 #endif      MessageLoaderParms parms("src.Server.cimserver.ERROR",
                                "Error: $0", e.getMessage());
       PEGASUS_STD(cerr) << MessageLoader::getMessage(parms) << PEGASUS_STD(endl);
  
         //         //
         // notify parent process (if there is a parent process) to terminate         // notify parent process (if there is a parent process) to terminate
         //         //
         if (daemonOption)         if (daemonOption)
                 notify_parent(1);                  _cimServerProcess->notify_parent(1);
  
           deleteCIMServer();
         return 1;         return 1;
     }     }
  
       deleteCIMServer();
     return 0;     return 0;
 } }
   


Legend:
Removed from v.1.11  
changed lines
  Added in v.1.32

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2