Installed new method of bad tic handling
This commit is contained in:
parent
ef3ea01f51
commit
660ac062e6
@ -4,6 +4,7 @@ v0.83.2 16-Nov-2005
|
||||
|
||||
mbfido:
|
||||
Fixed crash when receiving bad tics.
|
||||
Reinstalled tic orphans and bad crc handling using new method.
|
||||
|
||||
|
||||
v0.83.1 12-Nov-2005 - 16-Nov-2005
|
||||
|
@ -162,7 +162,7 @@ mbindex.o: ../config.h ../lib/mbselib.h ../lib/users.h ../lib/mbsedb.h mbindex.h
|
||||
msgutil.o: ../config.h ../lib/mbselib.h ../lib/users.h ../lib/mbsedb.h ../lib/msg.h ../lib/msgtext.h ../lib/diesel.h msgutil.h
|
||||
postecho.o: ../config.h ../lib/mbselib.h ../lib/users.h ../lib/msg.h ../lib/msgtext.h ../lib/mbsedb.h ftn2rfc.h postecho.h storeecho.h addpkt.h rollover.h qualify.h
|
||||
rollover.o: ../config.h ../lib/mbselib.h rollover.h
|
||||
tic.o: ../config.h ../lib/mbselib.h ../lib/users.h ../lib/mbsedb.h unpack.h fsort.h orphans.h ptic.h tic.h
|
||||
tic.o: ../config.h ../lib/mbselib.h ../lib/users.h ../lib/mbsedb.h unpack.h fsort.h orphans.h ptic.h mover.h tic.h
|
||||
areamgr.o: ../config.h ../lib/mbselib.h ../lib/users.h ../lib/msg.h ../lib/msgtext.h ../lib/mbsedb.h ../lib/diesel.h sendmail.h mgrutil.h scan.h createm.h areamgr.h
|
||||
filefind.o: ../config.h ../lib/mbselib.h ../lib/users.h ../lib/mbsedb.h ../lib/msg.h ../lib/msgtext.h ../lib/diesel.h fflist.h filefind.h msgutil.h
|
||||
grlist.o: ../config.h ../lib/mbselib.h grlist.h
|
||||
|
@ -46,14 +46,14 @@ void mover(char *fn)
|
||||
|
||||
snprintf(From, PATH_MAX, "%s/%s", TIC.Inbound, fn);
|
||||
snprintf(To, PATH_MAX, "%s/%s", CFG.badtic, fn);
|
||||
Syslog('!', "Moving %s to %s", From, To);
|
||||
Syslog('+', "Moving %s to %s", From, To);
|
||||
|
||||
if (mkdirs(To, 0770)) {
|
||||
if ((rc = file_mv(From, To))) {
|
||||
WriteError("$Failed to move %s to %s: %s", From, To, strerror(rc));
|
||||
WriteError("Failed to move %s to %s: %s", From, To, strerror(rc));
|
||||
}
|
||||
} else {
|
||||
WriteError("$Can't create directory for %s", To);
|
||||
WriteError("Can't create directory for %s", To);
|
||||
}
|
||||
|
||||
free(From);
|
||||
|
@ -101,19 +101,6 @@ int ProcessTic(fa_list **sbl, orphans **opl)
|
||||
if (TIC.Orphaned) {
|
||||
fill_orphans(opl, TIC.TicName, TIC.TicIn.Area, TIC.TicIn.File, TRUE, FALSE);
|
||||
Syslog('+', "File not in inbound: %s", TIC.TicIn.File);
|
||||
/*
|
||||
* Now check the age of the .tic file.
|
||||
*/
|
||||
// snprintf(Temp, PATH_MAX, "%s/%s", TIC.Inbound, TIC.TicName);
|
||||
// Fdate = file_time(Temp);
|
||||
// Age = (Now - Fdate) / 84400;
|
||||
// Syslog('+', "Orphaned tic age %d days", Age);
|
||||
|
||||
// if (Age > 21) {
|
||||
// tic_bad++;
|
||||
// mover(TIC.TicName);
|
||||
// }
|
||||
|
||||
free(Temp);
|
||||
return 2;
|
||||
}
|
||||
@ -138,7 +125,6 @@ int ProcessTic(fa_list **sbl, orphans **opl)
|
||||
Syslog('!', "CRC: expected %08lX, the file is %08lX", TIC.Crc_Int, crc);
|
||||
fill_orphans(opl, TIC.TicName, TIC.TicIn.Area, TIC.TicIn.File, FALSE, TRUE);
|
||||
if (check_crc) {
|
||||
// Bad((char *)"CRC: error, %s may be damaged", TIC.TicIn.File);
|
||||
Syslog('+', "Bad CRC, will check this ticfile later");
|
||||
free(Temp);
|
||||
return 1;
|
||||
@ -584,9 +570,18 @@ int ProcessTic(fa_list **sbl, orphans **opl)
|
||||
/*
|
||||
* Now check if other (older) ticfiles point to this file
|
||||
*/
|
||||
First = TRUE;
|
||||
for (topl = *opl; topl; topl = topl->next) {
|
||||
if (First) {
|
||||
Syslog('f', "TIC file TIC area Filename ORP CRC DEL");
|
||||
Syslog('f', "------------ -------------------- ------------ --- --- ---");
|
||||
First = FALSE;
|
||||
}
|
||||
Syslog('f', "%-12s %-20s %-12s %s %s %s", topl->TicName, topl->Area, topl->FileName,
|
||||
topl->Orphaned ? "Yes" : "No ", topl->BadCRC ? "Yes" : "No ", topl->Purged ? "Yes":"No ");
|
||||
if ((strcmp(topl->Area, TIC.TicIn.Area) == 0) && (strcmp(topl->FileName, TIC.TicIn.File) == 0)) {
|
||||
Syslog('f', "Found matching tic file %s, should purge this one", topl->TicName);
|
||||
Syslog('f', "Found matching tic file %s, mark to purge this one", topl->TicName);
|
||||
topl->Purged = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
|
54
mbfido/tic.c
54
mbfido/tic.c
@ -36,6 +36,7 @@
|
||||
#include "fsort.h"
|
||||
#include "orphans.h"
|
||||
#include "ptic.h"
|
||||
#include "mover.h"
|
||||
#include "tic.h"
|
||||
|
||||
#define UNPACK_FACTOR 300
|
||||
@ -64,9 +65,10 @@ int Tic()
|
||||
DIR *dp;
|
||||
struct dirent *de;
|
||||
struct stat sbuf;
|
||||
int i, rc = 0, first = TRUE;
|
||||
int i, rc = 0, first = TRUE, Age;
|
||||
fd_list *fdl = NULL;
|
||||
orphans *opl = NULL, *tmp;
|
||||
time_t Now, Fdate;
|
||||
|
||||
IsDoing("Process .tic files");
|
||||
CompileNL = FALSE;
|
||||
@ -152,15 +154,57 @@ int Tic()
|
||||
if (CompileNL)
|
||||
CreateSema((char *)"mbindex");
|
||||
|
||||
/*
|
||||
* Handle the array with orphaned and bad crc ticfiles.
|
||||
*/
|
||||
Syslog('f', "start tidy_orphans()");
|
||||
Now = time(NULL);
|
||||
for (tmp = opl; tmp; tmp = tmp->next) {
|
||||
if (first) {
|
||||
Syslog('f', "TIC file TIC area Filename ORP CRC");
|
||||
Syslog('f', "------------ -------------------- ------------ --- ---");
|
||||
Syslog('f', "TIC file TIC area Filename ORP CRC DEL");
|
||||
Syslog('f', "------------ -------------------- ------------ --- --- ---");
|
||||
first = FALSE;
|
||||
}
|
||||
Syslog('f', "%-12s %-20s %-12s %s %s", tmp->TicName, tmp->Area, tmp->FileName,
|
||||
tmp->Orphaned ? "Yes" : "No ", tmp->BadCRC ? "Yes" : "No ");
|
||||
Syslog('f', "%-12s %-20s %-12s %s %s %s", tmp->TicName, tmp->Area, tmp->FileName,
|
||||
tmp->Orphaned ? "Yes" : "No ", tmp->BadCRC ? "Yes" : "No ", tmp->Purged ? "Yes":"No ");
|
||||
|
||||
/*
|
||||
* Bad CRC and not marked purged are real crc errors.
|
||||
*/
|
||||
if (tmp->BadCRC && (! tmp->Purged)) {
|
||||
Syslog('+', "Moving %s and %s to badtic directory", tmp->TicName, tmp->FileName);
|
||||
mover(tmp->TicName);
|
||||
mover(tmp->FileName);
|
||||
tic_bad++;
|
||||
}
|
||||
|
||||
/*
|
||||
* Orphans that are not marked purged are real orphans, check age.
|
||||
*/
|
||||
if (tmp->Orphaned && (! tmp->Purged)) {
|
||||
fname = calloc(PATH_MAX, sizeof(char));
|
||||
snprintf(fname, PATH_MAX, "%s/%s", inbound, tmp->TicName);
|
||||
Fdate = file_time(fname);
|
||||
Age = (Now - Fdate) / 84400;
|
||||
if (Age > 21) {
|
||||
Syslog('+', "Moving %s of %d days old to badtic", tmp->TicName, Age);
|
||||
tic_bad++;
|
||||
mover(tmp->TicName);
|
||||
} else {
|
||||
Syslog('+', "Keeping %s of %d days old for %d days", tmp->TicName, Age, 21 - Age);
|
||||
}
|
||||
free(fname);
|
||||
}
|
||||
|
||||
/*
|
||||
* If marked to purge, remove the ticfile
|
||||
*/
|
||||
if (tmp->Purged) {
|
||||
fname = calloc(PATH_MAX, sizeof(char));
|
||||
snprintf(fname, PATH_MAX, "%s/%s", inbound, tmp->TicName);
|
||||
Syslog('+', "Removing obsolete %s", tmp->TicName);
|
||||
free(fname);
|
||||
}
|
||||
}
|
||||
tidy_orphans(&opl);
|
||||
|
||||
|
Reference in New Issue
Block a user