/*
* main-dccget.c : main routine for DCC file get.
*
* $Id: main-dccget.c,v 1.1 2000/12/30 16:31:42 simm Exp $
*/
#include "pure.h"
#define BUFSIZE (1024)
int error_exit( int retval, dcc_file* file, net_peer* peer, char* message )
{
if ( file ) if ( file->handle ) close( file->handle );
if ( peer ) if ( peer->handle ) close( peer->handle );
printf( "[ERROR] %s\n", message );
exit( retval );
}
int main( int ac, char** av )
{
net_peer peer;
dcc_file file;
char buf[BUFSIZE];
/* initialize handle */
file.handle = 0;
peer.handle = 0;
/* parse args */
if ( ac < 5 ) {
printf( "[USAGE] %s filename host port size [resume]\n", av[0] );
return 1;
}
file.name = av[1];
peer.name = av[2];
peer.port = atoi( av[3] );
file.size = strtoul( av[4], NULL, 10 );
/* open file */
if ( pure_open_getfile( &file, ( ac == 5 ) ? NULL : av[5] ) )
error_exit( 2, &file, &peer, "cannot open file." );
printf( "[INFO] OFFSET %u\n", file.offset );
/* wait until request */
if ( ! fgets( buf, BUFSIZE, stdin ) )
error_exit( 4, &file, &peer, "cannot get offset position." );
if ( buf[0] == '0' || buf[0] == 'n' || buf[0] == 'N' ) {
printf( "[INFO] DCC RESUME cancel, because peer not support\n" );
return 0;
}
/* connect to server */
if ( pure_client_connect( &peer ) < 0 )
error_exit( 3, &file, &peer, "cannot make network connection." );
/* get file */
if ( pure_getfile( &file, &peer ) < 0 )
error_exit( 4, &file, &peer, "cannot get file from peer." );
/* that's all */
close( file.handle );
close( peer.handle );
return 0;
}
syntax highlighted by Code2HTML, v. 0.9.1