Skip to content

Commit d2da5df

Browse files
committed
feat: enhance WebSocket properties with default values and buffer limits
1 parent 44dab99 commit d2da5df

7 files changed

Lines changed: 40 additions & 26 deletions

File tree

steve-core/src/main/java/de/rwth/idsg/steve/config/SteveProperties.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,21 @@ public static class Ocpp {
9090

9191
@Data
9292
public static class Ws {
93-
private @Nullable Integer maxTextMessageSize;
94-
private @Nullable Duration idleTimeout;
95-
private String[] allowedOriginPatterns;
93+
public static final int DEFAULT_MAX_MSG_SIZE = 8_388_608; // 8 MB for max message size
94+
private static final Duration DEFAULT_IDLE_TIMEOUT = Duration.ofHours(2);
95+
private static final String[] DEFAULT_ALLOWED_ORIGINS = new String[] {"*"};
96+
97+
private int maxTextMessageSize = DEFAULT_MAX_MSG_SIZE;
98+
private Duration idleTimeout = DEFAULT_IDLE_TIMEOUT;
99+
private String[] allowedOriginPatterns = DEFAULT_ALLOWED_ORIGINS;
100+
101+
public int getBufferSizeLimit() {
102+
return 5 * maxTextMessageSize;
103+
}
104+
105+
public Duration getSendTimeLimit() {
106+
return Duration.ofSeconds(10);
107+
}
96108
}
97109
}
98110
}

steve-ocpp/steve-ocpp-transport-websocket/src/main/java/de/rwth/idsg/steve/config/OcppWebSocketConfiguration.java

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
import org.springframework.web.socket.server.jetty.JettyRequestUpgradeStrategy;
3636
import org.springframework.web.socket.server.support.DefaultHandshakeHandler;
3737

38-
import java.time.Duration;
3938
import java.util.List;
4039

4140
/**
@@ -48,10 +47,6 @@
4847
@RequiredArgsConstructor
4948
public class OcppWebSocketConfiguration implements WebSocketConfigurer {
5049

51-
public static final int DEFAULT_MAX_MSG_SIZE = 8_388_608; // 8 MB for max message size
52-
private static final Duration DEFAULT_IDLE_TIMEOUT = Duration.ofHours(2);
53-
private static final String[] DEFAULT_ALLOWED_ORIGINS = new String[] {"*"};
54-
5550
private final ChargePointRegistrationService chargePointRegistrationService;
5651
private final ChargeBoxIdValidator chargeBoxIdValidator;
5752

@@ -75,10 +70,7 @@ public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
7570
registry.addHandler(dummyWebSocketHandler(), pathInfix + "*")
7671
.setHandshakeHandler(handshakeHandler())
7772
.addInterceptors(handshakeInterceptor)
78-
.setAllowedOrigins(
79-
steveProperties.getOcpp().getWs().getAllowedOriginPatterns() != null
80-
? steveProperties.getOcpp().getWs().getAllowedOriginPatterns()
81-
: DEFAULT_ALLOWED_ORIGINS);
73+
.setAllowedOrigins(steveProperties.getOcpp().getWs().getAllowedOriginPatterns());
8274
}
8375

8476
@Bean
@@ -94,14 +86,8 @@ public HandshakeHandler handshakeHandler() {
9486
var strategy = new JettyRequestUpgradeStrategy();
9587

9688
strategy.addWebSocketConfigurer(configurable -> {
97-
configurable.setMaxTextMessageSize(
98-
steveProperties.getOcpp().getWs().getMaxTextMessageSize() != null
99-
? steveProperties.getOcpp().getWs().getMaxTextMessageSize()
100-
: DEFAULT_MAX_MSG_SIZE);
101-
configurable.setIdleTimeout(
102-
steveProperties.getOcpp().getWs().getIdleTimeout() != null
103-
? steveProperties.getOcpp().getWs().getIdleTimeout()
104-
: DEFAULT_IDLE_TIMEOUT);
89+
configurable.setMaxTextMessageSize(steveProperties.getOcpp().getWs().getMaxTextMessageSize());
90+
configurable.setIdleTimeout(steveProperties.getOcpp().getWs().getIdleTimeout());
10591
});
10692

10793
return new DefaultHandshakeHandler(strategy);

steve-ocpp/steve-ocpp-transport-websocket/src/main/java/de/rwth/idsg/steve/ocpp/ws/AbstractWebSocketEndpoint.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.fasterxml.jackson.databind.ObjectMapper;
2222
import com.google.common.base.Strings;
2323
import de.rwth.idsg.steve.config.DelegatingTaskScheduler;
24+
import de.rwth.idsg.steve.config.SteveProperties;
2425
import de.rwth.idsg.steve.ocpp.OcppTransport;
2526
import de.rwth.idsg.steve.ocpp.ws.data.CommunicationContext;
2627
import de.rwth.idsg.steve.ocpp.ws.data.SessionContext;
@@ -70,6 +71,7 @@ public abstract class AbstractWebSocketEndpoint extends ConcurrentWebSocketHandl
7071
private final Object sessionContextLock = new Object();
7172

7273
protected AbstractWebSocketEndpoint(
74+
SteveProperties steveProperties,
7375
WebSocketLogger webSocketLogger,
7476
DelegatingTaskScheduler asyncTaskScheduler,
7577
OcppServerRepository ocppServerRepository,
@@ -80,6 +82,7 @@ protected AbstractWebSocketEndpoint(
8082
ObjectMapper ocppMapper,
8183
TypeStore typeStore,
8284
Consumer<CommunicationContext> handler) {
85+
super(steveProperties);
8386
this.webSocketLogger = webSocketLogger;
8487
this.asyncTaskScheduler = asyncTaskScheduler;
8588
this.ocppServerRepository = ocppServerRepository;

steve-ocpp/steve-ocpp-transport-websocket/src/main/java/de/rwth/idsg/steve/ocpp/ws/ConcurrentWebSocketHandler.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,27 +18,31 @@
1818
*/
1919
package de.rwth.idsg.steve.ocpp.ws;
2020

21-
import de.rwth.idsg.steve.config.OcppWebSocketConfiguration;
21+
import de.rwth.idsg.steve.config.SteveProperties;
2222
import org.springframework.web.socket.CloseStatus;
2323
import org.springframework.web.socket.WebSocketHandler;
2424
import org.springframework.web.socket.WebSocketMessage;
2525
import org.springframework.web.socket.WebSocketSession;
2626
import org.springframework.web.socket.handler.ConcurrentWebSocketSessionDecorator;
2727

28+
import java.time.Duration;
2829
import java.util.Map;
2930
import java.util.concurrent.ConcurrentHashMap;
30-
import java.util.concurrent.TimeUnit;
3131

3232
/**
3333
* @author Sevket Goekay <sevketgokay@gmail.com>
3434
* @since 07.05.2019
3535
*/
3636
public abstract class ConcurrentWebSocketHandler implements WebSocketHandler {
3737

38-
private static final int SEND_TIME_LIMIT = (int) TimeUnit.SECONDS.toMillis(10);
39-
private static final int BUFFER_SIZE_LIMIT = 5 * OcppWebSocketConfiguration.DEFAULT_MAX_MSG_SIZE;
40-
4138
private final Map<String, ConcurrentWebSocketSessionDecorator> sessions = new ConcurrentHashMap<>();
39+
private final Duration sendTimeLimit;
40+
private final int bufferSizeLimit;
41+
42+
protected ConcurrentWebSocketHandler(SteveProperties steveProperties) {
43+
sendTimeLimit = steveProperties.getOcpp().getWs().getSendTimeLimit();
44+
bufferSizeLimit = steveProperties.getOcpp().getWs().getBufferSizeLimit();
45+
}
4246

4347
@Override
4448
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
@@ -63,7 +67,7 @@ public void afterConnectionClosed(WebSocketSession session, CloseStatus closeSta
6367
private ConcurrentWebSocketSessionDecorator internalGet(WebSocketSession session) {
6468
return sessions.computeIfAbsent(
6569
session.getId(),
66-
s -> new ConcurrentWebSocketSessionDecorator(session, SEND_TIME_LIMIT, BUFFER_SIZE_LIMIT));
70+
s -> new ConcurrentWebSocketSessionDecorator(session, (int) sendTimeLimit.toMillis(), bufferSizeLimit));
6771
}
6872

6973
// -------------------------------------------------------------------------

steve-ocpp/steve-ocpp-transport-websocket/src/main/java/de/rwth/idsg/steve/ocpp/ws/ocpp12/Ocpp12WebSocketEndpoint.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import de.rwth.idsg.ocpp.jaxb.RequestType;
2323
import de.rwth.idsg.ocpp.jaxb.ResponseType;
2424
import de.rwth.idsg.steve.config.DelegatingTaskScheduler;
25+
import de.rwth.idsg.steve.config.SteveProperties;
2526
import de.rwth.idsg.steve.ocpp.OcppProtocol;
2627
import de.rwth.idsg.steve.ocpp.OcppVersion;
2728
import de.rwth.idsg.steve.ocpp.soap.CentralSystemService12_SoapServer;
@@ -54,6 +55,7 @@
5455
public class Ocpp12WebSocketEndpoint extends AbstractWebSocketEndpoint {
5556

5657
public Ocpp12WebSocketEndpoint(
58+
SteveProperties steveProperties,
5759
WebSocketLogger webSocketLogger,
5860
DelegatingTaskScheduler asyncTaskScheduler,
5961
OcppServerRepository ocppServerRepository,
@@ -65,6 +67,7 @@ public Ocpp12WebSocketEndpoint(
6567
CentralSystemService12_SoapServer ocpp12Server,
6668
Ocpp12TypeStore ocpp12TypeStore) {
6769
super(
70+
steveProperties,
6871
webSocketLogger,
6972
asyncTaskScheduler,
7073
ocppServerRepository,

steve-ocpp/steve-ocpp-transport-websocket/src/main/java/de/rwth/idsg/steve/ocpp/ws/ocpp15/Ocpp15WebSocketEndpoint.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import de.rwth.idsg.ocpp.jaxb.RequestType;
2323
import de.rwth.idsg.ocpp.jaxb.ResponseType;
2424
import de.rwth.idsg.steve.config.DelegatingTaskScheduler;
25+
import de.rwth.idsg.steve.config.SteveProperties;
2526
import de.rwth.idsg.steve.ocpp.OcppProtocol;
2627
import de.rwth.idsg.steve.ocpp.OcppVersion;
2728
import de.rwth.idsg.steve.ocpp.soap.CentralSystemService15_SoapServer;
@@ -55,6 +56,7 @@
5556
public class Ocpp15WebSocketEndpoint extends AbstractWebSocketEndpoint {
5657

5758
public Ocpp15WebSocketEndpoint(
59+
SteveProperties steveProperties,
5860
WebSocketLogger webSocketLogger,
5961
DelegatingTaskScheduler asyncTaskScheduler,
6062
OcppServerRepository ocppServerRepository,
@@ -66,6 +68,7 @@ public Ocpp15WebSocketEndpoint(
6668
CentralSystemService15_SoapServer ocpp15Server,
6769
Ocpp15TypeStore ocpp15TypeStore) {
6870
super(
71+
steveProperties,
6972
webSocketLogger,
7073
asyncTaskScheduler,
7174
ocppServerRepository,

steve-ocpp/steve-ocpp-transport-websocket/src/main/java/de/rwth/idsg/steve/ocpp/ws/ocpp16/Ocpp16WebSocketEndpoint.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import de.rwth.idsg.ocpp.jaxb.RequestType;
2323
import de.rwth.idsg.ocpp.jaxb.ResponseType;
2424
import de.rwth.idsg.steve.config.DelegatingTaskScheduler;
25+
import de.rwth.idsg.steve.config.SteveProperties;
2526
import de.rwth.idsg.steve.ocpp.OcppProtocol;
2627
import de.rwth.idsg.steve.ocpp.OcppVersion;
2728
import de.rwth.idsg.steve.ocpp.soap.CentralSystemService16_SoapServer;
@@ -55,6 +56,7 @@
5556
public class Ocpp16WebSocketEndpoint extends AbstractWebSocketEndpoint {
5657

5758
public Ocpp16WebSocketEndpoint(
59+
SteveProperties steveProperties,
5860
WebSocketLogger webSocketLogger,
5961
DelegatingTaskScheduler asyncTaskScheduler,
6062
OcppServerRepository ocppServerRepository,
@@ -66,6 +68,7 @@ public Ocpp16WebSocketEndpoint(
6668
CentralSystemService16_SoapServer ocpp16Server,
6769
Ocpp16TypeStore ocpp16TypeStore) {
6870
super(
71+
steveProperties,
6972
webSocketLogger,
7073
asyncTaskScheduler,
7174
ocppServerRepository,

0 commit comments

Comments
 (0)