PacketSend
| 222 | // PacketSend |
| 223 | // |
| 224 | void PacketSend (void) |
| 225 | { |
| 226 | int c; |
| 227 | |
| 228 | // FIXME: Catch this before we've overflown the buffer. With long chat |
| 229 | // text and lots of backup tics, it could conceivably happen. (Though |
| 230 | // apparently it hasn't yet, which is good.) |
| 231 | if (doomcom.datalength > MAX_MSGLEN) |
| 232 | { |
| 233 | I_FatalError("Netbuffer overflow!"); |
| 234 | } |
| 235 | assert(!(doomcom.data[0] & NCMD_COMPRESSED)); |
| 236 | |
| 237 | uLong size = TRANSMIT_SIZE - 1; |
| 238 | if (doomcom.datalength >= 10) |
| 239 | { |
| 240 | TransmitBuffer[0] = doomcom.data[0] | NCMD_COMPRESSED; |
| 241 | c = compress2(TransmitBuffer + 1, &size, doomcom.data + 1, doomcom.datalength - 1, 9); |
| 242 | size += 1; |
| 243 | } |
| 244 | else |
| 245 | { |
| 246 | c = -1; // Just some random error code to avoid sending the compressed buffer. |
| 247 | } |
| 248 | if (c == Z_OK && size < (uLong)doomcom.datalength) |
| 249 | { |
| 250 | // Printf("send %lu/%d\n", size, doomcom.datalength); |
| 251 | c = sendto(mysocket, (char *)TransmitBuffer, size, |
| 252 | 0, (sockaddr *)&sendaddress[doomcom.remotenode], |
| 253 | sizeof(sendaddress[doomcom.remotenode])); |
| 254 | } |
| 255 | else |
| 256 | { |
| 257 | if (doomcom.datalength > TRANSMIT_SIZE) |
| 258 | { |
| 259 | I_Error("Net compression failed (zlib error %d)", c); |
| 260 | } |
| 261 | else |
| 262 | { |
| 263 | // Printf("send %d\n", doomcom.datalength); |
| 264 | c = sendto(mysocket, (char *)doomcom.data, doomcom.datalength, |
| 265 | 0, (sockaddr *)&sendaddress[doomcom.remotenode], |
| 266 | sizeof(sendaddress[doomcom.remotenode])); |
| 267 | } |
| 268 | } |
| 269 | // if (c == -1) |
| 270 | // I_Error ("SendPacket error: %s",strerror(errno)); |
| 271 | } |
| 272 | |
| 273 | void PreSend(const void* buffer, int bufferlen, const sockaddr_in* to); |
| 274 | void SendConAck(int num_connected, int num_needed); |
no test coverage detected