1
0
Fork 0

minor fixes to extras

This commit is contained in:
bagyenda 2007-09-06 00:46:41 +00:00
parent 61d76e1a14
commit 45c6276727
5 changed files with 36 additions and 34 deletions

View File

@ -3,10 +3,10 @@
KANNELCONF = /usr/local/bin/gw-config KANNELCONF = /usr/local/bin/gw-config
PGCONF = /usr/local/pgsql/bin/pg_config PGCONF = /usr/local/pgsql/bin/pg_config
CC = gcc CC = gcc
MBUNIDIR = ../mbuni MBUNIDIR = ../..
LIBTOOL = libtool LIBTOOL = libtool
ARCH = $(shell uname -s) ARCH = $(shell uname -s)
CFLAGS = -Wall -g -fPIC -I$(MBUNIDIR) -g -I$(MBUNIDIR)/mmlib `$(KANNELCONF) --cflags` -I`$(PGCONF) --includedir` CFLAGS = -Wall -g -fPIC -I$(MBUNIDIR) -g -I$(MBUNIDIR)/mmlib `$(KANNELCONF) --cflags | sed 's/-O2//g'` -I`$(PGCONF) --includedir`
ifeq ($(ARCH),Darwin) ifeq ($(ARCH),Darwin)
XLDFLAGS=-dynamiclib -Wl,-flat_namespace,-undefined,suppress -arch i386 -arch ppc XLDFLAGS=-dynamiclib -Wl,-flat_namespace,-undefined,suppress -arch i386 -arch ppc

View File

@ -93,7 +93,7 @@ struct pgfile_t {
PGconn *conn; PGconn *conn;
char dir[256+1]; char dir[256+1];
char _pad[4]; /* paranoia */ char _pad[4]; /* paranoia */
long qid; /* internal key into table (if any) */ int64_t qid; /* internal key into table (if any) */
}; };
@ -121,7 +121,7 @@ static int pgq_free_envelope(MmsEnvelope *e, int removefromqueue)
/* copy to separate table. */ /* copy to separate table. */
PGresult *res; PGresult *res;
sprintf(cmd, "INSERT INTO archived_mms_messages SELECT " sprintf(cmd, "INSERT INTO archived_mms_messages SELECT "
" * from mms_messages WHERE id = %ld", qfs->qid); " * from mms_messages WHERE id = %lld", qfs->qid);
res = PQexec(qfs->conn, cmd); res = PQexec(qfs->conn, cmd);
if (PQresultStatus(res) != PGRES_COMMAND_OK) { if (PQresultStatus(res) != PGRES_COMMAND_OK) {
@ -132,7 +132,7 @@ static int pgq_free_envelope(MmsEnvelope *e, int removefromqueue)
PQclear(res); PQclear(res);
sprintf(cmd, "INSERT INTO archived_mms_message_headers SELECT " sprintf(cmd, "INSERT INTO archived_mms_message_headers SELECT "
" * from mms_message_headers WHERE qid = %ld", qfs->qid); " * from mms_message_headers WHERE qid = %lld", qfs->qid);
res = PQexec(qfs->conn, cmd); res = PQexec(qfs->conn, cmd);
if (PQresultStatus(res) != PGRES_COMMAND_OK) { if (PQresultStatus(res) != PGRES_COMMAND_OK) {
@ -142,7 +142,7 @@ static int pgq_free_envelope(MmsEnvelope *e, int removefromqueue)
} else } else
PQclear(res); PQclear(res);
sprintf(cmd, "DELETE from mms_messages WHERE id = %ld", qfs->qid); sprintf(cmd, "DELETE from mms_messages WHERE id = %lld", qfs->qid);
res = PQexec(qfs->conn, cmd); res = PQexec(qfs->conn, cmd);
if (PQresultStatus(res) != PGRES_COMMAND_OK) if (PQresultStatus(res) != PGRES_COMMAND_OK)
ret = -1; ret = -1;
@ -268,7 +268,7 @@ static MmsEnvelope *pgq_queue_readenvelope(char *qf, char *mms_queuedir, int sho
NULL, NULL,
NULL, NULL,
qf, qf,
sizeof (struct pgfile_t)); sizeof (struct pgfile_t), NULL);
/* set the private data. */ /* set the private data. */
pgs = e->qfs_data; pgs = e->qfs_data;
@ -427,7 +427,7 @@ static int writeenvelope(MmsEnvelope *e, int newenv)
gw_assert(e); gw_assert(e);
if (!newenv) { if (!newenv) {
sprintf(cmd, "DELETE FROM mms_message_headers WHERE qid = %ld", qfs->qid); sprintf(cmd, "DELETE FROM mms_message_headers WHERE qid = %lld", qfs->qid);
r = PQexec(qfs->conn, cmd); r = PQexec(qfs->conn, cmd);
PQclear(r); PQclear(r);
} }
@ -457,7 +457,7 @@ static int writeenvelope(MmsEnvelope *e, int newenv)
xfrom = gw_malloc(2*octstr_len(e->from)+1); xfrom = gw_malloc(2*octstr_len(e->from)+1);
PQescapeStringConn(qfs->conn, xfrom, octstr_get_cstr(e->from), octstr_len(e->from), NULL); PQescapeStringConn(qfs->conn, xfrom, octstr_get_cstr(e->from), octstr_len(e->from), NULL);
sprintf(cmd, "UPDATE mms_messages SET num_attempts = %ld, sender='%s' %s %s %s WHERE id = %ld", sprintf(cmd, "UPDATE mms_messages SET num_attempts = %ld, sender='%s' %s %s %s WHERE id = %lld",
e->attempts, xfrom, lastt, sendt, expiryt, qfs->qid); e->attempts, xfrom, lastt, sendt, expiryt, qfs->qid);
gw_free(xfrom); gw_free(xfrom);
@ -571,8 +571,8 @@ static Octstr *pgq_queue_add(Octstr *from, List *to,
int dlr, int dlr,
char *directory, Octstr *mmscname) char *directory, Octstr *mmscname)
{ {
char qf[QFNAMEMAX]; char qf[QFNAMEMAX], xqid[128];
long qid; int64_t qid;
MmsEnvelope *e; MmsEnvelope *e;
Octstr *ms = NULL, *res = NULL, *xcmd = NULL; Octstr *ms = NULL, *res = NULL, *xcmd = NULL;
struct pgfile_t *qfs = NULL; struct pgfile_t *qfs = NULL;
@ -595,11 +595,11 @@ static Octstr *pgq_queue_add(Octstr *from, List *to,
s = PQgetvalue(r, 0, 0); s = PQgetvalue(r, 0, 0);
gw_assert(s); gw_assert(s);
qid = strtoul(s, NULL, 10); qid = strtoull(s, NULL, 10);
PQclear(r); PQclear(r);
/* make the long queue id. Including the integer qid ensures uniqueness.*/ /* make the long queue id. Including the integer qid ensures uniqueness.*/
sprintf(qf, "%cf%ld-%ld.%d.x%d.%ld", sprintf(qf, "%cf%lld-%ld.%d.x%d.%ld",
MQF, MQF,
qid, qid,
(long)time(NULL) % 10000, (long)time(NULL) % 10000,
@ -611,9 +611,7 @@ static Octstr *pgq_queue_add(Octstr *from, List *to,
senddate,expirydate,token,vaspid,vasid, senddate,expirydate,token,vaspid,vasid,
url1,url2,hdrs,dlr,mmscname,m, url1,url2,hdrs,dlr,mmscname,m,
qf, qf,
sizeof(struct pgfile_t)); sizeof(struct pgfile_t), &ms);
ms = mms_tobinary(m); /* Convert message to string. */
qfs = e->qfs_data; qfs = e->qfs_data;
qfs->conn = conn; qfs->conn = conn;
@ -626,9 +624,10 @@ static Octstr *pgq_queue_add(Octstr *from, List *to,
PQescapeStringConn(qfs->conn, xfrom, octstr_get_cstr(from), octstr_len(from), NULL); PQescapeStringConn(qfs->conn, xfrom, octstr_get_cstr(from), octstr_len(from), NULL);
data = (void *)PQescapeByteaConn(qfs->conn, (void *)octstr_get_cstr(ms), octstr_len(ms), &dlen); data = (void *)PQescapeByteaConn(qfs->conn, (void *)octstr_get_cstr(ms), octstr_len(ms), &dlen);
sprintf(xqid, "%lld", qid);
xcmd = octstr_format("INSERT INTO mms_messages (id, qdir, qfname, sender, data,expire_date) VALUES " xcmd = octstr_format("INSERT INTO mms_messages (id, qdir, qfname, sender, data,expire_date) VALUES "
" (%ld, '%s', '%s', '%s', E'%s'::bytea, current_timestamp)", " (%s, '%s', '%s', '%s', E'%s'::bytea, current_timestamp)",
qid, directory, qf, xfrom, data); xqid, directory, qf, xfrom, data);
PQfreemem(data); PQfreemem(data);
gw_free(xfrom); gw_free(xfrom);
@ -696,7 +695,7 @@ static int pgq_queue_update(MmsEnvelope *e)
static int pgq_queue_replacedata(MmsEnvelope *e, MmsMsg *m) static int pgq_queue_replacedata(MmsEnvelope *e, MmsMsg *m)
{ {
char *data; char *data, xqid[128];
size_t dlen; size_t dlen;
struct pgfile_t *qfs; struct pgfile_t *qfs;
int ret = 0; int ret = 0;
@ -709,8 +708,9 @@ static int pgq_queue_replacedata(MmsEnvelope *e, MmsMsg *m)
ms = mms_tobinary(m); ms = mms_tobinary(m);
data = (void *)PQescapeByteaConn(qfs->conn, (void *)octstr_get_cstr(ms), octstr_len(ms), &dlen); data = (void *)PQescapeByteaConn(qfs->conn, (void *)octstr_get_cstr(ms), octstr_len(ms), &dlen);
xcmd = octstr_format("UPDATE mms_messages SET data=E'%s' WHERE id = %ld", sprintf(xqid, "%lld", qfs->qid);
data, qfs->qid); xcmd = octstr_format("UPDATE mms_messages SET data=E'%s' WHERE id = %s",
data, xqid);
r = PQexec(qfs->conn, octstr_get_cstr(xcmd)); r = PQexec(qfs->conn, octstr_get_cstr(xcmd));
ret = (PQresultStatus(r) != PGRES_COMMAND_OK) ? -1 : 0; /* do nothing about error. we are in a transaction.*/ ret = (PQresultStatus(r) != PGRES_COMMAND_OK) ? -1 : 0; /* do nothing about error. we are in a transaction.*/
PQclear(r); PQclear(r);
@ -735,7 +735,7 @@ static MmsMsg *pgq_queue_getdata(MmsEnvelope *e)
qfs = e->qfs_data; qfs = e->qfs_data;
sprintf(cmd, "SELECT data from mms_messages WHERE id = %ld", qfs->qid); sprintf(cmd, "SELECT data from mms_messages WHERE id = %lld", qfs->qid);
r = PQexec(qfs->conn, cmd); r = PQexec(qfs->conn, cmd);
if (PQresultStatus(r) != PGRES_TUPLES_OK || if (PQresultStatus(r) != PGRES_TUPLES_OK ||

View File

@ -6,7 +6,7 @@
-- Master messages table -- Master messages table
CREATE TABLE mms_messages ( CREATE TABLE mms_messages (
id serial PRIMARY KEY, id bigserial PRIMARY KEY,
qdir varchar(256) NOT NULL, qdir varchar(256) NOT NULL,
qfname varchar(256) NOT NULL, qfname varchar(256) NOT NULL,
sender varchar(256) NOT NULL, sender varchar(256) NOT NULL,
@ -33,7 +33,7 @@ CREATE VIEW mms_messages_view AS SELECT
-- Table for envelope headers. -- Table for envelope headers.
CREATE TABLE mms_message_headers ( CREATE TABLE mms_message_headers (
id serial PRIMARY KEY, id bigserial PRIMARY KEY,
qid int REFERENCES mms_messages ON UPDATE CASCADE ON DELETE CASCADE, qid int REFERENCES mms_messages ON UPDATE CASCADE ON DELETE CASCADE,
item varchar(64) NOT NULL, item varchar(64) NOT NULL,

View File

@ -219,7 +219,7 @@ static MmsEnvelope *mms_queue_readenvelope(char *qf, char *mms_queuedir, int sho
NULL, NULL,
NULL, NULL,
qf, qf,
sizeof (struct qfile_t)); sizeof (struct qfile_t), NULL);
e->to = gwlist_create(); e->to = gwlist_create();
qfs = e->qfs_data; qfs = e->qfs_data;
@ -721,7 +721,7 @@ static Octstr *mms_queue_add(Octstr *from, List *to,
char qf[QFNAMEMAX], subdir[64]; char qf[QFNAMEMAX], subdir[64];
int fd; int fd;
MmsEnvelope *e; MmsEnvelope *e;
Octstr *ms, *res = NULL; Octstr *ms = NULL, *res = NULL;
struct qfile_t *qfs = NULL; struct qfile_t *qfs = NULL;
fd = mkqf(qf, subdir, directory); fd = mkqf(qf, subdir, directory);
@ -736,10 +736,7 @@ static Octstr *mms_queue_add(Octstr *from, List *to,
senddate,expirydate,token,vaspid,vasid, senddate,expirydate,token,vaspid,vasid,
url1,url2,hdrs,dlr,mmscname,m, url1,url2,hdrs,dlr,mmscname,m,
octstr_get_cstr(res), octstr_get_cstr(res),
sizeof(struct qfile_t)); sizeof(struct qfile_t), &ms);
ms = mms_tobinary(m); /* Convert message to string. */
qfs = e->qfs_data; qfs = e->qfs_data;
strncpy(qfs->name, qf, sizeof qfs->name); strncpy(qfs->name, qf, sizeof qfs->name);
strncpy(qfs->subdir, subdir, sizeof qfs->subdir); strncpy(qfs->subdir, subdir, sizeof qfs->subdir);
@ -833,7 +830,8 @@ MmsEnvelope *mms_queue_create_envelope(Octstr *from, List *to,
Octstr *mmscname, Octstr *mmscname,
MmsMsg *m, MmsMsg *m,
char *xqfname, char *xqfname,
int extra_space) int extra_space,
Octstr **binary_mms)
{ {
MmsEnvelope *e; MmsEnvelope *e;
Octstr *msgid = NULL, *ms = NULL, *r, *xfrom; Octstr *msgid = NULL, *ms = NULL, *r, *xfrom;
@ -892,7 +890,10 @@ MmsEnvelope *mms_queue_create_envelope(Octstr *from, List *to,
t->process = 1; t->process = 1;
gwlist_append(e->to, t); gwlist_append(e->to, t);
} }
octstr_destroy(ms); if (binary_mms)
*binary_mms = ms;
else
octstr_destroy(ms);
return e; return e;
} }

View File

@ -153,7 +153,7 @@ typedef struct MmsQueueHandlerFuncs {
extern MmsQueueHandlerFuncs default_qfuncs; /* default queue handler module, file-based */ extern MmsQueueHandlerFuncs default_qfuncs; /* default queue handler module, file-based */
/* Utility functions, generally defined. */ /* Utility functions, generally defined. */
/* Creates the queue envelope object, returns it. */ /* Creates the queue envelope object, returns it. Returns the binary MMS in 'binary_mms' if NOT NULL */
MmsEnvelope *mms_queue_create_envelope(Octstr *from, List *to, MmsEnvelope *mms_queue_create_envelope(Octstr *from, List *to,
Octstr *subject, Octstr *subject,
Octstr *fromproxy, Octstr *viaproxy, Octstr *fromproxy, Octstr *viaproxy,
@ -166,7 +166,8 @@ MmsEnvelope *mms_queue_create_envelope(Octstr *from, List *to,
Octstr *mmscname, Octstr *mmscname,
MmsMsg *m, MmsMsg *m,
char *xqfname, char *xqfname,
int extra_space); int extra_space,
Octstr **binary_mms);
/* Get rid of memory used by this. */ /* Get rid of memory used by this. */
void mms_queue_free_envelope(MmsEnvelope *e); void mms_queue_free_envelope(MmsEnvelope *e);