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