Skip to content

Commit

Permalink
1.7.2->1.12.2 plugin refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
caunt committed Sep 30, 2024
1 parent 26bfb7c commit 6d5747a
Show file tree
Hide file tree
Showing 15 changed files with 329 additions and 262 deletions.
1 change: 0 additions & 1 deletion src/API/Links/ILink.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,4 @@ public interface ILink : IEventListener, IAsyncDisposable
public IMinecraftChannel PlayerChannel { get; }
public IMinecraftChannel ServerChannel { get; }
public bool IsAlive { get; }
public bool IsRestarting { get; }
}
6 changes: 1 addition & 5 deletions src/Platform/Links/Link.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ public Link(IPlayer player, IServer server, IMinecraftChannel playerChannel, IMi
public IMinecraftChannel ServerChannel { get; init; }

public bool IsAlive => _playerToServerTask.Status == TaskStatus.Running && _serverToPlayerTask.Status == TaskStatus.Running;
public bool IsRestarting { get; }

public async ValueTask DisposeAsync()
{
Expand Down Expand Up @@ -145,9 +144,6 @@ await _events.ThrowAsync(new MessageSentEvent
}
catch (Exception exception) when (exception is EndOfStreamException or IOException or TaskCanceledException or OperationCanceledException or ObjectDisposedException)
{
if (IsRestarting)
return;

if (direction is not Direction.Serverbound)
return;

Expand All @@ -163,7 +159,7 @@ await _events.ThrowAsync(new MessageSentEvent
await PlayerChannel.FlushAsync(forceCancellationToken);
await ServerChannel.FlushAsync(forceCancellationToken);

if (!IsRestarting)
if (sourceChannel == PlayerChannel) // throw event only once
_ = _events.ThrowAsync(new LinkStoppingEvent { Link = this }, forceCancellationToken).CatchExceptions();
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/Platform/Platform.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public class Platform(ILogger<Platform> logger, ISettings settings, IPluginServi

public async Task StartAsync(CancellationToken cancellationToken)
{
LoggingLevelSwitch.MinimumLevel = LogEventLevel.Verbose;
LoggingLevelSwitch.MinimumLevel = LogEventLevel.Debug;

logger.LogInformation("Starting Void proxy");
var startTime = Stopwatch.GetTimestamp();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ public void OnMessageSent(MessageSentEvent @event, CancellationToken cancellatio
@event.Link.ServerChannel.Resume();
break;
case SetCompressionPacket:
@event.Link.PlayerChannel.Resume();
if (@event.Link.PlayerChannel.IsPaused)
@event.Link.PlayerChannel.Resume();
break;
case LoginSuccessPacket:
if (@event.Link.PlayerChannel.IsPaused)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,15 @@ namespace Void.Proxy.Plugins.ProtocolSupport.Java.v1_13_to_1_20_1.Services;

public class EncryptionService : IPluginService
{
private static readonly byte[] _privateKey = Convert.FromHexString("30820275020100300d06092a864886f70d01010105000482025f3082025b020100028181008833058bd694928c004a7ffbaeca35f5bac94b070082080958c71bc8bc23a507c64432a8d38cb3d405928ef58f89f681c87a3909f3a1ec08cbdc5223efb612efcdeb639fd93562ac73e407c6bd8d68d7dc1a226e6c95c9f3e5a94edaec76a98c411caf6caec3f2618ea33169b72e42687faf4ac7478af722df6c234b5fcc82ef0203010001028180119dc27a8dd74b052a07237aa2e700b261e5d0a5d288ff0fc66dd51d7cf2d750f97204b8c01ebe26644f75323478a71658f486157ac5021f392456c8d323d25b0583aa927c9bf835017fe3af24da1c4dd6ab416c06bbedfef40ef4428adc60d4e2d5e613d3278ca87590fc91ff7d43ad359cf16215af0391e53eef1581882dc1024100a99aca2367811e10f8e15ee5472d50507756bb48c5be1cc5cb6251b43dcec7163f52913766722968d1843daf99687026010db8986ad1c58005c238eec2ca2bff024100cd940653037a7ff8e8e4aa3d1d6d543a12297538dac4c4def496fd96d030dd0c0daa32da80b14e1344a8571e140ce0d27e009cbe0a7e9124a0a90a2e0bac691102401ddc048e6b208e3c8ab492d266cf917e392469e08bffc66d043b910adc7ed50a13a7e3ad0f3a3614201eda055a4acac3c617b6520f2c534b10b87af17e15bddd023f3c3a21a03064b3193921c4be22e0e4cc1e8606d1a14604674d40ef0a3ff410ce773265b39e0053df513e0047cf97f645b4a4794733cbe0b9da57aba3d1c7b10241009905827e05808b57c0c836d29b1efe9852f502509b54ab6246539d359cbb036904283b6f6f5636659f7b25478949f0acc3a7cf4edf13cd2539376247845deff1");
private static readonly byte[] PrivateKey = Convert.FromHexString("30820277020100300d06092a864886f70d0101010500048202613082025d02010002818100e9675bb7efd2f2b75ee5f1ea07399fe38239a4196506fd7f6489961d6de770e7580c69e84fb040fe19721f06e7d8dc634280f0dbb71b79292f783eb2b6c409c5438197c3bd869b17264bb5aa448614fefccd3d841b278f05c202429d075deb2f5d1d2d24d80363f69444974358f23912951b9d3c2a4a86a0e5c13a84a997a04b02030100010281802e0fb94088023be72741bee79e0c67bae8d8c24346b645f1cd9fff71885e7be013f6c331d704241761632daf59b2e8ef67d0f5778edfcb9deea1ced1cb12ce1070f7d5226093bf9f2c7587a38239837849ed4728bbbba8da60b297b0397d6cafae8f427775aa8e22a42e04c7c8208da79a8f940ff2d8c31a22e723c56e136ce1024100ed595c08a640f5a71573ee45c79247bca08d4cb478d658aab90c5133b9bb0187b0e8801066adc6bb8f1a9903ccf548e7c746883443e96d3fde505116ee9466eb024100fbbea1f5dd1b2f63f867597a66fb26b85a0faea928525e5906635d3366e14ef4d02e851015e34ce78652e0a6a22e0cdfe92c6dbebc1da9daae2086d86e44142102401780268db0b073e2444c834623798762d4dec8be81cc6f61100b792acef40635c23d7318aca1fe3069fdef32a223934167c8c309b1c3b60e81db9ffbce49a15b024100a685c02e99567d2f9cc6086b2e299dc03e5ab7474fd3c4731105b345e81ccb94a70cce9a085075b384a7d7d081e102452ec163cad236b0ff654540cd738af6e1024100abd64d321c66d4154a4d3ff1dfb265609d3ec650610bad4f00e461357fadf9542058ecc8458f0acd2744020f96ef1c5f21ea8c82028d837ac2e4a61f2ce35689");

[Subscribe]
public void OnMessageSent(MessageSentEvent @event, CancellationToken cancellationToken)
{
if (@event.Message is not EncryptionResponsePacket encryptionResponse)
return;

var secret = Decrypt(_privateKey, encryptionResponse.SharedSecret);
var secret = Decrypt(PrivateKey, encryptionResponse.SharedSecret);

@event.Link.ServerChannel.AddBefore<MinecraftPacketMessageStream, AesCfb8BufferedStream>(new AesCfb8BufferedStream(secret));
@event.Link.PlayerChannel.AddBefore<MinecraftPacketMessageStream, AesCfb8BufferedStream>(new AesCfb8BufferedStream(secret));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
using Void.Proxy.API.Events;
using Void.Proxy.API.Events.Plugins;
using Void.Proxy.API.Events.Proxy;
using Void.Proxy.API.Events.Services;
using Void.Proxy.API.Network.Protocol;
using Void.Proxy.API.Plugins;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ public void OnMessageSent(MessageSentEvent @event, CancellationToken cancellatio
@event.Link.ServerChannel.Resume();
break;
case SetCompressionPacket:
@event.Link.PlayerChannel.Resume();
if (@event.Link.PlayerChannel.IsPaused)
@event.Link.PlayerChannel.Resume();
break;
case LoginSuccessPacket:
if (@event.Link.PlayerChannel.IsPaused)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,15 @@ namespace Void.Proxy.Plugins.ProtocolSupport.Java.v1_20_2_to_latest.Services;

public class EncryptionService : IPluginService
{
private static readonly byte[] _privateKey = Convert.FromHexString("30820275020100300d06092a864886f70d01010105000482025f3082025b020100028181008833058bd694928c004a7ffbaeca35f5bac94b070082080958c71bc8bc23a507c64432a8d38cb3d405928ef58f89f681c87a3909f3a1ec08cbdc5223efb612efcdeb639fd93562ac73e407c6bd8d68d7dc1a226e6c95c9f3e5a94edaec76a98c411caf6caec3f2618ea33169b72e42687faf4ac7478af722df6c234b5fcc82ef0203010001028180119dc27a8dd74b052a07237aa2e700b261e5d0a5d288ff0fc66dd51d7cf2d750f97204b8c01ebe26644f75323478a71658f486157ac5021f392456c8d323d25b0583aa927c9bf835017fe3af24da1c4dd6ab416c06bbedfef40ef4428adc60d4e2d5e613d3278ca87590fc91ff7d43ad359cf16215af0391e53eef1581882dc1024100a99aca2367811e10f8e15ee5472d50507756bb48c5be1cc5cb6251b43dcec7163f52913766722968d1843daf99687026010db8986ad1c58005c238eec2ca2bff024100cd940653037a7ff8e8e4aa3d1d6d543a12297538dac4c4def496fd96d030dd0c0daa32da80b14e1344a8571e140ce0d27e009cbe0a7e9124a0a90a2e0bac691102401ddc048e6b208e3c8ab492d266cf917e392469e08bffc66d043b910adc7ed50a13a7e3ad0f3a3614201eda055a4acac3c617b6520f2c534b10b87af17e15bddd023f3c3a21a03064b3193921c4be22e0e4cc1e8606d1a14604674d40ef0a3ff410ce773265b39e0053df513e0047cf97f645b4a4794733cbe0b9da57aba3d1c7b10241009905827e05808b57c0c836d29b1efe9852f502509b54ab6246539d359cbb036904283b6f6f5636659f7b25478949f0acc3a7cf4edf13cd2539376247845deff1");
private static readonly byte[] PrivateKey = Convert.FromHexString("30820277020100300d06092a864886f70d0101010500048202613082025d02010002818100e9675bb7efd2f2b75ee5f1ea07399fe38239a4196506fd7f6489961d6de770e7580c69e84fb040fe19721f06e7d8dc634280f0dbb71b79292f783eb2b6c409c5438197c3bd869b17264bb5aa448614fefccd3d841b278f05c202429d075deb2f5d1d2d24d80363f69444974358f23912951b9d3c2a4a86a0e5c13a84a997a04b02030100010281802e0fb94088023be72741bee79e0c67bae8d8c24346b645f1cd9fff71885e7be013f6c331d704241761632daf59b2e8ef67d0f5778edfcb9deea1ced1cb12ce1070f7d5226093bf9f2c7587a38239837849ed4728bbbba8da60b297b0397d6cafae8f427775aa8e22a42e04c7c8208da79a8f940ff2d8c31a22e723c56e136ce1024100ed595c08a640f5a71573ee45c79247bca08d4cb478d658aab90c5133b9bb0187b0e8801066adc6bb8f1a9903ccf548e7c746883443e96d3fde505116ee9466eb024100fbbea1f5dd1b2f63f867597a66fb26b85a0faea928525e5906635d3366e14ef4d02e851015e34ce78652e0a6a22e0cdfe92c6dbebc1da9daae2086d86e44142102401780268db0b073e2444c834623798762d4dec8be81cc6f61100b792acef40635c23d7318aca1fe3069fdef32a223934167c8c309b1c3b60e81db9ffbce49a15b024100a685c02e99567d2f9cc6086b2e299dc03e5ab7474fd3c4731105b345e81ccb94a70cce9a085075b384a7d7d081e102452ec163cad236b0ff654540cd738af6e1024100abd64d321c66d4154a4d3ff1dfb265609d3ec650610bad4f00e461357fadf9542058ecc8458f0acd2744020f96ef1c5f21ea8c82028d837ac2e4a61f2ce35689");

[Subscribe]
public void OnMessageSent(MessageSentEvent @event, CancellationToken cancellationToken)
{
if (@event.Message is not EncryptionResponsePacket encryptionResponse)
return;

var secret = Decrypt(_privateKey, encryptionResponse.SharedSecret);
var secret = Decrypt(PrivateKey, encryptionResponse.SharedSecret);

@event.Link.ServerChannel.AddBefore<MinecraftPacketMessageStream, AesCfb8BufferedStream>(new AesCfb8BufferedStream(secret));
@event.Link.PlayerChannel.AddBefore<MinecraftPacketMessageStream, AesCfb8BufferedStream>(new AesCfb8BufferedStream(secret));
Expand Down
Loading

0 comments on commit 6d5747a

Please sign in to comment.