mirror of
https://github.com/sirjonasxx/G-Earth.git
synced 2025-02-16 19:22:37 +01:00
packethandler stuff
This commit is contained in:
parent
129cff8c37
commit
47cbbf939c
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,9 @@
|
||||
package gearth.protocol.packethandler;
|
||||
|
||||
import gearth.protocol.HMessage;
|
||||
|
||||
public interface PacketSender {
|
||||
|
||||
void send(HMessage hMessage);
|
||||
|
||||
}
|
@ -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++;
|
||||
|
@ -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++;
|
||||
}
|
||||
}
|
@ -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++;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user