From 581e1e423a6721d0837f1ca54f92dc84487220ba Mon Sep 17 00:00:00 2001 From: seriouscoder43 <55918427+seriouscoder43@users.noreply.github.com> Date: Sun, 28 Jun 2026 04:51:19 +0400 Subject: [PATCH] fix: use peer address for websocket client connections --- core/functional_tests/websocket_client/service.cpp | 12 ++++++++++++ .../websocket_client/tests/test_websocket_client.py | 1 + core/src/clients/http/websocket_response.cpp | 2 +- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/core/functional_tests/websocket_client/service.cpp b/core/functional_tests/websocket_client/service.cpp index 1a6fadcbe209..a002f1409418 100644 --- a/core/functional_tests/websocket_client/service.cpp +++ b/core/functional_tests/websocket_client/service.cpp @@ -84,6 +84,8 @@ class TestClientHandler final : public server::handlers::HttpHandlerBase { return TestUnauth(request); } else if (test_name == "connection_already_extracted") { return TestConnectionAlreadyExtracted(request); + } else if (test_name == "remote_addr") { + return TestRemoteAddr(request); } return "Unknown test"; } catch (const std::exception& e) { @@ -99,6 +101,16 @@ class TestClientHandler final : public server::handlers::HttpHandlerBase { return client_.CreateRequest().url(fmt::format("ws://localhost:{}{}", port, uri)).PerformWebSocketHandshake(); } + std::string TestRemoteAddr(const server::http::HttpRequest& request) const { + const auto port = std::stoi(request.GetArg("port")); + auto conn = PerformWebSocket(request, "/echo").MakeWebSocketConnection(); + + const auto remote_port = conn->RemoteAddr().Port(); + conn->Close(websocket::CloseStatus::kNormal); + + return remote_port == port ? "OK" : fmt::format("FAIL: remote port is {}", remote_port); + } + std::string TestEcho(const server::http::HttpRequest& request) const { auto conn = PerformWebSocket(request, "/echo").MakeWebSocketConnection(); diff --git a/core/functional_tests/websocket_client/tests/test_websocket_client.py b/core/functional_tests/websocket_client/tests/test_websocket_client.py index 167e26379b85..f9b1d0277914 100644 --- a/core/functional_tests/websocket_client/tests/test_websocket_client.py +++ b/core/functional_tests/websocket_client/tests/test_websocket_client.py @@ -13,6 +13,7 @@ 'nonblocking_write', 'unauth', 'connection_already_extracted', + 'remote_addr', ], ) async def test_client(service_client, service_port, test_name): diff --git a/core/src/clients/http/websocket_response.cpp b/core/src/clients/http/websocket_response.cpp index 587822924f91..03f83fd82977 100644 --- a/core/src/clients/http/websocket_response.cpp +++ b/core/src/clients/http/websocket_response.cpp @@ -28,7 +28,7 @@ std::shared_ptr WebSocketResponse::MakeWebSocket } auto socket = std::make_unique(socket_.GetNative()); - auto addr = socket->Getsockname(); + auto addr = socket->Getpeername(); auto config = websocket::Config{}; std::move(socket_).Release();