return strlen(s) + 1;
}
-struct NetworkBuffer *newNetworkBuffer()
+struct NetworkBuffer *newNetworkBuffer(void)
{
struct NetworkBuffer *new = checked_calloc(sizeof(struct NetworkBuffer));
int receiveNetworkBufferBytes(struct NetworkBuffer *nb, TCPsocket socket,
int num_bytes)
{
+ if (num_bytes > MAX_PACKET_SIZE)
+ {
+ Error(ERR_NETWORK_SERVER, "protocol error: invalid packet size %d",
+ num_bytes);
+
+ return -1;
+ }
+
if (nb->pos + num_bytes > nb->max_size)
increaseNetworkBuffer(nb, num_bytes);
SendNetworkBufferToAllButOne(write_buffer, player);
}
-void ExitNetworkServer(int exit_value)
+static void Handle_OP_LEVEL_FILE(struct NetworkServerPlayerInfo *player)
+{
+ copyNetworkBufferForWriting(read_buffer, write_buffer, player->number);
+
+ SendNetworkBufferToAllButOne(write_buffer, player);
+}
+
+static void ExitNetworkServer(int exit_value)
{
Error(ERR_NETWORK_SERVER, "exiting network server");
Handle_OP_BROADCAST_MESSAGE(player);
break;
+ case OP_LEVEL_FILE:
+ Handle_OP_LEVEL_FILE(player);
+ break;
+
default:
if (options.verbose)
Error(ERR_NETWORK_SERVER,