summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorSepalani <sepalani@hotmail.fr>2021-02-11 16:13:41 +0400
committerSepalani <sepalani@hotmail.fr>2021-02-12 13:42:18 +0400
commitfabf6f51cdcaa6e4c2face36c1ea57b318d63bab (patch)
treef814378f52afca6fe11121a3e88d1ec44eff268d /Source/Core
parent38935f2e4e93a91acebd08c51e4811e0bc487670 (diff)
PCAP: Improve TCP session logging
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/IOS/Network/Socket.cpp1
-rw-r--r--Source/Core/Core/NetworkCaptureLogger.cpp14
-rw-r--r--Source/Core/Core/NetworkCaptureLogger.h11
3 files changed, 22 insertions, 4 deletions
diff --git a/Source/Core/Core/IOS/Network/Socket.cpp b/Source/Core/Core/IOS/Network/Socket.cpp
index 3cf193cb57..1c01bdabeb 100644
--- a/Source/Core/Core/IOS/Network/Socket.cpp
+++ b/Source/Core/Core/IOS/Network/Socket.cpp
@@ -701,6 +701,7 @@ s32 WiiSockMan::AddSocket(s32 fd, bool is_rw)
WiiSocket& sock = WiiSockets[wii_fd];
sock.SetFd(fd);
sock.SetWiiFd(wii_fd);
+ PowerPC::debug_interface.NetworkLogger()->OnNewSocket(fd);
#ifdef __APPLE__
int opt_no_sigpipe = 1;
diff --git a/Source/Core/Core/NetworkCaptureLogger.cpp b/Source/Core/Core/NetworkCaptureLogger.cpp
index 048adb4e08..118deb234a 100644
--- a/Source/Core/Core/NetworkCaptureLogger.cpp
+++ b/Source/Core/Core/NetworkCaptureLogger.cpp
@@ -24,6 +24,10 @@ namespace Core
NetworkCaptureLogger::NetworkCaptureLogger() = default;
NetworkCaptureLogger::~NetworkCaptureLogger() = default;
+void DummyNetworkCaptureLogger::OnNewSocket(s32 socket)
+{
+}
+
void DummyNetworkCaptureLogger::LogSSLRead(const void* data, std::size_t length, s32 socket)
{
}
@@ -81,6 +85,12 @@ PCAPSSLCaptureLogger::PCAPSSLCaptureLogger()
PCAPSSLCaptureLogger::~PCAPSSLCaptureLogger() = default;
+void PCAPSSLCaptureLogger::OnNewSocket(s32 socket)
+{
+ m_read_sequence_number[socket] = 0;
+ m_write_sequence_number[socket] = 0;
+}
+
PCAPSSLCaptureLogger::ErrorState PCAPSSLCaptureLogger::SaveState() const
{
return {
@@ -193,8 +203,8 @@ void PCAPSSLCaptureLogger::LogIPv4(LogType log_type, const u8* data, u16 length,
if (socket_type == SOCK_STREAM)
{
- u32& sequence_number =
- (log_type == LogType::Read) ? m_read_sequence_number : m_write_sequence_number;
+ u32& sequence_number = (log_type == LogType::Read) ? m_read_sequence_number[socket] :
+ m_write_sequence_number[socket];
Common::TCPHeader tcp_header(from, to, sequence_number, data, length);
sequence_number += static_cast<u32>(length);
Common::IPv4Header ip_header(tcp_header.Size() + length, tcp_header.IPProto(), from, to);
diff --git a/Source/Core/Core/NetworkCaptureLogger.h b/Source/Core/Core/NetworkCaptureLogger.h
index 814c630855..9dbca686ca 100644
--- a/Source/Core/Core/NetworkCaptureLogger.h
+++ b/Source/Core/Core/NetworkCaptureLogger.h
@@ -6,6 +6,7 @@
#include <array>
#include <cstddef>
+#include <map>
#include <memory>
#ifdef _WIN32
@@ -43,6 +44,8 @@ public:
NetworkCaptureLogger& operator=(NetworkCaptureLogger&&) = delete;
virtual ~NetworkCaptureLogger();
+ virtual void OnNewSocket(s32 socket) = 0;
+
virtual void LogSSLRead(const void* data, std::size_t length, s32 socket) = 0;
virtual void LogSSLWrite(const void* data, std::size_t length, s32 socket) = 0;
@@ -55,6 +58,8 @@ public:
class DummyNetworkCaptureLogger : public NetworkCaptureLogger
{
public:
+ void OnNewSocket(s32 socket) override;
+
void LogSSLRead(const void* data, std::size_t length, s32 socket) override;
void LogSSLWrite(const void* data, std::size_t length, s32 socket) override;
@@ -79,6 +84,8 @@ public:
PCAPSSLCaptureLogger();
~PCAPSSLCaptureLogger();
+ void OnNewSocket(s32 socket) override;
+
void LogSSLRead(const void* data, std::size_t length, s32 socket) override;
void LogSSLWrite(const void* data, std::size_t length, s32 socket) override;
@@ -108,7 +115,7 @@ private:
const sockaddr_in& to);
std::unique_ptr<Common::PCAP> m_file;
- u32 m_read_sequence_number = 0;
- u32 m_write_sequence_number = 0;
+ std::map<s32, u32> m_read_sequence_number;
+ std::map<s32, u32> m_write_sequence_number;
};
} // namespace Core