feyris-tan ef86554f9a Import
2025-05-12 22:09:16 +02:00

106 lines
2.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using AprsSharp.Parsers.Aprs;
using GeoCoordinatePortable;
using Npgsql;
using skyscraper5.Aprs.AprsSharp;
using skyscraper5.Aprs.AprsStorage;
using skyscraper5.Ietf.Rfc971;
using skyscraper5.Skyscraper.Plugins;
using skyscraper5.Skyscraper.Scraper.Storage;
using skyscraper5.Skyscraper.Scraper;
using skyscraper5.Skyscraper.Scraper.Storage.InMemory;
namespace skyscraper5.Aprs
{
[SkyscraperPlugin]
[PluginPriority(1)]
internal class Lx9SesPlugin : ISkyscraperMpePlugin
{
public void ConnectToStorage(object[] connector, PluginLogMessage logger)
{
bool skipNext = false;
foreach (object o in connector)
{
if (skipNext)
{
skipNext = false;
continue;
}
Type connectorType = o.GetType();
if (connectorType == typeof(InMemoryPluginToken))
{
_storage = new AprsInMemoryStorage((InMemoryPluginToken)o);
break;
}
else if (connectorType == typeof(NpgsqlConnectionStringBuilder))
{
_storage = new AprsPostgresqlStorage((NpgsqlConnectionStringBuilder)o);
}
else
{
if (connectorType.Name.Equals("MinioClient"))
{
skipNext = true;
continue;
}
if (connectorType.Name.Equals("DirectoryInfo"))
{
skipNext = true;
continue;
}
throw new NotImplementedException();
}
}
messageReceiver = new LX9SESMessageReceiver(_storage, logger);
}
public void SetContext(DateTime? currentDateTime)
{
messageReceiver.currentTime = currentDateTime;
}
public bool CanHandlePacket(InternetHeader internetHeader, byte[] ipv4Packet)
{
if (internetHeader.Protocol == 0x11)
{
if (internetHeader.SourceAddress.Equals(_lx9sesSrc) && internetHeader.DestinationAddress.Equals(_lx9sesDst))
{
return true;
}
}
return false;
}
public void HandlePacket(InternetHeader internetHeader, byte[] ipv4Packet)
{
if (_aprsDecoder == null)
_aprsDecoder = new AprsDecoder(messageReceiver);
_aprsDecoder.OnIpv4PacketArrival(internetHeader, ipv4Packet);
}
public bool StopProcessingAfterThis()
{
return true;
}
private AprsDecoder _aprsDecoder;
private static readonly IPAddress _lx9sesDst = IPAddress.Parse("228.64.0.56");
private static readonly IPAddress _lx9sesSrc = IPAddress.Parse("10.225.49.1");
private LX9SESStorage _storage;
private LX9SESMessageReceiver messageReceiver;
}
}