Skip to content

Commit a8bfba5

Browse files
committed
add configuration of max packet size for network
1 parent 0d3e61f commit a8bfba5

File tree

3 files changed

+28
-0
lines changed

3 files changed

+28
-0
lines changed

rlib-network/src/main/java/javasabr/rlib/network/NetworkConfig.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@ class SimpleNetworkConfig implements NetworkConfig {
3030
private int writeBufferSize = 2048;
3131
@Builder.Default
3232
private int retryDelayInMs = 1000;
33+
@Builder.Default
34+
private int maxPacketSize = 5 * 1024 * 1024;
35+
@Builder.Default
36+
private int maxEmptyReadsBeforeClose = 3;
37+
@Builder.Default
38+
private boolean useDirectByteBuffer = false;
3339
}
3440

3541
NetworkConfig DEFAULT_CLIENT = new NetworkConfig() {
@@ -76,6 +82,13 @@ default int writeBufferSize() {
7682
return 2048;
7783
}
7884

85+
/**
86+
* Gets the max size of one single network packet.
87+
*/
88+
default int maxPacketSize() {
89+
return 5 * 1024 * 1024;
90+
}
91+
7992
/**
8093
* Gets a timeout for retry read/write operation.
8194
*/

rlib-network/src/main/java/javasabr/rlib/network/ServerNetworkConfig.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,12 @@ class SimpleServerNetworkConfig implements ServerNetworkConfig {
3434
@Builder.Default
3535
private int retryDelayInMs = 1000;
3636
@Builder.Default
37+
private int maxPacketSize = 5 * 1024 * 1024;
38+
@Builder.Default
39+
private int maxEmptyReadsBeforeClose = 3;
40+
@Builder.Default
41+
private boolean useDirectByteBuffer = false;
42+
@Builder.Default
3743
private int threadGroupMinSize = 1;
3844
@Builder.Default
3945
private int threadGroupMaxSize = 1;

rlib-network/src/main/java/javasabr/rlib/network/packet/impl/AbstractNetworkPacketReader.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,11 +153,15 @@ protected int readPackets(ByteBuffer receivedBuffer) {
153153
*/
154154
protected int readPackets(ByteBuffer receivedBuffer, ByteBuffer pendingBuffer) {
155155
String remoteAddress = remoteAddress();
156+
NetworkConfig networkConfig = connection
157+
.network()
158+
.config();
156159

157160
log.debug(remoteAddress, receivedBuffer,
158161
"[%s] Start reading packets from received buffer:[%s]"::formatted);
159162

160163
int waitedBytes = pendingBuffer.position();
164+
161165
ByteBuffer bufferToRead = receivedBuffer;
162166
ByteBuffer tempBigBuffer = tempBigBuffer();
163167

@@ -214,6 +218,11 @@ else if (waitedBytes > 0) {
214218

215219
int positionBeforeRead = endPosition;
216220
int packetFullLength = readFullPacketLength(bufferToRead);
221+
if (packetFullLength > networkConfig.maxPacketSize()) {
222+
throw new IllegalStateException(
223+
"Received to big packet:[" + packetFullLength + ">" + networkConfig.maxPacketSize() + "]");
224+
}
225+
217226
int alreadyReadBytes = bufferToRead.position() - endPosition;
218227
int packetDataLength = calculatePacketDataLength(packetFullLength, alreadyReadBytes, bufferToRead);
219228

0 commit comments

Comments
 (0)