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 #pragma once 21 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 Obsolete TOCLIENT_PLAYERITEM 54 PROTOCOL_VERSION 10: 55 TOCLIENT_PRIVILEGES 56 Version raised to force 'fly' and 'fast' privileges into effect. 57 Node metadata change (came in later; somewhat incompatible) 58 PROTOCOL_VERSION 11: 59 TileDef in ContentFeatures 60 Nodebox drawtype 61 (some dev snapshot) 62 TOCLIENT_INVENTORY_FORMSPEC 63 (0.4.0, 0.4.1) 64 PROTOCOL_VERSION 12: 65 TOSERVER_INVENTORY_FIELDS 66 16-bit node ids 67 TOCLIENT_DETACHED_INVENTORY 68 PROTOCOL_VERSION 13: 69 InventoryList field "Width" (deserialization fails with old versions) 70 PROTOCOL_VERSION 14: 71 Added transfer of player pressed keys to the server 72 Added new messages for mesh and bone animation, as well as attachments 73 AO_CMD_SET_ANIMATION 74 AO_CMD_SET_BONE_POSITION 75 GENERIC_CMD_SET_ATTACHMENT 76 PROTOCOL_VERSION 15: 77 Serialization format changes 78 PROTOCOL_VERSION 16: 79 TOCLIENT_SHOW_FORMSPEC 80 PROTOCOL_VERSION 17: 81 Serialization format change: include backface_culling flag in TileDef 82 Added rightclickable field in nodedef 83 TOCLIENT_SPAWN_PARTICLE 84 TOCLIENT_ADD_PARTICLESPAWNER 85 TOCLIENT_DELETE_PARTICLESPAWNER 86 PROTOCOL_VERSION 18: 87 damageGroups added to ToolCapabilities 88 sound_place added to ItemDefinition 89 PROTOCOL_VERSION 19: 90 AO_CMD_SET_PHYSICS_OVERRIDE 91 PROTOCOL_VERSION 20: 92 TOCLIENT_HUDADD 93 TOCLIENT_HUDRM 94 TOCLIENT_HUDCHANGE 95 TOCLIENT_HUD_SET_FLAGS 96 PROTOCOL_VERSION 21: 97 TOCLIENT_BREATH 98 TOSERVER_BREATH 99 range added to ItemDefinition 100 drowning, leveled and liquid_range added to ContentFeatures 101 stepheight and collideWithObjects added to object properties 102 version, heat and humidity transfer in MapBock 103 automatic_face_movement_dir and automatic_face_movement_dir_offset 104 added to object properties 105 PROTOCOL_VERSION 22: 106 add swap_node 107 PROTOCOL_VERSION 23: 108 Obsolete TOSERVER_RECEIVED_MEDIA 109 Server: Stop using TOSERVER_CLIENT_READY 110 PROTOCOL_VERSION 24: 111 ContentFeatures version 7 112 ContentFeatures: change number of special tiles to 6 (CF_SPECIAL_COUNT) 113 PROTOCOL_VERSION 25: 114 Rename TOCLIENT_ACCESS_DENIED to TOCLIENT_ACCESS_DENIED_LEGAGY 115 Rename TOCLIENT_DELETE_PARTICLESPAWNER to 116 TOCLIENT_DELETE_PARTICLESPAWNER_LEGACY 117 Rename TOSERVER_PASSWORD to TOSERVER_PASSWORD_LEGACY 118 Rename TOSERVER_INIT to TOSERVER_INIT_LEGACY 119 Rename TOCLIENT_INIT to TOCLIENT_INIT_LEGACY 120 Add TOCLIENT_ACCESS_DENIED new opcode (0x0A), using error codes 121 for standard error, keeping customisation possible. This 122 permit translation 123 Add TOCLIENT_DELETE_PARTICLESPAWNER (0x53), fixing the u16 read and 124 reading u32 125 Add new opcode TOSERVER_INIT for client presentation to server 126 Add new opcodes TOSERVER_FIRST_SRP, TOSERVER_SRP_BYTES_A, 127 TOSERVER_SRP_BYTES_M, TOCLIENT_SRP_BYTES_S_B 128 for the three supported auth mechanisms around srp 129 Add new opcodes TOCLIENT_ACCEPT_SUDO_MODE and TOCLIENT_DENY_SUDO_MODE 130 for sudo mode handling (auth mech generic way of changing password). 131 Add TOCLIENT_HELLO for presenting server to client after client 132 presentation 133 Add TOCLIENT_AUTH_ACCEPT to accept connection from client 134 Rename GENERIC_CMD_SET_ATTACHMENT to AO_CMD_ATTACH_TO 135 PROTOCOL_VERSION 26: 136 Add TileDef tileable_horizontal, tileable_vertical flags 137 PROTOCOL_VERSION 27: 138 backface_culling: backwards compatibility for playing with 139 newer client on pre-27 servers. 140 Add nodedef v3 - connected nodeboxes 141 PROTOCOL_VERSION 28: 142 CPT2_MESHOPTIONS 143 PROTOCOL_VERSION 29: 144 Server doesn't accept TOSERVER_BREATH anymore 145 serialization of TileAnimation params changed 146 TAT_SHEET_2D 147 Removed client-sided chat perdiction 148 PROTOCOL VERSION 30: 149 New ContentFeatures serialization version 150 Add node and tile color and palette 151 Fix plantlike visual_scale being applied squared and add compatibility 152 with pre-30 clients by sending sqrt(visual_scale) 153 PROTOCOL VERSION 31: 154 Add tile overlay 155 Stop sending TOSERVER_CLIENT_READY 156 PROTOCOL VERSION 32: 157 Add fading sounds 158 PROTOCOL VERSION 33: 159 Add TOCLIENT_UPDATE_PLAYER_LIST and send the player list to the client, 160 instead of guessing based on the active object list. 161 PROTOCOL VERSION 34: 162 Add sound pitch 163 PROTOCOL VERSION 35: 164 Rename TOCLIENT_CHAT_MESSAGE to TOCLIENT_CHAT_MESSAGE_OLD (0x30) 165 Add TOCLIENT_CHAT_MESSAGE (0x2F) 166 This chat message is a signalisation message containing various 167 informations: 168 * timestamp 169 * sender 170 * type (RAW, NORMAL, ANNOUNCE, SYSTEM) 171 * content 172 Add TOCLIENT_CSM_RESTRICTION_FLAGS to define which CSM features should be 173 limited 174 Add settable player collisionbox. Breaks compatibility with older 175 clients as a 1-node vertical offset has been removed from player's 176 position 177 Add settable player stepheight using existing object property. 178 Breaks compatibility with older clients. 179 PROTOCOL VERSION 36: 180 Backwards compatibility drop 181 Add 'can_zoom' to player object properties 182 Add glow to object properties 183 Change TileDef serialization format. 184 Add world-aligned tiles. 185 Mod channels 186 Raise ObjectProperties version to 3 for removing 'can_zoom' and adding 187 'zoom_fov'. 188 Nodebox version 5 189 Add disconnected nodeboxes 190 Add TOCLIENT_FORMSPEC_PREPEND 191 PROTOCOL VERSION 37: 192 Redo detached inventory sending 193 Add TOCLIENT_NODEMETA_CHANGED 194 New network float format 195 ContentFeatures version 13 196 Add full Euler rotations instead of just yaw 197 Add TOCLIENT_PLAYER_SPEED 198 PROTOCOL VERSION 38: 199 Incremental inventory sending mode 200 Unknown inventory serialization fields no longer throw an error 201 Mod-specific formspec version 202 Player FOV override API 203 "ephemeral" added to TOCLIENT_PLAY_SOUND 204 PROTOCOL VERSION 39: 205 Updated set_sky packet 206 Adds new sun, moon and stars packets 207 Minimap modes 208 */ 209 210 #define LATEST_PROTOCOL_VERSION 39 211 #define LATEST_PROTOCOL_VERSION_STRING TOSTRING(LATEST_PROTOCOL_VERSION) 212 213 // Server's supported network protocol range 214 #define SERVER_PROTOCOL_VERSION_MIN 37 215 #define SERVER_PROTOCOL_VERSION_MAX LATEST_PROTOCOL_VERSION 216 217 // Client's supported network protocol range 218 // The minimal version depends on whether 219 // send_pre_v25_init is enabled or not 220 #define CLIENT_PROTOCOL_VERSION_MIN 37 221 #define CLIENT_PROTOCOL_VERSION_MAX LATEST_PROTOCOL_VERSION 222 223 // Constant that differentiates the protocol from random data and other protocols 224 #define PROTOCOL_ID 0x4f457403 225 226 #define PASSWORD_SIZE 28 // Maximum password length. Allows for 227 // base64-encoded SHA-1 (27+\0). 228 229 // See also: Formspec Version History in doc/lua_api.txt 230 #define FORMSPEC_API_VERSION 4 231 232 #define TEXTURENAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.-" 233 234 typedef u16 session_t; 235 236 enum ToClientCommand 237 { 238 TOCLIENT_HELLO = 0x02, 239 /* 240 Sent after TOSERVER_INIT. 241 242 u8 deployed serialisation version 243 u16 deployed network compression mode 244 u16 deployed protocol version 245 u32 supported auth methods 246 std::string username that should be used for legacy hash (for proper casing) 247 */ 248 TOCLIENT_AUTH_ACCEPT = 0x03, 249 /* 250 Message from server to accept auth. 251 252 v3s16 player's position + v3f(0,BS/2,0) floatToInt'd 253 u64 map seed 254 f1000 recommended send interval 255 u32 : supported auth methods for sudo mode 256 (where the user can change their password) 257 */ 258 TOCLIENT_ACCEPT_SUDO_MODE = 0x04, 259 /* 260 Sent to client to show it is in sudo mode now. 261 */ 262 TOCLIENT_DENY_SUDO_MODE = 0x05, 263 /* 264 Signals client that sudo mode auth failed. 265 */ 266 TOCLIENT_ACCESS_DENIED = 0x0A, 267 /* 268 u8 reason 269 std::string custom reason (if needed, otherwise "") 270 u8 (bool) reconnect 271 */ 272 273 TOCLIENT_INIT_LEGACY = 0x10, // Obsolete 274 275 TOCLIENT_BLOCKDATA = 0x20, //TODO: Multiple blocks 276 TOCLIENT_ADDNODE = 0x21, 277 /* 278 v3s16 position 279 serialized mapnode 280 u8 keep_metadata // Added in protocol version 22 281 */ 282 TOCLIENT_REMOVENODE = 0x22, 283 284 TOCLIENT_PLAYERPOS = 0x23, // Obsolete 285 TOCLIENT_PLAYERINFO = 0x24, // Obsolete 286 TOCLIENT_OPT_BLOCK_NOT_FOUND = 0x25, // Obsolete 287 TOCLIENT_SECTORMETA = 0x26, // Obsolete 288 289 TOCLIENT_INVENTORY = 0x27, 290 /* 291 [0] u16 command 292 [2] serialized inventory 293 */ 294 295 TOCLIENT_OBJECTDATA = 0x28, // Obsolete 296 297 TOCLIENT_TIME_OF_DAY = 0x29, 298 /* 299 u16 time (0-23999) 300 Added in a later version: 301 f1000 time_speed 302 */ 303 304 TOCLIENT_CSM_RESTRICTION_FLAGS = 0x2A, 305 /* 306 u32 CSMRestrictionFlags byteflag 307 */ 308 309 TOCLIENT_PLAYER_SPEED = 0x2B, 310 /* 311 v3f added_vel 312 */ 313 314 TOCLIENT_MEDIA_PUSH = 0x2C, 315 /* 316 std::string raw_hash 317 std::string filename 318 bool should_be_cached 319 u32 len 320 char filedata[len] 321 */ 322 323 // (oops, there is some gap here) 324 325 TOCLIENT_CHAT_MESSAGE = 0x2F, 326 /* 327 u8 version 328 u8 message_type 329 u16 sendername length 330 wstring sendername 331 u16 length 332 wstring message 333 */ 334 335 TOCLIENT_CHAT_MESSAGE_OLD = 0x30, // Obsolete 336 337 TOCLIENT_ACTIVE_OBJECT_REMOVE_ADD = 0x31, 338 /* 339 u16 count of removed objects 340 for all removed objects { 341 u16 id 342 } 343 u16 count of added objects 344 for all added objects { 345 u16 id 346 u8 type 347 u32 initialization data length 348 string initialization data 349 } 350 */ 351 352 TOCLIENT_ACTIVE_OBJECT_MESSAGES = 0x32, 353 /* 354 for all objects 355 { 356 u16 id 357 u16 message length 358 string message 359 } 360 */ 361 362 TOCLIENT_HP = 0x33, 363 /* 364 u8 hp 365 */ 366 367 TOCLIENT_MOVE_PLAYER = 0x34, 368 /* 369 v3f1000 player position 370 f1000 player pitch 371 f1000 player yaw 372 */ 373 374 TOCLIENT_ACCESS_DENIED_LEGACY = 0x35, 375 /* 376 u16 reason_length 377 wstring reason 378 */ 379 380 TOCLIENT_FOV = 0x36, 381 /* 382 Sends an FOV override/multiplier to client. 383 384 f32 fov 385 bool is_multiplier 386 f32 transition_time 387 */ 388 389 TOCLIENT_DEATHSCREEN = 0x37, 390 /* 391 u8 bool set camera point target 392 v3f1000 camera point target (to point the death cause or whatever) 393 */ 394 395 TOCLIENT_MEDIA = 0x38, 396 /* 397 u16 total number of texture bunches 398 u16 index of this bunch 399 u32 number of files in this bunch 400 for each file { 401 u16 length of name 402 string name 403 u32 length of data 404 data 405 } 406 u16 length of remote media server url (if applicable) 407 string url 408 */ 409 410 TOCLIENT_TOOLDEF = 0x39, 411 /* 412 u32 length of the next item 413 serialized ToolDefManager 414 */ 415 416 TOCLIENT_NODEDEF = 0x3a, 417 /* 418 u32 length of the next item 419 serialized NodeDefManager 420 */ 421 422 TOCLIENT_CRAFTITEMDEF = 0x3b, 423 /* 424 u32 length of the next item 425 serialized CraftiItemDefManager 426 */ 427 428 TOCLIENT_ANNOUNCE_MEDIA = 0x3c, 429 430 /* 431 u32 number of files 432 for each texture { 433 u16 length of name 434 string name 435 u16 length of sha1_digest 436 string sha1_digest 437 } 438 */ 439 440 TOCLIENT_ITEMDEF = 0x3d, 441 /* 442 u32 length of next item 443 serialized ItemDefManager 444 */ 445 446 TOCLIENT_PLAY_SOUND = 0x3f, 447 /* 448 s32 sound_id 449 u16 len 450 u8[len] sound name 451 s32 gain*1000 452 u8 type (0=local, 1=positional, 2=object) 453 s32[3] pos_nodes*10000 454 u16 object_id 455 u8 loop (bool) 456 u8 ephemeral (bool) 457 */ 458 459 TOCLIENT_STOP_SOUND = 0x40, 460 /* 461 s32 sound_id 462 */ 463 464 TOCLIENT_PRIVILEGES = 0x41, 465 /* 466 u16 number of privileges 467 for each privilege 468 u16 len 469 u8[len] privilege 470 */ 471 472 TOCLIENT_INVENTORY_FORMSPEC = 0x42, 473 /* 474 u32 len 475 u8[len] formspec 476 */ 477 478 TOCLIENT_DETACHED_INVENTORY = 0x43, 479 /* 480 [0] u16 command 481 u16 len 482 u8[len] name 483 [2] serialized inventory 484 */ 485 486 TOCLIENT_SHOW_FORMSPEC = 0x44, 487 /* 488 [0] u16 command 489 u32 len 490 u8[len] formspec 491 u16 len 492 u8[len] formname 493 */ 494 495 TOCLIENT_MOVEMENT = 0x45, 496 /* 497 f1000 movement_acceleration_default 498 f1000 movement_acceleration_air 499 f1000 movement_acceleration_fast 500 f1000 movement_speed_walk 501 f1000 movement_speed_crouch 502 f1000 movement_speed_fast 503 f1000 movement_speed_climb 504 f1000 movement_speed_jump 505 f1000 movement_liquid_fluidity 506 f1000 movement_liquid_fluidity_smooth 507 f1000 movement_liquid_sink 508 f1000 movement_gravity 509 */ 510 511 TOCLIENT_SPAWN_PARTICLE = 0x46, 512 /* 513 v3f1000 pos 514 v3f1000 velocity 515 v3f1000 acceleration 516 f1000 expirationtime 517 f1000 size 518 u8 bool collisiondetection 519 u32 len 520 u8[len] texture 521 u8 bool vertical 522 u8 collision_removal 523 TileAnimation animation 524 u8 glow 525 u8 object_collision 526 */ 527 528 TOCLIENT_ADD_PARTICLESPAWNER = 0x47, 529 /* 530 u16 amount 531 f1000 spawntime 532 v3f1000 minpos 533 v3f1000 maxpos 534 v3f1000 minvel 535 v3f1000 maxvel 536 v3f1000 minacc 537 v3f1000 maxacc 538 f1000 minexptime 539 f1000 maxexptime 540 f1000 minsize 541 f1000 maxsize 542 u8 bool collisiondetection 543 u32 len 544 u8[len] texture 545 u8 bool vertical 546 u8 collision_removal 547 u32 id 548 TileAnimation animation 549 u8 glow 550 u8 object_collision 551 */ 552 553 TOCLIENT_DELETE_PARTICLESPAWNER_LEGACY = 0x48, // Obsolete 554 555 TOCLIENT_HUDADD = 0x49, 556 /* 557 u32 id 558 u8 type 559 v2f1000 pos 560 u16 len 561 u8[len] name 562 v2f1000 scale 563 u16 len2 564 u8[len2] text 565 u32 number 566 u32 item 567 u32 dir 568 v2f1000 align 569 v2f1000 offset 570 v3f1000 world_pos 571 v2s32 size 572 s16 z_index 573 u16 len3 574 u8[len3] text2 575 */ 576 577 TOCLIENT_HUDRM = 0x4a, 578 /* 579 u32 id 580 */ 581 582 TOCLIENT_HUDCHANGE = 0x4b, 583 /* 584 u32 id 585 u8 stat 586 [v2f1000 data | 587 u32 len 588 u8[len] data | 589 u32 data] 590 */ 591 592 TOCLIENT_HUD_SET_FLAGS = 0x4c, 593 /* 594 u32 flags 595 u32 mask 596 */ 597 598 TOCLIENT_HUD_SET_PARAM = 0x4d, 599 /* 600 u16 param 601 u16 len 602 u8[len] value 603 */ 604 605 TOCLIENT_BREATH = 0x4e, 606 /* 607 u16 breath 608 */ 609 610 TOCLIENT_SET_SKY = 0x4f, 611 /* 612 Protocol 38: 613 u8[4] base_color (ARGB) 614 u8 len 615 u8[len] type 616 u16 count 617 foreach count: 618 u8 len 619 u8[len] param 620 u8 clouds (boolean) 621 622 Protocol 39: 623 u8[4] bgcolor (ARGB) 624 std::string type 625 int texture_count 626 std::string[6] param 627 bool clouds 628 bool bgcolor_fog 629 u8[4] day_sky (ARGB) 630 u8[4] day_horizon (ARGB) 631 u8[4] dawn_sky (ARGB) 632 u8[4] dawn_horizon (ARGB) 633 u8[4] night_sky (ARGB) 634 u8[4] night_horizon (ARGB) 635 u8[4] indoors (ARGB) 636 u8[4] fog_sun_tint (ARGB) 637 u8[4] fog_moon_tint (ARGB) 638 std::string fog_tint_type 639 */ 640 641 TOCLIENT_OVERRIDE_DAY_NIGHT_RATIO = 0x50, 642 /* 643 u8 do_override (boolean) 644 u16 day-night ratio 0...65535 645 */ 646 647 TOCLIENT_LOCAL_PLAYER_ANIMATIONS = 0x51, 648 /* 649 v2s32 stand/idle 650 v2s32 walk 651 v2s32 dig 652 v2s32 walk+dig 653 f1000 frame_speed 654 */ 655 656 TOCLIENT_EYE_OFFSET = 0x52, 657 /* 658 v3f1000 first 659 v3f1000 third 660 */ 661 662 TOCLIENT_DELETE_PARTICLESPAWNER = 0x53, 663 /* 664 u32 id 665 */ 666 667 TOCLIENT_CLOUD_PARAMS = 0x54, 668 /* 669 f1000 density 670 u8[4] color_diffuse (ARGB) 671 u8[4] color_ambient (ARGB) 672 f1000 height 673 f1000 thickness 674 v2f1000 speed 675 */ 676 677 TOCLIENT_FADE_SOUND = 0x55, 678 /* 679 s32 sound_id 680 float step 681 float gain 682 */ 683 TOCLIENT_UPDATE_PLAYER_LIST = 0x56, 684 /* 685 u8 type 686 u16 number of players 687 for each player 688 u16 len 689 u8[len] player name 690 */ 691 692 TOCLIENT_MODCHANNEL_MSG = 0x57, 693 /* 694 u16 channel name length 695 std::string channel name 696 u16 channel name sender 697 std::string channel name 698 u16 message length 699 std::string message 700 */ 701 702 TOCLIENT_MODCHANNEL_SIGNAL = 0x58, 703 /* 704 u8 signal id 705 u16 channel name length 706 std::string channel name 707 */ 708 709 TOCLIENT_NODEMETA_CHANGED = 0x59, 710 /* 711 serialized and compressed node metadata 712 */ 713 714 TOCLIENT_SET_SUN = 0x5a, 715 /* 716 bool visible 717 std::string texture 718 std::string tonemap 719 std::string sunrise 720 f32 scale 721 */ 722 723 TOCLIENT_SET_MOON = 0x5b, 724 /* 725 bool visible 726 std::string texture 727 std::string tonemap 728 f32 scale 729 */ 730 731 TOCLIENT_SET_STARS = 0x5c, 732 /* 733 bool visible 734 u32 count 735 u8[4] starcolor (ARGB) 736 f32 scale 737 */ 738 739 TOCLIENT_SRP_BYTES_S_B = 0x60, 740 /* 741 Belonging to AUTH_MECHANISM_SRP. 742 743 std::string bytes_s 744 std::string bytes_B 745 */ 746 747 TOCLIENT_FORMSPEC_PREPEND = 0x61, 748 /* 749 u16 len 750 u8[len] formspec 751 */ 752 753 TOCLIENT_MINIMAP_MODES = 0x62, 754 /* 755 u16 count // modes 756 u16 mode // wanted current mode index after change 757 for each mode 758 u16 type 759 std::string label 760 u16 size 761 std::string extra 762 */ 763 764 TOCLIENT_NUM_MSG_TYPES = 0x63, 765 }; 766 767 enum ToServerCommand 768 { 769 TOSERVER_INIT = 0x02, 770 /* 771 Sent first after connected. 772 773 u8 serialisation version (=SER_FMT_VER_HIGHEST_READ) 774 u16 supported network compression modes 775 u16 minimum supported network protocol version 776 u16 maximum supported network protocol version 777 std::string player name 778 */ 779 780 TOSERVER_INIT_LEGACY = 0x10, // Obsolete 781 782 TOSERVER_INIT2 = 0x11, 783 /* 784 Sent as an ACK for TOCLIENT_INIT. 785 After this, the server can send data. 786 787 [0] u16 TOSERVER_INIT2 788 */ 789 790 TOSERVER_MODCHANNEL_JOIN = 0x17, 791 /* 792 u16 channel name length 793 std::string channel name 794 */ 795 796 TOSERVER_MODCHANNEL_LEAVE = 0x18, 797 /* 798 u16 channel name length 799 std::string channel name 800 */ 801 802 TOSERVER_MODCHANNEL_MSG = 0x19, 803 /* 804 u16 channel name length 805 std::string channel name 806 u16 message length 807 std::string message 808 */ 809 810 TOSERVER_GETBLOCK = 0x20, // Obsolete 811 TOSERVER_ADDNODE = 0x21, // Obsolete 812 TOSERVER_REMOVENODE = 0x22, // Obsolete 813 814 TOSERVER_PLAYERPOS = 0x23, 815 /* 816 [0] u16 command 817 [2] v3s32 position*100 818 [2+12] v3s32 speed*100 819 [2+12+12] s32 pitch*100 820 [2+12+12+4] s32 yaw*100 821 [2+12+12+4+4] u32 keyPressed 822 [2+12+12+4+4+1] u8 fov*80 823 [2+12+12+4+4+4+1] u8 ceil(wanted_range / MAP_BLOCKSIZE) 824 */ 825 826 TOSERVER_GOTBLOCKS = 0x24, 827 /* 828 [0] u16 command 829 [2] u8 count 830 [3] v3s16 pos_0 831 [3+6] v3s16 pos_1 832 ... 833 */ 834 835 TOSERVER_DELETEDBLOCKS = 0x25, 836 /* 837 [0] u16 command 838 [2] u8 count 839 [3] v3s16 pos_0 840 [3+6] v3s16 pos_1 841 ... 842 */ 843 844 TOSERVER_ADDNODE_FROM_INVENTORY = 0x26, // Obsolete 845 TOSERVER_CLICK_OBJECT = 0x27, // Obsolete 846 TOSERVER_GROUND_ACTION = 0x28, // Obsolete 847 TOSERVER_RELEASE = 0x29, // Obsolete 848 TOSERVER_SIGNTEXT = 0x30, // Obsolete 849 850 TOSERVER_INVENTORY_ACTION = 0x31, 851 /* 852 See InventoryAction in inventorymanager.h 853 */ 854 855 TOSERVER_CHAT_MESSAGE = 0x32, 856 /* 857 u16 length 858 wstring message 859 */ 860 861 TOSERVER_SIGNNODETEXT = 0x33, // Obsolete 862 TOSERVER_CLICK_ACTIVEOBJECT = 0x34, // Obsolete 863 864 TOSERVER_DAMAGE = 0x35, 865 /* 866 u8 amount 867 */ 868 869 TOSERVER_PASSWORD_LEGACY = 0x36, // Obsolete 870 871 TOSERVER_PLAYERITEM = 0x37, 872 /* 873 Sent to change selected item. 874 875 [0] u16 TOSERVER_PLAYERITEM 876 [2] u16 item 877 */ 878 879 TOSERVER_RESPAWN = 0x38, 880 /* 881 u16 TOSERVER_RESPAWN 882 */ 883 884 TOSERVER_INTERACT = 0x39, 885 /* 886 [0] u16 command 887 [2] u8 action 888 [3] u16 item 889 [5] u32 length of the next item 890 [9] serialized PointedThing 891 actions: 892 0: start digging (from undersurface) or use 893 1: stop digging (all parameters ignored) 894 2: digging completed 895 3: place block or item (to abovesurface) 896 4: use item 897 */ 898 899 TOSERVER_REMOVED_SOUNDS = 0x3a, 900 /* 901 u16 len 902 s32[len] sound_id 903 */ 904 905 TOSERVER_NODEMETA_FIELDS = 0x3b, 906 /* 907 v3s16 p 908 u16 len 909 u8[len] form name (reserved for future use) 910 u16 number of fields 911 for each field: 912 u16 len 913 u8[len] field name 914 u32 len 915 u8[len] field value 916 */ 917 918 TOSERVER_INVENTORY_FIELDS = 0x3c, 919 /* 920 u16 len 921 u8[len] form name (reserved for future use) 922 u16 number of fields 923 for each field: 924 u16 len 925 u8[len] field name 926 u32 len 927 u8[len] field value 928 */ 929 930 TOSERVER_REQUEST_MEDIA = 0x40, 931 /* 932 u16 number of files requested 933 for each file { 934 u16 length of name 935 string name 936 } 937 */ 938 939 TOSERVER_RECEIVED_MEDIA = 0x41, // Obsolete 940 TOSERVER_BREATH = 0x42, // Obsolete 941 942 TOSERVER_CLIENT_READY = 0x43, 943 /* 944 u8 major 945 u8 minor 946 u8 patch 947 u8 reserved 948 u16 len 949 u8[len] full_version_string 950 */ 951 952 TOSERVER_FIRST_SRP = 0x50, 953 /* 954 Belonging to AUTH_MECHANISM_FIRST_SRP. 955 956 std::string srp salt 957 std::string srp verification key 958 u8 is_empty (=1 if password is empty, 0 otherwise) 959 */ 960 961 TOSERVER_SRP_BYTES_A = 0x51, 962 /* 963 Belonging to AUTH_MECHANISM_SRP, 964 depending on current_login_based_on. 965 966 std::string bytes_A 967 u8 current_login_based_on : on which version of the password's 968 hash this login is based on (0 legacy hash, 969 or 1 directly the password) 970 */ 971 972 TOSERVER_SRP_BYTES_M = 0x52, 973 /* 974 Belonging to AUTH_MECHANISM_SRP. 975 976 std::string bytes_M 977 */ 978 979 TOSERVER_NUM_MSG_TYPES = 0x53, 980 }; 981 982 enum AuthMechanism 983 { 984 // reserved 985 AUTH_MECHANISM_NONE = 0, 986 987 // SRP based on the legacy hash 988 AUTH_MECHANISM_LEGACY_PASSWORD = 1 << 0, 989 990 // SRP based on the srp verification key 991 AUTH_MECHANISM_SRP = 1 << 1, 992 993 // Establishes a srp verification key, for first login and password changing 994 AUTH_MECHANISM_FIRST_SRP = 1 << 2, 995 }; 996 997 enum AccessDeniedCode { 998 SERVER_ACCESSDENIED_WRONG_PASSWORD, 999 SERVER_ACCESSDENIED_UNEXPECTED_DATA, 1000 SERVER_ACCESSDENIED_SINGLEPLAYER, 1001 SERVER_ACCESSDENIED_WRONG_VERSION, 1002 SERVER_ACCESSDENIED_WRONG_CHARS_IN_NAME, 1003 SERVER_ACCESSDENIED_WRONG_NAME, 1004 SERVER_ACCESSDENIED_TOO_MANY_USERS, 1005 SERVER_ACCESSDENIED_EMPTY_PASSWORD, 1006 SERVER_ACCESSDENIED_ALREADY_CONNECTED, 1007 SERVER_ACCESSDENIED_SERVER_FAIL, 1008 SERVER_ACCESSDENIED_CUSTOM_STRING, 1009 SERVER_ACCESSDENIED_SHUTDOWN, 1010 SERVER_ACCESSDENIED_CRASH, 1011 SERVER_ACCESSDENIED_MAX, 1012 }; 1013 1014 enum NetProtoCompressionMode { 1015 NETPROTO_COMPRESSION_NONE = 0, 1016 }; 1017 1018 const static std::string accessDeniedStrings[SERVER_ACCESSDENIED_MAX] = { 1019 "Invalid password", 1020 "Your client sent something the server didn't expect. Try reconnecting or updating your client", 1021 "The server is running in simple singleplayer mode. You cannot connect.", 1022 "Your client's version is not supported.\nPlease contact server administrator.", 1023 "Player name contains disallowed characters.", 1024 "Player name not allowed.", 1025 "Too many users.", 1026 "Empty passwords are disallowed. Set a password and try again.", 1027 "Another client is connected with this name. If your client closed unexpectedly, try again in a minute.", 1028 "Server authentication failed. This is likely a server error.", 1029 "", 1030 "Server shutting down.", 1031 "This server has experienced an internal error. You will now be disconnected." 1032 }; 1033 1034 enum PlayerListModifer : u8 1035 { 1036 PLAYER_LIST_INIT, 1037 PLAYER_LIST_ADD, 1038 PLAYER_LIST_REMOVE, 1039 }; 1040 1041 enum CSMRestrictionFlags : u64 { 1042 CSM_RF_NONE = 0x00000000, 1043 // Until server-sent CSM and verifying of builtin are complete, 1044 // 'CSM_RF_LOAD_CLIENT_MODS' also disables loading 'builtin'. 1045 // When those are complete, this should return to only being a restriction on the 1046 // loading of client mods. 1047 CSM_RF_LOAD_CLIENT_MODS = 0x00000001, // Don't load client-provided mods or 'builtin' 1048 CSM_RF_CHAT_MESSAGES = 0x00000002, // Disable chat message sending from CSM 1049 CSM_RF_READ_ITEMDEFS = 0x00000004, // Disable itemdef lookups 1050 CSM_RF_READ_NODEDEFS = 0x00000008, // Disable nodedef lookups 1051 CSM_RF_LOOKUP_NODES = 0x00000010, // Limit node lookups 1052 CSM_RF_READ_PLAYERINFO = 0x00000020, // Disable player info lookups 1053 CSM_RF_ALL = 0xFFFFFFFF, 1054 }; 1055 1056 enum InteractAction : u8 1057 { 1058 INTERACT_START_DIGGING, // 0: start digging (from undersurface) or use 1059 INTERACT_STOP_DIGGING, // 1: stop digging (all parameters ignored) 1060 INTERACT_DIGGING_COMPLETED, // 2: digging completed 1061 INTERACT_PLACE, // 3: place block or item (to abovesurface) 1062 INTERACT_USE, // 4: use item 1063 INTERACT_ACTIVATE // 5: rightclick air ("activate") 1064 }; 1065