aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/common/DataStores/DB2FileLoader.cpp27
-rw-r--r--src/common/DataStores/DB2FileLoader.h8
-rw-r--r--src/common/DataStores/DB2FileSystemSource.cpp5
-rw-r--r--src/common/DataStores/DB2FileSystemSource.h1
-rw-r--r--src/tools/extractor_common/DB2CascFileSource.cpp9
-rw-r--r--src/tools/extractor_common/DB2CascFileSource.h2
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;
};