#include "../../database.h"
#include "../../msgbase.h"
#include "../../user_ops.h"
+#include "../../room_ops.h"
#include "../../control.h"
#include "../../threads.h"
#include "../../context.h"
time_t xtime, now;
struct CtdlMessage *msg = NULL;
int a;
- struct cdbdata *cdbfr;
long *msglist = NULL;
int num_msgs = 0;
FILE *purgelist;
time(&now);
GetExpirePolicy(&epbuf, qrbuf);
+ syslog(LOG_DEBUG, "expire: scanning room %ld (%s), policy %d", qrbuf->QRnumber, qrbuf->QRname, epbuf.expire_mode);
// If the room is set to never expire messages ... do nothing
if (epbuf.expire_mode == EXPIRE_NEXTLEVEL) return;
if (!strcasecmp(qrbuf->QRname, SYSCONFIGROOM)) return;
// Ok, we got this far ... now let's see what's in the room.
- cdbfr = cdb_fetch(CDB_MSGLISTS, &qrbuf->QRnumber, sizeof(long));
-
- if (cdbfr != NULL) {
- msglist = malloc(cdbfr->len);
- memcpy(msglist, cdbfr->ptr, cdbfr->len);
- num_msgs = cdbfr->len / sizeof(long);
- cdb_free(cdbfr);
- }
+ TRACE;
+ num_msgs = CtdlFetchMsgList(qrbuf->QRnumber, &msglist);
+ TRACE;
// Nothing to do if there aren't any messages
- if (num_msgs == 0) {
+ if (num_msgs <= 0) {
if (msglist != NULL) free(msglist);
return;
}
// If the room is set to expire by count, do that.
if (epbuf.expire_mode == EXPIRE_NUMMSGS) {
+ TRACE;
if (num_msgs > epbuf.expire_value) {
for (a=0; a<(num_msgs - epbuf.expire_value); ++a) {
fprintf(purgelist, "m=%ld\n", msglist[a]);
// If the room is set to expire by age...
if (epbuf.expire_mode == EXPIRE_AGE) {
+ TRACE;
for (a=0; a<num_msgs; ++a) {
delnum = msglist[a];
-
msg = CtdlFetchMessage(delnum, 0); // don't need the body
if (msg != NULL) {
xtime = atol(msg->cm_fields[eTimestamp]);
}
}
- if (msglist != NULL) free(msglist);
+ if (msglist != NULL) {
+ free(msglist);
+ }
}