diff options
author | Shauren <shauren.trinity@gmail.com> | 2023-11-21 12:25:22 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2023-11-21 12:25:22 +0100 |
commit | b888b1b09f71a8b8b4a9d45c804a1f164fb65ac3 (patch) | |
tree | ba507c4c1c5e8487bd223afbde44ecf9eeac162e /src/server/shared | |
parent | 8c072b93af3a4efcbde21cc85fedcf7fa48fa7b4 (diff) |
Core/Calendar: Implement different timezone support for ingame calendar
Closes #8390
Closes #29427
Diffstat (limited to 'src/server/shared')
-rw-r--r-- | src/server/shared/Packets/ByteBuffer.cpp | 23 | ||||
-rw-r--r-- | src/server/shared/Packets/ByteBuffer.h | 4 | ||||
-rw-r--r-- | src/server/shared/Realm/RealmList.cpp | 10 | ||||
-rw-r--r-- | src/server/shared/Realm/RealmList.h | 4 |
4 files changed, 9 insertions, 32 deletions
diff --git a/src/server/shared/Packets/ByteBuffer.cpp b/src/server/shared/Packets/ByteBuffer.cpp index 1775192227a..104ba96d9d0 100644 --- a/src/server/shared/Packets/ByteBuffer.cpp +++ b/src/server/shared/Packets/ByteBuffer.cpp @@ -23,7 +23,6 @@ #include <utf8.h> #include <sstream> #include <cmath> -#include <ctime> ByteBuffer::ByteBuffer(MessageBuffer&& buffer) : _rpos(0), _wpos(0), _bitpos(InitialBitPos), _curbitval(0), _storage(buffer.Move()) { @@ -92,21 +91,6 @@ std::string ByteBuffer::ReadString(uint32 length, bool requireValidUtf8 /*= true return value; } -uint32 ByteBuffer::ReadPackedTime() -{ - uint32 packedDate = read<uint32>(); - tm lt = tm(); - - lt.tm_min = packedDate & 0x3F; - lt.tm_hour = (packedDate >> 6) & 0x1F; - //lt.tm_wday = (packedDate >> 11) & 7; - lt.tm_mday = ((packedDate >> 14) & 0x3F) + 1; - lt.tm_mon = (packedDate >> 20) & 0xF; - lt.tm_year = ((packedDate >> 24) & 0x1F) + 100; - - return uint32(mktime(<)); -} - void ByteBuffer::append(uint8 const* src, size_t cnt) { ASSERT(src, "Attempted to put a NULL-pointer in ByteBuffer (pos: " SZFMTD " size: " SZFMTD ")", _wpos, size()); @@ -134,13 +118,6 @@ void ByteBuffer::append(uint8 const* src, size_t cnt) _wpos = newSize; } -void ByteBuffer::AppendPackedTime(time_t time) -{ - tm lt; - localtime_r(&time, <); - append<uint32>((lt.tm_year - 100) << 24 | lt.tm_mon << 20 | (lt.tm_mday - 1) << 14 | lt.tm_wday << 11 | lt.tm_hour << 6 | lt.tm_min); -} - void ByteBuffer::put(size_t pos, uint8 const* src, size_t cnt) { ASSERT(pos + cnt <= size(), "Attempted to put value with size: " SZFMTD " in ByteBuffer (pos: " SZFMTD " size: " SZFMTD ")", cnt, pos, size()); diff --git a/src/server/shared/Packets/ByteBuffer.h b/src/server/shared/Packets/ByteBuffer.h index 76b521b9358..de0adf54341 100644 --- a/src/server/shared/Packets/ByteBuffer.h +++ b/src/server/shared/Packets/ByteBuffer.h @@ -519,8 +519,6 @@ class TC_SHARED_API ByteBuffer std::string ReadString(uint32 length, bool requireValidUtf8 = true); - uint32 ReadPackedTime(); - uint8* contents() { if (_storage.empty()) @@ -624,8 +622,6 @@ class TC_SHARED_API ByteBuffer return resultSize; } - void AppendPackedTime(time_t time); - void put(size_t pos, uint8 const* src, size_t cnt); void print_storage() const; diff --git a/src/server/shared/Realm/RealmList.cpp b/src/server/shared/Realm/RealmList.cpp index 3d72418c10b..779bb6fca09 100644 --- a/src/server/shared/Realm/RealmList.cpp +++ b/src/server/shared/Realm/RealmList.cpp @@ -369,7 +369,7 @@ std::vector<uint8> RealmList::GetRealmList(uint32 build, std::string const& subR } uint32 RealmList::JoinRealm(uint32 realmAddress, uint32 build, boost::asio::ip::address const& clientAddress, std::array<uint8, 32> const& clientSecret, - LocaleConstant locale, std::string const& os, std::string accountName, bgs::protocol::game_utilities::v1::ClientResponse* response) const + LocaleConstant locale, std::string const& os, Minutes timezoneOffset, std::string const& accountName, bgs::protocol::game_utilities::v1::ClientResponse* response) const { std::shared_lock<std::shared_mutex> lock(_realmsMutex); if (Realm const* realm = GetRealm(Battlenet::RealmHandle(realmAddress))) @@ -400,15 +400,17 @@ uint32 RealmList::JoinRealm(uint32 realmAddress, uint32 build, boost::asio::ip:: std::array<uint8, 32> serverSecret = Trinity::Crypto::GetRandomBytes<32>(); std::array<uint8, 64> keyData; - memcpy(&keyData[0], clientSecret.data(), 32); - memcpy(&keyData[32], serverSecret.data(), 32); + auto keyDestItr = keyData.begin(); + keyDestItr = std::copy(clientSecret.begin(), clientSecret.end(), keyDestItr); + keyDestItr = std::copy(serverSecret.begin(), serverSecret.end(), keyDestItr); LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_BNET_GAME_ACCOUNT_LOGIN_INFO); stmt->setBinary(0, keyData); stmt->setString(1, clientAddress.to_string()); stmt->setUInt8(2, locale); stmt->setString(3, os); - stmt->setString(4, accountName); + stmt->setInt16(4, timezoneOffset.count()); + stmt->setString(5, accountName); LoginDatabase.DirectExecute(stmt); bgs::protocol::Attribute* attribute = response->add_attribute(); diff --git a/src/server/shared/Realm/RealmList.h b/src/server/shared/Realm/RealmList.h index 973dd913d7a..a1262d7e913 100644 --- a/src/server/shared/Realm/RealmList.h +++ b/src/server/shared/Realm/RealmList.h @@ -19,6 +19,7 @@ #define _REALMLIST_H #include "Define.h" +#include "Duration.h" #include "Realm.h" #include <array> #include <map> @@ -91,7 +92,8 @@ public: std::vector<uint8> GetRealmEntryJSON(Battlenet::RealmHandle const& id, uint32 build) const; std::vector<uint8> GetRealmList(uint32 build, std::string const& subRegion) const; uint32 JoinRealm(uint32 realmAddress, uint32 build, boost::asio::ip::address const& clientAddress, std::array<uint8, 32> const& clientSecret, - LocaleConstant locale, std::string const& os, std::string accountName, bgs::protocol::game_utilities::v1::ClientResponse* response) const; + LocaleConstant locale, std::string const& os, Minutes timezoneOffset, std::string const& accountName, + bgs::protocol::game_utilities::v1::ClientResponse* response) const; private: RealmList(); |