int main( int argc, char *argv[] ) { //get args get_args(argc, argv); initDefaultSettings(); //read settings file ReadConfigFile(); //init system SystemInit(&argc,argv); initNetwork(); //starting the tracker start_tracker(); while(1) { //parse network handle_tracker(); check_serveractivity(); #ifdef macintosh mac_yield_cpu (10000); #else SDL_Delay(10); #endif } stop_tracker(); //cleanup return 0; }
// main(argc, argv) // The main loop! int main(int argc, char *argv[]) { task_t *tracker_task, *listen_task, *t; struct in_addr tracker_addr; int tracker_port; char *s; const char *myalias; struct passwd *pwent; // Default tracker is read.cs.ucla.edu osp2p_sscanf("131.179.80.139:11111", "%I:%d", &tracker_addr, &tracker_port); if ((pwent = getpwuid(getuid()))) { myalias = (const char *) malloc(strlen(pwent->pw_name) + 20); sprintf((char *) myalias, "%s%d", pwent->pw_name, (int) time(NULL)); } else { myalias = (const char *) malloc(40); sprintf((char *) myalias, "osppeer%d", (int) getpid()); } // Ignore broken-pipe signals: if a connection dies, server should not signal(SIGPIPE, SIG_IGN); // Process arguments argprocess: if (argc >= 3 && strcmp(argv[1], "-t") == 0 && (osp2p_sscanf(argv[2], "%I:%d", &tracker_addr, &tracker_port) >= 0 || osp2p_sscanf(argv[2], "%d", &tracker_port) >= 0 || osp2p_sscanf(argv[2], "%I", &tracker_addr) >= 0) && tracker_port > 0 && tracker_port <= 65535) { argc -= 2, argv += 2; goto argprocess; } else if (argc >= 2 && argv[1][0] == '-' && argv[1][1] == 't' && (osp2p_sscanf(argv[1], "-t%I:%d", &tracker_addr, &tracker_port) >= 0 || osp2p_sscanf(argv[1], "-t%d", &tracker_port) >= 0 || osp2p_sscanf(argv[1], "-t%I", &tracker_addr) >= 0) && tracker_port > 0 && tracker_port <= 65535) { --argc, ++argv; goto argprocess; } else if (argc >= 3 && strcmp(argv[1], "-d") == 0) { if (chdir(argv[2]) == -1) die("chdir"); argc -= 2, argv += 2; goto argprocess; } else if (argc >= 2 && argv[1][0] == '-' && argv[1][1] == 'd') { if (chdir(argv[1]+2) == -1) die("chdir"); --argc, ++argv; goto argprocess; } else if (argc >= 3 && strcmp(argv[1], "-b") == 0 && osp2p_sscanf(argv[2], "%d", &evil_mode) >= 0) { argc -= 2, argv += 2; goto argprocess; } else if (argc >= 2 && argv[1][0] == '-' && argv[1][1] == 'b' && osp2p_sscanf(argv[1], "-b%d", &evil_mode) >= 0) { --argc, ++argv; goto argprocess; } else if (argc >= 2 && strcmp(argv[1], "-b") == 0) { evil_mode = 1; --argc, ++argv; goto argprocess; } else if (argc >= 2 && (strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-h") == 0)) { printf("Usage: osppeer [-tADDR:PORT | -tPORT] [-dDIR] [-b]\n" "Options: -tADDR:PORT Set tracker address and/or port.\n" " -dDIR Upload and download files from directory DIR.\n" " -b[MODE] Evil mode!!!!!!!!\n"); exit(0); } // Connect to the tracker and register our files. tracker_task = start_tracker(tracker_addr, tracker_port); listen_task = start_listen(); register_files(tracker_task, myalias); // First, download files named on command line. pid_t pid; for (; argc > 1; argc--, argv++) if ((t = start_download(tracker_task, argv[1]))){ pid = fork(); if(pid == 0){ task_download(t, tracker_task); _exit(0); } else if(pid > 0){} else if(pid == -1) error("Fork failed for download\n"); } int n_tasks = 0; // Then accept connections from other peers and upload files to them! while ((t = task_listen(listen_task))){ message("Beginning of while, n_tasks = %d\n", n_tasks); if(n_tasks >= MAX_NUM_TASKS){ if(waitpid(-1, 0, 0) > 0){ message("Waiting for other proc, n_tasks = %d\n", n_tasks); n_tasks--; } } else if(n_tasks < MAX_NUM_TASKS){ pid = fork(); if(pid == 0){ //message("New Task STARTED for upload, n_tasks = %d\n", n_tasks); task_upload(t); //message("New Task ENDED for upload, n_tasks = %d\n", n_tasks); _exit(0); } else if(pid > 0){ n_tasks++; } else if(pid == -1) error("Fork failed for upload\n"); } } return 0; }