Example #1
0
int untar_gui(const char *args) {
	char tarFile[1024] = "";
	char destFile[1024] = "";
	char outputFile[1024] = "";
	char tarPos[100 * 1024];
	
	if(sscanf(args, "%s %s %s %s", tarFile, destFile, tarPos, outputFile) != 4) {
		cerr << "untar: bad arguments" << endl;
		return(1);
	}
	
	cout << tarFile << endl;
	cout << destFile << endl;
	cout << tarPos << endl;
	cout << outputFile << endl;
	
	Tar tar;
	if(tar.tar_open(tarFile, O_RDONLY) == -1) {
		cerr << "untar: open file " << tarFile << " failed" << endl;
		return(1);
	}
	FILE *outputFileHandle = fopen(outputFile, "wb");
	if(!outputFileHandle) {
		cerr << "untar: open output file " << outputFile << " failed" << endl;
		return(1);
	}
	tar.tar_read_save_parameters(outputFileHandle);
	tar.tar_read((string(destFile) + ".*").c_str(), destFile, 0, NULL, tarPos);
	fclose(outputFileHandle);
	
	return(0);
 
}
Example #2
0
int			    
TarQueue::write(int qtype, unsigned int time, data_t data) {
	stringstream tar_dir, tar_name;
	tar_dir << opt_chdir << "/" << setfill('0') << setw(4) << data.year << setw(1) << "-" << setw(2) << data.mon << setw(1) << "-" << setw(2) << data.day << setw(1) << "/" << setw(2) << data.hour << setw(1) << "/" << setw(2) << data.minute << setw(1) << "/" << setw(0) << qtype2strC(qtype);
	
	tar_name << tar_dir.str() << "/" << qtype2str(qtype) << "_" << setfill('0') << setw(4) << data.year << setw(1) << "-" << setw(2) << data.mon << setw(1) << "-" << setw(2) << data.day << setw(1) << "-" << setw(2) << data.hour << setw(1) << "-" << setw(2) << data.minute << ".tar";
	switch(qtype) {
	case 1:
		switch(opt_pcap_dump_tar_compress_sip) {
		case 1:
			tar_name << ".gz";
			break;
		case 2:
			tar_name << ".xz";
			break;
		}
		break;
	case 2:
		switch(opt_pcap_dump_tar_compress_rtp) {
		case 1:
			tar_name << ".gz";
			break;
		case 2:
			tar_name << ".xz";
			break;
		}
		break;
	case 3:
		switch(opt_pcap_dump_tar_compress_graph) {
		case 1:
			tar_name << ".gz";
			break;
		case 2:
			tar_name << ".xz";
			break;
		}
		break;
	}
	mkdir_r(tar_dir.str(), 0777);
	//printf("tar_name %s\n", tar_name.str().c_str());
       
	pthread_mutex_lock(&tarslock);
	Tar *tar = tars[tar_name.str()];
	if(!tar) {
		tar = new FILE_LINE Tar;
		lock_okTarPointers();
		okTarPointers[tar] = glob_last_packet_time;
		unlock_okTarPointers();
		if(sverb.tar) syslog(LOG_NOTICE, "new tar %s\n", tar_name.str().c_str());
		if(sverb.tar) syslog(LOG_NOTICE, "add tar pointer %lx\n", (long)tar);
		tars[tar_name.str()] = tar;
		pthread_mutex_unlock(&tarslock);
		tar->tar_open(tar_name.str(), O_WRONLY | O_CREAT | O_APPEND, 0777, TAR_GNU);
		tar->tar.qtype = qtype;
		tar->created_at = time;
		tar->year = data.year;
		tar->mon = data.mon;
		tar->day = data.day;
		tar->hour = data.hour;
		tar->minute = data.minute;
		
		if(sverb.tar > 2) {
			char dateTimeString[20];
			sprintf(dateTimeString, "%4i-%02i-%02i %02i:%02i:00",
				data.year, data.mon, data.day, data.hour, data.minute);
			if(dateTimeString != sqlDateTimeString(tar->created_at)) {
				syslog(LOG_ERR, "BAD TAR set created_at: %s %lx %s %s %i %i",
				       tar->pathname.c_str(), (long)tar, dateTimeString, sqlDateTimeString(tar->created_at).c_str(),
				       time, data.buffer->getTime()); 
			}
		}

		tar->thread_id = tarThreadCounter[qtype] % maxthreads;
		++tarThreadCounter[qtype];
		
		if(sverb.tar) {
			syslog(LOG_NOTICE, "tar %s to thread %i", tar->pathname.c_str(), tar->thread_id);
		}
		
	} else {
		pthread_mutex_unlock(&tarslock);
	}
     
	data.tar = tar;
	data.time = time;
	tarthreads[tar->thread_id].qlock();
//	printf("push id:%u\n", tar->thread_id);
	tarthreads[tar->thread_id].queue_data[tar_name.str()].push_back(data);
	tarthreads[tar->thread_id].qunlock();
	return 0;
}