/****************************************************************************
|
| 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_OMCCLPC_H_INCLUDE_GUARD_
#define OMC_OMCCLPC_H_INCLUDE_GUARD_
#include "omcclpcommon.h"
#include "omcclpprogram.h"
#include "version.h"
#include <openwbem/OW_Reference.hpp>
#include <openwbem/OW_UnnamedPipe.hpp>
#include <openwbem/OW_Socket.hpp>
#include <openwbem/OW_ThreadBarrier.hpp>
#include <openwbem/OW_Logger.hpp>
#include <openwbem/OW_CerrLogger.hpp>
namespace OMCCLP {
class OMCCLPClient;
typedef Reference<OMCCLPClient> OMCCLPClientRef;
/**
* 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 OMCCLPClient
: public OMCCLPProgram
{
public:
/**
* Create a OMCCLPProgram object. This represents the main running
* program.
*/
OMCCLPClient(std::ostream& clpout)
: OMCCLPProgram(clpout)
, m_socket()
, m_logger(new CerrLogger)
, m_running(false)
, m_shuttingDown(false)
, m_threadBarrier(2)
, m_sigPipe(UnnamedPipe::createUnnamedPipe())
{
m_sigPipe->open();
m_sigPipe->setBlocking(UnnamedPipe::E_NONBLOCKING);
}
~OMCCLPClient(){}
int runCommand (String cmd="") {};
int run (String cmdScript="");
void doExit();
void shutdown();
String getServerPrompt();
bool isValidPrompt (String prompt) {prompt.endsWith(PROMPT);}
bool socketConnect();
void createLogger();
bool initializeCLPSession();
bool createCLPSessionInfo(CIMClient *rch);
void destroyCLPSessionInfo() {}
void writePipe (int sig) {m_sigPipe->writeInt(sig);}
static String COMPONENT_NAME;
private:
Socket m_socket;
LoggerRef m_logger;
bool m_running;
bool m_shuttingDown;
ThreadBarrier m_threadBarrier;
UnnamedPipeRef m_sigPipe; // Pipe for recieving shutdown signals
};
}
#endif