]> git.stg.codes - stg.git/blobdiff - projects/stargazer/plugins/configuration/sgconfig/configproto.h
Immediate disconnect on Unauthorize if not authorized.
[stg.git] / projects / stargazer / plugins / configuration / sgconfig / configproto.h
index 35e54105a38d20a501abd06fcf4b0b85deeba2ac..2119bc675214c22aae0eb2f1c3589f659e592c81 100644 (file)
 
 /*
  *    Author : Boris Mikhailenko <stg34@stargazer.dp.ua>
+ *    Author : Maxim Mamontov <faust@stargazer.dp.ua>
  */
 
- /*
- $Revision: 1.14 $
- $Date: 2010/10/04 20:24:14 $
- $Author: faust $
- */
-
-
 #ifndef CONFIGPROTO_H
 #define CONFIGPROTO_H
 
-#include <expat.h>
-#include <sys/types.h>
-#include <sys/socket.h>
+#include "parser.h"
+
+#include "stg/module_settings.h"
+#include "stg/os_int.h"
 
 #include <string>
+#include <deque>
 
-#include "parser.h"
-#include "../../../users.h"
-#include "../../../admins.h"
-#include "../../../tariffs.h"
-#include "stg_logger.h"
-
-using namespace std;
-
-#define  STG_HEADER     "SG04"
-#define  OK_HEADER      "OKHD"
-#define  ERR_HEADER     "ERHD"
-#define  OK_LOGIN       "OKLG"
-#define  ERR_LOGIN      "ERLG"
-#define  OK_LOGINS      "OKLS"
-#define  ERR_LOGINS     "ERLS"
-
-//-----------------------------------------------------------------------------
-class CONFIGPROTO
+#include <sys/select.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+class SETTINGS;
+class ADMINS;
+class TARIFFS;
+class USERS;
+class STORE;
+class PLUGIN_LOGGER;
+
+namespace STG
 {
+
+class Conn;
+
+}
+
+class CONFIGPROTO {
 public:
-    CONFIGPROTO();
+    CONFIGPROTO(PLUGIN_LOGGER & l);
     ~CONFIGPROTO();
 
-    void            SetPort(uint16_t port);
-    //void            SetHostAllow(HOSTALLOW * ha);
-    void            SetAdmins(ADMINS * a);
-    void            SetUsers(USERS * u);
-    void            SetTariffs(TARIFFS * t);
-    void            SetStore(BASE_STORE * s);
-    void            SetStgSettings(const SETTINGS * s);
-    //const string &  GetAdminLogin();
-    uint32_t        GetAdminIP() const;
+    void            SetPort(uint16_t port) { m_port = port; }
+    void            SetBindAddress(const std::string & address) { m_bindAddress = address; }
+    void            SetSettings(const SETTINGS * settings) { m_settings = settings; }
+    void            SetAdmins(ADMINS * admins) { m_admins = admins; }
+    void            SetTariffs(TARIFFS * tariffs) { m_tariffs = tariffs; }
+    void            SetUsers(USERS * users) { m_users = users; }
+    void            SetStore(STORE * store) { m_store = store; }
+
     int             Prepare();
     int             Stop();
-    const string &  GetStrError() const;
-    static void *   Run(void * a);
+    const std::string & GetStrError() const { return m_errorStr; }
+    void            Run();
 
 private:
-    int             RecvHdr(int sock);
-    int             RecvLogin(int sock);
-    int             SendLoginAnswer(int sock, int err);
-    int             SendHdrAnswer(int sock, int err);
-    int             RecvLoginS(int sock);
-    int             SendLoginSAnswer(int sock, int err);
-    int             RecvData(int sock);
-    int             SendDataAnswer(int sock);
-    void            SendError(const char * text);
-    void            WriteLogAccessFailed(uint32_t ip);
-
-    int             ParseCommand();
-
-    list<string>    answerList;
-    list<string>    requestList;
-    uint32_t        adminIP;
-    string          adminLogin;
-    uint16_t        port;
-    pthread_t       thrReciveSendConf;
-    bool            nonstop;
-    int             state;
-    //HOSTALLOW *     hostAllow;
-    ADMIN           currAdmin;
-    STG_LOGGER &    WriteServLog;
-
-    int                 outerSocket;
-    int                 listenSocket;
-    struct sockaddr_in  outerAddr;
-    socklen_t           outerAddrLen;
-
-    PARSER_GET_SERVER_INFO      parserGetServInfo;
-
-    PARSER_GET_USERS            parserGetUsers;
-    PARSER_GET_USER             parserGetUser;
-    PARSER_CHG_USER             parserChgUser;
-    PARSER_ADD_USER             parserAddUser;
-    PARSER_DEL_USER             parserDelUser;
-    PARSER_CHECK_USER           parserCheckUser;
-    PARSER_SEND_MESSAGE         parserSendMessage;
-
-    PARSER_GET_ADMINS           parserGetAdmins;
-    PARSER_ADD_ADMIN            parserAddAdmin;
-    PARSER_DEL_ADMIN            parserDelAdmin;
-    PARSER_CHG_ADMIN            parserChgAdmin;
-
-    PARSER_GET_TARIFFS          parserGetTariffs;
-    PARSER_ADD_TARIFF           parserAddTariff;
-    PARSER_DEL_TARIFF           parserDelTariff;
-    PARSER_CHG_TARIFF           parserChgTariff;
-
-    ADMINS *                    admins;
-    //USERS *                     users;
-    //TARIFFS *                   tariffs;
-    //BASE_STORE *                store;
-    //const SETTINGS *            settings;
-
-    BASE_PARSER *               currParser;
-    vector<BASE_PARSER*>        dataParser;
-
-    XML_Parser                  xmlParser;
-
-    string                      errorStr;
-
-    friend void ParseXMLStart(void *data, const char *el, const char **attr);
-    friend void ParseXMLEnd(void *data, const char *el);
+    CONFIGPROTO(const CONFIGPROTO & rvalue);
+    CONFIGPROTO & operator=(const CONFIGPROTO & rvalue);
+
+    const SETTINGS * m_settings;
+    ADMINS *         m_admins;
+    TARIFFS *        m_tariffs;
+    USERS *          m_users;
+    STORE *          m_store;
+
+    uint16_t         m_port;
+    std::string      m_bindAddress;
+    bool             m_running;
+    bool             m_stopped;
+    PLUGIN_LOGGER &  m_logger;
+    int              m_listenSocket;
+
+    std::string      m_errorStr;
+
+    BASE_PARSER::REGISTRY m_registry;
+    std::deque<STG::Conn *> m_conns;
+
+    bool Bind();
+
+    void RegisterParsers();
+
+    int MaxFD() const;
+    void BuildFDSet(fd_set & fds) const;
+    void CleanupConns();
+    void HandleEvents(const fd_set & fds);
+    void AcceptConnection();
+
+    //void WriteLogAccessFailed(uint32_t ip);
 };
-//-----------------------------------------------------------------------------
-#endif //CONFIGPROTO_H
 
+#endif //CONFIGPROTO_H