70 lines
2.7 KiB
C#
70 lines
2.7 KiB
C#
global using System;
|
|
global using System.Collections.Generic;
|
|
global using System.Threading;
|
|
global using System.Threading.Tasks;
|
|
global using Meum.Core;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Net.Quic;
|
|
using System.Net.Security;
|
|
using System.Runtime.Serialization;
|
|
using System.Security.Cryptography.X509Certificates;
|
|
using DTLib.Console;
|
|
using DTLib.Demystifier;
|
|
using DTLib.Extensions;
|
|
|
|
namespace Meum.Server;
|
|
|
|
class Program
|
|
{
|
|
static async Task Main(string[] args)
|
|
{
|
|
try
|
|
{
|
|
var config = new Config();
|
|
var certificate = X509Certificate2.CreateFromPemFile(config.certificate_path, config.key_path);
|
|
if(!certificate.Verify())
|
|
throw new Exception("Certificate is not valid");
|
|
var serverConnectionOptions = new QuicServerConnectionOptions
|
|
{
|
|
DefaultStreamErrorCode = Network.DefaultStreamErrorCode,
|
|
DefaultCloseErrorCode = Network.DefaultCloseErrorCode,
|
|
ServerAuthenticationOptions = new SslServerAuthenticationOptions
|
|
{
|
|
ApplicationProtocols = Network.ApplicationProtocols.ToList(),
|
|
ServerCertificate = certificate,
|
|
ClientCertificateRequired = false
|
|
}
|
|
};
|
|
var listenerOptions = new QuicListenerOptions
|
|
{
|
|
ListenEndPoint = new IPEndPoint(IPAddress.Parse(config.listener_ip), config.listener_port),
|
|
ApplicationProtocols = Network.ApplicationProtocols.ToList(),
|
|
ConnectionOptionsCallback = (_, _, _) => ValueTask.FromResult(serverConnectionOptions)
|
|
};
|
|
var listener = await QuicListener.ListenAsync(listenerOptions);
|
|
while (true)
|
|
{
|
|
try
|
|
{
|
|
var conn = await listener.AcceptConnectionAsync();
|
|
var stream = await conn.AcceptInboundStreamAsync();
|
|
StreamReader reader = new(stream);
|
|
string line = await reader.ReadLineAsync() ?? "";
|
|
Console.WriteLine(line);
|
|
await stream.WriteAsync("Pong\n".ToBytes());
|
|
await conn.CloseAsync(Network.DefaultCloseErrorCode);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ColoredConsole.WriteLine(ex.ToStringDemystified(), ConsoleColor.Red);
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ColoredConsole.WriteLine(ex.ToStringDemystified(), ConsoleColor.Red);
|
|
}
|
|
}
|
|
} |