network_data.h
author celestar
Sat, 30 Dec 2006 13:15:15 +0000
branchcustombridgeheads
changeset 5603 f3aa14b91b0a
parent 5339 7573f179efe8
child 5424 f09762e44457
permissions -rw-r--r--
(svn r7648) [cbh] - Feature: Allow removal of tracks from bridge heads. However, trains on the bridge must still be able to access the bridge head
2186
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 1977
diff changeset
     1
/* $Id$ */
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 1977
diff changeset
     2
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
     3
#ifndef NETWORK_DATA_H
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
     4
#define NETWORK_DATA_H
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
     5
1891
92a3b0aa0946 (svn r2397) - CodeChange: rename all "ttd" files to "openttd" files.
Darkvater
parents: 1820
diff changeset
     6
#include "openttd.h"
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
     7
#include "network.h"
1441
43c2b48559fa (svn r1945) - CodeChange: re-commit of rev 1835: "Reduce the visibility of network_core.h (Tron)".
darkvater
parents: 1341
diff changeset
     8
#include "network_core.h"
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
     9
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    10
// Is the network enabled?
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    11
#ifdef ENABLE_NETWORK
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    12
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    13
#define SEND_MTU 1460
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    14
#define MAX_TEXT_MSG_LEN 1024 /* long long long long sentences :-) */
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    15
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    16
// The client-info-server-index is always 1
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    17
#define NETWORK_SERVER_INDEX 1
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    18
#define NETWORK_EMPTY_INDEX 0
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    19
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    20
// What version of game-info do we use?
5339
7573f179efe8 (svn r7505) -Feature: show NewGRFs used on a game server, show which NewGRFs you do and do not have.
rubidium
parents: 4944
diff changeset
    21
#define NETWORK_GAME_INFO_VERSION 4
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    22
// What version of company info is this?
4326
c2ae4dbc1074 (svn r5999) -Feature: change the original date format to a 32 bits format based at the year 0.
rubidium
parents: 3437
diff changeset
    23
#define NETWORK_COMPANY_INFO_VERSION 4
668
346853c8b513 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 619
diff changeset
    24
// What version of master-server-protocol do we use?
346853c8b513 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 619
diff changeset
    25
#define NETWORK_MASTER_SERVER_VERSION 1
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    26
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    27
typedef uint16 PacketSize;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    28
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    29
typedef struct Packet {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    30
	struct Packet *next;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    31
	PacketSize size;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    32
	PacketSize pos;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    33
	byte buffer[SEND_MTU];
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    34
} Packet;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    35
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    36
typedef struct CommandPacket {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    37
	struct CommandPacket *next;
2498
befad2fe53d2 (svn r3024) -Codechange: Another batch of replacements of int/uint/int16/byte/-1 with proper types and constants
tron
parents: 2436
diff changeset
    38
	PlayerID player; /// player that is executing the command
1804
7810fc0aa941 (svn r2308) - Fix: enforce server-only and/or offline commands by giving them flags in the process table. This also fixes bug "[ 1190944 ] Many commands not checked for security"
Darkvater
parents: 1466
diff changeset
    39
	uint32 cmd;    /// command being executed
7810fc0aa941 (svn r2308) - Fix: enforce server-only and/or offline commands by giving them flags in the process table. This also fixes bug "[ 1190944 ] Many commands not checked for security"
Darkvater
parents: 1466
diff changeset
    40
	uint32 p1;     /// parameter p1
7810fc0aa941 (svn r2308) - Fix: enforce server-only and/or offline commands by giving them flags in the process table. This also fixes bug "[ 1190944 ] Many commands not checked for security"
Darkvater
parents: 1466
diff changeset
    41
	uint32 p2;     /// parameter p2
1977
4392ae3d8e31 (svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents: 1891
diff changeset
    42
	TileIndex tile; /// tile command being executed on
1820
9b6458526480 (svn r2324) Introduce _cmd_text for passing strings with a command instead of abusing _decode_parameters as text buffer. This should prevent several possible buffer overruns and is a bit cleaner to use. As bonus it reduces the size of most command packets by 79 bytes.
tron
parents: 1804
diff changeset
    43
	char text[80];
1804
7810fc0aa941 (svn r2308) - Fix: enforce server-only and/or offline commands by giving them flags in the process table. This also fixes bug "[ 1190944 ] Many commands not checked for security"
Darkvater
parents: 1466
diff changeset
    44
	uint32 frame;  /// the frame in which this packet is executed
7810fc0aa941 (svn r2308) - Fix: enforce server-only and/or offline commands by giving them flags in the process table. This also fixes bug "[ 1190944 ] Many commands not checked for security"
Darkvater
parents: 1466
diff changeset
    45
	byte callback; /// any callback function executed upon successful completion of the command
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    46
} CommandPacket;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    47
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    48
typedef enum {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    49
	STATUS_INACTIVE,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    50
	STATUS_AUTH, // This means that the client is authorized
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    51
	STATUS_MAP_WAIT, // This means that the client is put on hold because someone else is getting the map
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    52
	STATUS_MAP,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    53
	STATUS_DONE_MAP,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    54
	STATUS_PRE_ACTIVE,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    55
	STATUS_ACTIVE,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    56
} ClientStatus;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    57
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    58
typedef enum {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    59
	MAP_PACKET_START,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    60
	MAP_PACKET_NORMAL,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    61
	MAP_PACKET_END,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    62
} MapPacket;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    63
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    64
typedef enum {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    65
	NETWORK_RECV_STATUS_OKAY,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    66
	NETWORK_RECV_STATUS_DESYNC,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    67
	NETWORK_RECV_STATUS_SAVEGAME,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    68
	NETWORK_RECV_STATUS_CONN_LOST,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    69
	NETWORK_RECV_STATUS_MALFORMED_PACKET,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    70
	NETWORK_RECV_STATUS_SERVER_ERROR, // The server told us we made an error
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    71
	NETWORK_RECV_STATUS_SERVER_FULL,
841
8f0a68c6f43b (svn r1322) -Add: banning system (mostly tnx to guru3)
truelight
parents: 764
diff changeset
    72
	NETWORK_RECV_STATUS_SERVER_BANNED,
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    73
	NETWORK_RECV_STATUS_CLOSE_QUERY, // Done quering the server
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    74
} NetworkRecvStatus;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    75
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    76
typedef enum {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    77
	NETWORK_ERROR_GENERAL, // Try to use thisone like never
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    78
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    79
	// Signals from clients
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    80
	NETWORK_ERROR_DESYNC,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    81
	NETWORK_ERROR_SAVEGAME_FAILED,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    82
	NETWORK_ERROR_CONNECTION_LOST,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    83
	NETWORK_ERROR_ILLEGAL_PACKET,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    84
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    85
	// Signals from servers
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    86
	NETWORK_ERROR_NOT_AUTHORIZED,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    87
	NETWORK_ERROR_NOT_EXPECTED,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    88
	NETWORK_ERROR_WRONG_REVISION,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    89
	NETWORK_ERROR_NAME_IN_USE,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    90
	NETWORK_ERROR_WRONG_PASSWORD,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    91
	NETWORK_ERROR_PLAYER_MISMATCH, // Happens in CLIENT_COMMAND
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    92
	NETWORK_ERROR_KICKED,
748
b48388344610 (svn r1204) -Add: [Network] Added some cheaters-protection (money-cheat mostly)
truelight
parents: 722
diff changeset
    93
	NETWORK_ERROR_CHEATER,
2879
d270cb37c0ec (svn r3427) - Feature: Allow seeing and setting the maximum amount of companies and spectators for a server. This can be changed/viewed during runtime as well in the console.
Darkvater
parents: 2859
diff changeset
    94
	NETWORK_ERROR_FULL,
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    95
} NetworkErrorCode;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    96
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    97
// Actions that can be used for NetworkTextMessage
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    98
typedef enum {
722
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 716
diff changeset
    99
	NETWORK_ACTION_JOIN,
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 716
diff changeset
   100
	NETWORK_ACTION_LEAVE,
4944
c61494b1ec35 (svn r6932) -Codechange: Send server messages with format NETWORK_ACTION_SERVER_MESSAGE so it is
Darkvater
parents: 4912
diff changeset
   101
	NETWORK_ACTION_SERVER_MESSAGE,
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   102
	NETWORK_ACTION_CHAT,
4906
8a10678a62a3 (svn r6876) -Codechange: Change the naming of _PLAYER in DESTTYPE_PLAYER/NETWORK_ACTION_CHAT_PLAYER
Darkvater
parents: 4887
diff changeset
   103
	NETWORK_ACTION_CHAT_COMPANY,
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   104
	NETWORK_ACTION_CHAT_CLIENT,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   105
	NETWORK_ACTION_GIVE_MONEY,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   106
	NETWORK_ACTION_NAME_CHANGE,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   107
} NetworkAction;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   108
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   109
typedef enum {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   110
	NETWORK_GAME_PASSWORD,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   111
	NETWORK_COMPANY_PASSWORD,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   112
} NetworkPasswordType;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   113
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   114
// To keep the clients all together
716
40a349345f82 (svn r1168) -Cleanup: [Network] Cleaned the network code a bit. Added 'const'
truelight
parents: 668
diff changeset
   115
typedef struct NetworkClientState {
1466
fd5c1d8c992a (svn r1970) Fix some warnings which Cygwin showed
tron
parents: 1441
diff changeset
   116
	SOCKET socket;
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   117
	uint16 index;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   118
	uint32 last_frame;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   119
	uint32 last_frame_server;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   120
	byte lag_test; // This byte is used for lag-testing the client
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   121
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   122
	ClientStatus status;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   123
	bool writable; // is client ready to write to?
4880
0708f34e3586 (svn r6816) -Codechange: Some coding style, variable localization, const correctness.
Darkvater
parents: 4326
diff changeset
   124
	bool has_quit;
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   125
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   126
	Packet *packet_queue; // Packets that are awaiting delivery
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   127
	Packet *packet_recv; // Partially received packet
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   128
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   129
	CommandPacket *command_queue; // The command-queue awaiting delivery
716
40a349345f82 (svn r1168) -Cleanup: [Network] Cleaned the network code a bit. Added 'const'
truelight
parents: 668
diff changeset
   130
} NetworkClientState;
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   131
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   132
// What packet types are there
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   133
// WARNING: The first 3 packets can NEVER change order again
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   134
//   it protects old clients from joining newer servers (because SERVER_ERROR
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   135
//   is the respond to a wrong revision)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   136
typedef enum {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   137
	PACKET_SERVER_FULL,
841
8f0a68c6f43b (svn r1322) -Add: banning system (mostly tnx to guru3)
truelight
parents: 764
diff changeset
   138
	PACKET_SERVER_BANNED,
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   139
	PACKET_CLIENT_JOIN,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   140
	PACKET_SERVER_ERROR,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   141
	PACKET_CLIENT_COMPANY_INFO,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   142
	PACKET_SERVER_COMPANY_INFO,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   143
	PACKET_SERVER_CLIENT_INFO,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   144
	PACKET_SERVER_NEED_PASSWORD,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   145
	PACKET_CLIENT_PASSWORD,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   146
	PACKET_SERVER_WELCOME,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   147
	PACKET_CLIENT_GETMAP,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   148
	PACKET_SERVER_WAIT,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   149
	PACKET_SERVER_MAP,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   150
	PACKET_CLIENT_MAP_OK,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   151
	PACKET_SERVER_JOIN,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   152
	PACKET_SERVER_FRAME,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   153
	PACKET_SERVER_SYNC,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   154
	PACKET_CLIENT_ACK,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   155
	PACKET_CLIENT_COMMAND,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   156
	PACKET_SERVER_COMMAND,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   157
	PACKET_CLIENT_CHAT,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   158
	PACKET_SERVER_CHAT,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   159
	PACKET_CLIENT_SET_PASSWORD,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   160
	PACKET_CLIENT_SET_NAME,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   161
	PACKET_CLIENT_QUIT,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   162
	PACKET_CLIENT_ERROR,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   163
	PACKET_SERVER_QUIT,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   164
	PACKET_SERVER_ERROR_QUIT,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   165
	PACKET_SERVER_SHUTDOWN,
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   166
	PACKET_SERVER_NEWGAME,
1026
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1011
diff changeset
   167
	PACKET_SERVER_RCON,
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1011
diff changeset
   168
	PACKET_CLIENT_RCON,
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   169
	PACKET_END // Should ALWAYS be on the end of this list!! (period)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   170
} PacketType;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   171
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   172
typedef enum {
4887
3fa54b371032 (svn r6824) -Feature: Change the functionality of the chat window. SHIFT+ENTER (SHIFT+T)
Darkvater
parents: 4883
diff changeset
   173
	DESTTYPE_BROADCAST, ///< Send message/notice to all players (All)
4906
8a10678a62a3 (svn r6876) -Codechange: Change the naming of _PLAYER in DESTTYPE_PLAYER/NETWORK_ACTION_CHAT_PLAYER
Darkvater
parents: 4887
diff changeset
   174
	DESTTYPE_TEAM,    ///< Send message/notice to everyone playing the same company (Team)
4887
3fa54b371032 (svn r6824) -Feature: Change the functionality of the chat window. SHIFT+ENTER (SHIFT+T)
Darkvater
parents: 4883
diff changeset
   175
	DESTTYPE_CLIENT,    ///< Send message/notice to only a certain player (Private)
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   176
} DestType;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   177
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   178
CommandPacket *_local_command_queue;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   179
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   180
SOCKET _udp_client_socket; // udp client socket
764
68b398e2b780 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 748
diff changeset
   181
SOCKET _udp_server_socket; // udp server socket
68b398e2b780 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 748
diff changeset
   182
SOCKET _udp_master_socket; // udp master socket
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   183
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   184
// Here we keep track of the clients
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   185
//  (and the client uses [0] for his own communication)
716
40a349345f82 (svn r1168) -Cleanup: [Network] Cleaned the network code a bit. Added 'const'
truelight
parents: 668
diff changeset
   186
NetworkClientState _clients[MAX_CLIENTS];
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   187
#define DEREF_CLIENT(i) (&_clients[i])
716
40a349345f82 (svn r1168) -Cleanup: [Network] Cleaned the network code a bit. Added 'const'
truelight
parents: 668
diff changeset
   188
// This returns the NetworkClientInfo from a NetworkClientState
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   189
#define DEREF_CLIENT_INFO(cs) (&_network_client_info[cs - _clients])
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   190
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   191
// Macros to make life a bit more easier
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   192
#define DEF_CLIENT_RECEIVE_COMMAND(type) NetworkRecvStatus NetworkPacketReceive_ ## type ## _command(Packet *p)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   193
#define DEF_CLIENT_SEND_COMMAND(type) void NetworkPacketSend_ ## type ## _command(void)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   194
#define DEF_CLIENT_SEND_COMMAND_PARAM(type) void NetworkPacketSend_ ## type ## _command
716
40a349345f82 (svn r1168) -Cleanup: [Network] Cleaned the network code a bit. Added 'const'
truelight
parents: 668
diff changeset
   195
#define DEF_SERVER_RECEIVE_COMMAND(type) void NetworkPacketReceive_ ## type ## _command(NetworkClientState *cs, Packet *p)
40a349345f82 (svn r1168) -Cleanup: [Network] Cleaned the network code a bit. Added 'const'
truelight
parents: 668
diff changeset
   196
#define DEF_SERVER_SEND_COMMAND(type) void NetworkPacketSend_ ## type ## _command(NetworkClientState *cs)
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   197
#define DEF_SERVER_SEND_COMMAND_PARAM(type) void NetworkPacketSend_ ## type ## _command
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   198
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   199
#define SEND_COMMAND(type) NetworkPacketSend_ ## type ## _command
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   200
#define RECEIVE_COMMAND(type) NetworkPacketReceive_ ## type ## _command
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   201
4883
801b93ae218c (svn r6820) -Codechange: Some more const correctness, coding style.
Darkvater
parents: 4880
diff changeset
   202
#define FOR_ALL_CLIENTS(cs) for (cs = _clients; cs != endof(_clients) && cs->socket != INVALID_SOCKET; cs++)
801b93ae218c (svn r6820) -Codechange: Some more const correctness, coding style.
Darkvater
parents: 4880
diff changeset
   203
#define FOR_ALL_ACTIVE_CLIENT_INFOS(ci) for (ci = _network_client_info; ci != endof(_network_client_info); ci++) if (ci->client_index != NETWORK_EMPTY_INDEX)
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   204
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   205
Packet *NetworkSend_Init(PacketType type);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   206
void NetworkSend_uint8(Packet *packet, uint8 data);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   207
void NetworkSend_uint16(Packet *packet, uint16 data);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   208
void NetworkSend_uint32(Packet *packet, uint32 data);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   209
void NetworkSend_uint64(Packet *packet, uint64 data);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   210
void NetworkSend_string(Packet *packet, const char* data);
716
40a349345f82 (svn r1168) -Cleanup: [Network] Cleaned the network code a bit. Added 'const'
truelight
parents: 668
diff changeset
   211
void NetworkSend_Packet(Packet *packet, NetworkClientState *cs);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   212
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   213
uint8 NetworkRecv_uint8(NetworkClientState *cs, Packet *packet);
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   214
uint16 NetworkRecv_uint16(NetworkClientState *cs, Packet *packet);
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   215
uint32 NetworkRecv_uint32(NetworkClientState *cs, Packet *packet);
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   216
uint64 NetworkRecv_uint64(NetworkClientState *cs, Packet *packet);
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   217
void NetworkRecv_string(NetworkClientState *cs, Packet *packet, char* buffer, size_t size);
716
40a349345f82 (svn r1168) -Cleanup: [Network] Cleaned the network code a bit. Added 'const'
truelight
parents: 668
diff changeset
   218
Packet *NetworkRecv_Packet(NetworkClientState *cs, NetworkRecvStatus *status);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   219
716
40a349345f82 (svn r1168) -Cleanup: [Network] Cleaned the network code a bit. Added 'const'
truelight
parents: 668
diff changeset
   220
bool NetworkSend_Packets(NetworkClientState *cs);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   221
void NetworkExecuteCommand(CommandPacket *cp);
716
40a349345f82 (svn r1168) -Cleanup: [Network] Cleaned the network code a bit. Added 'const'
truelight
parents: 668
diff changeset
   222
void NetworkAddCommandQueue(NetworkClientState *cs, CommandPacket *cp);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   223
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   224
// from network.c
716
40a349345f82 (svn r1168) -Cleanup: [Network] Cleaned the network code a bit. Added 'const'
truelight
parents: 668
diff changeset
   225
void NetworkCloseClient(NetworkClientState *cs);
722
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 716
diff changeset
   226
void CDECL NetworkTextMessage(NetworkAction action, uint16 color, bool self_send, const char *name, const char *str, ...);
716
40a349345f82 (svn r1168) -Cleanup: [Network] Cleaned the network code a bit. Added 'const'
truelight
parents: 668
diff changeset
   227
void NetworkGetClientName(char *clientname, size_t size, const NetworkClientState *cs);
40a349345f82 (svn r1168) -Cleanup: [Network] Cleaned the network code a bit. Added 'const'
truelight
parents: 668
diff changeset
   228
uint NetworkCalculateLag(const NetworkClientState *cs);
1093
e8d26c7dc42f (svn r1594) Convert all undefined parameter lists to (void) and add the appropriate warning flags in the Makefile
tron
parents: 1026
diff changeset
   229
byte NetworkGetCurrentLanguageIndex(void);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   230
NetworkClientInfo *NetworkFindClientInfoFromIndex(uint16 client_index);
2859
d45695cd3e98 (svn r3407) - Feature: Kick and ban now with IP numbers.
Darkvater
parents: 2498
diff changeset
   231
NetworkClientInfo *NetworkFindClientInfoFromIP(const char *ip);
716
40a349345f82 (svn r1168) -Cleanup: [Network] Cleaned the network code a bit. Added 'const'
truelight
parents: 668
diff changeset
   232
NetworkClientState *NetworkFindClientStateFromIndex(uint16 client_index);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   233
unsigned long NetworkResolveHost(const char *hostname);
4912
d04b3f2bca70 (svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents: 4906
diff changeset
   234
char* GetNetworkErrorMsg(char* buf, NetworkErrorCode err, const char* last);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   235
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   236
#endif /* ENABLE_NETWORK */
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   237
2436
177cb6a8339f (svn r2962) - const correctness for all Get* functions and most Draw* functions that don't change their pointer parameters
Darkvater
parents: 2186
diff changeset
   238
#endif /* NETWORK_DATA_H */