all: updated FSF address in GPL text
[sip-router] / modules / db_berkeley / km_bdb_lib.h
1 /*
2  * $Id$
3  *
4  * db_berkeley module, portions of this code were templated using
5  * the dbtext and postgres modules.
6
7  * Copyright (C) 2007 Cisco Systems
8  *
9  * This file is part of SIP-router, a free SIP server.
10  *
11  * SIP-router is free software; you can redistribute it and/or modify
12  * it under the terms of the GNU General Public License as published by
13  * the Free Software Foundation; either version 2 of the License, or
14  * (at your option) any later version
15  *
16  * SIP-router is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  * GNU General Public License for more details.
20  *
21  * You should have received a copy of the GNU General Public License 
22  * along with this program; if not, write to the Free Software 
23  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
24  * 
25  * History:
26  * --------
27  * 2007-09-19  genesis (wiquan)
28  */
29
30 /*! \file
31  * Berkeley DB : 
32  *
33  * \ingroup database
34  */
35
36
37
38 #ifndef _KM_BDB_LIB_H_
39 #define _KM_BDB_LIB_H_
40
41 #include <stdlib.h>
42 #include <syslog.h>
43 #include <sys/stat.h>
44 #include <db.h>
45
46 #include "../../str.h"
47 #include "../../lib/srdb1/db.h"
48 #include "../../lib/srdb1/db_val.h"
49 #include "../../locking.h"
50
51 /*max number of columns in a table*/
52 #define MAX_NUM_COLS 32
53
54 /*max char width of a table row*/
55 #define MAX_ROW_SIZE 2048
56
57 /*max char width of a table name*/
58 #define MAX_TABLENAME_SIZE 64
59
60 #define METADATA_COLUMNS "METADATA_COLUMNS"
61 #define METADATA_KEY "METADATA_KEY"
62 #define METADATA_READONLY "METADATA_READONLY"
63 #define METADATA_LOGFLAGS "METADATA_LOGFLAGS"
64 #define METADATA_DEFAULTS "METADATA_DEFAULTS"
65
66 /*journal logging flag masks */
67 #define JLOG_NONE   0
68 #define JLOG_INSERT 1
69 #define JLOG_DELETE 2
70 #define JLOG_UPDATE 4
71 #define JLOG_FILE   8
72 #define JLOG_STDOUT 16
73 #define JLOG_SYSLOG 32
74
75 #define DELIM "|"
76 #define DELIM_LEN (sizeof(DELIM)-1)
77
78 typedef db_val_t bdb_val_t, *bdb_val_p;
79
80 typedef struct _row
81 {
82         bdb_val_p fields;
83         struct _row *prev;
84         struct _row *next;
85 } row_t, *row_p;
86
87 typedef struct _column
88 {
89         str name;
90         str dv;     /* default value */
91         int type;
92         int flag;
93 } column_t, *column_p;
94
95 typedef struct _table
96 {
97         str name;
98         DB *db;
99         gen_lock_t sem;
100         column_p colp [MAX_NUM_COLS];
101         int ncols;
102         int nkeys;
103         int ro;       /*db readonly flag*/
104         int logflags; /*flags indication what-where to journal log */
105         FILE* fp;     /*jlog file pointer */
106         time_t t;     /*jlog creation time */
107         ino_t ino;
108 } table_t, *table_p;
109
110 typedef struct _tbl_cache
111 {
112         gen_lock_t sem;
113         table_p dtp;
114         struct _tbl_cache *prev;
115         struct _tbl_cache *next;
116 } tbl_cache_t, *tbl_cache_p;
117
118 typedef struct _database
119 {
120         str name;
121         DB_ENV *dbenv;
122         tbl_cache_p tables;
123 } database_t, *database_p;
124
125 typedef struct _db_parms
126 {
127         u_int32_t cache_size;
128         int auto_reload;
129         int log_enable;
130         int journal_roll_interval;
131 } db_parms_t, *db_parms_p;
132
133
134 int km_bdblib_init(db_parms_p _parms);
135 int km_bdblib_destroy(void);
136 int km_bdblib_close(char* _n);
137 int km_bdblib_reopen(char* _n);
138 int km_bdblib_recover(table_p _tp, int error_code);
139 void km_bdblib_log(int op, table_p _tp, char* _msg, int len);
140 int km_bdblib_create_dbenv(DB_ENV **dbenv, char* home);
141 int km_bdblib_create_journal(table_p _tp);
142 database_p      km_bdblib_get_db(str *_s);
143 tbl_cache_p     km_bdblib_get_table(database_p _db, str *_s);
144 table_p         km_bdblib_create_table(database_p _db, str *_s);
145
146 int db_free(database_p _dbp);
147 int tbl_cache_free(tbl_cache_p _tbc);
148 int tbl_free(table_p _tp);
149
150 int km_load_metadata_columns(table_p _tp);
151 int km_load_metadata_keys(table_p _tp);
152 int km_load_metadata_readonly(table_p _tp);
153 int km_load_metadata_logflags(table_p _tp);
154 int km_load_metadata_defaults(table_p _tp);
155
156 int km_bdblib_valtochar(table_p _tp, int* _lres, char* _k, int* _klen, db_val_t* _v, int _n, int _ko);
157
158 #endif