diff options
| author | Daniel Stenberg <daniel@haxx.se> | 2000-02-14 22:59:39 +0000 | 
|---|---|---|
| committer | Daniel Stenberg <daniel@haxx.se> | 2000-02-14 22:59:39 +0000 | 
| commit | 238baede4b24549a8cd9f10d72540268fa9af0e9 (patch) | |
| tree | bed99ef60b147e68b67c7f648af5ac71cbd26c0d /lib | |
| parent | 5a99be254566758d8ff42d905cad98b1ee7a2e87 (diff) | |
made upload/download work better simultaneously
now uses the new progress meter functions
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/download.c | 41 | 
1 files changed, 33 insertions, 8 deletions
diff --git a/lib/download.c b/lib/download.c index f2fd4448b..0c01f182e 100644 --- a/lib/download.c +++ b/lib/download.c @@ -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 */  | 
