const char *subject,
int nCriterions,
const char **CritStr,
- long *CritStrLen)
+ long *CritStrLen,
+ long ccid,
+ long ioid,
+ time_t NOW)
{
int i;
- struct UseTable ut;
u_char rawdigest[MD5_DIGEST_LEN];
struct MD5Context md5context;
StrBuf *guid;
- struct cdbdata *cdbut;
char timestamp[64];
long tslen;
- time_t ts = time(NULL);
- time_t tsday = ts / (8*60*60); /* just care for a day... */
+ time_t tsday = NOW / (8*60*60); /* just care for a day... */
tslen = snprintf(timestamp, sizeof(timestamp), "%ld", tsday);
MD5Init(&md5context);
StrBufAppendBufPlain(guid, HKEY("_fldpt"), 0);
if (StrLength(guid) > 40)
StrBufCutAt(guid, 40, NULL);
- /* Find out if we've already sent a similar message */
- memcpy(ut.ut_msgid, SKEY(guid));
- ut.ut_timestamp = ts;
- cdbut = cdb_fetch(CDB_USETABLE, SKEY(guid));
-
- if (cdbut != NULL) {
+ if (CheckIfAlreadySeen("FPAideMessage",
+ guid,
+ NOW,
+ tsday,
+ eUpdate,
+ ccid,
+ ioid)!= 0)
+ {
+ FreeStrBuf(&guid);
/* yes, we did. flood protection kicks in. */
syslog(LOG_DEBUG,
"not sending message again\n");
- cdb_free(cdbut);
+ return;
}
-
- /* rewrite the record anyway, to update the timestamp */
- cdb_store(CDB_USETABLE,
- SKEY(guid),
- &ut, sizeof(struct UseTable) );
-
FreeStrBuf(&guid);
-
- if (cdbut != NULL) return;
/* no, this message isn't sent recently; go ahead. */
quickie_message(from,
fromaddr,
regcomp(&re, content_type, 0);
need_to_free_re = 1;
}
- MSG_syslog(LOG_DEBUG, "CtdlDeleteMessages(%s, %d msgs, %s)\n",
+ MSG_syslog(LOG_DEBUG, " CtdlDeleteMessages(%s, %d msgs, %s)\n",
room_name, num_dmsgnums, content_type);
/* get room record, obtaining a lock... */
if (CtdlGetRoomLock(&qrbuf, room_name) != 0) {
- MSG_syslog(LOG_ERR, "CtdlDeleteMessages(): Room <%s> not found\n",
+ MSG_syslog(LOG_ERR, " CtdlDeleteMessages(): Room <%s> not found\n",
room_name);
if (need_to_free_re) regfree(&re);
return (0); /* room not found */
StrBuf *dbg = NewStrBuf();
for (i = 0; i < num_dmsgnums; i++)
StrBufAppendPrintf(dbg, ", %ld", dmsgnums[i]);
- MSG_syslog(LOG_DEBUG, "Deleting before: %s", ChrPtr(dbg));
+ MSG_syslog(LOG_DEBUG, " Deleting before: %s", ChrPtr(dbg));
FreeStrBuf(&dbg);
}
*/
while ((i < num_msgs) && (have_more_del)) {
delete_this = 0x00;
-
/* Set/clear a bit for each criterion */
/* 0 messages in the list or a null list means that we are
}
else {
while ((i < num_msgs) && (msglist[i] < dmsgnums[j])) i++;
+
+ if (i >= num_msgs)
+ continue;
+
if (msglist[i] == dmsgnums[j]) {
delete_this |= 0x01;
}
StrBuf *dbg = NewStrBuf();
for (i = 0; i < num_deleted; i++)
StrBufAppendPrintf(dbg, ", %ld", dellist[i]);
- MSG_syslog(LOG_DEBUG, "Deleting: %s", ChrPtr(dbg));
+ MSG_syslog(LOG_DEBUG, " Deleting: %s", ChrPtr(dbg));
FreeStrBuf(&dbg);
}
*/
/* Now free the memory we used, and go away. */
if (msglist != NULL) free(msglist);
if (dellist != NULL) free(dellist);
- MSG_syslog(LOG_DEBUG, "%d message(s) deleted.\n", num_deleted);
+ MSG_syslog(LOG_DEBUG, " %d message(s) deleted.\n", num_deleted);
if (need_to_free_re) regfree(&re);
return (num_deleted);
}