Timothy Schenk
85aaec2371
All checks were successful
Build, Package and Push Images / preprocess (push) Successful in 2s
Build, Package and Push Images / build (push) Successful in 32s
Build, Package and Push Images / sbom-scan (push) Successful in 1m2s
Build, Package and Push Images / container-sbom-scan (push) Successful in 40s
Build, Package and Push Images / container-build (push) Successful in 2m2s
Build, Package and Push Images / sonarqube (push) Successful in 2m5s
fix: incorrect command fix: incorrect command fix: incorrect command fix: export tools path chore: test dir fix: test build script fix: missing semicolon fix: missing semicolon fix: missing buildscript fix: missing buildscript chore: update build to .net7 ci: set root dir ci: set root dir revert: .net 8 support for benchmarks ci: disable docker for ci ci: disable docker for ci ci: disable docker for ci ci: trigger ci: i stg ci: let's hope its the correct one ci: i stg ci: further sonarscanner setup ci: add tools ci: rearrange ci: verbose output ci: hardcoded project key ci: test env ci: test more env ci: env test again ci: test env ci: shit ci: final setup ci: final setup ci: final setup ci: adjust buildscript ci: nuke ci: install java ci: install java refactor: loggermessages to own namespace chore: switch to dotnet foundation editorconfig preset ci: switch to basic gitea ci ci: steps ci: add missing runs-on ci: remove unnecessary actions ci: test attempt? ci: add missing name for step ci: fix missing project name reference ci: lets try again ci: again ci: again.. ci: idk at this point ci: append path prematurely ci: add path to bash cli: I really don't know ci: again.... ci: idk ci: again.... ci: another one ci: fix incorrect path add-path ci: add dependency track support ci: fix upload ci: forgot to adjust data for action ci: incorrect path? ci: add version tag ci: idk ci: fix incorrect path for bom ci: fix version tag ci: disable github license resolution for now ci: does this work ci: another one bites the dust chore: .net 8 and extended pipeline support ci: again chore: dockerignore added chore(deps): update dependency benchmarkdotnet to v0.13.10 Signed-off-by: noreply@rainote.dev ci: dependency track can run on any branch ci: first attempt docker image ci: again ci: some fixes ci: idk ci: does this help ci: idk ci: another one ci: forgot ci: downgrade qemu setup ci: downgrade.. ci: v1 includes docker ci: rearrange ci: idk what to do with this ci: let's try cat ci: alt ci: depressing ci: yikes ci: ah come on ci: let's try new version again ci: again ci: another one ci: another one ci: confusion ci: try single ci: aaaa ci: one more time ci: again main (#69) Reviewed-on: #69 Co-authored-by: Timothy Schenk <admin@rainote.dev> Co-committed-by: Timothy Schenk <admin@rainote.dev> chore: ci jobs expanded & .net 8 support ci: branch name sanitization for docker ci: another attempt ci: forgot actor chore: remove nuke remnants chore(deps): update dependency dotnet-sdk to v7.0.403 Signed-off-by: noreply@rainote.dev refactor: shared data into library refactor: rewrite for packethandler/id map chore: logging chore: Sonar Warnings chore: upgrade to .net8 image chore: fetch all required information for characters chore: upgrade to .net 8 ci: install .net 7.0 alongside 8.0 for sbom fix: incorrect job ci: let's try arm64 again ci: adjust project for .net 8 support chore: adjustments to composefile chore: analyzer setup chore: analyzer and project settings updated chore: ci jobs expanded & .net 8 support
108 lines
3.5 KiB
C#
108 lines
3.5 KiB
C#
using Wonderking.Packets;
|
|
|
|
namespace Server;
|
|
|
|
using System.Reflection;
|
|
using MassTransit.Mediator;
|
|
using Microsoft.Extensions.Logging;
|
|
using NetCoreServer;
|
|
using Packets;
|
|
|
|
public class AuthSession : TcpSession
|
|
{
|
|
private readonly ILogger<AuthSession> _logger;
|
|
private readonly IMediator _mediator;
|
|
|
|
public AuthSession(TcpServer
|
|
server, IMediator mediator, ILogger<AuthSession> logger) : base(server)
|
|
{
|
|
this._mediator = mediator;
|
|
this._logger = logger;
|
|
}
|
|
|
|
public Guid AccountId { get; set; }
|
|
|
|
public override long Send(byte[] buffer)
|
|
{
|
|
this._logger.LogInformation("Data being sent is: {Data}", BitConverter.ToString(buffer));
|
|
return base.Send(buffer);
|
|
}
|
|
|
|
public void Send(IPacket packet)
|
|
{
|
|
var type = packet.GetType();
|
|
this._logger.LogTrace("Packet of type {Type} is being serialized", type.Name);
|
|
var packetIdAttribute = type.GetCustomAttribute<PacketIdAttribute>();
|
|
if (packetIdAttribute == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var opcode = packetIdAttribute.Code;
|
|
|
|
Span<byte> packetData = packet.Serialize();
|
|
var length = (ushort)(packetData.Length + 8);
|
|
|
|
Span<byte> buffer = stackalloc byte[length];
|
|
buffer.Clear();
|
|
packetData.CopyTo(buffer[8..length]);
|
|
|
|
var bytesOfLength = BitConverter.GetBytes(length);
|
|
var bytesOfOpcode = BitConverter.GetBytes((ushort)opcode);
|
|
for (var i = 0; i < bytesOfLength.Length || i < 2; i++)
|
|
{
|
|
buffer[i] = bytesOfLength[i];
|
|
}
|
|
|
|
for (var i = 0; i < bytesOfOpcode.Length || i < 2; i++)
|
|
{
|
|
buffer[2 + i] = bytesOfOpcode[i];
|
|
}
|
|
|
|
this._logger.LogTrace("Packet data being parsed is: {Data}", BitConverter.ToString(packetData.ToArray()));
|
|
this._logger.LogTrace("Packet being parsed is: {Data}", BitConverter.ToString(buffer.ToArray()));
|
|
|
|
this.Send(buffer);
|
|
}
|
|
|
|
protected override void OnReceived(byte[] buffer, long offset, long size)
|
|
{
|
|
this._logger.LogDebug("Length: {Size} & offset: {Offset}", size, offset);
|
|
Span<byte> decryptedBuffer = new byte[size];
|
|
|
|
// xor every value after the first 8 bytes
|
|
var dataBuffer = Decrypt(new ArraySegment<byte>(buffer, 8, (int)size - 8).ToArray());
|
|
|
|
this._logger.LogDebug("Length {Length}", BitConverter.ToUInt16(buffer, 0));
|
|
|
|
var opCode = BitConverter.ToUInt16(buffer.ToArray(), 2);
|
|
|
|
this._logger.LogDebug("Packet Op Code: {OpCode}", opCode);
|
|
this._logger.LogDebug("Some Value: {RandomValue}", buffer[4]);
|
|
|
|
var clientAliveTime = BitConverter.ToUInt16(buffer.ToArray(), 5);
|
|
|
|
this._logger.LogDebug("Client Alive time: {ClientAliveTime}", clientAliveTime);
|
|
this._logger.LogDebug("Might be a flag: {Flag}", buffer[7]);
|
|
|
|
this._logger.LogDebug("Full buffer: {Buffer}", BitConverter.ToString(dataBuffer.ToArray()));
|
|
|
|
var rawPacket = new RawPacket((OperationCode)opCode, dataBuffer, clientAliveTime, buffer[7],
|
|
buffer[4], this.Id, this);
|
|
|
|
_ = this._mediator.Send(rawPacket);
|
|
|
|
this._logger.LogInformation("Connection from: {@RemoteEndpoint}", this.Socket.RemoteEndPoint?.ToString());
|
|
base.OnReceived(decryptedBuffer.ToArray(), offset, decryptedBuffer.Length);
|
|
}
|
|
|
|
private static byte[] Decrypt(byte[] buffer)
|
|
{
|
|
for (var i = 0; i < buffer.Length; ++i)
|
|
{
|
|
buffer[i] = (byte)(buffer[i] ^ i ^ (3 * (0xFE - i)));
|
|
}
|
|
|
|
return buffer;
|
|
}
|
|
}
|