diff options
| author | briaguya <70942617+briaguya-ai@users.noreply.github.com> | 2022-11-14 05:22:34 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-11-14 11:22:34 +0100 |
| commit | 3914781ebfd5cb22717cc207cb3d37d8754d0eb7 (patch) | |
| tree | 2e412b87e66b1deef47bef242e7189a200cea0ff /StormLib/src/FileStream.h | |
| parent | 9eb29ed81cb497a6a216811255f8af7daf3f8bd8 (diff) | |
Import libultraship as a submodule (#1943)
Co-authored-by: briaguya <briaguya>
Co-authored-by: Christopher Leggett <chris@leggett.dev>
Co-authored-by: David Chavez <davi@dcvz.io>
Diffstat (limited to 'StormLib/src/FileStream.h')
| -rw-r--r-- | StormLib/src/FileStream.h | 217 |
1 files changed, 0 insertions, 217 deletions
diff --git a/StormLib/src/FileStream.h b/StormLib/src/FileStream.h deleted file mode 100644 index 2bc118b28..000000000 --- a/StormLib/src/FileStream.h +++ /dev/null @@ -1,217 +0,0 @@ -/*****************************************************************************/ -/* FileStream.h Copyright (c) Ladislav Zezula 2012 */ -/*---------------------------------------------------------------------------*/ -/* Description: Definitions for FileStream object */ -/*---------------------------------------------------------------------------*/ -/* Date Ver Who Comment */ -/* -------- ---- --- ------- */ -/* 14.04.12 1.00 Lad The first version of FileStream.h */ -/*****************************************************************************/ - -#ifndef __FILESTREAM_H__ -#define __FILESTREAM_H__ - -//----------------------------------------------------------------------------- -// Function prototypes - -typedef void (*STREAM_INIT)( - struct TFileStream * pStream // Pointer to an unopened stream -); - -typedef bool (*STREAM_CREATE)( - struct TFileStream * pStream // Pointer to an unopened stream - ); - -typedef bool (*STREAM_OPEN)( - struct TFileStream * pStream, // Pointer to an unopened stream - const TCHAR * szFileName, // Pointer to file name to be open - DWORD dwStreamFlags // Stream flags - ); - -typedef bool (*STREAM_READ)( - struct TFileStream * pStream, // Pointer to an open stream - ULONGLONG * pByteOffset, // Pointer to file byte offset. If NULL, it reads from the current position - void * pvBuffer, // Pointer to data to be read - DWORD dwBytesToRead // Number of bytes to read from the file - ); - -typedef bool (*STREAM_WRITE)( - struct TFileStream * pStream, // Pointer to an open stream - ULONGLONG * pByteOffset, // Pointer to file byte offset. If NULL, it writes to the current position - const void * pvBuffer, // Pointer to data to be written - DWORD dwBytesToWrite // Number of bytes to read from the file - ); - -typedef bool (*STREAM_RESIZE)( - struct TFileStream * pStream, // Pointer to an open stream - ULONGLONG FileSize // New size for the file, in bytes - ); - -typedef bool (*STREAM_GETSIZE)( - struct TFileStream * pStream, // Pointer to an open stream - ULONGLONG * pFileSize // Receives the file size, in bytes - ); - -typedef bool (*STREAM_GETPOS)( - struct TFileStream * pStream, // Pointer to an open stream - ULONGLONG * pByteOffset // Pointer to store current file position - ); - -typedef void (*STREAM_CLOSE)( - struct TFileStream * pStream // Pointer to an open stream - ); - -typedef bool (*BLOCK_READ)( - struct TFileStream * pStream, // Pointer to a block-oriented stream - ULONGLONG StartOffset, // Byte offset of start of the block array - ULONGLONG EndOffset, // End offset (either end of the block or end of the file) - LPBYTE BlockBuffer, // Pointer to block-aligned buffer - DWORD BytesNeeded, // Number of bytes that are really needed - bool bAvailable // true if the block is available - ); - -typedef bool (*BLOCK_CHECK)( - struct TFileStream * pStream, // Pointer to a block-oriented stream - ULONGLONG BlockOffset // Offset of the file to check - ); - -typedef void (*BLOCK_SAVEMAP)( - struct TFileStream * pStream // Pointer to a block-oriented stream - ); - -//----------------------------------------------------------------------------- -// Local structures - partial file structure and bitmap footer - -#define ID_FILE_BITMAP_FOOTER 0x33767470 // Signature of the file bitmap footer ('ptv3') -#define DEFAULT_BLOCK_SIZE 0x00004000 // Default size of the stream block -#define DEFAULT_BUILD_NUMBER 10958 // Build number for newly created partial MPQs - -typedef struct _PART_FILE_HEADER -{ - DWORD PartialVersion; // Always set to 2 - char GameBuildNumber[0x20]; // Minimum build number of the game that can use this MPQ - DWORD Flags; // Flags (details unknown) - DWORD FileSizeLo; // Low 32 bits of the contained file size - DWORD FileSizeHi; // High 32 bits of the contained file size - DWORD BlockSize; // Size of one file block, in bytes - -} PART_FILE_HEADER, *PPART_FILE_HEADER; - -// Structure describing the block-to-file map entry -typedef struct _PART_FILE_MAP_ENTRY -{ - DWORD Flags; // 3 = the block is present in the file - DWORD BlockOffsLo; // Low 32 bits of the block position in the file - DWORD BlockOffsHi; // High 32 bits of the block position in the file - DWORD LargeValueLo; // 64-bit value, meaning is unknown - DWORD LargeValueHi; - -} PART_FILE_MAP_ENTRY, *PPART_FILE_MAP_ENTRY; - -typedef struct _FILE_BITMAP_FOOTER -{ - DWORD Signature; // 'ptv3' (ID_FILE_BITMAP_FOOTER) - DWORD Version; // Unknown, seems to always have value of 3 (version?) - DWORD BuildNumber; // Game build number for that MPQ - DWORD MapOffsetLo; // Low 32-bits of the offset of the bit map - DWORD MapOffsetHi; // High 32-bits of the offset of the bit map - DWORD BlockSize; // Size of one block (usually 0x4000 bytes) - -} FILE_BITMAP_FOOTER, *PFILE_BITMAP_FOOTER; - -//----------------------------------------------------------------------------- -// Structure for file stream - -union TBaseProviderData -{ - struct - { - ULONGLONG FileSize; // Size of the file - ULONGLONG FilePos; // Current file position - ULONGLONG FileTime; // Last write time - HANDLE hFile; // File handle - } File; - - struct - { - ULONGLONG FileSize; // Size of the file - ULONGLONG FilePos; // Current file position - ULONGLONG FileTime; // Last write time - LPBYTE pbFile; // Pointer to mapped view - } Map; - - struct - { - ULONGLONG FileSize; // Size of the file - ULONGLONG FilePos; // Current file position - ULONGLONG FileTime; // Last write time - HANDLE hInternet; // Internet handle - HANDLE hConnect; // Connection to the internet server - } Http; -}; - -struct TFileStream -{ - // Stream provider functions - STREAM_READ StreamRead; // Pointer to stream read function for this archive. Do not use directly. - STREAM_WRITE StreamWrite; // Pointer to stream write function for this archive. Do not use directly. - STREAM_RESIZE StreamResize; // Pointer to function changing file size - STREAM_GETSIZE StreamGetSize; // Pointer to function returning file size - STREAM_GETPOS StreamGetPos; // Pointer to function that returns current file position - STREAM_CLOSE StreamClose; // Pointer to function closing the stream - - // Block-oriented functions - BLOCK_READ BlockRead; // Pointer to function reading one or more blocks - BLOCK_CHECK BlockCheck; // Pointer to function checking whether the block is present - - // Base provider functions - STREAM_CREATE BaseCreate; // Pointer to base create function - STREAM_OPEN BaseOpen; // Pointer to base open function - STREAM_READ BaseRead; // Read from the stream - STREAM_WRITE BaseWrite; // Write to the stream - STREAM_RESIZE BaseResize; // Pointer to function changing file size - STREAM_GETSIZE BaseGetSize; // Pointer to function returning file size - STREAM_GETPOS BaseGetPos; // Pointer to function that returns current file position - STREAM_CLOSE BaseClose; // Pointer to function closing the stream - - // Base provider data (file size, file position) - TBaseProviderData Base; - - // Stream provider data - TFileStream * pMaster; // Master stream (e.g. MPQ on a web server) - TCHAR * szFileName; // File name (self-relative pointer) - - ULONGLONG StreamSize; // Stream size (can be less than file size) - ULONGLONG StreamPos; // Stream position - DWORD BuildNumber; // Game build number - DWORD dwFlags; // Stream flags - - // Followed by stream provider data, with variable length -}; - -//----------------------------------------------------------------------------- -// Structures for block-oriented stream - -struct TBlockStream : public TFileStream -{ - SFILE_DOWNLOAD_CALLBACK pfnCallback; // Callback for downloading - void * FileBitmap; // Array of bits for file blocks - void * UserData; // User data to be passed to the download callback - DWORD BitmapSize; // Size of the file bitmap (in bytes) - DWORD BlockSize; // Size of one block, in bytes - DWORD BlockCount; // Number of data blocks in the file - DWORD IsComplete; // If nonzero, no blocks are missing - DWORD IsModified; // nonzero if the bitmap has been modified -}; - -//----------------------------------------------------------------------------- -// Structure for encrypted stream - -#define MPQE_CHUNK_SIZE 0x40 // Size of one chunk to be decrypted - -struct TEncryptedStream : public TBlockStream -{ - BYTE Key[MPQE_CHUNK_SIZE]; // File key -}; - -#endif // __FILESTREAM_H__ |
