/* * 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; }