Skip to content

Commit

Permalink
Let's goooooooo we can transfer!!
Browse files Browse the repository at this point in the history
  • Loading branch information
Tim203 committed Aug 21, 2024
1 parent b916df3 commit 6554da2
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 68 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -79,14 +79,14 @@ public void onMessage(SCTPStream sctpStream, byte[] bytes) {
concat = null;
}

if (buf.readableBytes() != expectedLength) {
System.out.println("expected " + expectedLength + " bytes but got " + buf.readableBytes());
var disconnect = new DisconnectPacket();
disconnect.setReason(DisconnectFailReason.BAD_PACKET);
disconnect.setKickMessage("");
sendPacket(disconnect);
return;
}
// if (buf.readableBytes() != expectedLength) {
// System.out.println("expected " + expectedLength + " bytes but got " + buf.readableBytes());
// var disconnect = new DisconnectPacket();
// disconnect.setReason(DisconnectFailReason.BAD_PACKET);
// disconnect.setKickMessage("");
// sendPacket(disconnect);
// return;
// }

var packet = readPacket(buf);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

// https://github.com/GeyserMC/GlobalLinkServer/blob/master/src/main/java/org/geysermc/globallinkserver/util/Utils.java
public class Utils {
public static ChainValidationResult.IdentityData validateAndEncryptConnection(MinecraftDataHandler session, List<String> certChainData, String clientDataJwt) throws Exception {
public static ChainValidationResult.IdentityData validateConnection(MinecraftDataHandler session, List<String> certChainData, String clientDataJwt) throws Exception {
ChainValidationResult result = EncryptionUtils.validateChain(certChainData);
if (!result.signed()) {
throw new IllegalArgumentException("Chain is not signed");
Expand All @@ -22,7 +22,8 @@ public static ChainValidationResult.IdentityData validateAndEncryptConnection(Mi
throw new IllegalStateException("Client data isn't signed by the given chain data");
}

startEncryptionHandshake(session, identityPublicKey);
//todo encrypt
// startEncryptionHandshake(session, identityPublicKey);

return result.identityClaims().extraData;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import com.rtm516.mcxboxbroadcast.core.webrtc.MinecraftDataHandler;
import com.rtm516.mcxboxbroadcast.core.webrtc.Utils;
import io.netty.buffer.Unpooled;
import java.util.UUID;
import org.cloudburstmc.math.vector.Vector2f;
import org.cloudburstmc.math.vector.Vector3f;
Expand All @@ -20,20 +19,15 @@
import org.cloudburstmc.protocol.bedrock.data.SpawnBiomeType;
import org.cloudburstmc.protocol.bedrock.packet.BedrockPacket;
import org.cloudburstmc.protocol.bedrock.packet.BedrockPacketHandler;
import org.cloudburstmc.protocol.bedrock.packet.BiomeDefinitionListPacket;
import org.cloudburstmc.protocol.bedrock.packet.ClientCacheStatusPacket;
import org.cloudburstmc.protocol.bedrock.packet.ClientToServerHandshakePacket;
import org.cloudburstmc.protocol.bedrock.packet.DisconnectPacket;
import org.cloudburstmc.protocol.bedrock.packet.LevelChunkPacket;
import org.cloudburstmc.protocol.bedrock.packet.LoginPacket;
import org.cloudburstmc.protocol.bedrock.packet.NetworkSettingsPacket;
import org.cloudburstmc.protocol.bedrock.packet.PlayStatusPacket;
import org.cloudburstmc.protocol.bedrock.packet.RequestNetworkSettingsPacket;
import org.cloudburstmc.protocol.bedrock.packet.ResourcePackClientResponsePacket;
import org.cloudburstmc.protocol.bedrock.packet.ResourcePackStackPacket;
import org.cloudburstmc.protocol.bedrock.packet.ResourcePacksInfoPacket;
import org.cloudburstmc.protocol.bedrock.packet.SetEntityMotionPacket;
import org.cloudburstmc.protocol.bedrock.packet.SetLocalPlayerAsInitializedPacket;
import org.cloudburstmc.protocol.bedrock.packet.StartGamePacket;
import org.cloudburstmc.protocol.bedrock.packet.TransferPacket;
import org.cloudburstmc.protocol.common.PacketSignal;
Expand Down Expand Up @@ -129,12 +123,16 @@ public PacketSignal handle(LoginPacket packet) {
return PacketSignal.HANDLED;
}

try {
// TODO
// ChainValidationResult.IdentityData extraData =
// Utils.validateAndEncryptConnection(session, packet.getChain(), packet.getExtra());
PlayStatusPacket status = new PlayStatusPacket();
status.setStatus(PlayStatusPacket.Status.LOGIN_SUCCESS);
dataHandler.sendPacket(status);

Utils.validateAndEncryptConnection(dataHandler, packet.getChain(), packet.getExtra());
ResourcePacksInfoPacket info = new ResourcePacksInfoPacket();
dataHandler.sendPacket(info);

try {
//todo use encryption
Utils.validateConnection(dataHandler, packet.getChain(), packet.getExtra());

} catch (AssertionError | Exception error) {
disconnect("disconnect.loginFailed");
Expand All @@ -151,12 +149,7 @@ public PacketSignal handle(ClientCacheStatusPacket packet) {
public PacketSignal handle(ResourcePackClientResponsePacket packet) {
switch (packet.getStatus()) {
case COMPLETED:
TransferPacket transferPacket = new TransferPacket();
transferPacket.setAddress("test.geysermc.org");
transferPacket.setPort(19132);
dataHandler.sendPacket(transferPacket);
// TODO Test if we can send a transfer packet here
// sendStartGame();
sendStartGame();
break;
case HAVE_ALL_PACKS:
ResourcePackStackPacket stack = new ResourcePackStackPacket();
Expand All @@ -172,22 +165,6 @@ public PacketSignal handle(ResourcePackClientResponsePacket packet) {
return PacketSignal.HANDLED;
}

@Override
public PacketSignal handle(ClientToServerHandshakePacket packet) {
PlayStatusPacket status = new PlayStatusPacket();
status.setStatus(PlayStatusPacket.Status.LOGIN_SUCCESS);
dataHandler.sendPacket(status);

ResourcePacksInfoPacket info = new ResourcePacksInfoPacket();
dataHandler.sendPacket(info);
return PacketSignal.HANDLED;
}

@Override
public PacketSignal handle(SetLocalPlayerAsInitializedPacket packet) {
return PacketSignal.HANDLED;
}

public void sendStartGame() {
// A lot of this likely doesn't need to be changed
StartGamePacket startGamePacket = new StartGamePacket();
Expand Down Expand Up @@ -255,29 +232,10 @@ public void sendStartGame() {

dataHandler.sendPacket(startGamePacket);

// Send an empty chunk
LevelChunkPacket data = new LevelChunkPacket();
data.setChunkX(0);
data.setChunkZ(0);
data.setSubChunksLength(0);
data.setData(Unpooled.wrappedBuffer(PaletteUtils.EMPTY_LEVEL_CHUNK_DATA));
data.setCachingEnabled(false);
dataHandler.sendPacket(data);

// Send the biomes
BiomeDefinitionListPacket biomeDefinitionListPacket = new BiomeDefinitionListPacket();
biomeDefinitionListPacket.setDefinitions(PaletteUtils.BIOMES_PALETTE);
dataHandler.sendPacket(biomeDefinitionListPacket);

// Let the client know the player can spawn
PlayStatusPacket playStatusPacket = new PlayStatusPacket();
playStatusPacket.setStatus(PlayStatusPacket.Status.PLAYER_SPAWN);
dataHandler.sendPacket(playStatusPacket);

// Freeze the player
SetEntityMotionPacket setEntityMotionPacket = new SetEntityMotionPacket();
setEntityMotionPacket.setRuntimeEntityId(1);
setEntityMotionPacket.setMotion(Vector3f.ZERO);
dataHandler.sendPacket(setEntityMotionPacket);
// can only start transferring after the StartGame packet
TransferPacket transferPacket = new TransferPacket();
transferPacket.setAddress("test.geysermc.org");
transferPacket.setPort(19132);
dataHandler.sendPacket(transferPacket);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

// https://github.com/CloudburstMC/Protocol/blob/3.0/bedrock-connection/src/main/java/org/cloudburstmc/protocol/bedrock/netty/codec/encryption/BedrockEncryptionEncoder.java
public class BedrockEncryptionEncoder {
private static final FastThreadLocal<MessageDigest> DIGEST = new FastThreadLocal<MessageDigest>() {
private static final FastThreadLocal<MessageDigest> DIGEST = new FastThreadLocal<>() {
protected MessageDigest initialValue() {
try {
return MessageDigest.getInstance("SHA-256");
Expand Down

0 comments on commit 6554da2

Please sign in to comment.