From e4de9dbfb5ee79f648e16c1a15d927d8b72c7a4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Wed, 22 Jan 2025 10:12:56 +0100 Subject: [PATCH] Add some socket data in the debugger --- Core/HLE/SocketManager.cpp | 1 + Core/HLE/SocketManager.h | 3 +++ Core/HLE/sceNetInet.cpp | 5 +++++ Core/HLE/sceUtility.cpp | 1 + UI/ImDebugger/ImDebugger.cpp | 11 ++++++++--- 5 files changed, 18 insertions(+), 3 deletions(-) diff --git a/Core/HLE/SocketManager.cpp b/Core/HLE/SocketManager.cpp index 458d50cd0b..89df3e8e44 100644 --- a/Core/HLE/SocketManager.cpp +++ b/Core/HLE/SocketManager.cpp @@ -27,6 +27,7 @@ InetSocket *SocketManager::CreateSocket(int *index, int *returned_errno, SocketS if (inetSockets_[i].state == SocketState::Unused) { *index = i; InetSocket *inetSock = inetSockets_ + i; + *inetSock = {}; // Reset to default. inetSock->sock = hostSock; inetSock->state = state; inetSock->domain = domain; diff --git a/Core/HLE/SocketManager.h b/Core/HLE/SocketManager.h index c277ff526a..0a09efc4dc 100644 --- a/Core/HLE/SocketManager.h +++ b/Core/HLE/SocketManager.h @@ -20,6 +20,9 @@ struct InetSocket { int type; int protocol; bool nonblocking; + // Metadata for debug use only. + std::string addr; + int port; }; // Only use this for sockets whose ID are exposed to the game. diff --git a/Core/HLE/sceNetInet.cpp b/Core/HLE/sceNetInet.cpp index 82c225aecf..3d5db7183d 100644 --- a/Core/HLE/sceNetInet.cpp +++ b/Core/HLE/sceNetInet.cpp @@ -618,7 +618,12 @@ static int sceNetInetBind(int socket, u32 namePtr, int namelen) { } // TODO: Make use Port Offset only for PPSSPP to PPSSPP communications (ie. IP addresses available in the group/friendlist), otherwise should be considered as Online Service thus should use the port as is. //saddr.in.sin_port = htons(ntohs(saddr.in.sin_port) + portOffset); + DEBUG_LOG(Log::sceNet, "Bind: Family = %s, Address = %s, Port = %d", inetSocketDomain2str(saddr.addr.sa_family).c_str(), ip2str(saddr.in.sin_addr).c_str(), ntohs(saddr.in.sin_port)); + // Update socket debug metadata + inetSock->addr = ip2str(saddr.in.sin_addr); + inetSock->port = ntohs(saddr.in.sin_port); + changeBlockingMode(inetSock->sock, 0); int retval = bind(inetSock->sock, (struct sockaddr*)&saddr, len); if (retval < 0) { diff --git a/Core/HLE/sceUtility.cpp b/Core/HLE/sceUtility.cpp index fb514b7fef..c937f167e8 100644 --- a/Core/HLE/sceUtility.cpp +++ b/Core/HLE/sceUtility.cpp @@ -732,6 +732,7 @@ static int sceUtilityCheckNetParam(int id) * @param data - parameter data * @return 0 on success */ +// Let's figure out what games use this. static int sceUtilityGetNetParam(int id, int param, u32 dataAddr) { if (id < 0 || id > 24) { return hleLogWarning(Log::sceUtility, SCE_ERROR_NETPARAM_BAD_NETCONF, "invalid id=%d", id); diff --git a/UI/ImDebugger/ImDebugger.cpp b/UI/ImDebugger/ImDebugger.cpp index 13e7f0df4e..a956b5ee2b 100644 --- a/UI/ImDebugger/ImDebugger.cpp +++ b/UI/ImDebugger/ImDebugger.cpp @@ -620,14 +620,16 @@ static void DrawSockets(ImConfig &cfg) { ImGui::End(); return; } - if (ImGui::BeginTable("sock", 7, ImGuiTableFlags_RowBg | ImGuiTableFlags_BordersH | ImGuiTableFlags_Resizable)) { + if (ImGui::BeginTable("sock", 9, ImGuiTableFlags_RowBg | ImGuiTableFlags_BordersH | ImGuiTableFlags_Resizable)) { ImGui::TableSetupColumn("ID", ImGuiTableColumnFlags_WidthFixed); - ImGui::TableSetupColumn("Host", ImGuiTableColumnFlags_WidthFixed); + ImGui::TableSetupColumn("Port", ImGuiTableColumnFlags_WidthFixed); + ImGui::TableSetupColumn("IP address", ImGuiTableColumnFlags_WidthFixed); ImGui::TableSetupColumn("Non-blocking", ImGuiTableColumnFlags_WidthFixed); ImGui::TableSetupColumn("Created by", ImGuiTableColumnFlags_WidthFixed); ImGui::TableSetupColumn("Domain", ImGuiTableColumnFlags_WidthFixed); ImGui::TableSetupColumn("Type", ImGuiTableColumnFlags_WidthFixed); ImGui::TableSetupColumn("Protocol", ImGuiTableColumnFlags_WidthStretch); + ImGui::TableSetupColumn("Host handle", ImGuiTableColumnFlags_WidthFixed); ImGui::TableHeadersRow(); @@ -641,7 +643,9 @@ static void DrawSockets(ImConfig &cfg) { ImGui::TableNextColumn(); ImGui::Text("%d", i); ImGui::TableNextColumn(); - ImGui::Text("%d", (int)inetSocket->sock); + ImGui::Text("%d", inetSocket->port); + ImGui::TableNextColumn(); + ImGui::TextUnformatted(inetSocket->addr.c_str()); ImGui::TableNextColumn(); ImGui::TextUnformatted(inetSocket->nonblocking ? "Non-blocking" : "Blocking"); ImGui::TableNextColumn(); @@ -656,6 +660,7 @@ static void DrawSockets(ImConfig &cfg) { str = inetSocketProto2str(inetSocket->protocol); ImGui::TextUnformatted(str.c_str()); ImGui::TableNextColumn(); + ImGui::Text("%d", (int)inetSocket->sock); } ImGui::EndTable();