summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Nazarov <skuller@skuller.net>2013-02-14 01:35:10 +0400
committerAndrey Nazarov <skuller@skuller.net>2013-02-14 01:35:10 +0400
commit8365d2eb8b9f5683bb6532fb62913e5fe0fb4f23 (patch)
treedf6a3ed658ca2e6c8f44b57a959473a16dd0bece
parente444152054b0fc358156b13f4cf8bb6038d2e3a4 (diff)
Fix writing compressed layouts to older clients.
All protocol 35 clients and Q2PRO client before 727e7b1 can't seamlessly write contents of svc_zpacket to demo. Disable writing compressed layouts to such clients when they are recording. Also use clients maxpacketlen value for deciding if layout is large enough to be compressed.
-rw-r--r--src/server/send.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/server/send.c b/src/server/send.c
index 6cb9fdc..baf5448 100644
--- a/src/server/send.c
+++ b/src/server/send.c
@@ -346,8 +346,16 @@ static qboolean compress_message(client_t *client, int flags)
if (!client->has_zlib)
return qfalse;
- // FIXME: make this configurable?
- if (msg_write.cursize < MAX_PACKETLEN_DEFAULT / 2)
+ // older clients have problems seamlessly writing svc_zpackets
+ if (client->settings[CLS_RECORDING]) {
+ if (client->protocol != PROTOCOL_VERSION_Q2PRO)
+ return qfalse;
+ if (client->version < PROTOCOL_VERSION_Q2PRO_EXTENDED_LAYOUT)
+ return qfalse;
+ }
+
+ // compress only sufficiently large layouts
+ if (msg_write.cursize < client->netchan->maxpacketlen / 2)
return qfalse;
deflateReset(&svs.z);