mirror of
https://github.com/minetest/minetest.git
synced 2024-12-28 00:47:29 +01:00
Network Layer 7 rework (Packet handling)
* Move networkcode to a dedicated directory * Rename clientserver.h to network/networkprotocol.h (Better name) and sanitize some includes * Create object NetworkPacket * It stores command (opcode) and data separated * It also stores peer_id * Data reading can be done by using a streaming interface * Change packet routing analysis * Remove old conditional analysis * Now uses function pointed analysis and add connection state ({Client,Server}::handlers) * Connection state permit to categorize condition to handle before analyze packets * Create a handler for depreciated messages, instead of duplicating code
This commit is contained in:
parent
15c037614f
commit
a704c04f00
@ -429,6 +429,9 @@ set(common_SRCS
|
||||
version.cpp
|
||||
voxel.cpp
|
||||
voxelalgorithms.cpp
|
||||
network/networkpacket.cpp
|
||||
network/serveropcodes.cpp
|
||||
network/toserverpacket.cpp
|
||||
${JTHREAD_SRCS}
|
||||
${common_SCRIPT_SRCS}
|
||||
${UTIL_SRCS}
|
||||
@ -491,6 +494,8 @@ set(minetest_SRCS
|
||||
sky.cpp
|
||||
tile.cpp
|
||||
wieldmesh.cpp
|
||||
network/clientopcodes.cpp
|
||||
network/toclientpacket.cpp
|
||||
${minetest_SCRIPT_SRCS}
|
||||
)
|
||||
list(SORT minetest_SRCS)
|
||||
|
2005
src/client.cpp
2005
src/client.cpp
File diff suppressed because it is too large
Load Diff
52
src/client.h
52
src/client.h
@ -34,6 +34,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#include "localplayer.h"
|
||||
#include "hud.h"
|
||||
#include "particles.h"
|
||||
#include "network/toclientpacket.h"
|
||||
|
||||
struct MeshMakeData;
|
||||
class MapBlockMesh;
|
||||
@ -341,7 +342,57 @@ public:
|
||||
*/
|
||||
void step(float dtime);
|
||||
|
||||
/*
|
||||
* Command Handlers
|
||||
*/
|
||||
|
||||
void handleCommand(ToClientPacket* pkt);
|
||||
|
||||
void handleCommand_Null(ToClientPacket* pkt) {};
|
||||
void handleCommand_Deprecated(ToClientPacket* pkt);
|
||||
void handleCommand_Init(ToClientPacket* pkt);
|
||||
void handleCommand_AccessDenied(ToClientPacket* pkt);
|
||||
void handleCommand_RemoveNode(ToClientPacket* pkt);
|
||||
void handleCommand_AddNode(ToClientPacket* pkt);
|
||||
void handleCommand_BlockData(ToClientPacket* pkt);
|
||||
void handleCommand_Inventory(ToClientPacket* pkt);
|
||||
void handleCommand_TimeOfDay(ToClientPacket* pkt);
|
||||
void handleCommand_ChatMessage(ToClientPacket* pkt);
|
||||
void handleCommand_ActiveObjectRemoveAdd(ToClientPacket* pkt);
|
||||
void handleCommand_ActiveObjectMessages(ToClientPacket* pkt);
|
||||
void handleCommand_Movement(ToClientPacket* pkt);
|
||||
void handleCommand_HP(ToClientPacket* pkt);
|
||||
void handleCommand_Breath(ToClientPacket* pkt);
|
||||
void handleCommand_MovePlayer(ToClientPacket* pkt);
|
||||
void handleCommand_PlayerItem(ToClientPacket* pkt);
|
||||
void handleCommand_DeathScreen(ToClientPacket* pkt);
|
||||
void handleCommand_AnnounceMedia(ToClientPacket* pkt);
|
||||
void handleCommand_Media(ToClientPacket* pkt);
|
||||
void handleCommand_ToolDef(ToClientPacket* pkt);
|
||||
void handleCommand_NodeDef(ToClientPacket* pkt);
|
||||
void handleCommand_CraftItemDef(ToClientPacket* pkt);
|
||||
void handleCommand_ItemDef(ToClientPacket* pkt);
|
||||
void handleCommand_PlaySound(ToClientPacket* pkt);
|
||||
void handleCommand_StopSound(ToClientPacket* pkt);
|
||||
void handleCommand_Privileges(ToClientPacket* pkt);
|
||||
void handleCommand_InventoryFormSpec(ToClientPacket* pkt);
|
||||
void handleCommand_DetachedInventory(ToClientPacket* pkt);
|
||||
void handleCommand_ShowFormSpec(ToClientPacket* pkt);
|
||||
void handleCommand_SpawnParticle(ToClientPacket* pkt);
|
||||
void handleCommand_AddParticleSpawner(ToClientPacket* pkt);
|
||||
void handleCommand_DeleteParticleSpawner(ToClientPacket* pkt);
|
||||
void handleCommand_HudAdd(ToClientPacket* pkt);
|
||||
void handleCommand_HudRemove(ToClientPacket* pkt);
|
||||
void handleCommand_HudChange(ToClientPacket* pkt);
|
||||
void handleCommand_HudSetFlags(ToClientPacket* pkt);
|
||||
void handleCommand_HudSetParam(ToClientPacket* pkt);
|
||||
void handleCommand_HudSetSky(ToClientPacket* pkt);
|
||||
void handleCommand_OverrideDayNightRatio(ToClientPacket* pkt);
|
||||
void handleCommand_LocalPlayerAnimations(ToClientPacket* pkt);
|
||||
void handleCommand_EyeOffset(ToClientPacket* pkt);
|
||||
|
||||
void ProcessData(u8 *data, u32 datasize, u16 sender_peer_id);
|
||||
|
||||
// Returns true if something was received
|
||||
bool AsyncProcessPacket();
|
||||
bool AsyncProcessData();
|
||||
@ -577,4 +628,3 @@ private:
|
||||
};
|
||||
|
||||
#endif // !CLIENT_HEADER
|
||||
|
||||
|
@ -22,7 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#include "util/string.h"
|
||||
#include "httpfetch.h"
|
||||
#include "client.h"
|
||||
#include "clientserver.h"
|
||||
#include "network/networkprotocol.h"
|
||||
#include "filecache.h"
|
||||
#include "filesys.h"
|
||||
#include "hex.h"
|
||||
|
@ -20,7 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
|
||||
#include "filecache.h"
|
||||
|
||||
#include "clientserver.h"
|
||||
#include "network/networkprotocol.h"
|
||||
#include "log.h"
|
||||
#include "filesys.h"
|
||||
#include <string>
|
||||
|
@ -28,7 +28,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#include "inventorymanager.h"
|
||||
#include "modalMenu.h"
|
||||
#include "guiTable.h"
|
||||
#include "clientserver.h"
|
||||
#include "network/networkprotocol.h"
|
||||
|
||||
class IGameDef;
|
||||
class InventoryManager;
|
||||
|
110
src/network/clientopcodes.cpp
Normal file
110
src/network/clientopcodes.cpp
Normal file
@ -0,0 +1,110 @@
|
||||
/*
|
||||
Minetest
|
||||
Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
|
||||
Copyright (C) 2015 nerzhul, Loic Blot <loic.blot@unix-experience.fr>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#include "clientopcodes.h"
|
||||
|
||||
const static ToClientCommandHandler null_command_handler = {"TOCLIENT_NULL", TOCLIENT_STATE_ALL, &Client::handleCommand_Null};
|
||||
|
||||
const ToClientCommandHandler toClientCommandTable[TOCLIENT_NUM_MSG_TYPES] =
|
||||
{
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
{ "TOCLIENT_INIT", TOCLIENT_STATE_NOT_CONNECTED, &Client::handleCommand_Init }, // 0x10
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
{ "TOCLIENT_BLOCKDATA", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_BlockData }, // 0x20
|
||||
{ "TOCLIENT_ADDNODE", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_AddNode }, // 0x21
|
||||
{ "TOCLIENT_REMOVENODE", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_RemoveNode }, // 0x22
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
{ "TOCLIENT_INVENTORY", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_Inventory }, // 0x27
|
||||
null_command_handler,
|
||||
{ "TOCLIENT_TIME_OF_DAY", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_TimeOfDay }, // 0x29
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
null_command_handler,
|
||||
{ "TOCLIENT_CHAT_MESSAGE", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_ChatMessage }, // 0x30
|
||||
{ "TOCLIENT_ACTIVE_OBJECT_REMOVE_ADD", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_ActiveObjectRemoveAdd }, // 0x31
|
||||
{ "TOCLIENT_ACTIVE_OBJECT_MESSAGES", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_ActiveObjectMessages }, // 0x32
|
||||
{ "TOCLIENT_HP", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_HP }, // 0x33
|
||||
{ "TOCLIENT_MOVE_PLAYER", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_MovePlayer }, // 0x34
|
||||
{ "TOCLIENT_ACCESS_DENIED", TOCLIENT_STATE_NOT_CONNECTED, &Client::handleCommand_AccessDenied }, // 0x35
|
||||
{ "TOCLIENT_PLAYERITEM", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_PlayerItem }, // 0x36
|
||||
{ "TOCLIENT_DEATHSCREEN", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_DeathScreen }, // 0x37
|
||||
{ "TOCLIENT_MEDIA", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_Media }, // 0x38
|
||||
{ "TOCLIENT_TOOLDEF", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_ToolDef }, // 0x39
|
||||
{ "TOCLIENT_NODEDEF", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_NodeDef }, // 0x3a
|
||||
{ "TOCLIENT_CRAFTITEMDEF", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_CraftItemDef }, // 0x3b
|
||||
{ "TOCLIENT_ANNOUNCE_MEDIA", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_AnnounceMedia }, // 0x3c
|
||||
{ "TOCLIENT_ITEMDEF", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_ItemDef }, // 0x3d
|
||||
null_command_handler,
|
||||
{ "TOCLIENT_PLAY_SOUND", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_PlaySound }, // 0x3f
|
||||
{ "TOCLIENT_STOP_SOUND", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_StopSound }, // 0x40
|
||||
{ "TOCLIENT_PRIVILEGES", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_Privileges }, // 0x41
|
||||
{ "TOCLIENT_INVENTORY_FORMSPEC", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_InventoryFormSpec }, // 0x42
|
||||
{ "TOCLIENT_DETACHED_INVENTORY", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_DetachedInventory }, // 0x43
|
||||
{ "TOCLIENT_SHOW_FORMSPEC", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_ShowFormSpec }, // 0x44
|
||||
{ "TOCLIENT_MOVEMENT", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_Movement }, // 0x45
|
||||
{ "TOCLIENT_SPAWN_PARTICLE", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_SpawnParticle }, // 0x46
|
||||
{ "TOCLIENT_ADD_PARTICLESPAWNER", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_AddParticleSpawner }, // 0x47
|
||||
{ "TOCLIENT_DELETE_PARTICLESPAWNER", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_DeleteParticleSpawner }, // 0x48
|
||||
{ "TOCLIENT_HUDADD", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_HudAdd }, // 0x49
|
||||
{ "TOCLIENT_HUDRM", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_HudRemove }, // 0x4a
|
||||
{ "TOCLIENT_HUDCHANGE", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_HudChange }, // 0x4b
|
||||
{ "TOCLIENT_HUD_SET_FLAGS", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_HudSetFlags }, // 0x4c
|
||||
{ "TOCLIENT_HUD_SET_PARAM", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_HudSetParam }, // 0x4d
|
||||
{ "TOCLIENT_BREATH", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_Breath }, // 0x4e
|
||||
{ "TOCLIENT_SET_SKY", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_HudSetSky }, // 0x4f
|
||||
{ "TOCLIENT_OVERRIDE_DAY_NIGHT_RATIO", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_OverrideDayNightRatio }, // 0x50
|
||||
{ "TOCLIENT_LOCAL_PLAYER_ANIMATIONS", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_LocalPlayerAnimations }, // 0x51
|
||||
{ "TOCLIENT_EYE_OFFSET", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_EyeOffset }, // 0x52
|
||||
};
|
43
src/network/clientopcodes.h
Normal file
43
src/network/clientopcodes.h
Normal file
@ -0,0 +1,43 @@
|
||||
/*
|
||||
Minetest
|
||||
Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
|
||||
Copyright (C) 2015 nerzhul, Loic Blot <loic.blot@unix-experience.fr>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#ifndef CLIENTOPCODES_HEADER
|
||||
#define CLIENTOPCODES_HEADER
|
||||
|
||||
#include "client.h"
|
||||
#include "networkprotocol.h"
|
||||
#include "toclientpacket.h"
|
||||
|
||||
enum ToClientConnectionState {
|
||||
TOCLIENT_STATE_NOT_CONNECTED,
|
||||
TOCLIENT_STATE_CONNECTED,
|
||||
TOCLIENT_STATE_ALL,
|
||||
};
|
||||
|
||||
struct ToClientCommandHandler
|
||||
{
|
||||
char const* name;
|
||||
ToClientConnectionState state;
|
||||
void (Client::*handler)(ToClientPacket* pkt);
|
||||
};
|
||||
|
||||
extern const ToClientCommandHandler toClientCommandTable[TOCLIENT_NUM_MSG_TYPES];
|
||||
|
||||
#endif
|
301
src/network/networkpacket.cpp
Normal file
301
src/network/networkpacket.cpp
Normal file
@ -0,0 +1,301 @@
|
||||
/*
|
||||
Minetest
|
||||
Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
|
||||
Copyright (C) 2015 nerzhul, Loic Blot <loic.blot@unix-experience.fr>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#include "networkpacket.h"
|
||||
#include "debug.h"
|
||||
#include "util/serialize.h"
|
||||
|
||||
NetworkPacket::NetworkPacket(u8 *data, u32 datasize, u16 peer_id):
|
||||
m_peer_id(peer_id)
|
||||
{
|
||||
m_read_offset = 0;
|
||||
m_datasize = datasize - 2;
|
||||
|
||||
// Copy data packet to remove opcode
|
||||
m_data = new u8[m_datasize];
|
||||
|
||||
memcpy(m_data, &data[2], m_datasize);
|
||||
}
|
||||
|
||||
NetworkPacket::~NetworkPacket()
|
||||
{
|
||||
delete [] m_data;
|
||||
}
|
||||
|
||||
char* NetworkPacket::getString(u32 from_offset)
|
||||
{
|
||||
assert(from_offset < m_datasize);
|
||||
|
||||
return (char*)&m_data[from_offset];
|
||||
}
|
||||
|
||||
char NetworkPacket::getChar(u32 offset)
|
||||
{
|
||||
assert(offset < m_datasize);
|
||||
|
||||
return m_data[offset];
|
||||
}
|
||||
|
||||
NetworkPacket& NetworkPacket::operator>>(std::string& dst)
|
||||
{
|
||||
u16 strLen = readU16(&m_data[m_read_offset]);
|
||||
m_read_offset += sizeof(u16);
|
||||
|
||||
dst.clear();
|
||||
|
||||
if (strLen == 0) {
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
dst.reserve(strLen);
|
||||
dst.append((char*)&m_data[m_read_offset], strLen);
|
||||
|
||||
m_read_offset += strLen*sizeof(char);
|
||||
return *this;
|
||||
}
|
||||
|
||||
NetworkPacket& NetworkPacket::operator>>(std::wstring& dst)
|
||||
{
|
||||
u16 strLen = readU16(&m_data[m_read_offset]);
|
||||
m_read_offset += sizeof(u16);
|
||||
|
||||
dst.clear();
|
||||
|
||||
if (strLen == 0) {
|
||||
return *this;
|
||||
}
|
||||
|
||||
dst.reserve(strLen);
|
||||
for(u16 i=0; i<strLen; i++) {
|
||||
wchar_t c16 = readU16(&m_data[m_read_offset]);
|
||||
dst.append(&c16, 1);
|
||||
m_read_offset += sizeof(u16);
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
std::string NetworkPacket::readLongString()
|
||||
{
|
||||
u32 strLen = readU32(&m_data[m_read_offset]);
|
||||
m_read_offset += sizeof(u32);
|
||||
|
||||
if (strLen == 0) {
|
||||
return "";
|
||||
}
|
||||
|
||||
std::string dst;
|
||||
|
||||
dst.reserve(strLen);
|
||||
dst.append((char*)&m_data[m_read_offset], strLen);
|
||||
|
||||
m_read_offset += strLen*sizeof(char);
|
||||
|
||||
return dst;
|
||||
}
|
||||
|
||||
NetworkPacket& NetworkPacket::operator>>(char& dst)
|
||||
{
|
||||
dst = getChar(m_read_offset);
|
||||
|
||||
m_read_offset += sizeof(char);
|
||||
return *this;
|
||||
}
|
||||
|
||||
u8* NetworkPacket::getU8Ptr(u32 from_offset)
|
||||
{
|
||||
assert(from_offset < m_datasize);
|
||||
|
||||
return (u8*)&m_data[from_offset];
|
||||
}
|
||||
|
||||
u8 NetworkPacket::getU8(u32 offset)
|
||||
{
|
||||
assert(offset < m_datasize);
|
||||
|
||||
return m_data[offset];
|
||||
}
|
||||
|
||||
NetworkPacket& NetworkPacket::operator>>(u8& dst)
|
||||
{
|
||||
assert(m_read_offset < m_datasize);
|
||||
dst = m_data[m_read_offset];
|
||||
|
||||
m_read_offset += sizeof(u8);
|
||||
return *this;
|
||||
}
|
||||
|
||||
NetworkPacket& NetworkPacket::operator>>(bool& dst)
|
||||
{
|
||||
assert(m_read_offset < m_datasize);
|
||||
dst = m_data[m_read_offset];
|
||||
|
||||
m_read_offset += sizeof(u8);
|
||||
return *this;
|
||||
}
|
||||
|
||||
u16 NetworkPacket::getU16(u32 from_offset)
|
||||
{
|
||||
assert(from_offset < m_datasize);
|
||||
|
||||
return readU16(&m_data[from_offset]);
|
||||
}
|
||||
|
||||
NetworkPacket& NetworkPacket::operator>>(u16& dst)
|
||||
{
|
||||
dst = getU16(m_read_offset);
|
||||
|
||||
m_read_offset += sizeof(u16);
|
||||
return *this;
|
||||
}
|
||||
|
||||
u32 NetworkPacket::getU32(u32 from_offset)
|
||||
{
|
||||
assert(from_offset < m_datasize);
|
||||
|
||||
return readU32(&m_data[from_offset]);
|
||||
}
|
||||
|
||||
NetworkPacket& NetworkPacket::operator>>(u32& dst)
|
||||
{
|
||||
dst = getU32(m_read_offset);
|
||||
|
||||
m_read_offset += sizeof(u32);
|
||||
return *this;
|
||||
}
|
||||
|
||||
u64 NetworkPacket::getU64(u32 from_offset)
|
||||
{
|
||||
assert(from_offset < m_datasize);
|
||||
|
||||
return readU64(&m_data[from_offset]);
|
||||
}
|
||||
|
||||
NetworkPacket& NetworkPacket::operator>>(u64& dst)
|
||||
{
|
||||
dst = getU64(m_read_offset);
|
||||
|
||||
m_read_offset += sizeof(u64);
|
||||
return *this;
|
||||
}
|
||||
|
||||
float NetworkPacket::getF1000(u32 from_offset)
|
||||
{
|
||||
assert(from_offset < m_datasize);
|
||||
|
||||
return readF1000(&m_data[from_offset]);
|
||||
}
|
||||
|
||||
NetworkPacket& NetworkPacket::operator>>(float& dst)
|
||||
{
|
||||
dst = getF1000(m_read_offset);
|
||||
|
||||
m_read_offset += sizeof(float);
|
||||
return *this;
|
||||
}
|
||||
|
||||
NetworkPacket& NetworkPacket::operator>>(v2f& dst)
|
||||
{
|
||||
assert(m_read_offset < m_datasize);
|
||||
|
||||
dst = readV2F1000(&m_data[m_read_offset]);
|
||||
|
||||
m_read_offset += sizeof(v2f);
|
||||
return *this;
|
||||
}
|
||||
|
||||
NetworkPacket& NetworkPacket::operator>>(v3f& dst)
|
||||
{
|
||||
assert(m_read_offset < m_datasize);
|
||||
|
||||
dst = readV3F1000(&m_data[m_read_offset]);
|
||||
|
||||
m_read_offset += sizeof(v3f);
|
||||
return *this;
|
||||
}
|
||||
|
||||
s16 NetworkPacket::getS16(u32 from_offset)
|
||||
{
|
||||
assert(from_offset < m_datasize);
|
||||
|
||||
return readS16(&m_data[from_offset]);
|
||||
}
|
||||
|
||||
NetworkPacket& NetworkPacket::operator>>(s16& dst)
|
||||
{
|
||||
dst = getS16(m_read_offset);
|
||||
|
||||
m_read_offset += sizeof(s16);
|
||||
return *this;
|
||||
}
|
||||
|
||||
s32 NetworkPacket::getS32(u32 from_offset)
|
||||
{
|
||||
assert(from_offset < m_datasize);
|
||||
|
||||
return readS32(&m_data[from_offset]);
|
||||
}
|
||||
|
||||
NetworkPacket& NetworkPacket::operator>>(s32& dst)
|
||||
{
|
||||
dst = getS32(m_read_offset);
|
||||
|
||||
m_read_offset += sizeof(s32);
|
||||
return *this;
|
||||
}
|
||||
|
||||
NetworkPacket& NetworkPacket::operator>>(v2s32& dst)
|
||||
{
|
||||
dst = readV2S32(&m_data[m_read_offset]);
|
||||
|
||||
m_read_offset += sizeof(v2s32);
|
||||
return *this;
|
||||
}
|
||||
|
||||
v3s16 NetworkPacket::getV3S16(u32 from_offset)
|
||||
{
|
||||
assert(from_offset < m_datasize);
|
||||
|
||||
return readV3S16(&m_data[from_offset]);
|
||||
}
|
||||
|
||||
NetworkPacket& NetworkPacket::operator>>(v3s16& dst)
|
||||
{
|
||||
dst = getV3S16(m_read_offset);
|
||||
|
||||
m_read_offset += sizeof(v3s16);
|
||||
return *this;
|
||||
}
|
||||
|
||||
v3s32 NetworkPacket::getV3S32(u32 from_offset)
|
||||
{
|
||||
assert(from_offset < m_datasize);
|
||||
|
||||
return readV3S32(&m_data[from_offset]);
|
||||
}
|
||||
|
||||
NetworkPacket& NetworkPacket::operator>>(v3s32& dst)
|
||||
{
|
||||
dst = getV3S32(m_read_offset);
|
||||
|
||||
m_read_offset += sizeof(v3s32);
|
||||
return *this;
|
||||
}
|
86
src/network/networkpacket.h
Normal file
86
src/network/networkpacket.h
Normal file
@ -0,0 +1,86 @@
|
||||
/*
|
||||
Minetest
|
||||
Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
|
||||
Copyright (C) 2015 nerzhul, Loic Blot <loic.blot@unix-experience.fr>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#ifndef NETWORKPACKET_HEADER
|
||||
#define NETWORKPACKET_HEADER
|
||||
|
||||
#include "util/numeric.h"
|
||||
#include "networkprotocol.h"
|
||||
|
||||
class NetworkPacket
|
||||
{
|
||||
|
||||
public:
|
||||
NetworkPacket(u8 *data, u32 datasize, u16 peer_id);
|
||||
~NetworkPacket();
|
||||
|
||||
// Getters
|
||||
u32 getSize() { return m_datasize; }
|
||||
u16 getPeerId() { return m_peer_id; }
|
||||
|
||||
// Data extractors
|
||||
char* getString(u32 from_offset);
|
||||
NetworkPacket& operator>>(std::string& dst);
|
||||
NetworkPacket& operator>>(std::wstring& dst);
|
||||
std::string readLongString();
|
||||
|
||||
char getChar(u32 offset);
|
||||
NetworkPacket& operator>>(char& dst);
|
||||
|
||||
NetworkPacket& operator>>(bool& dst);
|
||||
|
||||
u8 getU8(u32 offset);
|
||||
NetworkPacket& operator>>(u8& dst);
|
||||
|
||||
u8* getU8Ptr(u32 offset);
|
||||
u16 getU16(u32 from_offset);
|
||||
NetworkPacket& operator>>(u16& dst);
|
||||
u32 getU32(u32 from_offset);
|
||||
NetworkPacket& operator>>(u32& dst);
|
||||
u64 getU64(u32 from_offset);
|
||||
NetworkPacket& operator>>(u64& dst);
|
||||
|
||||
float getF1000(u32 offset);
|
||||
NetworkPacket& operator>>(float& dst);
|
||||
NetworkPacket& operator>>(v2f& dst);
|
||||
NetworkPacket& operator>>(v3f& dst);
|
||||
|
||||
s16 getS16(u32 from_offset);
|
||||
NetworkPacket& operator>>(s16& dst);
|
||||
s32 getS32(u32 from_offset);
|
||||
NetworkPacket& operator>>(s32& dst);
|
||||
|
||||
NetworkPacket& operator>>(v2s32& dst);
|
||||
|
||||
v3s16 getV3S16(u32 from_offset);
|
||||
NetworkPacket& operator>>(v3s16& dst);
|
||||
|
||||
v3s32 getV3S32(u32 from_offset);
|
||||
NetworkPacket& operator>>(v3s32& dst);
|
||||
|
||||
protected:
|
||||
u8 *m_data;
|
||||
u32 m_datasize;
|
||||
u32 m_read_offset;
|
||||
private:
|
||||
u16 m_peer_id;
|
||||
};
|
||||
|
||||
#endif
|
@ -17,8 +17,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#ifndef CLIENTSERVER_HEADER
|
||||
#define CLIENTSERVER_HEADER
|
||||
#ifndef NETWORKPROTOCOL_HEADER
|
||||
#define NETWORKPROTOCOL_HEADER
|
||||
#include "util/string.h"
|
||||
|
||||
/*
|
||||
@ -556,6 +556,8 @@ enum ToClientCommand
|
||||
v3f1000 first
|
||||
v3f1000 third
|
||||
*/
|
||||
|
||||
TOCLIENT_NUM_MSG_TYPES = 0x53,
|
||||
};
|
||||
|
||||
enum ToServerCommand
|
||||
@ -795,7 +797,8 @@ enum ToServerCommand
|
||||
u16 len
|
||||
u8[len] full_version_string
|
||||
*/
|
||||
|
||||
TOSERVER_NUM_MSG_TYPES = 0x44,
|
||||
};
|
||||
|
||||
#endif
|
||||
|
95
src/network/serveropcodes.cpp
Normal file
95
src/network/serveropcodes.cpp
Normal file
@ -0,0 +1,95 @@
|
||||
/*
|
||||
Minetest
|
||||
Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
|
||||
Copyright (C) 2015 nerzhul, Loic Blot <loic.blot@unix-experience.fr>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#include "serveropcodes.h"
|
||||
|
||||
const static ToServerCommandHandler null_command_handler = { "TOSERVER_NULL", TOSERVER_STATE_ALL, &Server::handleCommand_Null };
|
||||
|
||||
const ToServerCommandHandler toServerCommandTable[TOSERVER_NUM_MSG_TYPES] =
|
||||
{
|
||||
null_command_handler, // 0x00
|
||||
null_command_handler, // 0x01
|
||||
null_command_handler, // 0x02
|
||||
null_command_handler, // 0x03
|
||||
null_command_handler, // 0x04
|
||||
null_command_handler, // 0x05
|
||||
null_command_handler, // 0x06
|
||||
null_command_handler, // 0x07
|
||||
null_command_handler, // 0x08
|
||||
null_command_handler, // 0x09
|
||||
null_command_handler, // 0x0a
|
||||
null_command_handler, // 0x0b
|
||||
null_command_handler, // 0x0c
|
||||
null_command_handler, // 0x0d
|
||||
null_command_handler, // 0x0e
|
||||
null_command_handler, // 0x0f
|
||||
{ "TOSERVER_INIT", TOSERVER_STATE_NOT_CONNECTED, &Server::handleCommand_Init }, // 0x10
|
||||
{ "TOSERVER_INIT2", TOSERVER_STATE_NOT_CONNECTED, &Server::handleCommand_Init2 }, // 0x11
|
||||
null_command_handler, // 0x12
|
||||
null_command_handler, // 0x13
|
||||
null_command_handler, // 0x14
|
||||
null_command_handler, // 0x15
|
||||
null_command_handler, // 0x16
|
||||
null_command_handler, // 0x17
|
||||
null_command_handler, // 0x18
|
||||
null_command_handler, // 0x19
|
||||
null_command_handler, // 0x1a
|
||||
null_command_handler, // 0x1b
|
||||
null_command_handler, // 0x1c
|
||||
null_command_handler, // 0x1d
|
||||
null_command_handler, // 0x1e
|
||||
null_command_handler, // 0x1f
|
||||
null_command_handler, // 0x20
|
||||
null_command_handler, // 0x21
|
||||
null_command_handler, // 0x22
|
||||
{ "TOSERVER_PLAYERPOS", TOSERVER_STATE_INGAME, &Server::handleCommand_PlayerPos }, // 0x23
|
||||
{ "TOSERVER_GOTBLOCKS", TOSERVER_STATE_STARTUP, &Server::handleCommand_GotBlocks }, // 0x24
|
||||
{ "TOSERVER_DELETEDBLOCKS", TOSERVER_STATE_INGAME, &Server::handleCommand_DeletedBlocks }, // 0x25
|
||||
null_command_handler, // 0x26
|
||||
{ "TOSERVER_CLICK_OBJECT", TOSERVER_STATE_INGAME, &Server::handleCommand_Deprecated }, // 0x27
|
||||
{ "TOSERVER_GROUND_ACTION", TOSERVER_STATE_INGAME, &Server::handleCommand_Deprecated }, // 0x28
|
||||
{ "TOSERVER_RELEASE", TOSERVER_STATE_INGAME, &Server::handleCommand_Deprecated }, // 0x29
|
||||
null_command_handler, // 0x2a
|
||||
null_command_handler, // 0x2b
|
||||
null_command_handler, // 0x2c
|
||||
null_command_handler, // 0x2d
|
||||
null_command_handler, // 0x2e
|
||||
null_command_handler, // 0x2f
|
||||
{ "TOSERVER_SIGNTEXT", TOSERVER_STATE_INGAME, &Server::handleCommand_Deprecated }, // 0x30
|
||||
{ "TOSERVER_INVENTORY_ACTION", TOSERVER_STATE_INGAME, &Server::handleCommand_InventoryAction }, // 0x31
|
||||
{ "TOSERVER_CHAT_MESSAGE", TOSERVER_STATE_INGAME, &Server::handleCommand_ChatMessage }, // 0x32
|
||||
{ "TOSERVER_SIGNNODETEXT", TOSERVER_STATE_INGAME, &Server::handleCommand_Deprecated }, // 0x33
|
||||
{ "TOSERVER_CLICK_ACTIVEOBJECT", TOSERVER_STATE_INGAME, &Server::handleCommand_Deprecated }, // 0x34
|
||||
{ "TOSERVER_DAMAGE", TOSERVER_STATE_INGAME, &Server::handleCommand_Damage }, // 0x35
|
||||
{ "TOSERVER_PASSWORD", TOSERVER_STATE_INGAME, &Server::handleCommand_Password }, // 0x36
|
||||
{ "TOSERVER_PLAYERITEM", TOSERVER_STATE_INGAME, &Server::handleCommand_PlayerItem }, // 0x37
|
||||
{ "TOSERVER_RESPAWN", TOSERVER_STATE_INGAME, &Server::handleCommand_Respawn }, // 0x38
|
||||
{ "TOSERVER_INTERACT", TOSERVER_STATE_INGAME, &Server::handleCommand_Interact }, // 0x39
|
||||
{ "TOSERVER_REMOVED_SOUNDS", TOSERVER_STATE_INGAME, &Server::handleCommand_RemovedSounds }, // 0x3a
|
||||
{ "TOSERVER_NODEMETA_FIELDS", TOSERVER_STATE_INGAME, &Server::handleCommand_NodeMetaFields }, // 0x3b
|
||||
{ "TOSERVER_INVENTORY_FIELDS", TOSERVER_STATE_INGAME, &Server::handleCommand_InventoryFields }, // 0x3c
|
||||
null_command_handler, // 0x3d
|
||||
null_command_handler, // 0x3e
|
||||
null_command_handler, // 0x3f
|
||||
{ "TOSERVER_REQUEST_MEDIA", TOSERVER_STATE_STARTUP, &Server::handleCommand_RequestMedia }, // 0x40
|
||||
{ "TOSERVER_RECEIVED_MEDIA", TOSERVER_STATE_STARTUP, &Server::handleCommand_ReceivedMedia }, // 0x41
|
||||
{ "TOSERVER_BREATH", TOSERVER_STATE_INGAME, &Server::handleCommand_Breath }, // 0x42
|
||||
{ "TOSERVER_CLIENT_READY", TOSERVER_STATE_STARTUP, &Server::handleCommand_ClientReady }, // 0x43
|
||||
};
|
43
src/network/serveropcodes.h
Normal file
43
src/network/serveropcodes.h
Normal file
@ -0,0 +1,43 @@
|
||||
/*
|
||||
Minetest
|
||||
Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
|
||||
Copyright (C) 2015 nerzhul, Loic Blot <loic.blot@unix-experience.fr>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#ifndef SERVEROPCODES_HEADER
|
||||
#define SERVEROPCODES_HEADER
|
||||
|
||||
#include "server.h"
|
||||
#include "networkprotocol.h"
|
||||
#include "toserverpacket.h"
|
||||
|
||||
enum ToServerConnectionState {
|
||||
TOSERVER_STATE_NOT_CONNECTED,
|
||||
TOSERVER_STATE_STARTUP,
|
||||
TOSERVER_STATE_INGAME,
|
||||
TOSERVER_STATE_ALL,
|
||||
};
|
||||
struct ToServerCommandHandler
|
||||
{
|
||||
const std::string name;
|
||||
ToServerConnectionState state;
|
||||
void (Server::*handler)(ToServerPacket* pkt);
|
||||
};
|
||||
|
||||
extern const ToServerCommandHandler toServerCommandTable[TOSERVER_NUM_MSG_TYPES];
|
||||
|
||||
#endif
|
28
src/network/toclientpacket.cpp
Normal file
28
src/network/toclientpacket.cpp
Normal file
@ -0,0 +1,28 @@
|
||||
/*
|
||||
Minetest
|
||||
Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
|
||||
Copyright (C) 2015 nerzhul, Loic Blot <loic.blot@unix-experience.fr>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#include "toclientpacket.h"
|
||||
#include "util/serialize.h"
|
||||
|
||||
ToClientPacket::ToClientPacket(u8 *data, u32 datasize, u16 peer_id):
|
||||
NetworkPacket(data, datasize, peer_id)
|
||||
{
|
||||
m_command = (ToClientCommand)readU16(&data[0]);
|
||||
}
|
38
src/network/toclientpacket.h
Normal file
38
src/network/toclientpacket.h
Normal file
@ -0,0 +1,38 @@
|
||||
/*
|
||||
Minetest
|
||||
Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
|
||||
Copyright (C) 2015 nerzhul, Loic Blot <loic.blot@unix-experience.fr>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#ifndef TOCLIENTPACKET_HEADER
|
||||
#define TOCLIENTPACKET_HEADER
|
||||
|
||||
#include "util/numeric.h"
|
||||
#include "networkprotocol.h"
|
||||
#include "networkpacket.h"
|
||||
|
||||
class ToClientPacket: public NetworkPacket
|
||||
{
|
||||
public:
|
||||
ToClientPacket(u8 *data, u32 datasize, u16 peer_id);
|
||||
ToClientCommand getCommand() { return m_command; }
|
||||
|
||||
private:
|
||||
ToClientCommand m_command;
|
||||
};
|
||||
|
||||
#endif
|
28
src/network/toserverpacket.cpp
Normal file
28
src/network/toserverpacket.cpp
Normal file
@ -0,0 +1,28 @@
|
||||
/*
|
||||
Minetest
|
||||
Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
|
||||
Copyright (C) 2015 nerzhul, Loic Blot <loic.blot@unix-experience.fr>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#include "toserverpacket.h"
|
||||
#include "util/serialize.h"
|
||||
|
||||
ToServerPacket::ToServerPacket(u8 *data, u32 datasize, u16 peer_id):
|
||||
NetworkPacket(data, datasize, peer_id)
|
||||
{
|
||||
m_command = (ToServerCommand)readU16(&data[0]);
|
||||
}
|
38
src/network/toserverpacket.h
Normal file
38
src/network/toserverpacket.h
Normal file
@ -0,0 +1,38 @@
|
||||
/*
|
||||
Minetest
|
||||
Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
|
||||
Copyright (C) 2015 nerzhul, Loic Blot <loic.blot@unix-experience.fr>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#ifndef TOSERVERPACKET_HEADER
|
||||
#define TOSERVERPACKET_HEADER
|
||||
|
||||
#include "util/numeric.h"
|
||||
#include "networkprotocol.h"
|
||||
#include "networkpacket.h"
|
||||
|
||||
class ToServerPacket: public NetworkPacket
|
||||
{
|
||||
public:
|
||||
ToServerPacket(u8 *data, u32 datasize, u16 peer_id);
|
||||
ToServerCommand getCommand() { return m_command; }
|
||||
|
||||
private:
|
||||
ToServerCommand m_command;
|
||||
};
|
||||
|
||||
#endif
|
3018
src/server.cpp
3018
src/server.cpp
File diff suppressed because it is too large
Load Diff
38
src/server.h
38
src/server.h
@ -33,6 +33,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#include "util/thread.h"
|
||||
#include "environment.h"
|
||||
#include "clientiface.h"
|
||||
#include "network/toserverpacket.h"
|
||||
#include <string>
|
||||
#include <list>
|
||||
#include <map>
|
||||
@ -187,6 +188,35 @@ public:
|
||||
void AsyncRunStep(bool initial_step=false);
|
||||
void Receive();
|
||||
PlayerSAO* StageTwoClientInit(u16 peer_id);
|
||||
|
||||
/*
|
||||
* Command Handlers
|
||||
*/
|
||||
|
||||
void handleCommand(ToServerPacket* pkt);
|
||||
|
||||
void handleCommand_Null(ToServerPacket* pkt) {};
|
||||
void handleCommand_Deprecated(ToServerPacket* pkt);
|
||||
void handleCommand_Init(ToServerPacket* pkt);
|
||||
void handleCommand_Init2(ToServerPacket* pkt);
|
||||
void handleCommand_RequestMedia(ToServerPacket* pkt);
|
||||
void handleCommand_ReceivedMedia(ToServerPacket* pkt);
|
||||
void handleCommand_ClientReady(ToServerPacket* pkt);
|
||||
void handleCommand_GotBlocks(ToServerPacket* pkt);
|
||||
void handleCommand_PlayerPos(ToServerPacket* pkt);
|
||||
void handleCommand_DeletedBlocks(ToServerPacket* pkt);
|
||||
void handleCommand_InventoryAction(ToServerPacket* pkt);
|
||||
void handleCommand_ChatMessage(ToServerPacket* pkt);
|
||||
void handleCommand_Damage(ToServerPacket* pkt);
|
||||
void handleCommand_Breath(ToServerPacket* pkt);
|
||||
void handleCommand_Password(ToServerPacket* pkt);
|
||||
void handleCommand_PlayerItem(ToServerPacket* pkt);
|
||||
void handleCommand_Respawn(ToServerPacket* pkt);
|
||||
void handleCommand_Interact(ToServerPacket* pkt);
|
||||
void handleCommand_RemovedSounds(ToServerPacket* pkt);
|
||||
void handleCommand_NodeMetaFields(ToServerPacket* pkt);
|
||||
void handleCommand_InventoryFields(ToServerPacket* pkt);
|
||||
|
||||
void ProcessData(u8 *data, u32 datasize, u16 peer_id);
|
||||
|
||||
// Environment must be locked when called
|
||||
@ -309,7 +339,7 @@ public:
|
||||
bool showFormspec(const char *name, const std::string &formspec, const std::string &formname);
|
||||
Map & getMap() { return m_env->getMap(); }
|
||||
ServerEnvironment & getEnv() { return *m_env; }
|
||||
|
||||
|
||||
u32 hudAdd(Player *player, HudElement *element);
|
||||
bool hudRemove(Player *player, u32 id);
|
||||
bool hudChange(Player *player, u32 id, HudElementStat stat, void *value);
|
||||
@ -320,13 +350,13 @@ public:
|
||||
|
||||
inline Address getPeerAddress(u16 peer_id)
|
||||
{ return m_con.GetPeerAddress(peer_id); }
|
||||
|
||||
|
||||
bool setLocalPlayerAnimations(Player *player, v2s32 animation_frames[4], f32 frame_speed);
|
||||
bool setPlayerEyeOffset(Player *player, v3f first, v3f third);
|
||||
|
||||
bool setSky(Player *player, const video::SColor &bgcolor,
|
||||
const std::string &type, const std::vector<std::string> ¶ms);
|
||||
|
||||
|
||||
bool overrideDayNightRatio(Player *player, bool do_override,
|
||||
float brightness);
|
||||
|
||||
@ -379,7 +409,7 @@ private:
|
||||
void SendSetSky(u16 peer_id, const video::SColor &bgcolor,
|
||||
const std::string &type, const std::vector<std::string> ¶ms);
|
||||
void SendOverrideDayNightRatio(u16 peer_id, bool do_override, float ratio);
|
||||
|
||||
|
||||
/*
|
||||
Send a node removal/addition event to all clients except ignore_id.
|
||||
Additionally, if far_players!=NULL, players further away than
|
||||
|
@ -42,7 +42,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#include "util/numeric.h"
|
||||
#include "util/serialize.h"
|
||||
#include "noise.h" // PseudoRandom used for random data for compression
|
||||
#include "clientserver.h" // LATEST_PROTOCOL_VERSION
|
||||
#include "network/networkprotocol.h" // LATEST_PROTOCOL_VERSION
|
||||
#include <algorithm>
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user