Skip to content

Commit 619875c

Browse files
authored
Do not set raknet flag NEEDS_B_AND_AS in compatibility mode
Signed-off-by: GitHub <noreply@github.com>
1 parent 7d0e98d commit 619875c

File tree

4 files changed

+47
-10
lines changed

4 files changed

+47
-10
lines changed

transport-raknet/src/main/java/org/cloudburstmc/netty/channel/raknet/packet/RakDatagramPacket.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public class RakDatagramPacket extends AbstractReferenceCounted {
3030

3131
private final ObjectPool.Handle<RakDatagramPacket> handle;
3232
private final List<EncapsulatedPacket> packets = new ArrayList<>();
33-
private byte flags = FLAG_VALID | FLAG_NEEDS_B_AND_AS;
33+
private byte flags = FLAG_VALID;
3434
private long sendTime;
3535
private long nextSend;
3636
private int sequenceIndex = -1;
@@ -86,7 +86,7 @@ protected void deallocate() {
8686
packet.release();
8787
}
8888
this.packets.clear();
89-
this.flags = FLAG_VALID | FLAG_NEEDS_B_AND_AS;
89+
this.flags = FLAG_VALID;
9090
this.sendTime = 0;
9191
this.nextSend = 0;
9292
this.sequenceIndex = -1;
@@ -114,6 +114,10 @@ public void setFlags(byte flags) {
114114
this.flags = flags;
115115
}
116116

117+
public void setFlag(byte flag) {
118+
this.flags |= flag;
119+
}
120+
117121
public long getSendTime() {
118122
return sendTime;
119123
}

transport-raknet/src/main/java/org/cloudburstmc/netty/handler/codec/raknet/client/RakClientOfflineHandlerCompatible.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,9 @@
1414
import org.cloudburstmc.netty.handler.codec.raknet.common.RakAcknowledgeHandler;
1515
import org.cloudburstmc.netty.handler.codec.raknet.common.RakDatagramCodec;
1616
import org.cloudburstmc.netty.handler.codec.raknet.common.RakSessionCodec;
17+
import org.cloudburstmc.netty.handler.codec.raknet.common.RakSessionCodecCompatible;
1718
import org.cloudburstmc.netty.util.RakUtils;
1819

19-
import static org.cloudburstmc.netty.channel.raknet.RakConstants.MAXIMUM_MTU_SIZE;
20-
2120
public class RakClientOfflineHandlerCompatible extends RakClientOfflineHandler {
2221
public static final String NAME = "rak-client-handler";
2322

@@ -36,7 +35,7 @@ void onRetryAttempt(Channel channel) {
3635

3736
@Override
3837
void onSuccess(ChannelHandlerContext ctx) {
39-
RakSessionCodec sessionCodec = new RakSessionCodec(this.rakChannel());
38+
RakSessionCodec sessionCodec = new RakSessionCodecCompatible(this.rakChannel());
4039
ctx.pipeline().addAfter(NAME, RakDatagramCodec.NAME, new RakDatagramCodec());
4140
ctx.pipeline().addAfter(RakDatagramCodec.NAME, RakAcknowledgeHandler.NAME, new RakAcknowledgeHandler(sessionCodec));
4241
ctx.pipeline().addAfter(RakAcknowledgeHandler.NAME, RakSessionCodec.NAME, sessionCodec);

transport-raknet/src/main/java/org/cloudburstmc/netty/handler/codec/raknet/common/RakSessionCodec.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -580,7 +580,7 @@ private void sendDatagrams(ChannelHandlerContext ctx, long curTime, int mtuSize)
580580
}
581581

582582
int transmissionBandwidth = this.slidingWindow.getTransmissionBandwidth();
583-
RakDatagramPacket datagram = RakDatagramPacket.newInstance();
583+
RakDatagramPacket datagram = this.createDatagramPacket();
584584
datagram.setSendTime(curTime);
585585
EncapsulatedPacket packet;
586586

@@ -597,7 +597,7 @@ private void sendDatagrams(ChannelHandlerContext ctx, long curTime, int mtuSize)
597597
if (!datagram.tryAddPacket(packet, mtuSize)) {
598598
this.sendDatagram(ctx, datagram, curTime, this.sentDatagrams);
599599

600-
datagram = RakDatagramPacket.newInstance();
600+
datagram = this.createDatagramPacket();
601601
datagram.setSendTime(curTime);
602602
if (!datagram.tryAddPacket(packet, mtuSize)) {
603603
throw new IllegalArgumentException("Packet too large to fit in MTU (size: " + packet.getSize() + ", MTU: " + mtuSize + ")");
@@ -613,7 +613,7 @@ private void sendDatagrams(ChannelHandlerContext ctx, long curTime, int mtuSize)
613613
private void sendImmediate(ChannelHandlerContext ctx, EncapsulatedPacket[] packets) {
614614
long curTime = System.currentTimeMillis();
615615
for (EncapsulatedPacket packet : packets) {
616-
RakDatagramPacket datagram = RakDatagramPacket.newInstance();
616+
RakDatagramPacket datagram = this.createDatagramPacket();
617617
datagram.setSendTime(curTime);
618618
if (!datagram.tryAddPacket(packet, this.getMtu())) {
619619
throw new IllegalArgumentException("Packet too large to fit in MTU (size: " + packet.getSize() + ", MTU: " + this.getMtu() + ")");
@@ -705,9 +705,8 @@ private EncapsulatedPacket[] createEncapsulated(RakMessage rakMessage) {
705705
// Now create the packets.
706706
EncapsulatedPacket[] packets = new EncapsulatedPacket[buffers.length];
707707
for (int i = 0, parts = buffers.length; i < parts; i++) {
708-
EncapsulatedPacket packet = EncapsulatedPacket.newInstance();
708+
EncapsulatedPacket packet = this.createEncapsulatedPacket();
709709
packet.setBuffer(buffers[i]);
710-
packet.setNeedsBAS(true);
711710
packet.setOrderingChannel((short) orderingChannel);
712711
packet.setOrderingIndex(orderingIndex);
713712
// packet.setSequenceIndex(sequencingIndex);
@@ -870,4 +869,16 @@ protected Queue<IntRange> getAcknowledgeQueue(boolean nack) {
870869
public Channel getChannel() {
871870
return channel;
872871
}
872+
873+
protected RakDatagramPacket createDatagramPacket() {
874+
RakDatagramPacket datagram = RakDatagramPacket.newInstance();
875+
datagram.setFlag(FLAG_NEEDS_B_AND_AS);
876+
return datagram;
877+
}
878+
879+
protected EncapsulatedPacket createEncapsulatedPacket() {
880+
EncapsulatedPacket packet = EncapsulatedPacket.newInstance();
881+
packet.setNeedsBAS(true);
882+
return packet;
883+
}
873884
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.cloudburstmc.netty.handler.codec.raknet.common;
2+
3+
import org.cloudburstmc.netty.channel.raknet.*;
4+
import org.cloudburstmc.netty.channel.raknet.packet.EncapsulatedPacket;
5+
import org.cloudburstmc.netty.channel.raknet.packet.RakDatagramPacket;
6+
7+
public class RakSessionCodecCompatible extends RakSessionCodec {
8+
public static final String NAME = "rak-session-codec";
9+
10+
public RakSessionCodecCompatible(RakChannel channel) {
11+
super(channel);
12+
}
13+
14+
@Override
15+
protected RakDatagramPacket createDatagramPacket() {
16+
return RakDatagramPacket.newInstance();
17+
}
18+
19+
@Override
20+
protected EncapsulatedPacket createEncapsulatedPacket() {
21+
return EncapsulatedPacket.newInstance();
22+
}
23+
}

0 commit comments

Comments
 (0)