X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fmodules%2Fpop3client%2Fserv_pop3client.c;h=58cf69094c070980402524949f11fa00615e851e;hb=30a4090b04dff1084df3789efe78afd1e2bf6d90;hp=9fe2cd6b2546badcc17c7eb7beb691aecd645d2b;hpb=5e3befebe2ed0ce85324da3be83b21880dc7d069;p=citadel.git diff --git a/citadel/modules/pop3client/serv_pop3client.c b/citadel/modules/pop3client/serv_pop3client.c index 9fe2cd6b2..58cf69094 100644 --- a/citadel/modules/pop3client/serv_pop3client.c +++ b/citadel/modules/pop3client/serv_pop3client.c @@ -21,6 +21,7 @@ #include #include #include +#include #if TIME_WITH_SYS_TIME # include @@ -63,42 +64,42 @@ int POP3ClientDebugEnabled = 0; #define EVP3C_syslog(LEVEL, FORMAT, ...) \ DBGLOG(LEVEL) syslog(LEVEL, \ - "IO[%ld]CC[%d][%ld]POP3: " FORMAT, \ - IO->ID, CCID, N, __VA_ARGS__) + "%s[%ld]CC[%d][%ld]POP3: " FORMAT, \ + IOSTR, IO->ID, CCID, N, __VA_ARGS__) #define EVP3CM_syslog(LEVEL, FORMAT) \ DBGLOG(LEVEL) syslog(LEVEL, \ - "IO[%ld]CC[%d][%ld]POP3: " FORMAT, \ - IO->ID, CCID, N) + "%s[%ld]CC[%d][%ld]POP3: " FORMAT, \ + IOSTR, IO->ID, CCID, N) #define EVP3CQ_syslog(LEVEL, FORMAT, ...) \ DBGLOG(LEVEL) syslog(LEVEL, \ - "P3Q:" FORMAT, \ - __VA_ARGS__) + "%s P3Q:" FORMAT, \ + IOSTR, __VA_ARGS__) #define EVP3CQM_syslog(LEVEL, FORMAT) \ DBGLOG(LEVEL) syslog(LEVEL, \ - "P3Q" FORMAT \ - ) + "%s P3Q" FORMAT, \ + IOSTR) #define EVP3CCS_syslog(LEVEL, FORMAT, ...) \ - DBGLOG(LEVEL) syslog(LEVEL, "IO[%ld][%ld]POP3: " FORMAT, \ - IO->ID, N, __VA_ARGS__) + DBGLOG(LEVEL) syslog(LEVEL, "%s[%ld][%ld]POP3: " FORMAT, \ + IOSTR, IO->ID, N, __VA_ARGS__) #define EVP3CCSM_syslog(LEVEL, FORMAT) \ - DBGLOG(LEVEL) syslog(LEVEL, "IO[%ld][%ld]POP3: " FORMAT, \ - IO->ID, N) + DBGLOG(LEVEL) syslog(LEVEL, "%s[%ld][%ld]POP3: " FORMAT, \ + IOSTR, IO->ID, N) #define POP3C_DBG_SEND() \ EVP3C_syslog(LOG_DEBUG, \ - "IO[%ld]CC[%d][%ld]POP3: > %s\n", \ - IO->ID, CCID, N, \ + "%s[%ld]CC[%d][%ld]POP3: > %s\n", \ + IOSTR, IO->ID, CCID, N, \ ChrPtr(RecvMsg->IO.SendBuf.Buf)) #define POP3C_DBG_READ() \ EVP3C_syslog(LOG_DEBUG, \ - "IO[%ld]CC[%d][%ld]POP3: < %s\n", \ - IO->ID, CCID, N, \ + "%s[%ld]CC[%d][%ld]POP3: < %s\n", \ + IOSTR, IO->ID, CCID, N, \ ChrPtr(RecvMsg->IO.IOBuf)) @@ -417,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); @@ -430,13 +432,15 @@ eNextState POP3_FetchNetworkUsetableEntry(AsyncIO *IO) if (server_shutting_down) return eAbort; - if (CheckIfAlreadySeen("POP3 Item Seen", - RecvMsg->CurrMsg->MsgUID, - IO->Now, - IO->Now, //// todo - 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; @@ -492,7 +496,8 @@ eNextState POP3C_GetOneMessagID(pop3aggr *RecvMsg) /// done receiving uidls.. start looking them up now. RecvMsg->Pos = GetNewHashPos(RecvMsg->MsgNumbers, 0); return EventQueueDBOperation(&RecvMsg->IO, - POP3_FetchNetworkUsetableEntry); + POP3_FetchNetworkUsetableEntry, + 0); } return eReadMore; /* TODO */ } @@ -537,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, @@ -549,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, @@ -557,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); } @@ -589,8 +598,8 @@ eNextState POP3C_StoreMsgRead(AsyncIO *IO) ChrPtr(RecvMsg->CurrMsg->MsgUID)); CheckIfAlreadySeen("POP3 Item Seen", RecvMsg->CurrMsg->MsgUID, - IO->Now, - IO->Now, //// todo + EvGetNow(IO), + EvGetNow(IO) - USETABLE_ANTIEXPIRE, eWrite, IO->ID, CCID); @@ -625,7 +634,7 @@ eNextState POP3C_ReadMessageBody(pop3aggr *RecvMsg) EVP3CM_syslog(LOG_DEBUG, "Converting message..."); RecvMsg->CurrMsg->Msg = convert_internet_message_buf(&RecvMsg->IO.ReadMsg->MsgBuf); - return EventQueueDBOperation(&RecvMsg->IO, POP3C_SaveMsg); + return EventQueueDBOperation(&RecvMsg->IO, POP3C_SaveMsg, 0); } eNextState POP3C_SendDelete(pop3aggr *RecvMsg) @@ -650,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)