aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2023-11-21 12:25:22 +0100
committerShauren <shauren.trinity@gmail.com>2023-11-21 12:25:22 +0100
commitb888b1b09f71a8b8b4a9d45c804a1f164fb65ac3 (patch)
treeba507c4c1c5e8487bd223afbde44ecf9eeac162e /src/server/shared
parent8c072b93af3a4efcbde21cc85fedcf7fa48fa7b4 (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.cpp23
-rw-r--r--src/server/shared/Packets/ByteBuffer.h4
-rw-r--r--src/server/shared/Realm/RealmList.cpp10
-rw-r--r--src/server/shared/Realm/RealmList.h4
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(&lt));
-}
-
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, &lt);
- 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();