network_client.c
author rubidium
Fri, 22 Jun 2007 20:01:02 +0000
branch0.5
changeset 5509 0b111f4e6dc9
parent 5494 374bd2a631c7
permissions -rw-r--r--
(svn r10274) [0.5] -Backport from trunk (r9961, r10023, r10028, r10030, r10038, r10147):
- Fix: Some bits were unset when loading old TTD savegames when they shouldn't be unset (r10147)
- Fix: Sprite resulting from '?' substitution was reloaded into the cache entry for SPR_IMG_QUERY instead of the original sprite cache entry. This resulted in unaccounted missing sprite cache memory, and was exacerbated because the original missing sprite was not cached, so it did it again and again and again. Slowdowns and boom (r10038)
- Fix: One could build on (some) slopes when building on slopes was disabled [FS#823] (r10030)
- Fix: When deleting the first engine of a train with multiple engines, only reopen the train window if the player had the original train window open. This fixes 'random' windows opening for multiple players of the same company (r10028)
- Fix: When selling trains, if there were no wagons between multiheaded engines the rear part could be checked despite having already been deleted (10023)
- Fix: Some files were still in iso8859-15 instead of UTF-8 (r9961)
2186
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 2163
diff changeset
     1
/* $Id$ */
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 2163
diff changeset
     2
4826
63b1eb7c966b (svn r6750) -Codechange: Juggle around some header includes as they're only used when
Darkvater
parents: 4512
diff changeset
     3
#ifdef ENABLE_NETWORK
63b1eb7c966b (svn r6750) -Codechange: Juggle around some header includes as they're only used when
Darkvater
parents: 4512
diff changeset
     4
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
     5
#include "stdafx.h"
1299
0a6510cc889b (svn r1803) Move debugging stuff into files of it's own
tron
parents: 1026
diff changeset
     6
#include "debug.h"
1317
f382f1b439c7 (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
     7
#include "string.h"
1309
dab90d4cbf2d (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
     8
#include "strings.h"
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
     9
#include "network_data.h"
4261
2ec8f5a9747b (svn r5887) -Cleanup: move date related functions, defines and variables to date.[ch]
rubidium
parents: 3692
diff changeset
    10
#include "date.h"
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    11
#include "table/strings.h"
2163
637ec3c361f5 (svn r2673) Include functions.h directly, not globally via openttd.h
tron
parents: 2162
diff changeset
    12
#include "functions.h"
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    13
#include "network_client.h"
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    14
#include "network_gamelist.h"
4512
7151d4ee3a0f (svn r6297) -Codechange: Disentangle the query window mess a bit: Move the network game password handling somewhere were it belongs to
tron
parents: 4428
diff changeset
    15
#include "network_gui.h"
2162
c1ded3bd3d0c (svn r2672) Move saving/loading related declarations to saveload.h
tron
parents: 2159
diff changeset
    16
#include "saveload.h"
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    17
#include "command.h"
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    18
#include "window.h"
1026
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
    19
#include "console.h"
2159
3b634157c3b2 (svn r2669) Shuffle some more stuff around to reduce dependencies
tron
parents: 2078
diff changeset
    20
#include "variables.h"
2684
8aba54c245cc (svn r3226) -Fix: GPMI implementation had minor glitches
truelight
parents: 2373
diff changeset
    21
#include "ai/ai.h"
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    22
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    23
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    24
// This file handles all the client-commands
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    25
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    26
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    27
// So we don't make too much typos ;)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    28
#define MY_CLIENT DEREF_CLIENT(0)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    29
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    30
static uint32 last_ack_frame;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    31
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    32
// **********
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    33
// Sending functions
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    34
//   DEF_CLIENT_SEND_COMMAND has no parameters
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    35
// **********
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    36
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    37
DEF_CLIENT_SEND_COMMAND(PACKET_CLIENT_COMPANY_INFO)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    38
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    39
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    40
	// Packet: CLIENT_COMPANY_INFO
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    41
	// Function: Request company-info (in detail)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    42
	// Data:
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    43
	//    <none>
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    44
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    45
	Packet *p;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    46
	_network_join_status = NETWORK_JOIN_STATUS_GETTING_COMPANY_INFO;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    47
	InvalidateWindow(WC_NETWORK_STATUS_WINDOW, 0);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    48
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    49
	p = NetworkSend_Init(PACKET_CLIENT_COMPANY_INFO);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    50
	NetworkSend_Packet(p, MY_CLIENT);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    51
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    52
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    53
DEF_CLIENT_SEND_COMMAND(PACKET_CLIENT_JOIN)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    54
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    55
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    56
	// Packet: CLIENT_JOIN
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    57
	// Function: Try to join the server
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    58
	// Data:
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    59
	//    String: OpenTTD Revision (norev000 if no revision)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    60
	//    String: Player Name (max NETWORK_NAME_LENGTH)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    61
	//    uint8:  Play as Player id (1..MAX_PLAYERS)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    62
	//    uint8:  Language ID
602
9bbe42a9e3ed (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents: 571
diff changeset
    63
	//    String: Unique id to find the player back in server-listing
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    64
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    65
4840
176bc2a66322 (svn r6766) -Codechange: Move _openttd_revision[] into the functions that use it instead of global
Darkvater
parents: 4826
diff changeset
    66
	extern const char _openttd_revision[];
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    67
	Packet *p;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    68
	_network_join_status = NETWORK_JOIN_STATUS_AUTHORIZING;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    69
	InvalidateWindow(WC_NETWORK_STATUS_WINDOW, 0);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    70
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    71
	p = NetworkSend_Init(PACKET_CLIENT_JOIN);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    72
	NetworkSend_string(p, _openttd_revision);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    73
	NetworkSend_string(p, _network_player_name); // Player name
662
029d67bd54e6 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
    74
	NetworkSend_uint8(p, _network_playas); // PlayAs
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    75
	NetworkSend_uint8(p, NETLANG_ANY); // Language
602
9bbe42a9e3ed (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents: 571
diff changeset
    76
	NetworkSend_string(p, _network_unique_id);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    77
	NetworkSend_Packet(p, MY_CLIENT);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    78
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    79
5424
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
    80
DEF_CLIENT_SEND_COMMAND(PACKET_CLIENT_NEWGRFS_CHECKED)
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
    81
{
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
    82
	//
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
    83
	// Packet: CLIENT_NEWGRFS_CHECKED
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
    84
	// Function: Tell the server that we have the required GRFs
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
    85
	// Data:
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
    86
	//
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
    87
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
    88
	Packet *p = NetworkSend_Init(PACKET_CLIENT_NEWGRFS_CHECKED);
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
    89
	NetworkSend_Packet(p, MY_CLIENT);
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
    90
}
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
    91
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    92
DEF_CLIENT_SEND_COMMAND_PARAM(PACKET_CLIENT_PASSWORD)(NetworkPasswordType type, const char *password)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    93
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    94
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    95
	// Packet: CLIENT_PASSWORD
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    96
	// Function: Send a password to the server to authorize
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    97
	// Data:
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    98
	//    uint8:  NetworkPasswordType
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    99
	//    String: Password
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   100
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   101
	Packet *p = NetworkSend_Init(PACKET_CLIENT_PASSWORD);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   102
	NetworkSend_uint8(p, type);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   103
	NetworkSend_string(p, password);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   104
	NetworkSend_Packet(p, MY_CLIENT);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   105
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   106
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   107
DEF_CLIENT_SEND_COMMAND(PACKET_CLIENT_GETMAP)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   108
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   109
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   110
	// Packet: CLIENT_GETMAP
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   111
	// Function: Request the map from the server
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   112
	// Data:
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   113
	//    <none>
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   114
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   115
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   116
	Packet *p = NetworkSend_Init(PACKET_CLIENT_GETMAP);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   117
	NetworkSend_Packet(p, MY_CLIENT);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   118
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   119
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   120
DEF_CLIENT_SEND_COMMAND(PACKET_CLIENT_MAP_OK)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   121
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   122
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   123
	// Packet: CLIENT_MAP_OK
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   124
	// Function: Tell the server that we are done receiving/loading the map
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   125
	// Data:
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   126
	//    <none>
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   127
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   128
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   129
	Packet *p = NetworkSend_Init(PACKET_CLIENT_MAP_OK);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   130
	NetworkSend_Packet(p, MY_CLIENT);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   131
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   132
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   133
DEF_CLIENT_SEND_COMMAND(PACKET_CLIENT_ACK)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   134
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   135
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   136
	// Packet: CLIENT_ACK
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   137
	// Function: Tell the server we are done with this frame
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   138
	// Data:
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   139
	//    uint32: current FrameCounter of the client
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   140
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   141
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   142
	Packet *p = NetworkSend_Init(PACKET_CLIENT_ACK);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   143
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   144
	NetworkSend_uint32(p, _frame_counter);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   145
	NetworkSend_Packet(p, MY_CLIENT);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   146
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   147
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   148
// Send a command packet to the server
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   149
DEF_CLIENT_SEND_COMMAND_PARAM(PACKET_CLIENT_COMMAND)(CommandPacket *cp)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   150
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   151
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   152
	// Packet: CLIENT_COMMAND
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   153
	// Function: Send a DoCommand to the Server
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   154
	// Data:
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   155
	//    uint8:  PlayerID (0..MAX_PLAYERS-1)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   156
	//    uint32: CommandID (see command.h)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   157
	//    uint32: P1 (free variables used in DoCommand)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   158
	//    uint32: P2
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   159
	//    uint32: Tile
1820
9b6458526480 (svn r2324) Introduce _cmd_text for passing strings with a command instead of abusing _decode_parameters as text buffer. This should prevent several possible buffer overruns and is a bit cleaner to use. As bonus it reduces the size of most command packets by 79 bytes.
tron
parents: 1797
diff changeset
   160
	//    string: text
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   161
	//    uint8:  CallBackID (see callback_table.c)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   162
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   163
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   164
	Packet *p = NetworkSend_Init(PACKET_CLIENT_COMMAND);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   165
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   166
	NetworkSend_uint8(p, cp->player);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   167
	NetworkSend_uint32(p, cp->cmd);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   168
	NetworkSend_uint32(p, cp->p1);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   169
	NetworkSend_uint32(p, cp->p2);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   170
	NetworkSend_uint32(p, (uint32)cp->tile);
1820
9b6458526480 (svn r2324) Introduce _cmd_text for passing strings with a command instead of abusing _decode_parameters as text buffer. This should prevent several possible buffer overruns and is a bit cleaner to use. As bonus it reduces the size of most command packets by 79 bytes.
tron
parents: 1797
diff changeset
   171
	NetworkSend_string(p, cp->text);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   172
	NetworkSend_uint8(p, cp->callback);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   173
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   174
	NetworkSend_Packet(p, MY_CLIENT);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   175
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   176
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   177
// Send a chat-packet over the network
4906
8a10678a62a3 (svn r6876) -Codechange: Change the naming of _PLAYER in DESTTYPE_PLAYER/NETWORK_ACTION_CHAT_PLAYER
Darkvater
parents: 4880
diff changeset
   178
DEF_CLIENT_SEND_COMMAND_PARAM(PACKET_CLIENT_CHAT)(NetworkAction action, DestType type, int dest, const char *msg)
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   179
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   180
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   181
	// Packet: CLIENT_CHAT
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   182
	// Function: Send a chat-packet to the serve
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   183
	// Data:
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   184
	//    uint8:  ActionID (see network_data.h, NetworkAction)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   185
	//    uint8:  Destination Type (see network_data.h, DestType);
5494
374bd2a631c7 (svn r9849) [0.5] -Backport from trunk (r9693, r9694, r9697, r9718, r9719, r9725 and 9726):
rubidium
parents: 5424
diff changeset
   186
	//    uint16: Destination Player
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   187
	//    String: Message (max MAX_TEXT_MSG_LEN)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   188
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   189
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   190
	Packet *p = NetworkSend_Init(PACKET_CLIENT_CHAT);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   191
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   192
	NetworkSend_uint8(p, action);
4906
8a10678a62a3 (svn r6876) -Codechange: Change the naming of _PLAYER in DESTTYPE_PLAYER/NETWORK_ACTION_CHAT_PLAYER
Darkvater
parents: 4880
diff changeset
   193
	NetworkSend_uint8(p, type);
5494
374bd2a631c7 (svn r9849) [0.5] -Backport from trunk (r9693, r9694, r9697, r9718, r9719, r9725 and 9726):
rubidium
parents: 5424
diff changeset
   194
	NetworkSend_uint16(p, dest);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   195
	NetworkSend_string(p, msg);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   196
	NetworkSend_Packet(p, MY_CLIENT);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   197
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   198
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   199
// Send an error-packet over the network
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   200
DEF_CLIENT_SEND_COMMAND_PARAM(PACKET_CLIENT_ERROR)(NetworkErrorCode errorno)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   201
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   202
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   203
	// Packet: CLIENT_ERROR
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   204
	// Function: The client made an error and is quiting the game
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   205
	// Data:
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   206
	//    uint8:  ErrorID (see network_data.h, NetworkErrorCode)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   207
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   208
	Packet *p = NetworkSend_Init(PACKET_CLIENT_ERROR);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   209
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   210
	NetworkSend_uint8(p, errorno);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   211
	NetworkSend_Packet(p, MY_CLIENT);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   212
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   213
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   214
DEF_CLIENT_SEND_COMMAND_PARAM(PACKET_CLIENT_SET_PASSWORD)(const char *password)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   215
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   216
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   217
	// Packet: PACKET_CLIENT_SET_PASSWORD
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   218
	// Function: Set the password for the clients current company
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   219
	// Data:
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   220
	//    String: Password
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   221
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   222
	Packet *p = NetworkSend_Init(PACKET_CLIENT_SET_PASSWORD);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   223
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   224
	NetworkSend_string(p, password);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   225
	NetworkSend_Packet(p, MY_CLIENT);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   226
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   227
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   228
DEF_CLIENT_SEND_COMMAND_PARAM(PACKET_CLIENT_SET_NAME)(const char *name)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   229
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   230
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   231
	// Packet: PACKET_CLIENT_SET_NAME
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   232
	// Function: Gives the player a new name
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   233
	// Data:
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   234
	//    String: Name
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   235
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   236
	Packet *p = NetworkSend_Init(PACKET_CLIENT_SET_NAME);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   237
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   238
	NetworkSend_string(p, name);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   239
	NetworkSend_Packet(p, MY_CLIENT);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   240
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   241
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   242
// Send an quit-packet over the network
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   243
DEF_CLIENT_SEND_COMMAND_PARAM(PACKET_CLIENT_QUIT)(const char *leavemsg)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   244
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   245
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   246
	// Packet: CLIENT_QUIT
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   247
	// Function: The client is quiting the game
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   248
	// Data:
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   249
	//    String: leave-message
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   250
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   251
	Packet *p = NetworkSend_Init(PACKET_CLIENT_QUIT);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   252
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   253
	NetworkSend_string(p, leavemsg);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   254
	NetworkSend_Packet(p, MY_CLIENT);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   255
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   256
1026
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   257
DEF_CLIENT_SEND_COMMAND_PARAM(PACKET_CLIENT_RCON)(const char *pass, const char *command)
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   258
{
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   259
	Packet *p = NetworkSend_Init(PACKET_CLIENT_RCON);
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   260
	NetworkSend_string(p, pass);
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   261
	NetworkSend_string(p, command);
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   262
	NetworkSend_Packet(p, MY_CLIENT);
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   263
}
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   264
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   265
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   266
// **********
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   267
// Receiving functions
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   268
//   DEF_CLIENT_RECEIVE_COMMAND has parameter: Packet *p
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   269
// **********
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   270
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   271
extern bool SafeSaveOrLoad(const char *filename, int mode, int newgm);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   272
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   273
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_FULL)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   274
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   275
	// We try to join a server which is full
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   276
	_switch_mode_errorstr = STR_NETWORK_ERR_SERVER_FULL;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   277
	DeleteWindowById(WC_NETWORK_STATUS_WINDOW, 0);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   278
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   279
	return NETWORK_RECV_STATUS_SERVER_FULL;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   280
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   281
841
8f0a68c6f43b (svn r1322) -Add: banning system (mostly tnx to guru3)
truelight
parents: 779
diff changeset
   282
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_BANNED)
8f0a68c6f43b (svn r1322) -Add: banning system (mostly tnx to guru3)
truelight
parents: 779
diff changeset
   283
{
8f0a68c6f43b (svn r1322) -Add: banning system (mostly tnx to guru3)
truelight
parents: 779
diff changeset
   284
	// We try to join a server where we are banned
8f0a68c6f43b (svn r1322) -Add: banning system (mostly tnx to guru3)
truelight
parents: 779
diff changeset
   285
	_switch_mode_errorstr = STR_NETWORK_ERR_SERVER_BANNED;
8f0a68c6f43b (svn r1322) -Add: banning system (mostly tnx to guru3)
truelight
parents: 779
diff changeset
   286
	DeleteWindowById(WC_NETWORK_STATUS_WINDOW, 0);
8f0a68c6f43b (svn r1322) -Add: banning system (mostly tnx to guru3)
truelight
parents: 779
diff changeset
   287
8f0a68c6f43b (svn r1322) -Add: banning system (mostly tnx to guru3)
truelight
parents: 779
diff changeset
   288
	return NETWORK_RECV_STATUS_SERVER_BANNED;
8f0a68c6f43b (svn r1322) -Add: banning system (mostly tnx to guru3)
truelight
parents: 779
diff changeset
   289
}
8f0a68c6f43b (svn r1322) -Add: banning system (mostly tnx to guru3)
truelight
parents: 779
diff changeset
   290
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   291
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_COMPANY_INFO)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   292
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   293
	byte company_info_version;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   294
	int i;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   295
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   296
	company_info_version = NetworkRecv_uint8(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   297
4880
0708f34e3586 (svn r6816) -Codechange: Some coding style, variable localization, const correctness.
Darkvater
parents: 4878
diff changeset
   298
	if (!MY_CLIENT->has_quit && company_info_version == NETWORK_COMPANY_INFO_VERSION) {
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   299
		byte total;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   300
		byte current;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   301
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   302
		total = NetworkRecv_uint8(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   303
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   304
		// There is no data at all..
4880
0708f34e3586 (svn r6816) -Codechange: Some coding style, variable localization, const correctness.
Darkvater
parents: 4878
diff changeset
   305
		if (total == 0) return NETWORK_RECV_STATUS_CLOSE_QUERY;
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   306
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   307
		current = NetworkRecv_uint8(MY_CLIENT, p);
4880
0708f34e3586 (svn r6816) -Codechange: Some coding style, variable localization, const correctness.
Darkvater
parents: 4878
diff changeset
   308
		if (!IsValidPlayer(current)) return NETWORK_RECV_STATUS_CLOSE_QUERY;
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   309
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   310
		NetworkRecv_string(MY_CLIENT, p, _network_player_info[current].company_name, sizeof(_network_player_info[current].company_name));
4326
c2ae4dbc1074 (svn r5999) -Feature: change the original date format to a 32 bits format based at the year 0.
rubidium
parents: 4261
diff changeset
   311
		_network_player_info[current].inaugurated_year = NetworkRecv_uint32(MY_CLIENT, p);
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   312
		_network_player_info[current].company_value = NetworkRecv_uint64(MY_CLIENT, p);
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   313
		_network_player_info[current].money = NetworkRecv_uint64(MY_CLIENT, p);
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   314
		_network_player_info[current].income = NetworkRecv_uint64(MY_CLIENT, p);
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   315
		_network_player_info[current].performance = NetworkRecv_uint16(MY_CLIENT, p);
1011
2587838541bf (svn r1510) -Add: Improved Network Lobby GUI: (bociusz)
truelight
parents: 959
diff changeset
   316
		_network_player_info[current].use_password = NetworkRecv_uint8(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   317
		for (i = 0; i < NETWORK_VEHICLE_TYPES; i++)
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   318
			_network_player_info[current].num_vehicle[i] = NetworkRecv_uint16(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   319
		for (i = 0; i < NETWORK_STATION_TYPES; i++)
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   320
			_network_player_info[current].num_station[i] = NetworkRecv_uint16(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   321
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   322
		NetworkRecv_string(MY_CLIENT, p, _network_player_info[current].players, sizeof(_network_player_info[current].players));
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   323
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   324
		InvalidateWindow(WC_NETWORK_WINDOW, 0);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   325
734
018e549265ed (svn r1186) -Fix: [Network] You can now join a company on a server where a company
truelight
parents: 722
diff changeset
   326
		return NETWORK_RECV_STATUS_OKAY;
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   327
	}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   328
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   329
	return NETWORK_RECV_STATUS_CLOSE_QUERY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   330
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   331
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   332
// This packet contains info about the client (playas and name)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   333
//  as client we save this in NetworkClientInfo, linked via 'index'
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   334
//  which is always an unique number on a server.
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   335
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_CLIENT_INFO)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   336
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   337
	NetworkClientInfo *ci;
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   338
	uint16 index = NetworkRecv_uint16(MY_CLIENT, p);
3692
01468bf49e8b (svn r4623) - Codechange: s/byte/PlayerID/
Darkvater
parents: 3437
diff changeset
   339
	PlayerID playas = NetworkRecv_uint8(MY_CLIENT, p);
662
029d67bd54e6 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   340
	char name[NETWORK_NAME_LENGTH];
029d67bd54e6 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   341
	char unique_id[NETWORK_NAME_LENGTH];
029d67bd54e6 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   342
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   343
	NetworkRecv_string(MY_CLIENT, p, name, sizeof(name));
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   344
	NetworkRecv_string(MY_CLIENT, p, unique_id, sizeof(unique_id));
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   345
4880
0708f34e3586 (svn r6816) -Codechange: Some coding style, variable localization, const correctness.
Darkvater
parents: 4878
diff changeset
   346
	if (MY_CLIENT->has_quit) return NETWORK_RECV_STATUS_CONN_LOST;
662
029d67bd54e6 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   347
029d67bd54e6 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   348
	/* Do we receive a change of data? Most likely we changed playas */
4880
0708f34e3586 (svn r6816) -Codechange: Some coding style, variable localization, const correctness.
Darkvater
parents: 4878
diff changeset
   349
	if (index == _network_own_client_index) _network_playas = playas;
2684
8aba54c245cc (svn r3226) -Fix: GPMI implementation had minor glitches
truelight
parents: 2373
diff changeset
   350
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   351
	ci = NetworkFindClientInfoFromIndex(index);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   352
	if (ci != NULL) {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   353
		if (playas == ci->client_playas && strcmp(name, ci->client_name) != 0) {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   354
			// Client name changed, display the change
2373
f06403621870 (svn r2899) -Fix: Several format string vulnerabilities and buffer overflows in the network code
tron
parents: 2293
diff changeset
   355
			NetworkTextMessage(NETWORK_ACTION_NAME_CHANGE, 1, false, ci->client_name, "%s", name);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   356
		} else if (playas != ci->client_playas) {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   357
			// The player changed from client-player..
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   358
			// Do not display that for now
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   359
		}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   360
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   361
		ci->client_playas = playas;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   362
		ttd_strlcpy(ci->client_name, name, sizeof(ci->client_name));
662
029d67bd54e6 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   363
722
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   364
		InvalidateWindow(WC_CLIENT_LIST, 0);
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   365
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   366
		return NETWORK_RECV_STATUS_OKAY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   367
	}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   368
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   369
	// We don't have this index yet, find an empty index, and put the data there
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   370
	ci = NetworkFindClientInfoFromIndex(NETWORK_EMPTY_INDEX);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   371
	if (ci != NULL) {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   372
		ci->client_index = index;
662
029d67bd54e6 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   373
		ci->client_playas = playas;
029d67bd54e6 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   374
029d67bd54e6 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   375
		ttd_strlcpy(ci->client_name, name, sizeof(ci->client_name));
029d67bd54e6 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   376
		ttd_strlcpy(ci->unique_id, unique_id, sizeof(ci->unique_id));
029d67bd54e6 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   377
722
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   378
		InvalidateWindow(WC_CLIENT_LIST, 0);
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   379
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   380
		return NETWORK_RECV_STATUS_OKAY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   381
	}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   382
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   383
	// Here the program should never ever come.....
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   384
	return NETWORK_RECV_STATUS_MALFORMED_PACKET;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   385
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   386
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   387
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_ERROR)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   388
{
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   389
	NetworkErrorCode error = NetworkRecv_uint8(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   390
2879
d270cb37c0ec (svn r3427) - Feature: Allow seeing and setting the maximum amount of companies and spectators for a server. This can be changed/viewed during runtime as well in the console.
Darkvater
parents: 2817
diff changeset
   391
	switch (error) {
d270cb37c0ec (svn r3427) - Feature: Allow seeing and setting the maximum amount of companies and spectators for a server. This can be changed/viewed during runtime as well in the console.
Darkvater
parents: 2817
diff changeset
   392
		/* We made an error in the protocol, and our connection is closed.... */
d270cb37c0ec (svn r3427) - Feature: Allow seeing and setting the maximum amount of companies and spectators for a server. This can be changed/viewed during runtime as well in the console.
Darkvater
parents: 2817
diff changeset
   393
		case NETWORK_ERROR_NOT_AUTHORIZED:
d270cb37c0ec (svn r3427) - Feature: Allow seeing and setting the maximum amount of companies and spectators for a server. This can be changed/viewed during runtime as well in the console.
Darkvater
parents: 2817
diff changeset
   394
		case NETWORK_ERROR_NOT_EXPECTED:
d270cb37c0ec (svn r3427) - Feature: Allow seeing and setting the maximum amount of companies and spectators for a server. This can be changed/viewed during runtime as well in the console.
Darkvater
parents: 2817
diff changeset
   395
		case NETWORK_ERROR_PLAYER_MISMATCH:
d270cb37c0ec (svn r3427) - Feature: Allow seeing and setting the maximum amount of companies and spectators for a server. This can be changed/viewed during runtime as well in the console.
Darkvater
parents: 2817
diff changeset
   396
			_switch_mode_errorstr = STR_NETWORK_ERR_SERVER_ERROR;
d270cb37c0ec (svn r3427) - Feature: Allow seeing and setting the maximum amount of companies and spectators for a server. This can be changed/viewed during runtime as well in the console.
Darkvater
parents: 2817
diff changeset
   397
			break;
d270cb37c0ec (svn r3427) - Feature: Allow seeing and setting the maximum amount of companies and spectators for a server. This can be changed/viewed during runtime as well in the console.
Darkvater
parents: 2817
diff changeset
   398
		case NETWORK_ERROR_FULL:
d270cb37c0ec (svn r3427) - Feature: Allow seeing and setting the maximum amount of companies and spectators for a server. This can be changed/viewed during runtime as well in the console.
Darkvater
parents: 2817
diff changeset
   399
			_switch_mode_errorstr = STR_NETWORK_ERR_SERVER_FULL;
d270cb37c0ec (svn r3427) - Feature: Allow seeing and setting the maximum amount of companies and spectators for a server. This can be changed/viewed during runtime as well in the console.
Darkvater
parents: 2817
diff changeset
   400
			break;
d270cb37c0ec (svn r3427) - Feature: Allow seeing and setting the maximum amount of companies and spectators for a server. This can be changed/viewed during runtime as well in the console.
Darkvater
parents: 2817
diff changeset
   401
		case NETWORK_ERROR_WRONG_REVISION:
d270cb37c0ec (svn r3427) - Feature: Allow seeing and setting the maximum amount of companies and spectators for a server. This can be changed/viewed during runtime as well in the console.
Darkvater
parents: 2817
diff changeset
   402
			_switch_mode_errorstr = STR_NETWORK_ERR_WRONG_REVISION;
d270cb37c0ec (svn r3427) - Feature: Allow seeing and setting the maximum amount of companies and spectators for a server. This can be changed/viewed during runtime as well in the console.
Darkvater
parents: 2817
diff changeset
   403
			break;
d270cb37c0ec (svn r3427) - Feature: Allow seeing and setting the maximum amount of companies and spectators for a server. This can be changed/viewed during runtime as well in the console.
Darkvater
parents: 2817
diff changeset
   404
		case NETWORK_ERROR_WRONG_PASSWORD:
d270cb37c0ec (svn r3427) - Feature: Allow seeing and setting the maximum amount of companies and spectators for a server. This can be changed/viewed during runtime as well in the console.
Darkvater
parents: 2817
diff changeset
   405
			_switch_mode_errorstr = STR_NETWORK_ERR_WRONG_PASSWORD;
d270cb37c0ec (svn r3427) - Feature: Allow seeing and setting the maximum amount of companies and spectators for a server. This can be changed/viewed during runtime as well in the console.
Darkvater
parents: 2817
diff changeset
   406
			break;
d270cb37c0ec (svn r3427) - Feature: Allow seeing and setting the maximum amount of companies and spectators for a server. This can be changed/viewed during runtime as well in the console.
Darkvater
parents: 2817
diff changeset
   407
		case NETWORK_ERROR_KICKED:
d270cb37c0ec (svn r3427) - Feature: Allow seeing and setting the maximum amount of companies and spectators for a server. This can be changed/viewed during runtime as well in the console.
Darkvater
parents: 2817
diff changeset
   408
			_switch_mode_errorstr = STR_NETWORK_ERR_KICKED;
d270cb37c0ec (svn r3427) - Feature: Allow seeing and setting the maximum amount of companies and spectators for a server. This can be changed/viewed during runtime as well in the console.
Darkvater
parents: 2817
diff changeset
   409
			break;
d270cb37c0ec (svn r3427) - Feature: Allow seeing and setting the maximum amount of companies and spectators for a server. This can be changed/viewed during runtime as well in the console.
Darkvater
parents: 2817
diff changeset
   410
		case NETWORK_ERROR_CHEATER:
d270cb37c0ec (svn r3427) - Feature: Allow seeing and setting the maximum amount of companies and spectators for a server. This can be changed/viewed during runtime as well in the console.
Darkvater
parents: 2817
diff changeset
   411
			_switch_mode_errorstr = STR_NETWORK_ERR_CHEATER;
d270cb37c0ec (svn r3427) - Feature: Allow seeing and setting the maximum amount of companies and spectators for a server. This can be changed/viewed during runtime as well in the console.
Darkvater
parents: 2817
diff changeset
   412
			break;
d270cb37c0ec (svn r3427) - Feature: Allow seeing and setting the maximum amount of companies and spectators for a server. This can be changed/viewed during runtime as well in the console.
Darkvater
parents: 2817
diff changeset
   413
		default:
d270cb37c0ec (svn r3427) - Feature: Allow seeing and setting the maximum amount of companies and spectators for a server. This can be changed/viewed during runtime as well in the console.
Darkvater
parents: 2817
diff changeset
   414
			_switch_mode_errorstr = STR_NETWORK_ERR_LOSTCONNECTION;
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   415
	}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   416
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   417
	DeleteWindowById(WC_NETWORK_STATUS_WINDOW, 0);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   418
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   419
	return NETWORK_RECV_STATUS_SERVER_ERROR;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   420
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   421
5424
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
   422
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_CHECK_NEWGRFS)
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
   423
{
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
   424
	uint grf_count = NetworkRecv_uint8(MY_CLIENT, p);
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
   425
	NetworkRecvStatus ret = NETWORK_RECV_STATUS_OKAY;
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
   426
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
   427
	/* Check all GRFs */
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
   428
	for (; grf_count > 0; grf_count--) {
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
   429
		GRFConfig c;
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
   430
		const GRFConfig *f;
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
   431
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
   432
		NetworkRecv_GRFIdentifier(MY_CLIENT, p, &c);
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
   433
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
   434
		/* Check whether we know this GRF */
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
   435
		f = FindGRFConfig(c.grfid, c.md5sum);
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
   436
		if (f == NULL) {
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
   437
			/* We do not know this GRF, bail out of initialization */
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
   438
			char buf[sizeof(c.md5sum) * 2 + 1];
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
   439
			md5sumToString(buf, lastof(buf), c.md5sum);
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
   440
			DEBUG(grf, 0)("NewGRF %08X not found; checksum %s", BSWAP32(c.grfid), buf);
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
   441
			ret = NETWORK_RECV_STATUS_NEWGRF_MISMATCH;
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
   442
		}
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
   443
	}
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
   444
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
   445
	if (ret == NETWORK_RECV_STATUS_OKAY) {
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
   446
		/* Start receiving the map */
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
   447
		SEND_COMMAND(PACKET_CLIENT_NEWGRFS_CHECKED)();
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
   448
	} else {
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
   449
		/* NewGRF mismatch, bail out */
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
   450
		_switch_mode_errorstr = STR_NETWORK_ERR_NEWGRF_MISMATCH;
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
   451
	}
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
   452
	return ret;
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
   453
}
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
   454
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   455
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_NEED_PASSWORD)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   456
{
4512
7151d4ee3a0f (svn r6297) -Codechange: Disentangle the query window mess a bit: Move the network game password handling somewhere were it belongs to
tron
parents: 4428
diff changeset
   457
	NetworkPasswordType type = NetworkRecv_uint8(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   458
4512
7151d4ee3a0f (svn r6297) -Codechange: Disentangle the query window mess a bit: Move the network game password handling somewhere were it belongs to
tron
parents: 4428
diff changeset
   459
	switch (type) {
7151d4ee3a0f (svn r6297) -Codechange: Disentangle the query window mess a bit: Move the network game password handling somewhere were it belongs to
tron
parents: 4428
diff changeset
   460
		case NETWORK_GAME_PASSWORD:
7151d4ee3a0f (svn r6297) -Codechange: Disentangle the query window mess a bit: Move the network game password handling somewhere were it belongs to
tron
parents: 4428
diff changeset
   461
		case NETWORK_COMPANY_PASSWORD:
7151d4ee3a0f (svn r6297) -Codechange: Disentangle the query window mess a bit: Move the network game password handling somewhere were it belongs to
tron
parents: 4428
diff changeset
   462
			ShowNetworkNeedPassword(type);
7151d4ee3a0f (svn r6297) -Codechange: Disentangle the query window mess a bit: Move the network game password handling somewhere were it belongs to
tron
parents: 4428
diff changeset
   463
			return NETWORK_RECV_STATUS_OKAY;
7151d4ee3a0f (svn r6297) -Codechange: Disentangle the query window mess a bit: Move the network game password handling somewhere were it belongs to
tron
parents: 4428
diff changeset
   464
7151d4ee3a0f (svn r6297) -Codechange: Disentangle the query window mess a bit: Move the network game password handling somewhere were it belongs to
tron
parents: 4428
diff changeset
   465
		default: return NETWORK_RECV_STATUS_MALFORMED_PACKET;
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   466
	}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   467
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   468
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   469
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_WELCOME)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   470
{
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   471
	_network_own_client_index = NetworkRecv_uint16(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   472
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   473
	// Start receiving the map
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   474
	SEND_COMMAND(PACKET_CLIENT_GETMAP)();
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   475
	return NETWORK_RECV_STATUS_OKAY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   476
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   477
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   478
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_WAIT)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   479
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   480
	_network_join_status = NETWORK_JOIN_STATUS_WAITING;
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   481
	_network_join_waiting = NetworkRecv_uint8(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   482
	InvalidateWindow(WC_NETWORK_STATUS_WINDOW, 0);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   483
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   484
	// We are put on hold for receiving the map.. we need GUI for this ;)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   485
	DEBUG(net, 1)("[NET] The server is currently busy sending the map to someone else.. please hold..." );
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   486
	DEBUG(net, 1)("[NET]  There are %d clients in front of you", _network_join_waiting);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   487
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   488
	return NETWORK_RECV_STATUS_OKAY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   489
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   490
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   491
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_MAP)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   492
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   493
	static char filename[256];
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   494
	static FILE *file_pointer;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   495
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   496
	byte maptype;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   497
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   498
	maptype = NetworkRecv_uint8(MY_CLIENT, p);
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   499
4880
0708f34e3586 (svn r6816) -Codechange: Some coding style, variable localization, const correctness.
Darkvater
parents: 4878
diff changeset
   500
	if (MY_CLIENT->has_quit) return NETWORK_RECV_STATUS_CONN_LOST;
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   501
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   502
	// First packet, init some stuff
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   503
	if (maptype == MAP_PACKET_START) {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   504
		// The name for the temp-map
5296
6a4aaa66eed3 (svn r7449) -Codechange: Rename _path to _paths as it is technically more correct, but mainly because
Darkvater
parents: 5170
diff changeset
   505
		snprintf(filename, lengthof(filename), "%s%snetwork_client.tmp",  _paths.autosave_dir, PATHSEP);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   506
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   507
		file_pointer = fopen(filename, "wb");
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   508
		if (file_pointer == NULL) {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   509
			_switch_mode_errorstr = STR_NETWORK_ERR_SAVEGAMEERROR;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   510
			return NETWORK_RECV_STATUS_SAVEGAME;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   511
		}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   512
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   513
		_frame_counter = _frame_counter_server = _frame_counter_max = NetworkRecv_uint32(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   514
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   515
		_network_join_kbytes = 0;
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   516
		_network_join_kbytes_total = NetworkRecv_uint32(MY_CLIENT, p) / 1024;
5407
e354823cde11 (svn r8170) -Backport from trunk (r7984, r8118, r8167, r8168):
Darkvater
parents: 5370
diff changeset
   517
e354823cde11 (svn r8170) -Backport from trunk (r7984, r8118, r8167, r8168):
Darkvater
parents: 5370
diff changeset
   518
		/* If the network connection has been closed due to loss of connection
e354823cde11 (svn r8170) -Backport from trunk (r7984, r8118, r8167, r8168):
Darkvater
parents: 5370
diff changeset
   519
		 * or when _network_join_kbytes_total is 0, the join status window will
e354823cde11 (svn r8170) -Backport from trunk (r7984, r8118, r8167, r8168):
Darkvater
parents: 5370
diff changeset
   520
		 * do a division by zero. When the connection is lost, we just return
e354823cde11 (svn r8170) -Backport from trunk (r7984, r8118, r8167, r8168):
Darkvater
parents: 5370
diff changeset
   521
		 * that. If kbytes_total is 0, the packet must be malformed as a
e354823cde11 (svn r8170) -Backport from trunk (r7984, r8118, r8167, r8168):
Darkvater
parents: 5370
diff changeset
   522
		 * savegame less than 1 kilobyte is practically impossible. */
e354823cde11 (svn r8170) -Backport from trunk (r7984, r8118, r8167, r8168):
Darkvater
parents: 5370
diff changeset
   523
		if (MY_CLIENT->has_quit) return NETWORK_RECV_STATUS_CONN_LOST;
e354823cde11 (svn r8170) -Backport from trunk (r7984, r8118, r8167, r8168):
Darkvater
parents: 5370
diff changeset
   524
		if (_network_join_kbytes_total == 0) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
e354823cde11 (svn r8170) -Backport from trunk (r7984, r8118, r8167, r8168):
Darkvater
parents: 5370
diff changeset
   525
e354823cde11 (svn r8170) -Backport from trunk (r7984, r8118, r8167, r8168):
Darkvater
parents: 5370
diff changeset
   526
		_network_join_status = NETWORK_JOIN_STATUS_DOWNLOADING;
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   527
		InvalidateWindow(WC_NETWORK_STATUS_WINDOW, 0);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   528
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   529
		// The first packet does not contain any more data
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   530
		return NETWORK_RECV_STATUS_OKAY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   531
	}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   532
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   533
	if (maptype == MAP_PACKET_NORMAL) {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   534
		// We are still receiving data, put it to the file
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   535
		fwrite(p->buffer + p->pos, 1, p->size - p->pos, file_pointer);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   536
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   537
		_network_join_kbytes = ftell(file_pointer) / 1024;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   538
		InvalidateWindow(WC_NETWORK_STATUS_WINDOW, 0);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   539
	}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   540
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   541
	// Check if this was the last packet
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   542
	if (maptype == MAP_PACKET_END) {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   543
		fclose(file_pointer);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   544
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   545
		_network_join_status = NETWORK_JOIN_STATUS_PROCESSING;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   546
		InvalidateWindow(WC_NETWORK_STATUS_WINDOW, 0);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   547
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   548
		// The map is done downloading, load it
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   549
		// Load the map
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   550
		if (!SafeSaveOrLoad(filename, SL_LOAD, GM_NORMAL)) {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   551
			DeleteWindowById(WC_NETWORK_STATUS_WINDOW, 0);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   552
			_switch_mode_errorstr = STR_NETWORK_ERR_SAVEGAMEERROR;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   553
			return NETWORK_RECV_STATUS_SAVEGAME;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   554
		}
1500
228f77e88adf (svn r2004) - Fix: [ 1149487 ] Autosave ignoring settings
Darkvater
parents: 1317
diff changeset
   555
228f77e88adf (svn r2004) - Fix: [ 1149487 ] Autosave ignoring settings
Darkvater
parents: 1317
diff changeset
   556
		_opt_ptr = &_opt; // during a network game you are always in-game
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   557
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   558
		// Say we received the map and loaded it correctly!
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   559
		SEND_COMMAND(PACKET_CLIENT_MAP_OK)();
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   560
4880
0708f34e3586 (svn r6816) -Codechange: Some coding style, variable localization, const correctness.
Darkvater
parents: 4878
diff changeset
   561
		/* New company/spectator (invalid player) or company we want to join is not active
0708f34e3586 (svn r6816) -Codechange: Some coding style, variable localization, const correctness.
Darkvater
parents: 4878
diff changeset
   562
		 * Switch local player to spectator and await the server's judgement */
4878
744717de172e (svn r6814) -Codechange: For network games ci->client_playas was always p->index + 1. To
Darkvater
parents: 4861
diff changeset
   563
		if (_network_playas == PLAYER_NEW_COMPANY || !IsValidPlayer(_network_playas) ||
744717de172e (svn r6814) -Codechange: For network games ci->client_playas was always p->index + 1. To
Darkvater
parents: 4861
diff changeset
   564
				!GetPlayer(_network_playas)->is_active) {
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   565
5370
fb39e4250252 (svn r7671) -Backport from trunk (r7560, r7561, r7566):
Darkvater
parents: 5296
diff changeset
   566
			SetLocalPlayer(PLAYER_SPECTATOR);
4880
0708f34e3586 (svn r6816) -Codechange: Some coding style, variable localization, const correctness.
Darkvater
parents: 4878
diff changeset
   567
4848
56549aa3e234 (svn r6774) -Codechange: Rename the badly named OWNER_SPECTATOR to PLAYER_SPECTATOR and
Darkvater
parents: 4840
diff changeset
   568
			if (_network_playas == PLAYER_SPECTATOR) {
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   569
				// The client wants to be a spectator..
670
7c58dc46609c (svn r1108) -Fix: [Network] Fixed problem around slow clients:
truelight
parents: 662
diff changeset
   570
				DeleteWindowById(WC_NETWORK_STATUS_WINDOW, 0);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   571
			} else {
1797
a19c4181f1b7 (svn r2301) - CodeChange: prettyify ChangeOwnerShipOfPlayerItems() a bit
Darkvater
parents: 1500
diff changeset
   572
				/* We have arrived and ready to start playing; send a command to make a new player;
a19c4181f1b7 (svn r2301) - CodeChange: prettyify ChangeOwnerShipOfPlayerItems() a bit
Darkvater
parents: 1500
diff changeset
   573
				 * the server will give us a client-id and let us in */
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   574
				NetworkSend_Command(0, 0, 0, CMD_PLAYER_CTRL, NULL);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   575
			}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   576
		} else {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   577
			// take control over an existing company
5370
fb39e4250252 (svn r7671) -Backport from trunk (r7560, r7561, r7566):
Darkvater
parents: 5296
diff changeset
   578
			SetLocalPlayer(_network_playas);
684
425b1741fd45 (svn r1125) -Fix: [Network] You can now safely join a company again
truelight
parents: 670
diff changeset
   579
			DeleteWindowById(WC_NETWORK_STATUS_WINDOW, 0);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   580
		}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   581
	}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   582
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   583
	return NETWORK_RECV_STATUS_OKAY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   584
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   585
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   586
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_FRAME)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   587
{
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   588
	_frame_counter_server = NetworkRecv_uint32(MY_CLIENT, p);
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   589
	_frame_counter_max = NetworkRecv_uint32(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   590
#ifdef ENABLE_NETWORK_SYNC_EVERY_FRAME
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   591
	// Test if the server supports this option
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   592
	//  and if we are at the frame the server is
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   593
	if (p->pos < p->size) {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   594
		_sync_frame = _frame_counter_server;
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   595
		_sync_seed_1 = NetworkRecv_uint32(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   596
#ifdef NETWORK_SEND_DOUBLE_SEED
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   597
		_sync_seed_2 = NetworkRecv_uint32(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   598
#endif
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   599
	}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   600
#endif
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   601
	DEBUG(net, 7)("[NET] Received FRAME %d",_frame_counter_server);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   602
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   603
	// Let the server know that we received this frame correctly
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   604
	//  We do this only once per day, to save some bandwidth ;)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   605
	if (!_network_first_time && last_ack_frame < _frame_counter) {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   606
		last_ack_frame = _frame_counter + DAY_TICKS;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   607
		DEBUG(net,6)("[NET] Sent ACK at %d", _frame_counter);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   608
		SEND_COMMAND(PACKET_CLIENT_ACK)();
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   609
	}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   610
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   611
	return NETWORK_RECV_STATUS_OKAY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   612
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   613
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   614
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_SYNC)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   615
{
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   616
	_sync_frame = NetworkRecv_uint32(MY_CLIENT, p);
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   617
	_sync_seed_1 = NetworkRecv_uint32(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   618
#ifdef NETWORK_SEND_DOUBLE_SEED
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   619
	_sync_seed_2 = NetworkRecv_uint32(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   620
#endif
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   621
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   622
	return NETWORK_RECV_STATUS_OKAY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   623
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   624
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   625
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_COMMAND)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   626
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   627
	CommandPacket *cp = malloc(sizeof(CommandPacket));
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   628
	cp->player = NetworkRecv_uint8(MY_CLIENT, p);
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   629
	cp->cmd = NetworkRecv_uint32(MY_CLIENT, p);
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   630
	cp->p1 = NetworkRecv_uint32(MY_CLIENT, p);
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   631
	cp->p2 = NetworkRecv_uint32(MY_CLIENT, p);
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   632
	cp->tile = NetworkRecv_uint32(MY_CLIENT, p);
1820
9b6458526480 (svn r2324) Introduce _cmd_text for passing strings with a command instead of abusing _decode_parameters as text buffer. This should prevent several possible buffer overruns and is a bit cleaner to use. As bonus it reduces the size of most command packets by 79 bytes.
tron
parents: 1797
diff changeset
   633
	NetworkRecv_string(MY_CLIENT, p, cp->text, sizeof(cp->text));
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   634
	cp->callback = NetworkRecv_uint8(MY_CLIENT, p);
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   635
	cp->frame = NetworkRecv_uint32(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   636
	cp->next = NULL;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   637
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   638
	// The server did send us this command..
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   639
	//  queue it in our own queue, so we can handle it in the upcoming frame!
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   640
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   641
	if (_local_command_queue == NULL) {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   642
		_local_command_queue = cp;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   643
	} else {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   644
		// Find last packet
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   645
		CommandPacket *c = _local_command_queue;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   646
		while (c->next != NULL) c = c->next;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   647
		c->next = cp;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   648
	}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   649
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   650
	return NETWORK_RECV_STATUS_OKAY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   651
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   652
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   653
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_CHAT)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   654
{
4946
42acc5fef0af (svn r6934) -Cleanup: Some minor cleanup for network_client and removing 'stupid' comment
Darkvater
parents: 4945
diff changeset
   655
	char name[NETWORK_NAME_LENGTH], msg[MAX_TEXT_MSG_LEN];
4880
0708f34e3586 (svn r6816) -Codechange: Some coding style, variable localization, const correctness.
Darkvater
parents: 4878
diff changeset
   656
	const NetworkClientInfo *ci = NULL, *ci_to;
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   657
4946
42acc5fef0af (svn r6934) -Cleanup: Some minor cleanup for network_client and removing 'stupid' comment
Darkvater
parents: 4945
diff changeset
   658
	NetworkAction action = NetworkRecv_uint8(MY_CLIENT, p);
42acc5fef0af (svn r6934) -Cleanup: Some minor cleanup for network_client and removing 'stupid' comment
Darkvater
parents: 4945
diff changeset
   659
	uint16 index = NetworkRecv_uint16(MY_CLIENT, p);
42acc5fef0af (svn r6934) -Cleanup: Some minor cleanup for network_client and removing 'stupid' comment
Darkvater
parents: 4945
diff changeset
   660
	bool self_send = NetworkRecv_uint8(MY_CLIENT, p);
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   661
	NetworkRecv_string(MY_CLIENT, p, msg, MAX_TEXT_MSG_LEN);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   662
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   663
	ci_to = NetworkFindClientInfoFromIndex(index);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   664
	if (ci_to == NULL) return NETWORK_RECV_STATUS_OKAY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   665
4946
42acc5fef0af (svn r6934) -Cleanup: Some minor cleanup for network_client and removing 'stupid' comment
Darkvater
parents: 4945
diff changeset
   666
	/* Did we initiate the action locally? */
722
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   667
	if (self_send) {
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   668
		switch (action) {
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   669
			case NETWORK_ACTION_CHAT_CLIENT:
4946
42acc5fef0af (svn r6934) -Cleanup: Some minor cleanup for network_client and removing 'stupid' comment
Darkvater
parents: 4945
diff changeset
   670
				/* For speaking to client we need the client-name */
722
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   671
				snprintf(name, sizeof(name), "%s", ci_to->client_name);
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   672
				ci = NetworkFindClientInfoFromIndex(_network_own_client_index);
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   673
				break;
4945
c5c9bfb156fb (svn r6933) -Feature: Allow spectators to speak to eachother (team)
Darkvater
parents: 4912
diff changeset
   674
c5c9bfb156fb (svn r6933) -Feature: Allow spectators to speak to eachother (team)
Darkvater
parents: 4912
diff changeset
   675
			/* For speaking to company or giving money, we need the player-name */
722
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   676
			case NETWORK_ACTION_GIVE_MONEY:
4945
c5c9bfb156fb (svn r6933) -Feature: Allow spectators to speak to eachother (team)
Darkvater
parents: 4912
diff changeset
   677
				if (!IsValidPlayer(ci_to->client_playas)) return NETWORK_RECV_STATUS_OKAY;
c5c9bfb156fb (svn r6933) -Feature: Allow spectators to speak to eachother (team)
Darkvater
parents: 4912
diff changeset
   678
				/* fallthrough */
c5c9bfb156fb (svn r6933) -Feature: Allow spectators to speak to eachother (team)
Darkvater
parents: 4912
diff changeset
   679
			case NETWORK_ACTION_CHAT_COMPANY: {
c5c9bfb156fb (svn r6933) -Feature: Allow spectators to speak to eachother (team)
Darkvater
parents: 4912
diff changeset
   680
				StringID str = IsValidPlayer(ci_to->client_playas) ? GetPlayer(ci_to->client_playas)->name_1 : STR_NETWORK_SPECTATORS;
4878
744717de172e (svn r6814) -Codechange: For network games ci->client_playas was always p->index + 1. To
Darkvater
parents: 4861
diff changeset
   681
4945
c5c9bfb156fb (svn r6933) -Feature: Allow spectators to speak to eachother (team)
Darkvater
parents: 4912
diff changeset
   682
				GetString(name, str, lastof(name));
722
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   683
				ci = NetworkFindClientInfoFromIndex(_network_own_client_index);
4945
c5c9bfb156fb (svn r6933) -Feature: Allow spectators to speak to eachother (team)
Darkvater
parents: 4912
diff changeset
   684
			} break;
4946
42acc5fef0af (svn r6934) -Cleanup: Some minor cleanup for network_client and removing 'stupid' comment
Darkvater
parents: 4945
diff changeset
   685
42acc5fef0af (svn r6934) -Cleanup: Some minor cleanup for network_client and removing 'stupid' comment
Darkvater
parents: 4945
diff changeset
   686
			default: NOT_REACHED(); break;
722
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   687
		}
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   688
	} else {
722
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   689
		/* Display message from somebody else */
602
9bbe42a9e3ed (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents: 571
diff changeset
   690
		snprintf(name, sizeof(name), "%s", ci_to->client_name);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   691
		ci = ci_to;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   692
	}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   693
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   694
	if (ci != NULL)
4878
744717de172e (svn r6814) -Codechange: For network games ci->client_playas was always p->index + 1. To
Darkvater
parents: 4861
diff changeset
   695
		NetworkTextMessage(action, GetDrawStringPlayerColor(ci->client_playas), self_send, name, "%s", msg);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   696
	return NETWORK_RECV_STATUS_OKAY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   697
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   698
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   699
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_ERROR_QUIT)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   700
{
722
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   701
	char str[100];
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   702
	uint16 index;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   703
	NetworkClientInfo *ci;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   704
903
f860c7234167 (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);
4912
d04b3f2bca70 (svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents: 4908
diff changeset
   706
	GetNetworkErrorMsg(str, NetworkRecv_uint8(MY_CLIENT, p), lastof(str));
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   707
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   708
	ci = NetworkFindClientInfoFromIndex(index);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   709
	if (ci != NULL) {
2373
f06403621870 (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
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   711
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   712
		// The client is gone, give the NetworkClientInfo free
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   713
		ci->client_index = NETWORK_EMPTY_INDEX;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   714
	}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   715
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   716
	InvalidateWindow(WC_CLIENT_LIST, 0);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   717
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   718
	return NETWORK_RECV_STATUS_OKAY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   719
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   720
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   721
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_QUIT)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   722
{
722
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   723
	char str[100];
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   724
	uint16 index;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   725
	NetworkClientInfo *ci;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   726
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   727
	index = NetworkRecv_uint16(MY_CLIENT, p);
2373
f06403621870 (svn r2899) -Fix: Several format string vulnerabilities and buffer overflows in the network code
tron
parents: 2293
diff changeset
   728
	NetworkRecv_string(MY_CLIENT, p, str, lengthof(str));
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   729
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   730
	ci = NetworkFindClientInfoFromIndex(index);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   731
	if (ci != NULL) {
2373
f06403621870 (svn r2899) -Fix: Several format string vulnerabilities and buffer overflows in the network code
tron
parents: 2293
diff changeset
   732
		NetworkTextMessage(NETWORK_ACTION_LEAVE, 1, false, ci->client_name, "%s", str);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   733
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   734
		// The client is gone, give the NetworkClientInfo free
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   735
		ci->client_index = NETWORK_EMPTY_INDEX;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   736
	} else {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   737
		DEBUG(net, 0)("[NET] Error - unknown client (%d) is leaving the game", index);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   738
	}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   739
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   740
	InvalidateWindow(WC_CLIENT_LIST, 0);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   741
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   742
	// If we come here it means we could not locate the client.. strange :s
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   743
	return NETWORK_RECV_STATUS_OKAY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   744
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   745
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   746
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_JOIN)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   747
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   748
	uint16 index;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   749
	NetworkClientInfo *ci;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   750
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   751
	index = NetworkRecv_uint16(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   752
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   753
	ci = NetworkFindClientInfoFromIndex(index);
722
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   754
	if (ci != NULL)
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   755
		NetworkTextMessage(NETWORK_ACTION_JOIN, 1, false, ci->client_name, "");
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   756
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   757
	InvalidateWindow(WC_CLIENT_LIST, 0);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   758
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   759
	return NETWORK_RECV_STATUS_OKAY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   760
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   761
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   762
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_SHUTDOWN)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   763
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   764
	_switch_mode_errorstr = STR_NETWORK_SERVER_SHUTDOWN;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   765
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   766
	return NETWORK_RECV_STATUS_SERVER_ERROR;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   767
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   768
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   769
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_NEWGAME)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   770
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   771
	// To trottle the reconnects a bit, every clients waits
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   772
	//  his _local_player value before reconnecting
4848
56549aa3e234 (svn r6774) -Codechange: Rename the badly named OWNER_SPECTATOR to PLAYER_SPECTATOR and
Darkvater
parents: 4840
diff changeset
   773
	// PLAYER_SPECTATOR is currently 255, so to avoid long wait periods
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   774
	//  set the max to 10.
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   775
	_network_reconnect = min(_local_player + 1, 10);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   776
	_switch_mode_errorstr = STR_NETWORK_SERVER_REBOOT;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   777
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   778
	return NETWORK_RECV_STATUS_SERVER_ERROR;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   779
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   780
1026
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   781
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_RCON)
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   782
{
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   783
	char rcon_out[NETWORK_RCONCOMMAND_LENGTH];
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   784
	uint16 color_code;
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   785
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   786
	color_code = NetworkRecv_uint16(MY_CLIENT, p);
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   787
	NetworkRecv_string(MY_CLIENT, p, rcon_out, sizeof(rcon_out));
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   788
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   789
	IConsolePrint(color_code, rcon_out);
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   790
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   791
	return NETWORK_RECV_STATUS_OKAY;
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   792
}
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   793
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   794
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   795
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   796
// The layout for the receive-functions by the client
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   797
typedef NetworkRecvStatus NetworkClientPacket(Packet *p);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   798
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   799
// This array matches PacketType. At an incoming
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   800
//  packet it is matches against this array
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   801
//  and that way the right function to handle that
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   802
//  packet is found.
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   803
static NetworkClientPacket* const _network_client_packet[] = {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   804
	RECEIVE_COMMAND(PACKET_SERVER_FULL),
841
8f0a68c6f43b (svn r1322) -Add: banning system (mostly tnx to guru3)
truelight
parents: 779
diff changeset
   805
	RECEIVE_COMMAND(PACKET_SERVER_BANNED),
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   806
	NULL, /*PACKET_CLIENT_JOIN,*/
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   807
	RECEIVE_COMMAND(PACKET_SERVER_ERROR),
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   808
	NULL, /*PACKET_CLIENT_COMPANY_INFO,*/
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   809
	RECEIVE_COMMAND(PACKET_SERVER_COMPANY_INFO),
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   810
	RECEIVE_COMMAND(PACKET_SERVER_CLIENT_INFO),
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   811
	RECEIVE_COMMAND(PACKET_SERVER_NEED_PASSWORD),
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   812
	NULL, /*PACKET_CLIENT_PASSWORD,*/
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   813
	RECEIVE_COMMAND(PACKET_SERVER_WELCOME),
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   814
	NULL, /*PACKET_CLIENT_GETMAP,*/
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   815
	RECEIVE_COMMAND(PACKET_SERVER_WAIT),
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   816
	RECEIVE_COMMAND(PACKET_SERVER_MAP),
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   817
	NULL, /*PACKET_CLIENT_MAP_OK,*/
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   818
	RECEIVE_COMMAND(PACKET_SERVER_JOIN),
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   819
	RECEIVE_COMMAND(PACKET_SERVER_FRAME),
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   820
	RECEIVE_COMMAND(PACKET_SERVER_SYNC),
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   821
	NULL, /*PACKET_CLIENT_ACK,*/
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   822
	NULL, /*PACKET_CLIENT_COMMAND,*/
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   823
	RECEIVE_COMMAND(PACKET_SERVER_COMMAND),
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   824
	NULL, /*PACKET_CLIENT_CHAT,*/
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   825
	RECEIVE_COMMAND(PACKET_SERVER_CHAT),
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   826
	NULL, /*PACKET_CLIENT_SET_PASSWORD,*/
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   827
	NULL, /*PACKET_CLIENT_SET_NAME,*/
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   828
	NULL, /*PACKET_CLIENT_QUIT,*/
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   829
	NULL, /*PACKET_CLIENT_ERROR,*/
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   830
	RECEIVE_COMMAND(PACKET_SERVER_QUIT),
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   831
	RECEIVE_COMMAND(PACKET_SERVER_ERROR_QUIT),
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   832
	RECEIVE_COMMAND(PACKET_SERVER_SHUTDOWN),
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   833
	RECEIVE_COMMAND(PACKET_SERVER_NEWGAME),
1026
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   834
	RECEIVE_COMMAND(PACKET_SERVER_RCON),
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   835
	NULL, /*PACKET_CLIENT_RCON,*/
5424
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
   836
	RECEIVE_COMMAND(PACKET_SERVER_CHECK_NEWGRFS),
f09762e44457 (svn r8489) [0.5] -Backport from trunk (8459, 8461): check for NewGRF compatability before actually downloading the map from a game server when connecting from the command prompt and internal console.
rubidium
parents: 5407
diff changeset
   837
	NULL, /*PACKET_CLIENT_NEWGRFS_CHECKED,*/
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   838
};
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   839
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   840
// If this fails, check the array above with network_data.h
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   841
assert_compile(lengthof(_network_client_packet) == PACKET_END);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   842
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   843
// Is called after a client is connected to the server
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   844
void NetworkClient_Connected(void)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   845
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   846
	// Set the frame-counter to 0 so nothing happens till we are ready
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   847
	_frame_counter = 0;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   848
	_frame_counter_server = 0;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   849
	last_ack_frame = 0;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   850
	// Request the game-info
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   851
	SEND_COMMAND(PACKET_CLIENT_JOIN)();
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   852
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   853
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   854
// Reads the packets from the socket-stream, if available
716
40a349345f82 (svn r1168) -Cleanup: [Network] Cleaned the network code a bit. Added 'const'
truelight
parents: 684
diff changeset
   855
NetworkRecvStatus NetworkClient_ReadPackets(NetworkClientState *cs)
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   856
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   857
	Packet *p;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   858
	NetworkRecvStatus res = NETWORK_RECV_STATUS_OKAY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   859
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   860
	while (res == NETWORK_RECV_STATUS_OKAY && (p = NetworkRecv_Packet(cs, &res)) != NULL) {
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   861
		byte type = NetworkRecv_uint8(MY_CLIENT, p);
4880
0708f34e3586 (svn r6816) -Codechange: Some coding style, variable localization, const correctness.
Darkvater
parents: 4878
diff changeset
   862
		if (type < PACKET_END && _network_client_packet[type] != NULL && !MY_CLIENT->has_quit) {
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   863
			res = _network_client_packet[type](p);
2026
02dfa0aa2c2f (svn r2535) Tabs
tron
parents: 1962
diff changeset
   864
		} else {
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   865
			res = NETWORK_RECV_STATUS_MALFORMED_PACKET;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   866
			DEBUG(net, 0)("[NET][client] Received invalid packet type %d", type);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   867
		}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   868
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   869
		free(p);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   870
	}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   871
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   872
	return res;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   873
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   874
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   875
#endif /* ENABLE_NETWORK */