diff --git a/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java index dd3052ee65..2a030986b5 100644 --- a/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java +++ b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java @@ -35,23 +35,21 @@ public class LocalApplicationProxy implements Closeable { /** * @param context - * @param serverPortForRemoteUsers port on which rusEFI proxy accepts authenticator connections * @param applicationRequest remote session we want to connect to - * @param localApplicationPort local port we would bind for TunerStudio to connect to * @param jsonHttpPort * @param disconnectListener * @param connectionListener */ - public static ServerSocketReference startAndRun(LocalApplicationProxyContext context, int serverPortForRemoteUsers, ApplicationRequest applicationRequest, int localApplicationPort, int jsonHttpPort, TcpIoStream.DisconnectListener disconnectListener, ConnectionListener connectionListener) throws IOException { + public static ServerSocketReference startAndRun(LocalApplicationProxyContext context, ApplicationRequest applicationRequest, int jsonHttpPort, TcpIoStream.DisconnectListener disconnectListener, ConnectionListener connectionListener) throws IOException { String version = context.executeGet(ProxyClient.getHttpAddress(jsonHttpPort) + ProxyClient.VERSION_PATH); log.info("Server says version=" + version); if (!version.contains(ProxyClient.BACKEND_VERSION)) throw new IOException("Unexpected backend version " + version + " while we want " + ProxyClient.BACKEND_VERSION); - IoStream authenticatorToProxyStream = new TcpIoStream("authenticatorToProxyStream ", rusEFISSLContext.getSSLSocket(HttpUtil.RUSEFI_PROXY_HOSTNAME, serverPortForRemoteUsers), disconnectListener); + IoStream authenticatorToProxyStream = new TcpIoStream("authenticatorToProxyStream ", rusEFISSLContext.getSSLSocket(HttpUtil.RUSEFI_PROXY_HOSTNAME, context.serverPortForRemoteApplications()), disconnectListener); LocalApplicationProxy.sendHello(authenticatorToProxyStream, applicationRequest); - ServerSocketReference serverHolder = BinaryProtocolProxy.createProxy(authenticatorToProxyStream, localApplicationPort); + ServerSocketReference serverHolder = BinaryProtocolProxy.createProxy(authenticatorToProxyStream, context.authenticatorPort()); LocalApplicationProxy localApplicationProxy = new LocalApplicationProxy(applicationRequest, serverHolder, authenticatorToProxyStream); connectionListener.onConnected(localApplicationProxy); return serverHolder; diff --git a/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxyContext.java b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxyContext.java index b3b75aec18..a2249a95b0 100644 --- a/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxyContext.java +++ b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxyContext.java @@ -4,4 +4,14 @@ import java.io.IOException; public interface LocalApplicationProxyContext { String executeGet(String url) throws IOException; + + /** + * port on which rusEFI proxy accepts authenticator connections + */ + int serverPortForRemoteApplications(); + + /** + * local port on which authenticator accepts connections from Tuner Studio + */ + int authenticatorPort(); } diff --git a/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxyContextImpl.java b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxyContextImpl.java index c4a3f35d4c..7cf0862121 100644 --- a/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxyContextImpl.java +++ b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxyContextImpl.java @@ -4,9 +4,14 @@ import com.rusefi.tools.online.HttpUtil; import java.io.IOException; -public class LocalApplicationProxyContextImpl implements LocalApplicationProxyContext { +public abstract class LocalApplicationProxyContextImpl implements LocalApplicationProxyContext { @Override public String executeGet(String url) throws IOException { return HttpUtil.executeGet(url); } + + @Override + public int serverPortForRemoteApplications() { + return LocalApplicationProxy.SERVER_PORT_FOR_APPLICATIONS; + } } diff --git a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java index 1b86ecd945..bc80454fb0 100644 --- a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java +++ b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java @@ -9,8 +9,9 @@ import com.rusefi.io.LinkManager; import com.rusefi.io.tcp.TcpIoStream; import com.rusefi.proxy.NetworkConnector; import com.rusefi.proxy.client.LocalApplicationProxy; -import com.rusefi.proxy.client.LocalApplicationProxyContextImpl; +import com.rusefi.proxy.client.LocalApplicationProxyContext; import com.rusefi.server.*; +import com.rusefi.tools.online.HttpUtil; import org.junit.Before; import org.junit.Test; @@ -40,6 +41,24 @@ public class FullServerTest { int value = 241; int userId = 7; + + LocalApplicationProxyContext localApplicationProxyContext = new LocalApplicationProxyContext() { + @Override + public String executeGet(String url) throws IOException { + return HttpUtil.executeGet(url); + } + + @Override + public int serverPortForRemoteApplications() { + return 7003; + } + + @Override + public int authenticatorPort() { + return 7004; + } + }; + CountDownLatch controllerRegistered = new CountDownLatch(1); CountDownLatch applicationClosed = new CountDownLatch(1); @@ -60,12 +79,11 @@ public class FullServerTest { } }; LinkManager clientManager = new LinkManager()) { int serverPortForControllers = 7001; - int serverPortForRemoteUsers = 7003; // first start backend server BackendTestHelper.runControllerConnectorBlocking(backend, serverPortForControllers); - BackendTestHelper.runApplicationConnectorBlocking(backend, serverPortForRemoteUsers); + BackendTestHelper.runApplicationConnectorBlocking(backend, localApplicationProxyContext.serverPortForRemoteApplications()); // create virtual controller to which "rusEFI network connector" connects to int controllerPort = 7002; @@ -83,8 +101,7 @@ public class FullServerTest { ApplicationRequest applicationRequest = new ApplicationRequest(authenticatorSessionDetails, userDetailsResolver.apply(MockRusEfiDevice.TEST_TOKEN_1)); // start authenticator - int authenticatorPort = 7004; // local port on which authenticator accepts connections from Tuner Studio - LocalApplicationProxy.startAndRun(new LocalApplicationProxyContextImpl(), serverPortForRemoteUsers, applicationRequest, authenticatorPort, httpPort, + LocalApplicationProxy.startAndRun(localApplicationProxyContext, applicationRequest, httpPort, TcpIoStream.DisconnectListener.VOID, LocalApplicationProxy.ConnectionListener.VOID); @@ -92,7 +109,7 @@ public class FullServerTest { CountDownLatch connectionEstablishedCountDownLatch = new CountDownLatch(1); // connect to proxy and read virtual controller through it - clientManager.startAndConnect(TestHelper.LOCALHOST + ":" + authenticatorPort, new ConnectionStateListener() { + clientManager.startAndConnect(TestHelper.LOCALHOST + ":" + localApplicationProxyContext.authenticatorPort(), new ConnectionStateListener() { @Override public void onConnectionEstablished() { connectionEstablishedCountDownLatch.countDown(); diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java index b5d94fea53..d56e78b639 100644 --- a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java @@ -222,11 +222,15 @@ public class RemoteTab { serverHolder.close(); }); + LocalApplicationProxyContextImpl context = new LocalApplicationProxyContextImpl() { + @Override + public int authenticatorPort() { + return Integer.parseInt(getLocalPort()); + } + }; ServerSocketReference serverHolder = LocalApplicationProxy.startAndRun( - new LocalApplicationProxyContextImpl(), - LocalApplicationProxy.SERVER_PORT_FOR_APPLICATIONS, + context, applicationRequest, - Integer.parseInt(getLocalPort()), HttpUtil.PROXY_JSON_API_HTTP_PORT, disconnectListener, connectionListener); serverHolderAtomicReference.set(serverHolder); } catch (IOException e) {