88 lines
2.1 KiB
C#
88 lines
2.1 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.Data.PostgreSql;
|
|
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
|
|
{
|
|
private LX9SESStorage storage;
|
|
public void ConnectToStorage(object[] connector)
|
|
{
|
|
object o = connector[0];
|
|
switch (o)
|
|
{
|
|
case InMemoryPluginToken t1:
|
|
storage = new AprsInMemoryStorage(t1);
|
|
break;
|
|
case PostgresqlToken t2:
|
|
storage = new AprsPostgresqlStorage(t2);
|
|
break;
|
|
default:
|
|
throw new NotImplementedException(o.GetType().FullName);
|
|
}
|
|
}
|
|
|
|
public void SetContext(DateTime? currentTime, object skyscraperContext)
|
|
{
|
|
|
|
}
|
|
|
|
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;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|