]> git.stg.codes - stg.git/blobdiff - projects/stargazer/plugins/other/snmp/snmp.h
Use data sensors in queries
[stg.git] / projects / stargazer / plugins / other / snmp / snmp.h
index 7f4d67d1566b22ee598ed1f13f08260fc14d6919..540bd3d7c328eba9d7519fa6ab29d0548b143405 100644 (file)
@@ -4,17 +4,29 @@
 #include <pthread.h>
 
 #include <string>
-#include <list>
+#include <map>
+
+#include "asn1/SMUX-PDUs.h"
+#include "asn1/ObjectSyntax.h"
 
 #include "stg/os_int.h"
 #include "stg/plugin.h"
 #include "stg/module_settings.h"
 #include "stg/users.h"
+#include "stg/tariffs.h"
+
+#include "sensors.h"
 
 extern "C" PLUGIN * GetPlugin();
 
 class USER;
 class SETTINGS;
+class SNMP_AGENT;
+
+typedef bool (SNMP_AGENT::*SMUXPacketHandler)(const SMUX_PDUs_t * pdus);
+typedef bool (SNMP_AGENT::*PDUsHandler)(const PDUs_t * pdus);
+typedef std::map<SMUX_PDUs_PR, SMUXPacketHandler> SMUXHandlers;
+typedef std::map<PDUs_PR, PDUsHandler> PDUsHandlers;
 //-----------------------------------------------------------------------------
 class SNMP_AGENT_SETTINGS {
 public:
@@ -23,8 +35,16 @@ public:
     const std::string & GetStrError() const { return errorStr; }
     int ParseSettings(const MODULE_SETTINGS & s);
 
+    uint32_t GetIP() const { return ip; }
+    uint16_t GetPort() const { return port; }
+    const std::string GetPassword() const { return password; }
+
 private:
     mutable std::string errorStr;
+
+    uint32_t ip;
+    uint16_t port;
+    std::string password;
 };
 //-----------------------------------------------------------------------------
 class SNMP_AGENT : public PLUGIN {
@@ -32,13 +52,13 @@ public:
     SNMP_AGENT();
     virtual ~SNMP_AGENT();
 
-    void SetUsers(USERS *) {}
-    void SetTariffs(TARIFFS *) {}
+    void SetUsers(USERS * u) { users = u; }
+    void SetTariffs(TARIFFS * t) { tariffs = t; }
     void SetAdmins(ADMINS *) {}
     void SetTraffcounter(TRAFFCOUNTER *) {}
     void SetStore(STORE *) {}
     void SetStgSettings(const SETTINGS *) {}
-    void SetSettings(const MODULE_SETTINGS &) {}
+    void SetSettings(const MODULE_SETTINGS & s) { settings = s; }
     int ParseSettings();
 
     int Start();
@@ -54,6 +74,21 @@ public:
 private:
     static void * Runner(void * d);
     void Run();
+    bool PrepareNet();
+
+    bool DispatchPDUs(const SMUX_PDUs_t * pdus);
+
+    bool CloseHandler(const SMUX_PDUs_t * pdus);
+    bool RegisterResponseHandler(const SMUX_PDUs_t * pdus);
+    bool PDUsHandler(const SMUX_PDUs_t * pdus);
+    bool CommitOrRollbackHandler(const SMUX_PDUs_t * pdus);
+
+    bool GetRequestHandler(const PDUs_t * pdus);
+    bool GetNextRequestHandler(const PDUs_t * pdus);
+    bool SetRequestHandler(const PDUs_t * pdus);
+
+    USERS * users;
+    TARIFFS * tariffs;
 
     mutable std::string errorStr;
     SNMP_AGENT_SETTINGS snmpAgentSettings;
@@ -63,7 +98,15 @@ private:
     pthread_mutex_t mutex;
     bool running;
     bool stopped;
+
+    int sock;
+
+    SMUXHandlers smuxHandlers;
+    PDUsHandlers pdusHandlers;
+    Sensors sensors;
 };
 //-----------------------------------------------------------------------------
 
+extern "C" PLUGIN * GetPlugin();
+
 #endif