7 #define sql_update dbpool_conn_update 8 #define sql_select dbpool_conn_select 10 static Octstr *sqlbox_logtable;
11 static Octstr *sqlbox_insert_table;
17 static DBPool *pool = NULL;
19 void sqlbox_configure_mssql(
Cfg*
cfg)
26 panic(0,
"SQLBOX: MSSql: group 'sqlbox' is not specified!");
29 if (sqlbox_logtable == NULL) {
30 panic(0,
"Parameter 'sql-log-table' not configured.");
33 if (sqlbox_insert_table == NULL) {
34 panic(0,
"Parameter 'sql-insert-table' not configured.");
39 error(0,
"MSSql: DBPool Error!");
44 sql =
octstr_format(SQLBOX_MSSQL_CREATE_LOG_TABLE, sqlbox_logtable, sqlbox_logtable);
45 #if defined(SQLBOX_TRACE) 48 sql_update(pc, sql, NULL);
51 sql =
octstr_format(SQLBOX_MSSQL_CREATE_INSERT_TABLE, sqlbox_insert_table, sqlbox_insert_table);
52 #if defined(SQLBOX_TRACE) 55 sql_update(pc, sql, NULL);
70 static Octstr *get_numeric_value_or_return_null(
long int num)
78 static Octstr *get_string_value_or_return_null(
Octstr *str)
90 #define st_num(x) (stuffer[stuffcount++] = get_numeric_value_or_return_null(x)) 91 #define st_str(x) (stuffer[stuffcount++] = get_string_value_or_return_null(x)) 92 #define octstr_null_create(x) ((x != NULL) ? octstr_create(x) : octstr_create("")) 93 #define atol_null(x) ((x != NULL) ? atol(x) : -1) 94 #define get_mssql_octstr_col(x) (get_column(gwlist_get(row,x))) 95 #define get_mssql_long_col(x) (atol(octstr_get_cstr(gwlist_get(row,x)))) 97 Msg *mssql_fetch_msg()
106 error(0,
"MSSql: DBPool error!");
110 sql =
octstr_format(SQLBOX_MSSQL_SELECT_QUERY, sqlbox_insert_table);
111 #if defined(SQLBOX_TRACE) 114 if (sql_select(pc, sql, NULL, &res) != 0) {
119 id = get_mssql_octstr_col(0);
123 msg->sms.foreign_id = get_mssql_octstr_col(0);
124 msg->sms.sender = get_mssql_octstr_col(2);
125 msg->sms.receiver = get_mssql_octstr_col(3);
126 msg->sms.udhdata = get_mssql_octstr_col(4);
127 msg->sms.msgdata = get_mssql_octstr_col(5);
128 msg->sms.time = get_mssql_long_col(6);
129 msg->sms.smsc_id = get_mssql_octstr_col(7);
130 msg->sms.service = get_mssql_octstr_col(8);
131 msg->sms.account = get_mssql_octstr_col(9);
133 msg->sms.sms_type = get_mssql_long_col(11);
134 msg->sms.mclass = get_mssql_long_col(12);
135 msg->sms.mwi = get_mssql_long_col(13);
136 msg->sms.coding = get_mssql_long_col(14);
137 msg->sms.compress = get_mssql_long_col(15);
138 msg->sms.validity = get_mssql_long_col(16);
139 msg->sms.deferred = get_mssql_long_col(17);
140 msg->sms.dlr_mask = get_mssql_long_col(18);
141 msg->sms.dlr_url = get_mssql_octstr_col(19);
142 msg->sms.pid = get_mssql_long_col(20);
143 msg->sms.alt_dcs = get_mssql_long_col(21);
144 msg->sms.rpi = get_mssql_long_col(22);
145 msg->sms.charset = get_mssql_octstr_col(23);
146 msg->sms.binfo = get_mssql_octstr_col(25);
147 msg->sms.meta_data = get_mssql_octstr_col(26);
152 msg->sms.boxc_id = get_mssql_octstr_col(24);
155 delet =
octstr_format(SQLBOX_MSSQL_DELETE_QUERY, sqlbox_insert_table,
id);
156 #if defined(SQLBOX_TRACE) 159 sql_update(pc, delet, NULL);
179 error(0,
"MSSql: DBPool Error!");
183 sql =
octstr_format(SQLBOX_MSSQL_INSERT_QUERY, sqlbox_logtable, st_str(momt), st_str(
msg->sms.sender),
184 st_str(
msg->sms.receiver), st_str(
msg->sms.udhdata), st_str(
msg->sms.msgdata), st_num(
msg->sms.time),
185 st_str(
msg->sms.smsc_id), st_str(
msg->sms.service), st_str(
msg->sms.account), st_num(
msg->sms.sms_type),
186 st_num(
msg->sms.mclass), st_num(
msg->sms.mwi), st_num(
msg->sms.coding), st_num(
msg->sms.compress),
187 st_num(
msg->sms.validity), st_num(
msg->sms.deferred), st_num(
msg->sms.dlr_mask), st_str(
msg->sms.dlr_url),
188 st_num(
msg->sms.pid), st_num(
msg->sms.alt_dcs), st_num(
msg->sms.rpi), st_str(
msg->sms.charset),
189 st_str(
msg->sms.boxc_id), st_str(
msg->sms.binfo), st_str(
msg->sms.meta_data), st_str(
msg->sms.foreign_id));
190 #if defined(SQLBOX_TRACE) 193 sql_update(pc, sql, NULL);
194 while (stuffcount > 0) {
210 Octstr *mssql_user, *mssql_pass, *mssql_server, *mssql_database, *mssql_id;
221 panic(0,
"SQLBOX: MSSql: group 'sqlbox' is not specified!");
224 panic(0,
"SQLBOX: MSSql: directive 'id' is not specified!");
242 panic(0,
"SQLBOX: MSSql: connection settings for id '%s' are not specified!",
253 panic(0,
"SQLBOX: MSSql: directive 'username' is not specified!");
255 panic(0,
"SQLBOX: MSSql: directive 'password' is not specified!");
257 panic(0,
"SQLBOX: MSSql: directive 'server' is not specified!");
259 panic(0,
"SQLBOX: MSSql: directive 'database' is not specified!");
264 db_conf = gw_malloc(
sizeof(
DBConf));
282 panic(0,
"SQLBOX: MSSql: database pool has no connections!");
void error(int err, const char *fmt,...)
int(* sql_fetch_msg_list)(List *, long)
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)
long gwlist_len(List *list)
void * gwlist_get(List *list, long pos)
#define cfg_get(grp, varname)
void(* sql_save_list)(List *, Octstr *, int)
void octstr_strip_blanks(Octstr *text)
#define octstr_get_cstr(ostr)
static struct pid_list * found
void dbpool_conn_produce(DBPoolConn *conn)
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)
Octstr * octstr_format(const char *fmt,...)
void octstr_destroy(Octstr *ostr)
#define octstr_create(cstr)
void octstr_destroy_item(void *os)
void dbpool_destroy(DBPool *p)
void debug(const char *place, int err, const char *fmt,...)
int cfg_get_integer(long *n, CfgGroup *grp, Octstr *varname)
DBPoolConn * dbpool_conn_consume(DBPool *p)
CfgGroup * cfg_get_single_group(Cfg *cfg, Octstr *name)
static XMLRPCDocument * msg
void(* sql_save_msg)(Msg *, Octstr *)
int octstr_compare(const Octstr *ostr1, const Octstr *ostr2)
void gwlist_destroy(List *list, gwlist_item_destructor_t *destructor)