Exemple #1
0
int main(int argc, char *argv[])
{
	char *env;
	int i, n, timeout = 250;
	struct connection *conn;

	method = "HEAD";

	while ((i = getopt(argc, argv, "hp:t:vT:")) != -1)
		switch ((char)i) {
		case 'h':
			usage(0);
		case 'p':
			set_proxy(optarg);
			break;
		case 't':
			thread_limit = strtol(optarg, NULL, 0);
			break;
		case 'v':
			verbose++;
			break;
		case 'T':
			read_timeout = strtol(optarg, NULL, 0);
			break;
		default:
			usage(1);
		}

	if (optind < argc)
		while (optind < argc)
			read_link_file(argv[optind++]);
	else
		read_urls(stdin);

	/* set_proxy will not use this if proxy already set */
	env = getenv("COMICS_PROXY");
	if (env)
		set_proxy(env);

	if (thread_limit == 0) {
		printf("You must allow at least one thread\n");
		exit(1);
	}

	if (thread_limit > n_comics)
		thread_limit = n_comics;

#ifdef _WIN32
	win32_init();
#else
	signal(SIGTERM, dump_outstanding);
	signal(SIGHUP, dump_outstanding);
#endif

	npoll = thread_limit + 1; /* add one for stdin */
	ufds = must_calloc(npoll, sizeof(struct pollfd));
	for (i = 0; i < npoll; ++i)
		ufds[i].fd = -1;

	while (head || outstanding) {

		start_next_comic();

		n = poll(ufds, npoll, timeout);
		if (n < 0) {
			my_perror("poll");
			continue;
		}

		if (n == 0) {
			timeout_connections();
			if (!start_next_comic())
				/* Once we have all the comics
				 * started, increase the timeout
				 * period. */
				timeout = 1000;
			continue;
		}

		for (conn = comics; conn; conn = conn->next)
			if (!conn->poll)
				continue;
			else if (conn->poll->revents & POLLOUT) {
				if (!conn->connected)
					check_connect(conn);
				else {
					time(&conn->access);
					write_request(conn);
				}
			} else if (conn->poll->revents & POLLIN) {
				/* This check is needed for openssl */
				if (!conn->connected)
					check_connect(conn);
				else
					read_conn(conn);
			}
	}

	out_results(comics, 0);

	return n_comics != gotit;
}
Exemple #2
0
int main(int argc, char *argv[])
{
	char *env;
	int i, verify = 0, clean = 0;

	while ((i = getopt(argc, argv, "cd:hi:kl:p:t:vCT:V")) != -1)
		switch ((char)i) {
		case 'c':
			clean = 1;
			break;
		case 'd':
			comics_dir = must_strdup(optarg);
			break;
		case 'h':
			usage(0);
		case 'i':
			add_index_dir(optarg);
			break;
		case 'k':
			unlink_index = 0;
			break;
		case 'l':
			links_only = fopen(optarg, "w");
			if (!links_only) {
				my_perror(optarg);
				exit(1);
			}
			break;
		case 'p':
			set_proxy(optarg);
			break;
		case 't':
			thread_limit = strtol(optarg, NULL, 0);
			threads_set = 1;
			break;
		case 'v':
			verbose++;
			break;
		case 'C':
#ifdef WANT_SSL
			openssl_list_ciphers();
#else
			puts("-C not supported.");
#endif
			exit(0);

		case 'T':
			read_timeout = strtol(optarg, NULL, 0);
			break;
		case 'V':
			verify = 1;
			break;
		default:
			usage(1);
		}

	if (optind < argc)
		while (optind < argc) {
			if (read_config(argv[optind])) {
				printf("Fatal error in config file\n");
				exit(1);
			}
			++optind;
		}
	else if (read_config(NULL)) {
		printf("Fatal error in config file\n");
		exit(1);
	}

	if (verify) {
		printf("Comics: %u Skipped today: %u\n", n_comics + skipped, skipped);
		if (verbose)
			dump_outstanding(0);
		return 0;
	}

	/* set_proxy will not use this if proxy already set */
	env = getenv("COMICS_PROXY");
	if (env)
		set_proxy(env);

	if (thread_limit == 0) {
		printf("You must allow at least one thread\n");
		exit(1);
	}

	if (thread_limit > n_comics)
		thread_limit = n_comics;

	cd_comics_dir(clean);

#ifdef _WIN32
	win32_init();
#else
	signal(SIGTERM, dump_outstanding);
	signal(SIGHUP, dump_outstanding);
	signal(SIGPIPE, sigpipe);
#endif

	if (links_only)
		fclose(links_only);

	want_extensions = 1;
	main_loop();

	out_results(comics, skipped);
#ifdef WIN32
	printf("Hit return to exit");
	getchar();
#endif

	free_cache(); /* for valgrind */
	free_comics(); /* for valgrind */
	if (debug_fp)
		fclose(debug_fp);
	return 0;
}
Exemple #3
0
void
do_intersect2(uint numPhrases, uint REPETITIONS)
{
	uint iters,currPhrase;
	
	int error = 0;
	double time, timeE, tot_time = 0;

	uint **patternSets; uint numIdsPerPattern; uint numOfPatterns;

	readPatternSetsIntersect (&numIdsPerPattern, &numOfPatterns, &patternSets);

#ifdef DEBUG_ON	
	uint i,j;
	fprintf(stderr,"\n parameters: maxNunPhr %d, numPhr %d, numIdPerPhr=%d",numPhrases , numOfPatterns,numIdsPerPattern);
	fprintf(stderr,"\n patterns to intersect (1 list per row) = \n");
	for (i=0;i<numOfPatterns; i++) {
		for (j=0;j<numIdsPerPattern;j++)
			fprintf(stderr,"[%d]", patternSets[i][j]);
		fprintf(stderr,"\n");
	}
	fprintf(stderr,"\n");
#endif
	
	if (numPhrases > numOfPatterns) {
		fprintf(stderr,"\nBuild_il: Error during intersect2 %u/%u IDs\n", numPhrases, numOfPatterns);
		exit(0);
	}
	
	//numPhrases = numOfPatterns;

#ifdef DO_LOG
static char log_file_name[10]="log.txt";
init_log(log_file_name);	
#endif
	uint *occs; uint numocc=0; uint tot_numocc=0;
	
	iters=0;
	currPhrase=0;
	for (currPhrase=0; currPhrase<numPhrases; currPhrase++) {
	
#ifdef DEBUG_ON	
		fprintf(stderr,"\n intersect Phrase-Pattern <<%u>> -->", currPhrase); 
		for (i=0;i<numIdsPerPattern;i++) fprintf(stderr,"[%d]", patternSets[currPhrase][i]);
#endif

	        
		/* extract */
		
		time = getTime ();
				
		for (iters=0;iters<REPETITIONS;iters++) {
			if (iters) free (occs);  //not in the first one.
			error = intersect_2_il (Index, patternSets[currPhrase][0], patternSets[currPhrase][1],
			                               &numocc, &occs);				                               
		}

		timeE=(getTime () - time)/REPETITIONS;
		tot_time += timeE;
		tot_numocc += numocc;
		//		fprintf(stderr,"\n i %u, occs = %u",currPhrase,numocc);

#ifdef DO_LOG
out_results(patternSets[currPhrase], numIdsPerPattern, occs, numocc);
#endif		

		plotResults(patternSets[currPhrase][0], patternSets[currPhrase][1], timeE, currPhrase+1, matlab, outfilename);
//		uint i;
//		fprintf(stderr,"\n ********  %d Ocurrencias found ...",numocc);
//		for ( i=0;i<numocc; i++) {fprintf(stderr,"\n occ[%3d] ==> %d",i,occs[i]);}


		IFERRORIL (error);	
		if (Verbose) {
			fwrite(&(currPhrase), sizeof(uint), 1, stdout);
			fwrite(&numocc, sizeof(numocc), 1, stdout);
			}		
#ifdef DEBUG_ON	
		fprintf(stderr,"\n NUMOCCS = %d ",numocc);fflush(stderr);
#endif			
		//fprintf(stderr,"\n NUMOCCS = %d ",numocc);fflush(stderr);
		if (numocc)
			free (occs);	//the resulting list has always allocated memory even though numoccs==0;
		numocc=0;
	}

#ifdef DO_LOG
end_log() ;
#endif
	endResults(  matlab, outfilename, numPhrases);

	freePatternSetsIntersect(patternSets, numOfPatterns);

	fprintf (stderr, "\nTotal Num occs found = %lu\n", (ulong)tot_numocc);
	fprintf (stderr, "Int2 time = %.8f msecs\n", tot_time*1);
	fprintf (stderr, "Int2_time/numOfPatterns = %.8f msecs/patt\n\n",
		 (tot_time * 1) / numOfPatterns);
	fprintf (stderr, "(Load_time+Int2_time)/numOfPatterns = %.8f msecs/patt\n\n",
		 ((Load_time+tot_time) * 1) / numOfPatterns);	

	fprintf (stderr, "Int2_time/occ = %.8f msecs per post \n\n",
		 (tot_time * 1) / tot_numocc);   
		 
/**/	fprintf(timeFile,"\n\t occs = %9lu :: time = %.8f msecs ",(ulong)tot_numocc,tot_time*1);
/**/	fprintf(timeFile,"\n\t    avg time per pattern = %.8f msecs ",(tot_time * 1) / numOfPatterns);
/**/	fprintf(timeFile,"\n\t      avg time per occur = %.8f msecs \n",(tot_time * 1) / tot_numocc);
		 		
			 
}
Exemple #4
0
void do_intersectN(uint numPhrases, uint REPETITIONS){
	uint iters,currPhrase;
	
	int error = 0;
	double time, tot_time = 0;

	uint **patternSets; uint numIdsPerPattern; uint numOfPatterns;

	readPatternSetsIntersect (&numIdsPerPattern, &numOfPatterns, &patternSets);

#ifdef DEBUG_ON	
	uint i,j;
	fprintf(stderr,"\n parameters: maxNunPhr %d, numPhr %d, numIdPerPhr=%d",numPhrases , numOfPatterns,numIdsPerPattern);
	fprintf(stderr,"\n patterns to intersect (1 list per row) = \n");
	for (i=0;i<numOfPatterns; i++) {
		for (j=0;j<numIdsPerPattern;j++)
			fprintf(stderr,"[%d]", patternSets[i][j]);
		fprintf(stderr,"\n");
	}
	fprintf(stderr,"\n");
#endif
	
	if (numPhrases > numOfPatterns) {
		fprintf(stderr,"\nBuild_il: Error during intersect2 %u/%u IDs\n", numPhrases, numOfPatterns);
		exit(0);
	}
	
	//numPhrases = numOfPatterns;

#ifdef DO_LOG
static char log_file_name[10]="logN.txt";
init_log(log_file_name);	
#endif

	uint *occs;  uint numocc=0; uint tot_numocc=0;
	
	iters=0;
	currPhrase=0;
	for (currPhrase=0; currPhrase<numPhrases; currPhrase++) {

#ifdef DEBUG_ON	
		fprintf(stderr,"\n intersect Phrase-Pattern <<%u>> \n", currPhrase); 
#endif
		        
		/* extract */
		time = getTime ();
				
		for (iters=0;iters<REPETITIONS;iters++) {
			if (numocc) free (occs);
			error = intersect_N_il (Index, patternSets[currPhrase], numIdsPerPattern, 
			                               &numocc, &occs);			
		}

		tot_time += (getTime () - time)/REPETITIONS;
		tot_numocc += numocc;

#ifdef DO_LOG
out_results(patternSets[currPhrase], numIdsPerPattern, occs, numocc);
#endif		
		IFERRORIL (error);	
		if (Verbose) {
			fwrite(&(currPhrase), sizeof(uint), 1, stdout);
			fwrite(&numocc, sizeof(numocc), 1, stdout);
			}		

#ifdef DEBUG_ON			
		fprintf(stderr,"\n NUMOCCS = %d ",numocc);fflush(stderr);
#endif
		if (numocc) free (occs);
		numocc=0;
		
	}

#ifdef DO_LOG
end_log() ;
#endif

	freePatternSetsIntersect(patternSets, numOfPatterns);

	fprintf (stderr, "Total Num occs found = %lu\n", (ulong)tot_numocc);
	fprintf (stderr, "IntN time = %.8f msecs\n", tot_time*1);
	fprintf (stderr, "IntN_time/numOfPatterns = %.8f msecs/patt\n\n",
		 (tot_time * 1) / numOfPatterns);
	fprintf (stderr, "(Load_time+IntN_time)/numOfPatterns = %.8f msecs/patt\n\n",
		 ((Load_time+tot_time) * 1) / numOfPatterns);	

	fprintf (stderr, "IntN_time/occ = %.8f msecs per post \n\n",
		 (tot_time * 1) / tot_numocc);  	
		 
/**/	fprintf(timeFile,"\n\t occs = %9lu :: time = %.8f msecs ",(ulong)tot_numocc,tot_time*1);
/**/	fprintf(timeFile,"\n\t    avg time per pattern = %.8f msecs ",(tot_time * 1) / numOfPatterns);
/**/	fprintf(timeFile,"\n\t      avg time per occur = %.8f msecs \n",(tot_time * 1) / tot_numocc);
			 
}			
Exemple #5
0
void
do_extract(uint numIdsToExtract, uint REPETITIONS)
{
	uint iters,currID;
	
	int error = 0;
	double time, tot_time = 0;

	uint *IDs; uint numOfIDs;

	readPatternSetsExtract (&numOfIDs, &IDs); //max number of ids to extract 

#ifdef DEBUG_ON	
	uint i;
	fprintf(stderr,"\n IDS = ");
	for (i=0;i<numOfIDs; i++) {fprintf(stderr,"[%d]", IDs[i]);}
	fprintf(stderr,"\n");
#endif	
	if (numIdsToExtract > numOfIDs) {
		fprintf(stderr,"\nBuild_il: Error during extract %u/%u IDs\n", numIdsToExtract, numOfIDs);
		exit(0);
	}
	
	numOfIDs = numIdsToExtract;

	uint *occs;  uint numocc=0; uint tot_numocc=0;
	
	iters=0;
	currID=0;
	for (currID=0; currID<numOfIDs; currID++) {
	

#ifdef DEBUG_ON	
		fprintf(stderr,"\n to extract List of ID <<%u>> \n", IDs[currID]);
#endif		        
		/* extract */
		time = getTime ();

#ifdef DO_LOG
static char log_file_name[10]="logE.txt";
init_log(log_file_name);	
#endif
				
		for (iters=0;iters<REPETITIONS;iters++) {
			if (numocc) free (occs);
			error =  extractList_il (Index, IDs[currID], &occs, &numocc); 
		}

		tot_time += (getTime () - time)/REPETITIONS;
		tot_numocc += numocc;
		
#ifdef DO_LOG
out_results(&(IDs[currID]), 1, occs, numocc);
#endif		

		IFERRORIL (error);	
		if (Verbose) {
			fwrite(&(IDs[currID]), sizeof(uint), 1, stdout);
			fwrite(&numocc, sizeof(numocc), 1, stdout);
			}		
			
		if (numocc) free (occs);
		numocc=0;
		
	}

#ifdef DO_LOG
end_log() ;
#endif
	freePatternSetsExtract(IDs);

	fprintf (stderr, "Total Num occs found = %lu\n", (ulong)tot_numocc);
	fprintf (stderr, "extract time = %.8f msecs\n", tot_time*1);
	fprintf (stderr, "extract_time/Num_IDs = %.8f msecs/ID\n\n",
		 		(tot_time * 1) / numOfIDs);
	fprintf (stderr, "(Load_time+extract_time)/Num_IDs = %.8f msecs/ID\n\n",
		 		((Load_time+tot_time) * 1) / numOfIDs);	
	fprintf (stderr, "extract_time/occ = %.8f msecs per post \n\n",
		 		(tot_time * 1) / tot_numocc);  
		 		
/**/	fprintf(timeFile,"\n\t occs = %9lu :: time = %.8f msecs ",(ulong)tot_numocc,tot_time*1);
/**/	fprintf(timeFile,"\n\t    avg time per pattern = %.8f msecs ",(tot_time * 1) / numOfIDs);
/**/	fprintf(timeFile,"\n\t      avg time per occur = %.8f msecs \n",(tot_time * 1) / tot_numocc);
		 		
		 		 
}