clientopcodes.cpp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. /*
  2. Minetest
  3. Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
  4. Copyright (C) 2015 nerzhul, Loic Blot <loic.blot@unix-experience.fr>
  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. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. GNU Lesser General Public License for more details.
  13. You should have received a copy of the GNU Lesser General Public License along
  14. with this program; if not, write to the Free Software Foundation, Inc.,
  15. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  16. */
  17. #include "clientopcodes.h"
  18. const static ToClientCommandHandler null_command_handler = {"TOCLIENT_NULL", TOCLIENT_STATE_ALL, &Client::handleCommand_Null};
  19. const ToClientCommandHandler toClientCommandTable[TOCLIENT_NUM_MSG_TYPES] =
  20. {
  21. null_command_handler, // 0x00 (never use this)
  22. null_command_handler, // 0x01
  23. { "TOCLIENT_HELLO", TOCLIENT_STATE_NOT_CONNECTED, &Client::handleCommand_Hello }, // 0x02
  24. { "TOCLIENT_AUTH_ACCEPT", TOCLIENT_STATE_NOT_CONNECTED, &Client::handleCommand_AuthAccept }, // 0x03
  25. { "TOCLIENT_ACCEPT_SUDO_MODE", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_AcceptSudoMode}, // 0x04
  26. { "TOCLIENT_DENY_SUDO_MODE", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_DenySudoMode}, // 0x05
  27. null_command_handler, // 0x06
  28. null_command_handler, // 0x07
  29. null_command_handler, // 0x08
  30. null_command_handler, // 0x09
  31. { "TOCLIENT_ACCESS_DENIED", TOCLIENT_STATE_NOT_CONNECTED, &Client::handleCommand_AccessDenied }, // 0x0A
  32. null_command_handler, // 0x0B
  33. null_command_handler, // 0x0C
  34. null_command_handler, // 0x0D
  35. null_command_handler, // 0x0E
  36. null_command_handler, // 0x0F
  37. null_command_handler, // 0x10
  38. null_command_handler,
  39. null_command_handler,
  40. null_command_handler,
  41. null_command_handler,
  42. null_command_handler,
  43. null_command_handler,
  44. null_command_handler,
  45. null_command_handler,
  46. null_command_handler,
  47. null_command_handler,
  48. null_command_handler,
  49. null_command_handler,
  50. null_command_handler,
  51. null_command_handler,
  52. null_command_handler,
  53. { "TOCLIENT_BLOCKDATA", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_BlockData }, // 0x20
  54. { "TOCLIENT_ADDNODE", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_AddNode }, // 0x21
  55. { "TOCLIENT_REMOVENODE", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_RemoveNode }, // 0x22
  56. null_command_handler,
  57. null_command_handler,
  58. null_command_handler,
  59. null_command_handler,
  60. { "TOCLIENT_INVENTORY", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_Inventory }, // 0x27
  61. null_command_handler,
  62. { "TOCLIENT_TIME_OF_DAY", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_TimeOfDay }, // 0x29
  63. { "TOCLIENT_CSM_RESTRICTION_FLAGS", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_CSMRestrictionFlags }, // 0x2A
  64. { "TOCLIENT_PLAYER_SPEED", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_PlayerSpeed }, // 0x2B
  65. { "TOCLIENT_MEDIA_PUSH", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_MediaPush }, // 0x2C
  66. null_command_handler,
  67. null_command_handler,
  68. { "TOCLIENT_CHAT_MESSAGE", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_ChatMessage }, // 0x2F
  69. null_command_handler, // 0x30
  70. { "TOCLIENT_ACTIVE_OBJECT_REMOVE_ADD", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_ActiveObjectRemoveAdd }, // 0x31
  71. { "TOCLIENT_ACTIVE_OBJECT_MESSAGES", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_ActiveObjectMessages }, // 0x32
  72. { "TOCLIENT_HP", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_HP }, // 0x33
  73. { "TOCLIENT_MOVE_PLAYER", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_MovePlayer }, // 0x34
  74. { "TOCLIENT_ACCESS_DENIED_LEGACY", TOCLIENT_STATE_NOT_CONNECTED, &Client::handleCommand_AccessDenied }, // 0x35
  75. { "TOCLIENT_FOV", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_Fov }, // 0x36
  76. { "TOCLIENT_DEATHSCREEN", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_DeathScreen }, // 0x37
  77. { "TOCLIENT_MEDIA", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_Media }, // 0x38
  78. null_command_handler,
  79. { "TOCLIENT_NODEDEF", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_NodeDef }, // 0x3a
  80. null_command_handler,
  81. { "TOCLIENT_ANNOUNCE_MEDIA", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_AnnounceMedia }, // 0x3c
  82. { "TOCLIENT_ITEMDEF", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_ItemDef }, // 0x3d
  83. null_command_handler,
  84. { "TOCLIENT_PLAY_SOUND", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_PlaySound }, // 0x3f
  85. { "TOCLIENT_STOP_SOUND", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_StopSound }, // 0x40
  86. { "TOCLIENT_PRIVILEGES", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_Privileges }, // 0x41
  87. { "TOCLIENT_INVENTORY_FORMSPEC", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_InventoryFormSpec }, // 0x42
  88. { "TOCLIENT_DETACHED_INVENTORY", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_DetachedInventory }, // 0x43
  89. { "TOCLIENT_SHOW_FORMSPEC", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_ShowFormSpec }, // 0x44
  90. { "TOCLIENT_MOVEMENT", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_Movement }, // 0x45
  91. { "TOCLIENT_SPAWN_PARTICLE", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_SpawnParticle }, // 0x46
  92. { "TOCLIENT_ADD_PARTICLESPAWNER", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_AddParticleSpawner }, // 0x47
  93. null_command_handler,
  94. { "TOCLIENT_HUDADD", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_HudAdd }, // 0x49
  95. { "TOCLIENT_HUDRM", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_HudRemove }, // 0x4a
  96. { "TOCLIENT_HUDCHANGE", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_HudChange }, // 0x4b
  97. { "TOCLIENT_HUD_SET_FLAGS", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_HudSetFlags }, // 0x4c
  98. { "TOCLIENT_HUD_SET_PARAM", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_HudSetParam }, // 0x4d
  99. { "TOCLIENT_BREATH", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_Breath }, // 0x4e
  100. { "TOCLIENT_SET_SKY", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_HudSetSky }, // 0x4f
  101. { "TOCLIENT_OVERRIDE_DAY_NIGHT_RATIO", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_OverrideDayNightRatio }, // 0x50
  102. { "TOCLIENT_LOCAL_PLAYER_ANIMATIONS", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_LocalPlayerAnimations }, // 0x51
  103. { "TOCLIENT_EYE_OFFSET", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_EyeOffset }, // 0x52
  104. { "TOCLIENT_DELETE_PARTICLESPAWNER", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_DeleteParticleSpawner }, // 0x53
  105. { "TOCLIENT_CLOUD_PARAMS", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_CloudParams }, // 0x54
  106. { "TOCLIENT_FADE_SOUND", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_FadeSound }, // 0x55
  107. { "TOCLIENT_UPDATE_PLAYER_LIST", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_UpdatePlayerList }, // 0x56
  108. { "TOCLIENT_MODCHANNEL_MSG", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_ModChannelMsg }, // 0x57
  109. { "TOCLIENT_MODCHANNEL_SIGNAL", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_ModChannelSignal }, // 0x58
  110. { "TOCLIENT_NODEMETA_CHANGED", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_NodemetaChanged }, // 0x59
  111. { "TOCLIENT_SET_SUN", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_HudSetSun }, // 0x5a
  112. { "TOCLIENT_SET_MOON", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_HudSetMoon }, // 0x5b
  113. { "TOCLIENT_SET_STARS", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_HudSetStars }, // 0x5c
  114. null_command_handler,
  115. null_command_handler,
  116. null_command_handler,
  117. { "TOCLIENT_SRP_BYTES_S_B", TOCLIENT_STATE_NOT_CONNECTED, &Client::handleCommand_SrpBytesSandB }, // 0x60
  118. { "TOCLIENT_FORMSPEC_PREPEND", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_FormspecPrepend }, // 0x61,
  119. { "TOCLIENT_MINIMAP_MODES", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_MinimapModes }, // 0x62,
  120. };
  121. const static ServerCommandFactory null_command_factory = { "TOSERVER_NULL", 0, false };
  122. /*
  123. Channels used for Client -> Server communication
  124. 2: Notifications back to the server (e.g. GOTBLOCKS)
  125. 1: Init and Authentication
  126. 0: everything else
  127. Packet order is only guaranteed inside a channel, so packets that operate on
  128. the same objects are *required* to be in the same channel.
  129. */
  130. const ServerCommandFactory serverCommandFactoryTable[TOSERVER_NUM_MSG_TYPES] =
  131. {
  132. null_command_factory, // 0x00
  133. null_command_factory, // 0x01
  134. { "TOSERVER_INIT", 1, false }, // 0x02
  135. null_command_factory, // 0x03
  136. null_command_factory, // 0x04
  137. null_command_factory, // 0x05
  138. null_command_factory, // 0x06
  139. null_command_factory, // 0x07
  140. null_command_factory, // 0x08
  141. null_command_factory, // 0x09
  142. null_command_factory, // 0x0a
  143. null_command_factory, // 0x0b
  144. null_command_factory, // 0x0c
  145. null_command_factory, // 0x0d
  146. null_command_factory, // 0x0e
  147. null_command_factory, // 0x0f
  148. null_command_factory, // 0x10
  149. { "TOSERVER_INIT2", 1, true }, // 0x11
  150. null_command_factory, // 0x12
  151. null_command_factory, // 0x13
  152. null_command_factory, // 0x14
  153. null_command_factory, // 0x15
  154. null_command_factory, // 0x16
  155. { "TOSERVER_MODCHANNEL_JOIN", 0, true }, // 0x17
  156. { "TOSERVER_MODCHANNEL_LEAVE", 0, true }, // 0x18
  157. { "TOSERVER_MODCHANNEL_MSG", 0, true }, // 0x19
  158. null_command_factory, // 0x1a
  159. null_command_factory, // 0x1b
  160. null_command_factory, // 0x1c
  161. null_command_factory, // 0x1d
  162. null_command_factory, // 0x1e
  163. null_command_factory, // 0x1f
  164. null_command_factory, // 0x20
  165. null_command_factory, // 0x21
  166. null_command_factory, // 0x22
  167. { "TOSERVER_PLAYERPOS", 0, false }, // 0x23
  168. { "TOSERVER_GOTBLOCKS", 2, true }, // 0x24
  169. { "TOSERVER_DELETEDBLOCKS", 2, true }, // 0x25
  170. null_command_factory, // 0x26
  171. null_command_factory, // 0x27
  172. null_command_factory, // 0x28
  173. null_command_factory, // 0x29
  174. null_command_factory, // 0x2a
  175. null_command_factory, // 0x2b
  176. null_command_factory, // 0x2c
  177. null_command_factory, // 0x2d
  178. null_command_factory, // 0x2e
  179. null_command_factory, // 0x2f
  180. null_command_factory, // 0x30
  181. { "TOSERVER_INVENTORY_ACTION", 0, true }, // 0x31
  182. { "TOSERVER_CHAT_MESSAGE", 0, true }, // 0x32
  183. null_command_factory, // 0x33
  184. null_command_factory, // 0x34
  185. { "TOSERVER_DAMAGE", 0, true }, // 0x35
  186. null_command_factory, // 0x36
  187. { "TOSERVER_PLAYERITEM", 0, true }, // 0x37
  188. { "TOSERVER_RESPAWN", 0, true }, // 0x38
  189. { "TOSERVER_INTERACT", 0, true }, // 0x39
  190. { "TOSERVER_REMOVED_SOUNDS", 2, true }, // 0x3a
  191. { "TOSERVER_NODEMETA_FIELDS", 0, true }, // 0x3b
  192. { "TOSERVER_INVENTORY_FIELDS", 0, true }, // 0x3c
  193. null_command_factory, // 0x3d
  194. null_command_factory, // 0x3e
  195. null_command_factory, // 0x3f
  196. { "TOSERVER_REQUEST_MEDIA", 1, true }, // 0x40
  197. null_command_factory, // 0x41
  198. null_command_factory, // 0x42
  199. { "TOSERVER_CLIENT_READY", 1, true }, // 0x43
  200. null_command_factory, // 0x44
  201. null_command_factory, // 0x45
  202. null_command_factory, // 0x46
  203. null_command_factory, // 0x47
  204. null_command_factory, // 0x48
  205. null_command_factory, // 0x49
  206. null_command_factory, // 0x4a
  207. null_command_factory, // 0x4b
  208. null_command_factory, // 0x4c
  209. null_command_factory, // 0x4d
  210. null_command_factory, // 0x4e
  211. null_command_factory, // 0x4f
  212. { "TOSERVER_FIRST_SRP", 1, true }, // 0x50
  213. { "TOSERVER_SRP_BYTES_A", 1, true }, // 0x51
  214. { "TOSERVER_SRP_BYTES_M", 1, true }, // 0x52
  215. };