/*******************************************************************************
*  Config.h - Configure the program
*
*  Berzerk/
*
*  Part of the BuckoSoft Network Monitor
*  Copyright(c) 2008 - BuckoSoft, Inc.
*
*  http://git.buckosoft.com/gitweb/?p=Berzerk.git;a=history;f=Berzerk/Config.h
*
*  With which we configure Berzerk
\*******************************************************************************/


#ifndef	_CONFIG_H_
#define	_CONFIG_H_

#include <string>
#include <list>
using namespace std;

namespace berzerk { class Berzerk; }

class Config {
  public:
	Config();

	void	setThreshold(int threshold);
	const int	getThreshold() const;

	void	setTriggerDelay(int delay);
	int		getTriggerDelay();

	void	setPort(int port);
	int		getPort();

	void	setLogFmt(const string& fmt);
	const	string&	getLogFmt();

	bool	isWhiteList(const string& ip);
	void	addWhitelist(const string& ipregex);

	void	setSyslogFacility(int facility);
	const int	getSyslogFacility() const;

	void	setSyslogPriority(int priority);
	const int	getSyslogPriority() const;


	bool	readFile(ifstream& ifs);

	void			setBerzerk(berzerk::Berzerk* berzerk);
	static void		setDEBUG(int value);

  private:
	int					threshold;
	string				logFmt;
	list<regex*>		whitelist;
	berzerk::Berzerk*	berzerk;
	int					triggerDelay;
	int					port;
	int					syslogFacility;
	int					syslogPriority;

	static int		DEBUG;
};

inline void Config::setThreshold(int t) { threshold = t; }
inline const int  Config::getThreshold() const { return(threshold); }

inline void Config::setTriggerDelay(int d) { triggerDelay = d; }
inline int  Config::getTriggerDelay() { return(triggerDelay); }

inline void Config::setPort(int p) { port = p; }
inline int  Config::getPort() { return(port); }

inline void Config::setSyslogFacility(int f) { syslogFacility = f; }
inline const int  Config::getSyslogFacility() const { return(syslogFacility); }

inline void Config::setSyslogPriority(int p) { syslogPriority = p; }
inline const int  Config::getSyslogPriority() const { return(syslogPriority); }

inline void Config::setLogFmt(const string& fmt) { this->logFmt = fmt; }
inline const string& Config::getLogFmt() { return(logFmt); }

inline void Config::addWhitelist(const string& w) { whitelist.push_back(new regex(w)); }
//inline const list<regex*> Config::getWhitelist() { return(whitelist); }

inline void Config::setBerzerk(berzerk::Berzerk* bz) { berzerk = bz; };
inline void Config::setDEBUG(int level) { DEBUG = level; }

#endif		// _CONFIG_H_
