summaryrefslogtreecommitdiffstats
path: root/rasmgr/rasmgr_rascontrol.hh
blob: b6a104af62b81a11373fe9d2ca77376224435a54 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
/*
* This file is part of rasdaman community.
*
* Rasdaman community is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Rasdaman community 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 rasdaman community.  If not, see <http://www.gnu.org/licenses/>.
*
* Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 Peter Baumann /
rasdaman GmbH.
*
* For more information please see <http://www.rasdaman.org>
* or contact Peter Baumann via <baumann@rasdaman.com>.
/
/**
 * SOURCE: rasmgr_rascontrol.hh
 *
 * MODULE: rasmgr
 * CLASS:  RasControl
 *
 * PURPOSE:
 *   Decodes, verifies and xecutes the commands
 *    
 * COMMENTS:
 *   		None
 *
*/
#ifndef RASMGR_RASCONTROL_HH
#define RASMGR_RASCONTROL_HH

#include "rasmgr.hh"
#include "rasmgr_comm.hh"
#include "rasmgr_users.hh"
#include "rasmgr_host.hh"


/**
  * \ingroup Rasmgrs
  */
class RasControl
  {
    public:
      int processRequest(char* reqMessage, char *answMessage);
      void setConfigDirty( bool isDirty );
      void setAuthDirty( bool isDirty );

    private:
      void helloCommand();
      void exitCommand();
      void helpCommand();
         void helpHelp();
	 void exitHelp();
      void listCommand(); 
         void listRasServers();
         void listRasHosts();  
	 void listDBHosts();
	 void listDatabases();
	 void listUsers();
	 void listModus();
         void listVersion();
	 void listConnections();
      	 void listRights();
         void listHelp();
      void defineCommand();
         void defineRasServers();   
         void defineRasHosts();
         void defineDBHosts();
         void defineDatabases();
	 void defineUsers();
	 void defineHelp();
      void removeCommand();
         void removeRasServers();   
         void removeRasHosts();
         void removeDBHosts();
         void removeDatabases();
	 void removeUsers();	 
         void removeHelp();
      void checkCommand();
         void checkRasHosts();
         void checkHelp();
      void upCommand();
         void upRasServers();
	   int upAllServersOnHost(const char*hostName);   
         void upHelp();
      void downCommand();
         void downRasServers();
	   int downAllServersOnHost(const char *hostName);
         void downRasHosts();
	   int downRasHost(const char *hostName);
         void downHelp();
      void changeCommand();
         void changeHost();
         void changeUser();
	 void changeRasServer();
	   void changeRasServer(const char *serverName, const char *dbhName, const char *countString, const char *extraString, const char *autoRestart, const char* execName);
	 void changeDBHost();
	 void changeDB();
	 void changeHelp();
      void saveCommand();
         void saveHelp();
     // void stopCommand();
      void resetCommand();	
      
      void grantCommand();
      void revokeCommand();

      // flag whether conf or auth file must be written before exit	
      bool configDirty;
      bool authDirty;

      void errorInCommand(const char*);
      int  prepareAnswer(char *answMessage);
      char answBuffer[MAXMSGOUTBUFF+20];  
      bool isCommand(const char *key);
      char commandBuffer[MAXMSG+20]; //for bug search blva
      
      void splitRequest(const char* reqMessage);
      bool         isFlag(const char*,int pos=-1);
      const char * getValueOf(const char*,bool acceptMinus=false); //'-' alone, only void right string
      const char * getValueIfFlag(const char*,bool acceptMinus=false);
      void checkUnexpectedTokens();
      void checkPermission(int reqRights);
      void checkNotNull(const char *ptr, const char *what);
      unsigned long convertToULong(const char *stringValue,const char *what);
      
      RasServer&    getServer(const char*); //later, just use rasmanager[serverName]
      Database&     getDatabase(const char *name);
      DatabaseHost& getDatabaseHost(const char *name);
      ServerHost&   getServerHost(const char *name);
      User&         getUser(const char *name);
      
      struct Token
        { char *argv;
	  bool  used;
	  void set(char*);
	  const char *take();
	 };
      int  argc;
      Token token[30];

   };
extern RasControl rascontrol;   

/* obsolete, but in the future...
      void grantCommand();
      void revokeCommand();
      
      void connectCommand();	 
         void connectRasServerToDBH();	 
         void connectDatabaseToDBH();	 
         void connectHelp();	 
      void disconnectCommand();	 
         void disconnectRasServerFromDBH();	 
         void disconnectDatabaseFromDBH();	 
         void disconnectHelp();	 
	   void listRasServersOnDBH(const char*);
	   void listRasServersDatabase(const char*);

*/
#endif