so suddenly ServerTest is less reliable?
This commit is contained in:
parent
3b5b8714dc
commit
158e5d1876
|
@ -22,6 +22,7 @@ import static com.rusefi.binaryprotocol.IoHelper.*;
|
|||
@ThreadSafe
|
||||
public class IncomingDataBuffer {
|
||||
private static final int BUFFER_SIZE = 32768;
|
||||
private static String loggingPrefix;
|
||||
/**
|
||||
* buffer for response bytes from controller
|
||||
*/
|
||||
|
@ -33,7 +34,8 @@ public class IncomingDataBuffer {
|
|||
this.logger = logger;
|
||||
}
|
||||
|
||||
public static IncomingDataBuffer createDataBuffer(IoStream stream, Logger logger) {
|
||||
public static IncomingDataBuffer createDataBuffer(String loggingPrefix, IoStream stream, Logger logger) {
|
||||
IncomingDataBuffer.loggingPrefix = loggingPrefix;
|
||||
IncomingDataBuffer incomingData = new IncomingDataBuffer(logger);
|
||||
stream.setInputListener(incomingData::addData);
|
||||
return incomingData;
|
||||
|
@ -49,13 +51,13 @@ public class IncomingDataBuffer {
|
|||
return null;
|
||||
|
||||
int packetSize = swap16(getShort());
|
||||
logger.trace("Got packet size " + packetSize);
|
||||
logger.trace( loggingPrefix + "Got packet size " + packetSize);
|
||||
if (packetSize < 0)
|
||||
return null;
|
||||
if (!allowLongResponse && packetSize > Math.max(BinaryProtocolCommands.BLOCKING_FACTOR, Fields.TS_OUTPUT_SIZE) + 10)
|
||||
return null;
|
||||
|
||||
isTimeout = waitForBytes(msg + " body", start, packetSize + 4);
|
||||
isTimeout = waitForBytes(loggingPrefix + msg + " body", start, packetSize + 4);
|
||||
if (isTimeout)
|
||||
return null;
|
||||
|
||||
|
@ -148,28 +150,28 @@ public class IncomingDataBuffer {
|
|||
}
|
||||
|
||||
public byte readByte() throws IOException {
|
||||
boolean timeout = waitForBytes("readByte", System.currentTimeMillis(), 1);
|
||||
boolean timeout = waitForBytes(loggingPrefix + "readByte", System.currentTimeMillis(), 1);
|
||||
if (timeout)
|
||||
throw new IOException("Timeout in readByte");
|
||||
return (byte) getByte();
|
||||
}
|
||||
|
||||
public int readInt() throws EOFException {
|
||||
boolean timeout = waitForBytes("readInt", System.currentTimeMillis(), 4);
|
||||
boolean timeout = waitForBytes(loggingPrefix + "readInt", System.currentTimeMillis(), 4);
|
||||
if (timeout)
|
||||
throw new IllegalStateException("Timeout in readByte");
|
||||
return swap32(getInt());
|
||||
}
|
||||
|
||||
public short readShort() throws EOFException {
|
||||
boolean timeout = waitForBytes("readShort", System.currentTimeMillis(), 2);
|
||||
boolean timeout = waitForBytes(loggingPrefix + "readShort", System.currentTimeMillis(), 2);
|
||||
if (timeout)
|
||||
throw new IllegalStateException("Timeout in readShort");
|
||||
return (short) swap16(getShort());
|
||||
}
|
||||
|
||||
public int read(byte[] packet) {
|
||||
boolean timeout = waitForBytes("read", System.currentTimeMillis(), packet.length);
|
||||
boolean timeout = waitForBytes(loggingPrefix + "read", System.currentTimeMillis(), packet.length);
|
||||
if (timeout)
|
||||
throw new IllegalStateException("Timeout while waiting " + packet.length);
|
||||
getData(packet);
|
||||
|
|
|
@ -53,7 +53,7 @@ public interface IoStream extends WriteStream {
|
|||
packet = IoHelper.makeCrc32Packet(plainPacket);
|
||||
}
|
||||
// todo: verbose mode printHexBinary(plainPacket))
|
||||
logger.info("Sending packet " + BinaryProtocol.findCommand(plainPacket[0]) + " length=" + plainPacket.length);
|
||||
logger.info(getLoggingPrefix() + "Sending packet " + BinaryProtocol.findCommand(plainPacket[0]) + " length=" + plainPacket.length);
|
||||
write(packet);
|
||||
}
|
||||
|
||||
|
@ -66,6 +66,8 @@ public interface IoStream extends WriteStream {
|
|||
|
||||
void close();
|
||||
|
||||
String getLoggingPrefix();
|
||||
|
||||
IncomingDataBuffer getDataBuffer();
|
||||
|
||||
default short readShort() throws EOFException {
|
||||
|
|
|
@ -28,7 +28,12 @@ public class SerialIoStreamJSerialComm implements IoStream {
|
|||
this.sp = sp;
|
||||
this.port = port;
|
||||
this.logger = logger;
|
||||
this.dataBuffer = IncomingDataBuffer.createDataBuffer(this, logger);
|
||||
this.dataBuffer = IncomingDataBuffer.createDataBuffer("[serial] ", this, logger);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getLoggingPrefix() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -104,7 +104,7 @@ public class BinaryProtocolServer implements BinaryProtocolCommands {
|
|||
|
||||
@SuppressWarnings("InfiniteLoopStatement")
|
||||
private void runProxy(LinkManager linkManager, Socket clientSocket) throws IOException {
|
||||
TcpIoStream stream = new TcpIoStream(logger, clientSocket);
|
||||
TcpIoStream stream = new TcpIoStream("[proxy] ", logger, clientSocket);
|
||||
|
||||
IncomingDataBuffer in = stream.getDataBuffer();
|
||||
|
||||
|
@ -130,7 +130,7 @@ public class BinaryProtocolServer implements BinaryProtocolCommands {
|
|||
|
||||
byte command = payload[0];
|
||||
|
||||
System.out.println("Got [" + BinaryProtocol.findCommand(command));
|
||||
System.out.println("Got command " + BinaryProtocol.findCommand(command));
|
||||
|
||||
if (command == Fields.TS_HELLO_COMMAND) {
|
||||
new HelloCommand(logger, Fields.TS_SIGNATURE).handle(stream);
|
||||
|
@ -159,7 +159,7 @@ public class BinaryProtocolServer implements BinaryProtocolCommands {
|
|||
DataInputStream dis = new DataInputStream(new ByteArrayInputStream(payload, 1, payload.length - 1));
|
||||
int offset = swap16(dis.readShort());
|
||||
int count = swap16(dis.readShort());
|
||||
System.out.println("TS_OUTPUT_COMMAND offset=" + offset + "/count=" + count);
|
||||
logger.info("TS_OUTPUT_COMMAND offset=" + offset + "/count=" + count);
|
||||
|
||||
byte[] response = new byte[1 + count];
|
||||
response[0] = (byte) TS_OK.charAt(0);
|
||||
|
|
|
@ -20,10 +20,16 @@ public class TcpIoStream implements IoStream {
|
|||
private final InputStream input;
|
||||
private final OutputStream output;
|
||||
private final Logger logger;
|
||||
private final String loggingPrefix;
|
||||
private boolean isClosed;
|
||||
private final IncomingDataBuffer dataBuffer;
|
||||
|
||||
public TcpIoStream(Logger logger, Socket socket) throws IOException {
|
||||
this("", logger, socket);
|
||||
}
|
||||
|
||||
public TcpIoStream(String loggingPrefix, Logger logger, Socket socket) throws IOException {
|
||||
this.loggingPrefix = loggingPrefix;
|
||||
InputStream input = new BufferedInputStream(socket.getInputStream());
|
||||
OutputStream output = socket.getOutputStream();
|
||||
this.logger = logger;
|
||||
|
@ -33,7 +39,12 @@ public class TcpIoStream implements IoStream {
|
|||
throw new NullPointerException("output");
|
||||
this.output = output;
|
||||
this.input = input;
|
||||
this.dataBuffer = IncomingDataBuffer.createDataBuffer(this, logger);
|
||||
this.dataBuffer = IncomingDataBuffer.createDataBuffer(loggingPrefix, this, logger);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getLoggingPrefix() {
|
||||
return loggingPrefix;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -26,7 +26,7 @@ public class LocalApplicationProxy {
|
|||
* @param authenticatorPort local port we would bind for TunerStudio to connect to
|
||||
*/
|
||||
static void startAndRun(Logger logger, int serverPortForRemoteUsers, ApplicationRequest applicationRequest, int authenticatorPort) throws IOException {
|
||||
IoStream authenticatorToProxyStream = new TcpIoStream(logger, rusEFISSLContext.getSSLSocket(HttpUtil.RUSEFI_PROXY_HOSTNAME, serverPortForRemoteUsers));
|
||||
IoStream authenticatorToProxyStream = new TcpIoStream("authenticatorToProxyStream ", logger, rusEFISSLContext.getSSLSocket(HttpUtil.RUSEFI_PROXY_HOSTNAME, serverPortForRemoteUsers));
|
||||
LocalApplicationProxy localApplicationProxy = new LocalApplicationProxy(logger, applicationRequest);
|
||||
localApplicationProxy.run(authenticatorToProxyStream);
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ public class BaseBroadcastingThread {
|
|||
private final Thread thread;
|
||||
|
||||
public BaseBroadcastingThread(Socket socket, SessionDetails sessionDetails, Logger logger) throws IOException {
|
||||
TcpIoStream stream = new TcpIoStream(logger, socket);
|
||||
TcpIoStream stream = new TcpIoStream("[broadcast] ", logger, socket);
|
||||
IncomingDataBuffer in = stream.getDataBuffer();
|
||||
|
||||
thread = new Thread(() -> {
|
||||
|
|
|
@ -106,7 +106,7 @@ public class Backend implements Closeable {
|
|||
// connection from authenticator app which proxies for Tuner Studio
|
||||
IoStream applicationClientStream = null;
|
||||
try {
|
||||
applicationClientStream = new TcpIoStream(logger, applicationSocket);
|
||||
applicationClientStream = new TcpIoStream("[app] ", logger, applicationSocket);
|
||||
|
||||
// authenticator pushed hello packet on connect
|
||||
String jsonString = HelloCommand.getHelloResponse(applicationClientStream.getDataBuffer(), logger);
|
||||
|
|
|
@ -35,7 +35,7 @@ public class ControllerConnectionState {
|
|||
this.logger = logger;
|
||||
this.userDetailsResolver = userDetailsResolver;
|
||||
try {
|
||||
stream = new TcpIoStream(logger, clientSocket);
|
||||
stream = new TcpIoStream("[controller] ", logger, clientSocket);
|
||||
incomingData = stream.getDataBuffer();
|
||||
} catch (IOException e) {
|
||||
close();
|
||||
|
|
Loading…
Reference in New Issue