--HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%402298
		
			
				
	
	
		
			89 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#ifndef _INCLUDE_GAMEDATAMD5_MAIN_H_
 | 
						|
#define _INCLUDE_GAMEDATAMD5_MAIN_H_
 | 
						|
 | 
						|
#include "TextParsers.h"
 | 
						|
#include "sm_memtable.h"
 | 
						|
#include "md5.h"
 | 
						|
 | 
						|
using namespace SourceMod;
 | 
						|
 | 
						|
size_t UTIL_Format(char *buffer, size_t maxlength, const char *fmt, ...);
 | 
						|
 | 
						|
class BuildMD5ableBuffer : public ITextListener_SMC
 | 
						|
{
 | 
						|
public:
 | 
						|
 | 
						|
	BuildMD5ableBuffer()
 | 
						|
	{
 | 
						|
		stringTable = new BaseStringTable(2048);
 | 
						|
		md5[0] = 0;
 | 
						|
		md5String[0] = 0;
 | 
						|
	}
 | 
						|
 | 
						|
	~BuildMD5ableBuffer()
 | 
						|
	{
 | 
						|
		delete stringTable;
 | 
						|
	}
 | 
						|
 | 
						|
	void ReadSMC_ParseStart()
 | 
						|
	{
 | 
						|
		checksum = MD5();
 | 
						|
	}
 | 
						|
 | 
						|
	SMCResult ReadSMC_KeyValue(const SMCStates *states, const char *key, const char *value)
 | 
						|
	{
 | 
						|
		stringTable->AddString(key);
 | 
						|
		stringTable->AddString(value);
 | 
						|
 | 
						|
		return SMCResult_Continue;
 | 
						|
	}
 | 
						|
 | 
						|
	SMCResult ReadSMC_NewSection(const SMCStates *states, const char *name)
 | 
						|
	{
 | 
						|
		stringTable->AddString(name);
 | 
						|
 | 
						|
		return SMCResult_Continue;
 | 
						|
	}
 | 
						|
 | 
						|
	void ReadSMC_ParseEnd(bool halted, bool failed)
 | 
						|
	{
 | 
						|
		if (halted || failed)
 | 
						|
		{
 | 
						|
			return;
 | 
						|
		}
 | 
						|
 | 
						|
		void *data = stringTable->GetMemTable()->GetAddress(0);
 | 
						|
 | 
						|
		if (data != NULL)
 | 
						|
		{
 | 
						|
			checksum.update((unsigned char *)data, stringTable->GetMemTable()->GetActualMemUsed());
 | 
						|
		}
 | 
						|
 | 
						|
		checksum.finalize();
 | 
						|
 | 
						|
		checksum.hex_digest(md5String);
 | 
						|
		checksum.raw_digest(md5);
 | 
						|
 | 
						|
		stringTable->Reset();
 | 
						|
	}
 | 
						|
 | 
						|
	unsigned char * GetMD5()
 | 
						|
	{
 | 
						|
		return md5;
 | 
						|
	}
 | 
						|
 | 
						|
	unsigned char * GetMD5String()
 | 
						|
	{
 | 
						|
		return (unsigned char *)&md5String[0];
 | 
						|
	}
 | 
						|
 | 
						|
private:
 | 
						|
	MD5 checksum;
 | 
						|
	unsigned char md5[16];
 | 
						|
	char md5String[33];
 | 
						|
	BaseStringTable *stringTable;
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
#endif // _INCLUDE_GAMEDATAMD5_MAIN_H_
 |