Changed to new modular upload function
This commit is contained in:
parent
0bc80c5eec
commit
d7242cd944
@ -25,9 +25,13 @@ v0.71.0 27-Oct-2004
|
||||
Removed support for non-batching protocols (xmodem) and for
|
||||
bidirectional protocols.
|
||||
Removed Ctrl-F G, this is of no use anymore.
|
||||
Switched to new modular download function.
|
||||
Switched to new modular download and upload functions.
|
||||
With download from file areas, the long filename is sent to
|
||||
the users, we will only support protocols that allow this.
|
||||
When an invalid OLR reply packet is received, it is removed
|
||||
from the users upload directory.
|
||||
We don't reward upload time anymore, only bytes. It's more
|
||||
troubles to implement right then it's worth these days.
|
||||
|
||||
mbnewusr:
|
||||
Rewrote terminal i/o.
|
||||
@ -41,7 +45,7 @@ v0.71.0 27-Oct-2004
|
||||
Changed width of prompt 261.
|
||||
Added prompt 28.
|
||||
Removed leading spaces of prompt 151.
|
||||
Removed prompt 276.
|
||||
Removed prompts 259 and 276.
|
||||
|
||||
script:
|
||||
Modified rundoor.sh so that it uses two different dosemu
|
||||
|
@ -257,7 +257,7 @@
|
||||
256 offline.c |Untag Offline Reader message areas
|
||||
257 filesub.c |Found FILEID.DIZ in
|
||||
258 file.c |No files marked for download.
|
||||
259 filesub.c |extra minutes.
|
||||
259 .c |
|
||||
260 offline.c |You have selected the following Conference(s):
|
||||
261 file.c |Filename Size Date
|
||||
262 change.c |Protocol: Can't open protocol file.
|
||||
|
@ -257,7 +257,7 @@ JN|Node onbekend, toch doorgaan [j/N]:
|
||||
|Verwijder selectie Offline Reader berichten gebieden
|
||||
|FILEID.DIZ gevonden in
|
||||
|Geen bestanden gemarkeerd voor download.
|
||||
|extra minuten.
|
||||
|
|
||||
|De volgende conferentie(s) zijn geselecteerd:
|
||||
|Bestand Grootte Datum
|
||||
|Protocol: Kan protocollen bestand niet openen.
|
||||
|
@ -257,7 +257,7 @@ YN|Node not known, continue anyway [y/N]:
|
||||
|Untag Offline Reader message areas
|
||||
|Found FILEID.DIZ in
|
||||
|No files marked for download.
|
||||
|extra minutes.
|
||||
|
|
||||
|You have selected the following Conference(s):
|
||||
|Filename Size Date
|
||||
|Protocol: Can't open protocol file.
|
||||
|
@ -257,7 +257,7 @@ ON|Node inconnu, continue quand m
|
||||
|Untag Offline Reader message areas
|
||||
|Found FILEID.DIZ in
|
||||
|No files marked for download.
|
||||
|extra minutes.
|
||||
|
|
||||
|You have selected the following Conference(s):
|
||||
|Filename Size Date
|
||||
|Protocol: Can't open protocol file.
|
||||
|
@ -257,7 +257,7 @@ SN|Nodo desco
|
||||
|Desmarcar reas para lectura Off-Line
|
||||
|Atopado FILEID.DIZ en
|
||||
|Non hai ficheiros marcados.
|
||||
|minutos extra.
|
||||
|
|
||||
|Escolleche-las seguintes reas:
|
||||
|Ficheiro Tama¤o Fecha
|
||||
|Protocolo: Non podo abrir ficheiro de protocolos.
|
||||
|
@ -257,7 +257,7 @@ JN|Adresse unbekannt, dennoch fortfahren [j/N]:
|
||||
|Mitteilungsbereiche fuer den "Offline Reader" abwaehlen
|
||||
|FILEID.DIZ gefunden in
|
||||
|Es sind keine Dateien zum Herunterladen markiert.
|
||||
|extra Minuten.
|
||||
|
|
||||
|Sie haben folgende Bereiche fuer den "Offline Reader" markiert:
|
||||
|Dateiname Groesse Datum
|
||||
|Protokoll: Protokolldatei kann nicht geoeffnet werden.
|
||||
|
@ -257,7 +257,7 @@ JN|Adresse unbekannt, dennoch fortfahren [<j>a/<N>ein]:
|
||||
|Mitteilungsbereiche fuer den "Offline Reader" abwaehlen
|
||||
|FILEID.DIZ gefunden in
|
||||
|Es sind keine Dateien zum Herunterladen markiert.
|
||||
|extra Minuten.
|
||||
|
|
||||
|Du hast folgende Bereiche fuer den "Offline Reader" markiert:
|
||||
|Dateiname Groesse Datum
|
||||
|Protokoll: Protokolldatei kann nicht geoeffnet werden.
|
||||
|
@ -257,7 +257,7 @@ SN|Nodo sconosciuto, continua lo stesso [s/N]:
|
||||
|Untag aree messaggi per l'Offline Reader
|
||||
|Trovato FILEID.DIZ in
|
||||
|Nessun file selezionato per il download.
|
||||
|minuti extra.
|
||||
|
|
||||
|Hai selezionato le seguenti Conferenze:
|
||||
|Filename Dimensione Data
|
||||
|Protocollo: Non posso aprire il file del protocollo.
|
||||
|
@ -257,7 +257,7 @@ SN|Nodo desconocido.
|
||||
|Desmarcar reas para lectura Off-Line
|
||||
|Encontrado FILEID.DIZ en
|
||||
|No hay ficheros marcados.
|
||||
|minutos extra.
|
||||
|
|
||||
|Has seleccionado las siguientes reas:
|
||||
|Fichero Tama¤o Fecha
|
||||
|Protocolo: No puedo abrir fichero de protocolos.
|
||||
|
315
mbsebbs/file.c
315
mbsebbs/file.c
@ -882,24 +882,12 @@ int NewfileScan(int AskStart)
|
||||
*/
|
||||
int Upload()
|
||||
{
|
||||
char temp[81];
|
||||
int Area, err;
|
||||
int Area, rc;
|
||||
unsigned long OldArea;
|
||||
time_t ElapstimeStart, ElapstimeFin, iTime;
|
||||
DIR *dirp;
|
||||
struct dirent *dp;
|
||||
struct stat statfile;
|
||||
char *arc;
|
||||
|
||||
char *arc, *temp;
|
||||
up_list *up = NULL, *tmpf;
|
||||
|
||||
WhosDoingWhat(UPLOAD, NULL);
|
||||
|
||||
/*
|
||||
* Select default protocol if users hasn't any.
|
||||
*/
|
||||
if (!ForceProtocol())
|
||||
return 0;
|
||||
|
||||
Enter(1);
|
||||
Area = OldArea = iAreaNumber;
|
||||
|
||||
@ -910,8 +898,6 @@ int Upload()
|
||||
if (area.Upload)
|
||||
Area = area.Upload;
|
||||
SetFileArea(Area);
|
||||
|
||||
SetFileArea(Area);
|
||||
Syslog('+', "Upload area is %d %s", Area, area.Name);
|
||||
|
||||
/*
|
||||
@ -929,113 +915,66 @@ int Upload()
|
||||
|
||||
clear();
|
||||
Enter(2);
|
||||
colour(CFG.HiliteF, CFG.HiliteB);
|
||||
/* Please start your upload now ...*/
|
||||
pout(CFG.HiliteF, CFG.HiliteB, sProtAdvice);
|
||||
PUTCHAR(' ');
|
||||
PUTSTR((char *) Language(283));
|
||||
Enter(2);
|
||||
|
||||
Syslog('+', "Upload using %s", sProtName);
|
||||
rc = upload(&up);
|
||||
|
||||
sprintf(temp, "%s/%s/upl", CFG.bbs_usersdir, exitinfo.Name);
|
||||
if (chdir(temp)) {
|
||||
WriteError("$Can't chdir to %s", temp);
|
||||
if (rc) {
|
||||
Syslog('+', "Upload failed, rc=%d", rc);
|
||||
SetFileArea(OldArea);
|
||||
return 0;
|
||||
}
|
||||
|
||||
sleep(2);
|
||||
ElapstimeStart = time(NULL);
|
||||
|
||||
/*
|
||||
* Get the file(s). Set the Client/Server time to 2 hours.
|
||||
* This is not a nice solution, at least it works and prevents
|
||||
* that the bbs will hang.
|
||||
*/
|
||||
Altime(7200);
|
||||
alarm_set(7190);
|
||||
err = execute_str(sProtUp, (char *)"", NULL, NULL, NULL, NULL);
|
||||
rawport();
|
||||
|
||||
if (err) {
|
||||
/*
|
||||
* Log any errors
|
||||
*/
|
||||
WriteError("$Upload error %d, prot: %s", err, sProtUp);
|
||||
}
|
||||
Altime(0);
|
||||
alarm_off();
|
||||
alarm_on();
|
||||
Enter(3);
|
||||
ElapstimeFin = time(NULL);
|
||||
|
||||
/*
|
||||
* Get time from Before Upload and After Upload to get
|
||||
* upload time, if the time is zero, it will be one.
|
||||
*/
|
||||
iTime = ElapstimeFin - ElapstimeStart;
|
||||
if (!iTime)
|
||||
iTime = 1;
|
||||
|
||||
Syslog('b', "Transfer time %ld", iTime);
|
||||
|
||||
if ((dirp = opendir(".")) == NULL) {
|
||||
WriteError("$Upload: can't open ./upl");
|
||||
Home();
|
||||
SetFileArea(OldArea);
|
||||
return 1;
|
||||
}
|
||||
Syslog('b', "upload done, start checks");
|
||||
|
||||
Enter(2);
|
||||
pout(CFG.UnderlineColourF, CFG.UnderlineColourB, (char *)"Checking your upload(s)");
|
||||
Enter(1);
|
||||
|
||||
while ((dp = readdir(dirp)) != NULL) {
|
||||
if (*(dp->d_name) != '.') {
|
||||
stat(dp->d_name, &statfile);
|
||||
Syslog('+', "Uploaded \"%s\", %ld bytes", dp->d_name, statfile.st_size);
|
||||
temp = calloc(PATH_MAX, sizeof(char));
|
||||
for (tmpf = up; tmpf; tmpf = tmpf->next) {
|
||||
sprintf(temp, "%s/%s/upl", CFG.bbs_usersdir, exitinfo.Name);
|
||||
chdir(temp);
|
||||
|
||||
if ((arc = GetFileType(dp->d_name)) == NULL) {
|
||||
/*
|
||||
* If the filetype is unknown, it is probably
|
||||
* a textfile or so. Import it direct.
|
||||
*/
|
||||
Syslog('b', "Unknown file type");
|
||||
if (!ScanDirect(dp->d_name))
|
||||
ImportFile(dp->d_name, Area, FALSE, iTime, statfile.st_size);
|
||||
Syslog('b', "Checking upload %s", tmpf->filename);
|
||||
if ((arc = GetFileType(tmpf->filename)) == NULL) {
|
||||
/*
|
||||
* If the filetype is unknown, it is probably
|
||||
* a textfile or so. Import it direct.
|
||||
*/
|
||||
Syslog('b', "Unknown file type");
|
||||
if (!ScanDirect(basename(tmpf->filename)))
|
||||
ImportFile(tmpf->filename, Area, FALSE, tmpf->size);
|
||||
} else {
|
||||
/*
|
||||
* We figured out the type of the uploaded file.
|
||||
*/
|
||||
Syslog('b', "File type is %s", arc);
|
||||
|
||||
/*
|
||||
* MS-DOS executables are handled direct.
|
||||
*/
|
||||
if ((strcmp("EXE", arc) == 0) || (strcmp("COM", arc) == 0)) {
|
||||
if (!ScanDirect(basename(tmpf->filename)))
|
||||
ImportFile(tmpf->filename, Area, FALSE, tmpf->size);
|
||||
} else {
|
||||
/*
|
||||
* We figured out the type of the uploaded file.
|
||||
*/
|
||||
Syslog('b', "File type is %s", arc);
|
||||
|
||||
/*
|
||||
* MS-DOS executables are handled direct.
|
||||
*/
|
||||
if ((strcmp("EXE", arc) == 0) || (strcmp("COM", arc) == 0)) {
|
||||
if (!ScanDirect(dp->d_name))
|
||||
ImportFile(dp->d_name, Area, FALSE, iTime, statfile.st_size);
|
||||
} else {
|
||||
switch (ScanArchive(dp->d_name, arc)) {
|
||||
case 0: ImportFile(dp->d_name, Area, TRUE, iTime, statfile.st_size);
|
||||
break;
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
case 3: /*
|
||||
* No valid unarchiver found, just import after scanning,
|
||||
* may catch macro viri.
|
||||
*/
|
||||
if (!ScanDirect(dp->d_name))
|
||||
ImportFile(dp->d_name, Area, FALSE, iTime, statfile.st_size);
|
||||
break;
|
||||
}
|
||||
switch (ScanArchive(basename(tmpf->filename), arc)) {
|
||||
case 0: ImportFile(tmpf->filename, Area, TRUE, tmpf->size);
|
||||
break;
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
case 3: /*
|
||||
* No valid unarchiver found, just import after scanning,
|
||||
* may catch macro viri.
|
||||
*/
|
||||
if (!ScanDirect(basename(tmpf->filename)))
|
||||
ImportFile(tmpf->filename, Area, FALSE, tmpf->size);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
closedir(dirp);
|
||||
|
||||
tidy_upload(&up);
|
||||
free(temp);
|
||||
Home();
|
||||
SetFileArea(OldArea);
|
||||
Pause();
|
||||
@ -1168,7 +1107,7 @@ void List_Home()
|
||||
*/
|
||||
void Delete_Home()
|
||||
{
|
||||
char *temp, *temp1;
|
||||
char *temp, *temp1, msg[81];
|
||||
int i;
|
||||
|
||||
temp = calloc(PATH_MAX, sizeof(char));
|
||||
@ -1198,8 +1137,8 @@ void Delete_Home()
|
||||
if ((access(temp, R_OK)) == 0) {
|
||||
Enter(1);
|
||||
/* Delete file: */ /* Are you Sure? [Y/n]: */
|
||||
sprintf(temp1, "%s %s, %s", (char *) Language(368), temp1, (char *) Language(369));
|
||||
pout(LIGHTGREEN, BLACK, temp1);
|
||||
sprintf(msg, "%s %s, %s", (char *) Language(368), temp1, (char *) Language(369));
|
||||
pout(LIGHTGREEN, BLACK, msg);
|
||||
i = toupper(Readkey());
|
||||
|
||||
if (i == Keystroke(369, 0) || i == 13) {
|
||||
@ -1306,142 +1245,84 @@ int Download_Home()
|
||||
*/
|
||||
int Upload_Home()
|
||||
{
|
||||
DIR *dirp;
|
||||
struct dirent *dp;
|
||||
char *File, *sFileName, *temp, *arc;
|
||||
time_t ElapstimeStart, ElapstimeFin, iTime;
|
||||
int err;
|
||||
struct stat statfile;
|
||||
|
||||
WhosDoingWhat(UPLOAD, NULL);
|
||||
if (!ForceProtocol())
|
||||
return 0;
|
||||
char *temp, *arc;
|
||||
int rc = 0, Count = 0;
|
||||
up_list *up = NULL, *tmpf;
|
||||
|
||||
WhosDoingWhat(UPLOAD, NULL);
|
||||
|
||||
File = calloc(PATH_MAX, sizeof(char));
|
||||
sFileName = calloc(PATH_MAX, sizeof(char));
|
||||
temp = calloc(PATH_MAX, sizeof(char));
|
||||
|
||||
clear();
|
||||
Enter(2);
|
||||
/* Please start your upload now ...*/
|
||||
sprintf(temp, "%s, %s", sProtAdvice, (char *) Language(283));
|
||||
pout(CFG.HiliteF, CFG.HiliteB, temp);
|
||||
Enter(2);
|
||||
Syslog('+', "Upload using %s", sProtName);
|
||||
|
||||
sprintf(temp, "%s/%s/upl", CFG.bbs_usersdir, exitinfo.Name);
|
||||
if (chdir(temp)) {
|
||||
WriteError("$Can't chdir to %s", temp);
|
||||
free(File);
|
||||
free(sFileName);
|
||||
free(temp);
|
||||
return 0;
|
||||
}
|
||||
rc = upload(&up);
|
||||
|
||||
sleep(2);
|
||||
ElapstimeStart = time(NULL);
|
||||
|
||||
/*
|
||||
* Get the file(s). Set the Client/Server time to 2 hours.
|
||||
* This is not a nice solution, at least it works and prevents
|
||||
* that the bbs will hang.
|
||||
*/
|
||||
Altime(7200);
|
||||
alarm_set(7190);
|
||||
err = execute_str(sProtUp, (char *)"", NULL, NULL, NULL, NULL);
|
||||
rawport();
|
||||
|
||||
if (err) {
|
||||
/*
|
||||
* Log any errors
|
||||
*/
|
||||
WriteError("$Upload error %d, prot: %s", err, sProtUp);
|
||||
}
|
||||
|
||||
Altime(0);
|
||||
alarm_off();
|
||||
alarm_on();
|
||||
Enter(3);
|
||||
ElapstimeFin = time(NULL);
|
||||
|
||||
/*
|
||||
* Get time from Before Upload and After Upload to get
|
||||
* upload time, if the time is zero, it will be one.
|
||||
*/
|
||||
iTime = ElapstimeFin - ElapstimeStart;
|
||||
if (!iTime)
|
||||
iTime = 1;
|
||||
|
||||
Syslog('b', "Transfer time %ld", iTime);
|
||||
|
||||
if ((dirp = opendir(".")) == NULL) {
|
||||
WriteError("$Upload: can't open ./upl");
|
||||
if (rc) {
|
||||
Syslog('+', "Upload home failed, rc=%d", rc);
|
||||
Home();
|
||||
free(File);
|
||||
free(sFileName);
|
||||
free(temp);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
Syslog('b', "Start checking uploaded files");
|
||||
Enter(2);
|
||||
pout(CFG.UnderlineColourF, CFG.UnderlineColourB, (char *)"Checking your upload(s)");
|
||||
Enter(2);
|
||||
|
||||
while ((dp = readdir(dirp)) != NULL) {
|
||||
for (tmpf = up; tmpf; tmpf = tmpf->next) {
|
||||
sprintf(temp, "%s/%s/upl", CFG.bbs_usersdir, exitinfo.Name);
|
||||
chdir(temp);
|
||||
|
||||
if (*(dp->d_name) != '.') {
|
||||
stat(dp->d_name, &statfile);
|
||||
Syslog('+', "Uploaded \"%s\", %ld bytes", dp->d_name, statfile.st_size);
|
||||
Syslog('b', "Checking upload %s", tmpf->filename);
|
||||
if ((arc = GetFileType(tmpf->filename)) == NULL) {
|
||||
/*
|
||||
* If the filetype is unknown, it is probably
|
||||
* a textfile or so. Import it direct.
|
||||
*/
|
||||
Syslog('b', "Unknown file type");
|
||||
ImportHome(basename(tmpf->filename));
|
||||
Count++;
|
||||
} else {
|
||||
/*
|
||||
* We figured out the type of the uploaded file.
|
||||
*/
|
||||
Syslog('b', "File type is %s", arc);
|
||||
|
||||
if ((arc = GetFileType(dp->d_name)) == NULL) {
|
||||
/*
|
||||
* If the filetype is unknown, it is probably
|
||||
* a textfile or so. Import it direct.
|
||||
*/
|
||||
Syslog('b', "Unknown file type");
|
||||
ImportHome(dp->d_name);
|
||||
/*
|
||||
* MS-DOS executables are handled direct.
|
||||
*/
|
||||
if ((strcmp("EXE", arc) == 0) || (strcmp("COM", arc) == 0)) {
|
||||
if (!ScanDirect(basename(tmpf->filename))) {
|
||||
ImportHome(basename(tmpf->filename));
|
||||
Count++;
|
||||
}
|
||||
} else {
|
||||
/*
|
||||
* We figured out the type of the uploaded file.
|
||||
*/
|
||||
Syslog('b', "File type is %s", arc);
|
||||
|
||||
/*
|
||||
* MS-DOS executables are handled direct.
|
||||
*/
|
||||
if ((strcmp("EXE", arc) == 0) || (strcmp("COM", arc) == 0)) {
|
||||
if (!ScanDirect(dp->d_name))
|
||||
ImportHome(dp->d_name);
|
||||
} else {
|
||||
switch(ScanArchive(dp->d_name, arc)) {
|
||||
case 0: ImportHome(dp->d_name);
|
||||
break;
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
case 3: /*
|
||||
* No valid unarchiver found, just import
|
||||
*/
|
||||
ImportHome(dp->d_name);
|
||||
break;
|
||||
}
|
||||
switch(ScanArchive(basename(tmpf->filename), arc)) {
|
||||
case 0: ImportHome(basename(tmpf->filename));
|
||||
Count++;
|
||||
break;
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
case 3: /*
|
||||
* No valid unarchiver found, just import
|
||||
*/
|
||||
ImportHome(basename(tmpf->filename));
|
||||
Count++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
closedir(dirp);
|
||||
Home();
|
||||
|
||||
ReadExitinfo();
|
||||
exitinfo.Uploads++;
|
||||
exitinfo.Uploads += Count;
|
||||
WriteExitinfo();
|
||||
|
||||
tidy_upload(&up);
|
||||
Pause();
|
||||
free(File);
|
||||
free(sFileName);
|
||||
free(temp);
|
||||
return 1;
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
|
@ -759,20 +759,20 @@ char *GetFileType(char *fn)
|
||||
/*
|
||||
* Import file in area. Returns TRUE if successfull.
|
||||
*/
|
||||
int ImportFile(char *fn, int Area, int fileid, time_t iTime, off_t Size)
|
||||
int ImportFile(char *fn, int Area, int fileid, off_t Size)
|
||||
{
|
||||
char *temp, *temp1, msg[81];
|
||||
|
||||
temp = calloc(PATH_MAX, sizeof(char));
|
||||
temp1 = calloc(PATH_MAX, sizeof(char));
|
||||
sprintf(temp, "%s/%s", area.Path, fn);
|
||||
sprintf(temp1, "%s/%s/upl/%s", CFG.bbs_usersdir, exitinfo.Name, fn);
|
||||
sprintf(temp, "%s/%s", area.Path, basename(fn));
|
||||
sprintf(temp1, "%s", fn);
|
||||
|
||||
if ((file_mv(temp1, temp))) {
|
||||
WriteError("$Can't move %s to %s", fn, area.Path);
|
||||
} else {
|
||||
chmod(temp, 0664);
|
||||
if (Addfile(fn, Area, fileid)) {
|
||||
if (Addfile(basename(fn), Area, fileid)) {
|
||||
|
||||
ReadExitinfo();
|
||||
|
||||
@ -794,13 +794,6 @@ int ImportFile(char *fn, int Area, int fileid, time_t iTime, off_t Size)
|
||||
Syslog('b', "DownloadKToday %d", exitinfo.DownloadKToday);
|
||||
}
|
||||
|
||||
iTime /= 60; /* Divide Seconds by 60 to give minutes */
|
||||
/* You have */ /* extra minutes. */
|
||||
sprintf(msg, "%s %ld %s", (char *) Language(249), iTime, (char *) Language(259));
|
||||
PUTSTR(msg);
|
||||
Enter(1);
|
||||
exitinfo.iTimeLeft += iTime;
|
||||
|
||||
WriteExitinfo();
|
||||
free(temp);
|
||||
free(temp1);
|
||||
|
@ -20,7 +20,7 @@ char *GetFileType(char *);
|
||||
void Home(void);
|
||||
int ScanDirect(char *);
|
||||
int ScanArchive(char *, char *);
|
||||
int ImportFile(char *, int, int, time_t, off_t);
|
||||
int ImportFile(char *, int, int, off_t);
|
||||
unsigned long Quota(void);
|
||||
void ImportHome(char *);
|
||||
|
||||
|
@ -1011,10 +1011,10 @@ USHORT TOffline::TooOld (ULONG Restrict, class TMsgBase *Msg)
|
||||
*/
|
||||
void OLR_Upload(void)
|
||||
{
|
||||
char *File, *temp, *Arc, Dirpath[PATH_MAX], Filename[81], msg[81];
|
||||
time_t ElapstimeStart, ElapstimeFin, iTime;
|
||||
int err, RetVal = FALSE;
|
||||
char *File, *temp, *Arc, Dirpath[PATH_MAX], Filename[81];
|
||||
int rc = 0, RetVal = FALSE;
|
||||
FILE *fp;
|
||||
up_list *up = NULL, *tmpf;
|
||||
|
||||
if (strlen(CFG.bbsid) == 0) {
|
||||
PUTSTR((char *)"System configuration error, inform sysop");
|
||||
@ -1029,57 +1029,17 @@ void OLR_Upload(void)
|
||||
/* Offline Reader Upload */
|
||||
poutCR(LIGHTMAGENTA, BLACK, (char *)Language(439));
|
||||
|
||||
if (!ForceProtocol())
|
||||
return;
|
||||
|
||||
File = calloc(PATH_MAX, sizeof(char));
|
||||
temp = calloc(PATH_MAX, sizeof(char));
|
||||
|
||||
Enter(1);
|
||||
/* Please start your upload now */
|
||||
sprintf(msg, "%s, %s", sProtAdvice, (char *) Language(283));
|
||||
pout(CFG.HiliteF, CFG.HiliteB, msg);
|
||||
Enter(2);
|
||||
Syslog('+', "Upload using %s", sProtName);
|
||||
|
||||
sprintf(temp, "%s/%s/upl", CFG.bbs_usersdir, exitinfo.Name);
|
||||
|
||||
if (chdir(temp)) {
|
||||
WriteError("$Can't chdir to %s", temp);
|
||||
if ((rc = upload(&up))) {
|
||||
Syslog('+', "Upload failed, rc=%d", rc);
|
||||
return;
|
||||
}
|
||||
|
||||
sleep(2);
|
||||
ElapstimeStart = time(NULL);
|
||||
|
||||
/*
|
||||
* Get the file
|
||||
*/
|
||||
Altime(7200);
|
||||
alarm_set(7190);
|
||||
err = execute_str(sProtUp, (char *)"", NULL, NULL, NULL, NULL);
|
||||
if (rawport() != 0) {
|
||||
WriteError("Unable to set raw mode");
|
||||
}
|
||||
if (err) {
|
||||
WriteError("$Upload error %d, prot: %s", err, sProtUp);
|
||||
}
|
||||
Altime(0);
|
||||
alarm_off();
|
||||
alarm_on();
|
||||
|
||||
Enter(1);
|
||||
ElapstimeFin = time(NULL);
|
||||
|
||||
/*
|
||||
* Get the upload time.
|
||||
*/
|
||||
iTime = ElapstimeFin - ElapstimeStart;
|
||||
if (!iTime)
|
||||
iTime = 1;
|
||||
|
||||
Syslog('m', "Transfer time %ld", iTime);
|
||||
Home();
|
||||
Enter(1);
|
||||
|
||||
sprintf(Dirpath, "%s/%s/upl", CFG.bbs_usersdir, exitinfo.Name);
|
||||
sprintf(Filename, "%s.NEW", CFG.bbsid);
|
||||
@ -1097,12 +1057,18 @@ void OLR_Upload(void)
|
||||
|
||||
if (RetVal == FALSE) {
|
||||
WriteError("Invalid OLR packed received");
|
||||
for (tmpf = up; tmpf; tmpf = tmpf->next) {
|
||||
Syslog('+', "Delete %s", tmpf->filename);
|
||||
unlink(tmpf->filename);
|
||||
}
|
||||
tidy_upload(&up);
|
||||
/* Invalid packet received */
|
||||
pout(LIGHTRED, BLACK, (char *)Language(440));
|
||||
Enter(2);
|
||||
sleep(2);
|
||||
sleep(3);
|
||||
return;
|
||||
}
|
||||
tidy_upload(&up);
|
||||
|
||||
sprintf(File, "%s/%s", Dirpath, Filename);
|
||||
Syslog('+', "Received OLR packet %s", File);
|
||||
@ -1112,6 +1078,7 @@ void OLR_Upload(void)
|
||||
poutCR(LIGHTRED, BLACK, (char *)Language(441));
|
||||
Syslog('+', "Unknown compression type");
|
||||
Pause();
|
||||
unlink(File);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1134,6 +1101,7 @@ void OLR_Upload(void)
|
||||
/* Archiver not available */
|
||||
poutCR(LIGHTRED, BLACK, (char *)Language(442));
|
||||
Pause();
|
||||
unlink(File);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1147,11 +1115,11 @@ void OLR_Upload(void)
|
||||
Syslog('m', "Unarc %s", temp);
|
||||
colour(CFG.HiliteF, CFG.HiliteB);
|
||||
|
||||
err = execute_str(archiver.funarc, File, NULL, (char *)"/dev/null", (char *)"/dev/null", (char *)"/dev/null");
|
||||
rc = execute_str(archiver.funarc, File, NULL, (char *)"/dev/null", (char *)"/dev/null", (char *)"/dev/null");
|
||||
if (rawport() != 0) {
|
||||
WriteError("Unable to set raw mode");
|
||||
}
|
||||
if (err) {
|
||||
if (rc) {
|
||||
WriteError("$Failed %s", temp);
|
||||
/* ERROR */
|
||||
poutCR(LIGHTRED, BLACK, (char *) Language(217));
|
||||
|
@ -349,14 +349,42 @@ int download(down_list *download_list)
|
||||
|
||||
|
||||
|
||||
void tidy_upload(up_list **fdp)
|
||||
{
|
||||
up_list *tmp, *old;
|
||||
|
||||
for (tmp = *fdp; tmp; tmp = old) {
|
||||
old = tmp->next;
|
||||
if (tmp->filename)
|
||||
free(tmp->filename);
|
||||
free(tmp);
|
||||
}
|
||||
|
||||
*fdp = NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Upload files from the user.
|
||||
* Returns:
|
||||
* 0 - All seems well
|
||||
* 1 - No transfer protocol selected.
|
||||
* 2 - Transfer failed
|
||||
*/
|
||||
int upload(up_list *upload_list)
|
||||
int upload(up_list **upload_list)
|
||||
{
|
||||
char *temp;
|
||||
struct dirent *dp;
|
||||
DIR *dirp;
|
||||
struct stat statfile;
|
||||
struct timeval starttime, endtime;
|
||||
struct timezone tz;
|
||||
unsigned long Size = 0;
|
||||
int err, Count = 0, rc = 0;
|
||||
up_list *tmp, *ta;
|
||||
|
||||
/*
|
||||
* If user has no default protocol, make sure he has one.
|
||||
*/
|
||||
@ -364,7 +392,91 @@ int upload(up_list *upload_list)
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
temp = calloc(PATH_MAX, sizeof(char));
|
||||
|
||||
/* Please start your upload now */
|
||||
sprintf(temp, "%s, %s", sProtAdvice, (char *) Language(283));
|
||||
pout(CFG.HiliteF, CFG.HiliteB, temp);
|
||||
Enter(2);
|
||||
Syslog('+', "Upload using %s", sProtName);
|
||||
|
||||
sprintf(temp, "%s/%s/upl", CFG.bbs_usersdir, exitinfo.Name);
|
||||
|
||||
if (chdir(temp)) {
|
||||
WriteError("$Can't chdir to %s", temp);
|
||||
free(temp);
|
||||
return 1;
|
||||
}
|
||||
sleep(2);
|
||||
|
||||
if (uProtInternal) {
|
||||
} else {
|
||||
/*
|
||||
* External protocol
|
||||
*/
|
||||
gettimeofday(&starttime, &tz);
|
||||
|
||||
Altime(7200);
|
||||
alarm_set(7190);
|
||||
err = execute_str(sProtUp, (char *)"", NULL, NULL, NULL, NULL);
|
||||
if (rawport() != 0) {
|
||||
WriteError("Unable to set raw mode");
|
||||
}
|
||||
if (err) {
|
||||
WriteError("$Upload error %d, prot: %s", err, sProtUp);
|
||||
rc = 2;
|
||||
}
|
||||
Altime(0);
|
||||
alarm_off();
|
||||
alarm_on();
|
||||
|
||||
gettimeofday(&endtime, &tz);
|
||||
|
||||
/*
|
||||
* With external protocols we don't know anything about what we got.
|
||||
* Just check the files in the users upload directory.
|
||||
*/
|
||||
if ((dirp = opendir(".")) == NULL) {
|
||||
WriteError("$Upload: can't open ./upl");
|
||||
Home();
|
||||
rc = 1;
|
||||
} else {
|
||||
while ((dp = readdir(dirp)) != NULL) {
|
||||
if (*(dp->d_name) != '.') {
|
||||
stat(dp->d_name, &statfile);
|
||||
Syslog('+', "Uploaded \"%s\", %ld bytes", dp->d_name, statfile.st_size);
|
||||
Count++;
|
||||
Size += statfile.st_size;
|
||||
sprintf(temp, "%s/%s/upl/%s", CFG.bbs_usersdir, exitinfo.Name, dp->d_name);
|
||||
chmod(temp, 0660);
|
||||
|
||||
/*
|
||||
* Add uploaded file to the list
|
||||
*/
|
||||
tmp = (up_list *)malloc(sizeof(up_list));
|
||||
tmp->next = NULL;
|
||||
tmp->filename = xstrcpy(temp);
|
||||
tmp->size = Size;
|
||||
|
||||
if (*upload_list == NULL) {
|
||||
*upload_list = tmp;
|
||||
} else {
|
||||
for (ta = *upload_list; ta; ta = ta->next) {
|
||||
if (ta->next == NULL) {
|
||||
ta->next = (up_list *)tmp;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
closedir(dirp);
|
||||
Syslog('+', "Upload %s in %d file(s)", transfertime(starttime, endtime, (unsigned long)Size, FALSE), Count);
|
||||
}
|
||||
}
|
||||
free(temp);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
|
@ -27,18 +27,17 @@ typedef struct _down_list {
|
||||
*/
|
||||
typedef struct _up_list {
|
||||
struct _up_list *next;
|
||||
char *remote; /* Remote filename */
|
||||
char *local; /* Local filename */
|
||||
long cps; /* CPS after received */
|
||||
unsigned success : 1; /* If received Ok. */
|
||||
char *filename; /* Filename */
|
||||
unsigned long size; /* Filesize */
|
||||
} up_list;
|
||||
|
||||
int ForceProtocol(void);
|
||||
|
||||
void add_download(down_list **, char *, char *, long, unsigned long, int);
|
||||
void tidy_download(down_list **);
|
||||
int download(down_list *);
|
||||
int upload(up_list *);
|
||||
int ForceProtocol(void);
|
||||
void add_download(down_list **, char *, char *, long, unsigned long, int);
|
||||
void tidy_download(down_list **);
|
||||
int download(down_list *);
|
||||
void tidy_upload(up_list **);
|
||||
int upload(up_list **);
|
||||
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user