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