continuity/Server/AuthSession.cs
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
chore: .net8 support and extended support for pipeline jobs
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
2023-11-08 10:13:04 +01:00

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;
}
}