📄 savinglib.cpp
字号:
#include "savinglib.h"
#include <ctime>
#include <winsock2.h>
struct FileHeader {
unsigned long magicNumber;
unsigned short majorVersion;
unsigned short minorVersion;
unsigned long timezoneOff;
unsigned long timestampAcc;
unsigned long snapshotSize;
unsigned long linkLayer;
};
struct PacketHeader {
timeval timestamp;
unsigned long captured;
unsigned long entire;
};
#ifdef WIN32
typedef __int64 u_int64_t;
/*
* Number of micro-seconds between the beginning of the Windows epoch
* (Jan. 1, 1601) and the Unix epoch (Jan. 1, 1970).
*
* This assumes all Win32 compilers have 64-bit support.
*/
#if defined(_SC_VER) || defined(_SC_EXTENSIONS) || defined(__WATCOC__)
#define DELTA_EPOCH_IN_USEC 11644473600000000Ui64
#else
#define DELTA_EPOCH_IN_USEC 11644473600000000ULL
#endif
static u_int64_t filetime_to_unix_epoch (const FILETIME *ft)
{
u_int64_t res = (u_int64_t) ft->dwHighDateTime << 32;
res |= ft->dwLowDateTime;
res /= 10; /* from 100 nano-sec periods to usec */
res -= DELTA_EPOCH_IN_USEC; /* from Win epoch to Unix epoch */
return (res);
}
int gettimeofday (timeval *tv, void *tz)
{
FILETIME ft;
u_int64_t tim;
if (!tv) {
//errno = EINVAL;
return (-1);
}
GetSystemTimeAsFileTime (&ft);
tim = filetime_to_unix_epoch (&ft);
tv->tv_sec = (long) (tim / 1000000L);
tv->tv_usec = (long) (tim % 1000000L);
return (0);
}
#endif
savingLib::savingLib(const std::string& filepath)
{
ofs_.open(filepath.c_str(), std::ios::binary | std::ios::out);
FileHeader fileHeader;
::memset(&fileHeader, 0, sizeof(fileHeader));
fileHeader.magicNumber = 0xa1b2c3d4;
fileHeader.majorVersion = 2;
fileHeader.minorVersion = 4;
fileHeader.timezoneOff = 0;
fileHeader.timestampAcc = 0;
fileHeader.snapshotSize = 65535;
fileHeader.linkLayer = 140;
ofs_.write((char* )&fileHeader, sizeof(fileHeader));
}
savingLib::~savingLib()
{
ofs_.close();
}
void savingLib::save(const std::string& content)
{
save(content.data(), content.size());
}
void savingLib::save(const char* buffer, size_t length)
{
if(length < 10) return;
PacketHeader packetHeader;
::memset(&packetHeader, 0, sizeof(packetHeader));
gettimeofday(&packetHeader.timestamp, NULL);
packetHeader.captured = length/* - 10*/;
packetHeader.entire = length/* - 10*/;
ofs_.write((char* )&packetHeader, sizeof(packetHeader));
ofs_.write(buffer/* + 10*/, length/* - 10*/);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -