diff options
Diffstat (limited to 'src/logTargets.h')
-rw-r--r-- | src/logTargets.h | 200 |
1 files changed, 200 insertions, 0 deletions
diff --git a/src/logTargets.h b/src/logTargets.h new file mode 100644 index 0000000..4f249d4 --- /dev/null +++ b/src/logTargets.h @@ -0,0 +1,200 @@ +/* + * anytun + * + * The secure anycast tunneling protocol (satp) defines a protocol used + * for communication between any combination of unicast and anycast + * tunnel endpoints. It has less protocol overhead than IPSec in Tunnel + * mode and allows tunneling of every ETHER TYPE protocol (e.g. + * ethernet, ip, arp ...). satp directly includes cryptography and + * message authentication based on the methodes used by SRTP. It is + * intended to deliver a generic, scaleable and secure solution for + * tunneling and relaying of packets of any protocol. + * + * + * Copyright (C) 2007-2008 Othmar Gsenger, Erwin Nindl, + * Christian Pointner <satp@wirdorange.org> + * + * This file is part of Anytun. + * + * Anytun is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as + * published by the Free Software Foundation. + * + * Anytun 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 anytun. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef _LOG_TARGETS_H_ +#define _LOG_TARGETS_H_ + +#include <string> +#include <map> + +#ifdef LOG_SYSLOG +#include <syslog.h> +#endif + +#ifdef LOG_FILE +#include <fstream> +#endif + +class LogTarget +{ +public: + LogTarget();; + LogTarget(int prio); + + virtual void open() = 0; + virtual void close() = 0; + bool isOpen() { return opened; }; + + void enable() { enabled = true; }; + void disable() { enabled = false; }; + bool isEnabled() { return enabled; }; + + int getMaxPrio() { return max_prio; }; + void setMaxPrio(int p) { max_prio = p; }; + + virtual void log(std::string msg, int prio) = 0; + +protected: + bool opened; + bool enabled; + int max_prio; +}; + +class LogTargetList +{ +public: + typedef enum { TARGET_UNKNOWN, TARGET_SYSLOG, TARGET_FILE, + TARGET_STDOUT, TARGET_STDERR, TARGET_WINEVENTLOG } target_type_t; + + static target_type_t targetTypeFromString(std::string type); + static std::string targetTypeToString(target_type_t type); + + ~LogTargetList(); + LogTarget* add(std::string conf); + LogTarget* add(target_type_t type, int prio, std::string conf); + void clear(); + + void log(std::string msg, int prio); + +private: + typedef std::multimap<target_type_t, LogTarget*> TargetsMap; + TargetsMap targets; +}; + + +#ifdef LOG_SYSLOG +class LogTargetSyslog : public LogTarget +{ +public: + static const int FAC_USER = LOG_USER; + static const int FAC_MAIL = LOG_MAIL; + static const int FAC_DAEMON = LOG_DAEMON; + static const int FAC_AUTH = LOG_AUTH; + static const int FAC_SYSLOG = LOG_SYSLOG; + static const int FAC_LPR = LOG_LPR; + static const int FAC_NEWS = LOG_NEWS; + static const int FAC_UUCP = LOG_UUCP; + static const int FAC_CRON = LOG_CRON; + static const int FAC_AUTHPRIV = LOG_AUTHPRIV; + static const int FAC_FTP = LOG_FTP; + static const int FAC_LOCAL0 = LOG_LOCAL0; + static const int FAC_LOCAL1 = LOG_LOCAL1; + static const int FAC_LOCAL2 = LOG_LOCAL2; + static const int FAC_LOCAL3 = LOG_LOCAL3; + static const int FAC_LOCAL4 = LOG_LOCAL4; + static const int FAC_LOCAL5 = LOG_LOCAL5; + static const int FAC_LOCAL6 = LOG_LOCAL6; + static const int FAC_LOCAL7 = LOG_LOCAL7; + + static int facilityFromString(std::string fac); + static std::string facilityToString(int fac); + + LogTargetSyslog(int prio, std::string conf); + ~LogTargetSyslog(); + + void open(); + void close(); + void log(std::string msg, int prio); + static bool duplicateAllowed() { return false; }; + + LogTargetSyslog& setLogName(std::string l); + std::string getLogName() const { return logname; } + LogTargetSyslog& setFacility(int f); + int getFacility() const { return facility; } + +private: + std::string logname; + int facility; +}; +#endif + +#ifdef LOG_FILE +class LogTargetFile : public LogTarget +{ +public: + LogTargetFile(int prio, std::string conf); + ~LogTargetFile(); + + void open(); + void close(); + void log(std::string msg, int prio); + static bool duplicateAllowed() { return true; }; + + LogTargetFile& setLogFilename(std::string l); + std::string getLogFilename() const { return logfilename; } + +private: + std::string logfilename; + std::ofstream logfile; +}; +#endif + +#ifdef LOG_STDOUT +class LogTargetStdout : public LogTarget +{ +public: + LogTargetStdout(int prio, std::ostream& s); + ~LogTargetStdout(); + + void open(); + void close(); + void log(std::string msg, int prio); + static bool duplicateAllowed() { return false; }; + +private: + std::ostream& stream; +}; +#endif + +#ifdef LOG_WINEVENTLOG +class LogTargetWinEventlog : public LogTarget +{ +public: + LogTargetWinEventlog(int prio, std::string conf); + ~LogTargetWinEventlog(); + + void open(); + void close(); + void log(std::string msg, int prio); + static bool duplicateAllowed() { return false; }; + + LogTargetWinEventlog& setLogName(std::string l); + std::string getLogName() const { return logname; } + +private: + static WORD prioToEventLogType(int prio); + + std::string logname; + HANDLE h_event_source; +}; +#endif + +#endif |