aboutsummaryrefslogtreecommitdiff
path: root/src/tools/extractor_common
diff options
context:
space:
mode:
authorLuzifix <luzifix19@gmail.com>2022-06-09 17:58:35 +0200
committerGitHub <noreply@github.com>2022-06-09 17:58:35 +0200
commitb11574871e11e5e34b59e1d89b7fcad428fdfb56 (patch)
tree298b28488793896c1191785e8f42c37283db6382 /src/tools/extractor_common
parent69d960b63f25e83f7f7c6055c4179d0381d7f34e (diff)
Tools/Extractors: Implement remote casc mode (#27993)
Diffstat (limited to 'src/tools/extractor_common')
-rw-r--r--src/tools/extractor_common/CascHandles.cpp23
-rw-r--r--src/tools/extractor_common/CascHandles.h1
2 files changed, 24 insertions, 0 deletions
diff --git a/src/tools/extractor_common/CascHandles.cpp b/src/tools/extractor_common/CascHandles.cpp
index b3f43ce42e8..c6de59cda38 100644
--- a/src/tools/extractor_common/CascHandles.cpp
+++ b/src/tools/extractor_common/CascHandles.cpp
@@ -190,6 +190,29 @@ CASC::Storage* CASC::Storage::Open(boost::filesystem::path const& path, uint32 l
return storage;
}
+CASC::Storage* CASC::Storage::OpenRemote(boost::filesystem::path const& path, uint32 localeMask, char const* product, char const* region)
+{
+ HANDLE handle = nullptr;
+ std::string cacheArgument = std::string(path.string() + ":" + product + ":" + region);
+
+ printf("Open casc remote storage...\n");
+ if (!::CascOpenOnlineStorage(cacheArgument.c_str(), localeMask, &handle))
+ {
+ DWORD lastError = GetCascError(); // support checking error set by *Open* call, not the next *Close*
+ printf("Error opening remote casc storage: %s\n", HumanReadableCASCError(lastError));
+ CascCloseStorage(handle);
+ SetCascError(lastError);
+ return nullptr;
+ }
+
+ Storage* storage = new Storage(handle);
+
+ if (!storage->LoadOnlineTactKeys())
+ printf("Failed to load additional encryption keys from wow.tools, some files might not be extracted.\n");
+
+ return storage;
+}
+
uint32 CASC::Storage::GetBuildNumber() const
{
CASC_STORAGE_PRODUCT product;
diff --git a/src/tools/extractor_common/CascHandles.h b/src/tools/extractor_common/CascHandles.h
index 51f781a49f9..fcd890f59b6 100644
--- a/src/tools/extractor_common/CascHandles.h
+++ b/src/tools/extractor_common/CascHandles.h
@@ -41,6 +41,7 @@ namespace CASC
~Storage();
static Storage* Open(boost::filesystem::path const& path, uint32 localeMask, char const* product);
+ static Storage* OpenRemote(boost::filesystem::path const& path, uint32 localeMask, char const* product, char const* region);
uint32 GetBuildNumber() const;
uint32 GetInstalledLocalesMask() const;