LCOV - code coverage report
Current view: top level - src/network - networkprotocol.h (source / functions) Hit Total Coverage
Test: report Lines: 2 2 100.0 %
Date: 2015-07-11 18:23:49 Functions: 1 1 100.0 %

          Line data    Source code
       1             : /*
       2             : Minetest
       3             : Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
       4             : 
       5             : This program is free software; you can redistribute it and/or modify
       6             : it under the terms of the GNU Lesser General Public License as published by
       7             : the Free Software Foundation; either version 2.1 of the License, or
       8             : (at your option) any later version.
       9             : 
      10             : This program is distributed in the hope that it will be useful,
      11             : but WITHOUT ANY WARRANTY; without even the implied warranty of
      12             : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      13             : GNU Lesser General Public License for more details.
      14             : 
      15             : You should have received a copy of the GNU Lesser General Public License along
      16             : with this program; if not, write to the Free Software Foundation, Inc.,
      17             : 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
      18             : */
      19             : 
      20             : #ifndef NETWORKPROTOCOL_HEADER
      21             : #define NETWORKPROTOCOL_HEADER
      22             : #include "util/string.h"
      23             : 
      24             : /*
      25             :         changes by PROTOCOL_VERSION:
      26             : 
      27             :         PROTOCOL_VERSION 3:
      28             :                 Base for writing changes here
      29             :         PROTOCOL_VERSION 4:
      30             :                 Add TOCLIENT_MEDIA
      31             :                 Add TOCLIENT_TOOLDEF
      32             :                 Add TOCLIENT_NODEDEF
      33             :                 Add TOCLIENT_CRAFTITEMDEF
      34             :                 Add TOSERVER_INTERACT
      35             :                 Obsolete TOSERVER_CLICK_ACTIVEOBJECT
      36             :                 Obsolete TOSERVER_GROUND_ACTION
      37             :         PROTOCOL_VERSION 5:
      38             :                 Make players to be handled mostly as ActiveObjects
      39             :         PROTOCOL_VERSION 6:
      40             :                 Only non-cached textures are sent
      41             :         PROTOCOL_VERSION 7:
      42             :                 Add TOCLIENT_ITEMDEF
      43             :                 Obsolete TOCLIENT_TOOLDEF
      44             :                 Obsolete TOCLIENT_CRAFTITEMDEF
      45             :                 Compress the contents of TOCLIENT_ITEMDEF and TOCLIENT_NODEDEF
      46             :         PROTOCOL_VERSION 8:
      47             :                 Digging based on item groups
      48             :                 Many things
      49             :         PROTOCOL_VERSION 9:
      50             :                 ContentFeatures and NodeDefManager use a different serialization
      51             :                     format; better for future version cross-compatibility
      52             :                 Many things
      53             :         PROTOCOL_VERSION 10:
      54             :                 TOCLIENT_PRIVILEGES
      55             :                 Version raised to force 'fly' and 'fast' privileges into effect.
      56             :                 Node metadata change (came in later; somewhat incompatible)
      57             :         PROTOCOL_VERSION 11:
      58             :                 TileDef in ContentFeatures
      59             :                 Nodebox drawtype
      60             :                 (some dev snapshot)
      61             :                 TOCLIENT_INVENTORY_FORMSPEC
      62             :                 (0.4.0, 0.4.1)
      63             :         PROTOCOL_VERSION 12:
      64             :                 TOSERVER_INVENTORY_FIELDS
      65             :                 16-bit node ids
      66             :                 TOCLIENT_DETACHED_INVENTORY
      67             :         PROTOCOL_VERSION 13:
      68             :                 InventoryList field "Width" (deserialization fails with old versions)
      69             :         PROTOCOL_VERSION 14:
      70             :                 Added transfer of player pressed keys to the server
      71             :                 Added new messages for mesh and bone animation, as well as attachments
      72             :                 GENERIC_CMD_SET_ANIMATION
      73             :                 GENERIC_CMD_SET_BONE_POSITION
      74             :                 GENERIC_CMD_SET_ATTACHMENT
      75             :         PROTOCOL_VERSION 15:
      76             :                 Serialization format changes
      77             :         PROTOCOL_VERSION 16:
      78             :                 TOCLIENT_SHOW_FORMSPEC
      79             :         PROTOCOL_VERSION 17:
      80             :                 Serialization format change: include backface_culling flag in TileDef
      81             :                 Added rightclickable field in nodedef
      82             :                 TOCLIENT_SPAWN_PARTICLE
      83             :                 TOCLIENT_ADD_PARTICLESPAWNER
      84             :                 TOCLIENT_DELETE_PARTICLESPAWNER
      85             :         PROTOCOL_VERSION 18:
      86             :                 damageGroups added to ToolCapabilities
      87             :                 sound_place added to ItemDefinition
      88             :         PROTOCOL_VERSION 19:
      89             :                 GENERIC_CMD_SET_PHYSICS_OVERRIDE
      90             :         PROTOCOL_VERSION 20:
      91             :                 TOCLIENT_HUDADD
      92             :                 TOCLIENT_HUDRM
      93             :                 TOCLIENT_HUDCHANGE
      94             :                 TOCLIENT_HUD_SET_FLAGS
      95             :         PROTOCOL_VERSION 21:
      96             :                 TOCLIENT_BREATH
      97             :                 TOSERVER_BREATH
      98             :                 range added to ItemDefinition
      99             :                 drowning, leveled and liquid_range added to ContentFeatures
     100             :                 stepheight and collideWithObjects added to object properties
     101             :                 version, heat and humidity transfer in MapBock
     102             :                 automatic_face_movement_dir and automatic_face_movement_dir_offset
     103             :                         added to object properties
     104             :         PROTOCOL_VERSION 22:
     105             :                 add swap_node
     106             :         PROTOCOL_VERSION 23:
     107             :                 TOSERVER_CLIENT_READY
     108             :         PROTOCOL_VERSION 24:
     109             :                 ContentFeatures version 7
     110             :                 ContentFeatures: change number of special tiles to 6 (CF_SPECIAL_COUNT)
     111             :         PROTOCOL_VERSION 25:
     112             :                 Rename TOCLIENT_ACCESS_DENIED to TOCLIENT_ACCESS_DENIED_LEGAGY
     113             :                 Rename TOCLIENT_DELETE_PARTICLESPAWNER to
     114             :                         TOCLIENT_DELETE_PARTICLESPAWNER_LEGACY
     115             :                 Rename TOSERVER_PASSWORD to TOSERVER_PASSWORD_LEGACY
     116             :                 Rename TOSERVER_INIT to TOSERVER_INIT_LEGACY
     117             :                 Rename TOCLIENT_INIT to TOCLIENT_INIT_LEGACY
     118             :                 Add TOCLIENT_ACCESS_DENIED new opcode (0x0A), using error codes
     119             :                         for standard error, keeping customisation possible. This
     120             :                         permit translation
     121             :                 Add TOCLIENT_DELETE_PARTICLESPAWNER (0x53), fixing the u16 read and
     122             :                         reading u32
     123             :                 Add new opcode TOSERVER_INIT for client presentation to server
     124             :                 Add new opcodes TOSERVER_FIRST_SRP, TOSERVER_SRP_BYTES_A,
     125             :                         TOSERVER_SRP_BYTES_M, TOCLIENT_SRP_BYTES_S_B
     126             :                         for the three supported auth mechanisms around srp
     127             :                 Add new opcodes TOCLIENT_ACCEPT_SUDO_MODE and TOCLIENT_DENY_SUDO_MODE
     128             :                         for sudo mode handling (auth mech generic way of changing password).
     129             :                 Add TOCLIENT_HELLO for presenting server to client after client
     130             :                         presentation
     131             :                 Add TOCLIENT_AUTH_ACCEPT to accept connection from client
     132             :                 Rename GENERIC_CMD_SET_ATTACHMENT to GENERIC_CMD_ATTACH_TO
     133             : */
     134             : 
     135             : #define LATEST_PROTOCOL_VERSION 25
     136             : 
     137             : // Server's supported network protocol range
     138             : #define SERVER_PROTOCOL_VERSION_MIN 13
     139             : #define SERVER_PROTOCOL_VERSION_MAX LATEST_PROTOCOL_VERSION
     140             : 
     141             : // Client's supported network protocol range
     142             : #define CLIENT_PROTOCOL_VERSION_MIN 13
     143             : #define CLIENT_PROTOCOL_VERSION_MAX LATEST_PROTOCOL_VERSION
     144             : 
     145             : // Constant that differentiates the protocol from random data and other protocols
     146             : #define PROTOCOL_ID 0x4f457403
     147             : 
     148             : #define PASSWORD_SIZE 28       // Maximum password length. Allows for
     149             :                                // base64-encoded SHA-1 (27+\0).
     150             : 
     151             : #define FORMSPEC_API_VERSION 1
     152             : #define FORMSPEC_VERSION_STRING "formspec_version[" TOSTRING(FORMSPEC_API_VERSION) "]"
     153             : 
     154             : #define TEXTURENAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.-"
     155             : 
     156             : enum ToClientCommand
     157             : {
     158             :         TOCLIENT_HELLO = 0x02,
     159             :         /*
     160             :                 Sent after TOSERVER_INIT.
     161             : 
     162             :                 u8 deployed serialisation version
     163             :                 u16 deployed network compression mode
     164             :                 u16 deployed protocol version
     165             :                 u32 supported auth methods
     166             :                 std::string username that should be used for legacy hash (for proper casing)
     167             :         */
     168             :         TOCLIENT_AUTH_ACCEPT = 0x03,
     169             :         /*
     170             :                 Message from server to accept auth.
     171             : 
     172             :                 v3s16 player's position + v3f(0,BS/2,0) floatToInt'd
     173             :                 u64 map seed
     174             :                 f1000 recommended send interval
     175             :                 u32 : supported auth methods for sudo mode
     176             :                       (where the user can change their password)
     177             :         */
     178             :         TOCLIENT_ACCEPT_SUDO_MODE = 0x04,
     179             :         /*
     180             :                 Sent to client to show it is in sudo mode now.
     181             :         */
     182             :         TOCLIENT_DENY_SUDO_MODE = 0x05,
     183             :         /*
     184             :                 Signals client that sudo mode auth failed.
     185             :         */
     186             :         TOCLIENT_INIT_LEGACY = 0x10,
     187             :         /*
     188             :                 Server's reply to TOSERVER_INIT.
     189             :                 Sent second after connected.
     190             : 
     191             :                 [0] u16 TOSERVER_INIT
     192             :                 [2] u8 deployed version
     193             :                 [3] v3s16 player's position + v3f(0,BS/2,0) floatToInt'd
     194             :                 [12] u64 map seed (new as of 2011-02-27)
     195             :                 [20] f1000 recommended send interval (in seconds) (new as of 14)
     196             : 
     197             :                 NOTE: The position in here is deprecated; position is
     198             :                       explicitly sent afterwards
     199             :         */
     200             :         TOCLIENT_ACCESS_DENIED = 0x0A,
     201             :         /*
     202             :                 u8 reason
     203             :                 std::string custom reason (if reason == SERVER_ACCESSDENIED_CUSTOM_STRING)
     204             :         */
     205             :         TOCLIENT_BLOCKDATA = 0x20, //TODO: Multiple blocks
     206             :         TOCLIENT_ADDNODE = 0x21,
     207             :         /*
     208             :                 u16 command
     209             :                 v3s16 position
     210             :                 serialized mapnode
     211             :                 u8 keep_metadata // Added in protocol version 22
     212             :         */
     213             :         TOCLIENT_REMOVENODE = 0x22,
     214             : 
     215             :         TOCLIENT_PLAYERPOS = 0x23, // Obsolete
     216             :         /*
     217             :                 [0] u16 command
     218             :                 // Followed by an arbitary number of these:
     219             :                 // Number is determined from packet length.
     220             :                 [N] u16 peer_id
     221             :                 [N+2] v3s32 position*100
     222             :                 [N+2+12] v3s32 speed*100
     223             :                 [N+2+12+12] s32 pitch*100
     224             :                 [N+2+12+12+4] s32 yaw*100
     225             :         */
     226             : 
     227             :         TOCLIENT_PLAYERINFO = 0x24, // Obsolete
     228             :         /*
     229             :                 [0] u16 command
     230             :                 // Followed by an arbitary number of these:
     231             :                 // Number is determined from packet length.
     232             :                 [N] u16 peer_id
     233             :                 [N] char[20] name
     234             :         */
     235             : 
     236             :         TOCLIENT_OPT_BLOCK_NOT_FOUND = 0x25, // Obsolete
     237             : 
     238             :         TOCLIENT_SECTORMETA = 0x26, // Obsolete
     239             :         /*
     240             :                 [0] u16 command
     241             :                 [2] u8 sector count
     242             :                 [3...] v2s16 pos + sector metadata
     243             :         */
     244             : 
     245             :         TOCLIENT_INVENTORY = 0x27,
     246             :         /*
     247             :                 [0] u16 command
     248             :                 [2] serialized inventory
     249             :         */
     250             : 
     251             :         TOCLIENT_OBJECTDATA = 0x28, // Obsolete
     252             :         /*
     253             :                 Sent as unreliable.
     254             : 
     255             :                 u16 command
     256             :                 u16 number of player positions
     257             :                 for each player:
     258             :                         u16 peer_id
     259             :                         v3s32 position*100
     260             :                         v3s32 speed*100
     261             :                         s32 pitch*100
     262             :                         s32 yaw*100
     263             :                 u16 count of blocks
     264             :                 for each block:
     265             :                         v3s16 blockpos
     266             :                         block objects
     267             :         */
     268             : 
     269             :         TOCLIENT_TIME_OF_DAY = 0x29,
     270             :         /*
     271             :                 u16 command
     272             :                 u16 time (0-23999)
     273             :                 Added in a later version:
     274             :                 f1000 time_speed
     275             :         */
     276             : 
     277             :         // (oops, there is some gap here)
     278             : 
     279             :         TOCLIENT_CHAT_MESSAGE = 0x30,
     280             :         /*
     281             :                 u16 command
     282             :                 u16 length
     283             :                 wstring message
     284             :         */
     285             : 
     286             :         TOCLIENT_ACTIVE_OBJECT_REMOVE_ADD = 0x31,
     287             :         /*
     288             :                 u16 command
     289             :                 u16 count of removed objects
     290             :                 for all removed objects {
     291             :                         u16 id
     292             :                 }
     293             :                 u16 count of added objects
     294             :                 for all added objects {
     295             :                         u16 id
     296             :                         u8 type
     297             :                         u32 initialization data length
     298             :                         string initialization data
     299             :                 }
     300             :         */
     301             : 
     302             :         TOCLIENT_ACTIVE_OBJECT_MESSAGES = 0x32,
     303             :         /*
     304             :                 u16 command
     305             :                 for all objects
     306             :                 {
     307             :                         u16 id
     308             :                         u16 message length
     309             :                         string message
     310             :                 }
     311             :         */
     312             : 
     313             :         TOCLIENT_HP = 0x33,
     314             :         /*
     315             :                 u16 command
     316             :                 u8 hp
     317             :         */
     318             : 
     319             :         TOCLIENT_MOVE_PLAYER = 0x34,
     320             :         /*
     321             :                 u16 command
     322             :                 v3f1000 player position
     323             :                 f1000 player pitch
     324             :                 f1000 player yaw
     325             :         */
     326             : 
     327             :         TOCLIENT_ACCESS_DENIED_LEGACY = 0x35,
     328             :         /*
     329             :                 u16 command
     330             :                 u16 reason_length
     331             :                 wstring reason
     332             :         */
     333             : 
     334             :         TOCLIENT_PLAYERITEM = 0x36, // Obsolete
     335             :         /*
     336             :                 u16 command
     337             :                 u16 count of player items
     338             :                 for all player items {
     339             :                         u16 peer id
     340             :                         u16 length of serialized item
     341             :                         string serialized item
     342             :                 }
     343             :         */
     344             : 
     345             :         TOCLIENT_DEATHSCREEN = 0x37,
     346             :         /*
     347             :                 u16 command
     348             :                 u8 bool set camera point target
     349             :                 v3f1000 camera point target (to point the death cause or whatever)
     350             :         */
     351             : 
     352             :         TOCLIENT_MEDIA = 0x38,
     353             :         /*
     354             :                 u16 command
     355             :                 u16 total number of texture bunches
     356             :                 u16 index of this bunch
     357             :                 u32 number of files in this bunch
     358             :                 for each file {
     359             :                         u16 length of name
     360             :                         string name
     361             :                         u32 length of data
     362             :                         data
     363             :                 }
     364             :                 u16 length of remote media server url (if applicable)
     365             :                 string url
     366             :         */
     367             : 
     368             :         TOCLIENT_TOOLDEF = 0x39,
     369             :         /*
     370             :                 u16 command
     371             :                 u32 length of the next item
     372             :                 serialized ToolDefManager
     373             :         */
     374             : 
     375             :         TOCLIENT_NODEDEF = 0x3a,
     376             :         /*
     377             :                 u16 command
     378             :                 u32 length of the next item
     379             :                 serialized NodeDefManager
     380             :         */
     381             : 
     382             :         TOCLIENT_CRAFTITEMDEF = 0x3b,
     383             :         /*
     384             :                 u16 command
     385             :                 u32 length of the next item
     386             :                 serialized CraftiItemDefManager
     387             :         */
     388             : 
     389             :         TOCLIENT_ANNOUNCE_MEDIA = 0x3c,
     390             : 
     391             :         /*
     392             :                 u16 command
     393             :                 u32 number of files
     394             :                 for each texture {
     395             :                         u16 length of name
     396             :                         string name
     397             :                         u16 length of sha1_digest
     398             :                         string sha1_digest
     399             :                 }
     400             :         */
     401             : 
     402             :         TOCLIENT_ITEMDEF = 0x3d,
     403             :         /*
     404             :                 u16 command
     405             :                 u32 length of next item
     406             :                 serialized ItemDefManager
     407             :         */
     408             : 
     409             :         TOCLIENT_PLAY_SOUND = 0x3f,
     410             :         /*
     411             :                 u16 command
     412             :                 s32 sound_id
     413             :                 u16 len
     414             :                 u8[len] sound name
     415             :                 s32 gain*1000
     416             :                 u8 type (0=local, 1=positional, 2=object)
     417             :                 s32[3] pos_nodes*10000
     418             :                 u16 object_id
     419             :                 u8 loop (bool)
     420             :         */
     421             : 
     422             :         TOCLIENT_STOP_SOUND = 0x40,
     423             :         /*
     424             :                 u16 command
     425             :                 s32 sound_id
     426             :         */
     427             : 
     428             :         TOCLIENT_PRIVILEGES = 0x41,
     429             :         /*
     430             :                 u16 command
     431             :                 u16 number of privileges
     432             :                 for each privilege
     433             :                         u16 len
     434             :                         u8[len] privilege
     435             :         */
     436             : 
     437             :         TOCLIENT_INVENTORY_FORMSPEC = 0x42,
     438             :         /*
     439             :                 u16 command
     440             :                 u32 len
     441             :                 u8[len] formspec
     442             :         */
     443             : 
     444             :         TOCLIENT_DETACHED_INVENTORY = 0x43,
     445             :         /*
     446             :                 [0] u16 command
     447             :                 u16 len
     448             :                 u8[len] name
     449             :                 [2] serialized inventory
     450             :         */
     451             : 
     452             :         TOCLIENT_SHOW_FORMSPEC = 0x44,
     453             :         /*
     454             :                 [0] u16 command
     455             :                 u32 len
     456             :                 u8[len] formspec
     457             :                 u16 len
     458             :                 u8[len] formname
     459             :         */
     460             : 
     461             :         TOCLIENT_MOVEMENT = 0x45,
     462             :         /*
     463             :                 u16 command
     464             :                 f1000 movement_acceleration_default
     465             :                 f1000 movement_acceleration_air
     466             :                 f1000 movement_acceleration_fast
     467             :                 f1000 movement_speed_walk
     468             :                 f1000 movement_speed_crouch
     469             :                 f1000 movement_speed_fast
     470             :                 f1000 movement_speed_climb
     471             :                 f1000 movement_speed_jump
     472             :                 f1000 movement_liquid_fluidity
     473             :                 f1000 movement_liquid_fluidity_smooth
     474             :                 f1000 movement_liquid_sink
     475             :                 f1000 movement_gravity
     476             :         */
     477             : 
     478             :         TOCLIENT_SPAWN_PARTICLE = 0x46,
     479             :         /*
     480             :                 u16 command
     481             :                 v3f1000 pos
     482             :                 v3f1000 velocity
     483             :                 v3f1000 acceleration
     484             :                 f1000 expirationtime
     485             :                 f1000 size
     486             :                 u8 bool collisiondetection
     487             :                 u8 bool vertical
     488             :                 u32 len
     489             :                 u8[len] texture
     490             :         */
     491             : 
     492             :         TOCLIENT_ADD_PARTICLESPAWNER = 0x47,
     493             :         /*
     494             :                 u16 command
     495             :                 u16 amount
     496             :                 f1000 spawntime
     497             :                 v3f1000 minpos
     498             :                 v3f1000 maxpos
     499             :                 v3f1000 minvel
     500             :                 v3f1000 maxvel
     501             :                 v3f1000 minacc
     502             :                 v3f1000 maxacc
     503             :                 f1000 minexptime
     504             :                 f1000 maxexptime
     505             :                 f1000 minsize
     506             :                 f1000 maxsize
     507             :                 u8 bool collisiondetection
     508             :                 u8 bool vertical
     509             :                 u32 len
     510             :                 u8[len] texture
     511             :                 u32 id
     512             :         */
     513             : 
     514             :         TOCLIENT_DELETE_PARTICLESPAWNER_LEGACY = 0x48,
     515             :         /*
     516             :                 u16 command
     517             :                 u16 id
     518             :         */
     519             : 
     520             :         TOCLIENT_HUDADD = 0x49,
     521             :         /*
     522             :                 u16 command
     523             :                 u32 id
     524             :                 u8 type
     525             :                 v2f1000 pos
     526             :                 u32 len
     527             :                 u8[len] name
     528             :                 v2f1000 scale
     529             :                 u32 len2
     530             :                 u8[len2] text
     531             :                 u32 number
     532             :                 u32 item
     533             :                 u32 dir
     534             :                 v2f1000 align
     535             :                 v2f1000 offset
     536             :                 v3f1000 world_pos
     537             :                 v2s32 size
     538             :         */
     539             : 
     540             :         TOCLIENT_HUDRM = 0x4a,
     541             :         /*
     542             :                 u16 command
     543             :                 u32 id
     544             :         */
     545             : 
     546             :         TOCLIENT_HUDCHANGE = 0x4b,
     547             :         /*
     548             :                 u16 command
     549             :                 u32 id
     550             :                 u8 stat
     551             :                 [v2f1000 data |
     552             :                  u32 len
     553             :                  u8[len] data |
     554             :                  u32 data]
     555             :         */
     556             : 
     557             :         TOCLIENT_HUD_SET_FLAGS = 0x4c,
     558             :         /*
     559             :                 u16 command
     560             :                 u32 flags
     561             :                 u32 mask
     562             :         */
     563             : 
     564             :         TOCLIENT_HUD_SET_PARAM = 0x4d,
     565             :         /*
     566             :                 u16 command
     567             :                 u16 param
     568             :                 u16 len
     569             :                 u8[len] value
     570             :         */
     571             : 
     572             :         TOCLIENT_BREATH = 0x4e,
     573             :         /*
     574             :                 u16 command
     575             :                 u16 breath
     576             :         */
     577             : 
     578             :         TOCLIENT_SET_SKY = 0x4f,
     579             :         /*
     580             :                 u16 command
     581             :                 u8[4] color (ARGB)
     582             :                 u8 len
     583             :                 u8[len] type
     584             :                 u16 count
     585             :                 foreach count:
     586             :                         u8 len
     587             :                         u8[len] param
     588             :         */
     589             : 
     590             :         TOCLIENT_OVERRIDE_DAY_NIGHT_RATIO = 0x50,
     591             :         /*
     592             :                 u16 command
     593             :                 u8 do_override (boolean)
     594             :                 u16 day-night ratio 0...65535
     595             :         */
     596             : 
     597             :         TOCLIENT_LOCAL_PLAYER_ANIMATIONS = 0x51,
     598             :         /*
     599             :                 u16 command
     600             :                 v2s32 stand/idle
     601             :                 v2s32 walk
     602             :                 v2s32 dig
     603             :                 v2s32 walk+dig
     604             :                 f1000 frame_speed
     605             :         */
     606             : 
     607             :         TOCLIENT_EYE_OFFSET = 0x52,
     608             :         /*
     609             :                 u16 command
     610             :                 v3f1000 first
     611             :                 v3f1000 third
     612             :         */
     613             : 
     614             :         TOCLIENT_DELETE_PARTICLESPAWNER = 0x53,
     615             :         /*
     616             :                 u16 command
     617             :                 u32 id
     618             :         */
     619             : 
     620             :         TOCLIENT_SRP_BYTES_S_B = 0x60,
     621             :         /*
     622             :                 Belonging to AUTH_MECHANISM_LEGACY_PASSWORD and AUTH_MECHANISM_SRP.
     623             : 
     624             :                 u16 command
     625             :                 std::string bytes_s
     626             :                 std::string bytes_B
     627             :         */
     628             : 
     629             :         TOCLIENT_NUM_MSG_TYPES = 0x61,
     630             : };
     631             : 
     632             : enum ToServerCommand
     633             : {
     634             :         TOSERVER_INIT = 0x02,
     635             :         /*
     636             :                 Sent first after connected.
     637             : 
     638             :                 u8 serialisation version (=SER_FMT_VER_HIGHEST_READ)
     639             :                 u16 supported network compression modes
     640             :                 u16 minimum supported network protocol version
     641             :                 u16 maximum supported network protocol version
     642             :                 std::string player name
     643             :         */
     644             : 
     645             :         TOSERVER_INIT_LEGACY = 0x10,
     646             :         /*
     647             :                 Sent first after connected.
     648             : 
     649             :                 [0] u16 TOSERVER_INIT_LEGACY
     650             :                 [2] u8 SER_FMT_VER_HIGHEST_READ
     651             :                 [3] u8[20] player_name
     652             :                 [23] u8[28] password (new in some version)
     653             :                 [51] u16 minimum supported network protocol version (added sometime)
     654             :                 [53] u16 maximum supported network protocol version (added later than the previous one)
     655             :         */
     656             : 
     657             :         TOSERVER_INIT2 = 0x11,
     658             :         /*
     659             :                 Sent as an ACK for TOCLIENT_INIT.
     660             :                 After this, the server can send data.
     661             : 
     662             :                 [0] u16 TOSERVER_INIT2
     663             :         */
     664             : 
     665             :         TOSERVER_GETBLOCK=0x20, // Obsolete
     666             :         TOSERVER_ADDNODE = 0x21, // Obsolete
     667             :         TOSERVER_REMOVENODE = 0x22, // Obsolete
     668             : 
     669             :         TOSERVER_PLAYERPOS = 0x23,
     670             :         /*
     671             :                 [0] u16 command
     672             :                 [2] v3s32 position*100
     673             :                 [2+12] v3s32 speed*100
     674             :                 [2+12+12] s32 pitch*100
     675             :                 [2+12+12+4] s32 yaw*100
     676             :                 [2+12+12+4+4] u32 keyPressed
     677             :         */
     678             : 
     679             :         TOSERVER_GOTBLOCKS = 0x24,
     680             :         /*
     681             :                 [0] u16 command
     682             :                 [2] u8 count
     683             :                 [3] v3s16 pos_0
     684             :                 [3+6] v3s16 pos_1
     685             :                 ...
     686             :         */
     687             : 
     688             :         TOSERVER_DELETEDBLOCKS = 0x25,
     689             :         /*
     690             :                 [0] u16 command
     691             :                 [2] u8 count
     692             :                 [3] v3s16 pos_0
     693             :                 [3+6] v3s16 pos_1
     694             :                 ...
     695             :         */
     696             : 
     697             :         TOSERVER_ADDNODE_FROM_INVENTORY = 0x26, // Obsolete
     698             :         /*
     699             :                 [0] u16 command
     700             :                 [2] v3s16 pos
     701             :                 [8] u16 i
     702             :         */
     703             : 
     704             :         TOSERVER_CLICK_OBJECT = 0x27, // Obsolete
     705             :         /*
     706             :                 length: 13
     707             :                 [0] u16 command
     708             :                 [2] u8 button (0=left, 1=right)
     709             :                 [3] v3s16 blockpos
     710             :                 [9] s16 id
     711             :                 [11] u16 item
     712             :         */
     713             : 
     714             :         TOSERVER_GROUND_ACTION = 0x28, // Obsolete
     715             :         /*
     716             :                 length: 17
     717             :                 [0] u16 command
     718             :                 [2] u8 action
     719             :                 [3] v3s16 nodepos_undersurface
     720             :                 [9] v3s16 nodepos_abovesurface
     721             :                 [15] u16 item
     722             :                 actions:
     723             :                 0: start digging (from undersurface)
     724             :                 1: place block (to abovesurface)
     725             :                 2: stop digging (all parameters ignored)
     726             :                 3: digging completed
     727             :         */
     728             : 
     729             :         TOSERVER_RELEASE = 0x29, // Obsolete
     730             : 
     731             :         // (oops, there is some gap here)
     732             : 
     733             :         TOSERVER_SIGNTEXT = 0x30, // Old signs, obsolete
     734             :         /*
     735             :                 u16 command
     736             :                 v3s16 blockpos
     737             :                 s16 id
     738             :                 u16 textlen
     739             :                 textdata
     740             :         */
     741             : 
     742             :         TOSERVER_INVENTORY_ACTION = 0x31,
     743             :         /*
     744             :                 See InventoryAction in inventorymanager.h
     745             :         */
     746             : 
     747             :         TOSERVER_CHAT_MESSAGE = 0x32,
     748             :         /*
     749             :                 u16 command
     750             :                 u16 length
     751             :                 wstring message
     752             :         */
     753             : 
     754             :         TOSERVER_SIGNNODETEXT = 0x33, // obsolete
     755             :         /*
     756             :                 u16 command
     757             :                 v3s16 p
     758             :                 u16 textlen
     759             :                 textdata
     760             :         */
     761             : 
     762             :         TOSERVER_CLICK_ACTIVEOBJECT = 0x34, // Obsolete
     763             :         /*
     764             :                 length: 7
     765             :                 [0] u16 command
     766             :                 [2] u8 button (0=left, 1=right)
     767             :                 [3] u16 id
     768             :                 [5] u16 item
     769             :         */
     770             : 
     771             :         TOSERVER_DAMAGE = 0x35,
     772             :         /*
     773             :                 u16 command
     774             :                 u8 amount
     775             :         */
     776             : 
     777             :         TOSERVER_PASSWORD_LEGACY = 0x36,
     778             :         /*
     779             :                 Sent to change password.
     780             : 
     781             :                 [0] u16 TOSERVER_PASSWORD
     782             :                 [2] u8[28] old password
     783             :                 [30] u8[28] new password
     784             :         */
     785             : 
     786             :         TOSERVER_PLAYERITEM = 0x37,
     787             :         /*
     788             :                 Sent to change selected item.
     789             : 
     790             :                 [0] u16 TOSERVER_PLAYERITEM
     791             :                 [2] u16 item
     792             :         */
     793             : 
     794             :         TOSERVER_RESPAWN = 0x38,
     795             :         /*
     796             :                 u16 TOSERVER_RESPAWN
     797             :         */
     798             : 
     799             :         TOSERVER_INTERACT = 0x39,
     800             :         /*
     801             :                 [0] u16 command
     802             :                 [2] u8 action
     803             :                 [3] u16 item
     804             :                 [5] u32 length of the next item
     805             :                 [9] serialized PointedThing
     806             :                 actions:
     807             :                 0: start digging (from undersurface) or use
     808             :                 1: stop digging (all parameters ignored)
     809             :                 2: digging completed
     810             :                 3: place block or item (to abovesurface)
     811             :                 4: use item
     812             : 
     813             :                 (Obsoletes TOSERVER_GROUND_ACTION and TOSERVER_CLICK_ACTIVEOBJECT.)
     814             :         */
     815             : 
     816             :         TOSERVER_REMOVED_SOUNDS = 0x3a,
     817             :         /*
     818             :                 u16 command
     819             :                 u16 len
     820             :                 s32[len] sound_id
     821             :         */
     822             : 
     823             :         TOSERVER_NODEMETA_FIELDS = 0x3b,
     824             :         /*
     825             :                 u16 command
     826             :                 v3s16 p
     827             :                 u16 len
     828             :                 u8[len] form name (reserved for future use)
     829             :                 u16 number of fields
     830             :                 for each field:
     831             :                         u16 len
     832             :                         u8[len] field name
     833             :                         u32 len
     834             :                         u8[len] field value
     835             :         */
     836             : 
     837             :         TOSERVER_INVENTORY_FIELDS = 0x3c,
     838             :         /*
     839             :                 u16 command
     840             :                 u16 len
     841             :                 u8[len] form name (reserved for future use)
     842             :                 u16 number of fields
     843             :                 for each field:
     844             :                         u16 len
     845             :                         u8[len] field name
     846             :                         u32 len
     847             :                         u8[len] field value
     848             :         */
     849             : 
     850             :         TOSERVER_REQUEST_MEDIA = 0x40,
     851             :         /*
     852             :                 u16 command
     853             :                 u16 number of files requested
     854             :                 for each file {
     855             :                         u16 length of name
     856             :                         string name
     857             :                 }
     858             :          */
     859             : 
     860             :         TOSERVER_RECEIVED_MEDIA = 0x41,
     861             :         /*
     862             :                 u16 command
     863             :         */
     864             : 
     865             :         TOSERVER_BREATH = 0x42,
     866             :         /*
     867             :                 u16 command
     868             :                 u16 breath
     869             :         */
     870             : 
     871             :         TOSERVER_CLIENT_READY = 0x43,
     872             :         /*
     873             :                 u8 major
     874             :                 u8 minor
     875             :                 u8 patch
     876             :                 u8 reserved
     877             :                 u16 len
     878             :                 u8[len] full_version_string
     879             :         */
     880             : 
     881             :         TOSERVER_FIRST_SRP = 0x50,
     882             :         /*
     883             :                 Belonging to AUTH_MECHANISM_FIRST_SRP.
     884             : 
     885             :                 std::string srp salt
     886             :                 std::string srp verification key
     887             :                 u8 is_empty (=1 if password is empty, 0 otherwise)
     888             :         */
     889             : 
     890             :         TOSERVER_SRP_BYTES_A = 0x51,
     891             :         /*
     892             :                 Belonging to AUTH_MECHANISM_LEGACY_PASSWORD and AUTH_MECHANISM_SRP,
     893             :                         depending on current_login_based_on.
     894             : 
     895             :                 std::string bytes_A
     896             :                 u8 current_login_based_on : on which version of the password's
     897             :                                             hash this login is based on (0 legacy hash,
     898             :                                             or 1 directly the password)
     899             :         */
     900             : 
     901             :         TOSERVER_SRP_BYTES_M = 0x52,
     902             :         /*
     903             :                 Belonging to AUTH_MECHANISM_LEGACY_PASSWORD and AUTH_MECHANISM_SRP.
     904             : 
     905             :                 std::string bytes_M
     906             :         */
     907             : 
     908             :         TOSERVER_NUM_MSG_TYPES = 0x53,
     909             : };
     910             : 
     911             : enum AuthMechanism
     912             : {
     913             :         // reserved
     914             :         AUTH_MECHANISM_NONE = 0,
     915             : 
     916             :         // SRP based on the legacy hash
     917             :         AUTH_MECHANISM_LEGACY_PASSWORD = 1 << 0,
     918             : 
     919             :         // SRP based on the srp verification key
     920             :         AUTH_MECHANISM_SRP = 1 << 1,
     921             : 
     922             :         // Establishes a srp verification key, for first login and password changing
     923             :         AUTH_MECHANISM_FIRST_SRP = 1 << 2,
     924             : };
     925             : 
     926             : enum AccessDeniedCode {
     927             :         SERVER_ACCESSDENIED_WRONG_PASSWORD,
     928             :         SERVER_ACCESSDENIED_UNEXPECTED_DATA,
     929             :         SERVER_ACCESSDENIED_SINGLEPLAYER,
     930             :         SERVER_ACCESSDENIED_WRONG_VERSION,
     931             :         SERVER_ACCESSDENIED_WRONG_CHARS_IN_NAME,
     932             :         SERVER_ACCESSDENIED_WRONG_NAME,
     933             :         SERVER_ACCESSDENIED_TOO_MANY_USERS,
     934             :         SERVER_ACCESSDENIED_EMPTY_PASSWORD,
     935             :         SERVER_ACCESSDENIED_ALREADY_CONNECTED,
     936             :         SERVER_ACCESSDENIED_SERVER_FAIL,
     937             :         SERVER_ACCESSDENIED_CUSTOM_STRING,
     938             :         SERVER_ACCESSDENIED_MAX,
     939             : };
     940             : 
     941             : enum NetProtoCompressionMode {
     942             :         NETPROTO_COMPRESSION_NONE = 0,
     943             : };
     944             : 
     945         113 : const static std::string accessDeniedStrings[SERVER_ACCESSDENIED_MAX] = {
     946             :         "Invalid password",
     947             :         "Your client sent something the server didn't expect.  Try reconnecting or updating your client",
     948             :         "The server is running in simple singleplayer mode.  You cannot connect.",
     949             :         "Your client's version is not supported.\nPlease contact server administrator.",
     950             :         "Player name contains disallowed characters.",
     951             :         "Player name not allowed.",
     952             :         "Too many users.",
     953             :         "Empty passwords are disallowed.  Set a password and try again.",
     954             :         "Another client is connected with this name.  If your client closed unexpectedly, try again in a minute.",
     955             :         "Server authention failed.  This is likely a server error."
     956             :         "",
     957          57 : };
     958             : 
     959             : #endif

Generated by: LCOV version 1.11