source: nscp/include/NSCHelper.h @ 1d9338a

0.4.00.4.10.4.2stable
Last change on this file since 1d9338a was 1d9338a, checked in by Michael Medin <michael@…>, 8 years ago

2005-05-23 MickeM

+ Added obfuscated password support
+ Added some more debug info on commands (returncode, and input args)
+ Added some more comments ot the NSC.ini
+ Added central password "override"
+ Added central "host override"
+ Fixed bug with external commands always getting WARNING state

2005-05-22 MickeM

+ Added debug outout for command
+ Added timestamps for log-to-file (date_mask to configure format)
+ Added support for "no password" with check_nt
+ Added log of bad password on NSClient requests.

  • Some threading issues fixed (I hate threading :)
  • Property mode set to 100644
File size: 9.4 KB
Line 
1#pragma once
2
3#include <string>
4#include <list>
5#include <NSCAPI.h>
6#include <iostream>
7#include <charEx.h>
8#include <arrayBuffer.h>
9
10namespace NSCHelper
11{
12#ifdef DEBUG
13        NSCAPI::nagiosReturn wrapReturnString(char *buffer, unsigned int bufLen, std::string str, NSCAPI::nagiosReturn defaultReturnCode);
14        NSCAPI::errorReturn wrapReturnString(char *buffer, unsigned int bufLen, std::string str, NSCAPI::errorReturn defaultReturnCode);
15#else
16        int wrapReturnString(char *buffer, unsigned int bufLen, std::string str, int defaultReturnCode);
17#endif
18        std::string translateMessageType(NSCAPI::messageTypes msgType);
19        std::string translateReturn(NSCAPI::nagiosReturn returnCode);
20        NSCAPI::nagiosReturn maxState(NSCAPI::nagiosReturn a, NSCAPI::nagiosReturn b);
21
22        inline bool isNagiosReturnCode(NSCAPI::nagiosReturn code) {
23                if ( (code == NSCAPI::returnOK) || (code == NSCAPI::returnWARN) || (code == NSCAPI::returnCRIT) || (code == NSCAPI::returnUNKNOWN) )
24                        return true;
25                return false;
26        }
27
28#ifdef DEBUG
29        inline NSCAPI::nagiosReturn int2nagios(int code) {
30                if (code == 0)
31                        return NSCAPI::returnOK;
32                if (code == 1)
33                        return NSCAPI::returnWARN;
34                if (code == 2)
35                        return NSCAPI::returnCRIT;
36                if (code == 4)
37                        return NSCAPI::returnUNKNOWN;
38                throw "@fixme bad code";
39        }
40        inline int nagios2int(NSCAPI::nagiosReturn code) {
41                if (code == NSCAPI::returnOK)
42                        return 0;
43                if (code == NSCAPI::returnWARN)
44                        return 1;
45                if (code == NSCAPI::returnCRIT)
46                        return 2;
47                if (code == NSCAPI::returnUNKNOWN)
48                        return 4;
49                throw "@fixme bad code";
50        }
51#else
52        inline NSCAPI::nagiosReturn int2nagios(int code) {
53                return code;
54        }
55        inline int nagios2int(NSCAPI::nagiosReturn code) {
56                return code;
57        }
58#endif
59        inline void escalteReturnCodeToCRIT(NSCAPI::nagiosReturn &currentReturnCode) {
60                currentReturnCode = NSCAPI::returnCRIT;
61        }
62        inline void escalteReturnCodeToWARN(NSCAPI::nagiosReturn &currentReturnCode) {
63                if (currentReturnCode != NSCAPI::returnCRIT)
64                        currentReturnCode = NSCAPI::returnWARN;
65        }
66};
67
68namespace NSCModuleHelper
69{
70        class NSCMHExcpetion {
71        public:
72                std::string msg_;
73                NSCMHExcpetion(std::string msg) : msg_(msg) {}
74        };
75        // Types for the Callbacks into the main program
76        typedef NSCAPI::errorReturn (*lpNSAPIGetBasePath)(char*,unsigned int);
77        typedef NSCAPI::errorReturn (*lpNSAPIGetApplicationName)(char*,unsigned int);
78        typedef NSCAPI::errorReturn (*lpNSAPIGetApplicationVersionStr)(char*,unsigned int);
79        typedef NSCAPI::errorReturn (*lpNSAPIGetSettingsString)(const char*,const char*,const char*,char*,unsigned int);
80        typedef NSCAPI::errorReturn (*lpNSAPIGetSettingsInt)(const char*, const char*, int);
81        typedef NSCAPI::errorReturn (*lpNSAPIGetSettingsSection)(const char*, char***, unsigned int *);
82        typedef void (*lpNSAPIMessage)(int, const char*, const int, const char*);
83        typedef NSCAPI::errorReturn (*lpNSAPIStopServer)(void);
84        typedef NSCAPI::nagiosReturn (*lpNSAPIInject)(const char*, const unsigned int, char **, char *, unsigned int, char *, unsigned int);
85        typedef LPVOID (*lpNSAPILoader)(char*);
86        typedef NSCAPI::boolReturn (*lpNSAPICheckLogMessages)(int);
87        typedef NSCAPI::errorReturn (*lpNSAPIEncrypt)(unsigned int, const char*, unsigned int, char*, unsigned int *);
88        typedef NSCAPI::errorReturn (*lpNSAPIDecrypt)(unsigned int, const char*, unsigned int, char*, unsigned int *);
89
90        // Helper functions for calling into the core
91        std::string getApplicationName(void);
92        std::string getApplicationVersionString(void);
93        std::list<std::string> getSettingsSection(std::string section);
94        std::string getSettingsString(std::string section, std::string key, std::string defaultValue);
95        int getSettingsInt(std::string section, std::string key, int defaultValue);
96        void Message(int msgType, std::string file, int line, std::string message);
97        NSCAPI::nagiosReturn InjectCommandRAW(const char* command, const unsigned int argLen, char **argument, char *returnMessageBuffer, unsigned int returnMessageBufferLen, char *returnPerfBuffer, unsigned int returnPerfBufferLen);
98        NSCAPI::nagiosReturn InjectCommand(const char* command, const unsigned int argLen, char **argument, std::string & message, std::string & perf);
99        NSCAPI::nagiosReturn InjectSplitAndCommand(const char* command, char* buffer, char splitChar, std::string & message, std::string & perf);
100        NSCAPI::nagiosReturn InjectSplitAndCommand(const std::string command, const std::string buffer, char splitChar, std::string & message, std::string & perf);
101        void StopService(void);
102        std::string getBasePath();
103        bool logDebug();
104        bool checkLogMessages(int type);
105        std::string Encrypt(std::string str, unsigned int algorithm = NSCAPI::xor);
106        std::string Decrypt(std::string str, unsigned int algorithm = NSCAPI::xor);
107};
108
109namespace NSCModuleWrapper {
110        struct module_version {
111                int major;
112                int minor;
113                int revision;
114        };
115
116        BOOL wrapDllMain(HANDLE hModule, DWORD ul_reason_for_call);
117        HINSTANCE getModule();
118
119        int wrapModuleHelperInit(NSCModuleHelper::lpNSAPILoader f);;
120        NSCAPI::errorReturn wrapGetModuleName(char* buf, unsigned int buflen, std::string str);
121        int wrapLoadModule(bool success);
122        NSCAPI::errorReturn wrapGetModuleVersion(int *major, int *minor, int *revision, module_version version);
123        NSCAPI::boolReturn wrapHasCommandHandler(bool has);
124        NSCAPI::boolReturn wrapHasMessageHandler(bool has);
125        int wrapUnloadModule(bool success);
126        NSCAPI::nagiosReturn wrapHandleCommand(NSCAPI::nagiosReturn retResult, const std::string retMessage, const std::string retPerformance, char *returnBufferMessage, unsigned int returnBufferMessageLen, char *returnBufferPerf, unsigned int returnBufferPerfLen);
127}
128
129//////////////////////////////////////////////////////////////////////////
130// Module wrappers (definitions)
131#define NSC_WRAPPERS_MAIN() \
132        extern "C" int NSModuleHelperInit(NSCModuleHelper::lpNSAPILoader f); \
133        extern int NSLoadModule(); \
134        extern int NSGetModuleName(char* buf, int buflen); \
135        extern int NSGetModuleVersion(int *major, int *minor, int *revision); \
136        extern NSCAPI::boolReturn NSHasCommandHandler(); \
137        extern NSCAPI::boolReturn NSHasMessageHandler(); \
138        extern void NSHandleMessage(int msgType, char* file, int line, char* message); \
139        extern NSCAPI::nagiosReturn NSHandleCommand(const char* IN_cmd, const unsigned int IN_argsLen, char **IN_args, \
140                char *OUT_retBufMessage, unsigned int IN_retBufMessageLen, char *OUT_retBufPerf, unsigned int IN_retBufPerfLen); \
141        extern int NSUnloadModule();
142
143
144
145#define NSC_LOG_ERROR_STD(msg) NSC_LOG_ERROR(((std::string)msg).c_str())
146#define NSC_LOG_ERROR(msg) \
147        NSCModuleHelper::Message(NSCAPI::error, __FILE__, __LINE__, msg)
148
149#define NSC_LOG_CRITICAL_STD(msg) NSC_LOG_CRITICAL(((std::string)msg).c_str())
150#define NSC_LOG_CRITICAL(msg) \
151        NSCModuleHelper::Message(NSCAPI::critical, __FILE__, __LINE__, msg)
152
153#define NSC_LOG_MESSAGE_STD(msg) NSC_LOG_MESSAGE(((std::string)msg).c_str())
154#define NSC_LOG_MESSAGE(msg) \
155        NSCModuleHelper::Message(NSCAPI::log, __FILE__, __LINE__, msg)
156
157#define NSC_DEBUG_MSG_STD(msg) NSC_DEBUG_MSG(((std::string)msg).c_str())
158#define NSC_DEBUG_MSG(msg) \
159        NSCModuleHelper::Message(NSCAPI::debug, __FILE__, __LINE__, msg)
160
161/*
162#define NSC_DEBUG_MSG_STD(msg)
163#define NSC_DEBUG_MSG(msg)
164*/
165//////////////////////////////////////////////////////////////////////////
166// Message wrappers below this point
167
168#define NSC_WRAPPERS_MAIN_DEF(toObject) \
169        extern int NSModuleHelperInit(NSCModuleHelper::lpNSAPILoader f) { \
170                return NSCModuleWrapper::wrapModuleHelperInit(f); \
171        } \
172        extern int NSLoadModule() { \
173                return NSCModuleWrapper::wrapLoadModule(toObject.loadModule()); \
174        } \
175        extern int NSGetModuleName(char* buf, int buflen) { \
176                return NSCModuleWrapper::wrapGetModuleName(buf, buflen, toObject.getModuleName()); \
177        } \
178        extern int NSGetModuleVersion(int *major, int *minor, int *revision) { \
179                return NSCModuleWrapper::wrapGetModuleVersion(major, minor, revision, toObject.getModuleVersion()); \
180        } \
181        extern int NSUnloadModule() { \
182                return NSCModuleWrapper::wrapUnloadModule(toObject.unloadModule()); \
183        }
184#define NSC_WRAPPERS_HANDLE_MSG_DEF(toObject) \
185        extern void NSHandleMessage(int msgType, char* file, int line, char* message) { \
186                toObject.handleMessage(msgType, file, line, message); \
187        } \
188        extern NSCAPI::boolReturn NSHasMessageHandler() { \
189                return NSCModuleWrapper::wrapHasMessageHandler(toObject.hasMessageHandler()); \
190        }
191#define NSC_WRAPPERS_IGNORE_MSG_DEF() \
192        extern void NSHandleMessage(int msgType, char* file, int line, char* message) {} \
193        extern NSCAPI::boolReturn NSHasMessageHandler() { return NSCAPI::isfalse; }
194#define NSC_WRAPPERS_HANDLE_CMD_DEF(toObject) \
195        extern NSCAPI::nagiosReturn NSHandleCommand(const char* IN_cmd, const unsigned int IN_argsLen, char **IN_args, \
196                                                                        char *OUT_retBufMessage, unsigned int IN_retBufMessageLen, char *OUT_retBufPerf, unsigned int IN_retBufPerfLen) \
197        { \
198                std::string message, perf; \
199                NSCAPI::nagiosReturn retCode = toObject.handleCommand(IN_cmd, IN_argsLen, IN_args, message, perf); \
200                return NSCModuleWrapper::wrapHandleCommand(retCode, message, perf, OUT_retBufMessage, IN_retBufMessageLen, OUT_retBufPerf, IN_retBufPerfLen); \
201        } \
202        extern NSCAPI::boolReturn NSHasCommandHandler() { \
203                return NSCModuleWrapper::wrapHasCommandHandler(toObject.hasCommandHandler()); \
204        }
205#define NSC_WRAPPERS_IGNORE_CMD_DEF() \
206        extern NSCAPI::nagiosReturn NSHandleCommand(const char* IN_cmd, const unsigned int IN_argsLen, char **IN_args, \
207                                                                        char *OUT_retBufMessage, unsigned int IN_retBufMessageLen, char *OUT_retBufPerf, unsigned int IN_retBufPerfLen) { \
208                return NSCAPI::returnIgnored; \
209        } \
210        extern NSCAPI::boolReturn NSHasCommandHandler() { return NSCAPI::isfalse; }
Note: See TracBrowser for help on using the repository browser.