X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fclientserver.h;h=769272a68a7db1344b1bef014830de360dfc7cc6;hb=b9d8e59bbf727fcc1a073bbf27e5d1703b9490ef;hp=a64a11f08a858d0f387036bce21fec32c07458cd;hpb=d4d49ee8f4d425e7a4136d65f519728869680951;p=dragonfireclient.git diff --git a/src/clientserver.h b/src/clientserver.h index a64a11f08..769272a68 100644 --- a/src/clientserver.h +++ b/src/clientserver.h @@ -1,18 +1,18 @@ /* -Minetest-c55 -Copyright (C) 2010 celeron55, Perttu Ahola +Minetest +Copyright (C) 2010-2013 celeron55, Perttu Ahola This program 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; either version 2 of the License, or +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program 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. See the -GNU General Public License for more details. +GNU Lesser General Public License for more details. -You should have received a copy of the GNU General Public License along +You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ @@ -20,10 +20,85 @@ with this program; if not, write to the Free Software Foundation, Inc., #ifndef CLIENTSERVER_HEADER #define CLIENTSERVER_HEADER -#include "utility.h" +#include "util/pointer.h" +SharedBuffer makePacket_TOCLIENT_TIME_OF_DAY(u16 time, float time_speed); + +/* + changes by PROTOCOL_VERSION: + + PROTOCOL_VERSION 3: + Base for writing changes here + PROTOCOL_VERSION 4: + Add TOCLIENT_MEDIA + Add TOCLIENT_TOOLDEF + Add TOCLIENT_NODEDEF + Add TOCLIENT_CRAFTITEMDEF + Add TOSERVER_INTERACT + Obsolete TOSERVER_CLICK_ACTIVEOBJECT + Obsolete TOSERVER_GROUND_ACTION + PROTOCOL_VERSION 5: + Make players to be handled mostly as ActiveObjects + PROTOCOL_VERSION 6: + Only non-cached textures are sent + PROTOCOL_VERSION 7: + Add TOCLIENT_ITEMDEF + Obsolete TOCLIENT_TOOLDEF + Obsolete TOCLIENT_CRAFTITEMDEF + Compress the contents of TOCLIENT_ITEMDEF and TOCLIENT_NODEDEF + PROTOCOL_VERSION 8: + Digging based on item groups + Many things + PROTOCOL_VERSION 9: + ContentFeatures and NodeDefManager use a different serialization + format; better for future version cross-compatibility + Many things + PROTOCOL_VERSION 10: + TOCLIENT_PRIVILEGES + Version raised to force 'fly' and 'fast' privileges into effect. + Node metadata change (came in later; somewhat incompatible) + PROTOCOL_VERSION 11: + TileDef in ContentFeatures + Nodebox drawtype + (some dev snapshot) + TOCLIENT_INVENTORY_FORMSPEC + (0.4.0, 0.4.1) + PROTOCOL_VERSION 12: + TOSERVER_INVENTORY_FIELDS + 16-bit node ids + TOCLIENT_DETACHED_INVENTORY + PROTOCOL_VERSION 13: + InventoryList field "Width" (deserialization fails with old versions) + PROTOCOL_VERSION 14: + Added transfer of player pressed keys to the server + Added new messages for mesh and bone animation, as well as attachments + GENERIC_CMD_SET_ANIMATION + GENERIC_CMD_SET_BONE_POSITION + GENERIC_CMD_SET_ATTACHMENT + PROTOCOL_VERSION 15: + Serialization format changes + PROTOCOL_VERSION 16: + TOCLIENT_SHOW_FORMSPEC +*/ + +#define LATEST_PROTOCOL_VERSION 16 + +// Server's supported network protocol range +#define SERVER_PROTOCOL_VERSION_MIN 13 +#define SERVER_PROTOCOL_VERSION_MAX LATEST_PROTOCOL_VERSION + +// Client's supported network protocol range +#define CLIENT_PROTOCOL_VERSION_MIN 13 +#define CLIENT_PROTOCOL_VERSION_MAX LATEST_PROTOCOL_VERSION + +// Constant that differentiates the protocol from random data and other protocols #define PROTOCOL_ID 0x4f457403 +#define PASSWORD_SIZE 28 // Maximum password length. Allows for + // base64-encoded SHA-1 (27+\0). + +#define TEXTURENAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_." + enum ToClientCommand { TOCLIENT_INIT = 0x10, @@ -34,7 +109,8 @@ enum ToClientCommand [0] u16 TOSERVER_INIT [2] u8 deployed version [3] v3s16 player's position + v3f(0,BS/2,0) floatToInt'd - ([4] u64 map seed (new as of 2011-02-27)) + [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 @@ -56,7 +132,7 @@ enum ToClientCommand [N+2+12+12+4] s32 yaw*100 */ - TOCLIENT_PLAYERINFO = 0x24, + TOCLIENT_PLAYERINFO = 0x24, // Obsolete /* [0] u16 command // Followed by an arbitary number of these: @@ -80,13 +156,14 @@ enum ToClientCommand [2] serialized inventory */ - TOCLIENT_OBJECTDATA = 0x28, + TOCLIENT_OBJECTDATA = 0x28, // Obsolete /* Sent as unreliable. u16 command u16 number of player positions for each player: + u16 peer_id v3s32 position*100 v3s32 speed*100 s32 pitch*100 @@ -101,8 +178,12 @@ enum ToClientCommand /* u16 command u16 time (0-23999) + Added in a later version: + f1000 time_speed */ + // (oops, there is some gap here) + TOCLIENT_CHAT_MESSAGE = 0x30, /* u16 command @@ -121,7 +202,7 @@ enum ToClientCommand for all added objects { u16 id u8 type - u16 initialization data length + u32 initialization data length string initialization data } */ @@ -154,6 +235,151 @@ enum ToClientCommand TOCLIENT_ACCESS_DENIED = 0x35, /* u16 command + u16 reason_length + wstring reason + */ + + TOCLIENT_PLAYERITEM = 0x36, // Obsolete + /* + u16 command + u16 count of player items + for all player items { + u16 peer id + u16 length of serialized item + string serialized item + } + */ + + TOCLIENT_DEATHSCREEN = 0x37, + /* + u16 command + u8 bool set camera point target + v3f1000 camera point target (to point the death cause or whatever) + */ + + TOCLIENT_MEDIA = 0x38, + /* + u16 command + u16 total number of texture bunches + u16 index of this bunch + u32 number of files in this bunch + for each file { + u16 length of name + string name + u32 length of data + data + } + u16 length of remote media server url (if applicable) + string url + */ + + TOCLIENT_TOOLDEF = 0x39, + /* + u16 command + u32 length of the next item + serialized ToolDefManager + */ + + TOCLIENT_NODEDEF = 0x3a, + /* + u16 command + u32 length of the next item + serialized NodeDefManager + */ + + TOCLIENT_CRAFTITEMDEF = 0x3b, + /* + u16 command + u32 length of the next item + serialized CraftiItemDefManager + */ + + TOCLIENT_ANNOUNCE_MEDIA = 0x3c, + + /* + u16 command + u32 number of files + for each texture { + u16 length of name + string name + u16 length of sha1_digest + string sha1_digest + } + */ + + TOCLIENT_ITEMDEF = 0x3d, + /* + u16 command + u32 length of next item + serialized ItemDefManager + */ + + TOCLIENT_PLAY_SOUND = 0x3f, + /* + u16 command + s32 sound_id + u16 len + u8[len] sound name + s32 gain*1000 + u8 type (0=local, 1=positional, 2=object) + s32[3] pos_nodes*10000 + u16 object_id + u8 loop (bool) + */ + + TOCLIENT_STOP_SOUND = 0x40, + /* + u16 command + s32 sound_id + */ + + TOCLIENT_PRIVILEGES = 0x41, + /* + u16 command + u16 number of privileges + for each privilege + u16 len + u8[len] privilege + */ + + TOCLIENT_INVENTORY_FORMSPEC = 0x42, + /* + u16 command + u32 len + u8[len] formspec + */ + + TOCLIENT_DETACHED_INVENTORY = 0x43, + /* + [0] u16 command + u16 len + u8[len] name + [2] serialized inventory + */ + TOCLIENT_SHOW_FORMSPEC = 0x44, + /* + [0] u16 command + u32 len + u8[len] formspec + u16 len + u8[len] formname + */ + + TOCLIENT_MOVEMENT = 0x45, + /* + u16 command + f1000 movement_acceleration_default + f1000 movement_acceleration_air + f1000 movement_acceleration_fast + f1000 movement_speed_walk + f1000 movement_speed_crouch + f1000 movement_speed_fast + f1000 movement_speed_climb + f1000 movement_speed_jump + f1000 movement_liquid_fluidity + f1000 movement_liquid_fluidity_smooth + f1000 movement_liquid_sink + f1000 movement_gravity */ }; @@ -166,7 +392,9 @@ enum ToServerCommand [0] u16 TOSERVER_INIT [2] u8 SER_FMT_VER_HIGHEST [3] u8[20] player_name - [23] u8[28] password + [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_INIT2 = 0x11, @@ -188,6 +416,7 @@ enum ToServerCommand [2+12] v3s32 speed*100 [2+12+12] s32 pitch*100 [2+12+12+4] s32 yaw*100 + [2+12+12+4+4] u32 keyPressed */ TOSERVER_GOTBLOCKS = 0x24, @@ -215,7 +444,7 @@ enum ToServerCommand [8] u16 i */ - TOSERVER_CLICK_OBJECT = 0x27, + TOSERVER_CLICK_OBJECT = 0x27, // Obsolete /* length: 13 [0] u16 command @@ -225,7 +454,7 @@ enum ToServerCommand [11] u16 item */ - TOSERVER_GROUND_ACTION = 0x28, + TOSERVER_GROUND_ACTION = 0x28, // Obsolete /* length: 17 [0] u16 command @@ -242,7 +471,9 @@ enum ToServerCommand TOSERVER_RELEASE = 0x29, // Obsolete - TOSERVER_SIGNTEXT = 0x30, // Old signs + // (oops, there is some gap here) + + TOSERVER_SIGNTEXT = 0x30, // Old signs, obsolete /* u16 command v3s16 blockpos @@ -263,7 +494,7 @@ enum ToServerCommand wstring message */ - TOSERVER_SIGNNODETEXT = 0x33, + TOSERVER_SIGNNODETEXT = 0x33, // obsolete /* u16 command v3s16 p @@ -271,7 +502,7 @@ enum ToServerCommand textdata */ - TOSERVER_CLICK_ACTIVEOBJECT = 0x34, + TOSERVER_CLICK_ACTIVEOBJECT = 0x34, // Obsolete /* length: 7 [0] u16 command @@ -285,15 +516,95 @@ enum ToServerCommand u16 command u8 amount */ -}; -inline SharedBuffer makePacket_TOCLIENT_TIME_OF_DAY(u16 time) -{ - SharedBuffer data(2+2); - writeU16(&data[0], TOCLIENT_TIME_OF_DAY); - writeU16(&data[2], time); - return data; -} + TOSERVER_PASSWORD=0x36, + /* + Sent to change password. + + [0] u16 TOSERVER_PASSWORD + [2] u8[28] old password + [30] u8[28] new password + */ + + TOSERVER_PLAYERITEM=0x37, + /* + Sent to change selected item. + + [0] u16 TOSERVER_PLAYERITEM + [2] u16 item + */ + + TOSERVER_RESPAWN=0x38, + /* + u16 TOSERVER_RESPAWN + */ + + TOSERVER_INTERACT = 0x39, + /* + [0] u16 command + [2] u8 action + [3] u16 item + [5] u32 length of the next item + [9] serialized PointedThing + actions: + 0: start digging (from undersurface) or use + 1: stop digging (all parameters ignored) + 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, + /* + u16 command + u16 len + s32[len] sound_id + */ + + TOSERVER_NODEMETA_FIELDS = 0x3b, + /* + u16 command + v3s16 p + u16 len + u8[len] form name (reserved for future use) + u16 number of fields + for each field: + u16 len + u8[len] field name + u32 len + u8[len] field value + */ + + TOSERVER_INVENTORY_FIELDS = 0x3c, + /* + u16 command + u16 len + u8[len] form name (reserved for future use) + u16 number of fields + for each field: + u16 len + u8[len] field name + u32 len + u8[len] field value + */ + + TOSERVER_REQUEST_MEDIA = 0x40, + /* + u16 command + u16 number of files requested + for each file { + u16 length of name + string name + } + */ + + TOSERVER_RECEIVED_MEDIA = 0x41, + /* + u16 command + */ +}; #endif