made upload/download work better simultaneously

now uses the new progress meter functions
This commit is contained in:
Daniel Stenberg 2000-02-14 22:59:39 +00:00
parent 5a99be2545
commit 238baede4b
1 changed files with 33 additions and 8 deletions

View File

@ -140,9 +140,17 @@ Transfer (struct UrlData *data,
now = tvnow();
start = now;
#define KEEP_READ 1
#define KEEP_WRITE 2
pgrsStartNow(data);
if (!getheader) {
header = FALSE;
#if 0
ProgressInit (data, size);
#endif
if(size > 0)
pgrsSetDownloadSize(data, size);
}
{
fd_set readfd;
@ -150,7 +158,7 @@ Transfer (struct UrlData *data,
fd_set rkeepfd;
fd_set wkeepfd;
struct timeval interval;
bool keepon = TRUE;
int keepon=0;
/* timeout every X second
- makes a better progressmeter (i.e even when no data is read, the
@ -162,11 +170,13 @@ Transfer (struct UrlData *data,
FD_ZERO (&readfd); /* clear it */
if(sockfd != -1) {
FD_SET (sockfd, &readfd); /* read socket */
keepon |= KEEP_READ;
}
FD_ZERO (&writefd); /* clear it */
if(writesockfd != -1) {
FD_SET (writesockfd, &writefd); /* write socket */
keepon |= KEEP_WRITE;
}
/* get these in backup variables to be able to restore them on each lap in
@ -182,12 +192,12 @@ Transfer (struct UrlData *data,
switch (select (maxfd, &readfd, &writefd, NULL, &interval)) {
case -1: /* select() error, stop reading */
keepon = FALSE;
keepon = 0; /* no more read or write */
continue;
case 0: /* timeout */
break;
default:
if((sockfd>-1) && FD_ISSET(sockfd, &readfd)) {
if((keepon & KEEP_READ) && FD_ISSET(sockfd, &readfd)) {
/* read! */
#ifdef USE_SSLEAY
if (data->use_ssl) {
@ -207,7 +217,7 @@ Transfer (struct UrlData *data,
/* if we receive 0 or less here, the server closed the connection and
we bail out from this! */
else if (0 >= (signed int) nread) {
keepon = FALSE;
keepon &= ~KEEP_READ;
break;
}
@ -290,8 +300,12 @@ Transfer (struct UrlData *data,
p++; /* pass the \r byte */
if ('\n' == *p)
p++; /* pass the \n byte */
#if 0
ProgressInit (data, size); /* init progress meter */
#endif
pgrsSetDownloadSize(data, size);
header = FALSE; /* no more header to parse! */
/* now, only output this if the header AND body are requested:
@ -459,10 +473,12 @@ Transfer (struct UrlData *data,
nread = data->maxdownload - bytecount;
if(nread < 0 ) /* this should be unusual */
nread = 0;
keepon = FALSE; /* we're done now! */
keepon &= ~KEEP_READ; /* we're done reading */
}
bytecount += nread;
pgrsSetDownloadCounter(data, (double)bytecount);
if (nread != data->fwrite (str, 1, nread, data->out)) {
failf (data, "Failed writing output");
@ -472,7 +488,7 @@ Transfer (struct UrlData *data,
} /* if (! header and data to read ) */
} /* if( read from socket ) */
if((writesockfd>-1) && FD_ISSET(writesockfd, &writefd)) {
if((keepon & KEEP_WRITE) && FD_ISSET(writesockfd, &writefd)) {
/* write */
char scratch[BUFSIZE * 2];
@ -485,9 +501,11 @@ Transfer (struct UrlData *data,
nread = data->fread(buf, 1, BUFSIZE, data->in);
writebytecount += nread;
pgrsSetUploadCounter(data, (double)writebytecount);
if (nread<=0) {
/* done */
keepon = FALSE;
keepon &= ~KEEP_WRITE; /* we're done writing */
break;
}
@ -528,9 +546,13 @@ Transfer (struct UrlData *data,
}
now = tvnow();
#if 0
if (!header) {
ProgressShow (data, bytecount, start, now, FALSE);
}
#endif
pgrsUpdate(data);
urg = speedcheck (data, now);
if (urg)
return urg;
@ -554,7 +576,10 @@ Transfer (struct UrlData *data,
contentlength-bytecount);
return URG_PARTIAL_FILE;
}
#if 0
ProgressShow (data, bytecount, start, now, TRUE);
#endif
pgrsUpdate(data);
if(bytecountp)
*bytecountp = bytecount; /* read count */