1 /*
2  * This file is part of OpenTTD.
3  * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
4  * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
5  * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
6  */
7 
8 /**
9  * @file config.h Configuration options of the network stuff. It is used even when compiling without network support.
10  */
11 
12 #ifndef NETWORK_CORE_CONFIG_H
13 #define NETWORK_CORE_CONFIG_H
14 
15 const char *NetworkCoordinatorConnectionString();
16 const char *NetworkStunConnectionString();
17 const char *NetworkContentServerConnectionString();
18 const char *NetworkContentMirrorConnectionString();
19 
20 /** URL of the HTTP mirror system */
21 static const char * const NETWORK_CONTENT_MIRROR_URL            = "/bananas";
22 
23 static const uint16 NETWORK_COORDINATOR_SERVER_PORT = 3976;           ///< The default port of the Game Coordinator server (TCP)
24 static const uint16 NETWORK_STUN_SERVER_PORT        = 3975;           ///< The default port of the STUN server (TCP)
25 static const uint16 NETWORK_TURN_SERVER_PORT        = 3974;           ///< The default port of the TURN server (TCP)
26 static const uint16 NETWORK_CONTENT_SERVER_PORT     = 3978;           ///< The default port of the content server (TCP)
27 static const uint16 NETWORK_CONTENT_MIRROR_PORT     =   80;           ///< The default port of the content mirror (TCP)
28 static const uint16 NETWORK_DEFAULT_PORT            = 3979;           ///< The default port of the game server (TCP & UDP)
29 static const uint16 NETWORK_ADMIN_PORT              = 3977;           ///< The default port for admin network
30 static const uint16 NETWORK_DEFAULT_DEBUGLOG_PORT   = 3982;           ///< The default port debug-log is sent to (TCP)
31 
32 static const uint16 UDP_MTU                         = 1460;           ///< Number of bytes we can pack in a single UDP packet
33 /*
34  * Technically a TCP packet could become 64kiB, however the high bit is kept so it becomes possible in the future
35  * to go to (significantly) larger packets if needed. This would entail a strategy such as employed for UTF-8.
36  *
37  * Packets up to 32 KiB have the high bit not set:
38  * 00000000 00000000 0bbbbbbb aaaaaaaa -> aaaaaaaa 0bbbbbbb
39  * Send_uint16(GB(size, 0, 15)
40  *
41  * Packets up to 1 GiB, first uint16 has high bit set so it knows to read a
42  * next uint16 for the remaining bits of the size.
43  * 00dddddd cccccccc bbbbbbbb aaaaaaaa -> cccccccc 10dddddd aaaaaaaa bbbbbbbb
44  * Send_uint16(GB(size, 16, 14) | 0b10 << 14)
45  * Send_uint16(GB(size,  0, 16))
46  */
47 static const uint16 TCP_MTU                         = 32767;          ///< Number of bytes we can pack in a single TCP packet
48 static const uint16 COMPAT_MTU                      = 1460;           ///< Number of bytes we can pack in a single packet for backward compatibility
49 
50 static const byte NETWORK_GAME_ADMIN_VERSION        =    1;           ///< What version of the admin network do we use?
51 static const byte NETWORK_GAME_INFO_VERSION         =    6;           ///< What version of game-info do we use?
52 static const byte NETWORK_COMPANY_INFO_VERSION      =    6;           ///< What version of company info is this?
53 static const byte NETWORK_COORDINATOR_VERSION       =    6;           ///< What version of game-coordinator-protocol do we use?
54 
55 static const uint NETWORK_NAME_LENGTH               =   80;           ///< The maximum length of the server name and map name, in bytes including '\0'
56 static const uint NETWORK_COMPANY_NAME_LENGTH       =  128;           ///< The maximum length of the company name, in bytes including '\0'
57 static const uint NETWORK_HOSTNAME_LENGTH           =   80;           ///< The maximum length of the host name, in bytes including '\0'
58 static const uint NETWORK_HOSTNAME_PORT_LENGTH      =   80 + 6;       ///< The maximum length of the host name + port, in bytes including '\0'. The extra six is ":" + port number (with a max of 65536)
59 static const uint NETWORK_SERVER_ID_LENGTH          =   33;           ///< The maximum length of the network id of the servers, in bytes including '\0'
60 static const uint NETWORK_REVISION_LENGTH           =   33;           ///< The maximum length of the revision, in bytes including '\0'
61 static const uint NETWORK_PASSWORD_LENGTH           =   33;           ///< The maximum length of the password, in bytes including '\0' (must be >= NETWORK_SERVER_ID_LENGTH)
62 static const uint NETWORK_CLIENTS_LENGTH            =  200;           ///< The maximum length for the list of clients that controls a company, in bytes including '\0'
63 static const uint NETWORK_CLIENT_NAME_LENGTH        =   25;           ///< The maximum length of a client's name, in bytes including '\0'
64 static const uint NETWORK_RCONCOMMAND_LENGTH        =  500;           ///< The maximum length of a rconsole command, in bytes including '\0'
65 static const uint NETWORK_GAMESCRIPT_JSON_LENGTH    = COMPAT_MTU - 3; ///< The maximum length of a gamescript json string, in bytes including '\0'. Must not be longer than COMPAT_MTU including header (3 bytes)
66 static const uint NETWORK_CHAT_LENGTH               =  900;           ///< The maximum length of a chat message, in bytes including '\0'
67 static const uint NETWORK_CONTENT_FILENAME_LENGTH   =   48;           ///< The maximum length of a content's filename, in bytes including '\0'.
68 static const uint NETWORK_CONTENT_NAME_LENGTH       =   32;           ///< The maximum length of a content's name, in bytes including '\0'.
69 static const uint NETWORK_CONTENT_VERSION_LENGTH    =   16;           ///< The maximum length of a content's version, in bytes including '\0'.
70 static const uint NETWORK_CONTENT_URL_LENGTH        =   96;           ///< The maximum length of a content's url, in bytes including '\0'.
71 static const uint NETWORK_CONTENT_DESC_LENGTH       =  512;           ///< The maximum length of a content's description, in bytes including '\0'.
72 static const uint NETWORK_CONTENT_TAG_LENGTH        =   32;           ///< The maximum length of a content's tag, in bytes including '\0'.
73 static const uint NETWORK_ERROR_DETAIL_LENGTH       =  100;           ///< The maximum length of the error detail, in bytes including '\0'.
74 static const uint NETWORK_INVITE_CODE_LENGTH        =   64;           ///< The maximum length of the invite code, in bytes including '\0'.
75 static const uint NETWORK_INVITE_CODE_SECRET_LENGTH =   80;           ///< The maximum length of the invite code secret, in bytes including '\0'.
76 static const uint NETWORK_TOKEN_LENGTH              =   64;           ///< The maximum length of a token, in bytes including '\0'.
77 
78 static const uint NETWORK_GRF_NAME_LENGTH           =   80;           ///< Maximum length of the name of a GRF
79 
80 /**
81  * Maximum number of GRFs that can be sent.
82  *
83  * This limit exists to avoid that the SERVER_INFO packet exceeding the
84  * maximum MTU. At the time of writing this limit is 32767 (TCP_MTU).
85  *
86  * In the SERVER_INFO packet is the NetworkGameInfo struct, which is
87  * 142 bytes + 100 per NewGRF (under the assumption strings are used to
88  * their max). This brings us to roughly 326 possible NewGRFs. Round it
89  * down so people don't freak out because they see a weird value, and you
90  * get the limit: 255.
91  *
92  * PS: in case you ever want to raise this number, please be mindful that
93  * "amount of NewGRFs" in NetworkGameInfo is currently an uint8.
94  */
95 static const uint NETWORK_MAX_GRF_COUNT             =   255;
96 
97 #endif /* NETWORK_CORE_CONFIG_H */
98