/* * main-dccput.c : main routine for DCC file put. * * $Id: main-dccput.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 == 1 ) { printf( "[USAGE] %s filename [peer host] [begin port] [end port]\n", av[0] ); return 1; } file.name = av[1]; peer.name = ( ac > 2 ) ? av[2] : NULL; peer.bport = ( ac > 3 ) ? atoi( av[3] ) : 0; peer.eport = ( ac > 4 ) ? atoi( av[4] ) : 0; /* open file */ if ( pure_open_putfile( &file ) ) error_exit( 2, &file, &peer, "cannot open file." ); /* listen to client */ if ( pure_server_wait( &peer, file.size ) < 0 ) error_exit( 3, &file, &peer, "cannot make network connection." ); /* read offset */ if ( ! fgets( buf, BUFSIZE, stdin ) ) error_exit( 4, &file, &peer, "cannot get offset position." ); if ( memcmp( buf, "OFFSET ", 7 ) ) error_exit( 5, &file, &peer, "received message syntax error." ); file.offset = strtoul( buf + 7, (char**)NULL, 10 ); printf( "[INFO] Offset %u\n", file.offset ); /* send file */ pure_putfile( &file, &peer ); /* that's all */ close( file.handle ); close( peer.handle ); return 0; }