
/* 
 * main program file for netrecon
 * See COPYING file for license details
 */

#include "prog.h"

/*
 * New programs are registered here
 */
extern struct prog scan;
extern struct prog scan6;
#ifndef SCAN
extern struct prog passive;
extern struct prog tcpdump;
extern struct prog arpsniff;
#endif

#ifndef SCAN
static struct prog *programs[] = {
	&scan, &scan6, &passive, &tcpdump, &arpsniff, NULL
};
#else
static struct prog *programs[] = {
	&scan, &scan6, NULL
};
#endif

static void print_usage(void)
{
	fprintf(stderr, "Usage: netrecon <command> <args> ...\n");
#ifndef SCAN
	fprintf(stderr, "%s\n%s\n%s\n%s\n%s\n",
		SCAN_USAGE, SCAN6_USAGE, PASSIVE_USAGE,
		TCPDUMP_USAGE, ARPSNIFF_USAGE);
#else
	fprintf(stderr, "%s\n%s\n", SCAN_USAGE, SCAN6_USAGE);
#endif
}

static int do_command(int argc, char *argv[])
{
	struct prog **p;

	for (p = programs; *p != NULL; p++) {
		if (strcmp(argv[0], p[0]->name) == 0)
			return (p[0]->main(argc, argv));
	}
	return (-1);
}

int main(int argc, char *argv[])
{
	if (argc < 2) {
		print_usage();
		exit(EXIT_FAILURE);
	}

	if (do_command(argc - 1, argv + 1) < 0) {
		print_usage();
		exit(1);
	}
	return (EXIT_SUCCESS);
}

