#include "files.h"
#include "tools.h"
#include "screens.h"
+#include "init.h"
struct NetworkClientPlayerInfo
{
NULL
};
-struct NetworkLevelFileInfo
-{
- char *leveldir_identifier;
- struct LevelFileInfo file_info;
- struct LevelFileInfo tmpl_info;
- boolean use_network_level_files;
- boolean use_custom_template;
-};
-
/* server stuff */
static TCPsocket sfd; /* TCP server socket */
static boolean stop_network_client = FALSE;
static char stop_network_client_message[MAX_OUTPUT_LINESIZE + 1];
-static struct NetworkLevelFileInfo network_level;
+static struct NetworkLevelInfo network_level;
static void DrawNetworkTextExt(char *message, int font_nr, boolean initialize)
{
return(EMPTY_PLAYER_NAME);
}
+static boolean hasPathSeparator(char *s)
+{
+ return (strchr(s, '/') != NULL);
+}
+
static void StartNetworkServer(int port)
{
static int p;
level_nr = new_level_nr;
}
+ /* needed if level set of network game changed graphics, sounds or music */
+ ReloadCustomArtwork(0);
+
TapeErase();
if (network_level.use_network_level_files)
- LoadLevelFromNetwork(&network_level.file_info,
- &network_level.tmpl_info);
+ LoadNetworkLevel(&network_level);
else
LoadLevel(level_nr);
printf("OP_LEVEL_FILE: %d\n", player_nr);
leveldir_identifier = getStringCopy(getNetworkBufferString(read_buffer));
+
+ if (hasPathSeparator(leveldir_identifier))
+ Error(ERR_EXIT, "protocol error: invalid filename from network client");
+
+ InitNetworkLevelDirectory(leveldir_identifier);
+
network_level_dir = getNetworkLevelDir(leveldir_identifier);
file_info->nr = getNetworkBuffer16BitInteger(read_buffer);
file_info->basename = getStringCopy(getNetworkBufferString(read_buffer));
file_info->filename = getPath2(network_level_dir, file_info->basename);
- InitNetworkLevelDirectory(leveldir_identifier);
+ if (hasPathSeparator(file_info->basename))
+ Error(ERR_EXIT, "protocol error: invalid filename from network client");
getNetworkBufferFile(read_buffer, file_info->filename);
tmpl_info->basename = getStringCopy(getNetworkBufferString(read_buffer));
tmpl_info->filename = getPath2(network_level_dir, tmpl_info->basename);
+ if (hasPathSeparator(tmpl_info->basename))
+ Error(ERR_EXIT, "protocol error: invalid filename from network client");
+
getNetworkBufferFile(read_buffer, tmpl_info->filename);
}