projects
/
rocksndiamonds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
cleanup of network level function names and parameters
[rocksndiamonds.git]
/
src
/
network.c
diff --git
a/src/network.c
b/src/network.c
index bfe53c37c829e388dbf5ffb2bb197f9be720ef2e..dcd925949a18dc1ccfc5ab5f65b53de00f8923b9 100644
(file)
--- a/
src/network.c
+++ b/
src/network.c
@@
-22,6
+22,7
@@
#include "files.h"
#include "tools.h"
#include "screens.h"
#include "files.h"
#include "tools.h"
#include "screens.h"
+#include "init.h"
struct NetworkClientPlayerInfo
{
struct NetworkClientPlayerInfo
{
@@
-37,15
+38,6
@@
static struct NetworkClientPlayerInfo first_player =
NULL
};
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 */
/* server stuff */
static TCPsocket sfd; /* TCP server socket */
@@
-59,7
+51,7
@@
static boolean stop_network_game = FALSE;
static boolean stop_network_client = FALSE;
static char stop_network_client_message[MAX_OUTPUT_LINESIZE + 1];
static boolean stop_network_client = FALSE;
static char stop_network_client_message[MAX_OUTPUT_LINESIZE + 1];
-static struct NetworkLevel
File
Info network_level;
+static struct NetworkLevelInfo network_level;
static void DrawNetworkTextExt(char *message, int font_nr, boolean initialize)
{
static void DrawNetworkTextExt(char *message, int font_nr, boolean initialize)
{
@@
-181,6
+173,11
@@
char *getNetworkPlayerName(int player_nr)
return(EMPTY_PLAYER_NAME);
}
return(EMPTY_PLAYER_NAME);
}
+static boolean hasPathSeparator(char *s)
+{
+ return (strchr(s, '/') != NULL);
+}
+
static void StartNetworkServer(int port)
{
static int p;
static void StartNetworkServer(int port)
{
static int p;
@@
-693,11
+690,13
@@
static void Handle_OP_START_PLAYING()
level_nr = new_level_nr;
}
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)
TapeErase();
if (network_level.use_network_level_files)
- LoadLevelFromNetwork(&network_level.file_info,
- &network_level.tmpl_info);
+ LoadNetworkLevel(&network_level);
else
LoadLevel(level_nr);
else
LoadLevel(level_nr);
@@
-820,6
+819,12
@@
static void Handle_OP_LEVEL_FILE()
printf("OP_LEVEL_FILE: %d\n", player_nr);
leveldir_identifier = getStringCopy(getNetworkBufferString(read_buffer));
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);
network_level_dir = getNetworkLevelDir(leveldir_identifier);
file_info->nr = getNetworkBuffer16BitInteger(read_buffer);
@@
-828,7
+833,8
@@
static void Handle_OP_LEVEL_FILE()
file_info->basename = getStringCopy(getNetworkBufferString(read_buffer));
file_info->filename = getPath2(network_level_dir, file_info->basename);
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);
getNetworkBufferFile(read_buffer, file_info->filename);
@@
-840,6
+846,9
@@
static void Handle_OP_LEVEL_FILE()
tmpl_info->basename = getStringCopy(getNetworkBufferString(read_buffer));
tmpl_info->filename = getPath2(network_level_dir, tmpl_info->basename);
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);
}
getNetworkBufferFile(read_buffer, tmpl_info->filename);
}