diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/common/DataStores/DB2FileLoader.cpp | 27 | ||||
-rw-r--r-- | src/common/DataStores/DB2FileLoader.h | 8 | ||||
-rw-r--r-- | src/common/DataStores/DB2FileSystemSource.cpp | 5 | ||||
-rw-r--r-- | src/common/DataStores/DB2FileSystemSource.h | 1 | ||||
-rw-r--r-- | src/tools/extractor_common/DB2CascFileSource.cpp | 9 | ||||
-rw-r--r-- | src/tools/extractor_common/DB2CascFileSource.h | 2 |
6 files changed, 43 insertions, 9 deletions
diff --git a/src/common/DataStores/DB2FileLoader.cpp b/src/common/DataStores/DB2FileLoader.cpp index aa446085024..824f3e47945 100644 --- a/src/common/DataStores/DB2FileLoader.cpp +++ b/src/common/DataStores/DB2FileLoader.cpp @@ -185,7 +185,7 @@ public: virtual uint32 GetRecordCopyCount() const = 0; virtual uint32 GetMaxId() const = 0; virtual DB2FileLoadInfo const* GetLoadInfo() const = 0; - virtual DB2SectionHeader const& GetSection(uint32 section) const = 0; + virtual DB2SectionHeader& GetSection(uint32 section) const = 0; virtual bool IsSignedField(uint32 field) const = 0; private: @@ -225,7 +225,7 @@ public: uint32 GetRecordCopyCount() const override; uint32 GetMaxId() const override; DB2FileLoadInfo const* GetLoadInfo() const override; - DB2SectionHeader const& GetSection(uint32 section) const override; + DB2SectionHeader& GetSection(uint32 section) const override; bool IsSignedField(uint32 field) const override; private: @@ -284,7 +284,7 @@ public: uint32 GetRecordCopyCount() const override; uint32 GetMaxId() const override; DB2FileLoadInfo const* GetLoadInfo() const override; - DB2SectionHeader const& GetSection(uint32 section) const override; + DB2SectionHeader& GetSection(uint32 section) const override; bool IsSignedField(uint32 field) const override; private: @@ -961,7 +961,7 @@ DB2FileLoadInfo const* DB2FileLoaderRegularImpl::GetLoadInfo() const return _loadInfo; } -DB2SectionHeader const& DB2FileLoaderRegularImpl::GetSection(uint32 section) const +DB2SectionHeader& DB2FileLoaderRegularImpl::GetSection(uint32 section) const { return _sections[section]; } @@ -1605,7 +1605,7 @@ DB2FileLoadInfo const* DB2FileLoaderSparseImpl::GetLoadInfo() const return _loadInfo; } -DB2SectionHeader const& DB2FileLoaderSparseImpl::GetSection(uint32 section) const +DB2SectionHeader& DB2FileLoaderSparseImpl::GetSection(uint32 section) const { return _sections[section]; } @@ -1906,13 +1906,22 @@ bool DB2FileLoader::Load(DB2FileSource* source, DB2FileLoadInfo const* loadInfo) for (uint32 i = 0; i < _header.SectionCount; ++i) { - DB2SectionHeader const& section = _impl->GetSection(i); + DB2SectionHeader& section = _impl->GetSection(i); if (section.TactId) { - _impl->SkipEncryptedSection(i); - idTable.resize(idTable.size() + section.IdTableSize / sizeof(uint32)); - continue; + switch (source->HandleEncryptedSection(section)) + { + case DB2EncryptedSectionHandling::Skip: + _impl->SkipEncryptedSection(i); + idTable.resize(idTable.size() + section.IdTableSize / sizeof(uint32)); + continue; + case DB2EncryptedSectionHandling::Process: + section.TactId = 0; + break; + default: + break; + } } if (!source->SetPosition(section.FileOffset)) diff --git a/src/common/DataStores/DB2FileLoader.h b/src/common/DataStores/DB2FileLoader.h index ef247052c9e..70b6afc2081 100644 --- a/src/common/DataStores/DB2FileLoader.h +++ b/src/common/DataStores/DB2FileLoader.h @@ -90,6 +90,12 @@ struct TC_COMMON_API DB2FileLoadInfo std::string TypesString; }; +enum class DB2EncryptedSectionHandling +{ + Skip, + Process +}; + struct TC_COMMON_API DB2FileSource { virtual ~DB2FileSource(); @@ -109,6 +115,8 @@ struct TC_COMMON_API DB2FileSource virtual int64 GetFileSize() const = 0; virtual char const* GetFileName() const = 0; + + virtual DB2EncryptedSectionHandling HandleEncryptedSection(DB2SectionHeader const& sectionHeader) const = 0; }; class TC_COMMON_API DB2Record diff --git a/src/common/DataStores/DB2FileSystemSource.cpp b/src/common/DataStores/DB2FileSystemSource.cpp index 8a154fb480a..beb764cb01e 100644 --- a/src/common/DataStores/DB2FileSystemSource.cpp +++ b/src/common/DataStores/DB2FileSystemSource.cpp @@ -61,3 +61,8 @@ char const* DB2FileSystemSource::GetFileName() const { return _fileName.c_str(); } + +DB2EncryptedSectionHandling DB2FileSystemSource::HandleEncryptedSection(DB2SectionHeader const& /*sectionHeader*/) const +{ + return DB2EncryptedSectionHandling::Skip; +} diff --git a/src/common/DataStores/DB2FileSystemSource.h b/src/common/DataStores/DB2FileSystemSource.h index c3f24e80744..993b8e64c3d 100644 --- a/src/common/DataStores/DB2FileSystemSource.h +++ b/src/common/DataStores/DB2FileSystemSource.h @@ -31,6 +31,7 @@ struct TC_COMMON_API DB2FileSystemSource : public DB2FileSource bool SetPosition(int64 position) override; int64 GetFileSize() const override; char const* GetFileName() const override; + DB2EncryptedSectionHandling HandleEncryptedSection(DB2SectionHeader const& sectionHeader) const override; private: std::string _fileName; diff --git a/src/tools/extractor_common/DB2CascFileSource.cpp b/src/tools/extractor_common/DB2CascFileSource.cpp index e09d039c923..3236471c4e8 100644 --- a/src/tools/extractor_common/DB2CascFileSource.cpp +++ b/src/tools/extractor_common/DB2CascFileSource.cpp @@ -21,6 +21,7 @@ DB2CascFileSource::DB2CascFileSource(std::shared_ptr<CASC::Storage const> storage, uint32 fileDataId, bool printErrors /*= true*/) { + _storageHandle = storage; _fileHandle.reset(storage->OpenFile(fileDataId, CASC_LOCALE_NONE, printErrors, true)); _fileName = Trinity::StringFormat("FileDataId: %u", fileDataId); } @@ -60,3 +61,11 @@ char const* DB2CascFileSource::GetFileName() const { return _fileName.c_str(); } + +DB2EncryptedSectionHandling DB2CascFileSource::HandleEncryptedSection(DB2SectionHeader const& sectionHeader) const +{ + if (std::shared_ptr<CASC::Storage const> storage = _storageHandle.lock()) + return storage->HasTactKey(sectionHeader.TactId) ? DB2EncryptedSectionHandling::Process : DB2EncryptedSectionHandling::Skip; + + return DB2EncryptedSectionHandling::Skip; +} diff --git a/src/tools/extractor_common/DB2CascFileSource.h b/src/tools/extractor_common/DB2CascFileSource.h index a1867233596..82809db604e 100644 --- a/src/tools/extractor_common/DB2CascFileSource.h +++ b/src/tools/extractor_common/DB2CascFileSource.h @@ -32,8 +32,10 @@ struct DB2CascFileSource : public DB2FileSource int64 GetFileSize() const override; CASC::File* GetNativeHandle() const; char const* GetFileName() const override; + DB2EncryptedSectionHandling HandleEncryptedSection(DB2SectionHeader const& sectionHeader) const override; private: + std::weak_ptr<CASC::Storage const> _storageHandle; std::unique_ptr<CASC::File> _fileHandle; std::string _fileName; }; |