#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
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;