diff -r 7602d7fb60d9 -r 026da5437111 core/GameDataFetcher.h --- a/core/GameDataFetcher.h Fri Jul 11 06:51:21 2008 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,185 +0,0 @@ -/** -* vim: set ts=4 : -* ============================================================================= -* SourceMod -* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. -* ============================================================================= -* -* This program is free software; you can redistribute it and/or modify it under -* the terms of the GNU General Public License, version 3.0, as published by the -* Free Software Foundation. -* -* This program is distributed in the hope that it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -* details. -* -* You should have received a copy of the GNU General Public License along with -* this program. If not, see . -* -* As a special exception, AlliedModders LLC gives you permission to link the -* code of this program (as well as its derivative works) to "Half-Life 2," the -* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software -* by the Valve Corporation. You must obey the GNU General Public License in -* all respects for all other code used. Additionally, AlliedModders LLC grants -* this exception to all derivative works. AlliedModders LLC defines further -* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), -* or . -* -* Version: $Id$ -*/ - -#ifndef _INCLUDE_SOURCEMOD_GAMEDATAFETCHER_H_ -#define _INCLUDE_SOURCEMOD_GAMEDATAFETCHER_H_ - -#include "sourcemod.h" -#include "TextParsers.h" -#include "IThreader.h" -#include "Logger.h" -#include "LibrarySys.h" -#include "ThreadSupport.h" -#include "md5.h" -#include "sm_memtable.h" - -enum UpdateStatus -{ - Update_Unknown = 0, /* Version wasn't recognised or version querying is unsupported */ - Update_Current = 1, /* Server is running latest version */ - Update_NewBuild = 2, /* Server is on a svn release and a newer version is available */ - Update_MinorAvailable = 3, /* Server is on a release and a minor release has superceeded it */ - Update_MajorAvailable = 4, /* Server is on a release and a major release has superceeded it */ - Update_CriticalAvailable = 5, /* A critical update has been released (security fixes etc) */ -}; - -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; -}; - -struct FileData -{ - SourceHook::String *filename; - unsigned char checksum[33]; -}; - - -class FetcherThread : public IThread -{ -public: - FetcherThread() - { - //filenames = new BaseStringTable(200); - memtable = new BaseMemTable(4096); - } - - ~FetcherThread() - { - //delete filenames; - SourceHook::CVector::iterator iter = filenames.begin(); - - FileData *curData; - - while (iter != filenames.end()) - { - curData = (*iter); - delete curData->filename; - delete curData; - iter = filenames.erase(iter); - } - } - - void RunThread(IThreadHandle *pHandle); - void OnTerminate(IThreadHandle *pHandle, bool cancel); - -private: - int BuildGameDataQuery(char *buffer, int maxlen); - void ProcessGameDataQuery(int SocketDescriptor); - - /* These names are a lie. It's really NoMoreBlockingThan10Seconds */ - int NonBlockingRecv(int socketDescriptor, char *buffer, int len); - int NonBlockingSend(int socketDescriptor, char *buffer, int len); - - int ConnectSocket(); - - void HandleUpdateStatus(UpdateStatus status, short version[4]); - -public: - SourceHook::CVector filenames; -private: - BaseMemTable *memtable; -}; - -extern BuildMD5ableBuffer g_MD5Builder; -extern bool g_blockGameDataLoad; - -#endif // _INCLUDE_SOURCEMOD_GAMEDATAFETCHER_H_