2014-04-20 18:43:45 -06:00
|
|
|
// Copyright 2014 Dolphin Emulator Project
|
2015-05-17 17:08:10 -06:00
|
|
|
// Licensed under GPLv2+
|
2014-04-20 18:43:45 -06:00
|
|
|
// Refer to the license.txt file included.
|
|
|
|
|
|
|
|
// PCAP is a standard file format for network capture files. This also extends
|
|
|
|
// to any capture of packetized intercommunication data. This file provides a
|
|
|
|
// class called PCAP which is a very light wrapper around the file format,
|
|
|
|
// allowing only creating a new PCAP capture file and appending packets to it.
|
|
|
|
//
|
|
|
|
// Example use:
|
|
|
|
// PCAP pcap(new IOFile("test.pcap", "wb"));
|
|
|
|
// pcap.AddPacket(pkt); // pkt is automatically casted to u8*
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <cstddef>
|
|
|
|
#include <memory>
|
|
|
|
|
|
|
|
#include "Common/CommonTypes.h"
|
2017-01-15 13:46:32 -07:00
|
|
|
#include "Common/File.h"
|
2015-09-26 14:13:54 -06:00
|
|
|
#include "Common/NonCopyable.h"
|
2014-04-20 18:43:45 -06:00
|
|
|
|
|
|
|
class PCAP final : public NonCopyable
|
|
|
|
{
|
|
|
|
public:
|
2016-06-24 02:43:46 -06:00
|
|
|
// Takes ownership of the file object. Assumes the file object is already
|
|
|
|
// opened in write mode.
|
|
|
|
explicit PCAP(File::IOFile* fp) : m_fp(fp) { AddHeader(); }
|
|
|
|
template <typename T>
|
|
|
|
void AddPacket(const T& obj)
|
|
|
|
{
|
|
|
|
AddPacket(reinterpret_cast<const u8*>(&obj), sizeof(obj));
|
|
|
|
}
|
2014-04-20 18:43:45 -06:00
|
|
|
|
2016-06-24 02:43:46 -06:00
|
|
|
void AddPacket(const u8* bytes, size_t size);
|
2014-04-20 18:43:45 -06:00
|
|
|
|
|
|
|
private:
|
2016-06-24 02:43:46 -06:00
|
|
|
void AddHeader();
|
2014-04-20 18:43:45 -06:00
|
|
|
|
2016-06-24 02:43:46 -06:00
|
|
|
std::unique_ptr<File::IOFile> m_fp;
|
2014-04-20 18:43:45 -06:00
|
|
|
};
|