use I2n::tmpfstream to write pcap dump files
[pingcheck] / src / tools / pcap.cpp
index b2d48a6..4c9cc58 100644 (file)
 #pragma pack(push, 1) // exact fit -- no padding of data in structs
 
 void write_pcap_packet_data(const std::string &data,
-                            FILE *fp,
+                            std::ostream &os,
                             const time_t &capture_time)
 {
     std::size_t data_size = data.size();
 
     // create a pcap header
-    pcapfile_hdr_t pcap_hdr;
-    pcap_hdr.magic_number = 0xa1b2c3d4;
-    pcap_hdr.version_major = 2;
-    pcap_hdr.version_minor = 4;
-    pcap_hdr.thiszone = 0;
-    pcap_hdr.sigfigs = 0;
-    pcap_hdr.snaplen = data_size;
-    pcap_hdr.network = 101;   // LINKTYPE_RAW, according to
+    pcapfile_hdr_t pcapfile_hdr;
+    pcapfile_hdr.magic_number = 0xa1b2c3d4;
+    pcapfile_hdr.version_major = 2;
+    pcapfile_hdr.version_minor = 4;
+    pcapfile_hdr.thiszone = 0;
+    pcapfile_hdr.sigfigs = 0;
+    pcapfile_hdr.snaplen = data_size;
+    pcapfile_hdr.network = 101;   // LINKTYPE_RAW, according to
                               // http://www.tcpdump.org/linktypes.html
 
     // create a record (packet) header
@@ -53,9 +53,9 @@ void write_pcap_packet_data(const std::string &data,
     pcaprec_hdr.orig_len = data_size;
 
     // write data
-    fwrite(&pcap_hdr, sizeof(pcapfile_hdr_t), 1, fp);
-    fwrite(&pcaprec_hdr, sizeof(pcaprec_hdr_t), 1, fp);
-    fwrite(data.c_str(), sizeof(char), data_size, fp);
+    os.write( (char *)&pcapfile_hdr, sizeof(pcapfile_hdr_t) );
+    os.write( (char *)&pcaprec_hdr,  sizeof( pcaprec_hdr_t) );
+    os << data;
 }
 
 //const uint32_t pcap_magic_number = 0xa1b2c3d4;