Core/WorldSession: Added research notes about CMSG_AUTH_SESSION values and reordered checks during login to always initialize encryption first to make sure the client can read failure packet

This commit is contained in:
Shauren
2014-08-21 18:18:13 +02:00
parent 33da371812
commit abfd29ab61
3 changed files with 82 additions and 61 deletions

View File

@@ -42,7 +42,7 @@ class Socket : public std::enable_shared_from_this<T>
public:
Socket(tcp::socket&& socket, std::size_t headerSize) : _socket(std::move(socket)), _remoteAddress(_socket.remote_endpoint().address()),
_remotePort(_socket.remote_endpoint().port()), _readHeaderBuffer(), _readDataBuffer(), _closed(false)
_remotePort(_socket.remote_endpoint().port()), _readHeaderBuffer(), _readDataBuffer(), _closed(false), _closing(false)
{
_readHeaderBuffer.Grow(headerSize);
}
@@ -126,7 +126,7 @@ public:
std::placeholders::_1, std::placeholders::_2));
}
bool IsOpen() const { return !_closed; }
bool IsOpen() const { return !_closed && !_closing; }
virtual void CloseSocket()
{
@@ -140,6 +140,9 @@ public:
shutdownError.value(), shutdownError.message().c_str());
}
/// Marks the socket for closing after write buffer becomes empty
void DelayedCloseSocket() { _closing = true; }
virtual bool IsHeaderReady() const { return _readHeaderBuffer.IsMessageReady(); }
virtual bool IsDataReady() const { return _readDataBuffer.IsMessageReady(); }
@@ -221,6 +224,8 @@ private:
if (!_writeQueue.empty())
AsyncWrite(_writeQueue.front());
else if (_closing)
CloseSocket();
}
else
CloseSocket();
@@ -241,6 +246,7 @@ private:
MessageBuffer _readDataBuffer;
std::atomic<bool> _closed;
std::atomic<bool> _closing;
};
#endif // __SOCKET_H__