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); }
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; }