X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fnetwork%2Fnetworkprotocol.h;h=703e9605670eac02089b5a9814567daedb08946e;hb=c1d7dbfc38e8f48b42d957afad2696a8e56b740b;hp=c9919e1c4828c7841216a23787b640cb84be0adf;hpb=5dc61988788e44bc87e8c57c0beded97d4efdf05;p=oweals%2Fminetest.git diff --git a/src/network/networkprotocol.h b/src/network/networkprotocol.h index c9919e1c4..703e96056 100644 --- a/src/network/networkprotocol.h +++ b/src/network/networkprotocol.h @@ -17,8 +17,8 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef NETWORKPROTOCOL_HEADER -#define NETWORKPROTOCOL_HEADER +#pragma once + #include "util/string.h" /* @@ -50,6 +50,7 @@ with this program; if not, write to the Free Software Foundation, Inc., ContentFeatures and NodeDefManager use a different serialization format; better for future version cross-compatibility Many things + Obsolete TOCLIENT_PLAYERITEM PROTOCOL_VERSION 10: TOCLIENT_PRIVILEGES Version raised to force 'fly' and 'fast' privileges into effect. @@ -104,7 +105,8 @@ with this program; if not, write to the Free Software Foundation, Inc., PROTOCOL_VERSION 22: add swap_node PROTOCOL_VERSION 23: - TOSERVER_CLIENT_READY + Obsolete TOSERVER_RECEIVED_MEDIA + Server: Stop using TOSERVER_CLIENT_READY PROTOCOL_VERSION 24: ContentFeatures version 7 ContentFeatures: change number of special tiles to 6 (CF_SPECIAL_COUNT) @@ -138,19 +140,72 @@ with this program; if not, write to the Free Software Foundation, Inc., Add nodedef v3 - connected nodeboxes PROTOCOL_VERSION 28: CPT2_MESHOPTIONS + PROTOCOL_VERSION 29: + Server doesn't accept TOSERVER_BREATH anymore + serialization of TileAnimation params changed + TAT_SHEET_2D + Removed client-sided chat perdiction + PROTOCOL VERSION 30: + New ContentFeatures serialization version + Add node and tile color and palette + Fix plantlike visual_scale being applied squared and add compatibility + with pre-30 clients by sending sqrt(visual_scale) + PROTOCOL VERSION 31: + Add tile overlay + Stop sending TOSERVER_CLIENT_READY + PROTOCOL VERSION 32: + Add fading sounds + PROTOCOL VERSION 33: + Add TOCLIENT_UPDATE_PLAYER_LIST and send the player list to the client, + instead of guessing based on the active object list. + PROTOCOL VERSION 34: + Add sound pitch + PROTOCOL VERSION 35: + Rename TOCLIENT_CHAT_MESSAGE to TOCLIENT_CHAT_MESSAGE_OLD (0x30) + Add TOCLIENT_CHAT_MESSAGE (0x2F) + This chat message is a signalisation message containing various + informations: + * timestamp + * sender + * type (RAW, NORMAL, ANNOUNCE, SYSTEM) + * content + Add TOCLIENT_CSM_RESTRICTION_FLAGS to define which CSM features should be + limited + Add settable player collisionbox. Breaks compatibility with older + clients as a 1-node vertical offset has been removed from player's + position + Add settable player stepheight using existing object property. + Breaks compatibility with older clients. + PROTOCOL VERSION 36: + Backwards compatibility drop + Add 'can_zoom' to player object properties + Add glow to object properties + Change TileDef serialization format. + Add world-aligned tiles. + Mod channels + Raise ObjectProperties version to 3 for removing 'can_zoom' and adding + 'zoom_fov'. + Nodebox version 5 + Add disconnected nodeboxes + Add TOCLIENT_FORMSPEC_PREPEND + PROTOCOL VERSION 37: + Redo detached inventory sending + Add TOCLIENT_NODEMETA_CHANGED + New network float format + ContentFeatures version 13 */ -#define LATEST_PROTOCOL_VERSION 28 +#define LATEST_PROTOCOL_VERSION 37 +#define LATEST_PROTOCOL_VERSION_STRING TOSTRING(LATEST_PROTOCOL_VERSION) // Server's supported network protocol range -#define SERVER_PROTOCOL_VERSION_MIN 13 +#define SERVER_PROTOCOL_VERSION_MIN 37 #define SERVER_PROTOCOL_VERSION_MAX LATEST_PROTOCOL_VERSION // Client's supported network protocol range // The minimal version depends on whether // send_pre_v25_init is enabled or not -#define CLIENT_PROTOCOL_VERSION_MIN 25 -#define CLIENT_PROTOCOL_VERSION_MIN_LEGACY 13 +#define CLIENT_PROTOCOL_VERSION_MIN 37 #define CLIENT_PROTOCOL_VERSION_MAX LATEST_PROTOCOL_VERSION // Constant that differentiates the protocol from random data and other protocols @@ -164,6 +219,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #define TEXTURENAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.-" +typedef u16 session_t; + enum ToClientCommand { TOCLIENT_HELLO = 0x02, @@ -194,26 +251,15 @@ enum ToClientCommand /* Signals client that sudo mode auth failed. */ - TOCLIENT_INIT_LEGACY = 0x10, - /* - Server's reply to TOSERVER_INIT. - Sent second after connected. - - [0] u16 TOSERVER_INIT - [2] u8 deployed version - [3] v3s16 player's position + v3f(0,BS/2,0) floatToInt'd - [12] u64 map seed (new as of 2011-02-27) - [20] f1000 recommended send interval (in seconds) (new as of 14) - - NOTE: The position in here is deprecated; position is - explicitly sent afterwards - */ TOCLIENT_ACCESS_DENIED = 0x0A, /* u8 reason std::string custom reason (if needed, otherwise "") u8 (bool) reconnect */ + + TOCLIENT_INIT_LEGACY = 0x10, // Obsolete + TOCLIENT_BLOCKDATA = 0x20, //TODO: Multiple blocks TOCLIENT_ADDNODE = 0x21, /* @@ -224,34 +270,9 @@ enum ToClientCommand TOCLIENT_REMOVENODE = 0x22, TOCLIENT_PLAYERPOS = 0x23, // Obsolete - /* - [0] u16 command - // Followed by an arbitary number of these: - // Number is determined from packet length. - [N] u16 peer_id - [N+2] v3s32 position*100 - [N+2+12] v3s32 speed*100 - [N+2+12+12] s32 pitch*100 - [N+2+12+12+4] s32 yaw*100 - */ - TOCLIENT_PLAYERINFO = 0x24, // Obsolete - /* - [0] u16 command - // Followed by an arbitary number of these: - // Number is determined from packet length. - [N] u16 peer_id - [N] char[20] name - */ - TOCLIENT_OPT_BLOCK_NOT_FOUND = 0x25, // Obsolete - TOCLIENT_SECTORMETA = 0x26, // Obsolete - /* - [0] u16 command - [2] u8 sector count - [3...] v2s16 pos + sector metadata - */ TOCLIENT_INVENTORY = 0x27, /* @@ -260,21 +281,6 @@ enum ToClientCommand */ TOCLIENT_OBJECTDATA = 0x28, // Obsolete - /* - Sent as unreliable. - - u16 number of player positions - for each player: - u16 peer_id - v3s32 position*100 - v3s32 speed*100 - s32 pitch*100 - s32 yaw*100 - u16 count of blocks - for each block: - v3s16 blockpos - block objects - */ TOCLIENT_TIME_OF_DAY = 0x29, /* @@ -283,14 +289,25 @@ enum ToClientCommand f1000 time_speed */ + TOCLIENT_CSM_RESTRICTION_FLAGS = 0x2A, + /* + u32 CSMRestrictionFlags byteflag + */ + // (oops, there is some gap here) - TOCLIENT_CHAT_MESSAGE = 0x30, + TOCLIENT_CHAT_MESSAGE = 0x2F, /* + u8 version + u8 message_type + u16 sendername length + wstring sendername u16 length wstring message */ + TOCLIENT_CHAT_MESSAGE_OLD = 0x30, // Obsolete + TOCLIENT_ACTIVE_OBJECT_REMOVE_ADD = 0x31, /* u16 count of removed objects @@ -335,14 +352,6 @@ enum ToClientCommand */ TOCLIENT_PLAYERITEM = 0x36, // Obsolete - /* - u16 count of player items - for all player items { - u16 peer id - u16 length of serialized item - string serialized item - } - */ TOCLIENT_DEATHSCREEN = 0x37, /* @@ -473,10 +482,13 @@ enum ToClientCommand f1000 expirationtime f1000 size u8 bool collisiondetection - u8 bool vertical u32 len u8[len] texture + u8 bool vertical u8 collision_removal + TileAnimation animation + u8 glow + u8 object_collision */ TOCLIENT_ADD_PARTICLESPAWNER = 0x47, @@ -494,17 +506,17 @@ enum ToClientCommand f1000 minsize f1000 maxsize u8 bool collisiondetection - u8 bool vertical u32 len u8[len] texture - u32 id + u8 bool vertical u8 collision_removal + u32 id + TileAnimation animation + u8 glow + u8 object_collision */ - TOCLIENT_DELETE_PARTICLESPAWNER_LEGACY = 0x48, - /* - u16 id - */ + TOCLIENT_DELETE_PARTICLESPAWNER_LEGACY = 0x48, // Obsolete TOCLIENT_HUDADD = 0x49, /* @@ -567,6 +579,7 @@ enum ToClientCommand foreach count: u8 len u8[len] param + u8 clouds (boolean) */ TOCLIENT_OVERRIDE_DAY_NIGHT_RATIO = 0x50, @@ -595,15 +608,68 @@ enum ToClientCommand u32 id */ + TOCLIENT_CLOUD_PARAMS = 0x54, + /* + f1000 density + u8[4] color_diffuse (ARGB) + u8[4] color_ambient (ARGB) + f1000 height + f1000 thickness + v2f1000 speed + */ + + TOCLIENT_FADE_SOUND = 0x55, + /* + s32 sound_id + float step + float gain + */ + TOCLIENT_UPDATE_PLAYER_LIST = 0x56, + /* + u8 type + u16 number of players + for each player + u16 len + u8[len] player name + */ + + TOCLIENT_MODCHANNEL_MSG = 0x57, + /* + u16 channel name length + std::string channel name + u16 channel name sender + std::string channel name + u16 message length + std::string message + */ + + TOCLIENT_MODCHANNEL_SIGNAL = 0x58, + /* + u8 signal id + u16 channel name length + std::string channel name + */ + + TOCLIENT_NODEMETA_CHANGED = 0x59, + /* + serialized and compressed node metadata + */ + TOCLIENT_SRP_BYTES_S_B = 0x60, /* - Belonging to AUTH_MECHANISM_LEGACY_PASSWORD and AUTH_MECHANISM_SRP. + Belonging to AUTH_MECHANISM_SRP. std::string bytes_s std::string bytes_B */ - TOCLIENT_NUM_MSG_TYPES = 0x61, + TOCLIENT_FORMSPEC_PREPEND = 0x61, + /* + u16 len + u8[len] formspec + */ + + TOCLIENT_NUM_MSG_TYPES = 0x62, }; enum ToServerCommand @@ -619,17 +685,7 @@ enum ToServerCommand std::string player name */ - TOSERVER_INIT_LEGACY = 0x10, - /* - Sent first after connected. - - [0] u16 TOSERVER_INIT_LEGACY - [2] u8 SER_FMT_VER_HIGHEST_READ - [3] u8[20] player_name - [23] u8[28] password (new in some version) - [51] u16 minimum supported network protocol version (added sometime) - [53] u16 maximum supported network protocol version (added later than the previous one) - */ + TOSERVER_INIT_LEGACY = 0x10, // Obsolete TOSERVER_INIT2 = 0x11, /* @@ -639,7 +695,27 @@ enum ToServerCommand [0] u16 TOSERVER_INIT2 */ - TOSERVER_GETBLOCK=0x20, // Obsolete + TOSERVER_MODCHANNEL_JOIN = 0x17, + /* + u16 channel name length + std::string channel name + */ + + TOSERVER_MODCHANNEL_LEAVE = 0x18, + /* + u16 channel name length + std::string channel name + */ + + TOSERVER_MODCHANNEL_MSG = 0x19, + /* + u16 channel name length + std::string channel name + u16 message length + std::string message + */ + + TOSERVER_GETBLOCK = 0x20, // Obsolete TOSERVER_ADDNODE = 0x21, // Obsolete TOSERVER_REMOVENODE = 0x22, // Obsolete @@ -652,7 +728,7 @@ enum ToServerCommand [2+12+12+4] s32 yaw*100 [2+12+12+4+4] u32 keyPressed [2+12+12+4+4+1] u8 fov*80 - [2+12+12+4+4+4+1] u8 wanted_range / MAP_BLOCKSIZE + [2+12+12+4+4+4+1] u8 ceil(wanted_range / MAP_BLOCKSIZE) */ TOSERVER_GOTBLOCKS = 0x24, @@ -674,48 +750,10 @@ enum ToServerCommand */ TOSERVER_ADDNODE_FROM_INVENTORY = 0x26, // Obsolete - /* - [0] u16 command - [2] v3s16 pos - [8] u16 i - */ - TOSERVER_CLICK_OBJECT = 0x27, // Obsolete - /* - length: 13 - [0] u16 command - [2] u8 button (0=left, 1=right) - [3] v3s16 blockpos - [9] s16 id - [11] u16 item - */ - TOSERVER_GROUND_ACTION = 0x28, // Obsolete - /* - length: 17 - [0] u16 command - [2] u8 action - [3] v3s16 nodepos_undersurface - [9] v3s16 nodepos_abovesurface - [15] u16 item - actions: - 0: start digging (from undersurface) - 1: place block (to abovesurface) - 2: stop digging (all parameters ignored) - 3: digging completed - */ - TOSERVER_RELEASE = 0x29, // Obsolete - - // (oops, there is some gap here) - - TOSERVER_SIGNTEXT = 0x30, // Old signs, obsolete - /* - v3s16 blockpos - s16 id - u16 textlen - textdata - */ + TOSERVER_SIGNTEXT = 0x30, // Obsolete TOSERVER_INVENTORY_ACTION = 0x31, /* @@ -728,35 +766,15 @@ enum ToServerCommand wstring message */ - TOSERVER_SIGNNODETEXT = 0x33, // obsolete - /* - v3s16 p - u16 textlen - textdata - */ - + TOSERVER_SIGNNODETEXT = 0x33, // Obsolete TOSERVER_CLICK_ACTIVEOBJECT = 0x34, // Obsolete - /* - length: 7 - [0] u16 command - [2] u8 button (0=left, 1=right) - [3] u16 id - [5] u16 item - */ TOSERVER_DAMAGE = 0x35, /* u8 amount */ - TOSERVER_PASSWORD_LEGACY = 0x36, - /* - Sent to change password. - - [0] u16 TOSERVER_PASSWORD - [2] u8[28] old password - [30] u8[28] new password - */ + TOSERVER_PASSWORD_LEGACY = 0x36, // Obsolete TOSERVER_PLAYERITEM = 0x37, /* @@ -784,8 +802,6 @@ enum ToServerCommand 2: digging completed 3: place block or item (to abovesurface) 4: use item - - (Obsoletes TOSERVER_GROUND_ACTION and TOSERVER_CLICK_ACTIVEOBJECT.) */ TOSERVER_REMOVED_SOUNDS = 0x3a, @@ -826,17 +842,10 @@ enum ToServerCommand u16 length of name string name } - */ - - TOSERVER_RECEIVED_MEDIA = 0x41, - /* - */ - TOSERVER_BREATH = 0x42, - /* - u16 breath - */ + TOSERVER_RECEIVED_MEDIA = 0x41, // Obsolete + TOSERVER_BREATH = 0x42, // Obsolete TOSERVER_CLIENT_READY = 0x43, /* @@ -859,7 +868,7 @@ enum ToServerCommand TOSERVER_SRP_BYTES_A = 0x51, /* - Belonging to AUTH_MECHANISM_LEGACY_PASSWORD and AUTH_MECHANISM_SRP, + Belonging to AUTH_MECHANISM_SRP, depending on current_login_based_on. std::string bytes_A @@ -870,7 +879,7 @@ enum ToServerCommand TOSERVER_SRP_BYTES_M = 0x52, /* - Belonging to AUTH_MECHANISM_LEGACY_PASSWORD and AUTH_MECHANISM_SRP. + Belonging to AUTH_MECHANISM_SRP. std::string bytes_M */ @@ -930,4 +939,24 @@ const static std::string accessDeniedStrings[SERVER_ACCESSDENIED_MAX] = { "This server has experienced an internal error. You will now be disconnected." }; -#endif +enum PlayerListModifer: u8 +{ + PLAYER_LIST_INIT, + PLAYER_LIST_ADD, + PLAYER_LIST_REMOVE, +}; + +enum CSMRestrictionFlags : u64 { + CSM_RF_NONE = 0x00000000, + // Until server-sent CSM and verifying of builtin are complete, + // 'CSM_RF_LOAD_CLIENT_MODS' also disables loading 'builtin'. + // When those are complete, this should return to only being a restriction on the + // loading of client mods. + CSM_RF_LOAD_CLIENT_MODS = 0x00000001, // Don't load client-provided mods or 'builtin' + CSM_RF_CHAT_MESSAGES = 0x00000002, // Disable chat message sending from CSM + CSM_RF_READ_ITEMDEFS = 0x00000004, // Disable itemdef lookups + CSM_RF_READ_NODEDEFS = 0x00000008, // Disable nodedef lookups + CSM_RF_LOOKUP_NODES = 0x00000010, // Limit node lookups + CSM_RF_READ_PLAYERINFO = 0x00000020, // Disable player info lookups + CSM_RF_ALL = 0xFFFFFFFF, +};