@@ -67,7 +67,7 @@ Packetcapture::Packetcapture(const std::string name, const PacketcaptureJsonObje
6767 * 'timeval struct ts' rapresents the system start time in epoch calculated as
6868 * actual time - system uptime
6969 *
70- * See line 141 or 307 of this file for more details
70+ * See line 161 or 329 of this file for more details
7171 */
7272
7373
@@ -119,9 +119,28 @@ void Packetcapture::writeDump(const std::vector<uint8_t> &packet){
119119 std::stringstream tmstmp;
120120 tmstmp << ltm->tm_mday << " -" << ltm->tm_mon << " -" << (ltm->tm_year + 1900 ) << " -" << ltm->tm_hour << " :" << ltm->tm_min << " :" << ltm->tm_sec ;
121121 dt = tmstmp.str ();
122+
123+ // getting temp folder
124+ // std::filesystem::temp_directory_path only in c++17
125+ // according to ISO/IEC 9945 (POSIX)
126+ char const *folder = getenv (" TMPDIR" );
127+ if (folder == 0 ){
128+ folder = getenv (" TMP" );
129+ if (folder == 0 ){
130+ folder = getenv (" TEMP" );
131+ if (folder == 0 ){
132+ folder = getenv (" TEMPDIR" );
133+ if (folder == 0 ){
134+ folder = " /tmp/" ;
135+ }
136+ }
137+ }
138+ }
139+ temp_folder = std::string (folder);
140+ random_number = std::to_string (rand ()%1000 ); // to avoid two files that using the same name
122141 }
123142
124- myFile.open (" capture_" + dt +" .pcap" , std::ios::binary | std::ios::app);
143+ myFile.open (temp_folder + " capture_" + dt + " _ " + random_number + " .pcap" , std::ios::binary | std::ios::app);
125144
126145 if (writeHeader == true ) {
127146 struct pcap_file_header *pcap_header = new struct pcap_file_header ;
@@ -245,10 +264,12 @@ std::string Packetcapture::getDump() {
245264
246265 if (network_mode_flag) {
247266 dump << " the service is running in network mode" ;
248- } else {
267+ } else if (temp_folder != " " ) {
249268 char *cwdr_ptr = get_current_dir_name ();
250269 std::string wdr (cwdr_ptr);
251- dump << " capture dump in " << wdr << " /capture_" + dt +" .pcap" << std::endl;
270+ dump << " capture dump in " << temp_folder << " capture_" + dt + " _" + random_number + " .pcap" << std::endl;
271+ } else {
272+ dump << " no packets captured" ;
252273 }
253274
254275 return dump.str ();
0 commit comments