diff options
author | est31 <MTest31@outlook.com> | 2015-07-05 21:05:07 +0200 |
---|---|---|
committer | Loïc Blot <lblot@infopro-digital.com> | 2015-07-07 17:03:26 +0200 |
commit | d92d376148f7ed35df1c757aab5eca5645bb8ddd (patch) | |
tree | c019258eeb401fdfc1ec39413af9d07623f2bfcf | |
parent | a93838707a9aab104c20b6a971d8c622184a508f (diff) | |
download | minetest-d92d376148f7ed35df1c757aab5eca5645bb8ddd.tar.gz minetest-d92d376148f7ed35df1c757aab5eca5645bb8ddd.tar.bz2 minetest-d92d376148f7ed35df1c757aab5eca5645bb8ddd.zip |
Client: better m_proto_ver initialisation
Previously, m_proto_ver was set to the serialisation version
inside the legacy init packet.
Now, if the server doesn't send a protocol version (protocols < 25),
we set m_proto_ver to some value < 25 and > 0.
-rw-r--r-- | src/client.cpp | 1 | ||||
-rw-r--r-- | src/client.h | 6 | ||||
-rw-r--r-- | src/network/clientpackethandler.cpp | 15 |
3 files changed, 16 insertions, 6 deletions
diff --git a/src/client.cpp b/src/client.cpp index b02e6229c..2f8babfa2 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -229,6 +229,7 @@ Client::Client( m_con(PROTOCOL_ID, 512, CONNECTION_TIMEOUT, ipv6, this), m_device(device), m_server_ser_ver(SER_FMT_VER_INVALID), + m_proto_ver(0), m_playeritem(0), m_inventory_updated(false), m_inventory_from_server(NULL), diff --git a/src/client.h b/src/client.h index efd373e42..7c1a19eed 100644 --- a/src/client.h +++ b/src/client.h @@ -595,8 +595,14 @@ private: Mapper *m_mapper; // Server serialization version u8 m_server_ser_ver; + // Used version of the protocol with server + // Values smaller than 25 only mean they are smaller than 25, + // and aren't accurate. We simply just don't know, because + // the server didn't send the version back then. + // If 0, server init hasn't been received yet. u8 m_proto_ver; + u16 m_playeritem; bool m_inventory_updated; Inventory *m_inventory_from_server; diff --git a/src/network/clientpackethandler.cpp b/src/network/clientpackethandler.cpp index c0acff985..1ec6a2a1a 100644 --- a/src/network/clientpackethandler.cpp +++ b/src/network/clientpackethandler.cpp @@ -151,20 +151,23 @@ void Client::handleCommand_InitLegacy(NetworkPacket* pkt) if (pkt->getSize() < 1) return; - u8 deployed; - *pkt >> deployed; + u8 server_ser_ver; + *pkt >> server_ser_ver; infostream << "Client: TOCLIENT_INIT_LEGACY received with " - "deployed=" << ((int)deployed & 0xff) << std::endl; + "server_ser_ver=" << ((int)server_ser_ver & 0xff) << std::endl; - if (!ser_ver_supported(deployed)) { + if (!ser_ver_supported(server_ser_ver)) { infostream << "Client: TOCLIENT_INIT_LEGACY: Server sent " << "unsupported ser_fmt_ver"<< std::endl; return; } - m_server_ser_ver = deployed; - m_proto_ver = deployed; + m_server_ser_ver = server_ser_ver; + + // We can be totally wrong with this guess + // but we only need some value < 25. + m_proto_ver = 24; // Get player position v3s16 playerpos_s16(0, BS * 2 + BS * 20, 0); |