packethandler stuff

This commit is contained in:
sirjonasxx 2022-02-10 18:06:44 +01:00
parent 129cff8c37
commit 47cbbf939c
7 changed files with 34 additions and 52 deletions

View File

@ -5,6 +5,7 @@ import gearth.protocol.HMessage;
import gearth.protocol.connection.*;
import gearth.protocol.connection.proxy.nitro.NitroConstants;
import gearth.protocol.connection.proxy.nitro.NitroProxyProvider;
import gearth.protocol.packethandler.nitro.NitroPacketHandler;
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;

View File

@ -4,6 +4,7 @@ import gearth.protocol.HConnection;
import gearth.protocol.HMessage;
import gearth.protocol.connection.proxy.nitro.NitroConstants;
import gearth.protocol.packethandler.PacketHandler;
import gearth.protocol.packethandler.nitro.NitroPacketHandler;
import javax.websocket.*;
import java.io.IOException;

View File

@ -32,4 +32,15 @@ public abstract class PacketHandler {
message.getPacket().resetReadIndex();
}
protected void awaitListeners(HMessage message, PacketSender packetSender) {
notifyListeners(0, message);
notifyListeners(1, message);
extensionHandler.handle(message, message2 -> {
notifyListeners(2, message2);
if (!message2.isBlocked()) {
packetSender.send(message2);
}
});
}
}

View File

@ -0,0 +1,9 @@
package gearth.protocol.packethandler;
import gearth.protocol.HMessage;
public interface PacketSender {
void send(HMessage hMessage);
}

View File

@ -8,7 +8,6 @@ import gearth.protocol.crypto.RC4;
import gearth.protocol.packethandler.PacketHandler;
import gearth.protocol.packethandler.PayloadBuffer;
import gearth.services.extension_handler.ExtensionHandler;
import gearth.services.extension_handler.OnHMessageHandled;
import java.io.IOException;
import java.io.OutputStream;
@ -116,10 +115,14 @@ public abstract class FlashPacketHandler extends PacketHandler {
}
public boolean sendToStream(byte[] buffer) {
return sendToStream(buffer, isEncryptedStream);
}
private boolean sendToStream(byte[] buffer, boolean isEncrypted) {
synchronized (sendLock) {
try {
out.write(
(!isEncryptedStream)
(!isEncrypted)
? buffer
: encryptcipher.rc4(buffer)
);
@ -139,29 +142,11 @@ public abstract class FlashPacketHandler extends PacketHandler {
HMessage hMessage = new HMessage(hpacket, getMessageSide(), currentIndex);
boolean isencrypted = isEncryptedStream;
OnHMessageHandled afterExtensionIntercept = hMessage1 -> {
if (isDataStream) {
notifyListeners(2, hMessage1);
}
if (!hMessage1.isBlocked()) {
synchronized (sendLock) {
out.write(
(!isencrypted)
? hMessage1.getPacket().toBytes()
: encryptcipher.rc4(hMessage1.getPacket().toBytes())
);
}
}
};
if (isDataStream) {
notifyListeners(0, hMessage);
notifyListeners(1, hMessage);
extensionHandler.handle(hMessage, afterExtensionIntercept);
awaitListeners(hMessage, hMessage1 -> sendToStream(hMessage1.getPacket().toBytes(), isencrypted));
}
else {
afterExtensionIntercept.finished(hMessage);
sendToStream(hMessage.getPacket().toBytes(), isencrypted);
}
currentIndex++;

View File

@ -1,11 +1,11 @@
package gearth.protocol.connection.proxy.nitro.websocket;
package gearth.protocol.packethandler.nitro;
import gearth.protocol.HMessage;
import gearth.protocol.HPacket;
import gearth.protocol.connection.proxy.nitro.websocket.NitroSession;
import gearth.protocol.packethandler.PacketHandler;
import gearth.protocol.packethandler.PayloadBuffer;
import gearth.services.extension_handler.ExtensionHandler;
import gearth.services.extension_handler.OnHMessageHandled;
import javax.websocket.Session;
import java.io.IOException;
@ -18,7 +18,7 @@ public class NitroPacketHandler extends PacketHandler {
private final PayloadBuffer payloadBuffer;
private final Object payloadLock;
protected NitroPacketHandler(HMessage.Direction direction, NitroSession session, ExtensionHandler extensionHandler, Object[] trafficObservables) {
public NitroPacketHandler(HMessage.Direction direction, NitroSession session, ExtensionHandler extensionHandler, Object[] trafficObservables) {
super(extensionHandler, trafficObservables);
this.direction = direction;
this.session = session;
@ -50,19 +50,7 @@ public class NitroPacketHandler extends PacketHandler {
synchronized (payloadLock) {
for (HPacket packet : payloadBuffer.receive()) {
HMessage hMessage = new HMessage(packet, direction, currentIndex);
OnHMessageHandled afterExtensionIntercept = hMessage1 -> {
notifyListeners(2, hMessage1);
if (!hMessage1.isBlocked()) {
sendToStream(hMessage1.getPacket().toBytes());
}
};
notifyListeners(0, hMessage);
notifyListeners(1, hMessage);
extensionHandler.handle(hMessage, afterExtensionIntercept);
awaitListeners(hMessage, hMessage1 -> sendToStream(hMessage1.getPacket().toBytes()));
currentIndex++;
}
}

View File

@ -5,7 +5,6 @@ import gearth.protocol.HPacket;
import gearth.protocol.packethandler.ByteArrayUtils;
import gearth.protocol.packethandler.PacketHandler;
import gearth.services.extension_handler.ExtensionHandler;
import gearth.services.extension_handler.OnHMessageHandled;
import javax.websocket.Session;
import java.io.IOException;
@ -34,19 +33,7 @@ public class UnityPacketHandler extends PacketHandler {
@Override
public void act(byte[] buffer) throws IOException {
HMessage hMessage = new HMessage(new HPacket(buffer), direction, currentIndex);
OnHMessageHandled afterExtensionIntercept = hMessage1 -> {
notifyListeners(2, hMessage1);
if (!hMessage1.isBlocked()) {
sendToStream(hMessage1.getPacket().toBytes());
}
};
notifyListeners(0, hMessage);
notifyListeners(1, hMessage);
extensionHandler.handle(hMessage, afterExtensionIntercept);
awaitListeners(hMessage, hMessage1 -> sendToStream(hMessage1.getPacket().toBytes()));
currentIndex++;
}
}