int main(int argc, char **argv)
{
  if( argc < 2 || param_check(argc,argv) < 0 ){
    usage();
    exit(1);
  }

  if( arg_flg_make_torrent ){
    if( !arg_announce ){ fprintf(stderr,"please use -u specify a announce url!\n"); exit(1);}
    if( !arg_save_as ){ fprintf(stderr,"please use -s specify a metainfo file name!\n"); exit(1);}
    if( BTCONTENT.InitialFromFS(arg_metainfo_file, arg_announce,  arg_piece_length) < 0 ||
       BTCONTENT.CreateMetainfoFile(arg_save_as) < 0){
      fprintf(stderr,"create metainfo failed.\n");
      exit(1);
    }
    printf("create metainfo file %s successful.\n", arg_save_as);
    exit(0);
  }

  if( BTCONTENT.InitialFromMI(arg_metainfo_file, arg_save_as) < 0){
    fprintf(stderr,"error,initial meta info failed.\n");
    exit(1);
  }

  if( !arg_flg_exam_only && !arg_flg_check_only){
    if(WORLD.Initial_ListenPort() < 0){
      fprintf(stderr,"warning,you couldn't accept connection.\n");
    }else
      printf("Listen on: %d\n",cfg_listen_port);

    Tracker.Initial();


    Random_init();

#ifndef __OS2__
    signal(SIGPIPE,SIG_IGN);
#endif
    signal(SIGINT,sigint_catch);
    Downloader();
  }

  exit(0);
}
Example #2
0
int main(int argc, char **argv)
{
	try {
		if (argc < 2) {
			throw argc;
		}
	} catch (int) {
		usage();
		exit(1);
	}

	char *s;

	Random_init();

	arg_user_agent = new char[MAX_PF_LEN + 1](); // free'd at end param_check()
	//memmove(arg_user_agent, PEER_PFX, MAX_PF_LEN);
	strcpy(arg_user_agent, PEER_PFX);
	cfg_user_agent = new char[strlen(PACKAGE_NAME) + strlen(PACKAGE_VERSION) + 2]();

	if (!cfg_user_agent)
		return -1;

	sprintf(cfg_user_agent, "%s/%s", PACKAGE_NAME, PACKAGE_VERSION);

	do {
		s = strchr(cfg_user_agent, ' ');
		if (s != NULL)
			*s = '-';
	} while (s);

	if (param_check(argc, argv) < 0) {
		if (arg_user_agent)
			delete[] arg_user_agent;
		return -1;
	}

	if (arg_flg_make_torrent) {
		if (!arg_announce) {
			CONSOLE.Warning(1,
				"Please use -u to specify an announce URL!");
			return EXIT_FAILURE;
		}
		if (!arg_save_as) {
			CONSOLE.Warning(1,
				"Please use -s to specify a metainfo file name!");
			return EXIT_FAILURE;
		}
		if (BTCONTENT.InitialFromFS(arg_metainfo_file, arg_announce,
			arg_piece_length) < 0 ||
			BTCONTENT.CreateMetainfoFile(arg_save_as) < 0) {
			CONSOLE.Warning(1, "create metainfo failed.");
			return EXIT_FAILURE;
		}
		CONSOLE.Print("Create metainfo file %s successful.", arg_save_as);
		return EXIT_SUCCESS;
	}

	if (arg_daemon)
		CONSOLE.Daemonize();

	if (!arg_flg_exam_only
		&& (!arg_flg_check_only || arg_flg_force_seed_mode))
		if (arg_ctcs)
			CTCS.Initial();

	if (BTCONTENT.InitialFromMI(arg_metainfo_file, arg_save_as) < 0) {
		CONSOLE.Warning(1, "error, initial meta info failed.");
		exit(1);
	}

	if (!arg_flg_exam_only
		&& (!arg_flg_check_only || arg_flg_force_seed_mode)) {
		if (WORLD.Initial_ListenPort() < 0) {
			CONSOLE.Warning(2,
				"warn, you can't accept connections.");
		}

		if (Tracker.Initial() < 0) {
			CONSOLE.Warning(1, "error, tracker setup failed.");
			return EXIT_FAILURE;
		}

		sig_setup(); // setup signal handling
		CONSOLE.Interact
			("Press 'h' or '?' for help (display/control client options).");
		Downloader();
		if (cfg_cache_size)
			BTCONTENT.FlushCache();
	}
	if (!arg_flg_exam_only)
		BTCONTENT.SaveBitfield();
	WORLD.CloseAll();

	if (arg_verbose)
		CONSOLE.cpu();

	return EXIT_SUCCESS;
}