From 02aa669ad97b54c0049f62378fa010378ed03ac7 Mon Sep 17 00:00:00 2001 From: quaK <38787176+Joelrau@users.noreply.github.com> Date: Wed, 21 Sep 2022 00:23:01 +0300 Subject: [PATCH] demonware experiments --- src/client/game/demonware/data_types.hpp | 40 ++++++++-------- .../game/demonware/servers/lobby_server.cpp | 1 + src/client/game/demonware/services.hpp | 2 +- .../game/demonware/services/bdAnticheat.cpp | 8 ++++ .../game/demonware/services/bdAnticheat.hpp | 1 + .../game/demonware/services/bdCMail.cpp | 17 +++++++ .../game/demonware/services/bdCMail.hpp | 13 ++++++ .../demonware/services/bdMarketingComms.cpp | 8 ++++ .../demonware/services/bdMarketingComms.hpp | 1 + .../game/demonware/services/bdMarketplace.cpp | 15 ++++++ .../game/demonware/services/bdMarketplace.hpp | 2 + .../game/demonware/services/bdStorage.cpp | 46 +++++++++++++++---- 12 files changed, 124 insertions(+), 30 deletions(-) create mode 100644 src/client/game/demonware/services/bdCMail.cpp create mode 100644 src/client/game/demonware/services/bdCMail.hpp diff --git a/src/client/game/demonware/data_types.hpp b/src/client/game/demonware/data_types.hpp index 579e2248..8753d815 100644 --- a/src/client/game/demonware/data_types.hpp +++ b/src/client/game/demonware/data_types.hpp @@ -38,37 +38,39 @@ namespace demonware } }; - class bdFileInfo final : public bdTaskResult + struct bdFileInfo final : public bdTaskResult { - public: uint64_t file_id; uint32_t create_time; uint32_t modified_time; - bool priv; + bool visibility; uint64_t owner_id; std::string filename; uint32_t file_size; + std::string checksum; - void serialize(byte_buffer* buffer) override + void serialize(byte_buffer* data) override { - buffer->write_uint32(this->file_size); - buffer->write_uint64(this->file_id); - buffer->write_uint32(this->create_time); - buffer->write_uint32(this->modified_time); - buffer->write_bool(this->priv); - buffer->write_uint64(this->owner_id); - buffer->write_string(this->filename); + data->write_uint32(file_size); + data->write_uint64(file_id); + data->write_uint32(create_time); + data->write_uint32(modified_time); + data->write_bool(visibility); + data->write_uint64(owner_id); + data->write_string(filename); + data->write_string(checksum); } - void deserialize(byte_buffer* buffer) override + void deserialize(byte_buffer* data) override { - buffer->read_uint32(&this->file_size); - buffer->read_uint64(&this->file_id); - buffer->read_uint32(&this->create_time); - buffer->read_uint32(&this->modified_time); - buffer->read_bool(&this->priv); - buffer->read_uint64(&this->owner_id); - buffer->read_string(&this->filename); + data->read_uint32(&file_size); + data->read_uint64(&file_id); + data->read_uint32(&create_time); + data->read_uint32(&modified_time); + data->read_bool(&visibility); + data->read_uint64(&owner_id); + data->read_string(&filename); + data->read_string(&checksum); } }; diff --git a/src/client/game/demonware/servers/lobby_server.cpp b/src/client/game/demonware/servers/lobby_server.cpp index 98c2dd73..f26f3629 100644 --- a/src/client/game/demonware/servers/lobby_server.cpp +++ b/src/client/game/demonware/servers/lobby_server.cpp @@ -12,6 +12,7 @@ namespace demonware { this->register_service(); this->register_service(); + this->register_service(); this->register_service(); this->register_service(); this->register_service(); diff --git a/src/client/game/demonware/services.hpp b/src/client/game/demonware/services.hpp index d8017ecf..05c75d77 100644 --- a/src/client/game/demonware/services.hpp +++ b/src/client/game/demonware/services.hpp @@ -18,7 +18,7 @@ #include "services/bdCounter.hpp" // 23 #include "services/bdDML.hpp" // 27 #include "services/bdGroup.hpp" // 28 -//#include "services/bdCMail.hpp" // 29 +#include "services/bdCMail.hpp" // 29 #include "services/bdFacebook.hpp" // 36 #include "services/bdAnticheat.hpp" // 38 #include "services/bdContentStreaming.hpp" // 50 diff --git a/src/client/game/demonware/services/bdAnticheat.cpp b/src/client/game/demonware/services/bdAnticheat.cpp index 86f7f9f5..452b8422 100644 --- a/src/client/game/demonware/services/bdAnticheat.cpp +++ b/src/client/game/demonware/services/bdAnticheat.cpp @@ -9,6 +9,7 @@ namespace demonware this->register_task(3, &bdAnticheat::reportConsoleID); this->register_task(4, &bdAnticheat::reportConsoleDetails); this->register_task(5, &bdAnticheat::answerTOTPChallenge); + this->register_task(6, &bdAnticheat::unk6); } void bdAnticheat::answerChallenges(service_server* server, byte_buffer* /*buffer*/) const @@ -38,4 +39,11 @@ namespace demonware auto reply = server->create_reply(this->task_id()); reply->send(); } + + void bdAnticheat::unk6(service_server* server, byte_buffer* /*buffer*/) const + { + // TODO: Read data as soon as needed + auto reply = server->create_reply(this->task_id()); + reply->send(); + } } diff --git a/src/client/game/demonware/services/bdAnticheat.hpp b/src/client/game/demonware/services/bdAnticheat.hpp index 7fbe0f9c..1bda63af 100644 --- a/src/client/game/demonware/services/bdAnticheat.hpp +++ b/src/client/game/demonware/services/bdAnticheat.hpp @@ -12,5 +12,6 @@ namespace demonware void reportConsoleID(service_server* server, byte_buffer* buffer) const; void reportConsoleDetails(service_server* server, byte_buffer* buffer) const; void answerTOTPChallenge(service_server* server, byte_buffer* buffer) const; + void unk6(service_server* server, byte_buffer* buffer) const; }; } diff --git a/src/client/game/demonware/services/bdCMail.cpp b/src/client/game/demonware/services/bdCMail.cpp new file mode 100644 index 00000000..7cabf4aa --- /dev/null +++ b/src/client/game/demonware/services/bdCMail.cpp @@ -0,0 +1,17 @@ +#include +#include "../services.hpp" + +namespace demonware +{ + bdCMail::bdCMail() : service(29, "bdCMail") + { + this->register_task(10, &bdCMail::unk10); + } + + void bdCMail::unk10(service_server* server, byte_buffer* /*buffer*/) const + { + // TODO: + auto reply = server->create_reply(this->task_id()); + reply->send(); + } +} diff --git a/src/client/game/demonware/services/bdCMail.hpp b/src/client/game/demonware/services/bdCMail.hpp new file mode 100644 index 00000000..e6258086 --- /dev/null +++ b/src/client/game/demonware/services/bdCMail.hpp @@ -0,0 +1,13 @@ +#pragma once + +namespace demonware +{ + class bdCMail final : public service + { + public: + bdCMail(); + + private: + void unk10(service_server* server, byte_buffer* buffer) const; + }; +} diff --git a/src/client/game/demonware/services/bdMarketingComms.cpp b/src/client/game/demonware/services/bdMarketingComms.cpp index 409b278a..367eba2f 100644 --- a/src/client/game/demonware/services/bdMarketingComms.cpp +++ b/src/client/game/demonware/services/bdMarketingComms.cpp @@ -7,6 +7,7 @@ namespace demonware { this->register_task(1, &bdMarketingComms::getMessages); this->register_task(4, &bdMarketingComms::reportFullMessagesViewed); + this->register_task(6, &bdMarketingComms::reportFullMessagesViewed); } void bdMarketingComms::getMessages(service_server* server, byte_buffer* /*buffer*/) const @@ -22,4 +23,11 @@ namespace demonware auto reply = server->create_reply(this->task_id()); reply->send(); } + + void bdMarketingComms::unk6(service_server* server, byte_buffer* /*buffer*/) const + { + // TODO: + auto reply = server->create_reply(this->task_id()); + reply->send(); + } } diff --git a/src/client/game/demonware/services/bdMarketingComms.hpp b/src/client/game/demonware/services/bdMarketingComms.hpp index c973d7ae..63c549c2 100644 --- a/src/client/game/demonware/services/bdMarketingComms.hpp +++ b/src/client/game/demonware/services/bdMarketingComms.hpp @@ -10,5 +10,6 @@ namespace demonware private: void getMessages(service_server* server, byte_buffer* buffer) const; void reportFullMessagesViewed(service_server* server, byte_buffer* buffer) const; + void unk6(service_server* server, byte_buffer* buffer) const; }; } diff --git a/src/client/game/demonware/services/bdMarketplace.cpp b/src/client/game/demonware/services/bdMarketplace.cpp index 3eb3f165..eb40090f 100644 --- a/src/client/game/demonware/services/bdMarketplace.cpp +++ b/src/client/game/demonware/services/bdMarketplace.cpp @@ -11,8 +11,10 @@ namespace demonware //this->register_task(43, &bdMarketplace::purchaseOnSteamInitialize); // COD POINTS purchase ? this->register_task(49, &bdMarketplace::getExpiredInventoryItems); this->register_task(60, &bdMarketplace::steamProcessDurable); + this->register_task(85, &bdMarketplace::unk85); this->register_task(122, &bdMarketplace::purchaseSkus); this->register_task(130, &bdMarketplace::getBalance); + this->register_task(132, &bdMarketplace::getBalanceV2); this->register_task(165, &bdMarketplace::getInventoryPaginated); this->register_task(193, &bdMarketplace::putPlayersInventoryItems); this->register_task(232, &bdMarketplace::getEntitlements); @@ -46,6 +48,13 @@ namespace demonware reply->send(); } + void bdMarketplace::unk85(service_server* server, byte_buffer* /*buffer*/) const + { + // TODO: + auto reply = server->create_reply(this->task_id()); + reply->send(); + } + void bdMarketplace::purchaseSkus(service_server* server, byte_buffer* buffer) const { // TODO: @@ -57,7 +66,13 @@ namespace demonware { // TODO: auto reply = server->create_reply(this->task_id()); + reply->send(); + } + void bdMarketplace::getBalanceV2(service_server* server, byte_buffer* buffer) const + { + // TODO: + auto reply = server->create_reply(this->task_id()); reply->send(); } diff --git a/src/client/game/demonware/services/bdMarketplace.hpp b/src/client/game/demonware/services/bdMarketplace.hpp index 7b2ebf27..bde1c312 100644 --- a/src/client/game/demonware/services/bdMarketplace.hpp +++ b/src/client/game/demonware/services/bdMarketplace.hpp @@ -12,8 +12,10 @@ namespace demonware void purchaseOnSteamInitialize(service_server* server, byte_buffer* buffer) const; void getExpiredInventoryItems(service_server* server, byte_buffer* buffer) const; void steamProcessDurable(service_server* server, byte_buffer* buffer) const; + void unk85(service_server* server, byte_buffer* buffer) const; void purchaseSkus(service_server* server, byte_buffer* buffer) const; void getBalance(service_server* server, byte_buffer* buffer) const; + void getBalanceV2(service_server* server, byte_buffer* buffer) const; void getInventoryPaginated(service_server* server, byte_buffer* buffer) const; void putPlayersInventoryItems(service_server* server, byte_buffer* buffer) const; void getEntitlements(service_server* server, byte_buffer* buffer) const; diff --git a/src/client/game/demonware/services/bdStorage.cpp b/src/client/game/demonware/services/bdStorage.cpp index de56fb9d..f499b7e3 100644 --- a/src/client/game/demonware/services/bdStorage.cpp +++ b/src/client/game/demonware/services/bdStorage.cpp @@ -66,6 +66,10 @@ namespace demonware void bdStorage::list_publisher_files(service_server* server, byte_buffer* buffer) { +#ifdef DEBUG + utils::io::write_file("demonware/bdStorage/list_publisher_files", buffer->get_buffer()); +#endif + uint32_t date; uint16_t num_results, offset; std::string unk, filename, data; @@ -92,7 +96,8 @@ namespace demonware info->modified_time = info->create_time; info->file_size = uint32_t(data.size()); info->owner_id = 0; - info->priv = false; + info->visibility = false; + info->checksum = "f5f1fb4ddd2d85e2ed9a28b3204125ec"; reply->add(info); } @@ -102,6 +107,10 @@ namespace demonware void bdStorage::get_publisher_file(service_server* server, byte_buffer* buffer) { +#ifdef DEBUG + utils::io::write_file("demonware/bdStorage/get_publisher_file", buffer->get_buffer()); +#endif + std::string unk, filename; buffer->read_string(&unk); buffer->read_string(&filename); @@ -135,6 +144,10 @@ namespace demonware void bdStorage::set_user_file(service_server* server, byte_buffer* buffer) const { +#ifdef DEBUG + utils::io::write_file("demonware/bdStorage/set_user_file", buffer->get_buffer()); +#endif + uint64_t owner; uint32_t numfiles; std::string game, platform; @@ -183,21 +196,30 @@ namespace demonware void bdStorage::get_user_file(service_server* server, byte_buffer* buffer) const { - uint32_t unk32_0; - uint32_t numfiles, count = 0; - uint64_t owner; - std::string game, platform; +#ifdef DEBUG + utils::io::write_file("demonware/bdStorage/get_user_file", buffer->get_buffer()); +#endif + + std::string platform; + uint32_t numunk; + uint32_t numfiles; + uint64_t owner = 0; + std::string game; - buffer->read_string(&game); - buffer->read_uint32(&unk32_0); - buffer->read_uint64(&owner); - buffer->read_string(&platform); - buffer->read_uint64(&owner); buffer->read_string(&platform); + buffer->read_uint32(&numunk); + + for (uint32_t i = 0; i < numunk; i++) + { + buffer->read_uint64(&owner); + buffer->read_string(&game); + } + buffer->read_uint32(&numfiles); auto reply = server->create_reply(this->task_id()); + uint32_t count = 0; for (uint32_t i = 0; i < numfiles; i++) { std::string filename, data; @@ -239,6 +261,10 @@ namespace demonware void bdStorage::unk12(service_server* server, byte_buffer* buffer) const { +#ifdef DEBUG + utils::io::write_file("demonware/bdStorage/unk12", buffer->get_buffer()); +#endif + // TODO: auto reply = server->create_reply(this->task_id()); reply->send();