From 7904a1ff5ec7b743e959f353fd9d6f45359a7bdd Mon Sep 17 00:00:00 2001 From: Robert Schlabbach Date: Thu, 21 Mar 2024 19:55:22 +0100 Subject: [PATCH] Add getLastError() API to MultiProtocolJSONClient To allow determining the cause of a disconnection, add a new API to MultiProtocolJSONClient to retrieve the Exception passed from the WebSocket library in the onError() callback. This is required to allow logging the OCPP 2.0.1 Security Events "InvalidTLSVersion" and "InvalidTLSCipherSuite", by examining the type of Exception and its message string. --- .../java/eu/chargetime/ocpp/MultiProtocolJSONClient.java | 4 ++++ .../chargetime/ocpp/MultiProtocolWebSocketTransmitter.java | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/ocpp-v2/src/main/java/eu/chargetime/ocpp/MultiProtocolJSONClient.java b/ocpp-v2/src/main/java/eu/chargetime/ocpp/MultiProtocolJSONClient.java index 332363ba..5a18100f 100644 --- a/ocpp-v2/src/main/java/eu/chargetime/ocpp/MultiProtocolJSONClient.java +++ b/ocpp-v2/src/main/java/eu/chargetime/ocpp/MultiProtocolJSONClient.java @@ -206,6 +206,10 @@ public void disconnect() { client.disconnect(); } + public Exception getLastError() { + return transmitter.getLastError(); + } + @Override public boolean isClosed() { return transmitter.isClosed(); diff --git a/ocpp-v2/src/main/java/eu/chargetime/ocpp/MultiProtocolWebSocketTransmitter.java b/ocpp-v2/src/main/java/eu/chargetime/ocpp/MultiProtocolWebSocketTransmitter.java index e891e85a..1b4dface 100644 --- a/ocpp-v2/src/main/java/eu/chargetime/ocpp/MultiProtocolWebSocketTransmitter.java +++ b/ocpp-v2/src/main/java/eu/chargetime/ocpp/MultiProtocolWebSocketTransmitter.java @@ -54,6 +54,7 @@ public class MultiProtocolWebSocketTransmitter implements Transmitter { private final JSONConfiguration configuration; private final Draft draft; + private volatile Exception lastError = null; private volatile boolean closed = true; private volatile WebSocketClient client; private WssSocketBuilder wssSocketBuilder; @@ -71,6 +72,7 @@ public MultiProtocolWebSocketTransmitter( public void connect(String uri, RadioEvents events) { final URI resource = URI.create(uri); + lastError = null; Map httpHeaders = new HashMap<>(); String username = configuration.getParameter(JSONConfiguration.USERNAME_PARAMETER); Object password = configuration.getParameter(JSONConfiguration.PASSWORD_PARAMETER); @@ -120,6 +122,7 @@ public void onClose(int code, String reason, boolean remote) { @Override public void onError(Exception ex) { + lastError = ex; if (ex instanceof ConnectException) { logger.error("On error triggered caused by:", ex); } else { @@ -261,6 +264,10 @@ public void send(Object request) throws NotConnectedException { } } + public Exception getLastError() { + return lastError; + } + public boolean isClosed() { return closed; }