/* * pure-purfile.c : file putting routine for PURE network service. * * $Id: pure-putfile.c,v 1.1 2000/12/30 16:31:42 simm Exp $ */ #include "pure.h" #define BUFSIZE (4096) int pure_open_putfile( dcc_file* file ) { /* open file */ if ( ( file->handle = open( file->name, O_RDONLY | O_BINARY ) ) < 0 ) return -1; /* get size and set position */ file->size = lseek( file->handle, 0, SEEK_END ); return 0; } int pure_putfile( dcc_file* file, net_peer* peer ) { int len, pos, old, new; u_long report; char buf[BUFSIZE]; old = -1; pos = lseek( file->handle, file->offset, SEEK_SET ); while ( ( len = read( file->handle, buf, BUFSIZE ) ) > 0 ) { write( peer->handle, buf, len ); pos += len; while ( read( peer->handle, &report, sizeof(u_long)) > 0 && ntohl( report ) < pos ) ; new = 100 * pos / file->size; if ( old / 10 < new / 10 ) { printf( "[REPORT] %d %d %d\n", new, pos, file->size ); old = new; } } return 0; }