Actually scrape LogonResponseDescriptor, LowerLayerServiceDescriptor and HigherLayersInitializeDescriptor.
Some checks failed
🚀 Pack skyscraper8 / make-zip (push) Failing after 1m9s

This commit is contained in:
feyris-tan 2025-11-12 17:36:42 +01:00
parent 8e3311bcce
commit af8edceca2
14 changed files with 347 additions and 5 deletions

View File

@ -1017,6 +1017,46 @@ namespace skyscraper5.Data.PostgreSql
throw new NotImplementedException();
}
public bool TestForLowerLayerService(PhysicalAddress macAddress)
{
throw new NotImplementedException();
}
public void InsertTimLowerLayerService(PhysicalAddress macAddress, _0xbb_LowerLayerServiceDescriptor descriptor)
{
throw new NotImplementedException();
}
public bool TestForHigherLayerServiceInitalization(PhysicalAddress macAddress, _0xc4_HigherLayersInitializeDescriptor.Layer2Interface layer2Interface)
{
throw new NotImplementedException();
}
public void InsertHigherLayerServiceInitalization(PhysicalAddress macAddress, _0xc4_HigherLayersInitializeDescriptor.Layer2Interface layer2Interface)
{
throw new NotImplementedException();
}
public bool TestForTimLogonResponse(PhysicalAddress macAddress)
{
throw new NotImplementedException();
}
public void InsertTimLogonResponse(PhysicalAddress macAddress, _0xb9_LogonResponseDescriptor descriptor)
{
throw new NotImplementedException();
}
public bool TestForTimForwardInteractionPath(PhysicalAddress macAddress, _0xad_ForwardInteractionPathDescriptor.ForwardInteractionPath forwardInteractionPath)
{
throw new NotImplementedException();
}
public void InsertTimForwardInteractionPath(PhysicalAddress macAddress, _0xad_ForwardInteractionPathDescriptor.ForwardInteractionPath forwardInteractionPath)
{
throw new NotImplementedException();
}
private bool AreArraysEqual(byte[] l, byte[] r)
{
if (l.Length != r.Length)

View File

@ -43,5 +43,9 @@ namespace skyscraper5.src.InteractionChannel
void OnCorrectionMessageExtension(PhysicalAddress macAddress, _0xb1_CorrectionMessageExtensionDescriptor descriptor);
void OnControlAssignment(PhysicalAddress macAddress, _0xa4_SyncAssignDescriptor descriptor);
void OnSatelliteReturnLink(PhysicalAddress macAddress, _0xa9_SatelliteReturnLinkDescriptor descriptor);
void OnLowerLayerService(PhysicalAddress macAddress, _0xbb_LowerLayerServiceDescriptor descriptor);
void OnHigherLayerInitalization(PhysicalAddress macAddress, _0xc4_HigherLayersInitializeDescriptor descriptor);
void LogonResponseDescriptor(PhysicalAddress macAddress, _0xb9_LogonResponseDescriptor descriptor);
void OnForwardInteractionPath(PhysicalAddress macAddress, _0xad_ForwardInteractionPathDescriptor descriptor);
}
}

View File

@ -12,7 +12,7 @@ namespace skyscraper5.src.InteractionChannel.Model.Descriptors
{
[SkyscraperPlugin]
[TsDescriptor(0xad,"TIM")]
internal class _0xad_ForwardInteractionPathDescriptor : TsDescriptor
public class _0xad_ForwardInteractionPathDescriptor : TsDescriptor
{
public _0xad_ForwardInteractionPathDescriptor(byte[] buffer)
{
@ -48,6 +48,59 @@ namespace skyscraper5.src.InteractionChannel.Model.Descriptors
public ushort OriginalNetworkId { get; internal set; }
public ushort TransportStreamId { get; internal set; }
public ushort[] Pids { get; internal set; }
public string PidsAsString
{
get
{
StringBuilder sb = new StringBuilder();
foreach (var p in Pids)
{
sb.Append(p);
sb.Append(";");
}
return sb.ToString();
}
}
protected bool Equals(ForwardInteractionPath other)
{
return PidsAsString.Equals(other.PidsAsString) && OriginalNetworkId == other.OriginalNetworkId && TransportStreamId == other.TransportStreamId;
}
public override bool Equals(object? obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != this.GetType()) return false;
return Equals((ForwardInteractionPath)obj);
}
public override int GetHashCode()
{
return HashCode.Combine(OriginalNetworkId, TransportStreamId);
}
public override string ToString()
{
bool suspect = false;
StringBuilder sb = new StringBuilder();
sb.AppendFormat("ONID: {0}, TSID: {1}, PIDs: ", OriginalNetworkId, TransportStreamId);
foreach (var p in Pids)
{
sb.Append(p);
sb.Append(";");
if (p > 8192)
suspect = true;
}
if (suspect)
{
sb.AppendFormat(" (suspected GS)");
}
return sb.ToString();
}
}
public List<ForwardInteractionPath> Paths { get; }

View File

@ -316,6 +316,9 @@ namespace skyscraper5.src.InteractionChannel.Model
case 0xac:
handler.OnCorrectionControl(macAddress, (_0xac_CorrectionControlDescriptor)descriptor);
break;
case 0xad:
handler.OnForwardInteractionPath(macAddress, (_0xad_ForwardInteractionPathDescriptor)descriptor);
break;
case 0xaf:
handler.OnConnectionControl(macAddress, (_0xaf_ConnectionControlDescriptor)descriptor);
break;
@ -328,6 +331,15 @@ namespace skyscraper5.src.InteractionChannel.Model
case 0xb7:
handler.OnFramePayloadFormatAnnouncement(networkId.Value, (_0xb7_FramePayloadFormatDescriptor)descriptor);
break;
case 0xb9:
handler.LogonResponseDescriptor(macAddress, (_0xb9_LogonResponseDescriptor)descriptor);
break;
case 0xbb:
handler.OnLowerLayerService(macAddress, (_0xbb_LowerLayerServiceDescriptor)descriptor);
break;
case 0xc4:
handler.OnHigherLayerInitalization(macAddress, (_0xc4_HigherLayersInitializeDescriptor)descriptor);
break;
default:
if (id >= 0xe0 && id <= 0xfe)
break;

View File

@ -11,7 +11,7 @@ namespace skyscraper8.InteractionChannel.Model2.Descriptors
{
[SkyscraperPlugin]
[TsDescriptor(0xb9,"TIM")]
internal class _0xb9_LogonResponseDescriptor : TsDescriptor
public class _0xb9_LogonResponseDescriptor : TsDescriptor
{
public _0xb9_LogonResponseDescriptor(byte[] buffer)
{
@ -76,5 +76,10 @@ namespace skyscraper8.InteractionChannel.Model2.Descriptors
AutonomousEirp = 1,
ConstantPowerSpectrum = 2,
}
public override string ToString()
{
return $"{nameof(GroupId)}: {GroupId}, {nameof(LogonId)}: {LogonId}";
}
}
}

View File

@ -12,7 +12,7 @@ namespace skyscraper8.InteractionChannel.Model2.Descriptors
{
[SkyscraperPlugin]
[TsDescriptor(0xbb,"TIM")]
internal class _0xbb_LowerLayerServiceDescriptor : TsDescriptor
public class _0xbb_LowerLayerServiceDescriptor : TsDescriptor
{
public _0xbb_LowerLayerServiceDescriptor(byte[] buffer)
{

View File

@ -13,7 +13,7 @@ namespace skyscraper8.InteractionChannel.Model2.Descriptors
{
[SkyscraperPlugin]
[TsDescriptor(0xc4,"TIM")]
internal class _0xc4_HigherLayersInitializeDescriptor : TsDescriptor
public class _0xc4_HigherLayersInitializeDescriptor : TsDescriptor
{
public _0xc4_HigherLayersInitializeDescriptor(byte[] buffer)
{
@ -43,6 +43,26 @@ namespace skyscraper8.InteractionChannel.Model2.Descriptors
public IPAddress OfferStreamIpv4Adress { get; set; }
public ushort OfferStreamPort { get; set; }
public bool HigherLayerPepSwitchOff { get; set; }
public string Mac24AsString => BitConverter.ToString(Mac24);
protected bool Equals(Layer2Interface other)
{
return Mac24AsString.Equals(other.Mac24AsString) && Ipv4McAddress.Equals(other.Ipv4McAddress) && OfferStreamIpv4Adress.Equals(other.OfferStreamIpv4Adress) && OfferStreamPort == other.OfferStreamPort && HigherLayerPepSwitchOff == other.HigherLayerPepSwitchOff;
}
public override bool Equals(object? obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != this.GetType()) return false;
return Equals((Layer2Interface)obj);
}
public override int GetHashCode()
{
return HashCode.Combine(Mac24AsString, Ipv4McAddress, OfferStreamIpv4Adress, OfferStreamPort, HigherLayerPepSwitchOff);
}
}
}
}

View File

@ -74,6 +74,26 @@ namespace skyscraper5.src.InteractionChannel
}
public void OnLowerLayerService(PhysicalAddress macAddress, _0xbb_LowerLayerServiceDescriptor descriptor)
{
}
public void OnHigherLayerInitalization(PhysicalAddress macAddress, _0xc4_HigherLayersInitializeDescriptor descriptor)
{
}
public void LogonResponseDescriptor(PhysicalAddress macAddress, _0xb9_LogonResponseDescriptor descriptor)
{
}
public void OnForwardInteractionPath(PhysicalAddress macAddress, _0xad_ForwardInteractionPathDescriptor descriptor)
{
}
public void OnFrameComposition2(ushort? networkId, Fct2 fct2)
{

View File

@ -2562,6 +2562,48 @@ namespace skyscraper5.Skyscraper.Scraper
}
}
public void OnLowerLayerService(PhysicalAddress macAddress, _0xbb_LowerLayerServiceDescriptor descriptor)
{
if (!DataStorage.TestForLowerLayerService(macAddress))
{
LogEvent(SkyscraperContextEvent.TimLowerLayerService, String.Format("For participant {0}", macAddress));
DataStorage.InsertTimLowerLayerService(macAddress, descriptor);
}
}
public void OnHigherLayerInitalization(PhysicalAddress macAddress, _0xc4_HigherLayersInitializeDescriptor descriptor)
{
foreach (_0xc4_HigherLayersInitializeDescriptor.Layer2Interface layer2Interface in descriptor.Layer2Interfaces)
{
if (!DataStorage.TestForHigherLayerServiceInitalization(macAddress, layer2Interface))
{
LogEvent(SkyscraperContextEvent.TimHigherLayerInitalization, String.Format("For participant {0} -> {1}", macAddress, layer2Interface.Ipv4McAddress));
DataStorage.InsertHigherLayerServiceInitalization(macAddress, layer2Interface);
}
}
}
public void LogonResponseDescriptor(PhysicalAddress macAddress, _0xb9_LogonResponseDescriptor descriptor)
{
if (!DataStorage.TestForTimLogonResponse(macAddress))
{
LogEvent(SkyscraperContextEvent.TimLogonResponse, String.Format("For participant {0}: {1}", macAddress, descriptor.ToString()));
DataStorage.InsertTimLogonResponse(macAddress, descriptor);
}
}
public void OnForwardInteractionPath(PhysicalAddress macAddress, _0xad_ForwardInteractionPathDescriptor descriptor)
{
foreach (_0xad_ForwardInteractionPathDescriptor.ForwardInteractionPath forwardInteractionPath in descriptor.Paths)
{
if (!DataStorage.TestForTimForwardInteractionPath(macAddress, forwardInteractionPath))
{
LogEvent(SkyscraperContextEvent.TimForwardInteractionPath, String.Format("For participant {0}: {1}", macAddress, forwardInteractionPath.ToString()));
DataStorage.InsertTimForwardInteractionPath(macAddress, forwardInteractionPath);
}
}
}
public void OnCorrectionMessage(PhysicalAddress mac, _0xa1_CorrectionMessageDescriptor cmd)
{
if (!DataStorage.TestForTim(mac))

View File

@ -96,6 +96,10 @@
TimFramePayloadFormat,
TimCorrectionExtension,
TimControlAssignment,
TimSatelliteReturnLink
TimSatelliteReturnLink,
TimLowerLayerService,
TimHigherLayerInitalization,
TimLogonResponse,
TimForwardInteractionPath
}
}

View File

@ -216,5 +216,13 @@ namespace skyscraper8.Skyscraper.Scraper.Storage
void InsertTimControlAssignment(PhysicalAddress macAddress, _0xa4_SyncAssignDescriptor descriptor);
bool TestForTimSatelliteReturnLink(PhysicalAddress macAddress);
void InsertTimSatelliteReturnLink(PhysicalAddress macAddress, _0xa9_SatelliteReturnLinkDescriptor descriptor);
bool TestForLowerLayerService(PhysicalAddress macAddress);
void InsertTimLowerLayerService(PhysicalAddress macAddress, _0xbb_LowerLayerServiceDescriptor descriptor);
bool TestForHigherLayerServiceInitalization(PhysicalAddress macAddress, _0xc4_HigherLayersInitializeDescriptor.Layer2Interface layer2Interface);
void InsertHigherLayerServiceInitalization(PhysicalAddress macAddress, _0xc4_HigherLayersInitializeDescriptor.Layer2Interface layer2Interface);
bool TestForTimLogonResponse(PhysicalAddress macAddress);
void InsertTimLogonResponse(PhysicalAddress macAddress, _0xb9_LogonResponseDescriptor descriptor);
bool TestForTimForwardInteractionPath(PhysicalAddress macAddress, _0xad_ForwardInteractionPathDescriptor.ForwardInteractionPath forwardInteractionPath);
void InsertTimForwardInteractionPath(PhysicalAddress macAddress, _0xad_ForwardInteractionPathDescriptor.ForwardInteractionPath forwardInteractionPath);
}
}

View File

@ -1255,6 +1255,46 @@ namespace skyscraper5.Skyscraper.Scraper.Storage.Filesystem
throw new NotImplementedException();
}
public bool TestForLowerLayerService(PhysicalAddress macAddress)
{
throw new NotImplementedException();
}
public void InsertTimLowerLayerService(PhysicalAddress macAddress, _0xbb_LowerLayerServiceDescriptor descriptor)
{
throw new NotImplementedException();
}
public bool TestForHigherLayerServiceInitalization(PhysicalAddress macAddress, _0xc4_HigherLayersInitializeDescriptor.Layer2Interface layer2Interface)
{
throw new NotImplementedException();
}
public void InsertHigherLayerServiceInitalization(PhysicalAddress macAddress, _0xc4_HigherLayersInitializeDescriptor.Layer2Interface layer2Interface)
{
throw new NotImplementedException();
}
public bool TestForTimLogonResponse(PhysicalAddress macAddress)
{
throw new NotImplementedException();
}
public void InsertTimLogonResponse(PhysicalAddress macAddress, _0xb9_LogonResponseDescriptor descriptor)
{
throw new NotImplementedException();
}
public bool TestForTimForwardInteractionPath(PhysicalAddress macAddress, _0xad_ForwardInteractionPathDescriptor.ForwardInteractionPath forwardInteractionPath)
{
throw new NotImplementedException();
}
public void InsertTimForwardInteractionPath(PhysicalAddress macAddress, _0xad_ForwardInteractionPathDescriptor.ForwardInteractionPath forwardInteractionPath)
{
throw new NotImplementedException();
}
public IEnumerable<Tuple<int, int, ProgramMapping>> SelectAllPmt()
{
throw new NotImplementedException();

View File

@ -1149,6 +1149,71 @@ namespace skyscraper5.Skyscraper.Scraper.Storage.InMemory
_timSatelliteReturnLinks.Add(macAddress, descriptor);
}
private Dictionary<PhysicalAddress, _0xbb_LowerLayerServiceDescriptor> _timLowerLayerServiceDescriptors;
public bool TestForLowerLayerService(PhysicalAddress macAddress)
{
if (_timLowerLayerServiceDescriptors == null)
return false;
return _timLowerLayerServiceDescriptors.ContainsKey(macAddress);
}
public void InsertTimLowerLayerService(PhysicalAddress macAddress, _0xbb_LowerLayerServiceDescriptor descriptor)
{
if (_timLowerLayerServiceDescriptors == null)
_timLowerLayerServiceDescriptors = new Dictionary<PhysicalAddress, _0xbb_LowerLayerServiceDescriptor>();
_timLowerLayerServiceDescriptors.Add(macAddress, descriptor);
}
private HashSet<Tuple<PhysicalAddress, _0xc4_HigherLayersInitializeDescriptor.Layer2Interface>> layer2interfaces;
public bool TestForHigherLayerServiceInitalization(PhysicalAddress macAddress, _0xc4_HigherLayersInitializeDescriptor.Layer2Interface layer2Interface)
{
if (layer2interfaces == null)
return false;
return layer2interfaces.Contains(new Tuple<PhysicalAddress, _0xc4_HigherLayersInitializeDescriptor.Layer2Interface>(macAddress, layer2Interface));
}
public void InsertHigherLayerServiceInitalization(PhysicalAddress macAddress, _0xc4_HigherLayersInitializeDescriptor.Layer2Interface layer2Interface)
{
layer2interfaces.Add(new Tuple<PhysicalAddress, _0xc4_HigherLayersInitializeDescriptor.Layer2Interface>(macAddress, layer2Interface));
}
private Dictionary<PhysicalAddress, _0xb9_LogonResponseDescriptor> _logonResponseDescriptors;
public bool TestForTimLogonResponse(PhysicalAddress macAddress)
{
if (_logonResponseDescriptors == null)
return false;
return _logonResponseDescriptors.ContainsKey(macAddress);
}
public void InsertTimLogonResponse(PhysicalAddress macAddress, _0xb9_LogonResponseDescriptor descriptor)
{
if (_logonResponseDescriptors == null)
_logonResponseDescriptors = new Dictionary<PhysicalAddress, _0xb9_LogonResponseDescriptor>();
_logonResponseDescriptors.Add(macAddress, descriptor);
}
private HashSet<Tuple<PhysicalAddress, _0xad_ForwardInteractionPathDescriptor.ForwardInteractionPath>> _forwardInteractionPaths;
public bool TestForTimForwardInteractionPath(PhysicalAddress macAddress, _0xad_ForwardInteractionPathDescriptor.ForwardInteractionPath forwardInteractionPath)
{
if (_forwardInteractionPaths == null)
return false;
return _forwardInteractionPaths.Contains(new Tuple<PhysicalAddress, _0xad_ForwardInteractionPathDescriptor.ForwardInteractionPath>(macAddress, forwardInteractionPath));
}
public void InsertTimForwardInteractionPath(PhysicalAddress macAddress, _0xad_ForwardInteractionPathDescriptor.ForwardInteractionPath forwardInteractionPath)
{
if (_forwardInteractionPaths == null)
_forwardInteractionPaths = new HashSet<Tuple<PhysicalAddress, _0xad_ForwardInteractionPathDescriptor.ForwardInteractionPath>>();
_forwardInteractionPaths.Add(new Tuple<PhysicalAddress, _0xad_ForwardInteractionPathDescriptor.ForwardInteractionPath>(macAddress, forwardInteractionPath));
}
public IEnumerable<Tuple<int, int, ProgramMapping>> SelectAllPmt()
{
for (int x = 0; x < pmtEntries.Length; x++)

View File

@ -251,6 +251,35 @@ namespace skyscraper5.src.Skyscraper.Scraper.StreamAutodetection.Contestants
//TODO: put some sensible validation logic in here
}
public void OnLowerLayerService(PhysicalAddress macAddress, _0xbb_LowerLayerServiceDescriptor descriptor)
{
if (descriptor.LowerLayerServices.Length > 0)
{
Score++;
}
}
public void OnHigherLayerInitalization(PhysicalAddress macAddress, _0xc4_HigherLayersInitializeDescriptor descriptor)
{
if (descriptor.Layer2Interfaces.Length > 0)
{
Score++;
}
}
public void LogonResponseDescriptor(PhysicalAddress macAddress, _0xb9_LogonResponseDescriptor descriptor)
{
//TODO: put some sensible validation logic in here.
}
public void OnForwardInteractionPath(PhysicalAddress macAddress, _0xad_ForwardInteractionPathDescriptor descriptor)
{
if (descriptor.Paths.Count > 0)
{
Score++;
}
}
public void OnFrameComposition2(ushort? networkId, Fct2 fct2)
{
if (fct2.FrameTypes.Length > 0)