You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
3.6 KiB
99 lines
3.6 KiB
5 years ago
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// See download overview in src/engine/download_internal.h.
|
||
|
//
|
||
|
//=======================================================================================//
|
||
|
|
||
|
#ifndef REQUESTCONTEXT_H
|
||
|
#define REQUESTCONTEXT_H
|
||
|
|
||
|
//--------------------------------------------------------------------------------------------------------------
|
||
|
|
||
|
#include "engine/http.h"
|
||
|
|
||
|
//--------------------------------------------------------------------------------------------------------------
|
||
|
|
||
|
enum { BufferSize = 256 }; ///< BufferSize is used extensively within the download system to size char buffers.
|
||
|
|
||
|
//--------------------------------------------------------------------------------------------------------------
|
||
|
|
||
|
#ifdef POSIX
|
||
|
typedef void *LPVOID;
|
||
|
#endif
|
||
|
#if defined( _X360 ) || defined( POSIX )
|
||
|
typedef LPVOID HINTERNET;
|
||
|
#endif
|
||
|
|
||
|
//--------------------------------------------------------------------------------------------------------------
|
||
|
|
||
|
struct RequestContext_t
|
||
|
{
|
||
|
inline RequestContext_t()
|
||
|
{
|
||
|
memset( this, 0, sizeof( RequestContext_t ) );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* The main thread sets this when it wants to abort the download,
|
||
|
* or it is done reading data from a finished download.
|
||
|
*/
|
||
|
bool shouldStop;
|
||
|
|
||
|
/**
|
||
|
* The download thread sets this when it is exiting, so the main thread
|
||
|
* can delete the RequestContext_t.
|
||
|
*/
|
||
|
bool threadDone;
|
||
|
|
||
|
bool bIsBZ2; ///< true if the file is a .bz2 file that should be uncompressed at the end of the download. Set and used by main thread.
|
||
|
bool bAsHTTP; ///< true if downloaded via HTTP and not ingame protocol. Set and used by main thread
|
||
|
unsigned int nRequestID; ///< request ID for ingame download
|
||
|
|
||
|
HTTPStatus_t status; ///< Download thread status
|
||
|
DWORD fetchStatus; ///< Detailed status info for the download
|
||
|
HTTPError_t error; ///< Detailed error info
|
||
|
|
||
|
char baseURL[BufferSize]; ///< Base URL (including http://). Set by main thread.
|
||
|
char urlPath[BufferSize]; ///< Path to be appended to base URL. Set by main thread.
|
||
|
char absLocalPath[BufferSize]; ///< Full local path where the file should go. Set by main thread.
|
||
|
char gamePath[BufferSize]; ///< Game path to be appended to base path. Set by main thread.
|
||
|
char serverURL[BufferSize]; ///< Server URL (IP:port, loopback, etc). Set by main thread, and used for HTTP Referer header.
|
||
|
|
||
|
bool bSuppressFileWrite; ///< Set to true by main thread if we do not wish to write the file to disk
|
||
|
|
||
|
/**
|
||
|
* The file's timestamp, as returned in the HTTP Last-Modified header.
|
||
|
* Saved to ensure partial download resumes match the original cached data.
|
||
|
*/
|
||
|
char cachedTimestamp[BufferSize];
|
||
|
|
||
|
DWORD nBytesTotal; ///< Total bytes in the file
|
||
|
DWORD nBytesCurrent; ///< Current bytes downloaded
|
||
|
DWORD nBytesCached; ///< Amount of data present in cacheData.
|
||
|
|
||
|
/**
|
||
|
* Buffer for the full file data. Allocated/deleted by the download thread
|
||
|
* (which idles until the data is not needed anymore)
|
||
|
*/
|
||
|
unsigned char *data;
|
||
|
|
||
|
/**
|
||
|
* Buffer for partial data from previous failed downloads.
|
||
|
* Allocated/deleted by the main thread (deleted after download thread is done)
|
||
|
*/
|
||
|
unsigned char *cacheData;
|
||
|
|
||
|
// Used purely by the download thread - internal data -------------------
|
||
|
HINTERNET hOpenResource; ///< Handle created by InternetOpen
|
||
|
HINTERNET hDataResource; ///< Handle created by InternetOpenUrl
|
||
|
|
||
|
/**
|
||
|
* For any user data we may want to attach to a context
|
||
|
*/
|
||
|
void *pUserData;
|
||
|
};
|
||
|
|
||
|
//--------------------------------------------------------------------------------------------------------------
|
||
|
|
||
|
#endif // REQUESTCONTEXT_H
|