forked from dolphin-emu/dolphin
		
	
		
			
	
	
		
			45 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			45 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								// Copyright 2014 Dolphin Emulator Project
							 | 
						||
| 
								 | 
							
								// Licensed under GPLv2
							 | 
						||
| 
								 | 
							
								// 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"
							 | 
						||
| 
								 | 
							
								#include "Common/FileUtil.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class PCAP final : public NonCopyable
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
									// 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));
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									void AddPacket(const u8* bytes, size_t size);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								private:
							 | 
						||
| 
								 | 
							
									void AddHeader();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									std::unique_ptr<File::IOFile> m_fp;
							 | 
						||
| 
								 | 
							
								};
							 |