78 static DBPool *pool = NULL;
86 static void dlr_mysql_shutdown()
92 static void dlr_mysql_add(
struct dlr_entry *entry)
99 debug(
"dlr.mysql", 0,
"adding DLR entry into database");
108 sql =
octstr_format(
"INSERT INTO `%S` (`%S`, `%S`, `%S`, `%S`, `%S`, `%S`, `%S`, `%S`, `%S`) VALUES " 109 "(?, ?, ?, ?, ?, ?, ?, ?, 0)",
124 #if defined(DLR_TRACE) 143 List *result = NULL, *row;
156 sql =
octstr_format(
"SELECT `%S`, `%S`, `%S`, `%S`, `%S`, `%S` FROM `%S` WHERE `%S`=? AND `%S`=? %S LIMIT 1",
168 #if defined(DLR_TRACE) 184 #define LO2CSTR(r, i) octstr_get_cstr(gwlist_get(r, i)) 190 res->
mask = atoi(LO2CSTR(row,0));
213 debug(
"dlr.mysql", 0,
"removing DLR from database");
225 sql =
octstr_format(
"DELETE FROM `%S` WHERE `%S`=? AND `%S`=? %S LIMIT 1",
234 #if defined(DLR_TRACE) 251 Octstr *sql, *os_status, *like;
256 debug(
"dlr.mysql", 0,
"updating DLR status in database");
268 sql =
octstr_format(
"UPDATE `%S` SET `%S`=? WHERE `%S`=? AND `%S`=? %S LIMIT 1",
280 #if defined(DLR_TRACE) 295 static long dlr_mysql_messages(
void)
307 #if defined(DLR_TRACE) 329 static void dlr_mysql_flush(
void)
341 #if defined(DLR_TRACE) 346 error(0,
"DLR: MYSQL: Error while flushing dlr entries from database");
348 debug(
"dlr.mysql", 0,
"Flushing %d DLR entries from database", rows);
355 .dlr_add = dlr_mysql_add,
356 .dlr_get = dlr_mysql_get,
357 .dlr_update = dlr_mysql_update,
358 .dlr_remove = dlr_mysql_remove,
359 .dlr_shutdown = dlr_mysql_shutdown,
360 .dlr_messages = dlr_mysql_messages,
361 .dlr_flush = dlr_mysql_flush
368 Octstr *mysql_host, *mysql_user, *mysql_pass, *mysql_db, *mysql_id;
379 panic(0,
"DLR: MySQL: group 'dlr-db' is not specified!");
382 panic(0,
"DLR: MySQL: directive 'id' is not specified!");
417 panic(0,
"DLR: MySQL: connection settings for id '%s' are not specified!",
428 panic(0,
"DLR: MySQL: directive 'host' is not specified!");
430 panic(0,
"DLR: MySQL: directive 'username' is not specified!");
432 panic(0,
"DLR: MySQL: directive 'password' is not specified!");
434 panic(0,
"DLR: MySQL: directive 'database' is not specified!");
440 db_conf = gw_malloc(
sizeof(
DBConf));
459 panic(0,
"DLR: MySQL: database pool has no connections!");
void error(int err, const char *fmt,...)
void octstr_replace(Octstr *haystack, Octstr *needle, Octstr *repl)
long dbpool_conn_count(DBPool *p)
DBPool * dbpool_create(enum db_type db_type, DBConf *conf, unsigned int connections)
gw_assert(wtls_machine->packet_to_send !=NULL)
void gwlist_append(List *list, void *item)
void dlr_db_fields_destroy(struct dlr_db_fields *fields)
struct dlr_entry * dlr_entry_create(void)
long gwlist_len(List *list)
void * gwlist_get(List *list, long pos)
#define cfg_get(grp, varname)
#define octstr_get_cstr(ostr)
static struct pid_list * found
void dbpool_conn_produce(DBPoolConn *conn)
static struct dlr_storage * handles
Octstr * octstr_imm(const char *cstr)
void * gwlist_extract_first(List *list)
#define octstr_duplicate(ostr)
List * cfg_get_multi_group(Cfg *cfg, Octstr *name)
void warning(int err, const char *fmt,...)
Octstr * octstr_format(const char *fmt,...)
void octstr_destroy(Octstr *ostr)
#define octstr_create(cstr)
void octstr_destroy_item(void *os)
struct dlr_storage * dlr_init_mysql(Cfg *cfg)
void dbpool_destroy(DBPool *p)
int dbpool_conn_update(DBPoolConn *conn, const Octstr *sql, List *binds)
void dlr_entry_destroy(struct dlr_entry *dlr)
void debug(const char *place, int err, const char *fmt,...)
int cfg_get_integer(long *n, CfgGroup *grp, Octstr *varname)
int dbpool_conn_select(DBPoolConn *conn, const Octstr *sql, List *binds, List **result)
DBPoolConn * dbpool_conn_consume(DBPool *p)
CfgGroup * cfg_get_single_group(Cfg *cfg, Octstr *name)
struct dlr_db_fields * dlr_db_fields_create(CfgGroup *grp)
int octstr_compare(const Octstr *ostr1, const Octstr *ostr2)
void gwlist_destroy(List *list, gwlist_item_destructor_t *destructor)