summaryrefslogtreecommitdiffstatsabout
path: root/include/mod_log_sql.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/mod_log_sql.h')
-rw-r--r--include/mod_log_sql.h166
1 files changed, 166 insertions, 0 deletions
diff --git a/include/mod_log_sql.h b/include/mod_log_sql.h
new file mode 100644
index 0000000..c1d9bff
--- /dev/null
+++ b/include/mod_log_sql.h
@@ -0,0 +1,166 @@
1/* $Id$ */
2
3#ifndef MOD_LOG_SQL_H
4#define MOD_LOG_SQL_H
5
6/* Create a set of LOGSQL_DECLARE(type), LOGSQL_DECLARE_NONSTD(type) and
7 * LOGSQL_DECLARE_DATA with appropriate export and import tags for the platform
8 */
9#if !defined(WIN32)
10#define LOGSQL_DECLARE(type) type
11#define LOGSQL_DECLARE_NONSTD(type) type
12#define LOGSQL_DECLARE_DATA
13#elif defined(LOGSQL_DECLARE_STATIC)
14#define LOGSQL_DECLARE(type) type __stdcall
15#define LOGSQL_DECLARE_NONSTD(type) type
16#define LOGSQL_DECLARE_DATA
17#elif defined(LOGSQL_DECLARE_EXPORT)
18#define LOGSQL_DECLARE(type) __declspec(dllexport) type __stdcall
19#define LOGSQL_DECLARE_NONSTD(type) __declspec(dllexport) type
20#define LOGSQL_DECLARE_DATA __declspec(dllexport)
21#else
22#define LOGSQL_DECLARE(type) __declspec(dllimport) type __stdcall
23#define LOGSQL_DECLARE_NONSTD(type) __declspec(dllimport) type
24#define LOGSQL_DECLARE_DATA __declspec(dllimport)
25#endif
26
27#define LOG_SQL_PLUGIN_VERSION 20080318
28
29/* Registration function for extract functions */
30
31typedef const char *logsql_item_func(request_rec *r, char *a);
32
33
34typedef enum {
35 LOGSQL_FUNCTION_REQ_FINAL = 0,
36 LOGSQL_FUNCTION_REQ_ORIG
37} logsql_function_req;
38
39LOGSQL_DECLARE(void) log_sql_register_function(apr_pool_t *p,
40 const char *alias, logsql_item_func *func,
41 logsql_function_req want_orig_default);
42
43LOGSQL_DECLARE(void) log_sql_register_alias(server_rec *s, apr_pool_t *p,
44 char key, const char *alias);
45
46typedef enum {
47 LOGSQL_DATATYPE_INT = 0,
48 LOGSQL_DATATYPE_SMALLINT,
49 LOGSQL_DATATYPE_VARCHAR,
50 LOGSQL_DATATYPE_CHAR,
51 LOGSQL_DATATYPE_BIGINT
52} logsql_field_datatype;
53
54LOGSQL_DECLARE(void) log_sql_register_field(apr_pool_t *p,
55 const char *alias,
56 const char *funcalias, const char *param,
57 const char *sql_field_name,
58 logsql_field_datatype datatype, apr_size_t size);
59
60LOGSQL_DECLARE(void) log_sql_register_finish(server_rec *s);
61
62/* DB Connection structure holds connection handle */
63typedef struct {
64 int connected; /* Are we connected to the DB */
65 void *handle; /* DB specific connection pointer */
66 apr_pool_t *p; /* Pool to allocate handle off of */
67 apr_table_t *parms; /* DB connection parameters */
68} logsql_dbconnection;
69
70/* open db handle return values*/
71typedef enum {
72 LOGSQL_OPENDB_FAIL = 0,
73 LOGSQL_OPENDB_SUCCESS,
74 LOGSQL_OPENDB_ALREADY,
75 LOGSQL_OPENDB_PRESERVE
76} logsql_opendb_ret;
77
78typedef enum {
79 LOGSQL_QUERY_SUCCESS = 0,
80 LOGSQL_QUERY_FAIL,
81 LOGSQL_QUERY_NOLINK,
82 LOGSQL_QUERY_NOTABLE,
83 LOGSQL_QUERY_PRESERVED
84} logsql_query_ret;
85
86typedef enum {
87 LOGSQL_TABLE_SUCCESS = 0,
88 LOGSQL_TABLE_FAIL
89} logsql_table_ret;
90
91/* Table type to create/log to */
92typedef enum {
93 LOGSQL_TABLE_ACCESS = 0,
94 LOGSQL_TABLE_NOTES,
95 LOGSQL_TABLE_HEADERSOUT,
96 LOGSQL_TABLE_HEADERSIN,
97 LOGSQL_TABLE_COOKIES
98} logsql_tabletype;
99
100/* All Tables */
101#define LOGSQL_TABLE_ALL LOGSQL_TABLE_ACCESS | LOGSQL_TABLE_NOTES | \
102 LOGSQL_TABLE_HEADERSIN | LOGSQL_TABLE_HEADERSOUT | LOGSQL_TABLE_COOKIES
103
104/* MySQL module calls */
105
106/* Registration function for database drivers */
107
108typedef struct {
109 /* name of the provider */
110 const char *providername;
111 /* NULL terminated list of drivers strings */
112 const char **provided_drivers;
113 /* create a connection to the underlying database layer */
114 logsql_opendb_ret (*connect)(server_rec *s, logsql_dbconnection *db);
115 /* disconnect from the underlying database layer */
116 void (*disconnect)(logsql_dbconnection *db);
117 /* escape the SQL statement according to database rules */
118 const char *(*escape)(request_rec *r,const char *from_str, apr_pool_t *p,
119 logsql_dbconnection *db);
120 /* insert a SQL query statement */
121 logsql_query_ret (*insert)(request_rec *r,logsql_dbconnection *db,
122 const char *query);
123 /* create a SQL table named table_name of table_type */
124 logsql_table_ret (*create_table)(request_rec *r, logsql_dbconnection *db,
125 logsql_tabletype table_type, const char *table_name);
126} logsql_dbdriver;
127
128LOGSQL_DECLARE(void) log_sql_register_driver(apr_pool_t *p,
129 logsql_dbdriver *driver);
130
131/* Module initialization Macros */
132#define LOGSQL_MODULE(driver) log_sql_##driver##_module
133#if defined(WITH_APACHE20)
134# define LOGSQL_MODULE_FORWARD(driver) module AP_MODULE_DECLARE_DATA LOGSQL_MODULE(driver)
135# define LOGSQL_REGISTER(driver) \
136 static int post_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s); \
137 static void register_hooks(apr_pool_t *p) { \
138 ap_hook_post_config(post_config, NULL, NULL, APR_HOOK_REALLY_FIRST); \
139 } \
140 \
141 LOGSQL_MODULE_FORWARD(driver) = { \
142 STANDARD20_MODULE_STUFF, \
143 NULL, NULL, NULL, NULL, NULL, register_hooks }; \
144 static int post_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
145#elif defined(WITH_APACHE13)
146# define LOGSQL_MODULE_FORWARD(driver) module MODULE_VAR_EXPORT LOGSQL_MODULE(driver)
147# define LOGSQL_REGISTER(driver) \
148 static void module_init(server_rec *s, apr_pool_t *p); \
149 LOGSQL_MODULE_FORWARD(driver) = { \
150 STANDARD_MODULE_STUFF, module_init }; \
151 static void module_init(server_rec *s, apr_pool_t *p)
152#endif
153
154#if defined(WITH_APACHE20)
155# define LOGSQL_SHUTDOWN \
156 static
157#endif
158
159
160#if defined(WITH_APACHE20)
161#define LOGSQL_REGISTER_RETURN log_sql_register_finish(s); return OK;
162#elif defined(WITH_APACHE13)
163#define LOGSQL_REGISTER_RETURN log_sql_register_finish(s);
164#endif
165
166#endif /* MOD_LOG_SQL_H */