network_client.c
author tron
Sun, 21 May 2006 13:51:36 +0000
changeset 3884 793081f80381
parent 3692 1d8f5041d437
child 4261 28670f743746
permissions -rw-r--r--
(svn r4940) Remove the dubious feature of remembering the last built depot. It serves no real purpose except causing confusion
2186
db48cf29b983 (svn r2701) Insert Id tags into all source files
tron
parents: 2163
diff changeset
     1
/* $Id$ */
db48cf29b983 (svn r2701) Insert Id tags into all source files
tron
parents: 2163
diff changeset
     2
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
     3
#include "stdafx.h"
1299
39c06aba09aa (svn r1803) Move debugging stuff into files of it's own
tron
parents: 1026
diff changeset
     4
#include "debug.h"
1317
3c90086ff34f (svn r1821) Move generic string handling functions to string.[ch] and introduce stre{cpy,cat}, see string.h for their semantics
tron
parents: 1309
diff changeset
     5
#include "string.h"
1309
4403a69da4f8 (svn r1813) Declare functions implemented in strings.c in their own shiny new header (though i think some of these function don't belong into strings.c)
tron
parents: 1299
diff changeset
     6
#include "strings.h"
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
     7
#include "network_data.h"
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
     8
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
     9
#ifdef ENABLE_NETWORK
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    10
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    11
#include "table/strings.h"
2163
b17b313113a0 (svn r2673) Include functions.h directly, not globally via openttd.h
tron
parents: 2162
diff changeset
    12
#include "functions.h"
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    13
#include "network_client.h"
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    14
#include "network_gamelist.h"
2162
b98e430ffd10 (svn r2672) Move saving/loading related declarations to saveload.h
tron
parents: 2159
diff changeset
    15
#include "saveload.h"
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    16
#include "command.h"
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    17
#include "gfx.h"
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    18
#include "window.h"
1026
02cc18821508 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
    19
#include "console.h"
2159
f6284cf5fab0 (svn r2669) Shuffle some more stuff around to reduce dependencies
tron
parents: 2078
diff changeset
    20
#include "variables.h"
2684
4df784e4be66 (svn r3226) -Fix: GPMI implementation had minor glitches
truelight
parents: 2373
diff changeset
    21
#include "ai/ai.h"
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    22
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    23
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    24
// This file handles all the client-commands
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    25
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    26
716
8af847728d5b (svn r1168) -Cleanup: [Network] Cleaned the network code a bit. Added 'const'
truelight
parents: 684
diff changeset
    27
extern const char _openttd_revision[];
8af847728d5b (svn r1168) -Cleanup: [Network] Cleaned the network code a bit. Added 'const'
truelight
parents: 684
diff changeset
    28
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    29
// So we don't make too much typos ;)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    30
#define MY_CLIENT DEREF_CLIENT(0)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    31
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    32
static uint32 last_ack_frame;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    33
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    34
// **********
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    35
// Sending functions
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    36
//   DEF_CLIENT_SEND_COMMAND has no parameters
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    37
// **********
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    38
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    39
DEF_CLIENT_SEND_COMMAND(PACKET_CLIENT_COMPANY_INFO)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    40
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    41
	//
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    42
	// Packet: CLIENT_COMPANY_INFO
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    43
	// Function: Request company-info (in detail)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    44
	// Data:
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    45
	//    <none>
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    46
	//
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    47
	Packet *p;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    48
	_network_join_status = NETWORK_JOIN_STATUS_GETTING_COMPANY_INFO;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    49
	InvalidateWindow(WC_NETWORK_STATUS_WINDOW, 0);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    50
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    51
	p = NetworkSend_Init(PACKET_CLIENT_COMPANY_INFO);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    52
	NetworkSend_Packet(p, MY_CLIENT);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    53
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    54
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    55
DEF_CLIENT_SEND_COMMAND(PACKET_CLIENT_JOIN)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    56
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    57
	//
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    58
	// Packet: CLIENT_JOIN
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    59
	// Function: Try to join the server
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    60
	// Data:
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    61
	//    String: OpenTTD Revision (norev000 if no revision)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    62
	//    String: Player Name (max NETWORK_NAME_LENGTH)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    63
	//    uint8:  Play as Player id (1..MAX_PLAYERS)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    64
	//    uint8:  Language ID
602
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents: 571
diff changeset
    65
	//    String: Unique id to find the player back in server-listing
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    66
	//
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    67
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    68
	Packet *p;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    69
	_network_join_status = NETWORK_JOIN_STATUS_AUTHORIZING;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    70
	InvalidateWindow(WC_NETWORK_STATUS_WINDOW, 0);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    71
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    72
	p = NetworkSend_Init(PACKET_CLIENT_JOIN);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    73
	NetworkSend_string(p, _openttd_revision);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    74
	NetworkSend_string(p, _network_player_name); // Player name
662
22708a1cbba9 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
    75
	NetworkSend_uint8(p, _network_playas); // PlayAs
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    76
	NetworkSend_uint8(p, NETLANG_ANY); // Language
602
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents: 571
diff changeset
    77
	NetworkSend_string(p, _network_unique_id);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    78
	NetworkSend_Packet(p, MY_CLIENT);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    79
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    80
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    81
DEF_CLIENT_SEND_COMMAND_PARAM(PACKET_CLIENT_PASSWORD)(NetworkPasswordType type, const char *password)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    82
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    83
	//
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    84
	// Packet: CLIENT_PASSWORD
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    85
	// Function: Send a password to the server to authorize
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    86
	// Data:
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    87
	//    uint8:  NetworkPasswordType
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    88
	//    String: Password
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    89
	//
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    90
	Packet *p = NetworkSend_Init(PACKET_CLIENT_PASSWORD);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    91
	NetworkSend_uint8(p, type);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    92
	NetworkSend_string(p, password);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    93
	NetworkSend_Packet(p, MY_CLIENT);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    94
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    95
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    96
DEF_CLIENT_SEND_COMMAND(PACKET_CLIENT_GETMAP)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    97
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    98
	//
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    99
	// Packet: CLIENT_GETMAP
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   100
	// Function: Request the map from the server
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   101
	// Data:
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   102
	//    <none>
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   103
	//
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   104
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   105
	Packet *p = NetworkSend_Init(PACKET_CLIENT_GETMAP);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   106
	NetworkSend_Packet(p, MY_CLIENT);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   107
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   108
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   109
DEF_CLIENT_SEND_COMMAND(PACKET_CLIENT_MAP_OK)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   110
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   111
	//
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   112
	// Packet: CLIENT_MAP_OK
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   113
	// Function: Tell the server that we are done receiving/loading the map
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   114
	// Data:
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   115
	//    <none>
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   116
	//
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   117
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   118
	Packet *p = NetworkSend_Init(PACKET_CLIENT_MAP_OK);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   119
	NetworkSend_Packet(p, MY_CLIENT);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   120
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   121
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   122
DEF_CLIENT_SEND_COMMAND(PACKET_CLIENT_ACK)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   123
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   124
	//
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   125
	// Packet: CLIENT_ACK
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   126
	// Function: Tell the server we are done with this frame
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   127
	// Data:
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   128
	//    uint32: current FrameCounter of the client
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   129
	//
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   130
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   131
	Packet *p = NetworkSend_Init(PACKET_CLIENT_ACK);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   132
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   133
	NetworkSend_uint32(p, _frame_counter);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   134
	NetworkSend_Packet(p, MY_CLIENT);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   135
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   136
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   137
// Send a command packet to the server
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   138
DEF_CLIENT_SEND_COMMAND_PARAM(PACKET_CLIENT_COMMAND)(CommandPacket *cp)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   139
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   140
	//
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   141
	// Packet: CLIENT_COMMAND
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   142
	// Function: Send a DoCommand to the Server
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   143
	// Data:
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   144
	//    uint8:  PlayerID (0..MAX_PLAYERS-1)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   145
	//    uint32: CommandID (see command.h)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   146
	//    uint32: P1 (free variables used in DoCommand)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   147
	//    uint32: P2
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   148
	//    uint32: Tile
1820
d03c56850dc2 (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: 1797
diff changeset
   149
	//    string: text
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   150
	//    uint8:  CallBackID (see callback_table.c)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   151
	//
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   152
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   153
	Packet *p = NetworkSend_Init(PACKET_CLIENT_COMMAND);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   154
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   155
	NetworkSend_uint8(p, cp->player);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   156
	NetworkSend_uint32(p, cp->cmd);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   157
	NetworkSend_uint32(p, cp->p1);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   158
	NetworkSend_uint32(p, cp->p2);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   159
	NetworkSend_uint32(p, (uint32)cp->tile);
1820
d03c56850dc2 (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: 1797
diff changeset
   160
	NetworkSend_string(p, cp->text);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   161
	NetworkSend_uint8(p, cp->callback);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   162
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   163
	NetworkSend_Packet(p, MY_CLIENT);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   164
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   165
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   166
// Send a chat-packet over the network
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   167
DEF_CLIENT_SEND_COMMAND_PARAM(PACKET_CLIENT_CHAT)(NetworkAction action, DestType desttype, int dest, const char *msg)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   168
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   169
	//
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   170
	// Packet: CLIENT_CHAT
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   171
	// Function: Send a chat-packet to the serve
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   172
	// Data:
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   173
	//    uint8:  ActionID (see network_data.h, NetworkAction)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   174
	//    uint8:  Destination Type (see network_data.h, DestType);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   175
	//    uint8:  Destination Player (1..MAX_PLAYERS)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   176
	//    String: Message (max MAX_TEXT_MSG_LEN)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   177
	//
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   178
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   179
	Packet *p = NetworkSend_Init(PACKET_CLIENT_CHAT);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   180
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   181
	NetworkSend_uint8(p, action);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   182
	NetworkSend_uint8(p, desttype);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   183
	NetworkSend_uint8(p, dest);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   184
	NetworkSend_string(p, msg);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   185
	NetworkSend_Packet(p, MY_CLIENT);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   186
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   187
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   188
// Send an error-packet over the network
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   189
DEF_CLIENT_SEND_COMMAND_PARAM(PACKET_CLIENT_ERROR)(NetworkErrorCode errorno)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   190
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   191
	//
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   192
	// Packet: CLIENT_ERROR
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   193
	// Function: The client made an error and is quiting the game
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   194
	// Data:
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   195
	//    uint8:  ErrorID (see network_data.h, NetworkErrorCode)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   196
	//
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   197
	Packet *p = NetworkSend_Init(PACKET_CLIENT_ERROR);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   198
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   199
	NetworkSend_uint8(p, errorno);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   200
	NetworkSend_Packet(p, MY_CLIENT);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   201
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   202
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   203
DEF_CLIENT_SEND_COMMAND_PARAM(PACKET_CLIENT_SET_PASSWORD)(const char *password)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   204
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   205
	//
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   206
	// Packet: PACKET_CLIENT_SET_PASSWORD
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   207
	// Function: Set the password for the clients current company
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   208
	// Data:
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   209
	//    String: Password
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   210
	//
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   211
	Packet *p = NetworkSend_Init(PACKET_CLIENT_SET_PASSWORD);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   212
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   213
	NetworkSend_string(p, password);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   214
	NetworkSend_Packet(p, MY_CLIENT);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   215
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   216
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   217
DEF_CLIENT_SEND_COMMAND_PARAM(PACKET_CLIENT_SET_NAME)(const char *name)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   218
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   219
	//
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   220
	// Packet: PACKET_CLIENT_SET_NAME
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   221
	// Function: Gives the player a new name
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   222
	// Data:
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   223
	//    String: Name
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   224
	//
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   225
	Packet *p = NetworkSend_Init(PACKET_CLIENT_SET_NAME);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   226
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   227
	NetworkSend_string(p, name);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   228
	NetworkSend_Packet(p, MY_CLIENT);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   229
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   230
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   231
// Send an quit-packet over the network
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   232
DEF_CLIENT_SEND_COMMAND_PARAM(PACKET_CLIENT_QUIT)(const char *leavemsg)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   233
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   234
	//
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   235
	// Packet: CLIENT_QUIT
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   236
	// Function: The client is quiting the game
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   237
	// Data:
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   238
	//    String: leave-message
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   239
	//
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   240
	Packet *p = NetworkSend_Init(PACKET_CLIENT_QUIT);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   241
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   242
	NetworkSend_string(p, leavemsg);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   243
	NetworkSend_Packet(p, MY_CLIENT);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   244
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   245
1026
02cc18821508 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   246
DEF_CLIENT_SEND_COMMAND_PARAM(PACKET_CLIENT_RCON)(const char *pass, const char *command)
02cc18821508 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   247
{
02cc18821508 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   248
	Packet *p = NetworkSend_Init(PACKET_CLIENT_RCON);
02cc18821508 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   249
	NetworkSend_string(p, pass);
02cc18821508 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   250
	NetworkSend_string(p, command);
02cc18821508 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   251
	NetworkSend_Packet(p, MY_CLIENT);
02cc18821508 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   252
}
02cc18821508 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   253
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   254
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   255
// **********
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   256
// Receiving functions
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   257
//   DEF_CLIENT_RECEIVE_COMMAND has parameter: Packet *p
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   258
// **********
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   259
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   260
extern bool SafeSaveOrLoad(const char *filename, int mode, int newgm);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   261
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   262
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_FULL)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   263
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   264
	// We try to join a server which is full
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   265
	_switch_mode_errorstr = STR_NETWORK_ERR_SERVER_FULL;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   266
	DeleteWindowById(WC_NETWORK_STATUS_WINDOW, 0);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   267
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   268
	return NETWORK_RECV_STATUS_SERVER_FULL;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   269
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   270
841
4874b9ce2765 (svn r1322) -Add: banning system (mostly tnx to guru3)
truelight
parents: 779
diff changeset
   271
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_BANNED)
4874b9ce2765 (svn r1322) -Add: banning system (mostly tnx to guru3)
truelight
parents: 779
diff changeset
   272
{
4874b9ce2765 (svn r1322) -Add: banning system (mostly tnx to guru3)
truelight
parents: 779
diff changeset
   273
	// We try to join a server where we are banned
4874b9ce2765 (svn r1322) -Add: banning system (mostly tnx to guru3)
truelight
parents: 779
diff changeset
   274
	_switch_mode_errorstr = STR_NETWORK_ERR_SERVER_BANNED;
4874b9ce2765 (svn r1322) -Add: banning system (mostly tnx to guru3)
truelight
parents: 779
diff changeset
   275
	DeleteWindowById(WC_NETWORK_STATUS_WINDOW, 0);
4874b9ce2765 (svn r1322) -Add: banning system (mostly tnx to guru3)
truelight
parents: 779
diff changeset
   276
4874b9ce2765 (svn r1322) -Add: banning system (mostly tnx to guru3)
truelight
parents: 779
diff changeset
   277
	return NETWORK_RECV_STATUS_SERVER_BANNED;
4874b9ce2765 (svn r1322) -Add: banning system (mostly tnx to guru3)
truelight
parents: 779
diff changeset
   278
}
4874b9ce2765 (svn r1322) -Add: banning system (mostly tnx to guru3)
truelight
parents: 779
diff changeset
   279
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   280
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_COMPANY_INFO)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   281
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   282
	byte company_info_version;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   283
	int i;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   284
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   285
	company_info_version = NetworkRecv_uint8(MY_CLIENT, p);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   286
1013
f800400dab1e (svn r1513) -Fix: glitch in revision 1510
truelight
parents: 1011
diff changeset
   287
	if (!MY_CLIENT->quited && company_info_version == NETWORK_COMPANY_INFO_VERSION) {
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   288
		byte total;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   289
		byte current;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   290
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   291
		total = NetworkRecv_uint8(MY_CLIENT, p);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   292
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   293
		// There is no data at all..
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   294
		if (total == 0)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   295
			return NETWORK_RECV_STATUS_CLOSE_QUERY;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   296
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   297
		current = NetworkRecv_uint8(MY_CLIENT, p);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   298
		if (current >= MAX_PLAYERS)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   299
			return NETWORK_RECV_STATUS_CLOSE_QUERY;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   300
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   301
		NetworkRecv_string(MY_CLIENT, p, _network_player_info[current].company_name, sizeof(_network_player_info[current].company_name));
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   302
		_network_player_info[current].inaugurated_year = NetworkRecv_uint8(MY_CLIENT, p);
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   303
		_network_player_info[current].company_value = NetworkRecv_uint64(MY_CLIENT, p);
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   304
		_network_player_info[current].money = NetworkRecv_uint64(MY_CLIENT, p);
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   305
		_network_player_info[current].income = NetworkRecv_uint64(MY_CLIENT, p);
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   306
		_network_player_info[current].performance = NetworkRecv_uint16(MY_CLIENT, p);
1011
933efc472c62 (svn r1510) -Add: Improved Network Lobby GUI: (bociusz)
truelight
parents: 959
diff changeset
   307
		_network_player_info[current].use_password = NetworkRecv_uint8(MY_CLIENT, p);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   308
		for (i = 0; i < NETWORK_VEHICLE_TYPES; i++)
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   309
			_network_player_info[current].num_vehicle[i] = NetworkRecv_uint16(MY_CLIENT, p);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   310
		for (i = 0; i < NETWORK_STATION_TYPES; i++)
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   311
			_network_player_info[current].num_station[i] = NetworkRecv_uint16(MY_CLIENT, p);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   312
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   313
		NetworkRecv_string(MY_CLIENT, p, _network_player_info[current].players, sizeof(_network_player_info[current].players));
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   314
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   315
		InvalidateWindow(WC_NETWORK_WINDOW, 0);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   316
734
f4ad2f5805fd (svn r1186) -Fix: [Network] You can now join a company on a server where a company
truelight
parents: 722
diff changeset
   317
		return NETWORK_RECV_STATUS_OKAY;
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   318
	}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   319
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   320
	return NETWORK_RECV_STATUS_CLOSE_QUERY;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   321
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   322
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   323
// This packet contains info about the client (playas and name)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   324
//  as client we save this in NetworkClientInfo, linked via 'index'
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   325
//  which is always an unique number on a server.
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   326
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_CLIENT_INFO)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   327
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   328
	NetworkClientInfo *ci;
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   329
	uint16 index = NetworkRecv_uint16(MY_CLIENT, p);
3692
1d8f5041d437 (svn r4623) - Codechange: s/byte/PlayerID/
Darkvater
parents: 3437
diff changeset
   330
	PlayerID playas = NetworkRecv_uint8(MY_CLIENT, p);
662
22708a1cbba9 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   331
	char name[NETWORK_NAME_LENGTH];
22708a1cbba9 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   332
	char unique_id[NETWORK_NAME_LENGTH];
22708a1cbba9 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   333
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   334
	NetworkRecv_string(MY_CLIENT, p, name, sizeof(name));
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   335
	NetworkRecv_string(MY_CLIENT, p, unique_id, sizeof(unique_id));
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   336
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   337
	if (MY_CLIENT->quited)
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   338
		return NETWORK_RECV_STATUS_CONN_LOST;
662
22708a1cbba9 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   339
22708a1cbba9 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   340
	/* Do we receive a change of data? Most likely we changed playas */
2684
4df784e4be66 (svn r3226) -Fix: GPMI implementation had minor glitches
truelight
parents: 2373
diff changeset
   341
	if (index == _network_own_client_index) {
662
22708a1cbba9 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   342
		_network_playas = playas;
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   343
2702
9172e3030a35 (svn r3246) -Fix: small glitch in ai_network_client code (network_client.c)
truelight
parents: 2684
diff changeset
   344
		/* Are we a ai-network-client? Are we not joining as a SPECTATOR (playas == 0, means SPECTATOR) */
9172e3030a35 (svn r3246) -Fix: small glitch in ai_network_client code (network_client.c)
truelight
parents: 2684
diff changeset
   345
		if (_ai.network_client && playas != 0) {
2684
4df784e4be66 (svn r3226) -Fix: GPMI implementation had minor glitches
truelight
parents: 2373
diff changeset
   346
			if (_ai.network_playas == OWNER_SPECTATOR)
4df784e4be66 (svn r3226) -Fix: GPMI implementation had minor glitches
truelight
parents: 2373
diff changeset
   347
				AI_StartNewAI(playas - 1);
4df784e4be66 (svn r3226) -Fix: GPMI implementation had minor glitches
truelight
parents: 2373
diff changeset
   348
4df784e4be66 (svn r3226) -Fix: GPMI implementation had minor glitches
truelight
parents: 2373
diff changeset
   349
			_ai.network_playas = playas - 1;
4df784e4be66 (svn r3226) -Fix: GPMI implementation had minor glitches
truelight
parents: 2373
diff changeset
   350
		}
4df784e4be66 (svn r3226) -Fix: GPMI implementation had minor glitches
truelight
parents: 2373
diff changeset
   351
	}
4df784e4be66 (svn r3226) -Fix: GPMI implementation had minor glitches
truelight
parents: 2373
diff changeset
   352
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   353
	ci = NetworkFindClientInfoFromIndex(index);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   354
	if (ci != NULL) {
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   355
		if (playas == ci->client_playas && strcmp(name, ci->client_name) != 0) {
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   356
			// Client name changed, display the change
2373
e073ec69bf56 (svn r2899) -Fix: Several format string vulnerabilities and buffer overflows in the network code
tron
parents: 2293
diff changeset
   357
			NetworkTextMessage(NETWORK_ACTION_NAME_CHANGE, 1, false, ci->client_name, "%s", name);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   358
		} else if (playas != ci->client_playas) {
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   359
			// The player changed from client-player..
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   360
			// Do not display that for now
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   361
		}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   362
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   363
		ci->client_playas = playas;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   364
		ttd_strlcpy(ci->client_name, name, sizeof(ci->client_name));
662
22708a1cbba9 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   365
722
f420fa9bd521 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   366
		InvalidateWindow(WC_CLIENT_LIST, 0);
f420fa9bd521 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   367
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   368
		return NETWORK_RECV_STATUS_OKAY;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   369
	}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   370
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   371
	// We don't have this index yet, find an empty index, and put the data there
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   372
	ci = NetworkFindClientInfoFromIndex(NETWORK_EMPTY_INDEX);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   373
	if (ci != NULL) {
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   374
		ci->client_index = index;
662
22708a1cbba9 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   375
		ci->client_playas = playas;
22708a1cbba9 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   376
22708a1cbba9 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   377
		ttd_strlcpy(ci->client_name, name, sizeof(ci->client_name));
22708a1cbba9 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   378
		ttd_strlcpy(ci->unique_id, unique_id, sizeof(ci->unique_id));
22708a1cbba9 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   379
722
f420fa9bd521 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   380
		InvalidateWindow(WC_CLIENT_LIST, 0);
f420fa9bd521 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   381
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   382
		return NETWORK_RECV_STATUS_OKAY;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   383
	}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   384
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   385
	// Here the program should never ever come.....
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   386
	return NETWORK_RECV_STATUS_MALFORMED_PACKET;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   387
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   388
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   389
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_ERROR)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   390
{
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   391
	NetworkErrorCode error = NetworkRecv_uint8(MY_CLIENT, p);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   392
2879
365ecd52f2db (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: 2817
diff changeset
   393
	switch (error) {
365ecd52f2db (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: 2817
diff changeset
   394
		/* We made an error in the protocol, and our connection is closed.... */
365ecd52f2db (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: 2817
diff changeset
   395
		case NETWORK_ERROR_NOT_AUTHORIZED:
365ecd52f2db (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: 2817
diff changeset
   396
		case NETWORK_ERROR_NOT_EXPECTED:
365ecd52f2db (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: 2817
diff changeset
   397
		case NETWORK_ERROR_PLAYER_MISMATCH:
365ecd52f2db (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: 2817
diff changeset
   398
			_switch_mode_errorstr = STR_NETWORK_ERR_SERVER_ERROR;
365ecd52f2db (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: 2817
diff changeset
   399
			break;
365ecd52f2db (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: 2817
diff changeset
   400
		case NETWORK_ERROR_FULL:
365ecd52f2db (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: 2817
diff changeset
   401
			_switch_mode_errorstr = STR_NETWORK_ERR_SERVER_FULL;
365ecd52f2db (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: 2817
diff changeset
   402
			break;
365ecd52f2db (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: 2817
diff changeset
   403
		case NETWORK_ERROR_WRONG_REVISION:
365ecd52f2db (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: 2817
diff changeset
   404
			_switch_mode_errorstr = STR_NETWORK_ERR_WRONG_REVISION;
365ecd52f2db (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: 2817
diff changeset
   405
			break;
365ecd52f2db (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: 2817
diff changeset
   406
		case NETWORK_ERROR_WRONG_PASSWORD:
365ecd52f2db (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: 2817
diff changeset
   407
			_switch_mode_errorstr = STR_NETWORK_ERR_WRONG_PASSWORD;
365ecd52f2db (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: 2817
diff changeset
   408
			break;
365ecd52f2db (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: 2817
diff changeset
   409
		case NETWORK_ERROR_KICKED:
365ecd52f2db (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: 2817
diff changeset
   410
			_switch_mode_errorstr = STR_NETWORK_ERR_KICKED;
365ecd52f2db (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: 2817
diff changeset
   411
			break;
365ecd52f2db (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: 2817
diff changeset
   412
		case NETWORK_ERROR_CHEATER:
365ecd52f2db (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: 2817
diff changeset
   413
			_switch_mode_errorstr = STR_NETWORK_ERR_CHEATER;
365ecd52f2db (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: 2817
diff changeset
   414
			break;
365ecd52f2db (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: 2817
diff changeset
   415
		default:
365ecd52f2db (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: 2817
diff changeset
   416
			_switch_mode_errorstr = STR_NETWORK_ERR_LOSTCONNECTION;
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   417
	}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   418
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   419
	DeleteWindowById(WC_NETWORK_STATUS_WINDOW, 0);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   420
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   421
	return NETWORK_RECV_STATUS_SERVER_ERROR;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   422
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   423
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   424
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_NEED_PASSWORD)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   425
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   426
	NetworkPasswordType type;
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   427
	type = NetworkRecv_uint8(MY_CLIENT, p);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   428
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   429
	if (type == NETWORK_GAME_PASSWORD) {
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   430
		ShowNetworkNeedGamePassword();
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   431
		return NETWORK_RECV_STATUS_OKAY;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   432
	} else if (type == NETWORK_COMPANY_PASSWORD) {
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   433
		ShowNetworkNeedCompanyPassword();
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   434
		return NETWORK_RECV_STATUS_OKAY;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   435
	}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   436
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   437
	return NETWORK_RECV_STATUS_MALFORMED_PACKET;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   438
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   439
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   440
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_WELCOME)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   441
{
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   442
	_network_own_client_index = NetworkRecv_uint16(MY_CLIENT, p);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   443
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   444
	// Start receiving the map
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   445
	SEND_COMMAND(PACKET_CLIENT_GETMAP)();
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   446
	return NETWORK_RECV_STATUS_OKAY;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   447
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   448
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   449
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_WAIT)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   450
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   451
	_network_join_status = NETWORK_JOIN_STATUS_WAITING;
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   452
	_network_join_waiting = NetworkRecv_uint8(MY_CLIENT, p);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   453
	InvalidateWindow(WC_NETWORK_STATUS_WINDOW, 0);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   454
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   455
	// We are put on hold for receiving the map.. we need GUI for this ;)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   456
	DEBUG(net, 1)("[NET] The server is currently busy sending the map to someone else.. please hold..." );
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   457
	DEBUG(net, 1)("[NET]  There are %d clients in front of you", _network_join_waiting);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   458
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   459
	return NETWORK_RECV_STATUS_OKAY;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   460
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   461
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   462
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_MAP)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   463
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   464
	static char filename[256];
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   465
	static FILE *file_pointer;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   466
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   467
	byte maptype;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   468
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   469
	maptype = NetworkRecv_uint8(MY_CLIENT, p);
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   470
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   471
	if (MY_CLIENT->quited)
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   472
		return NETWORK_RECV_STATUS_CONN_LOST;
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   473
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   474
	// First packet, init some stuff
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   475
	if (maptype == MAP_PACKET_START) {
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   476
		// The name for the temp-map
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   477
		sprintf(filename, "%s%snetwork_client.tmp",  _path.autosave_dir, PATHSEP);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   478
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   479
		file_pointer = fopen(filename, "wb");
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   480
		if (file_pointer == NULL) {
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   481
			_switch_mode_errorstr = STR_NETWORK_ERR_SAVEGAMEERROR;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   482
			return NETWORK_RECV_STATUS_SAVEGAME;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   483
		}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   484
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   485
		_frame_counter = _frame_counter_server = _frame_counter_max = NetworkRecv_uint32(MY_CLIENT, p);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   486
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   487
		_network_join_status = NETWORK_JOIN_STATUS_DOWNLOADING;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   488
		_network_join_kbytes = 0;
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   489
		_network_join_kbytes_total = NetworkRecv_uint32(MY_CLIENT, p) / 1024;
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   490
		InvalidateWindow(WC_NETWORK_STATUS_WINDOW, 0);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   491
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   492
		// The first packet does not contain any more data
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   493
		return NETWORK_RECV_STATUS_OKAY;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   494
	}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   495
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   496
	if (maptype == MAP_PACKET_NORMAL) {
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   497
		// We are still receiving data, put it to the file
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   498
		fwrite(p->buffer + p->pos, 1, p->size - p->pos, file_pointer);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   499
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   500
		_network_join_kbytes = ftell(file_pointer) / 1024;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   501
		InvalidateWindow(WC_NETWORK_STATUS_WINDOW, 0);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   502
	}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   503
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   504
	// Check if this was the last packet
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   505
	if (maptype == MAP_PACKET_END) {
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   506
		fclose(file_pointer);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   507
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   508
		_network_join_status = NETWORK_JOIN_STATUS_PROCESSING;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   509
		InvalidateWindow(WC_NETWORK_STATUS_WINDOW, 0);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   510
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   511
		// The map is done downloading, load it
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   512
		// Load the map
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   513
		if (!SafeSaveOrLoad(filename, SL_LOAD, GM_NORMAL)) {
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   514
			DeleteWindowById(WC_NETWORK_STATUS_WINDOW, 0);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   515
			_switch_mode_errorstr = STR_NETWORK_ERR_SAVEGAMEERROR;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   516
			return NETWORK_RECV_STATUS_SAVEGAME;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   517
		}
1500
a66721629bc0 (svn r2004) - Fix: [ 1149487 ] Autosave ignoring settings
Darkvater
parents: 1317
diff changeset
   518
a66721629bc0 (svn r2004) - Fix: [ 1149487 ] Autosave ignoring settings
Darkvater
parents: 1317
diff changeset
   519
		_opt_ptr = &_opt; // during a network game you are always in-game
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   520
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   521
		// Say we received the map and loaded it correctly!
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   522
		SEND_COMMAND(PACKET_CLIENT_MAP_OK)();
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   523
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   524
		if (_network_playas == 0 || _network_playas > MAX_PLAYERS ||
1962
8254df1b359b (svn r2468) -Codechange: Got rid of DEREF_PLAYER and replaced it by GetPlayer
celestar
parents: 1820
diff changeset
   525
				!GetPlayer(_network_playas - 1)->is_active) {
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   526
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   527
			if (_network_playas == OWNER_SPECTATOR) {
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   528
				// The client wants to be a spectator..
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   529
				_local_player = OWNER_SPECTATOR;
670
d164965bb35a (svn r1108) -Fix: [Network] Fixed problem around slow clients:
truelight
parents: 662
diff changeset
   530
				DeleteWindowById(WC_NETWORK_STATUS_WINDOW, 0);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   531
			} else {
1797
fa156be69235 (svn r2301) - CodeChange: prettyify ChangeOwnerShipOfPlayerItems() a bit
Darkvater
parents: 1500
diff changeset
   532
				/* We have arrived and ready to start playing; send a command to make a new player;
fa156be69235 (svn r2301) - CodeChange: prettyify ChangeOwnerShipOfPlayerItems() a bit
Darkvater
parents: 1500
diff changeset
   533
				 * the server will give us a client-id and let us in */
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   534
				_local_player = 0;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   535
				NetworkSend_Command(0, 0, 0, CMD_PLAYER_CTRL, NULL);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   536
				_local_player = OWNER_SPECTATOR;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   537
			}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   538
		} else {
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   539
			// take control over an existing company
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   540
			_local_player = _network_playas - 1;
2293
b48192aec903 (svn r2817) -Codechange: [autoreplace]: moved autoreplace and autorenew to serverside
bjarni
parents: 2186
diff changeset
   541
			_patches.autorenew = GetPlayer(_local_player)->engine_renew;
b48192aec903 (svn r2817) -Codechange: [autoreplace]: moved autoreplace and autorenew to serverside
bjarni
parents: 2186
diff changeset
   542
			_patches.autorenew_months = GetPlayer(_local_player)->engine_renew_months;
b48192aec903 (svn r2817) -Codechange: [autoreplace]: moved autoreplace and autorenew to serverside
bjarni
parents: 2186
diff changeset
   543
			_patches.autorenew_money = GetPlayer(_local_player)->engine_renew_money;
684
639c3ca13086 (svn r1125) -Fix: [Network] You can now safely join a company again
truelight
parents: 670
diff changeset
   544
			DeleteWindowById(WC_NETWORK_STATUS_WINDOW, 0);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   545
		}
2684
4df784e4be66 (svn r3226) -Fix: GPMI implementation had minor glitches
truelight
parents: 2373
diff changeset
   546
4df784e4be66 (svn r3226) -Fix: GPMI implementation had minor glitches
truelight
parents: 2373
diff changeset
   547
		/* Check if we are an ai-network-client, and if so, disable GUI */
4df784e4be66 (svn r3226) -Fix: GPMI implementation had minor glitches
truelight
parents: 2373
diff changeset
   548
		if (_ai.network_client) {
4df784e4be66 (svn r3226) -Fix: GPMI implementation had minor glitches
truelight
parents: 2373
diff changeset
   549
			_ai.network_playas = _local_player;
4df784e4be66 (svn r3226) -Fix: GPMI implementation had minor glitches
truelight
parents: 2373
diff changeset
   550
			_local_player      = OWNER_SPECTATOR;
4df784e4be66 (svn r3226) -Fix: GPMI implementation had minor glitches
truelight
parents: 2373
diff changeset
   551
4df784e4be66 (svn r3226) -Fix: GPMI implementation had minor glitches
truelight
parents: 2373
diff changeset
   552
			if (_ai.network_playas != OWNER_SPECTATOR) {
4df784e4be66 (svn r3226) -Fix: GPMI implementation had minor glitches
truelight
parents: 2373
diff changeset
   553
				/* If we didn't join the game as a spectator, activate the AI */
4df784e4be66 (svn r3226) -Fix: GPMI implementation had minor glitches
truelight
parents: 2373
diff changeset
   554
				AI_StartNewAI(_ai.network_playas);
4df784e4be66 (svn r3226) -Fix: GPMI implementation had minor glitches
truelight
parents: 2373
diff changeset
   555
			}
4df784e4be66 (svn r3226) -Fix: GPMI implementation had minor glitches
truelight
parents: 2373
diff changeset
   556
		}
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   557
	}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   558
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   559
	return NETWORK_RECV_STATUS_OKAY;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   560
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   561
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   562
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_FRAME)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   563
{
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   564
	_frame_counter_server = NetworkRecv_uint32(MY_CLIENT, p);
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   565
	_frame_counter_max = NetworkRecv_uint32(MY_CLIENT, p);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   566
#ifdef ENABLE_NETWORK_SYNC_EVERY_FRAME
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   567
	// Test if the server supports this option
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   568
	//  and if we are at the frame the server is
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   569
	if (p->pos < p->size) {
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   570
		_sync_frame = _frame_counter_server;
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   571
		_sync_seed_1 = NetworkRecv_uint32(MY_CLIENT, p);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   572
#ifdef NETWORK_SEND_DOUBLE_SEED
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   573
		_sync_seed_2 = NetworkRecv_uint32(MY_CLIENT, p);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   574
#endif
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   575
	}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   576
#endif
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   577
	DEBUG(net, 7)("[NET] Received FRAME %d",_frame_counter_server);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   578
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   579
	// Let the server know that we received this frame correctly
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   580
	//  We do this only once per day, to save some bandwidth ;)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   581
	if (!_network_first_time && last_ack_frame < _frame_counter) {
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   582
		last_ack_frame = _frame_counter + DAY_TICKS;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   583
		DEBUG(net,6)("[NET] Sent ACK at %d", _frame_counter);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   584
		SEND_COMMAND(PACKET_CLIENT_ACK)();
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   585
	}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   586
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   587
	return NETWORK_RECV_STATUS_OKAY;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   588
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   589
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   590
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_SYNC)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   591
{
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   592
	_sync_frame = NetworkRecv_uint32(MY_CLIENT, p);
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   593
	_sync_seed_1 = NetworkRecv_uint32(MY_CLIENT, p);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   594
#ifdef NETWORK_SEND_DOUBLE_SEED
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   595
	_sync_seed_2 = NetworkRecv_uint32(MY_CLIENT, p);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   596
#endif
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   597
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   598
	return NETWORK_RECV_STATUS_OKAY;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   599
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   600
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   601
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_COMMAND)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   602
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   603
	CommandPacket *cp = malloc(sizeof(CommandPacket));
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   604
	cp->player = NetworkRecv_uint8(MY_CLIENT, p);
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   605
	cp->cmd = NetworkRecv_uint32(MY_CLIENT, p);
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   606
	cp->p1 = NetworkRecv_uint32(MY_CLIENT, p);
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   607
	cp->p2 = NetworkRecv_uint32(MY_CLIENT, p);
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   608
	cp->tile = NetworkRecv_uint32(MY_CLIENT, p);
1820
d03c56850dc2 (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: 1797
diff changeset
   609
	NetworkRecv_string(MY_CLIENT, p, cp->text, sizeof(cp->text));
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   610
	cp->callback = NetworkRecv_uint8(MY_CLIENT, p);
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   611
	cp->frame = NetworkRecv_uint32(MY_CLIENT, p);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   612
	cp->next = NULL;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   613
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   614
	// The server did send us this command..
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   615
	//  queue it in our own queue, so we can handle it in the upcoming frame!
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   616
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   617
	if (_local_command_queue == NULL) {
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   618
		_local_command_queue = cp;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   619
	} else {
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   620
		// Find last packet
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   621
		CommandPacket *c = _local_command_queue;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   622
		while (c->next != NULL) c = c->next;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   623
		c->next = cp;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   624
	}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   625
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   626
	return NETWORK_RECV_STATUS_OKAY;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   627
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   628
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   629
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_CHAT)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   630
{
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   631
	NetworkAction action = NetworkRecv_uint8(MY_CLIENT, p);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   632
	char msg[MAX_TEXT_MSG_LEN];
774
bb9ec520a1b1 (svn r1240) -Fix: OpenTTD once again compiles if ENABLE_NETWORK is disabled.
darkvater
parents: 748
diff changeset
   633
	NetworkClientInfo *ci = NULL, *ci_to;
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   634
	uint16 index;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   635
	char name[NETWORK_NAME_LENGTH];
722
f420fa9bd521 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   636
	bool self_send;
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   637
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   638
	index = NetworkRecv_uint16(MY_CLIENT, p);
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   639
	self_send = NetworkRecv_uint8(MY_CLIENT, p);
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   640
	NetworkRecv_string(MY_CLIENT, p, msg, MAX_TEXT_MSG_LEN);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   641
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   642
	ci_to = NetworkFindClientInfoFromIndex(index);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   643
	if (ci_to == NULL) return NETWORK_RECV_STATUS_OKAY;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   644
722
f420fa9bd521 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   645
	/* Do we display the action locally? */
f420fa9bd521 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   646
	if (self_send) {
f420fa9bd521 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   647
		switch (action) {
f420fa9bd521 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   648
			case NETWORK_ACTION_CHAT_CLIENT:
f420fa9bd521 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   649
				/* For speak to client we need the client-name */
f420fa9bd521 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   650
				snprintf(name, sizeof(name), "%s", ci_to->client_name);
f420fa9bd521 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   651
				ci = NetworkFindClientInfoFromIndex(_network_own_client_index);
f420fa9bd521 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   652
				break;
f420fa9bd521 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   653
			case NETWORK_ACTION_CHAT_PLAYER:
f420fa9bd521 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   654
			case NETWORK_ACTION_GIVE_MONEY:
f420fa9bd521 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   655
				/* For speak to player or give money, we need the player-name */
779
9f1c1091b9c8 (svn r1246) -Fix: [ 1090099 ] Company-messages did crash the game, because
truelight
parents: 774
diff changeset
   656
				if (ci_to->client_playas > MAX_PLAYERS)
9f1c1091b9c8 (svn r1246) -Fix: [ 1090099 ] Company-messages did crash the game, because
truelight
parents: 774
diff changeset
   657
					return NETWORK_RECV_STATUS_OKAY; // This should never happen
1962
8254df1b359b (svn r2468) -Codechange: Got rid of DEREF_PLAYER and replaced it by GetPlayer
celestar
parents: 1820
diff changeset
   658
				GetString(name, GetPlayer(ci_to->client_playas-1)->name_1);
722
f420fa9bd521 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   659
				ci = NetworkFindClientInfoFromIndex(_network_own_client_index);
f420fa9bd521 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   660
				break;
f420fa9bd521 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   661
			default:
f420fa9bd521 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   662
				/* This should never happen */
f420fa9bd521 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   663
				NOT_REACHED();
f420fa9bd521 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   664
				break;
f420fa9bd521 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   665
		}
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   666
	} else {
722
f420fa9bd521 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   667
		/* Display message from somebody else */
602
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents: 571
diff changeset
   668
		snprintf(name, sizeof(name), "%s", ci_to->client_name);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   669
		ci = ci_to;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   670
	}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   671
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   672
	if (ci != NULL)
722
f420fa9bd521 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   673
		NetworkTextMessage(action, GetDrawStringPlayerColor(ci->client_playas-1), self_send, name, "%s", msg);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   674
	return NETWORK_RECV_STATUS_OKAY;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   675
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   676
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   677
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_ERROR_QUIT)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   678
{
722
f420fa9bd521 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   679
	char str[100];
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   680
	uint16 index;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   681
	NetworkClientInfo *ci;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   682
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   683
	index = NetworkRecv_uint16(MY_CLIENT, p);
3437
044111ac24cf (svn r4267) - Fix (r4241): also validate the error number that a client receives from a server, and encapsulate this functionality into GetNetworkErrorMsg().
Darkvater
parents: 3121
diff changeset
   684
	GetNetworkErrorMsg(str, NetworkRecv_uint8(MY_CLIENT, p));
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   685
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   686
	ci = NetworkFindClientInfoFromIndex(index);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   687
	if (ci != NULL) {
2373
e073ec69bf56 (svn r2899) -Fix: Several format string vulnerabilities and buffer overflows in the network code
tron
parents: 2293
diff changeset
   688
		NetworkTextMessage(NETWORK_ACTION_LEAVE, 1, false, ci->client_name, "%s", str);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   689
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   690
		// The client is gone, give the NetworkClientInfo free
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   691
		ci->client_index = NETWORK_EMPTY_INDEX;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   692
	}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   693
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   694
	InvalidateWindow(WC_CLIENT_LIST, 0);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   695
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   696
	return NETWORK_RECV_STATUS_OKAY;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   697
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   698
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   699
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_QUIT)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   700
{
722
f420fa9bd521 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   701
	char str[100];
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   702
	uint16 index;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   703
	NetworkClientInfo *ci;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   704
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   705
	index = NetworkRecv_uint16(MY_CLIENT, p);
2373
e073ec69bf56 (svn r2899) -Fix: Several format string vulnerabilities and buffer overflows in the network code
tron
parents: 2293
diff changeset
   706
	NetworkRecv_string(MY_CLIENT, p, str, lengthof(str));
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   707
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   708
	ci = NetworkFindClientInfoFromIndex(index);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   709
	if (ci != NULL) {
2373
e073ec69bf56 (svn r2899) -Fix: Several format string vulnerabilities and buffer overflows in the network code
tron
parents: 2293
diff changeset
   710
		NetworkTextMessage(NETWORK_ACTION_LEAVE, 1, false, ci->client_name, "%s", str);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   711
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   712
		// The client is gone, give the NetworkClientInfo free
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   713
		ci->client_index = NETWORK_EMPTY_INDEX;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   714
	} else {
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   715
		DEBUG(net, 0)("[NET] Error - unknown client (%d) is leaving the game", index);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   716
	}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   717
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   718
	InvalidateWindow(WC_CLIENT_LIST, 0);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   719
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   720
	// If we come here it means we could not locate the client.. strange :s
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   721
	return NETWORK_RECV_STATUS_OKAY;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   722
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   723
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   724
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_JOIN)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   725
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   726
	uint16 index;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   727
	NetworkClientInfo *ci;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   728
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   729
	index = NetworkRecv_uint16(MY_CLIENT, p);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   730
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   731
	ci = NetworkFindClientInfoFromIndex(index);
722
f420fa9bd521 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   732
	if (ci != NULL)
f420fa9bd521 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   733
		NetworkTextMessage(NETWORK_ACTION_JOIN, 1, false, ci->client_name, "");
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   734
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   735
	InvalidateWindow(WC_CLIENT_LIST, 0);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   736
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   737
	return NETWORK_RECV_STATUS_OKAY;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   738
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   739
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   740
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_SHUTDOWN)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   741
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   742
	_switch_mode_errorstr = STR_NETWORK_SERVER_SHUTDOWN;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   743
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   744
	return NETWORK_RECV_STATUS_SERVER_ERROR;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   745
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   746
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   747
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_NEWGAME)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   748
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   749
	// To trottle the reconnects a bit, every clients waits
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   750
	//  his _local_player value before reconnecting
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   751
	// OWNER_SPECTATOR is currently 255, so to avoid long wait periods
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   752
	//  set the max to 10.
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   753
	_network_reconnect = min(_local_player + 1, 10);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   754
	_switch_mode_errorstr = STR_NETWORK_SERVER_REBOOT;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   755
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   756
	return NETWORK_RECV_STATUS_SERVER_ERROR;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   757
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   758
1026
02cc18821508 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   759
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_RCON)
02cc18821508 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   760
{
02cc18821508 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   761
	char rcon_out[NETWORK_RCONCOMMAND_LENGTH];
02cc18821508 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   762
	uint16 color_code;
02cc18821508 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   763
02cc18821508 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   764
	color_code = NetworkRecv_uint16(MY_CLIENT, p);
02cc18821508 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   765
	NetworkRecv_string(MY_CLIENT, p, rcon_out, sizeof(rcon_out));
02cc18821508 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   766
02cc18821508 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   767
	IConsolePrint(color_code, rcon_out);
02cc18821508 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   768
02cc18821508 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   769
	return NETWORK_RECV_STATUS_OKAY;
02cc18821508 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   770
}
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   771
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   772
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   773
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   774
// The layout for the receive-functions by the client
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   775
typedef NetworkRecvStatus NetworkClientPacket(Packet *p);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   776
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   777
// This array matches PacketType. At an incoming
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   778
//  packet it is matches against this array
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   779
//  and that way the right function to handle that
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   780
//  packet is found.
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   781
static NetworkClientPacket* const _network_client_packet[] = {
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   782
	RECEIVE_COMMAND(PACKET_SERVER_FULL),
841
4874b9ce2765 (svn r1322) -Add: banning system (mostly tnx to guru3)
truelight
parents: 779
diff changeset
   783
	RECEIVE_COMMAND(PACKET_SERVER_BANNED),
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   784
	NULL, /*PACKET_CLIENT_JOIN,*/
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   785
	RECEIVE_COMMAND(PACKET_SERVER_ERROR),
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   786
	NULL, /*PACKET_CLIENT_COMPANY_INFO,*/
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   787
	RECEIVE_COMMAND(PACKET_SERVER_COMPANY_INFO),
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   788
	RECEIVE_COMMAND(PACKET_SERVER_CLIENT_INFO),
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   789
	RECEIVE_COMMAND(PACKET_SERVER_NEED_PASSWORD),
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   790
	NULL, /*PACKET_CLIENT_PASSWORD,*/
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   791
	RECEIVE_COMMAND(PACKET_SERVER_WELCOME),
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   792
	NULL, /*PACKET_CLIENT_GETMAP,*/
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   793
	RECEIVE_COMMAND(PACKET_SERVER_WAIT),
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   794
	RECEIVE_COMMAND(PACKET_SERVER_MAP),
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   795
	NULL, /*PACKET_CLIENT_MAP_OK,*/
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   796
	RECEIVE_COMMAND(PACKET_SERVER_JOIN),
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   797
	RECEIVE_COMMAND(PACKET_SERVER_FRAME),
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   798
	RECEIVE_COMMAND(PACKET_SERVER_SYNC),
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   799
	NULL, /*PACKET_CLIENT_ACK,*/
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   800
	NULL, /*PACKET_CLIENT_COMMAND,*/
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   801
	RECEIVE_COMMAND(PACKET_SERVER_COMMAND),
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   802
	NULL, /*PACKET_CLIENT_CHAT,*/
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   803
	RECEIVE_COMMAND(PACKET_SERVER_CHAT),
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   804
	NULL, /*PACKET_CLIENT_SET_PASSWORD,*/
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   805
	NULL, /*PACKET_CLIENT_SET_NAME,*/
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   806
	NULL, /*PACKET_CLIENT_QUIT,*/
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   807
	NULL, /*PACKET_CLIENT_ERROR,*/
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   808
	RECEIVE_COMMAND(PACKET_SERVER_QUIT),
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   809
	RECEIVE_COMMAND(PACKET_SERVER_ERROR_QUIT),
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   810
	RECEIVE_COMMAND(PACKET_SERVER_SHUTDOWN),
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   811
	RECEIVE_COMMAND(PACKET_SERVER_NEWGAME),
1026
02cc18821508 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   812
	RECEIVE_COMMAND(PACKET_SERVER_RCON),
02cc18821508 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   813
	NULL, /*PACKET_CLIENT_RCON,*/
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   814
};
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   815
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   816
// If this fails, check the array above with network_data.h
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   817
assert_compile(lengthof(_network_client_packet) == PACKET_END);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   818
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   819
// Is called after a client is connected to the server
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   820
void NetworkClient_Connected(void)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   821
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   822
	// Set the frame-counter to 0 so nothing happens till we are ready
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   823
	_frame_counter = 0;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   824
	_frame_counter_server = 0;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   825
	last_ack_frame = 0;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   826
	// Request the game-info
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   827
	SEND_COMMAND(PACKET_CLIENT_JOIN)();
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   828
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   829
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   830
// Reads the packets from the socket-stream, if available
716
8af847728d5b (svn r1168) -Cleanup: [Network] Cleaned the network code a bit. Added 'const'
truelight
parents: 684
diff changeset
   831
NetworkRecvStatus NetworkClient_ReadPackets(NetworkClientState *cs)
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   832
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   833
	Packet *p;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   834
	NetworkRecvStatus res = NETWORK_RECV_STATUS_OKAY;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   835
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   836
	while (res == NETWORK_RECV_STATUS_OKAY && (p = NetworkRecv_Packet(cs, &res)) != NULL) {
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   837
		byte type = NetworkRecv_uint8(MY_CLIENT, p);
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   838
		if (type < PACKET_END && _network_client_packet[type] != NULL && !MY_CLIENT->quited) {
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   839
			res = _network_client_packet[type](p);
2026
567e3bc9af72 (svn r2535) Tabs
tron
parents: 1962
diff changeset
   840
		} else {
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   841
			res = NETWORK_RECV_STATUS_MALFORMED_PACKET;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   842
			DEBUG(net, 0)("[NET][client] Received invalid packet type %d", type);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   843
		}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   844
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   845
		free(p);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   846
	}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   847
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   848
	return res;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   849
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   850
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   851
#endif /* ENABLE_NETWORK */