17 changes: 7 additions & 10 deletions Source/Core/Core/NetPlayProto.h
Expand Up @@ -117,11 +117,6 @@ struct NetTraversalConfig
u16 traversal_port = 0;
};

struct Rpt : public std::vector<u8>
{
u16 channel;
};

// messages
enum
{
Expand Down Expand Up @@ -210,13 +205,15 @@ enum
SYNC_CODES_FAILURE = 6,
};

constexpr u32 NETPLAY_LZO_IN_LEN = 1024 * 64;
constexpr u32 NETPLAY_LZO_OUT_LEN = NETPLAY_LZO_IN_LEN + (NETPLAY_LZO_IN_LEN / 16) + 64 + 3;
constexpr u32 MAX_NAME_LENGTH = 30;
constexpr size_t CHUNKED_DATA_UNIT_SIZE = 16384;
constexpr u8 CHANNEL_COUNT = 2;
constexpr u8 DEFAULT_CHANNEL = 0;
constexpr u8 CHUNKED_DATA_CHANNEL = 1;

enum : u8
{
DEFAULT_CHANNEL,
CHUNKED_DATA_CHANNEL,
CHANNEL_COUNT
};

struct WiimoteInput
{
Expand Down
127 changes: 1 addition & 126 deletions Source/Core/Core/NetPlayServer.cpp
Expand Up @@ -18,13 +18,11 @@
#include <vector>

#include <fmt/format.h>
#include <lzo/lzo1x.h>

#include "Common/CommonPaths.h"
#include "Common/ENetUtil.h"
#include "Common/FileUtil.h"
#include "Common/HttpRequest.h"
#include "Common/IOFile.h"
#include "Common/Logging/Log.h"
#include "Common/MsgHandler.h"
#include "Common/SFMLHelper.h"
Expand Down Expand Up @@ -55,6 +53,7 @@
#include "Core/IOS/IOS.h"
#include "Core/IOS/Uids.h"
#include "Core/NetPlayClient.h" //for NetPlayUI
#include "Core/NetPlayCommon.h"
#include "Core/SyncIdentifier.h"

#include "DiscIO/Enums.h"
Expand Down Expand Up @@ -1906,130 +1905,6 @@ void NetPlayServer::CheckSyncAndStartGame()
}
}

bool NetPlayServer::CompressFileIntoPacket(const std::string& file_path, sf::Packet& packet)
{
File::IOFile file(file_path, "rb");
if (!file)
{
PanicAlertFmtT("Failed to open file \"{0}\".", file_path);
return false;
}

const sf::Uint64 size = file.GetSize();
packet << size;

if (size == 0)
return true;

std::vector<u8> in_buffer(NETPLAY_LZO_IN_LEN);
std::vector<u8> out_buffer(NETPLAY_LZO_OUT_LEN);
std::vector<u8> wrkmem(LZO1X_1_MEM_COMPRESS);

lzo_uint i = 0;
while (true)
{
lzo_uint32 cur_len = 0; // number of bytes to read
lzo_uint out_len = 0; // number of bytes to write

if ((i + NETPLAY_LZO_IN_LEN) >= size)
{
cur_len = static_cast<lzo_uint32>(size - i);
}
else
{
cur_len = NETPLAY_LZO_IN_LEN;
}

if (cur_len <= 0)
break; // EOF

if (!file.ReadBytes(in_buffer.data(), cur_len))
{
PanicAlertFmtT("Error reading file: {0}", file_path.c_str());
return false;
}

if (lzo1x_1_compress(in_buffer.data(), cur_len, out_buffer.data(), &out_len, wrkmem.data()) !=
LZO_E_OK)
{
PanicAlertFmtT("Internal LZO Error - compression failed");
return false;
}

// The size of the data to write is 'out_len'
packet << static_cast<u32>(out_len);
for (size_t j = 0; j < out_len; j++)
{
packet << out_buffer[j];
}

if (cur_len != NETPLAY_LZO_IN_LEN)
break;

i += cur_len;
}

// Mark end of data
packet << static_cast<u32>(0);

return true;
}

bool NetPlayServer::CompressBufferIntoPacket(const std::vector<u8>& in_buffer, sf::Packet& packet)
{
const sf::Uint64 size = in_buffer.size();
packet << size;

if (size == 0)
return true;

std::vector<u8> out_buffer(NETPLAY_LZO_OUT_LEN);
std::vector<u8> wrkmem(LZO1X_1_MEM_COMPRESS);

lzo_uint i = 0;
while (true)
{
lzo_uint32 cur_len = 0; // number of bytes to read
lzo_uint out_len = 0; // number of bytes to write

if ((i + NETPLAY_LZO_IN_LEN) >= size)
{
cur_len = static_cast<lzo_uint32>(size - i);
}
else
{
cur_len = NETPLAY_LZO_IN_LEN;
}

if (cur_len <= 0)
break; // end of buffer

if (lzo1x_1_compress(&in_buffer[i], cur_len, out_buffer.data(), &out_len, wrkmem.data()) !=
LZO_E_OK)
{
PanicAlertFmtT("Internal LZO Error - compression failed");
return false;
}

// The size of the data to write is 'out_len'
packet << static_cast<u32>(out_len);
for (size_t j = 0; j < out_len; j++)
{
packet << out_buffer[j];
}

if (cur_len != NETPLAY_LZO_IN_LEN)
break;

i += cur_len;
}

// Mark end of data
packet << static_cast<u32>(0);

return true;
}

u64 NetPlayServer::GetInitialNetPlayRTC() const
{
const auto& config = SConfig::GetInstance();
Expand Down
2 changes: 0 additions & 2 deletions Source/Core/Core/NetPlayServer.h
Expand Up @@ -120,8 +120,6 @@ class NetPlayServer : public TraversalClientClient
bool SyncSaveData();
bool SyncCodes();
void CheckSyncAndStartGame();
bool CompressFileIntoPacket(const std::string& file_path, sf::Packet& packet);
bool CompressBufferIntoPacket(const std::vector<u8>& in_buffer, sf::Packet& packet);

u64 GetInitialNetPlayRTC() const;

Expand Down
4 changes: 3 additions & 1 deletion Source/Core/DolphinLib.props
Expand Up @@ -375,6 +375,7 @@
<ClInclude Include="Core\MemTools.h" />
<ClInclude Include="Core\Movie.h" />
<ClInclude Include="Core\NetPlayClient.h" />
<ClInclude Include="Core\NetPlayCommon.h" />
<ClInclude Include="Core\NetPlayProto.h" />
<ClInclude Include="Core\NetPlayServer.h" />
<ClInclude Include="Core\NetworkCaptureLogger.h" />
Expand Down Expand Up @@ -952,6 +953,7 @@
<ClCompile Include="Core\MemTools.cpp" />
<ClCompile Include="Core\Movie.cpp" />
<ClCompile Include="Core\NetPlayClient.cpp" />
<ClCompile Include="Core\NetPlayCommon.cpp" />
<ClCompile Include="Core\NetPlayServer.cpp" />
<ClCompile Include="Core\NetworkCaptureLogger.cpp" />
<ClCompile Include="Core\PatchEngine.cpp" />
Expand Down Expand Up @@ -1215,4 +1217,4 @@
<ItemGroup>
<Natvis Include="Common\BitField.natvis" />
</ItemGroup>
</Project>
</Project>