1 // Copyright (c) 1999-2018 David Muse
2 // See the file COPYING for more information
3 
4 #ifndef SQLRUTIL_H
5 #define SQLRUTIL_H
6 
7 #include <sqlrelay/private/sqlrutilincludes.h>
8 
9 class SQLRUTIL_DLLSPEC sqlrcmdline : public commandline {
10 	friend class sqlrpaths;
11 	public:
12 			sqlrcmdline(int argc, const char **argv);
13 
14 		const char	*getId() const;
15 	private:
16 		const char	*id;
17 };
18 
19 class SQLRUTIL_DLLSPEC sqlrpaths {
20 	public:
21 				sqlrpaths(sqlrcmdline *cmdl);
22 				~sqlrpaths();
23 		const char	*getBinDir();
24 		const char	*getLocalStateDir();
25 		const char	*getTmpDir();
26 		const char	*getSockSeqFile();
27 		const char	*getSocketsDir();
28 		const char	*getIpcDir();
29 		const char	*getPidDir();
30 		const char	*getLogDir();
31 		const char	*getDebugDir();
32 		const char	*getCacheDir();
33 		const char	*getDefaultConfigFile();
34 		const char	*getDefaultConfigDir();
35 		const char	*getDefaultConfigUrl();
36 		const char	*getConfigUrl();
37 		const char	*getLibExecDir();
38 	protected:
39 		char		*bindir;
40 		char		*localstatedir;
41 		char		*tmpdir;
42 		char		*sockseqfile;
43 		char		*socketsdir;
44 		char		*ipcdir;
45 		char		*piddir;
46 		uint32_t	tmpdirlen;
47 		char		*logdir;
48 		char		*debugdir;
49 		char		*cachedir;
50 		char		*defaultconfigfile;
51 		char		*defaultconfigdir;
52 		char		*defaultconfigurl;
53 		const char	*configurl;
54 		char		*libexecdir;
55 };
56 
57 class SQLRUTIL_DLLSPEC connectstringcontainer {
58 	public:
59 				connectstringcontainer();
60 				~connectstringcontainer();
61 		void		parseConnectString();
62 		void		setConnectionId(const char *connectionid);
63 		void		setString(const char *string);
64 		void		setMetric(uint32_t metric);
65 		void		setBehindLoadBalancer(bool behindloadbalancer);
66 		void		setPasswordEncryption(const char *pwdenc);
67 		const char	*getConnectionId();
68 		const char	*getString();
69 		uint32_t	getMetric();
70 		bool		getBehindLoadBalancer();
71 		const char	*getConnectStringValue(const char *variable);
72 		const char	*getPasswordEncryption();
73 	private:
74 
75 		char		*connectionid;
76 		char		*string;
77 		uint32_t	metric;
78 		bool		behindloadbalancer;
79 		char		*pwdenc;
80 
81 		parameterstring	connectstring;
82 };
83 
84 typedef linkedlistnode< connectstringcontainer * >	connectstringnode;
85 
86 class SQLRUTIL_DLLSPEC routecontainer {
87 	public:
88 			routecontainer();
89 			~routecontainer();
90 
91 		void	setIsFilter(bool isfilter);
92 		void	setHost(const char *host);
93 		void	setPort(uint16_t port);
94 		void	setSocket(const char *socket);
95 		void	setUser(const char *user);
96 		void	setPassword(const char *password);
97 
98 		bool		getIsFilter();
99 		const char	*getHost();
100 		uint16_t	getPort();
101 		const char	*getSocket();
102 		const char	*getUser();
103 		const char	*getPassword();
104 		linkedlist< regularexpression * >	*getRegexList();
105 	private:
106 		bool		isfilter;
107 		char		*host;
108 		uint16_t	port;
109 		char		*socket;
110 		char		*user;
111 		char		*password;
112 		linkedlist< regularexpression * >	regexlist;
113 };
114 
115 typedef linkedlistnode< routecontainer * >	routenode;
116 
117 class SQLRUTIL_DLLSPEC sqlrconfig {
118 	public:
119 			sqlrconfig();
120 		virtual ~sqlrconfig();
121 
122 		virtual void	getEnabledIds(const char *url,
123 					linkedlist< char * > *idlist)=0;
124 		virtual bool	load(const char *url, const char *id)=0;
125 		virtual bool	accessible()=0;
126 
127 		virtual const char 	*getDefaultAddresses()=0;
128 		virtual uint16_t	getDefaultPort()=0;
129 		virtual const char	*getDefaultSocket()=0;
130 
131 		virtual bool		getDefaultKrb()=0;
132 		virtual const char	*getDefaultKrbService()=0;
133 		virtual const char	*getDefaultKrbKeytab()=0;
134 		virtual const char	*getDefaultKrbMech()=0;
135 		virtual const char	*getDefaultKrbFlags()=0;
136 
137 		virtual bool		getDefaultTls()=0;
138 		virtual const char	*getDefaultTlsCiphers()=0;
139 
140 		virtual const char	*getDefaultUser()=0;
141 		virtual const char	*getDefaultPassword()=0;
142 
143 		virtual bool		getListenOnInet()=0;
144 		virtual bool		getListenOnUnix()=0;
145 
146 		virtual const char	*getDbase()=0;
147 
148 		virtual uint32_t	getConnections()=0;
149 		virtual uint32_t	getMaxConnections()=0;
150 		virtual uint32_t	getMaxQueueLength()=0;
151 		virtual uint32_t	getGrowBy()=0;
152 		virtual int32_t		getTtl()=0;
153 		virtual int32_t		getSoftTtl()=0;
154 		virtual uint16_t	getMaxSessionCount()=0;
155 		virtual bool		getDynamicScaling()=0;
156 
157 		virtual const char	*getEndOfSession()=0;
158 		virtual bool		getEndOfSessionCommit()=0;
159 		virtual uint32_t	getSessionTimeout()=0;
160 
161 		virtual const char	*getRunAsUser()=0;
162 		virtual const char	*getRunAsGroup()=0;
163 
164 		virtual uint16_t	getCursors()=0;
165 		virtual uint16_t	getMaxCursors()=0;
166 		virtual uint16_t	getCursorsGrowBy()=0;
167 
168 		virtual const char	*getAuthTier()=0;
169 		virtual bool		getAuthOnConnection()=0;
170 		virtual bool		getAuthOnDatabase()=0;
171 
172 		virtual const char	*getSessionHandler()=0;
173 
174 		virtual const char	*getHandoff()=0;
175 
176 		virtual const char	*getAllowedIps()=0;
177 		virtual const char	*getDeniedIps()=0;
178 
179 		virtual const char	*getDebug()=0;
180 		virtual bool		getDebugSql()=0;
181 		virtual bool		getDebugBulkLoad()=0;
182 		virtual bool		getDebugParser()=0;
183 		virtual bool		getDebugDirectives()=0;
184 		virtual bool		getDebugTranslations()=0;
185 		virtual bool		getDebugFilters()=0;
186 		virtual bool		getDebugTriggers()=0;
187 		virtual bool		getDebugBindTranslations()=0;
188 		virtual bool		getDebugBindVariableTranslations()=0;
189 		virtual bool		getDebugResultSetTranslations()=0;
190 		virtual bool		getDebugResultSetRowTranslations()=0;
191 		virtual bool		getDebugResultSetRowBlockTranslations()=0;
192 		virtual bool		getDebugResultSetHeaderTranslations()=0;
193 		virtual bool		getDebugProtocols()=0;
194 		virtual bool		getDebugAuths()=0;
195 		virtual bool		getDebugPasswordEncryptions()=0;
196 		virtual bool		getDebugLoggers()=0;
197 		virtual bool		getDebugNotifications()=0;
198 		virtual bool		getDebugSchedules()=0;
199 		virtual bool		getDebugRouters()=0;
200 		virtual bool		getDebugQueries()=0;
201 		virtual bool		getDebugModuleDatas()=0;
202 
203 		virtual uint64_t	getMaxClientInfoLength()=0;
204 		virtual uint32_t	getMaxQuerySize()=0;
205 		virtual uint16_t	getMaxBindCount()=0;
206 		virtual uint16_t	getMaxBindNameLength()=0;
207 		virtual uint32_t	getMaxStringBindValueLength()=0;
208 		virtual uint32_t	getMaxLobBindValueLength()=0;
209 		virtual uint32_t	getMaxErrorLength()=0;
210 
211 		virtual int32_t		getIdleClientTimeout()=0;
212 
213 		virtual int64_t		getMaxListeners()=0;
214 		virtual uint32_t	getListenerTimeout()=0;
215 
216 		virtual bool		getReLoginAtStart()=0;
217 
218 		virtual bool		getFakeInputBindVariables()=0;
219 		virtual const char	*getFakeInputBindVariablesDateFormat()=0;
220 		virtual bool		getFakeInputBindVariablesUnicodeStrings()=0;
221 		virtual bool		getBindVariableDelimiterQuestionMarkSupported()=0;
222 		virtual bool		getBindVariableDelimiterColonSupported()=0;
223 		virtual bool		getBindVariableDelimiterAtSignSupported()=0;
224 		virtual bool		getBindVariableDelimiterDollarSignSupported()=0;
225 
226 		virtual bool		getTranslateBindVariables()=0;
227 
228 		virtual const char	*getIsolationLevel()=0;
229 
230 		virtual bool		getIgnoreSelectDatabase()=0;
231 
232 		virtual bool		getWaitForDownDatabase()=0;
233 
234 		virtual linkedlist< char *>	*getSessionStartQueries()=0;
235 		virtual linkedlist< char *>	*getSessionEndQueries()=0;
236 
237 		virtual domnode	*getListeners()=0;
238 		virtual domnode	*getParser()=0;
239 		virtual domnode	*getDirectives()=0;
240 		virtual domnode	*getTranslations()=0;
241 		virtual domnode	*getFilters()=0;
242 		virtual domnode	*getBindVariableTranslations()=0;
243 		virtual domnode	*getResultSetTranslations()=0;
244 		virtual domnode	*getResultSetRowTranslations()=0;
245 		virtual domnode	*getResultSetRowBlockTranslations()=0;
246 		virtual domnode	*getResultSetHeaderTranslations()=0;
247 		virtual domnode	*getTriggers()=0;
248 		virtual domnode	*getLoggers()=0;
249 		virtual domnode	*getNotifications()=0;
250 		virtual domnode	*getSchedules()=0;
251 		virtual domnode	*getRouters()=0;
252 		virtual domnode	*getQueries()=0;
253 		virtual domnode	*getPasswordEncryptions()=0;
254 		virtual domnode	*getAuths()=0;
255 		virtual domnode	*getModuleDatas()=0;
256 
257 		virtual linkedlist< connectstringcontainer * >
258 						*getConnectStringList()=0;
259 		virtual connectstringcontainer	*getConnectString(
260 						const char *connectionid)=0;
261 		virtual uint32_t		getConnectionCount()=0;
262 		virtual uint32_t		getMetricTotal()=0;
263 
264 		virtual linkedlist< routecontainer * >	*getRouteList()=0;
265 };
266 
267 class SQLRUTIL_DLLSPEC sqlrconfigs {
268 	public:
269 			sqlrconfigs(sqlrpaths *sqlrpth);
270 			~sqlrconfigs();
271 		void		getEnabledIds(const char *urls,
272 						linkedlist< char * > *idlist);
273 		sqlrconfig	*load(const char *urls, const char *id);
274 	private:
275 		void		loadConfig(const char *module);
276 
277 		const char	*libexecdir;
278 		sqlrconfig	*cfg;
279 		dynamiclib	*dl;
280 };
281 
282 #endif
283