void CL_ParseZPacket (void) { #ifndef NO_ZLIB byte buff_in[MAX_MSGLEN]; byte buff_out[0xFFFF]; sizebuf_t sb, old; int16 compressed_len = (int16)MSG_ReadShort (&net_message); int16 uncompressed_len = (int16)MSG_ReadShort (&net_message); if (uncompressed_len <= 0) Com_Error (ERR_DROP, "CL_ParseZPacket: uncompressed_len <= 0"); if (compressed_len <= 0) Com_Error (ERR_DROP, "CL_ParseZPacket: compressed_len <= 0"); MSG_ReadData (&net_message, buff_in, compressed_len); SZ_Init (&sb, buff_out, uncompressed_len); sb.cursize = ZLibDecompress (buff_in, compressed_len, buff_out, uncompressed_len, -15); old = net_message; net_message = sb; CL_ParseServerMessage (); net_message = old; Com_DPrintf ("Got a ZPacket, %d->%d\n", uncompressed_len + 4, compressed_len); #else Com_Error (ERR_DROP, "Receied a zPacket but no zlib in this binary"); #endif }
void CL_ParseZPacket (sizebuf_t *msg) { byte buff_in[MAX_MSGLEN]; byte buff_out[0xFFFF]; sizebuf_t sb; uint16 compressed_len = MSG_ReadShort (msg); uint16 uncompressed_len = MSG_ReadShort (msg); if (uncompressed_len <= 0) Com_Error (ERR_DROP, "CL_ParseZPacket: uncompressed_len <= 0"); if (compressed_len <= 0) Com_Error (ERR_DROP, "CL_ParseZPacket: compressed_len <= 0"); MSG_ReadData (msg, buff_in, compressed_len); SZ_Init (&sb, buff_out, uncompressed_len); sb.cursize = ZLibDecompress (buff_in, compressed_len, buff_out, uncompressed_len, -15); CL_ParseServerMessage(&sb); Com_DPrintf ("Got a ZPacket, %d->%d\n", uncompressed_len + 4, compressed_len); }
void CL_ParseDownload (qboolean dataIsCompressed) { int size, percent; char name[MAX_OSPATH]; // read the data size = MSG_ReadShort (&net_message); percent = MSG_ReadByte (&net_message); if (size < 0) { if (size == -1) Com_Printf ("Server does not have this file.\n", LOG_CLIENT); else Com_Printf ("Bad download data from server.\n", LOG_CLIENT); //r1: nuke the temp filename cls.downloadtempname[0] = 0; cls.downloadname[0] = 0; cls.failed_download = true; if (cls.download) { // if here, we tried to resume a file but the server said no fclose (cls.download); cls.download = NULL; } cls.downloadpending = false; CL_RequestNextDownload (); return; } // open the file if not opened yet if (!cls.download) { if (!cls.downloadtempname[0]) { Com_Printf ("Received download packet without request. Ignored.\n", LOG_CLIENT); net_message.readcount += size; return; } CL_DownloadFileName(name, sizeof(name), cls.downloadtempname); FS_CreatePath (name); cls.download = fopen (name, "wb"); if (!cls.download) { net_message.readcount += size; Com_Printf ("Failed to open %s\n", LOG_CLIENT, cls.downloadtempname); cls.downloadpending = false; CL_RequestNextDownload (); return; } } //r1: downloading something, drop to console to show status bar SCR_EndLoadingPlaque(); //r1: if we're stuck with udp, may as well make best use of the bandwidth... if (dataIsCompressed) { #ifndef NO_ZLIB uint16 uncompressedLen; byte uncompressed[0xFFFF]; uncompressedLen = (uint16)MSG_ReadShort (&net_message); if (!uncompressedLen) Com_Error (ERR_DROP, "uncompressedLen == 0"); ZLibDecompress (net_message_buffer + net_message.readcount, size, uncompressed, uncompressedLen, -15); fwrite (uncompressed, 1, uncompressedLen, cls.download); Com_DPrintf ("svc_zdownload(%s): %d -> %d\n", cls.downloadname, size, uncompressedLen); #else Com_Error (ERR_DROP, "Received a unrequested compressed download"); #endif } else { fwrite (net_message_buffer + net_message.readcount, 1, size, cls.download); } net_message.readcount += size; if (percent != 100) { cls.downloadpercent = percent; MSG_WriteByte (clc_stringcmd); MSG_Print ("nextdl"); MSG_EndWriting (&cls.netchan.message); send_packet_now = true; } else { CL_FinishDownload (); // get another file if needed CL_RequestNextDownload (); } }
/* ===================== CL_ParseDownload A download message has been received from the server ===================== */ void CL_ParseDownload (sizebuf_t *msg, qboolean dataIsCompressed) { int size, percent; char name[MAX_OSPATH]; // int r; // read the data size = MSG_ReadShort (msg); percent = MSG_ReadByte (msg); if (size < 0) { if (size == -1) Com_Printf ("Server does not have this file.\n"); else Com_Printf ("Bad download data from server.\n"); cls.downloadtempname[0] = 0; cls.downloadname[0] = 0; cls.failed_download = true; if (cls.download) { // if here, we tried to resume a file but the server said no fclose (cls.download); cls.download = NULL; } CL_RequestNextDownload (); return; } // open the file if not opened yet if (!cls.download) { if (!cls.downloadtempname[0]) { Com_Printf ("Received download packet without request. Ignored.\n"); msg->readcount += size; return; } CL_DownloadFileName(name, sizeof(name), cls.downloadtempname); FS_CreatePath (name); cls.download = fopen (name, "wb"); if (!cls.download) { msg->readcount += size; Com_Printf ("Failed to open %s\n", cls.downloadtempname); CL_RequestNextDownload (); return; } } if (dataIsCompressed) { uint16 uncompressedLen; byte uncompressed[0xFFFF]; uncompressedLen = MSG_ReadShort (msg); if (!uncompressedLen) Com_Error (ERR_DROP, "uncompressedLen == 0"); ZLibDecompress (msg->data + msg->readcount, size, uncompressed, uncompressedLen, -15); fwrite (uncompressed, 1, uncompressedLen, cls.download); Com_DPrintf ("svc_zdownload(%s): %d -> %d\n", cls.downloadname, size, uncompressedLen); } else { fwrite (msg->data + msg->readcount, 1, size, cls.download); } //fwrite (net_message.data + net_message.readcount, 1, size, cls.download); msg->readcount += size; if (percent != 100) { // request next block // change display routines by zoid cls.downloadpercent = percent; MSG_WriteByte (&cls.netchan.message, clc_stringcmd); SZ_Print (&cls.netchan.message, "nextdl"); } else { CL_FinishDownload(); // get another file if needed CL_RequestNextDownload (); } }