[PATCH] libsdb support in 1.3.1
| Newsgroups | gmane.comp.mobile.kannel.devel |
|---|---|
| Message-ID | <OF3E2F2C71.C5A6CFF8-ONCA256D57.0022D7E7-CA256D57.0029CDF8@callista.com.au> |
Hi Stipe, > The stable 1.2.1 is pretty old and there have been some changes in the > code since then. While it is old, we will need to recommend our clients use 1.2.1 until a new stable has been branched. attached is the patch against trunk. -- John Mark Vandenberg Callista Software Services www.callista.com.au Tel: +61 3 9685 7923 (See attached file: sdb.diff)
sdb.diff
(application/octet-stream, 10.8 KB)
? sdb.diff
? test/test_dbpool
? test/test_md5
? test/test_octstr_dump
? test/test_radius_acct
? test/test_radius_pdu
? utils/mtbatch
Index: contrib/sendsms
===================================================================
RCS file: /home/cvs/gateway/contrib/sendsms,v
retrieving revision 1.1
diff -u -u -r1.1 sendsms
--- contrib/sendsms 7 Dec 2000 18:04:30 -0000 1.1
+++ contrib/sendsms 2 Jul 2003 07:40:35 -0000
@@ -6,6 +6,7 @@
PORT = 13013
USERNAME = "tester"
PASSWORD = "foobar"
+FROM = "tester"
NUMBERS = "~/.sendsms.dat"
@@ -37,8 +38,8 @@
def sendsms():
to = urllib.quote_plus(recipient(sys.argv[1]))
text = urllib.quote_plus(string.join(sys.argv[2:], " "))
- url="http://%s:%d/cgi-bin/sendsms?username=%s&password=%s&to=%s&text=%s" \
- % (HOST, PORT, USERNAME, PASSWORD, to, text)
+ url="http://%s:%d/cgi-bin/sendsms?username=%s&password=%s&from=%s&to=%s&text=%s" \
+ % (HOST, PORT, USERNAME, PASSWORD, FROM, to, text)
f = urllib.urlopen(url)
print f.read()
f.close()
Index: doc/examples/dlr-mysql.conf
===================================================================
RCS file: /home/cvs/gateway/doc/examples/dlr-mysql.conf,v
retrieving revision 1.2
diff -u -u -r1.2 dlr-mysql.conf
--- doc/examples/dlr-mysql.conf 5 Aug 2002 21:52:28 -0000 1.2
+++ doc/examples/dlr-mysql.conf 2 Jul 2003 07:40:35 -0000
@@ -24,6 +24,7 @@
# url varchar(255),
# mask int(10),
# status int(10)
+# boxc varchar2(40)
# )
#
@@ -37,4 +38,5 @@
field-url = url
field-mask = mask
field-status = status
+field-boxc-id = boxc
Index: doc/examples/dlr-sdb.conf
===================================================================
RCS file: /home/cvs/gateway/doc/examples/dlr-sdb.conf,v
retrieving revision 1.2
diff -u -u -r1.2 dlr-sdb.conf
--- doc/examples/dlr-sdb.conf 5 Aug 2002 21:52:28 -0000 1.2
+++ doc/examples/dlr-sdb.conf 2 Jul 2003 07:40:35 -0000
@@ -39,6 +39,7 @@
# url varchar(255),
# mask int(10),
# status int(10)
+# boxc varchar(40),
# )
#
# Other DB types may vary. Consult your DB admin for help in creating
@@ -55,4 +56,5 @@
field-url = url
field-mask = mask
field-status = status
+field-boxc-id = boxc
Index: gw/dlr_mysql.c
===================================================================
RCS file: /home/cvs/gateway/gw/dlr_mysql.c,v
retrieving revision 1.1
diff -u -u -r1.1 dlr_mysql.c
--- gw/dlr_mysql.c 19 Jun 2003 22:11:50 -0000 1.1
+++ gw/dlr_mysql.c 2 Jul 2003 07:40:35 -0000
@@ -76,7 +76,7 @@
MYSQL_RES *result;
MYSQL_ROW row;
- sql = octstr_format("SELECT %s, %s, %s, %s, %s FROM %s WHERE %s='%s' AND %s='%s';",
+ sql = octstr_format("SELECT %s, %s, %s, %s, %s, %s FROM %s WHERE %s='%s' AND %s='%s';",
octstr_get_cstr(fields->field_mask), octstr_get_cstr(fields->field_serv),
octstr_get_cstr(fields->field_url), octstr_get_cstr(fields->field_src),
octstr_get_cstr(fields->field_dst), octstr_get_cstr(fields->field_boxc),
Index: gw/dlr_sdb.c
===================================================================
RCS file: /home/cvs/gateway/gw/dlr_sdb.c,v
retrieving revision 1.1
diff -u -u -r1.1 dlr_sdb.c
--- gw/dlr_sdb.c 19 Jun 2003 22:11:50 -0000 1.1
+++ gw/dlr_sdb.c 2 Jul 2003 07:40:35 -0000
@@ -34,14 +34,14 @@
mutex_destroy(dlr_mutex);
}
-static void dlr_add_sdb(struct dlr_entry *dlr)
+static void dlr_sdb_add(struct dlr_entry *dlr)
{
Octstr *sql;
int state;
sql = octstr_format("INSERT INTO %s (%s, %s, %s, %s, %s, %s, %s, %s, %s) VALUES "
"('%s', '%s', '%s', '%s', '%s', '%s', '%d', '%s', '%d')",
- octstr_get_cstr(fields->table), octstr_get_cstr(fields->field_smsc),
+ octstr_get_cstr(fields->table), octstr_get_cstr(fields->field_smsc),
octstr_get_cstr(fields->field_ts),
octstr_get_cstr(fields->field_src), octstr_get_cstr(fields->field_dst),
octstr_get_cstr(fields->field_serv), octstr_get_cstr(fields->field_url),
@@ -49,9 +49,13 @@
octstr_get_cstr(fields->field_status),
octstr_get_cstr(dlr->smsc), octstr_get_cstr(dlr->timestamp),
octstr_get_cstr(dlr->source), octstr_get_cstr(dlr->destination),
- octstr_get_cstr(dlr->service), octstr_get_cstr(dlr->url), mask,
+ octstr_get_cstr(dlr->service), octstr_get_cstr(dlr->url), dlr->mask,
octstr_get_cstr(dlr->boxc_id), 0);
+#if defined(DLR_TRACE)
+ debug("dlr.sdb", 0, "sql: %s", octstr_get_cstr(sql));
+#endif
+
mutex_lock(dlr_mutex);
state = sdb_query(connection, octstr_get_cstr(sql), NULL, NULL);
mutex_unlock(dlr_mutex);
@@ -62,34 +66,62 @@
dlr_entry_destroy(dlr);
}
-static int sdb_callback_add(int n, char **p, void *row)
+static int sdb_callback_add(int n, char **p, void *data)
{
- if (!n) {
- debug("dlr.sdb", 0, "no rows found");
+ struct dlr_entry *res = (struct dlr_entry *) data;
+
+ if (n != 6) {
+ debug("dlr.sdb", 0, "Result has incorrect number of columns: %d", n);
return 0;
}
- /* strip string into words */
- row = octstr_split(octstr_imm(p[0]), octstr_imm(" "));
- if (list_len(row) != 6) {
- debug("dlr.sdb", 0, "Row has wrong length %ld", list_len(row));
+#if defined(DLR_TRACE)
+ debug("dlr.sdb", 0, "row=%s,%s,%s,%s,%s,%s",p[0],p[1],p[2],p[3],p[4],p[5]);
+#endif
+
+ if (res->service != NULL) {
+ debug("dlr.sdb", 0, "Row already stored");
return 0;
}
- return 0;
+ res->mask = atoi(p[0]);
+
+ res->service = octstr_create(p[1]);
+ res->url = octstr_create(p[2]);
+ res->source = octstr_create(p[3]);
+ res->destination = octstr_create(p[4]);
+ res->boxc_id = octstr_create(p[5]);
+
+ return 0;
}
-static int sdb_callback_msgs(int n, char **p, void *row)
-{}
+static int sdb_callback_msgs(int n, char **p, void *data)
+{
+ long *count = (long *) data;
+
+ if (n != 1) {
+ debug("dlr.sdb", 0, "Result has incorrect number of columns: %d", n);
+ return 0;
+ }
+
+#if defined(DLR_TRACE)
+ debug("dlr.sdb", 0, "messages=%s",p[0]);
+#endif
+
+ *count = atol(p[0]);
+
+ return 0;
+}
static struct dlr_entry* dlr_sdb_get(const Octstr *smsc, const Octstr *ts, const Octstr *dst)
{
Octstr *sql;
int state;
- List *row;
- struct dlr_entry *res = NULL;
+ struct dlr_entry *res = dlr_entry_create();
+
+ gw_assert(res);
- sql = octstr_format("SELECT %s, %s, %s, %s, %s FROM %s WHERE %s='%s' AND %s='%s'",
+ sql = octstr_format("SELECT %s, %s, %s, %s, %s, %s FROM %s WHERE %s='%s' AND %s='%s';",
octstr_get_cstr(fields->field_mask), octstr_get_cstr(fields->field_serv),
octstr_get_cstr(fields->field_url), octstr_get_cstr(fields->field_src),
octstr_get_cstr(fields->field_dst), octstr_get_cstr(fields->field_boxc),
@@ -102,37 +134,19 @@
#endif
mutex_lock(dlr_mutex);
- state = sdb_query(connection, octstr_get_cstr(sql), sdb_callback_add, row);
+ state = sdb_query(connection, octstr_get_cstr(sql), sdb_callback_add, res);
mutex_unlock(dlr_mutex);
octstr_destroy(sql);
if (state == -1) {
+ dlr_entry_destroy(res);
error(0, "SDB: error in finding DLR");
return NULL;
}
- debug("dlr.sdb", 0, "Found entry, row[0]=%s, row[1]=%s, row[2]=%s, row[3]=%s row[4]=%s row[5]=%s",
- octstr_get_cstr(list_get(row, 0)),
- octstr_get_cstr(list_get(row, 1)),
- octstr_get_cstr(list_get(row, 2)),
- octstr_get_cstr(list_get(row, 3)),
- octstr_get_cstr(list_get(row, 4)),
- octstr_get_cstr(list_get(row, 5)));
-
- res = dlr_entry_create();
- gw_assert(res);
- res->dlr_mask = atoi(octstr_get_cstr(list_get(row, 0)));
- res->dlr_service = octstr_duplicate(list_get(row, 1));
- res->dlr_url = octstr_duplicate(list_get(row, 2));
- res->source = octstr_duplicate(list_get(row, 3));
- res->destination = octstr_duplicate(list_get(row, 4));
- res->boxc_id = octstr_duplicate(list_get(row, 5));
-
- list_destroy(row, octstr_destroy_item);
-
return res;
}
-static void dlr_sdb_update(const Octstr *smsc, const Octstr *ts, const Octstr *dst)
+static void dlr_sdb_update(const Octstr *smsc, const Octstr *ts, const Octstr *dst, int status)
{
Octstr *sql;
int state;
@@ -140,9 +154,9 @@
debug("dlr.sdb", 0, "updating DLR status in database");
sql = octstr_format("UPDATE %s SET %s=%d WHERE %s='%s' AND %s='%s'",
octstr_get_cstr(fields->table),
- octstr_get_cstr(fields->field_status), typ,
+ octstr_get_cstr(fields->field_status), status,
octstr_get_cstr(fields->field_smsc), octstr_get_cstr(smsc),
- octstr_get_cstr(field_ts), octstr_get_cstr(ts));
+ octstr_get_cstr(fields->field_ts), octstr_get_cstr(ts));
#if defined(DLR_TRACE)
debug("dlr.sdb", 0, "sql: %s", octstr_get_cstr(sql));
@@ -186,26 +200,21 @@
int state;
long res;
- /*
- * XXXX select * ... is not efficient.
- * Please use here SELECT count(*) ... , see mysql for example.
- */
- sql = octstr_format("SELECT * FROM %s", octstr_get_cstr(table));
+ sql = octstr_format("SELECT COUNT(*) FROM %s", octstr_get_cstr(fields->table));
#if defined(DLR_TRACE)
debug("dlr.sdb", 0, "sql: %s", octstr_get_cstr(sql));
#endif
mutex_lock(dlr_mutex);
- state = sdb_query(connection, octstr_get_cstr(sql), sdb_callback_msgs, NULL);
+ state = sdb_query(connection, octstr_get_cstr(sql), sdb_callback_msgs, &res);
+ mutex_unlock(dlr_mutex);
octstr_destroy(sql);
if (state == -1) {
error(0, "SDB: error in selecting ammount of waiting DLRs");
mutex_unlock(dlr_mutex);
return -1;
}
- res = (long) state;
- mutex_unlock(dlr_mutex);
return res;
}
@@ -215,7 +224,7 @@
Octstr *sql;
int state;
- sql = octstr_format("DELETE FROM %s", octstr_get_cstr(table));
+ sql = octstr_format("DELETE FROM %s", octstr_get_cstr(fields->table));
#if defined(DLR_TRACE)
debug("dlr.sdb", 0, "sql: %s", octstr_get_cstr(sql));
@@ -242,7 +251,7 @@
.dlr_flush = dlr_sdb_flush
};
-static struct dlr_storage *dlr_init_sdb(Cfg* cfg)
+struct dlr_storage *dlr_init_sdb(Cfg* cfg)
{
CfgGroup *grp;
List *grplist;
Index: gwlib/dbpool.h
===================================================================
RCS file: /home/cvs/gateway/gwlib/dbpool.h,v
retrieving revision 1.1
diff -u -u -r1.1 dbpool.h
--- gwlib/dbpool.h 11 Mar 2003 15:30:22 -0000 1.1
+++ gwlib/dbpool.h 2 Jul 2003 07:40:35 -0000
@@ -5,7 +5,7 @@
#ifndef GWDBPOOL_H
#define GWDBPOOL_H
-#if defined(HAVE_MYSQL) || defined(HAVE_SDB)
+#if defined(HAVE_MYSQL)
#define HAVE_DBPOOL 1
#endif