fixed a compat regression, forgot msvc does funky things with overloaded virtual calls
3 * =============================================================================
5 * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
6 * =============================================================================
8 * This program is free software; you can redistribute it and/or modify it under
9 * the terms of the GNU General Public License, version 3.0, as published by the
10 * Free Software Foundation.
12 * This program is distributed in the hope that it will be useful, but WITHOUT
13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
17 * You should have received a copy of the GNU General Public License along with
18 * this program. If not, see <http://www.gnu.org/licenses/>.
20 * As a special exception, AlliedModders LLC gives you permission to link the
21 * code of this program (as well as its derivative works) to "Half-Life 2," the
22 * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
23 * by the Valve Corporation. You must obey the GNU General Public License in
24 * all respects for all other code used. Additionally, AlliedModders LLC grants
25 * this exception to all derivative works. AlliedModders LLC defines further
26 * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
27 * or <http://www.sourcemod.net/license.php>.
32 #ifndef _INCLUDE_SOURCEMOD_GAMEDATAFETCHER_H_
33 #define _INCLUDE_SOURCEMOD_GAMEDATAFETCHER_H_
35 #include "sourcemod.h"
36 #include "TextParsers.h"
37 #include "IThreader.h"
39 #include "LibrarySys.h"
40 #include "ThreadSupport.h"
42 #include "sm_memtable.h"
46 Update_Unknown = 0, /* Version wasn't recognised or version querying is unsupported */
47 Update_Current = 1, /* Server is running latest version */
48 Update_NewBuild = 2, /* Server is on a svn release and a newer version is available */
49 Update_MinorAvailable = 3, /* Server is on a release and a minor release has superceeded it */
50 Update_MajorAvailable = 4, /* Server is on a release and a major release has superceeded it */
51 Update_CriticalAvailable = 5, /* A critical update has been released (security fixes etc) */
54 class BuildMD5ableBuffer : public ITextListener_SMC
60 stringTable = new BaseStringTable(2048);
70 void ReadSMC_ParseStart()
75 SMCResult ReadSMC_KeyValue(const SMCStates *states, const char *key, const char *value)
77 stringTable->AddString(key);
78 stringTable->AddString(value);
80 return SMCResult_Continue;
83 SMCResult ReadSMC_NewSection(const SMCStates *states, const char *name)
85 stringTable->AddString(name);
87 return SMCResult_Continue;
90 void ReadSMC_ParseEnd(bool halted, bool failed)
97 void *data = stringTable->GetMemTable()->GetAddress(0);
101 checksum.update((unsigned char *)data, stringTable->GetMemTable()->GetActualMemUsed());
106 checksum.hex_digest(md5String);
107 checksum.raw_digest(md5);
109 stringTable->Reset();
112 unsigned char * GetMD5()
117 unsigned char * GetMD5String()
119 return (unsigned char *)&md5String[0];
124 unsigned char md5[16];
126 BaseStringTable *stringTable;
131 SourceHook::String *filename;
132 unsigned char checksum[33];
136 class FetcherThread : public IThread
141 //filenames = new BaseStringTable(200);
142 memtable = new BaseMemTable(4096);
148 SourceHook::CVector<FileData *>::iterator iter = filenames.begin();
152 while (iter != filenames.end())
155 delete curData->filename;
157 iter = filenames.erase(iter);
161 void RunThread(IThreadHandle *pHandle);
162 void OnTerminate(IThreadHandle *pHandle, bool cancel);
165 int BuildGameDataQuery(char *buffer, int maxlen);
166 void ProcessGameDataQuery(int SocketDescriptor);
168 /* These names are a lie. It's really NoMoreBlockingThan10Seconds */
169 int NonBlockingRecv(int socketDescriptor, char *buffer, int len);
170 int NonBlockingSend(int socketDescriptor, char *buffer, int len);
174 void HandleUpdateStatus(UpdateStatus status, short version[4]);
177 SourceHook::CVector<FileData *> filenames;
179 BaseMemTable *memtable;
182 extern BuildMD5ableBuffer g_MD5Builder;
183 extern bool g_blockGameDataLoad;
185 #endif // _INCLUDE_SOURCEMOD_GAMEDATAFETCHER_H_