/****************************************************************************
|
| Copyright (c) 2006 Novell, Inc.
| All Rights Reserved.
|
| This program is free software; you can redistribute it and/or
| modify it under the terms of version 2 of the GNU General Public License as
| published by the Free Software Foundation.
|
| This program is distributed in the hope that it will be useful,
| but WITHOUT ANY WARRANTY; without even the implied warranty of
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
| GNU General Public License for more details.
|
| You should have received a copy of the GNU General Public License
| along with this program; if not, contact Novell, Inc.
|
| To contact Novell about this file by physical or electronic mail,
| you may find current contact information at www.novell.com
|
|***************************************************************************
/**
@author Brad Nicholes
*/
#ifndef OMC_OMCCLP_H_INCLUDE_GUARD_
#define OMC_OMCCLP_H_INCLUDE_GUARD_
#include "omcclpcommon.h"
#include "omcclpprogram.h"
#include "version.h"
#include <openwbem/OW_Reference.hpp>
#include <openwbem/OW_Thread.hpp>
#include <openwbem/OW_ThreadBarrier.hpp>
#include <openwbem/OW_NonRecursiveMutexLock.hpp>
#include <openwbem/OW_UnnamedPipe.hpp>
namespace OMCCLP {
class OMCCLPApplication;
typedef Reference<OMCCLPApplication> OMCCLPApplicationRef;
/**
* This class is the main program class. It starts the initializs the readline
* library, opens the configuration files, creates the initial CIMClient object
* and then enters the run() method.
*
*/
class OMCCLPServerThread;
typedef Reference<OMCCLPServerThread> OMCCLPServerThreadRef;
/**
* This class is the clp server thread class. It starts the
* initializs the clp server.
*
*/
class OMCCLPServerThread : public Thread {
public:
/**
* Create a OMCCLPProgram object. This represents the main running
* program.
*/
OMCCLPServerThread(Condition& cond, NonRecursiveMutex& lock)
: m_running(false)
, m_shuttingDown(false)
, m_debugMode(false)
, m_logger(0)
, m_condition(cond)
, m_threadBarrier(2)
, m_guard(lock)
, m_sigPipe(0)
, m_data_filename()
{}
~OMCCLPServerThread(){}
virtual void shutdown();
virtual Int32 run ();
bool running() {return m_running;}
void setDebugMode(bool debug) {m_debugMode = debug;}
void setConfFilename (const String filename) {m_data_filename = filename;}
private:
bool m_running;
bool m_shuttingDown;
bool m_debugMode;
LoggerRef m_logger;
Condition& m_condition;
ThreadBarrier m_threadBarrier;
NonRecursiveMutex& m_guard;
UnnamedPipeRef m_sigPipe;
String m_data_filename; // Configuration data file name
};
class OMCCLPClientThread;
typedef Reference<OMCCLPClientThread> OMCCLPClientThreadRef;
/**
* This class is the clp client thread class. It starts the
* initializs the clp client.
*
*/
class OMCCLPClientThread : public Thread {
public:
/**
* Create a OMCCLPProgram object. This represents the main running
* program.
*/
OMCCLPClientThread()
: m_running(false)
, m_shuttingDown(false)
, m_debugMode(false)
, m_logger(0) {}
~OMCCLPClientThread(){}
virtual void shutdown();
virtual Int32 run ();
void setDebugMode(bool debug) {m_debugMode = debug;}
void setConfFilename (const String filename) {m_data_filename = filename;}
void setScriptFilenames (const StringArray filenames) {m_script_filenames = filenames;}
void setCIMURL (const String cimURL) {m_CIMURL = cimURL;}
void setCIMNamespace (const String cimNamespace) {m_CIMNamespace = cimNamespace;}
void setExecCmd (const String execCmd) {m_exec_cmd = execCmd;}
private:
bool m_running;
bool m_shuttingDown;
bool m_debugMode;
LoggerRef m_logger;
String m_CIMURL; // Override CIM URL
String m_CIMNamespace; // Override CIM namespace
String m_data_filename; // Configuration data file name
String m_exec_cmd; // Override CIM namespace
StringArray m_script_filenames; // Scripted command file
};
}
#endif