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
|