From 30a4090b04dff1084df3789efe78afd1e2bf6d90 Mon Sep 17 00:00:00 2001 From: Wilfried Goesgens Date: Tue, 4 Aug 2015 23:29:32 +0200 Subject: [PATCH] fix pop3 Aggregator - fix usetable - only mark messages as read if we already wrote them to the db. - fix aggregation - point to the proper message. --- citadel/database.c | 4 +++- citadel/database.h | 8 +++---- citadel/modules/network/serv_netspool.c | 2 +- citadel/modules/pop3client/serv_pop3client.c | 23 +++++++++++++------- citadel/modules/rssclient/serv_rssclient.c | 2 +- 5 files changed, 24 insertions(+), 15 deletions(-) diff --git a/citadel/database.c b/citadel/database.c index e89783f69..dbcccf5b1 100644 --- a/citadel/database.c +++ b/citadel/database.c @@ -935,8 +935,10 @@ time_t CheckIfAlreadySeen(const char *Facility, else { if (cdbut) cdb_free(cdbut); - + SEENM_syslog(LOG_DEBUG, "not Found"); + if (cType == eCheckUpdate) + return 0; } if (cType == eCheckExist) diff --git a/citadel/database.h b/citadel/database.h index 7b3b844b9..e7acb31fb 100644 --- a/citadel/database.h +++ b/citadel/database.h @@ -54,10 +54,10 @@ struct CtdlCompressHeader { }; typedef enum __eCheckType { - eCheckExist, - eCheckUpdate, - eUpdate, - eWrite + eCheckExist, /* look up the item, return the timestamp if its there, 0 if not. */ + eCheckUpdate, /* if it exists, refresh in db timestamp. return the timstamp if its there, 0 if not. */ + eUpdate, /* insert/update the new value, return the old if its there, 0 if not. */ + eWrite /* write this to DB, unconditional. */ }eCheckType; time_t CheckIfAlreadySeen(const char *Facility, diff --git a/citadel/modules/network/serv_netspool.c b/citadel/modules/network/serv_netspool.c index 3bb616614..86cad97b4 100644 --- a/citadel/modules/network/serv_netspool.c +++ b/citadel/modules/network/serv_netspool.c @@ -549,7 +549,7 @@ int network_usetable(struct CtdlMessage *msg) if (CheckIfAlreadySeen("Networker Import", msgid, now, 0, - eCheckUpdate, + eUpdate, CCC->cs_pid, 0) != 0) { FreeStrBuf(&msgid); diff --git a/citadel/modules/pop3client/serv_pop3client.c b/citadel/modules/pop3client/serv_pop3client.c index 950436dd8..58cf69094 100644 --- a/citadel/modules/pop3client/serv_pop3client.c +++ b/citadel/modules/pop3client/serv_pop3client.c @@ -418,6 +418,7 @@ eNextState POP3_FetchNetworkUsetableEntry(AsyncIO *IO) const char *HKey; void *vData; pop3aggr *RecvMsg = (pop3aggr *) IO->Data; + time_t seenstamp = 0; SetPOP3State(IO, eUseTable); @@ -431,13 +432,15 @@ eNextState POP3_FetchNetworkUsetableEntry(AsyncIO *IO) if (server_shutting_down) return eAbort; - if (CheckIfAlreadySeen("POP3 Item Seen", - RecvMsg->CurrMsg->MsgUID, - EvGetNow(IO), - EvGetNow(IO) - USETABLE_ANTIEXPIRE, - eCheckUpdate, - IO->ID, CCID) - != 0) + RecvMsg->CurrMsg = (FetchItem*)vData; + + seenstamp = CheckIfAlreadySeen("POP3 Item Seen", + RecvMsg->CurrMsg->MsgUID, + EvGetNow(IO), + EvGetNow(IO) - USETABLE_ANTIEXPIRE, + eCheckUpdate, + IO->ID, CCID); + if (seenstamp != 0) { /* Item has already been seen */ RecvMsg->CurrMsg->NeedFetch = 0; @@ -539,6 +542,8 @@ eNextState POP3C_SendGetOneMsg(pop3aggr *RecvMsg) SetPOP3State(IO, eGetMsg); + EVP3CM_syslog(LOG_DEBUG, "fast forwarding to the next unknown message"); + RecvMsg->CurrMsg = NULL; while ((RecvMsg->Pos != NULL) && GetNextHashPos(RecvMsg->MsgNumbers, @@ -551,6 +556,7 @@ eNextState POP3C_SendGetOneMsg(pop3aggr *RecvMsg) if ((RecvMsg->CurrMsg != NULL ) && (RecvMsg->CurrMsg->NeedFetch == 1)) { + EVP3CM_syslog(LOG_DEBUG, "fetching next"); /* Message has not been seen. * Tell the server to fetch the message... */ StrBufPrintf(RecvMsg->IO.SendBuf.Buf, @@ -559,6 +565,7 @@ eNextState POP3C_SendGetOneMsg(pop3aggr *RecvMsg) return eReadMessage; } else { + EVP3CM_syslog(LOG_DEBUG, "no more messages to fetch."); RecvMsg->State = ReadQuitState; return POP3_C_DispatchWriteDone(&RecvMsg->IO); } @@ -652,7 +659,7 @@ eNextState POP3C_ReadDeleteState(pop3aggr *RecvMsg) AsyncIO *IO = &RecvMsg->IO; POP3C_DBG_READ(); RecvMsg->State = GetOneMessageIDState; - return eReadMessage; + return POP3_C_DispatchWriteDone(&RecvMsg->IO); } eNextState POP3C_SendQuit(pop3aggr *RecvMsg) diff --git a/citadel/modules/rssclient/serv_rssclient.c b/citadel/modules/rssclient/serv_rssclient.c index cc03230c9..337ace94a 100644 --- a/citadel/modules/rssclient/serv_rssclient.c +++ b/citadel/modules/rssclient/serv_rssclient.c @@ -685,7 +685,7 @@ eNextState RSSAggregator_AnalyseReply(AsyncIO *IO) guid, EvGetNow(IO), EvGetNow(IO) - USETABLE_ANTIEXPIRE, - eCheckUpdate, + eUpdate, CCID, IO->ID) != 0) { -- 2.30.2