Compare commits

..

No commits in common. "master" and "ptsFrameDumper" have entirely different histories.

337 changed files with 9509 additions and 23185 deletions

3
.gitignore vendored
View File

@ -132,6 +132,3 @@ imgui.ini
/.vs/skyscraper8/CopilotIndices/17.14.1231.31060 /.vs/skyscraper8/CopilotIndices/17.14.1231.31060
/.vs/skyscraper8/CopilotIndices/17.14.1290.42047 /.vs/skyscraper8/CopilotIndices/17.14.1290.42047
/Documentation/TSDuck-Samples/experiment2/*.ts /Documentation/TSDuck-Samples/experiment2/*.ts
/.vs/skyscraper8/CopilotIndices/17.14.1431.25910
/.vs
/skyscraper8/bin/Debug/satip

View File

@ -515,32 +515,5 @@ namespace skyscraper5.Data
byte[] bytes = GetObject(filename); byte[] bytes = GetObject(filename);
return bytes; return bytes;
} }
public bool TestForSisDsaci(int value1, int value2, ushort groupId, int versionNumber)
{
string filename = String.Format("DVB-SIS/{0}/{1}/Group{2}_Version{3}.xml");
return FileExists(filename);
}
public void StoreSisDsaci(int value1, int value2, ushort currentDsaGroupId, int versionNumber, Stream dsaci)
{
string filename = String.Format("DVB-SIS/{0}/{1}/Group{2}_Version{3}.xml");
WriteObject(filename, dsaci);
}
public bool TestForObjectCarouselFileArrival(string vfsFile, int transportStreamId, int pid, int networkId)
{
throw new NotImplementedException();
}
public byte[] GetObjectCarouselFileArrival(string vfsFile, int transportStreamId, int pid, int networkId)
{
throw new NotImplementedException();
}
public byte[] DvbNipGetFile(string path)
{
throw new NotImplementedException();
}
} }
} }

View File

@ -5,7 +5,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Minio" Version="6.0.4" /> <PackageReference Include="Minio" Version="6.0.5" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@ -22,9 +22,7 @@ using skyscraper5.src.InteractionChannel.Model2;
using skyscraper5.src.Skyscraper.FrequencyListGenerator; using skyscraper5.src.Skyscraper.FrequencyListGenerator;
using skyscraper5.src.Skyscraper.Scraper.Dns; using skyscraper5.src.Skyscraper.Scraper.Dns;
using skyscraper5.Teletext; using skyscraper5.Teletext;
using skyscraper8.InteractionChannel.Model;
using skyscraper8.InteractionChannel.Model2; using skyscraper8.InteractionChannel.Model2;
using skyscraper8.InteractionChannel.Model2.Descriptors;
using skyscraper8.Skyscraper.Scraper.Storage; using skyscraper8.Skyscraper.Scraper.Storage;
namespace skyscraper5.Data.MySql namespace skyscraper5.Data.MySql
@ -107,12 +105,12 @@ namespace skyscraper5.Data.MySql
throw new NotImplementedException(); throw new NotImplementedException();
} }
public void UiSatellitesAdd(SatellitePositionEntity newPosition) public void UiSatellitesAdd(SatellitePosition newPosition)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
public void UiSatellitesDelete(SatellitePositionEntity satellitePosition) public void UiSatellitesDelete(SatellitePosition satellitePosition)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
@ -233,22 +231,22 @@ namespace skyscraper5.Data.MySql
throw new NotImplementedException(); throw new NotImplementedException();
} }
public List<LnbEntity> UiLnbTypesListAll() public List<LnbType> UiLnbTypesListAll()
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
public void UiLnbTypesAdd(LnbEntity defaultLnbType) public void UiLnbTypesAdd(LnbType defaultLnbType)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
public List<DishEntity> UiDishTypesListAll() public List<DishType> UiDishTypesListAll()
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
public void UiDishTypesAdd(DishEntity defaultDishType) public void UiDishTypesAdd(DishType defaultDishType)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
@ -293,122 +291,6 @@ namespace skyscraper5.Data.MySql
throw new NotImplementedException(); throw new NotImplementedException();
} }
public bool TestForRcs2Nit(RcsNit nit)
{
throw new NotImplementedException();
}
public void InsertRcs2Nit(RcsNit nit)
{
throw new NotImplementedException();
}
public bool UpdateRcs2Tdt(ushort interactiveNetworkId, DateTime tdtTimestamp)
{
throw new NotImplementedException();
}
public bool TestForTmst2(ushort interactiveNetworkId, Tmst2.TransmissionMode mode)
{
throw new NotImplementedException();
}
public void InsertTmst2(ushort interactiveNetworkId, Tmst2.TransmissionMode mode)
{
throw new NotImplementedException();
}
public bool TestForTimFramePayloadFormat(ushort networkId, _0xb7_FramePayloadFormatDescriptor.TransmissionContext transmissionContext)
{
throw new NotImplementedException();
}
public void InsertTimFramePayloadFormat(ushort networkId, _0xb7_FramePayloadFormatDescriptor.TransmissionContext transmissionContext)
{
throw new NotImplementedException();
}
public bool TestForTimCorrectionMessageExtension(PhysicalAddress macAddress)
{
throw new NotImplementedException();
}
public void InsertTimCorrectionMessageExtension(PhysicalAddress macAddress,
_0xb1_CorrectionMessageExtensionDescriptor descriptor)
{
throw new NotImplementedException();
}
public bool TestForTimControlAssignment(PhysicalAddress macAddress)
{
throw new NotImplementedException();
}
public void InsertTimControlAssignment(PhysicalAddress macAddress, _0xa4_SyncAssignDescriptor descriptor)
{
throw new NotImplementedException();
}
public bool TestForTimSatelliteReturnLink(PhysicalAddress macAddress)
{
throw new NotImplementedException();
}
public void InsertTimSatelliteReturnLink(PhysicalAddress macAddress, _0xa9_SatelliteReturnLinkDescriptor descriptor)
{
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 bool TestForRmt(Rmt rmt)
{
return true;
}
public void InsertRmt(Rmt rmt)
{
throw new NotImplementedException();
}
public IEnumerable<Tuple<int, int, ProgramMapping>> SelectAllPmt() public IEnumerable<Tuple<int, int, ProgramMapping>> SelectAllPmt()
{ {
throw new NotImplementedException(); throw new NotImplementedException();

View File

@ -50,9 +50,9 @@ namespace skyscraper5.Data.MySql
} }
public List<SatellitePositionEntity> UiSatellitesListAll() public List<SatellitePosition> UiSatellitesListAll()
{ {
List<SatellitePositionEntity> result = new List<SatellitePositionEntity>(); List<SatellitePosition> result = new List<SatellitePosition>();
using (MySqlConnection connection = new MySqlConnection(_mcsb.ToString())) using (MySqlConnection connection = new MySqlConnection(_mcsb.ToString()))
{ {
connection.Open(); connection.Open();
@ -62,9 +62,9 @@ namespace skyscraper5.Data.MySql
MySqlDataReader dataReader = command.ExecuteReader(); MySqlDataReader dataReader = command.ExecuteReader();
while (dataReader.Read()) while (dataReader.Read())
{ {
SatellitePositionEntity satellitePosition = new SatellitePositionEntity(); SatellitePosition satellitePosition = new SatellitePosition();
satellitePosition.angle = dataReader.GetFloat(2); satellitePosition.angle = dataReader.GetFloat(2);
//satellitePosition.cardinalDirection = dataReader.GetBoolean(3) ? 0 : 1; satellitePosition.cardinalDirection = dataReader.GetBoolean(3) ? 0 : 1;
satellitePosition.name = dataReader.GetString(4); satellitePosition.name = dataReader.GetString(4);
result.Add(satellitePosition); result.Add(satellitePosition);
} }

View File

@ -328,7 +328,7 @@ namespace skyscraper5.Data.PostgreSql
string note = null; string note = null;
if (!dataReader.IsDBNull(15)) if (!dataReader.IsDBNull(15))
note = dataReader.GetString(15); note = dataReader.GetString(15);
result = new DbBlindscanJob(uuid, tuner_mac, (STD_TYPE)tuner_std, diseqc_index, new DummyGpsReceiver(true,(float)gps_lat,(float)gps_lon), SatellitePositionEntity.FromChecksum(sat_position)); result = new DbBlindscanJob(uuid, tuner_mac, (STD_TYPE)tuner_std, diseqc_index, new DummyGpsReceiver(true,(float)gps_lat,(float)gps_lon), SatellitePosition.FromChecksum(sat_position));
result.DateAdded = date_added; result.DateAdded = date_added;
result.HorizontalHighState = (DbBlindscanJobPolarizationStatus)horizontal_high; result.HorizontalHighState = (DbBlindscanJobPolarizationStatus)horizontal_high;
result.HorizontalLowState = (DbBlindscanJobPolarizationStatus)horizontal_low; result.HorizontalLowState = (DbBlindscanJobPolarizationStatus)horizontal_low;
@ -546,11 +546,11 @@ namespace skyscraper5.Data.PostgreSql
dgr = new DummyGpsReceiver(true, gpsLat, gpsLon); dgr = new DummyGpsReceiver(true, gpsLat, gpsLon);
} }
SatellitePositionEntity satPositionObj = null; SatellitePosition satPositionObj = null;
if (!dataReader.IsDBNull("sat_position")) if (!dataReader.IsDBNull("sat_position"))
{ {
int satPosition = dataReader.GetInt32("sat_position"); int satPosition = dataReader.GetInt32("sat_position");
satPositionObj = SatellitePositionEntity.FromChecksum(satPosition); satPositionObj = SatellitePosition.FromChecksum(satPosition);
} }
int diseqcIndex = dataReader.GetInt32("diseqc_index"); int diseqcIndex = dataReader.GetInt32("diseqc_index");
int version = dataReader.GetInt32("version"); int version = dataReader.GetInt32("version");

View File

@ -18,7 +18,7 @@ namespace skyscraper5.Data.PostgreSql
if (_knownInts == null) if (_knownInts == null)
_knownInts = new HashSet<DatabaseKeyInt>(); _knownInts = new HashSet<DatabaseKeyInt>();
DatabaseKeyInt key = new DatabaseKeyInt(notification.Platform.PlatformId, notification.Target.GenerateId()); DatabaseKeyInt key = new DatabaseKeyInt(notification.PlatformId);
if (_knownInts.Contains(key)) if (_knownInts.Contains(key))
return true; return true;
@ -28,7 +28,7 @@ namespace skyscraper5.Data.PostgreSql
conn.Open(); conn.Open();
NpgsqlCommand cmd = conn.CreateCommand(); NpgsqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "SELECT dateadded FROM dvb_int WHERE platform_id = @id"; cmd.CommandText = "SELECT dateadded FROM dvb_int WHERE platform_id = @id";
cmd.Parameters.AddWithValue("@id", NpgsqlTypes.NpgsqlDbType.Bigint, (long)notification.Platform.PlatformId); cmd.Parameters.AddWithValue("@id", NpgsqlTypes.NpgsqlDbType.Bigint, (long)notification.PlatformId);
NpgsqlDataReader reader = cmd.ExecuteReader(); NpgsqlDataReader reader = cmd.ExecuteReader();
result = reader.Read(); result = reader.Read();
reader.Close(); reader.Close();
@ -43,7 +43,7 @@ namespace skyscraper5.Data.PostgreSql
public void StoreIpMacNotification(IpMacNotification notification) public void StoreIpMacNotification(IpMacNotification notification)
{ {
EnqueueTask(x => WriteIpMacNotification(x, notification)); EnqueueTask(x => WriteIpMacNotification(x, notification));
DatabaseKeyInt key = new DatabaseKeyInt(notification.Platform.PlatformId, notification.Target.GenerateId()); DatabaseKeyInt key = new DatabaseKeyInt(notification.PlatformId);
_knownInts.Add(key); _knownInts.Add(key);
} }
@ -53,28 +53,28 @@ namespace skyscraper5.Data.PostgreSql
cmd.CommandText = "insert into dvb_int (platform_id, platform_name, platform_provider_name,\r\n platform_provider_name_language_code, platform_action_type, platform_name_language_code,\r\n platform_processing_order, target_type, target_name, operational_network_id,\r\n operational_mpe_fec_algorithm, operational_component_tag, operational_transport_stream_id,\r\n operational_time_slice_fec_id, operational_time_slicing, operational_onid, operational_sid,\r\n operational_time_slice_frame_size, operational_time_slice_max_average_rate,\r\n operational_time_slice_max_bust_duration) " + cmd.CommandText = "insert into dvb_int (platform_id, platform_name, platform_provider_name,\r\n platform_provider_name_language_code, platform_action_type, platform_name_language_code,\r\n platform_processing_order, target_type, target_name, operational_network_id,\r\n operational_mpe_fec_algorithm, operational_component_tag, operational_transport_stream_id,\r\n operational_time_slice_fec_id, operational_time_slicing, operational_onid, operational_sid,\r\n operational_time_slice_frame_size, operational_time_slice_max_average_rate,\r\n operational_time_slice_max_bust_duration) " +
"values " + "values " +
"(@platform_id,@platform_name,@platform_provider_name,@platform_provider_name_language_code,@platform_action_type,@platform_name_language_code,@platform_processing_order,@target_type,@target_name,@operational_network_id,@operational_mpe_fec_algorithm, @operational_component_tag, @operational_transport_stream_id,\r\n @operational_time_slice_fec_id, @operational_time_slicing, @operational_onid, @operational_sid,\r\n @operational_time_slice_frame_size, @operational_time_slice_max_average_rate,\r\n @operational_time_slice_max_bust_duration\r\n\r\n )"; "(@platform_id,@platform_name,@platform_provider_name,@platform_provider_name_language_code,@platform_action_type,@platform_name_language_code,@platform_processing_order,@target_type,@target_name,@operational_network_id,@operational_mpe_fec_algorithm, @operational_component_tag, @operational_transport_stream_id,\r\n @operational_time_slice_fec_id, @operational_time_slicing, @operational_onid, @operational_sid,\r\n @operational_time_slice_frame_size, @operational_time_slice_max_average_rate,\r\n @operational_time_slice_max_bust_duration\r\n\r\n )";
cmd.Parameters.AddWithValue("@platform_id", NpgsqlTypes.NpgsqlDbType.Bigint, (long)notification.Platform.PlatformId); cmd.Parameters.AddWithValue("@platform_id", NpgsqlTypes.NpgsqlDbType.Bigint, (long)notification.PlatformId);
cmd.Parameters.AddWithValue("@platform_name", NpgsqlTypes.NpgsqlDbType.Text, notification.Platform.Name); cmd.Parameters.AddWithValue("@platform_name", NpgsqlTypes.NpgsqlDbType.Text, notification.PlatformName);
cmd.Parameters.AddWithValue("@platform_provider_name", NpgsqlTypes.NpgsqlDbType.Text, notification.Platform.ProviderName); cmd.Parameters.AddWithValue("@platform_provider_name", NpgsqlTypes.NpgsqlDbType.Text, notification.PlatformProviderName);
cmd.Parameters.AddWithValue("@platform_provider_name_language_code", NpgsqlTypes.NpgsqlDbType.Varchar, notification.Platform.ProviderNameLanguageCode); cmd.Parameters.AddWithValue("@platform_provider_name_language_code", NpgsqlTypes.NpgsqlDbType.Varchar, notification.PlatformProviderNameLanguageCode);
cmd.Parameters.AddWithValue("@platform_action_type", NpgsqlTypes.NpgsqlDbType.Integer, notification.Platform.ActionType); cmd.Parameters.AddWithValue("@platform_action_type", NpgsqlTypes.NpgsqlDbType.Integer, notification.PlatformActionType);
cmd.Parameters.AddWithValue("@platform_name_language_code", NpgsqlTypes.NpgsqlDbType.Varchar, notification.Platform.NameLanguageCode); cmd.Parameters.AddWithValue("@platform_name_language_code", NpgsqlTypes.NpgsqlDbType.Varchar, notification.PlatformNameLanguageCode);
cmd.Parameters.AddWithValue("@platform_processing_order", NpgsqlTypes.NpgsqlDbType.Integer, notification.Platform.ProcessingOrder); cmd.Parameters.AddWithValue("@platform_processing_order", NpgsqlTypes.NpgsqlDbType.Integer, notification.PlatformProcessingOrder);
cmd.Parameters.AddWithValue("@target_type", NpgsqlTypes.NpgsqlDbType.Integer, notification.Target.GenerateId()); cmd.Parameters.AddWithValue("@target_type", NpgsqlTypes.NpgsqlDbType.Integer, notification.TargetType);
cmd.Parameters.AddWithValue("@target_name", NpgsqlTypes.NpgsqlDbType.Text, notification.Target.GenerateName()); cmd.Parameters.AddWithValue("@target_name", NpgsqlTypes.NpgsqlDbType.Text, notification.TargetName);
//@operational_network_id,@operational_mpe_fec_algorithm,@operational_component_tag,@operational_transport_stream_id,@operational_time_slice_fec_id,@operational_time_slicing,@operational_onid,@operational_sid,@operational_time_slice_frame_size, @operational_time_slice_max_average_rate,\r\n @operational_time_slice_max_bust_duration\r\n\r\n )"; //@operational_network_id,@operational_mpe_fec_algorithm,@operational_component_tag,@operational_transport_stream_id,@operational_time_slice_fec_id,@operational_time_slicing,@operational_onid,@operational_sid,@operational_time_slice_frame_size, @operational_time_slice_max_average_rate,\r\n @operational_time_slice_max_bust_duration\r\n\r\n )";
cmd.Parameters.AddWithValue("@operational_network_id", NpgsqlTypes.NpgsqlDbType.Integer, (int?)notification.Operational.NetworkId); cmd.Parameters.AddWithValue("@operational_network_id", NpgsqlTypes.NpgsqlDbType.Integer, (int?)notification.OperationalNetworkId);
cmd.Parameters.AddWithValue("@operational_mpe_fec_algorithm", NpgsqlTypes.NpgsqlDbType.Integer, (int?)notification.Operational.MpeFecAlgorithm); cmd.Parameters.AddWithValue("@operational_mpe_fec_algorithm", NpgsqlTypes.NpgsqlDbType.Integer, (int?)notification.OperationalMpeFecAlgorithm);
cmd.Parameters.AddWithValue("@operational_component_tag", NpgsqlTypes.NpgsqlDbType.Integer, (int?)notification.Operational.ComponentTag); cmd.Parameters.AddWithValue("@operational_component_tag", NpgsqlTypes.NpgsqlDbType.Integer, (int?)notification.OperationalComponentTag);
cmd.Parameters.AddWithValue("@operational_transport_stream_id", NpgsqlTypes.NpgsqlDbType.Integer, (int?)notification.Operational.TransportStreamId); cmd.Parameters.AddWithValue("@operational_transport_stream_id", NpgsqlTypes.NpgsqlDbType.Integer, (int?)notification.OperationalTransportStreamId);
cmd.Parameters.AddWithValue("@operational_time_slice_fec_id", NpgsqlTypes.NpgsqlDbType.Integer, (int?)notification.Operational.TimeSliceFecId); cmd.Parameters.AddWithValue("@operational_time_slice_fec_id", NpgsqlTypes.NpgsqlDbType.Integer, (int?)notification.OperationalTimeSliceFecId);
cmd.Parameters.AddWithValue("@operational_time_slicing", NpgsqlTypes.NpgsqlDbType.Boolean, (bool?)notification.Operational.TimeSlicing); cmd.Parameters.AddWithValue("@operational_time_slicing", NpgsqlTypes.NpgsqlDbType.Boolean, (bool?)notification.OperationalTimeSlicing);
cmd.Parameters.AddWithValue("@operational_onid", NpgsqlTypes.NpgsqlDbType.Integer, (int?)notification.Operational.OriginalNetworkId); cmd.Parameters.AddWithValue("@operational_onid", NpgsqlTypes.NpgsqlDbType.Integer, (int?)notification.OperationalOriginalNetworkId);
cmd.Parameters.AddWithValue("@operational_sid", NpgsqlTypes.NpgsqlDbType.Integer, (int?)notification.Operational.ServiceId); cmd.Parameters.AddWithValue("@operational_sid", NpgsqlTypes.NpgsqlDbType.Integer, (int?)notification.OperationalServiceId);
//@operational_time_slice_frame_size,@operational_time_slice_max_average_rate,@operational_time_slice_max_bust_duration //@operational_time_slice_frame_size,@operational_time_slice_max_average_rate,@operational_time_slice_max_bust_duration
cmd.Parameters.AddWithValue("@operational_time_slice_frame_size", NpgsqlTypes.NpgsqlDbType.Integer, (int?)notification.Operational.TimeSliceFrameSize); cmd.Parameters.AddWithValue("@operational_time_slice_frame_size", NpgsqlTypes.NpgsqlDbType.Integer, (int?)notification.OperationalTimeSliceFrameSize);
cmd.Parameters.AddWithValue("@operational_time_slice_max_average_rate", NpgsqlTypes.NpgsqlDbType.Integer, (int?)notification.Operational.TimeSliceMaxAverageRate); cmd.Parameters.AddWithValue("@operational_time_slice_max_average_rate", NpgsqlTypes.NpgsqlDbType.Integer, (int?)notification.OperationalTimeSliceMaxAverageRate);
cmd.Parameters.AddWithValue("@operational_time_slice_max_bust_duration", NpgsqlTypes.NpgsqlDbType.Integer, (int?)notification.Operational.TimeSliceMaxBurstDuration); cmd.Parameters.AddWithValue("@operational_time_slice_max_bust_duration", NpgsqlTypes.NpgsqlDbType.Integer, (int?)notification.OperationalTimeSliceMaxBurstDuration);
cmd.Parameters.CheckNulls(); cmd.Parameters.CheckNulls();
cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery();
} }

View File

@ -2,17 +2,13 @@
using Npgsql; using Npgsql;
using skyscraper5.src.InteractionChannel.Model; using skyscraper5.src.InteractionChannel.Model;
using skyscraper5.src.InteractionChannel.Model.Descriptors; using skyscraper5.src.InteractionChannel.Model.Descriptors;
using skyscraper5.src.InteractionChannel.Model2;
using skyscraper5.src.Skyscraper.Scraper.Storage.Utilities; using skyscraper5.src.Skyscraper.Scraper.Storage.Utilities;
using skyscraper8.InteractionChannel.Model2;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.Linq; using System.Linq;
using System.Net.NetworkInformation; using System.Net.NetworkInformation;
using System.Security.Cryptography; using System.Security.Cryptography;
using skyscraper8.InteractionChannel.Model;
using skyscraper8.InteractionChannel.Model2.Descriptors;
namespace skyscraper5.Data.PostgreSql namespace skyscraper5.Data.PostgreSql
{ {
@ -951,112 +947,6 @@ namespace skyscraper5.Data.PostgreSql
return false; return false;
} }
public bool TestForRcs2Nit(RcsNit nit)
{
throw new NotImplementedException();
}
public void InsertRcs2Nit(RcsNit nit)
{
throw new NotImplementedException();
}
public bool UpdateRcs2Tdt(ushort interactiveNetworkId, DateTime tdtTimestamp)
{
throw new NotImplementedException();
}
public bool TestForTmst2(ushort interactiveNetworkId, Tmst2.TransmissionMode mode)
{
throw new NotImplementedException();
}
public void InsertTmst2(ushort interactiveNetworkId, Tmst2.TransmissionMode mode)
{
throw new NotImplementedException();
}
public bool TestForTimFramePayloadFormat(ushort networkId, _0xb7_FramePayloadFormatDescriptor.TransmissionContext transmissionContext)
{
throw new NotImplementedException();
}
public void InsertTimFramePayloadFormat(ushort networkId, _0xb7_FramePayloadFormatDescriptor.TransmissionContext transmissionContext)
{
throw new NotImplementedException();
}
public bool TestForTimCorrectionMessageExtension(PhysicalAddress macAddress)
{
throw new NotImplementedException();
}
public void InsertTimCorrectionMessageExtension(PhysicalAddress macAddress,
_0xb1_CorrectionMessageExtensionDescriptor descriptor)
{
throw new NotImplementedException();
}
public bool TestForTimControlAssignment(PhysicalAddress macAddress)
{
throw new NotImplementedException();
}
public void InsertTimControlAssignment(PhysicalAddress macAddress, _0xa4_SyncAssignDescriptor descriptor)
{
throw new NotImplementedException();
}
public bool TestForTimSatelliteReturnLink(PhysicalAddress macAddress)
{
throw new NotImplementedException();
}
public void InsertTimSatelliteReturnLink(PhysicalAddress macAddress, _0xa9_SatelliteReturnLinkDescriptor descriptor)
{
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) private bool AreArraysEqual(byte[] l, byte[] r)
{ {
if (l.Length != r.Length) if (l.Length != r.Length)
@ -1079,7 +969,5 @@ namespace skyscraper5.Data.PostgreSql
command.Parameters.AddWithValue("@nid", NpgsqlTypes.NpgsqlDbType.Integer, (int)coordinate.Item1); command.Parameters.AddWithValue("@nid", NpgsqlTypes.NpgsqlDbType.Integer, (int)coordinate.Item1);
command.ExecuteNonQuery(); command.ExecuteNonQuery();
} }
} }
} }

View File

@ -6,7 +6,6 @@ using NpgsqlTypes;
using skyscraper5.Dvb.Psi.Model; using skyscraper5.Dvb.Psi.Model;
using skyscraper5.Dvb.TvAnytime; using skyscraper5.Dvb.TvAnytime;
using skyscraper5.Skyscraper.Headless; using skyscraper5.Skyscraper.Headless;
using skyscraper5.src.InteractionChannel.Model;
using skyscraper5.src.InteractionChannel.Model2; using skyscraper5.src.InteractionChannel.Model2;
using skyscraper8.DvbNip; using skyscraper8.DvbNip;
using skyscraper8.InteractionChannel.Model2; using skyscraper8.InteractionChannel.Model2;
@ -257,16 +256,6 @@ namespace skyscraper5.Data.PostgreSql
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
public bool TestForRmt(Rmt rmt)
{
return true;
}
public void InsertRmt(Rmt rmt)
{
throw new NotImplementedException();
}
} }
} }

View File

@ -19,9 +19,9 @@ namespace skyscraper5.Data.PostgreSql
this.uiVersion = version; this.uiVersion = version;
} }
public List<LnbEntity> UiLnbTypesListAll() public List<LnbType> UiLnbTypesListAll()
{ {
List<LnbEntity> lnbTypes = new List<LnbEntity>(); List<LnbType> lnbTypes = new List<LnbType>();
using (NpgsqlConnection conn = new NpgsqlConnection(connectionStringBuilder.ToString())) using (NpgsqlConnection conn = new NpgsqlConnection(connectionStringBuilder.ToString()))
{ {
conn.Open(); conn.Open();
@ -38,7 +38,7 @@ namespace skyscraper5.Data.PostgreSql
int lofSw = dataReader.GetInt32(5); int lofSw = dataReader.GetInt32(5);
int minFreq = dataReader.GetInt32(6); int minFreq = dataReader.GetInt32(6);
int maxFreq = dataReader.GetInt32(7); int maxFreq = dataReader.GetInt32(7);
lnbTypes.Add(new LnbEntity("", name, lof1, lof2, lofSw, minFreq, maxFreq) { DateAdded = added, Id = id }); lnbTypes.Add(new LnbType(name, lof1, lof2, lofSw, minFreq, maxFreq) { DateAdded = added, Id = id });
} }
dataReader.Close(); dataReader.Close();
@ -49,7 +49,7 @@ namespace skyscraper5.Data.PostgreSql
return lnbTypes; return lnbTypes;
} }
public void UiLnbTypesAdd(LnbEntity defaultLnbType) public void UiLnbTypesAdd(LnbType defaultLnbType)
{ {
using (NpgsqlConnection conn = new NpgsqlConnection(connectionStringBuilder.ToString())) using (NpgsqlConnection conn = new NpgsqlConnection(connectionStringBuilder.ToString()))
{ {
@ -69,9 +69,9 @@ namespace skyscraper5.Data.PostgreSql
} }
} }
public List<DishEntity> UiDishTypesListAll() public List<DishType> UiDishTypesListAll()
{ {
List<DishEntity> result = new List<DishEntity>(); List<DishType> result = new List<DishType>();
using (NpgsqlConnection conn = new NpgsqlConnection(connectionStringBuilder.ToString())) using (NpgsqlConnection conn = new NpgsqlConnection(connectionStringBuilder.ToString()))
{ {
conn.Open(); conn.Open();
@ -85,14 +85,14 @@ namespace skyscraper5.Data.PostgreSql
string name = dataReader.GetString(2); string name = dataReader.GetString(2);
int diameter = dataReader.GetInt32(3); int diameter = dataReader.GetInt32(3);
DishShape shape = (DishShape)dataReader.GetInt32(4); DishShape shape = (DishShape)dataReader.GetInt32(4);
result.Add(new DishEntity("", name, diameter, shape) { DateAdded = added, Id = id }); result.Add(new DishType(name, diameter, shape) { DateAdded = added, Id = id });
} }
} }
return result; return result;
} }
public void UiDishTypesAdd(DishEntity defaultDishType) public void UiDishTypesAdd(DishType defaultDishType)
{ {
using (NpgsqlConnection conn = new NpgsqlConnection(connectionStringBuilder.ToString())) using (NpgsqlConnection conn = new NpgsqlConnection(connectionStringBuilder.ToString()))
{ {
@ -109,9 +109,9 @@ namespace skyscraper5.Data.PostgreSql
} }
public List<SatellitePositionEntity> UiSatellitesListAll() public List<SatellitePosition> UiSatellitesListAll()
{ {
List<SatellitePositionEntity> positions = new List<SatellitePositionEntity>(); List<SatellitePosition> positions = new List<SatellitePosition>();
using (NpgsqlConnection conn = new NpgsqlConnection(connectionStringBuilder.ToString())) using (NpgsqlConnection conn = new NpgsqlConnection(connectionStringBuilder.ToString()))
{ {
conn.Open(); conn.Open();
@ -123,7 +123,7 @@ namespace skyscraper5.Data.PostgreSql
float angle = (float)reader.GetDouble(0); float angle = (float)reader.GetDouble(0);
int cardinal = reader.GetInt32(1); int cardinal = reader.GetInt32(1);
string name = reader.GetString(2); string name = reader.GetString(2);
SatellitePositionEntity child = new SatellitePositionEntity(angle, name); SatellitePosition child = new SatellitePosition(angle, cardinal, name);
positions.Add(child); positions.Add(child);
} }
@ -135,7 +135,7 @@ namespace skyscraper5.Data.PostgreSql
return positions; return positions;
} }
public void UiSatellitesAdd(SatellitePositionEntity newPosition) public void UiSatellitesAdd(SatellitePosition newPosition)
{ {
using (NpgsqlConnection conn = new NpgsqlConnection(connectionStringBuilder.ToString())) using (NpgsqlConnection conn = new NpgsqlConnection(connectionStringBuilder.ToString()))
{ {
@ -145,7 +145,7 @@ namespace skyscraper5.Data.PostgreSql
"insert into skyscraper5_satellite_positions (angle, cardinal, name, keyversion, key) " + "insert into skyscraper5_satellite_positions (angle, cardinal, name, keyversion, key) " +
"values (@angle, @cardinal, @name, @keyversion, @key)"; "values (@angle, @cardinal, @name, @keyversion, @key)";
cmd.Parameters.AddWithValue("@angle", NpgsqlDbType.Real, newPosition.angle); cmd.Parameters.AddWithValue("@angle", NpgsqlDbType.Real, newPosition.angle);
cmd.Parameters.AddWithValue("@cardinal", NpgsqlDbType.Integer, newPosition.GetCardinalDirectionAsInt()); cmd.Parameters.AddWithValue("@cardinal", NpgsqlDbType.Integer, newPosition.cardinalDirection);
cmd.Parameters.AddWithValue("@name", NpgsqlDbType.Text, newPosition.name); cmd.Parameters.AddWithValue("@name", NpgsqlDbType.Text, newPosition.name);
cmd.Parameters.AddWithValue("@keyversion", NpgsqlDbType.Integer, uiVersion); cmd.Parameters.AddWithValue("@keyversion", NpgsqlDbType.Integer, uiVersion);
cmd.Parameters.AddWithValue("@key", NpgsqlDbType.Text, newPosition.Checksum.ToString()); cmd.Parameters.AddWithValue("@key", NpgsqlDbType.Text, newPosition.Checksum.ToString());
@ -155,7 +155,7 @@ namespace skyscraper5.Data.PostgreSql
} }
} }
public void UiSatellitesDelete(SatellitePositionEntity satellitePosition) public void UiSatellitesDelete(SatellitePosition satellitePosition)
{ {
using (NpgsqlConnection conn = new NpgsqlConnection(connectionStringBuilder.ToString())) using (NpgsqlConnection conn = new NpgsqlConnection(connectionStringBuilder.ToString()))
{ {

View File

@ -6,8 +6,8 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Npgsql" Version="10.0.2" /> <PackageReference Include="Npgsql" Version="9.0.3" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@ -1,86 +0,0 @@
byte1 in Hex;unkn1 in hex;unkn1 in Binary;byte2 in Hex;Times occurred;smallest seen packet;largest seen packet
0x01;0x10;0b00010000;0x00;1941;18;18
0x01;0x18;0b00011000;0x00;2898;24;24
0x01;0xC8;0b11001000;0x00;268;200;200
0x01;0xD4;0b11010100;0x00;286;212;212
0x01;0x38;0b00111000;0x01;24;312;312
0x01;0x3A;0b00111010;0x01;84;314;314
0x01;0x42;0b01000010;0x01;9;322;322
0x01;0x44;0b01000100;0x01;163;324;324
0x01;0x46;0b01000110;0x01;295;326;326
0x01;0x48;0b01001000;0x01;480;328;328
0x01;0x4A;0b01001010;0x01;143;330;330
0x01;0x4C;0b01001100;0x01;129;332;332
0x01;0x4E;0b01001110;0x01;86;334;334
0x01;0x50;0b01010000;0x01;102;336;336
0x01;0x52;0b01010010;0x01;145;338;338
0x01;0x54;0b01010100;0x01;149;340;340
0x01;0x56;0b01010110;0x01;444;342;342
0x01;0x58;0b01011000;0x01;93;344;344
0x01;0x5A;0b01011010;0x01;5;346;346
0x01;0x5C;0b01011100;0x01;69;348;348
0x01;0x5E;0b01011110;0x01;238;350;350
0x01;0x60;0b01100000;0x01;191;352;352
0x01;0x62;0b01100010;0x01;395;354;354
0x01;0x64;0b01100100;0x01;145;356;356
0x01;0x66;0b01100110;0x01;170;358;358
0x01;0x68;0b01101000;0x01;308;360;360
0x01;0x6A;0b01101010;0x01;262;362;362
0x01;0x6C;0b01101100;0x01;81;364;364
0x01;0x6E;0b01101110;0x01;153;366;366
0x01;0x70;0b01110000;0x01;177;368;368
0x01;0x72;0b01110010;0x01;207;370;370
0x01;0x74;0b01110100;0x01;158;372;372
0x01;0x76;0b01110110;0x01;285;374;374
0x01;0x78;0b01111000;0x01;421;376;376
0x01;0x7A;0b01111010;0x01;107;378;378
0x01;0x7C;0b01111100;0x01;59;380;380
0x01;0x7E;0b01111110;0x01;54;382;382
0x01;0x80;0b10000000;0x01;33;384;384
0x01;0x82;0b10000010;0x01;45;386;386
0x01;0x84;0b10000100;0x01;5;388;388
0x01;0x86;0b10000110;0x01;10;390;390
0x01;0x88;0b10001000;0x01;15;392;392
0x01;0x8A;0b10001010;0x01;15;394;394
0x01;0x8E;0b10001110;0x01;10;398;398
0x01;0x90;0b10010000;0x01;10;400;400
0x01;0x92;0b10010010;0x01;5;402;402
0x01;0x96;0b10010110;0x01;5;406;406
0x01;0x9A;0b10011010;0x01;10;410;410
0x01;0x9C;0b10011100;0x01;10;412;412
0x01;0x9E;0b10011110;0x01;5;414;414
0x01;0xA2;0b10100010;0x01;10;418;418
0x01;0xAE;0b10101110;0x01;10;430;430
0x01;0xB6;0b10110110;0x01;5;438;438
0x01;0x90;0b10010000;0x05;17020001;1424;1424
0x01;0xA0;0b10100000;0x05;257300;1440;1440
0x03;0x42;0b01000010;0x00;789;66;66
0x03;0x3E;0b00111110;0x01;2494;318;318
0x03;0x40;0b01000000;0x01;6732;320;320
0x03;0x42;0b01000010;0x01;674;322;322
0x03;0x44;0b01000100;0x01;654;324;324
0x03;0x46;0b01000110;0x01;1182;326;326
0x03;0x48;0b01001000;0x01;696;328;328
0x03;0x4A;0b01001010;0x01;2046;330;330
0x03;0x4C;0b01001100;0x01;843;332;332
0x03;0x4E;0b01001110;0x01;4130;334;334
0x03;0x50;0b01010000;0x01;2032;336;336
0x03;0x54;0b01010100;0x01;1121;340;340
0x03;0x56;0b01010110;0x01;2686;342;342
0x03;0x58;0b01011000;0x01;6191;344;344
0x03;0x5A;0b01011010;0x01;533;346;346
0x03;0x5C;0b01011100;0x01;1102;348;348
0x03;0x5E;0b01011110;0x01;2777;350;350
0x03;0x60;0b01100000;0x01;3290;352;352
0x03;0x62;0b01100010;0x01;4831;354;354
0x03;0x64;0b01100100;0x01;140;356;356
0x03;0x66;0b01100110;0x01;2485;358;358
0x03;0x68;0b01101000;0x01;4622;360;360
0x03;0x6A;0b01101010;0x01;3865;362;362
0x03;0x6C;0b01101100;0x01;5000;364;364
0x03;0x70;0b01110000;0x01;305;368;368
0x03;0x72;0b01110010;0x01;372;370;370
0x03;0x74;0b01110100;0x01;1106;372;372
0x03;0x78;0b01111000;0x01;1969;376;376
0x03;0xBA;0b10111010;0x05;4037;1466;1466
0xFF;0x08;0b00001000;0x00;421;18;18
1 byte1 in Hex unkn1 in hex unkn1 in Binary byte2 in Hex Times occurred smallest seen packet largest seen packet
2 0x01 0x10 0b00010000 0x00 1941 18 18
3 0x01 0x18 0b00011000 0x00 2898 24 24
4 0x01 0xC8 0b11001000 0x00 268 200 200
5 0x01 0xD4 0b11010100 0x00 286 212 212
6 0x01 0x38 0b00111000 0x01 24 312 312
7 0x01 0x3A 0b00111010 0x01 84 314 314
8 0x01 0x42 0b01000010 0x01 9 322 322
9 0x01 0x44 0b01000100 0x01 163 324 324
10 0x01 0x46 0b01000110 0x01 295 326 326
11 0x01 0x48 0b01001000 0x01 480 328 328
12 0x01 0x4A 0b01001010 0x01 143 330 330
13 0x01 0x4C 0b01001100 0x01 129 332 332
14 0x01 0x4E 0b01001110 0x01 86 334 334
15 0x01 0x50 0b01010000 0x01 102 336 336
16 0x01 0x52 0b01010010 0x01 145 338 338
17 0x01 0x54 0b01010100 0x01 149 340 340
18 0x01 0x56 0b01010110 0x01 444 342 342
19 0x01 0x58 0b01011000 0x01 93 344 344
20 0x01 0x5A 0b01011010 0x01 5 346 346
21 0x01 0x5C 0b01011100 0x01 69 348 348
22 0x01 0x5E 0b01011110 0x01 238 350 350
23 0x01 0x60 0b01100000 0x01 191 352 352
24 0x01 0x62 0b01100010 0x01 395 354 354
25 0x01 0x64 0b01100100 0x01 145 356 356
26 0x01 0x66 0b01100110 0x01 170 358 358
27 0x01 0x68 0b01101000 0x01 308 360 360
28 0x01 0x6A 0b01101010 0x01 262 362 362
29 0x01 0x6C 0b01101100 0x01 81 364 364
30 0x01 0x6E 0b01101110 0x01 153 366 366
31 0x01 0x70 0b01110000 0x01 177 368 368
32 0x01 0x72 0b01110010 0x01 207 370 370
33 0x01 0x74 0b01110100 0x01 158 372 372
34 0x01 0x76 0b01110110 0x01 285 374 374
35 0x01 0x78 0b01111000 0x01 421 376 376
36 0x01 0x7A 0b01111010 0x01 107 378 378
37 0x01 0x7C 0b01111100 0x01 59 380 380
38 0x01 0x7E 0b01111110 0x01 54 382 382
39 0x01 0x80 0b10000000 0x01 33 384 384
40 0x01 0x82 0b10000010 0x01 45 386 386
41 0x01 0x84 0b10000100 0x01 5 388 388
42 0x01 0x86 0b10000110 0x01 10 390 390
43 0x01 0x88 0b10001000 0x01 15 392 392
44 0x01 0x8A 0b10001010 0x01 15 394 394
45 0x01 0x8E 0b10001110 0x01 10 398 398
46 0x01 0x90 0b10010000 0x01 10 400 400
47 0x01 0x92 0b10010010 0x01 5 402 402
48 0x01 0x96 0b10010110 0x01 5 406 406
49 0x01 0x9A 0b10011010 0x01 10 410 410
50 0x01 0x9C 0b10011100 0x01 10 412 412
51 0x01 0x9E 0b10011110 0x01 5 414 414
52 0x01 0xA2 0b10100010 0x01 10 418 418
53 0x01 0xAE 0b10101110 0x01 10 430 430
54 0x01 0xB6 0b10110110 0x01 5 438 438
55 0x01 0x90 0b10010000 0x05 17020001 1424 1424
56 0x01 0xA0 0b10100000 0x05 257300 1440 1440
57 0x03 0x42 0b01000010 0x00 789 66 66
58 0x03 0x3E 0b00111110 0x01 2494 318 318
59 0x03 0x40 0b01000000 0x01 6732 320 320
60 0x03 0x42 0b01000010 0x01 674 322 322
61 0x03 0x44 0b01000100 0x01 654 324 324
62 0x03 0x46 0b01000110 0x01 1182 326 326
63 0x03 0x48 0b01001000 0x01 696 328 328
64 0x03 0x4A 0b01001010 0x01 2046 330 330
65 0x03 0x4C 0b01001100 0x01 843 332 332
66 0x03 0x4E 0b01001110 0x01 4130 334 334
67 0x03 0x50 0b01010000 0x01 2032 336 336
68 0x03 0x54 0b01010100 0x01 1121 340 340
69 0x03 0x56 0b01010110 0x01 2686 342 342
70 0x03 0x58 0b01011000 0x01 6191 344 344
71 0x03 0x5A 0b01011010 0x01 533 346 346
72 0x03 0x5C 0b01011100 0x01 1102 348 348
73 0x03 0x5E 0b01011110 0x01 2777 350 350
74 0x03 0x60 0b01100000 0x01 3290 352 352
75 0x03 0x62 0b01100010 0x01 4831 354 354
76 0x03 0x64 0b01100100 0x01 140 356 356
77 0x03 0x66 0b01100110 0x01 2485 358 358
78 0x03 0x68 0b01101000 0x01 4622 360 360
79 0x03 0x6A 0b01101010 0x01 3865 362 362
80 0x03 0x6C 0b01101100 0x01 5000 364 364
81 0x03 0x70 0b01110000 0x01 305 368 368
82 0x03 0x72 0b01110010 0x01 372 370 370
83 0x03 0x74 0b01110100 0x01 1106 372 372
84 0x03 0x78 0b01111000 0x01 1969 376 376
85 0x03 0xBA 0b10111010 0x05 4037 1466 1466
86 0xFF 0x08 0b00001000 0x00 421 18 18

View File

@ -1,24 +0,0 @@
0000 00 01 80 01 e1 91 85 92 eb 7c 00 00 00 20 71 01 ・・・・・・・・ ・|・・・ q・
0010 00 03 70 01 a9 96 24 a7 68 01 00 00 58 01 00 00 ・・p・・・$・ h・・・X・・・
0020 00 00 00 00 01 00 00 00 02 00 00 70 00 00 00 00 ・・・・・・・・ ・・・p・・・・
0030 97 12 0a 00 00 00 00 00 02 00 00 00 44 01 00 00 ・・・・・・・・ ・・・・D・・・
0040 17 00 00 00 00 00 00 00 80 05 00 00 8b 47 d9 69 ・・・・・・・・ ・・・・・G・i
0050 24 00 00 00 00 00 00 00 24 00 00 00 00 00 00 00 $・・・・・・・ $・・・・・・・
0060 01 00 00 00 32 30 32 36 2d 30 34 2d 31 30 54 31 ・・・・2026 -04-10T1
0070 38 35 31 32 35 5a 5f 33 5f 52 57 31 35 34 38 31 85125Z_3 _RW15481
0080 30 30 34 32 30 32 36 52 50 31 5f 52 54 52 4d 41 0042026R P1_RTRMA
0090 44 43 5f 30 5f 48 55 4e 47 41 52 59 2d 45 4c 45 DC_0_HUN GARY-ELE
00A0 43 54 49 4f 4e 2d 4f 50 50 4f 53 49 54 49 4f 4e CTION-OP POSITION
00B0 2d 43 4f 4e 43 45 52 54 2d 4d 4f 52 45 2e 58 4d -CONCERT -MORE.XM
00C0 4c 00 83 01 00 00 00 c1 10 65 79 84 53 b5 87 72 L・・・・・・・ ・ey・S・・r
00D0 48 9a c0 a7 5d 0b 6d 6a 58 a7 00 00 00 00 00 00 H・・・]・mj X・・・・・・・
00E0 00 0c 00 00 00 24 00 00 00 00 00 00 00 02 00 00 ・・・・・$・・ ・・・・・・・・
00F0 00 d2 46 d9 69 00 00 00 00 11 ba 00 00 00 00 00 ・・F・i・・・ ・・・・・・・・
0100 00 00 c6 00 00 00 00 00 00 5c 52 56 4e 2d 53 43 ・・・・・・・・ ・\RVN-SC
0110 52 49 50 54 53 5c 32 30 32 36 2d 30 34 2d 31 30 RIPTS\20 26-04-10
0120 54 31 38 35 31 32 35 5a 5f 33 5f 52 57 31 35 34 T185125Z _3_RW154
0130 38 31 30 30 34 32 30 32 36 52 50 31 5f 52 54 52 81004202 6RP1_RTR
0140 4d 41 44 43 5f 30 5f 48 55 4e 47 41 52 59 2d 45 MADC_0_H UNGARY-E
0150 4c 45 43 54 49 4f 4e 2d 4f 50 50 4f 53 49 54 49 LECTION- OPPOSITI
0160 4f 4e 2d 43 4f 4e 43 45 52 54 2d 4d 4f 52 45 2e ON-CONCE RT-MORE.
0170 58 4d 4c 00 01 00 00 00 01 00 04 00 22 24 00 80 XML・・・・・ ・・・・"$・・

View File

@ -1,24 +0,0 @@
0000 00 01 7e 01 e1 91 85 92 f1 7c 00 04 00 00 6f 01 ・・~・・・・・ ・|・・・・o・
0010 00 03 6e 01 3f 0e c2 9e 66 01 00 00 56 01 00 00 ・・n・?・・・ f・・・V・・・
0020 00 00 00 00 01 00 00 00 02 00 00 70 00 00 00 00 ・・・・・・・・ ・・・p・・・・
0030 97 12 0a 00 00 00 00 00 02 00 00 00 42 01 00 00 ・・・・・・・・ ・・・・B・・・
0040 17 00 00 00 00 00 00 00 80 05 00 00 8b 47 d9 69 ・・・・・・・・ ・・・・・G・i
0050 11 00 00 00 00 00 00 00 11 00 00 00 00 00 00 00 ・・・・・・・・ ・・・・・・・・
0060 01 00 00 00 32 30 32 36 2d 30 34 2d 31 30 54 31 ・・・・2026 -04-10T1
0070 38 35 31 32 35 5a 5f 33 5f 57 44 31 35 34 38 31 85125Z_3 _WD15481
0080 30 30 34 32 30 32 36 52 50 31 5f 52 54 52 57 4e 0042026R P1_RTRWN
0090 45 43 5f 30 5f 31 35 34 38 2d 48 55 4e 47 41 52 EC_0_154 8-HUNGAR
00A0 59 2d 45 4c 45 43 54 49 4f 4e 2d 4f 50 50 4f 53 Y-ELECTI ON-OPPOS
00B0 49 54 49 4f 4e 2d 43 4f 4e 43 45 52 54 2d 4d 4f ITION-CO NCERT-MO
00C0 52 45 2e 58 4d 4c 00 83 01 00 00 00 c1 10 3d 83 RE.XML・・ ・・・・・・=・
00D0 f8 ba dc 14 a1 48 80 25 a3 05 be a5 b1 ab a0 00 ・・・・・H・% ・・・・・・・・
00E0 00 00 00 00 00 00 0c 00 00 00 11 00 00 00 00 00 ・・・・・・・・ ・・・・・・・・
00F0 00 00 02 00 00 00 d2 46 d9 69 00 00 00 00 64 53 ・・・・・・・F ・i・・・・dS
0100 00 00 00 00 00 00 80 5d 00 00 00 00 00 00 5c 32 ・・・・・・・] ・・・・・・\2
0110 30 32 36 2d 30 34 2d 31 30 54 31 38 35 31 32 35 026-04-1 0T185125
0120 5a 5f 33 5f 57 44 31 35 34 38 31 30 30 34 32 30 Z_3_WD15 48100420
0130 32 36 52 50 31 5f 52 54 52 57 4e 45 43 5f 30 5f 26RP1_RT RWNEC_0_
0140 31 35 34 38 2d 48 55 4e 47 41 52 59 2d 45 4c 45 1548-HUN GARY-ELE
0150 43 54 49 4f 4e 2d 4f 50 50 4f 53 49 54 49 4f 4e CTION-OP POSITION
0160 2d 43 4f 4e 43 45 52 54 2d 4d 4f 52 45 2e 58 4d -CONCERT -MORE.XM
0170 4c 00 01 00 00 00 01 00 04 00 10 11 00 80 L・・・・・・・ ・・・・・・

View File

@ -1,25 +0,0 @@
0000 00 01 8a 01 e1 91 85 92 fa 7c 00 00 00 21 7b 01 ・・・・・・・・ ・|・・・!{・
0010 00 03 7a 01 d5 85 5f 96 72 01 00 00 62 01 00 00 ・・z・・・_・ r・・・b・・・
0020 00 00 00 00 01 00 00 00 02 00 00 70 00 00 00 00 ・・・・・・・・ ・・・p・・・・
0030 97 12 0a 00 00 00 00 00 02 00 00 00 4e 01 00 00 ・・・・・・・・ ・・・・N・・・
0040 17 00 00 00 00 00 00 00 80 05 00 00 c7 47 d9 69 ・・・・・・・・ ・・・・・G・i
0050 0b 00 00 00 00 00 00 00 0b 00 00 00 00 00 00 00 ・・・・・・・・ ・・・・・・・・
0060 01 00 00 00 32 30 32 36 2d 30 34 2d 31 30 54 31 ・・・・2026 -04-10T1
0070 38 35 31 32 35 5a 5f 31 5f 57 44 31 35 34 38 31 85125Z_1 _WD15481
0080 30 30 34 32 30 32 36 52 50 31 5f 52 54 52 57 4e 0042026R P1_RTRWN
0090 45 43 5f 30 5f 31 35 34 38 2d 48 55 4e 47 41 52 EC_0_154 8-HUNGAR
00A0 59 2d 45 4c 45 43 54 49 4f 4e 2d 4f 50 50 4f 53 Y-ELECTI ON-OPPOS
00B0 49 54 49 4f 4e 2d 43 4f 4e 43 45 52 54 2d 4d 4f ITION-CO NCERT-MO
00C0 52 45 2e 63 61 73 00 83 01 00 00 00 c1 10 a5 7c RE.cas・・ ・・・・・・・|
00D0 ce b3 91 90 a1 47 81 54 96 43 55 36 a2 b1 ac 00 ・・・・・G・T ・CU6・・・・
00E0 00 00 00 00 00 00 0c 00 00 00 0b 00 00 00 00 00 ・・・・・・・・ ・・・・・・・・
00F0 00 00 02 00 00 00 0e 47 d9 69 00 00 00 00 7a 36 ・・・・・・・G ・i・・・・z6
0100 00 00 00 00 00 00 80 3c 00 00 00 00 00 00 5c 52 ・・・・・・・< ・・・・・・\R
0110 56 4e 2d 53 43 52 49 50 54 53 5c 32 30 32 36 2d VN-SCRIP TS\2026-
0120 30 34 2d 31 30 54 31 38 35 31 32 35 5a 5f 31 5f 04-10T18 5125Z_1_
0130 57 44 31 35 34 38 31 30 30 34 32 30 32 36 52 50 WD154810 042026RP
0140 31 5f 52 54 52 57 4e 45 43 5f 30 5f 31 35 34 38 1_RTRWNE C_0_1548
0150 2d 48 55 4e 47 41 52 59 2d 45 4c 45 43 54 49 4f -HUNGARY -ELECTIO
0160 4e 2d 4f 50 50 4f 53 49 54 49 4f 4e 2d 43 4f 4e N-OPPOSI TION-CON
0170 43 45 52 54 2d 4d 4f 52 45 2e 63 61 73 00 01 00 CERT-MOR E.cas・・・
0180 00 00 01 00 04 00 0a 0b 00 80 ・・・・・・・・ ・・

View File

@ -1,24 +0,0 @@
0000 00 03 78 01 cc 30 69 01 70 01 00 00 60 01 00 00 ・・x・・0i・ p・・・`・・・
0010 00 00 00 00 01 00 00 00 02 00 00 70 00 00 00 00 ・・・・・・・・ ・・・p・・・・
0020 97 12 0a 00 00 00 00 00 02 00 00 00 4c 01 00 00 ・・・・・・・・ ・・・・L・・・
0030 17 00 00 00 00 00 00 00 80 05 00 00 db 47 d9 69 ・・・・・・・・ ・・・・・G・i
0040 00 90 02 00 00 00 00 00 00 90 02 00 00 00 00 00 ・・・・・・・・ ・・・・・・・・
0050 01 00 00 00 32 30 32 36 2d 30 34 2d 31 30 54 31 ・・・・2026 -04-10T1
0060 38 34 34 31 34 5a 5f 31 5f 4c 57 44 31 35 34 38 84414Z_1 _LWD1548
0070 31 30 30 34 32 30 32 36 52 50 31 5f 52 54 52 57 10042026 RP1_RTRW
0080 4e 45 56 5f 42 5f 31 35 34 38 2d 48 55 4e 47 41 NEV_B_15 48-HUNGA
0090 52 59 2d 45 4c 45 43 54 49 4f 4e 2d 4f 50 50 4f RY-ELECT ION-OPPO
00A0 53 49 54 49 4f 4e 2d 43 4f 4e 43 45 52 54 2d 4d SITION-C ONCERT-M
00B0 4f 52 45 2e 4d 50 47 2e 65 6e 63 00 83 01 00 00 ORE.MPG. enc・・・・・
00C0 00 c1 10 de b4 12 f2 c5 cb d8 47 a7 10 17 e4 bb ・・・・・・・・ ・・G・・・・・
00D0 7e 62 1c a5 00 00 00 00 00 00 00 0c 00 00 00 00 ~b・・・・・・ ・・・・・・・・
00E0 90 02 00 00 00 00 00 02 00 00 00 13 47 d9 69 00 ・・・・・・・・ ・・・・G・i・
00F0 00 00 00 00 40 5c 0d 00 00 00 00 00 00 18 0e 00 ・・・・@\・・ ・・・・・・・・
0100 00 00 00 5c 32 30 32 36 2d 30 34 2d 31 30 54 31 ・・・\2026 -04-10T1
0110 38 34 34 31 34 5a 5f 31 5f 4c 57 44 31 35 34 38 84414Z_1 _LWD1548
0120 31 30 30 34 32 30 32 36 52 50 31 5f 52 54 52 57 10042026 RP1_RTRW
0130 4e 45 56 5f 42 5f 31 35 34 38 2d 48 55 4e 47 41 NEV_B_15 48-HUNGA
0140 52 59 2d 45 4c 45 43 54 49 4f 4e 2d 4f 50 50 4f RY-ELECT ION-OPPO
0150 53 49 54 49 4f 4e 2d 43 4f 4e 43 45 52 54 2d 4d SITION-C ONCERT-M
0160 4f 52 45 2e 4d 50 47 2e 65 6e 63 00 01 00 00 00 ORE.MPG. enc・・・・・
0170 01 00 04 00 f3 00 00 80 ・・・・・・・・

View File

@ -1,22 +0,0 @@
0000 00 03 54 01 12 65 f2 b5 4c 01 00 00 3c 01 00 00 ・・T・・e・・ L・・・<・・・
0010 00 00 00 00 01 00 00 00 02 00 00 70 00 00 00 00 ・・・・・・・・ ・・・p・・・・
0020 97 12 0a 00 00 00 00 00 02 00 00 00 28 01 00 00 ・・・・・・・・ ・・・・(・・・
0030 17 00 00 00 00 00 00 00 80 05 00 00 b4 48 d9 69 ・・・・・・・・ ・・・・・H・i
0040 d8 13 00 00 00 00 00 00 d8 13 00 00 00 00 00 00 ・・・・・・・・ ・・・・・・・・
0050 01 00 00 00 32 30 31 32 2d 31 32 2d 30 36 54 31 ・・・・2012 -12-06T1
0060 37 32 34 34 31 5a 5f 37 36 5f 4c 57 44 30 30 30 72441Z_7 6_LWD000
0070 52 54 54 49 4f 4f 44 5f 52 54 52 57 4e 45 56 5f RTTIOOD_ RTRWNEV_
0080 42 5f 54 39 39 39 2d 50 4c 45 41 53 45 2d 49 47 B_T999-P LEASE-IG
0090 4e 4f 52 45 2d 32 36 30 34 31 30 30 30 30 37 35 NORE-260 41000075
00A0 33 2e 4d 50 47 2e 65 6e 63 00 83 01 00 00 00 c1 3.MPG.en c・・・・・・・
00B0 10 eb d9 18 9c ea 9a af 48 8b 2c 06 c4 25 6a 2c ・・・・・・・・ H・,・・%j,
00C0 bf 93 00 00 00 00 00 00 00 0c 00 00 00 d8 13 00 ・・・・・・・・ ・・・・・・・・
00D0 00 00 00 00 00 02 00 00 00 85 47 d9 69 00 00 00 ・・・・・・・・ ・・G・i・・・
00E0 00 00 20 67 00 00 00 00 00 00 24 6d 00 00 00 00 ・・ g・・・・ ・・$m・・・・
00F0 00 5c 32 30 31 32 2d 31 32 2d 30 36 54 31 37 32 ・\2012-1 2-06T172
0100 34 34 31 5a 5f 37 36 5f 4c 57 44 30 30 30 52 54 441Z_76_ LWD000RT
0110 54 49 4f 4f 44 5f 52 54 52 57 4e 45 56 5f 42 5f TIOOD_RT RWNEV_B_
0120 54 39 39 39 2d 50 4c 45 41 53 45 2d 49 47 4e 4f T999-PLE ASE-IGNO
0130 52 45 2d 32 36 30 34 31 30 30 30 30 37 35 33 2e RE-26041 0000753.
0140 4d 50 47 2e 65 6e 63 00 01 00 00 00 01 00 04 00 MPG.enc・ ・・・・・・・・
0150 f1 fe 00 80 ・・・・

View File

@ -1,21 +0,0 @@
0000 00 03 4c 01 11 ab 5d bc 44 01 00 00 34 01 00 00 ・・L・・・]・ D・・・4・・・
0010 00 00 00 00 01 00 00 00 02 00 00 70 00 00 00 00 ・・・・・・・・ ・・・p・・・・
0020 97 12 0a 00 00 00 00 00 02 00 00 00 20 01 00 00 ・・・・・・・・ ・・・・ ・・・
0030 17 00 00 00 00 00 00 00 80 05 00 00 af 49 d9 69 ・・・・・・・・ ・・・・・I・i
0040 00 4f 01 00 00 00 00 00 00 4f 01 00 00 00 00 00 ・O・・・・・・ ・O・・・・・・
0050 01 00 00 00 32 30 32 36 2d 30 34 2d 31 30 54 31 ・・・・2026 -04-10T1
0060 38 35 34 34 31 5a 5f 31 5f 4c 57 44 31 35 32 30 85441Z_1 _LWD1520
0070 31 30 30 34 32 30 32 36 52 50 31 5f 52 54 52 57 10042026 RP1_RTRW
0080 4e 45 56 5f 42 5f 31 35 32 30 2d 53 50 41 43 45 NEV_B_15 20-SPACE
0090 2d 4d 4f 4f 4e 2d 41 52 54 45 4d 49 53 2e 4d 50 -MOON-AR TEMIS.MP
00A0 47 2e 65 6e 63 00 83 01 00 00 00 c1 10 e5 8c 5f G.enc・・・ ・・・・・・・_
00B0 e0 01 87 38 48 bf be 18 db b0 93 27 d7 8f 00 00 ・・・8H・・・ ・・・'・・・・
00C0 00 00 00 00 00 0c 00 00 00 00 4f 01 00 00 00 00 ・・・・・・・・ ・・O・・・・・
00D0 00 02 00 00 00 f0 48 d9 69 00 00 00 00 00 c8 d0 ・・・・・・H・ i・・・・・・・
00E0 06 00 00 00 00 00 80 32 07 00 00 00 00 5c 32 30 ・・・・・・・2 ・・・・・\20
00F0 32 36 2d 30 34 2d 31 30 54 31 38 35 34 34 31 5a 26-04-10 T185441Z
0100 5f 31 5f 4c 57 44 31 35 32 30 31 30 30 34 32 30 _1_LWD15 20100420
0110 32 36 52 50 31 5f 52 54 52 57 4e 45 56 5f 42 5f 26RP1_RT RWNEV_B_
0120 31 35 32 30 2d 53 50 41 43 45 2d 4d 4f 4f 4e 2d 1520-SPA CE-MOON-
0130 41 52 54 45 4d 49 53 2e 4d 50 47 2e 65 6e 63 00 ARTEMIS. MPG.enc・
0140 01 00 00 00 01 00 04 00 f3 00 00 80 ・・・・・・・・ ・・・・

View File

@ -1,13 +0,0 @@
0000 00 01 c8 00 e1 91 85 92 f9 7d 00 02 00 00 b9 00 ・・・・・・・・ ・}・・・・・・
0010 00 03 b8 00 2b f0 ab 81 b0 00 00 00 a0 00 00 00 ・・・・+・・・ ・・・・・・・・
0020 00 00 00 00 01 00 00 00 02 00 00 70 00 00 00 00 ・・・・・・・・ ・・・p・・・・
0030 97 12 0a 00 00 00 00 00 02 00 00 00 8c 00 00 00 ・・・・・・・・ ・・・・・・・・
0040 17 00 00 00 00 00 00 00 80 05 00 00 5c 4a d9 69 ・・・・・・・・ ・・・・\J・i
0050 61 02 00 00 00 00 00 00 61 02 00 00 00 00 00 00 a・・・・・・・ a・・・・・・・
0060 01 00 00 00 77 6e 65 2e 64 61 74 00 83 01 00 00 ・・・・wne. dat・・・・・
0070 00 c1 10 97 70 db bc 3e 3a 9e 45 9f 03 8d 2a fb ・・・・p・・> :・E・・・*・
0080 ea eb ce 45 00 00 00 00 00 00 00 0c 00 00 00 61 ・・・E・・・・ ・・・・・・・a
0090 02 00 00 00 00 00 00 02 00 00 00 a2 49 d9 69 00 ・・・・・・・・ ・・・・I・i・
00A0 00 00 00 6b 5e 0c 00 00 00 00 00 80 15 0d 00 00 ・・・k^・・・ ・・・・・・・・
00B0 00 00 00 5c 77 6e 65 2e 64 61 74 00 01 00 00 00 ・・・\wne. dat・・・・・
00C0 01 00 04 00 c0 cb 00 80 ・・・・・・・・

View File

@ -1,203 +0,0 @@
# Reuters WNE Packet Format
Format is little endian.
Common bytes:
- Byte 0: always 0x00
- Byte 1: "Packet family", always 0x01, 0x03 or 0xff
- Bytes 2-3: Packet length
- Bytes 4-7: Session ID. This changes for every news story.
This format looks suspciously like it's TLV based, but I couldn't figure out how exactly the T's and L's are laid out. (Perhaps they use 2 bytes?)
All multi-byte integers are little endian.
## About byte 1
Byte 1 determines what kind of packet we're dealing with.
| Byte 1 | Packet Type |
|--------|-----------------------------------------|
| 0x01 | Object transfer |
| 0x03 | Object announcement |
| 0xfe | Unknown, but seems to be related to ECC |
| 0xff | Object end marker |
## Packet familly 0x01 (Object transfer)
A packet of this type contains a single block of data.
| Byte Index | Description |
|------------|------------------------------|
| 0 | always 0x00 |
| 1 | always 0x01 |
| 2-3 | Packet length |
| 4-7 | Session ID |
| 8-11 | dependent on value of 12-15 |
| 12-13 | Payload description |
| 14-15 | Payload description argument |
| 16-end | Payload |
* When bytes 12-15 are all zeroes, the payload is raw data. In this case bytes 8-11 are the Block ID. To reconstruct the object, concatenate all bytes of Block ID 0, then Block ID 1, and so on...
* When byte 12 is 0x05, and byte 14 is 0x09, then the payload is prefixed with an additional 16-byte header. It's purpose is not yet known. The actual payload starts at byte 32 then.
* When the payload description argument equals the total packet length minus 15, then the payload is another encapsulated WNE packet. Start reading from byte 16 all over again. If this is the case, the following ECC rules apply:
### ECC rules
| Byte Index | Description |
|------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 8 | ECC group ID |
| 9 | ? |
| 10 | always 0x00 ? |
| 11 | ECC block counter, incremented by one each packet. If this is 0x07, the ECC group is finished, and the group ID will be incremented by one during the next packet. |
| 12 | When an ECC group is finished with byte 11 being 0x07, this contains the number of blocks that are supposed to be in this just finished ECC group. |
| 13 | usually 0x00, sometimes 0x20, purpose not known |
| 14-15 | If byte 12 is 0, then Packet length minus 15, If byte 12 is 0x07, then ?
| 16-end | If ecc flags is 0x07, then this is an ECC payload, if ECC flags is 0x00, continue reading. |
## Packet family 0x03 (Object announcement)
A packet of this type contains information about the file/object which is about to be transferred, or is transferred at this time in 0x01 packets.
| Byte Index | Description |
|------------|---------------------------------------------------------------|
| 0 | always 0x00 |
| 1 | always 0x03 |
| 2-3 | Packet length |
| 4-7 | Session ID |
| 8-11 | Packet length - 8 |
| 12-15 | Packet length - 12 |
| 16-19 | always seems to be 0x00000000 |
| 20-23 | always seems to be 0x10000000 |
| 24-27 | always seems to be 0x02000070 |
| 28-31 | always seems to be 0x00000000 |
| 32-35 | always seems to be 0x97120a00 |
| 36-39 | always seems to be 0x00000000 |
| 40 | specifies a subformat. Observed values here are 0x02 and 0x09 |
### When byte 40 is 0x09
This indicates that the following object transfer does not contain a file, but a series of further encapsulated WNE packets. Those can be read using the same technique/structure.
### When byte 40 is 0x02
This indicates that the following object transfer contains a file.
| Byte Index | Description |
|-------------|---------------------------------------------------|
| 44-45 | Packet length - 44 |
| 46-55 | unknown |
| 55-56 | size of each block (usually 1408, but may differ) |
| 57-63 | unknown |
| 64-67 | number of blocks in this object |
| 68-71 | unknown |
| 72-75 | also number of blocks in this object |
| 76-84 | unknown |
| 85-n | UTF-8 null terminated source file name |
| n+0 - n+54 | unknown |
| n+55 - n+59 | file length in bytes |
| n+60 - n+71 | unknown |
| n+72 - m | UTF-8 null terminated destination file name |
| m - end | unknown |
## Packet family 0xff (Object end marker)
When a packet of this type is encountered, the object transfer is complete, and the packets can be assembled.
These packets may appear multiple times,
Sometimes these packets are stuffed with multiple 0x00 bytes.

View File

@ -1 +0,0 @@
"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8.1 Tools\x64\xsd.exe" /classes sis.xsd /namespace:Voile.Patchouli.Dvb.Sis.Model

File diff suppressed because it is too large Load Diff

View File

@ -1,388 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="DSACI">
<xs:complexType>
<xs:sequence>
<xs:element name="global_configuration" type="type_global_configuration" />
<xs:element name="input_configuration" type="type_input_configuration" />
<xs:element name="remultiplexing" type="type_remultiplexing"/>
<xs:element name="output_processing" type="type_output_processing"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- type_global_configuration -->
<xs:complexType name="type_global_configuration">
<xs:sequence>
<xs:element name="current_DSA_group_id" type="xs:int"/>
<xs:element name="global_version_number" type="type_version_number"/>
<xs:element name="global_application_time" type="xs:int"/>
<xs:element name="SIS_edition" type="type_SIS_edition"/>
</xs:sequence>
</xs:complexType>
<!-- type_SIS_edition -->
<xs:complexType name="type_SIS_edition">
<xs:sequence>
<xs:element name="major" type="xs:int"/>
<xs:element name="middle" type="xs:int"/>
<xs:element name="minor" type="xs:int"/>
</xs:sequence>
</xs:complexType>
<!-- type_input_configuration -->
<xs:complexType name="type_input_configuration">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="1" name="input" type="type_input_parent" />
</xs:sequence>
</xs:complexType>
<!-- type_input_parent: number of instances equals number of defined inputs -->
<xs:complexType name="type_input_parent">
<xs:sequence>
<xs:element name="input_TS_id" type="xs:int"/>
<xs:element name="input_ON_id" type="xs:int"/>
<xs:element name="source_id" type="xs:int"/>
<xs:element name="PMT_PID_SIS_service" type="type_pid"/>
<xs:element name="Primary_SIS_Service_Flag" type="xs:boolean"/>
</xs:sequence>
</xs:complexType>
<!-- type_remultiplexing -->
<xs:complexType name="type_remultiplexing">
<xs:sequence>
<xs:element name="output_TS" type= "type_output_TS" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<!-- type_output_TS: number of instances equals number of defined output TS -->
<xs:complexType name="type_output_TS">
<xs:sequence>
<xs:element name="PLP_id" minOccurs="0" maxOccurs="1" type="xs:int"/>
<xs:element name="output_TS_id" type="xs:int"/>
<xs:element name="output_ON_id" type="xs:int"/>
<xs:element name="pid_processing" type= "type_pid_processing"/>
<xs:element name="service_pmt_processing" type="type_service_pmt_processing"/>
<xs:element name="psisi_processing" type="type_psisi_processing_mode"/>
<xs:element name="Nsteps_to_live" type="xs:int"/>
</xs:sequence>
</xs:complexType>
<!-- type_pid_processing -->
<xs:complexType name="type_pid_processing">
<xs:sequence>
<xs:element name="pid" type="type_pid_proc" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<!-- type_pid_proc: number of instances equals number of defined output pid -->
<xs:complexType name="type_pid_proc">
<xs:sequence>
<xs:element name="source_id" type="xs:int"/>
<xs:element name="input_PID" type="type_pid"/>
<xs:element name="output_PID" type="type_pid"/>
</xs:sequence>
</xs:complexType>
<!-- type_service_pmt_processing -->
<xs:complexType name="type_service_pmt_processing">
<xs:sequence>
<xs:element name="service" type="type_service" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<!-- type_service: number of instances equals number of defined service in an output TS -->
<xs:complexType name="type_service">
<xs:sequence>
<xs:element name="source_id" type="xs:int"/>
<xs:element name="input_service_id" type="xs:int"/>
<xs:element name="output_service_id" type="xs:int"/>
<xs:element name="output_service_name" type="xs:string"/>
<xs:element name="output_provider_name" type="xs:string"/>
<xs:element name="eit_schedule_flag" type="xs:boolean"/>
<xs:element name="eit_present_following_flag" type="xs:boolean"/>
<xs:element name="running_status" type="xs:int"/>
<xs:element name="free_ca_mode" type="xs:int"/>
<xs:element name="output_PMT_PID" type="type_pid"/>
<xs:element name="pmt_processing_mode" type="type_pmt_processing_mode"/>
</xs:sequence>
</xs:complexType>
<!-- type_pmt_processing_mode -->
<xs:complexType name="type_pmt_processing_mode">
<xs:choice>
<xs:element name="pmt_passthrough" type="pmt_passthrough_processing"/>
<xs:element name="pmt_patching" type="pmt_patching_processing"/>
<xs:element name="pmt_regeneration" type="pmt_regeneration_processing"/>
</xs:choice>
</xs:complexType>
<!-- pmt_passthrough_processing -->
<xs:simpleType name="pmt_passthrough_processing">
<xs:restriction base="xs:string"/>
</xs:simpleType>
<!-- pmt_patching_processing -->
<xs:complexType name="pmt_patching_processing">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="ECM" type="type_ECM"/>
</xs:sequence>
</xs:complexType>
<!-- pmt_regeneration_processing -->
<xs:complexType name="pmt_regeneration_processing">
<xs:sequence>
<xs:element name="table_repetition_period" type="xs:int"/>
<xs:element name="offset" type="xs:int"/>
<xs:element name="PCR_PID" type="type_pid"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="output_pid" type="type_pid"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="ECM" type="type_ECM"/>
</xs:sequence>
</xs:complexType>
<!-- type_ECM -->
<xs:complexType name="type_ECM">
<xs:sequence>
<xs:element name="CAS_id" type="xs:int"/>
<xs:element name="output_ECM_PID" type="type_pid"/>
</xs:sequence>
</xs:complexType>
<!-- type_psisi_processing_mode -->
<xs:complexType name="type_psisi_processing_mode">
<xs:sequence>
<xs:element name="pat" type="type_pat_processing_mode"/>
<xs:element name="cat" type="type_cat_processing_mode"/>
<xs:element name="sdt_bat" type="type_sdt_bat_processing_mode"/>
<xs:element name="eit" type="type_eit_processing_mode"/>
</xs:sequence>
</xs:complexType>
<!-- type_pat_processing_mode -->
<xs:complexType name="type_pat_processing_mode">
<xs:choice>
<xs:element name="pat_passthrough" type="pat_passthrough_processing"/>
<xs:element name="pat_patching" type="pat_patching_processing"/>
<xs:element name="pat_regeneration" type="pat_regeneration_processing"/>
</xs:choice>
</xs:complexType>
<!-- pat_passthrough_processing -->
<xs:simpleType name="pat_passthrough_processing">
<xs:restriction base="xs:string"/>
</xs:simpleType>
<!-- pat_patching_processing -->
<xs:simpleType name="pat_patching_processing">
<xs:restriction base="xs:string"/>
</xs:simpleType>
<!-- pat_regeneration_processing -->
<xs:complexType name="pat_regeneration_processing">
<xs:sequence>
<xs:element name="table_repetition_period" type="xs:int"/>
<xs:element name="offset" type="xs:int"/>
<xs:element name="PAT_version_number" type="type_version_number"/>
</xs:sequence>
</xs:complexType>
<!-- type_cat_processing_mode -->
<xs:complexType name="type_cat_processing_mode">
<xs:choice>
<xs:element name="cat_stopping" type="cat_stopping_processing"/>
<xs:element name="cat_passthrough" type="cat_passthrough_processing"/>
<xs:element name="cat_patching" type="cat_patching_processing"/>
<xs:element name="cat_regeneration" type="cat_regeneration_processing"/>
</xs:choice>
</xs:complexType>
<!-- cat_stopping_processing -->
<xs:simpleType name="cat_stopping_processing">
<xs:restriction base="xs:string"/>
</xs:simpleType>
<!-- cat_passthrough_processing -->
<xs:simpleType name="cat_passthrough_processing">
<xs:restriction base="xs:string"/>
</xs:simpleType>
<!-- cat_patching_processing -->
<xs:complexType name="cat_patching_processing">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="ca_provider" type="type_ca_provider"/>
</xs:sequence>
</xs:complexType>
<!-- cat_regeneration_processing -->
<xs:complexType name="cat_regeneration_processing">
<xs:sequence>
<xs:element name="table_repetition_period" type="xs:int"/>
<xs:element name="offset" type="xs:int"/>
<xs:element name="CAT_version_number" type="type_version_number"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="ca_provider" type="type_ca_provider"/>
</xs:sequence>
</xs:complexType>
<!-- ca_provider: number of instances equals number of output EMM_PIDs -->
<xs:complexType name="type_ca_provider">
<xs:sequence>
<xs:element name="CAS_id" type="xs:int"/>
<xs:element name="output_EMM_PID" type="type_pid"/>
</xs:sequence>
</xs:complexType>
<!-- type_sdt_processing_mode -->
<xs:complexType name="type_sdt_bat_processing_mode">
<xs:choice>
<xs:element name="sdt_passthrough" type="sdt_passthrough_processing"/>
<xs:element name="sdt_patching" type="sdt_patching_processing"/>
<xs:element name="sdt_regeneration" type="sdt_regeneration_processing"/>
</xs:choice>
</xs:complexType>
<!-- sdt_passthrough_processing -->
<xs:simpleType name="sdt_passthrough_processing">
<xs:restriction base="xs:string"/>
</xs:simpleType>
<!-- sdt_patching_processing -->
<xs:complexType name="sdt_patching_processing">
<xs:sequence>
<xs:element name="sdt_crossreferencing_flag" type="xs:boolean"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="other_mux" type="type_other_mux"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="bouquet" type="type_bouquet"/>
</xs:sequence>
</xs:complexType>
<!-- sdt_regeneration_processing -->
<xs:complexType name="sdt_regeneration_processing">
<xs:sequence>
<xs:element name="sdt_actual_period" type="xs:int"/>
<xs:element name="M_actual" type="xs:int"/>
<xs:element name="offset" type="xs:int"/>
<xs:element name="sdt_actual_version_number" type="xs:int"/>
<xs:element name="sdt_crossreferencing_flag" type="xs:boolean"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="other_mux" type="type_other_mux"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="bouquet" type="type_bouquet"/>
</xs:sequence>
</xs:complexType>
<!-- other_mux: number of instances equals number of defined other muxes -->
<xs:complexType name="type_other_mux">
<xs:sequence>
<xs:element name="other_DSA_group_id" type="xs:int"/>
<xs:element name="DSACI_PID" type="type_pid"/>
<xs:element name="source_id" type="xs:int"/>
</xs:sequence>
</xs:complexType>
<!-- type_bouquet -->
<xs:complexType name="type_bouquet">
<xs:sequence>
<xs:element name="source_id" type="xs:int"/>
<xs:element name="input_bouquet_id" type="xs:int"/>
<xs:element name="terrestrial_bouquet_id" type="xs:int"/>
</xs:sequence>
</xs:complexType>
<!-- type_eit_processing_mode -->
<xs:complexType name="type_eit_processing_mode">
<xs:choice>
<xs:element name="eit_passthrough" type="eit_passthrough_processing"/>
<xs:element name="eit_patching" type="eit_patching_processing"/>
<xs:element name="eit_regeneration" type="eit_regeneration_processing"/>
</xs:choice>
</xs:complexType>
<!-- eit_passthrough_processing -->
<xs:simpleType name="eit_passthrough_processing">
<xs:restriction base="xs:string"/>
</xs:simpleType>
<!-- eit_patching_processing -->
<xs:complexType name="eit_patching_processing">
<xs:sequence>
<xs:element name="eit_crossreferencing_flag" type="xs:boolean"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="other_mux" type="type_other_mux"/>
</xs:sequence>
</xs:complexType>
<!-- eit_regeneration_processing -->
<xs:complexType name="eit_regeneration_processing">
<xs:sequence>
<xs:element name="eit_pf_actual_period" type="xs:int"/>
<xs:element name="eit_pf_other_period" type="xs:int"/>
<xs:element name="eit_sch_1stday_actual_period" type="xs:int"/>
<xs:element name="eit_sch_1stday_other_period" type="xs:int"/>
<xs:element name="eit_sch_2nd_8th_actual_period" type="xs:int"/>
<xs:element name="eit_sch_2nd_8th_other_period" type="xs:int"/>
<xs:element name="eit_sch_sup_8th_actual_period" type="xs:int"/>
<xs:element name="eit_sch_sup_8th_other_period" type="xs:int"/>
<xs:element name="eit_insertion_window_duration" type="xs:int"/>
<xs:element name="eit_cross_referencing_flag" type="xs:boolean"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="other_mux" type="type_other_mux"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="DTT_only_service"
type="type_DTT_only_service"/>
</xs:sequence>
</xs:complexType>
<!-- DTT_only_service: number of instances equals number of defined DTT only service -->
<xs:complexType name="type_DTT_only_service">
<xs:sequence>
<xs:element name="DTT_only_service_id" type="xs:int"/>
<xs:element name="input_EIT_PID" type="type_pid"/>
<xs:element name="source_id" type="xs:int"/>
</xs:sequence>
</xs:complexType>
<!-- type_output_processing -->
<xs:complexType name="type_output_processing">
<xs:sequence>
<xs:element name="terrestrial_standard_generation"
type="type_terrestrial_standard_generation" />
</xs:sequence>
</xs:complexType>
<!-- type_terrestrial_standard -->
<xs:complexType name="type_terrestrial_standard_generation">
<xs:choice>
<xs:element name="dvb_t" type="dvb_t_standard"/>
<xs:element name="dvb_t2" type="dvb_t2_standard"/>
</xs:choice>
</xs:complexType>
<!-- dvb_t_standard -->
<xs:simpleType name="dvb_t_standard">
<xs:restriction base="xs:string"/>
</xs:simpleType>
<!-- dvb_t2_standard -->
<xs:complexType name="dvb_t2_standard">
<xs:sequence>
<xs:element name="output_T2_MI_PID" type="type_pid"/>
<xs:element name="output_T2_MI_stream_id" type="xs:int"/>
<xs:element name="output_rate" type="xs:int"/>
<xs:element maxOccurs="1" minOccurs="0" name="L2_signalling" type="type_L2_signalling"/>
</xs:sequence>
</xs:complexType>
<!-- L2_signalling -->
<xs:complexType name="type_L2_signalling">
<xs:sequence>
<xs:element name="output_TS_id" type="xs:int"/>
<xs:element name="output_ON_id" type="xs:int"/>
<xs:element name="output_L2_service_id" type="xs:int"/>
<xs:element name="output_L2_service_provider_name" type="xs:string"/>
<xs:element name="output_L2_service_name" type="xs:string"/>
<xs:element name="output_L2_PCR_PID" type="type_pid"/>
<xs:element name="output_L2_PMT_PID" type="type_pid"/>
</xs:sequence>
</xs:complexType>
<!-- Other types -->
<xs:simpleType name="type_version_number">
<xs:restriction base="xs:int">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="31"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="type_pid">
<xs:restriction base="xs:int">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="8191"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -1,11 +0,0 @@
tsp -b 3248000 -v ^
-I file astra1_11604v_wdr_b.ts ^
-P filter --pid 0x1fff --set-label 2 ^
-P filter --only-label 2 --every 100 --set-label 1 ^
-P craft --only-label 1 --pid 101 --no-payload --pcr 0 ^
-P continuity --pid 101 ^
-P pcradjust --pid 101 ^
-P pat -c -a 1/100 ^
-P pmt -p 100 -c -i 1 -a 0x0bb8/0xd --set-data-broadcast-id 0x0bb8/5 -a 101/0x82 ^
-P history ^
-O file astra1_11604v_wdr_b_patched.ts

View File

@ -7,16 +7,12 @@ the following Signalling applies:
|Stream Type|Interpretation | |Stream Type|Interpretation |
|-----------|-----------------------------------| |-----------|-----------------------------------|
|0x80 |STiD135 GS/GSE Packets | |0x80 |TBS 6903-X GSE Packets |
|0x81 |AC-3 Audio | |0x81 |AC-3 Audio |
|0x82 |PID only used for PCR, no payloads | |0x82 |PID only used for PCR |
|0x83 |AC-3 True HD Audio | |0x83 |AC-3 True HD Audio |
|0x84 |AC-3+ Audio | |0x84 |AC-3+ Audio |
|0x85 |DTS Audio | |0x85 |ULE (RFC 4326) |
|0x86 |SCTE 35 Splice Info |
|0x87 |ATSC Enhanced-AC-3 Audio |
|0x88 |ULE (RFC 4326) |
|0x91 |A52b/AC-3 Audio |
## Descriptors: ## Descriptors:

View File

@ -17,21 +17,10 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Xml.Linq; using System.Xml.Linq;
using skyscraper5.Dvb.DataBroadcasting.IntModel;
using skyscraper5.Dvb.SystemSoftwareUpdate.Model;
using skyscraper5.Skyscraper.Equipment; using skyscraper5.Skyscraper.Equipment;
using skyscraper5.Skyscraper.IO.CrazycatStreamReader; using skyscraper5.Skyscraper.IO.CrazycatStreamReader;
using skyscraper8.GSE;
using skyscraper8.Skyscraper.Drawing; using skyscraper8.Skyscraper.Drawing;
using skyscraper8.Skyscraper.FrequencyListGenerator; using skyscraper8.Skyscraper.FrequencyListGenerator;
using skyscraper8.Skyscraper.Scraper;
using Platform = skyscraper5.Dvb.DataBroadcasting.IntModel.Platform;
using skyscraper8.GSE.GSE;
using skyscraper8.DvbNip.UiIntegration;
using skyscraper8.DvbNip;
using moe.yo3explorer.skyscraper8.DVBI.Model;
using skyscraper8.Ietf.FLUTE;
using skyscraper8.Ses;
namespace skyscraper5.UI.Overrides namespace skyscraper5.UI.Overrides
{ {
@ -138,7 +127,7 @@ namespace skyscraper5.UI.Overrides
throw new NotImplementedException(); throw new NotImplementedException();
} }
public void OnBlindscanBeforeSetChannel(BlindscanSearchResult blindscanResult, LnbEntity lnbType) public void OnBlindscanBeforeSetChannel(BlindscanSearchResult blindscanResult, LnbType lnbType)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
@ -218,43 +207,8 @@ namespace skyscraper5.UI.Overrides
throw new NotImplementedException(); throw new NotImplementedException();
} }
public void NotifyNit(NitNetwork nitNetwork)
{
throw new NotImplementedException();
}
public void EnableUiFeature(SkyscraperUiFeature bbframeAnalysis)
{
throw new NotImplementedException();
}
public void OnIpMacNotification(int sourcePid, Platform platform, Target target, Operational operational)
{
throw new NotImplementedException();
}
public void OnSsuNotification(UpdateNotificationGroup common, UpdateNotificationTarget target, ushort programNumber)
{
throw new NotImplementedException();
}
public void OnBbframe(BBHeader bbHeader, byte[] payload)
{
throw new NotImplementedException();
}
public void OnDetectionOfInnerTs(SkyscraperContext child, object identifier)
{
throw new NotImplementedException();
}
public TaskQueue Tasks { get; set; } public TaskQueue Tasks { get; set; }
public void NotifyMpeTraffic(IpTrafficInfo iti, byte[] ipv4PacketLength)
{
throw new NotImplementedException();
}
public void NotifyAit(AitApplication aitApplication) public void NotifyAit(AitApplication aitApplication)
{ {
SkyscraperUiNode applicationNode = form1.EnsureNodeExists("AIT", aitApplication.TryGetName()); SkyscraperUiNode applicationNode = form1.EnsureNodeExists("AIT", aitApplication.TryGetName());
@ -620,80 +574,5 @@ namespace skyscraper5.UI.Overrides
return String.Format("??? (Type 0x{0:X2})", (int)stream.StreamType); return String.Format("??? (Type 0x{0:X2})", (int)stream.StreamType);
} }
}
public void NotifyWss(ushort programNumber, WssDataBlock wssDataBlock, int pid)
{
throw new NotImplementedException();
}
public void NotifyGsePacket(ushort value, byte[] gseDataBytes, GseLabel label)
{
throw new NotImplementedException();
}
public void OnDvbNipFileArrival(FluteUiHandle fuh)
{
throw new NotImplementedException();
}
public void OnDvbNipMulticastGatewayConfiguration(NipActualCarrierInformation carrier, MulticastGatewayConfigurationType multicastGatewayConfiguration)
{
throw new NotImplementedException();
}
public void OnDvbNipCarrierDetected(NipActualCarrierInformation currentCarrierInformation)
{
throw new NotImplementedException();
}
public void OnDvbNipPrivateDataSignallingManifest(PrivateDataSignallingManifestType privateDataSignallingManifest)
{
throw new NotImplementedException();
}
public void OnDvbNipServiceListEntryPoints(NipActualCarrierInformation currentCarrierInformation, ServiceListEntryPoints serviceListEntryPoints, DateTime dvbNipTime)
{
throw new NotImplementedException();
}
public void OnDvbNipServiceList(NipActualCarrierInformation currentCarrierInformation, string serviceListId1, ServiceListType serviceListId2)
{
throw new NotImplementedException();
}
public void OnDvbNipTimeOffsetFile(NipActualCarrierInformation currentCarrierInformation, TimeOffsetFileType timeOffsetFile)
{
throw new NotImplementedException();
}
public void OnDvbNipNetworkInformationFile(NipActualCarrierInformation currentCarrierInformation, NetworkInformationFileType networkInformationFile)
{
throw new NotImplementedException();
}
public void DvbNipServiceInformation(NipActualCarrierInformation currentCarrierInformation, ServiceInformationFileType serviceInformationFile)
{
throw new NotImplementedException();
}
public void OnDvbNipFileAnnouncement(FDTInstanceType flute)
{
throw new NotImplementedException();
}
public void OnAstraSgtList(SgtList list)
{
throw new NotImplementedException();
}
public void OnAstraSgtService(SgtService child)
{
throw new NotImplementedException();
}
public void NotifyTransportStreamId(int tsid, int nid)
{
throw new NotImplementedException();
}
}
} }

View File

@ -1,6 +1,5 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging; using System.Drawing.Imaging;
using System.Linq; using System.Linq;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;

View File

@ -1,6 +1,5 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;

View File

@ -1,6 +1,5 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;

View File

@ -28,8 +28,4 @@
</EmbeddedResource> </EmbeddedResource>
</ItemGroup> </ItemGroup>
<ItemGroup>
<PackageReference Include="System.Drawing.Common" Version="10.0.0" />
</ItemGroup>
</Project> </Project>

View File

@ -21,9 +21,9 @@ namespace skyscraper8.UI.MonoGame
public DataStorage DataStorage { get; set; } public DataStorage DataStorage { get; set; }
public ObjectStorage ObjectStorage { get; set; } public ObjectStorage ObjectStorage { get; set; }
public IGpsReceiver Gps { get; set; } public IGpsReceiver Gps { get; set; }
public List<SatellitePositionEntity> SatellitePositions { get; set; } public List<SatellitePosition> SatellitePositions { get; set; }
public List<LnbEntity> LnbTypes { get; set; } public List<LnbType> LnbTypes { get; set; }
public List<DishEntity> DishTypes { get; set; } public List<DishType> DishTypes { get; set; }
public ReadOnlyCollection<KeyValuePair<TunerFactoryIdAttribute, ITunerFactory>> AllTunerFactories { get; set; } public ReadOnlyCollection<KeyValuePair<TunerFactoryIdAttribute, ITunerFactory>> AllTunerFactories { get; set; }
public IStreamReader StreamReader { get; set; } public IStreamReader StreamReader { get; set; }
public List<TunerMetadata> Tuners { get; set; } public List<TunerMetadata> Tuners { get; set; }

View File

@ -1,3 +0,0 @@
{
"help":"https://go.microsoft.com/fwlink/?linkid=866610"
}

View File

@ -14,14 +14,13 @@ namespace SDL2Demo.Forms
internal class ConfigureDishTypes : IRenderable internal class ConfigureDishTypes : IRenderable
{ {
private readonly DataStorage _scraperStroage; private readonly DataStorage _scraperStroage;
private List<DishEntity> dishTypes; private List<DishType> dishTypes;
private string tableUuid; private string tableUuid;
private string manufacturer;
private string name; private string name;
private int diameter; private int diameter;
private DishShape shape; private DishShape shape;
public ConfigureDishTypes(DataStorage scraperStroage, List<DishEntity> dishTypes) public ConfigureDishTypes(DataStorage scraperStroage, List<DishType> dishTypes)
{ {
_scraperStroage = scraperStroage; _scraperStroage = scraperStroage;
this.dishTypes = dishTypes; this.dishTypes = dishTypes;
@ -38,14 +37,12 @@ namespace SDL2Demo.Forms
if (justSaved) if (justSaved)
{ {
name = ""; name = "";
manufacturer = "";
diameter = 0; diameter = 0;
shape = DishShape.Offset; shape = DishShape.Offset;
justSaved = false; justSaved = false;
} }
if (ImGui.TreeNode("Add Dish Type")) if (ImGui.TreeNode("Add Dish Type"))
{ {
ImGui.InputText("Manufacturer", ref manufacturer, 255);
ImGui.InputText("Name", ref name, 255); ImGui.InputText("Name", ref name, 255);
ImGui.InputInt("Diameter", ref diameter, 5, 10); ImGui.InputInt("Diameter", ref diameter, 5, 10);
@ -66,7 +63,7 @@ namespace SDL2Demo.Forms
ImGui.BeginDisabled(!SaveButtonEnabled()); ImGui.BeginDisabled(!SaveButtonEnabled());
if (ImGui.Button("Add")) if (ImGui.Button("Add"))
{ {
DishEntity newDish = new DishEntity(manufacturer, name, diameter, shape); DishType newDish = new DishType(name, diameter, shape);
dishTypes.Add(newDish); dishTypes.Add(newDish);
_scraperStroage.UiDishTypesAdd(newDish); _scraperStroage.UiDishTypesAdd(newDish);
justSaved = true; justSaved = true;
@ -87,7 +84,7 @@ namespace SDL2Demo.Forms
ImGui.TableSetColumnIndex(2); ImGui.TableSetColumnIndex(2);
ImGui.Text("Type"); ImGui.Text("Type");
foreach (DishEntity dishType in dishTypes) foreach (DishType dishType in dishTypes)
{ {
ImGui.TableNextRow(); ImGui.TableNextRow();
ImGui.TableSetColumnIndex(0); ImGui.TableSetColumnIndex(0);
@ -123,7 +120,7 @@ namespace SDL2Demo.Forms
return false; return false;
} }
foreach (DishEntity dishType in dishTypes) foreach (DishType dishType in dishTypes)
{ {
if (dishType.Name.Equals(name)) if (dishType.Name.Equals(name))
return false; return false;

View File

@ -16,21 +16,19 @@ namespace SDL2Demo.Forms
internal class ConfigureLnbTypes : IRenderable internal class ConfigureLnbTypes : IRenderable
{ {
private readonly DataStorage _scraperStroage; private readonly DataStorage _scraperStroage;
private List<LnbEntity> lnbTypes; private List<LnbType> lnbTypes;
private string tableUuid; private string tableUuid;
private string lnbPopupUuid; private string lnbPopupUuid;
private string manufacturer;
private string name; private string name;
private int lof1, lof2, lofSw, minFreq, maxFreq; private int lof1, lof2, lofSw, minFreq, maxFreq;
public ConfigureLnbTypes(DataStorage scraperStroage, List<LnbEntity> lnbTypes) public ConfigureLnbTypes(DataStorage scraperStroage, List<LnbType> lnbTypes)
{ {
_scraperStroage = scraperStroage; _scraperStroage = scraperStroage;
this.lnbTypes = lnbTypes; this.lnbTypes = lnbTypes;
this.tableUuid = Guid.NewGuid().ToString(); this.tableUuid = Guid.NewGuid().ToString();
this.name = ""; this.name = "";
this.manufacturer = "";
this.lnbPopupUuid = Guid.NewGuid().ToString(); this.lnbPopupUuid = Guid.NewGuid().ToString();
} }
@ -41,8 +39,6 @@ namespace SDL2Demo.Forms
ImGui.Begin("Configure LNB Types", ref pOpen, windowFlags); ImGui.Begin("Configure LNB Types", ref pOpen, windowFlags);
if (ImGui.TreeNode("Add LNB Type")) if (ImGui.TreeNode("Add LNB Type"))
{ {
ImGui.InputText("Manufacturer", ref this.manufacturer, 64);
ImGui.SameLine();
ImGui.InputText("Name", ref name, 255); ImGui.InputText("Name", ref name, 255);
ImGui.InputInt("LOF1", ref lof1, 50, 100); ImGui.InputInt("LOF1", ref lof1, 50, 100);
@ -59,7 +55,7 @@ namespace SDL2Demo.Forms
ImGui.BeginDisabled(!SaveButtonEnabled()); ImGui.BeginDisabled(!SaveButtonEnabled());
if (ImGui.Button("Add")) if (ImGui.Button("Add"))
{ {
LnbEntity newLnb = new LnbEntity(manufacturer, name, lof1, lof2, lofSw, minFreq, maxFreq); LnbType newLnb = new LnbType(name, lof1, lof2, lofSw, minFreq, maxFreq);
lnbTypes.Add(newLnb); lnbTypes.Add(newLnb);
_scraperStroage.UiLnbTypesAdd(newLnb); _scraperStroage.UiLnbTypesAdd(newLnb);
} }
@ -102,7 +98,7 @@ namespace SDL2Demo.Forms
ImGui.TableSetColumnIndex(2); ImGui.TableSetColumnIndex(2);
ImGui.Text("Frequency Range"); ImGui.Text("Frequency Range");
foreach (LnbEntity lnbType in lnbTypes) foreach (LnbType lnbType in lnbTypes)
{ {
ImGui.TableNextRow(); ImGui.TableNextRow();
ImGui.TableSetColumnIndex(0); ImGui.TableSetColumnIndex(0);
@ -140,7 +136,7 @@ namespace SDL2Demo.Forms
if (lof1 == 0) if (lof1 == 0)
return false; return false;
foreach (LnbEntity lnbType in lnbTypes) foreach (LnbType lnbType in lnbTypes)
{ {
if (lnbType.MinimumFrequency == minFreq && if (lnbType.MinimumFrequency == minFreq &&
lnbType.MaximumFrequency == maxFreq && lnbType.MaximumFrequency == maxFreq &&

View File

@ -10,9 +10,9 @@ namespace SDL2Demo.Forms
internal class ConfigureTunersWindow : IRenderable internal class ConfigureTunersWindow : IRenderable
{ {
private readonly DataStorage _scraperStroage; private readonly DataStorage _scraperStroage;
private List<SatellitePositionEntity> satPositions; private List<SatellitePosition> satPositions;
private List<LnbEntity> lnbTypes; private List<LnbType> lnbTypes;
private List<DishEntity> dishTypes; private List<DishType> dishTypes;
public ConfigureTunersWindow(List<TunerMetadata> tuners, DataStorage scraperStroage) public ConfigureTunersWindow(List<TunerMetadata> tuners, DataStorage scraperStroage)
{ {

View File

@ -8,14 +8,11 @@ using System.Reflection.Metadata.Ecma335;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using ImGuiNET; using ImGuiNET;
using moe.yo3explorer.skyscraper8.DVBI.Model;
using SDL2Demo.Net; using SDL2Demo.Net;
using skyscraper5.Docsis; using skyscraper5.Docsis;
using skyscraper5.Dvb.DataBroadcasting.IntModel;
using skyscraper5.Dvb.DataBroadcasting.SkyscraperVfs; using skyscraper5.Dvb.DataBroadcasting.SkyscraperVfs;
using skyscraper5.Dvb.Descriptors; using skyscraper5.Dvb.Descriptors;
using skyscraper5.Dvb.Psi.Model; using skyscraper5.Dvb.Psi.Model;
using skyscraper5.Dvb.SystemSoftwareUpdate.Model;
using skyscraper5.Mhp; using skyscraper5.Mhp;
using skyscraper5.Mhp.Descriptors; using skyscraper5.Mhp.Descriptors;
using skyscraper5.Mhp.Si; using skyscraper5.Mhp.Si;
@ -28,23 +25,11 @@ using skyscraper5.Skyscraper.Equipment;
using skyscraper5.Skyscraper.IO.CrazycatStreamReader; using skyscraper5.Skyscraper.IO.CrazycatStreamReader;
using skyscraper5.Skyscraper.Net; using skyscraper5.Skyscraper.Net;
using skyscraper5.Skyscraper.Scraper; using skyscraper5.Skyscraper.Scraper;
using skyscraper5.src.InteractionChannel.Model;
using skyscraper5.src.Skyscraper.FrequencyListGenerator; using skyscraper5.src.Skyscraper.FrequencyListGenerator;
using skyscraper5.T2MI.Packets;
using skyscraper5.Teletext.Wss; using skyscraper5.Teletext.Wss;
using skyscraper8.DvbNip;
using skyscraper8.DvbNip.UiIntegration;
using skyscraper8.DvbSis;
using skyscraper8.GSE;
using skyscraper8.GSE.GSE;
using skyscraper8.Ietf.FLUTE;
using skyscraper8.Ses;
using skyscraper8.Skyscraper.Drawing; using skyscraper8.Skyscraper.Drawing;
using skyscraper8.Skyscraper.FrequencyListGenerator; using skyscraper8.Skyscraper.FrequencyListGenerator;
using skyscraper8.Skyscraper.Scraper;
using skyscraper8.T2MI.Packets;
using testdrid.SdlWrapper; using testdrid.SdlWrapper;
using Platform = skyscraper5.Dvb.DataBroadcasting.IntModel.Platform;
namespace SDL2Demo.Forms namespace SDL2Demo.Forms
{ {
@ -566,11 +551,6 @@ namespace SDL2Demo.Forms
patEntry.pmt = result; patEntry.pmt = result;
} }
public void NotifyMpeTraffic(IpTrafficInfo iti, byte[] ipv4PacketLength)
{
throw new NotImplementedException();
}
private string pmtTabBarUuid; private string pmtTabBarUuid;
public void RenderPmt() public void RenderPmt()
{ {
@ -1172,11 +1152,6 @@ namespace SDL2Demo.Forms
} }
} }
public void NotifyWss(ushort programNumber, WssDataBlock wssDataBlock, int pid)
{
throw new NotImplementedException();
}
private void RenderDataCarousels() private void RenderDataCarousels()
{ {
if (dsmCcDisplay == null) if (dsmCcDisplay == null)
@ -2127,7 +2102,7 @@ namespace SDL2Demo.Forms
throw new NotImplementedException(); throw new NotImplementedException();
} }
public void OnBlindscanBeforeSetChannel(BlindscanSearchResult blindscanResult,LnbEntity lnbType) public void OnBlindscanBeforeSetChannel(BlindscanSearchResult blindscanResult,LnbType lnbType)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
@ -2207,107 +2182,7 @@ namespace SDL2Demo.Forms
throw new NotImplementedException(); throw new NotImplementedException();
} }
public void NotifyNit(NitNetwork nitNetwork) public TaskQueue Tasks { get; set; }
{
throw new NotImplementedException();
}
public void EnableUiFeature(SkyscraperUiFeature bbframeAnalysis)
{
throw new NotImplementedException();
}
public void OnIpMacNotification(int sourcePid, Platform platform, Target target, Operational operational)
{
throw new NotImplementedException();
}
public void OnSsuNotification(UpdateNotificationGroup common, UpdateNotificationTarget target, ushort programNumber)
{
throw new NotImplementedException();
}
public void OnBbframe(BBHeader bbHeader, byte[] payload)
{
throw new NotImplementedException();
}
public void OnDetectionOfInnerTs(SkyscraperContext child, object identifier)
{
throw new NotImplementedException();
}
public void NotifyGsePacket(ushort value, byte[] gseDataBytes, GseLabel label)
{
throw new NotImplementedException();
}
public void OnDvbNipFileArrival(FluteUiHandle fuh)
{
throw new NotImplementedException();
}
public void OnDvbNipMulticastGatewayConfiguration(NipActualCarrierInformation carrier,
MulticastGatewayConfigurationType multicastGatewayConfiguration)
{
throw new NotImplementedException();
}
public void OnDvbNipCarrierDetected(NipActualCarrierInformation currentCarrierInformation)
{
throw new NotImplementedException();
}
public void OnDvbNipPrivateDataSignallingManifest(PrivateDataSignallingManifestType privateDataSignallingManifest)
{
throw new NotImplementedException();
}
public void OnDvbNipServiceListEntryPoints(NipActualCarrierInformation currentCarrierInformation,
ServiceListEntryPoints serviceListEntryPoints, DateTime dvbNipTime)
{
throw new NotImplementedException();
}
public void OnDvbNipServiceList(NipActualCarrierInformation currentCarrierInformation, string serviceListId1,
string serviceListId2)
{
throw new NotImplementedException();
}
public void OnDvbNipTimeOffsetFile(NipActualCarrierInformation currentCarrierInformation, TimeOffsetFileType timeOffsetFile)
{
throw new NotImplementedException();
}
public void OnDvbNipNetworkInformationFile(NipActualCarrierInformation currentCarrierInformation,
NetworkInformationFileType networkInformationFile)
{
throw new NotImplementedException();
}
public void DvbNipServiceInformation(NipActualCarrierInformation currentCarrierInformation,
ServiceInformationFileType serviceInformationFile)
{
throw new NotImplementedException();
}
public void OnDvbNipFileAnnouncement(FDTInstanceType flute)
{
throw new NotImplementedException();
}
public void OnAstraSgtList(SgtList list)
{
throw new NotImplementedException();
}
public void OnAstraSgtService(SgtService child)
{
throw new NotImplementedException();
}
public TaskQueue Tasks { get; set; }
private ushort? ResolveCaId(ProgramMapping patValuePmt, SdtCoordinate sdt) private ushort? ResolveCaId(ProgramMapping patValuePmt, SdtCoordinate sdt)
{ {
@ -2332,70 +2207,5 @@ namespace SDL2Demo.Forms
return null; return null;
} }
public void OnDvbNipServiceList(NipActualCarrierInformation currentCarrierInformation, string serviceListId1, ServiceListType serviceListId2) }
{
}
public void NotifyTransportStreamId(int tsid, int nid)
{
}
public void OnDvbSisCat(int sourcePid, SisCatContainer catContainer)
{
}
public void OnDvbSisEit(int sourcePid, SisEitContainer eitContainer)
{
}
public void OnDvbSisFti(int relatedPid, _0xF0_FramingTimingInformation fti)
{
}
public void OnDvbSisTimestamp(int pid, _0x20_DvbT2Timestamp t2Timestamp)
{
}
public void OnDvbSisPat(int sourcePid, SisPatContainer patContainer)
{
}
public void OnDvbSisSdt(int sourcePid, SisSdtContainer sdtContainer)
{
}
public void OnDvbSisDsaci(ushort currentDsaGroupId, int versionNumber, byte sectionNumber, byte lastSectionNumber,
Stream dsaci)
{
}
public void OnDvbSisPmt(int sourcePid, SisPmtContainer pmtContainer)
{
}
public void OnDvbSisNit(int sourcePid, SisNitContainer nitContainer)
{
}
public void OnDvbSisTdt(int sourcePid, DateTime? utcTime)
{
}
public void OnRcs2Rmt(Rmt rmt)
{
}
}
} }

View File

@ -24,7 +24,7 @@ namespace SDL2Demo.Forms
private string lnbPopupUuid; private string lnbPopupUuid;
private string memoryTableUuid; private string memoryTableUuid;
private List<SatellitePositionEntity> allPositions; private List<SatellitePosition> allPositions;
private readonly DataStorage _storage; private readonly DataStorage _storage;
@ -50,8 +50,8 @@ namespace SDL2Demo.Forms
if (allPositions.Count == 0) if (allPositions.Count == 0)
return true; return true;
int currentChecksum = SatellitePositionEntity.GetChecksum(degrees); int currentChecksum = SatellitePosition.GetChecksum(degrees, cardinalDirection);
foreach (SatellitePositionEntity satellitePosition in allPositions) foreach (SatellitePosition satellitePosition in allPositions)
{ {
if (currentChecksum == satellitePosition.Checksum) if (currentChecksum == satellitePosition.Checksum)
return false; return false;
@ -68,6 +68,9 @@ namespace SDL2Demo.Forms
{ {
ImGui.InputText("Name", ref name, 255); ImGui.InputText("Name", ref name, 255);
ImGui.InputFloat("Position", ref degrees, 0.1f); ImGui.InputFloat("Position", ref degrees, 0.1f);
ImGui.RadioButton("East", ref cardinalDirection, 0);
ImGui.SameLine();
ImGui.RadioButton("West", ref cardinalDirection, 1);
CheckBounds(); CheckBounds();
@ -75,7 +78,7 @@ namespace SDL2Demo.Forms
ImGui.BeginDisabled(!SaveButtonEnabled()); ImGui.BeginDisabled(!SaveButtonEnabled());
if (ImGui.Button("Add")) if (ImGui.Button("Add"))
{ {
SatellitePositionEntity newPosition = new SatellitePositionEntity(degrees, name); SatellitePosition newPosition = new SatellitePosition(degrees, cardinalDirection, name);
allPositions.Add(newPosition); allPositions.Add(newPosition);
_storage.UiSatellitesAdd(newPosition); _storage.UiSatellitesAdd(newPosition);
} }
@ -86,13 +89,13 @@ namespace SDL2Demo.Forms
ImGui.Separator(); ImGui.Separator();
ImGui.BeginTable(memoryTableUuid, 4); ImGui.BeginTable(memoryTableUuid, 4);
foreach (SatellitePositionEntity satellitePosition in allPositions) foreach (SatellitePosition satellitePosition in allPositions)
{ {
ImGui.TableNextRow(); ImGui.TableNextRow();
ImGui.TableSetColumnIndex(0); ImGui.TableSetColumnIndex(0);
ImGui.Text(satellitePosition.name); ImGui.Text(satellitePosition.name);
ImGui.TableSetColumnIndex(1); ImGui.TableSetColumnIndex(1);
ImGui.Text(String.Format("{0:0.0}° {1}", satellitePosition.angle, satellitePosition.GetCardinalDirectionAsChar())); ImGui.Text(String.Format("{0:0.0}° {1}", satellitePosition.angle, satellitePosition.cardinalDirection == 0 ? "E" : "W"));
ImGui.TableSetColumnIndex(2); ImGui.TableSetColumnIndex(2);
ImGui.Text(""); ImGui.Text("");

View File

@ -33,7 +33,7 @@ namespace SDL2Demo.Jobs
public class BlindscanTarget public class BlindscanTarget
{ {
public BlindscanTarget(string name, int tunerIndex, STD_TYPE tunerStandard, int diseqcType, public BlindscanTarget(string name, int tunerIndex, STD_TYPE tunerStandard, int diseqcType,
SatellitePositionEntity satPosition, int satIndex, LnbEntity lnbType, PhysicalAddress tunerMetadataMacAddress) SatellitePosition satPosition, int satIndex, LnbType lnbType, PhysicalAddress tunerMetadataMacAddress)
{ {
this.name = name; this.name = name;
this.tunerIndex = tunerIndex; this.tunerIndex = tunerIndex;
@ -50,10 +50,10 @@ namespace SDL2Demo.Jobs
public int tunerIndex; public int tunerIndex;
public STD_TYPE tunerStandard; public STD_TYPE tunerStandard;
public int diseqcType; public int diseqcType;
public SatellitePositionEntity satPosition; public SatellitePosition satPosition;
public int satIndex; public int satIndex;
public string buttonUuid; public string buttonUuid;
public LnbEntity lnbType; public LnbType lnbType;
public readonly PhysicalAddress macAddress; public readonly PhysicalAddress macAddress;
public bool IsTorC() public bool IsTorC()
@ -84,7 +84,7 @@ namespace SDL2Demo.Jobs
private DbBlindscanJob jobInDb; private DbBlindscanJob jobInDb;
private IDbBlindscanJobStorage jobStorage; private IDbBlindscanJobStorage jobStorage;
public Blindscan(List<TunerMetadata> tuners, List<SatellitePositionEntity> satellitePositions, List<LnbEntity> lnbTypes, DataStorage dataStorage) public Blindscan(List<TunerMetadata> tuners, List<SatellitePosition> satellitePositions, List<LnbType> lnbTypes, DataStorage dataStorage)
{ {
this.jobStorage = dataStorage; this.jobStorage = dataStorage;
continuationDataExists = jobStorage.TestForIncompleteJob(); continuationDataExists = jobStorage.TestForIncompleteJob();
@ -98,8 +98,8 @@ namespace SDL2Demo.Jobs
int numSatsFromDiseqcType = tunerMetadata.GetNumSatsFromDiseqcType(); int numSatsFromDiseqcType = tunerMetadata.GetNumSatsFromDiseqcType();
for (int i = 0; i < numSatsFromDiseqcType; i++) for (int i = 0; i < numSatsFromDiseqcType; i++)
{ {
SatellitePositionEntity satellitePosition = satellitePositions.Find(x => x.Checksum == tunerMetadata.Satellites[i]); SatellitePosition satellitePosition = satellitePositions.Find(x => x.Checksum == tunerMetadata.Satellites[i]);
LnbEntity lnbType = lnbTypes.Find(x => x.Id == tunerMetadata.Lnbs[i]); LnbType lnbType = lnbTypes.Find(x => x.Id == tunerMetadata.Lnbs[i]);
if (satellitePosition == null) if (satellitePosition == null)
continue; continue;
if (lnbType == null) if (lnbType == null)
@ -835,7 +835,7 @@ namespace SDL2Demo.Jobs
now.Year, now.Month, now.Day, now.Hour, now.Minute, blindscanResult.sr1.Freq / 1000, now.Year, now.Month, now.Day, now.Hour, now.Minute, blindscanResult.sr1.Freq / 1000,
blindscanResult.sr1.Pol == 0 ? "H" : "V", blindscanResult.sr1.SR / 1000, blindscanResult.sr1.Pol == 0 ? "H" : "V", blindscanResult.sr1.SR / 1000,
(int)(SelectedBlindscanTarget.satPosition.angle * 10), (int)(SelectedBlindscanTarget.satPosition.angle * 10),
SelectedBlindscanTarget.satPosition.GetCardinalDirectionAsChar()); SelectedBlindscanTarget.satPosition.cardinalDirection == 0 ? "E" : "W");
break; break;
case STD_TYPE.STD_DVBC: case STD_TYPE.STD_DVBC:
JobContext.Puppets[1].AutoMoveTo(blindscanResult.Position); JobContext.Puppets[1].AutoMoveTo(blindscanResult.Position);

View File

@ -31,10 +31,10 @@ namespace SDL2Demo.Jobs
private IDbBlindscanJobStorage jobStorage; private IDbBlindscanJobStorage jobStorage;
private List<TunerMetadata> tunerMetadataList; private List<TunerMetadata> tunerMetadataList;
private JobContext jobContext; private JobContext jobContext;
private List<SatellitePositionEntity> satellites; private List<SatellitePosition> satellites;
private List<LnbEntity> lnbs; private List<LnbType> lnbs;
public CoopBlindscan(List<TunerMetadata> tuners, List<SatellitePositionEntity> satellitePositions, List<LnbEntity> lnbTypes, IDbBlindscanJobStorage jobStorage) public CoopBlindscan(List<TunerMetadata> tuners, List<SatellitePosition> satellitePositions, List<LnbType> lnbTypes, IDbBlindscanJobStorage jobStorage)
{ {
this.jobStorage = jobStorage; this.jobStorage = jobStorage;
this.tunerMetadataList = tuners.Where(x => x.Type == STD_TYPE.STD_DVBS || x.Type == STD_TYPE.STD_DVBS2).ToList(); this.tunerMetadataList = tuners.Where(x => x.Type == STD_TYPE.STD_DVBS || x.Type == STD_TYPE.STD_DVBS2).ToList();
@ -166,8 +166,8 @@ namespace SDL2Demo.Jobs
{ {
settingsWindowOpen = false; settingsWindowOpen = false;
int lnbIndex = tunerMetadataList[settingsWindowTunerAselection].Lnbs[settingsWindowDiseqc - 1]; int lnbIndex = tunerMetadataList[settingsWindowTunerAselection].Lnbs[settingsWindowDiseqc - 1];
LnbEntity lnb = lnbs.Find(x => x.Id == lnbIndex); LnbType lnb = lnbs.Find(x => x.Id == lnbIndex);
Configuration = new CoopBlindscanConfiguration(tunerMetadataList[settingsWindowTunerAselection], tunerMetadataList[settingsWindowTunerBselection], settingsWindowScanHorizontalLow, settingsWindowScanHorizontalHigh, settingsWindowScanVerticalLow, settingsWindowScanVerticalHigh, settingsWindowDiseqc, settingsWindowSatellite, SatellitePositionEntity.FromChecksum(satellites[settingsWindowSatellite].Checksum), lnb, settingsWindowCaptureFile); Configuration = new CoopBlindscanConfiguration(tunerMetadataList[settingsWindowTunerAselection], tunerMetadataList[settingsWindowTunerBselection], settingsWindowScanHorizontalLow, settingsWindowScanHorizontalHigh, settingsWindowScanVerticalLow, settingsWindowScanVerticalHigh, settingsWindowDiseqc, settingsWindowSatellite, SatellitePosition.FromChecksum(satellites[settingsWindowSatellite].Checksum), lnb, settingsWindowCaptureFile);
} }
ImGui.SameLine(); ImGui.SameLine();
@ -185,7 +185,7 @@ namespace SDL2Demo.Jobs
public class CoopBlindscanConfiguration public class CoopBlindscanConfiguration
{ {
public CoopBlindscanConfiguration(TunerMetadata tunerA, TunerMetadata tunerB, bool doHorizontalLow, bool doHorizontalHigh, bool doVerticalLow, bool doVerticalHigh, int diseqc, int satelliteId, SatellitePositionEntity direction, LnbEntity lnbType, bool recordingEnabled) public CoopBlindscanConfiguration(TunerMetadata tunerA, TunerMetadata tunerB, bool doHorizontalLow, bool doHorizontalHigh, bool doVerticalLow, bool doVerticalHigh, int diseqc, int satelliteId, SatellitePosition direction, LnbType lnbType, bool recordingEnabled)
{ {
TunerA = tunerA; TunerA = tunerA;
TunerB = tunerB; TunerB = tunerB;
@ -208,8 +208,8 @@ namespace SDL2Demo.Jobs
public bool DoVerticalHigh { get; } public bool DoVerticalHigh { get; }
public int Diseqc { get; } public int Diseqc { get; }
public int SatelliteId { get; } public int SatelliteId { get; }
public SatellitePositionEntity Direction { get; } public SatellitePosition Direction { get; }
public LnbEntity LnbType { get; } public LnbType LnbType { get; }
public bool RecordingEnabled { get; } public bool RecordingEnabled { get; }
} }
#endregion #endregion
@ -689,7 +689,7 @@ namespace SDL2Demo.Jobs
now.Year, now.Month, now.Day, now.Hour, now.Minute, blindscanResult.sr1.Freq / 1000, now.Year, now.Month, now.Day, now.Hour, now.Minute, blindscanResult.sr1.Freq / 1000,
blindscanResult.sr1.Pol == 0 ? "H" : "V", blindscanResult.sr1.SR / 1000, blindscanResult.sr1.Pol == 0 ? "H" : "V", blindscanResult.sr1.SR / 1000,
(int)(Configuration.Direction.angle * 10), (int)(Configuration.Direction.angle * 10),
Configuration.Direction.GetCardinalDirectionAsChar()); Configuration.Direction.cardinalDirection == 0 ? "E" : "W");
RunSkyscraper(blindscanResult); RunSkyscraper(blindscanResult);

View File

@ -13,9 +13,9 @@ namespace SDL2Demo.Jobs
{ {
private bool windowOpen; private bool windowOpen;
private List<TunerMetadata> tuners; private List<TunerMetadata> tuners;
private List<SatellitePositionEntity> satellites; private List<SatellitePosition> satellites;
private List<LnbEntity> lnbs; private List<LnbType> lnbs;
private List<DishEntity> dishes; private List<DishType> dishes;
private readonly TaskQueue _taskQueue; private readonly TaskQueue _taskQueue;
public int settingsWindowBLScanTunerSelection; public int settingsWindowBLScanTunerSelection;
@ -52,7 +52,7 @@ namespace SDL2Demo.Jobs
settingsWindowScanVerticalLow, settingsWindowScanVerticalHigh); settingsWindowScanVerticalLow, settingsWindowScanVerticalHigh);
} }
public InheritedBlindscanConfigWindow(List<TunerMetadata> tunerMetadatas, public InheritedBlindscanConfigWindow(List<TunerMetadata> tunerMetadatas,
List<SatellitePositionEntity> satellitePositions, List<LnbEntity> lnbTypes, List<DishEntity> dishTypes, List<SatellitePosition> satellitePositions, List<LnbType> lnbTypes, List<DishType> dishTypes,
DataStorage dataStorage, ObjectStorage objectStorage, IGpsReceiver gps, Ini ini, IStreamReader streamReader, DataStorage dataStorage, ObjectStorage objectStorage, IGpsReceiver gps, Ini ini, IStreamReader streamReader,
TaskQueue taskQueue) TaskQueue taskQueue)
{ {
@ -131,7 +131,7 @@ namespace SDL2Demo.Jobs
bjc.TunerMetadata = tuners[settingsWindowBLScanTunerSelection]; bjc.TunerMetadata = tuners[settingsWindowBLScanTunerSelection];
bjc.Ui = new InheritedBlindscanUiJunction(); bjc.Ui = new InheritedBlindscanUiJunction();
//bjc.Ui.Tasks = _taskQueue; bjc.Ui.Tasks = _taskQueue;
return bjc; return bjc;
} }

View File

@ -33,23 +33,8 @@ using System.Numerics;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Xml.Serialization; using System.Xml.Serialization;
using moe.yo3explorer.skyscraper8.DVBI.Model;
using skyscraper5.Dvb.DataBroadcasting.IntModel;
using skyscraper5.Dvb.SystemSoftwareUpdate.Model;
using skyscraper5.src.InteractionChannel.Model;
using skyscraper5.T2MI.Packets;
using skyscraper8.DvbNip;
using skyscraper8.DvbNip.UiIntegration;
using skyscraper8.DvbSis;
using skyscraper8.GSE;
using skyscraper8.GSE.GSE;
using skyscraper8.Ietf.FLUTE;
using skyscraper8.Ses;
using skyscraper8.Skyscraper.Scraper;
using skyscraper8.T2MI.Packets;
using testdrid.SdlWrapper; using testdrid.SdlWrapper;
using static SDL2Demo.Jobs.Blindscan; using static SDL2Demo.Jobs.Blindscan;
using Platform = skyscraper5.Dvb.DataBroadcasting.IntModel.Platform;
namespace SDL2Demo.Jobs namespace SDL2Demo.Jobs
{ {
@ -467,11 +452,6 @@ namespace SDL2Demo.Jobs
patEntry.pmt = result; patEntry.pmt = result;
} }
public void NotifyMpeTraffic(IpTrafficInfo iti, byte[] ipv4PacketLength)
{
throw new NotImplementedException();
}
private string pmtTabBarUuid; private string pmtTabBarUuid;
public void RenderPmt() public void RenderPmt()
@ -1016,11 +996,6 @@ namespace SDL2Demo.Jobs
} }
} }
public void NotifyWss(ushort programNumber, WssDataBlock wssDataBlock, int pid)
{
throw new NotImplementedException();
}
private void RenderDataCarousels() private void RenderDataCarousels()
{ {
@ -1682,7 +1657,7 @@ namespace SDL2Demo.Jobs
return position; return position;
} }
public void OnBlindscanBeforeSetChannel(BlindscanSearchResult blindscanResult, LnbEntity lnb) public void OnBlindscanBeforeSetChannel(BlindscanSearchResult blindscanResult, LnbType lnb)
{ {
Point point = GetFrequencyPosition(blindscanResult.SearchResult, lnb.MinimumFrequency, lnb.MaximumFrequency); Point point = GetFrequencyPosition(blindscanResult.SearchResult, lnb.MinimumFrequency, lnb.MaximumFrequency);
jobContext.Puppets[2 + blindscanResult.SearchResult.Pol].AutoMoveTo(point); jobContext.Puppets[2 + blindscanResult.SearchResult.Pol].AutoMoveTo(point);
@ -1825,173 +1800,7 @@ namespace SDL2Demo.Jobs
return !foundFrequenciesWindow.doNotAutoZap; return !foundFrequenciesWindow.doNotAutoZap;
} }
public void NotifyNit(NitNetwork nitNetwork) public TaskQueue Tasks { get; set; }
{
}
public void EnableUiFeature(SkyscraperUiFeature bbframeAnalysis)
{
}
public void OnIpMacNotification(int sourcePid, Platform platform, Target target, Operational operational)
{
}
public void OnSsuNotification(UpdateNotificationGroup common, UpdateNotificationTarget target, ushort programNumber)
{
}
public void OnBbframe(BBHeader bbHeader, byte[] payload)
{
}
public void OnDetectionOfInnerTs(SkyscraperContext child, object identifier)
{
}
public void NotifyGsePacket(ushort value, byte[] gseDataBytes, GseLabel label)
{
}
public void OnDvbNipFileArrival(FluteUiHandle fuh)
{
}
public void OnDvbNipMulticastGatewayConfiguration(NipActualCarrierInformation carrier,
MulticastGatewayConfigurationType multicastGatewayConfiguration)
{
}
public void OnDvbNipCarrierDetected(NipActualCarrierInformation currentCarrierInformation)
{
}
public void OnDvbNipPrivateDataSignallingManifest(PrivateDataSignallingManifestType privateDataSignallingManifest)
{
}
public void OnDvbNipServiceListEntryPoints(NipActualCarrierInformation currentCarrierInformation,
ServiceListEntryPoints serviceListEntryPoints, DateTime dvbNipTime)
{
}
public void OnDvbNipServiceList(NipActualCarrierInformation currentCarrierInformation, string serviceListId1,
string serviceListId2)
{
}
public void OnDvbNipTimeOffsetFile(NipActualCarrierInformation currentCarrierInformation, TimeOffsetFileType timeOffsetFile)
{
}
public void OnDvbNipNetworkInformationFile(NipActualCarrierInformation currentCarrierInformation,
NetworkInformationFileType networkInformationFile)
{
}
public void DvbNipServiceInformation(NipActualCarrierInformation currentCarrierInformation,
ServiceInformationFileType serviceInformationFile)
{
}
public void OnDvbNipFileAnnouncement(FDTInstanceType flute)
{
}
public void OnAstraSgtList(SgtList list)
{
}
public void OnAstraSgtService(SgtService child)
{
}
public void OnDvbNipServiceList(NipActualCarrierInformation currentCarrierInformation, string serviceListId1, ServiceListType serviceListId2)
{
}
public void NotifyTransportStreamId(int tsid, int nid)
{
}
public void OnDvbSisCat(int sourcePid, SisCatContainer catContainer)
{
}
public void OnDvbSisEit(int sourcePid, SisEitContainer eitContainer)
{
}
public void OnDvbSisFti(int relatedPid, _0xF0_FramingTimingInformation fti)
{
}
public void OnDvbSisTimestamp(int pid, _0x20_DvbT2Timestamp t2Timestamp)
{
}
public void OnDvbSisPat(int sourcePid, SisPatContainer patContainer)
{
}
public void OnDvbSisSdt(int sourcePid, SisSdtContainer sdtContainer)
{
}
public void OnDvbSisDsaci(ushort currentDsaGroupId, int versionNumber, byte sectionNumber, byte lastSectionNumber,
Stream dsaci)
{
}
public void OnDvbSisPmt(int sourcePid, SisPmtContainer pmtContainer)
{
}
public void OnDvbSisNit(int sourcePid, SisNitContainer nitContainer)
{
}
public void OnDvbSisTdt(int sourcePid, DateTime? utcTime)
{
}
public void OnRcs2Rmt(Rmt rmt)
{
}
public TaskQueue Tasks { get; set; }
internal JobContext jobContext; internal JobContext jobContext;
#endregion #endregion

View File

@ -211,9 +211,9 @@ namespace SkyscraperUI
private ConfigureDataStorageWindow configureDataStorageWindow; private ConfigureDataStorageWindow configureDataStorageWindow;
private ConfigureObjectStorageWindow configureObjectStorageWindow; private ConfigureObjectStorageWindow configureObjectStorageWindow;
private SatellitesConfigurationWindow satellitesConfigurationWindow; private SatellitesConfigurationWindow satellitesConfigurationWindow;
private List<SatellitePositionEntity> satellitePositions; private List<SatellitePosition> satellitePositions;
private List<LnbEntity> lnbTypes; private List<LnbType> lnbTypes;
private List<DishEntity> dishTypes; private List<DishType> dishTypes;
//private LogWindow logWindow; //private LogWindow logWindow;
private ScrapeFromTcp scrapeFromTcpWindow; private ScrapeFromTcp scrapeFromTcpWindow;
private JobContext jobContext; private JobContext jobContext;

View File

@ -1,7 +0,0 @@
{
"profiles": {
"skyscraper8.UI.SDL2": {
"commandName": "Project"
}
}
}

View File

@ -8,7 +8,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="SharpKml.Core" Version="6.1.0" /> <PackageReference Include="SharpKml.Core" Version="6.1.0" />
</ItemGroup> </ItemGroup>

View File

@ -588,9 +588,11 @@ namespace skyscraper5.Skyscraper.IO.CrazycatStreamReader
{ {
this.wrapped = client; this.wrapped = client;
this.bufferedStream = new BufferedStream(wrapped.GetStream(), 96256); this.bufferedStream = new BufferedStream(wrapped.GetStream(), 96256);
this.packetsRemainBeforeStart = 512;
} }
internal TcpClient wrapped; internal TcpClient wrapped;
internal BufferedStream bufferedStream; internal BufferedStream bufferedStream;
private int packetsRemainBeforeStart;
public void Dispose() public void Dispose()
{ {
@ -613,6 +615,15 @@ namespace skyscraper5.Skyscraper.IO.CrazycatStreamReader
internal void DropPacket(byte[] buffer, int offset, int length) internal void DropPacket(byte[] buffer, int offset, int length)
{ {
if (packetsRemainBeforeStart > 0)
{
if (packetsRemainBeforeStart == 512 || packetsRemainBeforeStart == 256 || packetsRemainBeforeStart == 128 || packetsRemainBeforeStart == 64 || packetsRemainBeforeStart == 32 || packetsRemainBeforeStart == 16 || packetsRemainBeforeStart == 8 || packetsRemainBeforeStart == 4 || packetsRemainBeforeStart == 2 || packetsRemainBeforeStart == 1)
{
Console.WriteLine("Waiting {0} packets before starting to send to client {1}...", packetsRemainBeforeStart, wrapped.Client.RemoteEndPoint);
}
packetsRemainBeforeStart--;
return;
}
bufferedStream?.Write(buffer, offset, length); bufferedStream?.Write(buffer, offset, length);
} }
} }

View File

@ -80,15 +80,7 @@ namespace skyscraper5.IO.StreamReader
public bool SetChannel(int freq, int symbrate, int pol, VITERBIRATE_TYPE fec, int lof1, int lof2, int lofsw) public bool SetChannel(int freq, int symbrate, int pol, VITERBIRATE_TYPE fec, int lof1, int lof2, int lofsw)
{ {
try return UnsafeStreamReaderMethods.SetChannel(freq, symbrate, pol, fec, lof1, lof2, lofsw);
{
return UnsafeStreamReaderMethods.SetChannel(freq, symbrate, pol, fec, lof1, lof2, lofsw);
}
catch (DivideByZeroException dvze)
{
Console.WriteLine("Mitigated Division-by-Zero bug in StreamReader.dll.");
return false;
}
} }
public bool SetChannelEx(int freq, int symbrate, int pol, VITERBIRATE_TYPE fec, int lof1, int lof2, int lofsw, MOD_TYPE mod) public bool SetChannelEx(int freq, int symbrate, int pol, VITERBIRATE_TYPE fec, int lof1, int lof2, int lofsw, MOD_TYPE mod)

View File

@ -8,7 +8,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Npgsql" Version="10.0.2" /> <PackageReference Include="Npgsql" Version="9.0.3" />
<PackageReference Include="SharpGIS.NmeaParser" Version="3.0.0" /> <PackageReference Include="SharpGIS.NmeaParser" Version="3.0.0" />
</ItemGroup> </ItemGroup>

View File

@ -1,5 +0,0 @@
{
"allure": {
"directory": "allure-results"
}
}

View File

@ -0,0 +1 @@
[assembly: CollectionBehavior(DisableTestParallelization = true)]

View File

@ -0,0 +1,100 @@
using skyscraper5.Mpeg2;
using skyscraper5.Skyscraper.IO;
using skyscraper5.Skyscraper.Scraper.StreamAutodetection.Contestants;
using skyscraper8.Ses;
using skyscraper8.Tests.ClassDependencies.AsraBarkerTransponderTests;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace skyscraper8.Tests
{
public class AstraBarkerTransponderTests
{
private const string BARKER_TRANSPONDER_FILE_PATH = "C:\\Temp\\Astra1_12604_v_SGT-000000.ts";
private Stream GetBarkerTransponder()
{
FileInfo fi = new FileInfo(BARKER_TRANSPONDER_FILE_PATH);
if (!fi.Exists)
{
Debug.WriteLine(String.Format("Could not find file: {0}", BARKER_TRANSPONDER_FILE_PATH));
return null;
}
return fi.OpenRead();
}
[Fact]
public void TestAstraSdt()
{
Stream stream = GetBarkerTransponder();
Skip.If(stream == null, "Barker Transponder stream not available.");
SdtContestant contestant = new SdtContestant(0x002d);
TsDescriptorUnpacker descriptorUnpacker = TsDescriptorUnpacker.GetInstance();
for (byte i = 0x80; i < 0xfe; i++)
{
descriptorUnpacker.SetUserDefined(i, true);
}
descriptorUnpacker.SetUserDefined(0xfe, true);
TsContext tsContext = new TsContext();
tsContext.FilterChain = new List<skyscraper5.src.Mpeg2.PacketFilter.IPacketFilter>();
tsContext.FilterChain.Add(new DummyFilter());
tsContext.RegisterPacketProcessor(0x002d, contestant.PacketProcessor);
byte[] buffer = new byte[188];
while (stream.GetAvailableBytes() >= 188)
{
stream.Read(buffer, 0, 188);
tsContext.PushPacket(buffer);
if (contestant.Score >= 10)
break;
}
stream.Close();
}
[Fact]
public void TestAstraLcn()
{
Stream stream = GetBarkerTransponder();
Skip.If(stream == null, "Barker Transponder stream not available.");
SgtCandidate contestant = new SgtCandidate(0x0777);
SgtCandidate contestant2 = new SgtCandidate(0x0776);
TsDescriptorUnpacker descriptorUnpacker = TsDescriptorUnpacker.GetInstance();
for (byte i = 0x80; i < 0xfe; i++)
{
descriptorUnpacker.SetUserDefined(i, true);
}
descriptorUnpacker.SetUserDefined(0xfe, true);
TsContext tsContext = new TsContext();
tsContext.FilterChain = new List<skyscraper5.src.Mpeg2.PacketFilter.IPacketFilter>();
tsContext.FilterChain.Add(new DummyFilter());
tsContext.RegisterPacketProcessor(0x0777, contestant.PacketProcessor);
tsContext.RegisterPacketProcessor(0x0776, contestant2.PacketProcessor);
byte[] buffer = new byte[188];
while (stream.GetAvailableBytes() >= 188)
{
stream.Read(buffer, 0, 188);
tsContext.PushPacket(buffer);
bool winnerA = contestant.Score >= 10;
bool winnerB = contestant2.Score >= 10;
if (winnerA)
{
if (winnerB)
{
return;
}
}
}
stream.Close();
}
}
}

View File

@ -1,125 +0,0 @@
using System.IO;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using skyscraper5.Mpeg2;
using skyscraper5.Skyscraper.Scraper;
using skyscraper5.Skyscraper.Scraper.Storage.InMemory;
using skyscraper8.Skyscraper.Scraper.Storage;
namespace skyscraper8.Tests;
[TestClass]
public class CapturedTests : Feyllure
{
[TestMethod]
public void RussianT2Mi()
{
FileStream streamSample = GetStreamSample("express_3928L_t2mi.ts");
ProcessSample(streamSample);
streamSample.Close();
//42931 uncovered
}
[TestMethod]
public void Simmin()
{
FileStream streamSample = GetStreamSample("thor_11049v_simmin-radiomidun.ts");
ProcessSample(streamSample);
streamSample.Close();
//36611 uncovered
}
[TestMethod]
public void GseDab()
{
FileStream streamSample = GetStreamSample("thor_10717v_gse-dab.ts");
ProcessSample(streamSample);
streamSample.Close();
//36446 uncovered
}
[TestMethod]
public void SouthAmericanNip()
{
FileStream streamSample = GetStreamSample("argentinian-dvb-nip-000000.ts");
ProcessSample(streamSample);
streamSample.Close();
//35222
}
[TestMethod]
public void GseNip()
{
FileStream streamSample = GetStreamSample("astra1_12441v_gse-nip.ts");
ProcessSample(streamSample);
streamSample.Close();
//34545
}
[TestMethod]
public void GseNip2()
{
FileStream streamSample = GetStreamSample("astra1_11141h_gse_nip.ts");
ProcessSample(streamSample);
streamSample.Close();
//34462
}
[TestMethod]
public void TsNipIncludingLegacyChannel()
{
FileStream streamSample = GetStreamSample("hotbird_12380v_nip.ts");
ProcessSample(streamSample);
streamSample.Close();
//33518
}
[TestMethod]
public void TsNip()
{
FileStream streamSample = GetStreamSample("hotbird_12226v_nip.ts");
ProcessSample(streamSample);
streamSample.Close();
//33518
}
[TestMethod]
public void GseRcs2()
{
FileStream streamSample = GetStreamSample("telstar12v-bfbs-000000.ts");
ProcessSample(streamSample);
streamSample.Close();
//32559
}
[TestMethod]
public void BadrDvbSis()
{
FileStream streamSample = GetStreamSample("badr_12563v_dvb-sis.ts");
ProcessSample(streamSample);
streamSample.Close();
}
[TestMethod]
public void Eutelsat5DvbSis()
{
FileStream streamSample = GetStreamSample("eutelsat5_12522v_dvb-sis.ts");
ProcessSample(streamSample);
streamSample.Close();
}
private void ProcessSample(Stream sample)
{
TsContext ts = new TsContext();
InMemoryScraperStorageFactory inMemoryStorageFactory = new InMemoryScraperStorageFactory();
DataStorage dataStorage = inMemoryStorageFactory.CreateDataStorage();
NullObjectStorage nullObjectStorage = new NullObjectStorage();
SkyscraperContext context = new SkyscraperContext(ts, dataStorage, nullObjectStorage);
context.InitalizeFilterChain();
context.IngestFromStream(sample);
}
}

View File

@ -0,0 +1,18 @@
using skyscraper5.Mpeg2;
using skyscraper5.src.Mpeg2.PacketFilter;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace skyscraper8.Tests.ClassDependencies.AsraBarkerTransponderTests
{
internal class DummyFilter : IPacketFilter
{
public bool PassPacket(TsPacket packet)
{
return true;
}
}
}

View File

@ -0,0 +1,40 @@
using skyscraper5.Docsis;
using skyscraper5.Docsis.MacManagement;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.NetworkInformation;
using System.Text;
using System.Threading.Tasks;
namespace skyscraper8.Tests.ClassDependencies.DocsisTests
{
internal class DocsisEventHandlerImpl : IDocsisEventHandler
{
public void OnCmtsTimestamp(PhysicalAddress source, uint timing)
{
throw new NotImplementedException();
}
public void OnDownstreamChannel(PhysicalAddress physicalAddress, MacDomainDescriptor.DownstreamActiveChannel downstreamActiveChannel)
{
throw new NotImplementedException();
}
public void OnLearnedIpFromMac(PhysicalAddress arpHeaderSenderHardwareAddress, IPAddress arpHeaderSenderProtocolAddress)
{
throw new NotImplementedException();
}
public void OnParticipantDetected(PhysicalAddress pa)
{
throw new NotImplementedException();
}
public void OnUpstreamChannel(UpstreamChannelDescriptor mmm)
{
throw new NotImplementedException();
}
}
}

View File

@ -1,24 +1,38 @@
using System; using skyscraper5;
using skyscraper5.Docsis; using skyscraper5.Docsis;
using skyscraper5.Docsis.AnnexC; using skyscraper5.Docsis.AnnexC;
using skyscraper5.Docsis.MacManagement; using skyscraper5.Docsis.MacManagement;
using skyscraper5.Mpeg2;
using skyscraper5.Skyscraper.Plugins;
using skyscraper5.Skyscraper.Scraper;
using skyscraper5.Skyscraper.Scraper.Storage;
using skyscraper5.Skyscraper.Scraper.Storage.Filesystem;
using skyscraper5.Skyscraper.Scraper.Storage.InMemory;
using skyscraper8.Skyscraper.IO;
using skyscraper8.Tests.ClassDependencies.DocsisTests;
using skyscraper8.Tests.Properties;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Net.NetworkInformation; using System.Net.NetworkInformation;
using Microsoft.VisualStudio.TestTools.UnitTesting; using System.Text;
using System.Threading.Tasks;
using Xunit.Sdk;
namespace skyscraper8.Tests.ResourceTests namespace skyscraper8.Tests
{ {
[TestClass] public class DocsisTests
public class DocsisTests : Feyllure
{ {
[TestMethod] [Fact]
public void ModemCapabilitiesEncoding() public void ModemCapabilitiesEncoding()
{ {
byte[] buffer = Resources1.ModemCapabilitiesEncodingTest; byte[] buffer = Resources.ModemCapabilitiesEncodingTest;
ModemCapabilitiesEncoding modemCapabilitiesEncoding = new ModemCapabilitiesEncoding(buffer); ModemCapabilitiesEncoding modemCapabilitiesEncoding = new ModemCapabilitiesEncoding(buffer);
Assert.IsTrue(modemCapabilitiesEncoding.Valid); Assert.True(modemCapabilitiesEncoding.Valid);
} }
[TestMethod] [Fact]
public void MultipartRegistrationResponse() public void MultipartRegistrationResponse()
{ {
Random rng = new Random(); Random rng = new Random();
@ -31,18 +45,18 @@ namespace skyscraper8.Tests.ResourceTests
rng.NextBytes(targetBuffer); rng.NextBytes(targetBuffer);
PhysicalAddress target = new PhysicalAddress(targetBuffer); PhysicalAddress target = new PhysicalAddress(targetBuffer);
byte[] buffer = Resources1.MultipartRegistrationResponseTest; byte[] buffer = Properties.Resources.MultipartRegistrationResponseTest;
T45_V4_MultipartRegistrationResponse test = new T45_V4_MultipartRegistrationResponse(source, target, buffer); T45_V4_MultipartRegistrationResponse test = new T45_V4_MultipartRegistrationResponse(source, target, buffer);
Assert.IsTrue(test.Valid); Assert.True(test.Valid);
} }
[TestMethod] [Fact]
public void MacManagement_4_45() public void MacManagement_4_45()
{ {
NullDocsisEventHandler docsisEventHandler = new NullDocsisEventHandler(); DocsisEventHandlerImpl docsisEventHandler = new DocsisEventHandlerImpl();
DocsisEnvironment environment = new DocsisEnvironment(docsisEventHandler); DocsisEnvironment environment = new DocsisEnvironment(docsisEventHandler);
byte[] testPayload = Resources1.PushMacManagementMessage_Version4_Type45; byte[] testPayload = Resources.PushMacManagementMessage_Version4_Type45;
Random rng = new Random(); Random rng = new Random();
byte[] sourceBuffer = new byte[6]; byte[] sourceBuffer = new byte[6];
@ -56,10 +70,10 @@ namespace skyscraper8.Tests.ResourceTests
environment.PushMacManagementMessage(testPayload, 4, 45, source, target, testPayload); environment.PushMacManagementMessage(testPayload, 4, 45, source, target, testPayload);
} }
[TestMethod] [Fact]
public void InvalidUpstreamChannelDescriptorTest() public void InvalidUpstreamChannelDescriptorTest()
{ {
byte[] testPayload = Resources1.UpstreamChannelDescriptorTest; byte[] testPayload = Resources.UpstreamChannelDescriptorTest;
Random rng = new Random(); Random rng = new Random();
byte[] sourceBuffer = new byte[6]; byte[] sourceBuffer = new byte[6];
@ -71,19 +85,19 @@ namespace skyscraper8.Tests.ResourceTests
PhysicalAddress target = new PhysicalAddress(targetBuffer); PhysicalAddress target = new PhysicalAddress(targetBuffer);
UpstreamChannelDescriptor ucd = new UpstreamChannelDescriptor(source, target, testPayload); UpstreamChannelDescriptor ucd = new UpstreamChannelDescriptor(source, target, testPayload);
Assert.IsFalse(ucd.Valid); Assert.False(ucd.Valid);
} }
[TestMethod] [Fact]
public void TransmitChannelConfigurationObjectTest() public void TransmitChannelConfigurationObjectTest()
{ {
byte[] testPayload = Resources1.TransmitChannelConfigurationObject; byte[] testPayload = Resources.TransmitChannelConfigurationObject;
CommonTlvEncodingObject.TransmitChannelConfigurationObject child = new CommonTlvEncodingObject.TransmitChannelConfigurationObject(testPayload); CommonTlvEncodingObject.TransmitChannelConfigurationObject child = new CommonTlvEncodingObject.TransmitChannelConfigurationObject(testPayload);
Assert.IsTrue(child.Valid); Assert.True(child.Valid);
} }
[TestMethod] [Fact]
public void MultipartRegistrationResponse2() public void MultipartRegistrationResponse2()
{ {
Random rng = new Random(); Random rng = new Random();
@ -96,27 +110,9 @@ namespace skyscraper8.Tests.ResourceTests
rng.NextBytes(targetBuffer); rng.NextBytes(targetBuffer);
PhysicalAddress target = new PhysicalAddress(targetBuffer); PhysicalAddress target = new PhysicalAddress(targetBuffer);
byte[] buffer = Resources1.MultipartRegistrationResponseTest2; byte[] buffer = Properties.Resources.MultipartRegistrationResponseTest2;
T45_V4_MultipartRegistrationResponse test = new T45_V4_MultipartRegistrationResponse(source, target, buffer); T45_V4_MultipartRegistrationResponse test = new T45_V4_MultipartRegistrationResponse(source, target, buffer);
Assert.IsTrue(test.Valid); Assert.True(test.Valid);
}
[TestMethod]
public void OffsetBreakerTest()
{
byte[] blob = Resources1.ranging_response_test;
Random rng = new Random();
byte[] sourceMacBuffer = new byte[6];
rng.NextBytes(sourceMacBuffer);
PhysicalAddress sourceAddress = new PhysicalAddress(sourceMacBuffer);
byte[] targetMacBuffer = new byte[6];
rng.NextBytes(targetMacBuffer);
PhysicalAddress targetAddress = new PhysicalAddress(targetMacBuffer);
RangingResponse rangingResponse = new RangingResponse(sourceAddress, targetAddress, blob);
Assert.IsTrue(rangingResponse.Valid);
} }
} }
} }

View File

@ -0,0 +1,69 @@
using skyscraper5.Mpeg2;
using skyscraper5.Skyscraper.Scraper.Storage.Filesystem;
using skyscraper5.Skyscraper.Scraper.Storage.InMemory;
using skyscraper5.Skyscraper.Scraper.Storage;
using skyscraper5.Skyscraper.Scraper;
using skyscraper5;
using skyscraper8.Skyscraper.IO;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using skyscraper8.Skyscraper.Scraper.Storage;
namespace skyscraper8.Tests
{
public class DocsisTestsLong
{
[Fact]
public void TestLongBoiSingleStreams()
{
DirectoryInfo di = new DirectoryInfo("D:\\DocsisDemo");
if (!di.Exists)
{
Debug.WriteLine("Files not available!");
return;
}
FilesystemScraperStorageFactory storageFactory = new FilesystemScraperStorageFactory();
storageFactory.Directory = "docsis_longboi";
Passing passing = new Passing();
passing.DataStorage = storageFactory.CreateDataStorage();
passing.MassImportDirectory(di);
}
[Fact]
public void TestM3u8Stream()
{
FileInfo docsisM3u8 = new FileInfo("D:\\DocsisDemo\\docsis.m3u8");
if (!docsisM3u8.Exists)
{
Debug.WriteLine("File not available!");
return;
}
FileInfo alreadyTested = new FileInfo("docsis_m3u8_test.complete");
if (alreadyTested.Exists)
{
Debug.WriteLine("Hello!");
return;
}
M3U8Stream m3u8 = new M3U8Stream(docsisM3u8.FullName);
TsContext tsContext = new TsContext();
InMemoryScraperStorageFactory storageFactory = new InMemoryScraperStorageFactory();
DataStorage scraperStorage = storageFactory.CreateDataStorage();
SkyscraperContext skyscraperContext = new SkyscraperContext(tsContext, scraperStorage, null);
skyscraperContext.InitalizeFilterChain();
skyscraperContext.IngestFromStream(m3u8);
File.WriteAllText("docsis_m3u8_test.complete", "1");
}
}
}

View File

@ -1,193 +0,0 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Runtime.InteropServices;
using Allure.Net.Commons;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using TestResult = Allure.Net.Commons.TestResult;
namespace skyscraper8.Tests;
[TestClass]
public class Feyllure
{
public TestContext TestContext { get; set; }
protected static readonly AllureLifecycle Allure = AllureLifecycle.Instance;
private bool assemblyWasInited;
private void AssemblyInit(TestContext context)
{
// Ensure allure-results exists
var resultsDir = Allure.ResultsDirectory;
Directory.CreateDirectory(resultsDir);
var envFile = Path.Combine(resultsDir, "environment.properties");
using (var writer = new StreamWriter(envFile))
{
writer.WriteLine($"SkyscraperRelease={VersionInfo.GetPublicReleaseNumber()}");
writer.WriteLine($"SkyscraperCodeVersion={VersionInfo.GetCurrentAssemblyDisplayVersion()}");
writer.WriteLine($"OS={RuntimeInformation.OSDescription}");
writer.WriteLine($".NET={Environment.Version}");
writer.WriteLine($"Machine={Environment.MachineName}");
writer.WriteLine($"User={Environment.UserName}");
writer.WriteLine($"Framework={System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription}");
writer.WriteLine($"BuildDate={DateTime.UtcNow:yyyy-MM-dd HH:mm:ss}");
}
var executorFile = Path.Combine(resultsDir, "executor.json");
var executorInfo = new
{
name = Environment.MachineName,
buildName = "My build name",
buildUrl = "http://127.0.0.2",
};
var executorJson = Newtonsoft.Json.JsonConvert.SerializeObject(executorInfo);
File.WriteAllText(executorFile, executorJson);
}
[TestInitialize]
public void Setup()
{
if (!assemblyWasInited){
AssemblyInit(TestContext);
assemblyWasInited = true;
}
var testName = TestContext.TestName;
var fqClass = TestContext.FullyQualifiedTestClassName;
// Extract namespace and class name
var lastDot = fqClass.LastIndexOf('.');
var ns = lastDot > 0 ? fqClass.Substring(0, lastDot) : "";
var cls = lastDot > 0 ? fqClass.Substring(lastDot + 1) : fqClass;
TestResult testResult = new TestResult();
testResult.uuid = Guid.NewGuid().ToString();
testResult.name = testName;
testResult.fullName = String.Format("{0}.{1}", TestContext.FullyQualifiedTestClassName, testName);
testResult.labels = new List<Label>()
{
//Packages Tab
new Label { name = "package", value = ns},
new Label { name = "testClass", value = cls},
new Label { name = "testMethod", value = testName},
//Suites tab
new Label { name = "parentSuite", value = ns},
new Label { name = "suite", value = cls},
};
Allure.StartTestCase(testResult);
descriptionWriter = null;
}
[TestCleanup]
public void TearDown()
{
switch (TestContext.CurrentTestOutcome)
{
case UnitTestOutcome.Passed:
Allure.UpdateTestCase(tc => tc.status = Status.passed);
break;
case UnitTestOutcome.Failed:
Allure.UpdateTestCase(tc => tc.status = Status.failed);
break;
case UnitTestOutcome.Inconclusive:
Allure.UpdateTestCase(tc => tc.status = Status.skipped);
Print("\n\n" + TestContext.TestException.ToString());
break;
default:
StepResult stepResult = new StepResult();
stepResult.name = String.Format("Current Test Outcome: {0}", TestContext.CurrentTestOutcome);;
Allure.UpdateTestCase(tc =>
{
tc.status = Status.skipped;
tc.steps.Add(stepResult);
});
break;
}
if (descriptionWriter != null)
{
Allure.UpdateTestCase(tc => { tc.description = descriptionWriter.ToString(); });
}
Allure.StopTestCase();
Allure.WriteTestCase();
}
private StringWriter descriptionWriter;
public void Print(string message, params object[] args)
{
if (descriptionWriter == null)
descriptionWriter = new StringWriter();
string formattedMessage = String.Format(message, args);
Console.WriteLine(formattedMessage);
descriptionWriter.WriteLine(formattedMessage);
}
private DirectoryInfo testsuitePath;
protected DirectoryInfo GetTestsuitePath()
{
Print("Checking whether skyscraper-testsuite exists...");
if (Directory.Exists("skyscraper-testsuite"))
{
testsuitePath = new DirectoryInfo("skyscraper8-testsuite");
return testsuitePath;
}
Print("Checking TESTSUITE_PATH...");
string directory = Environment.GetEnvironmentVariable("TESTSUITE_PATH");
if (!string.IsNullOrEmpty(directory))
{
testsuitePath = new DirectoryInfo(directory);
return testsuitePath;
}
FileInfo pointerFile = new FileInfo("skyscraper8-testsuite-path.txt");
Print("Checking {0}...",pointerFile.FullName);
if (File.Exists(pointerFile.FullName))
{
string readAllText = File.ReadAllText(pointerFile.FullName);
readAllText = readAllText.Trim();
testsuitePath = new DirectoryInfo(readAllText);
return testsuitePath;
}
Assert.Inconclusive("Could not find the test suite path.");
return null;
}
protected FileStream GetStreamSample(string streamName)
{
DirectoryInfo testsuitePath = GetTestsuitePath();
string combine = Path.Combine(testsuitePath.FullName, streamName);
FileInfo result = new FileInfo(combine);
if (!result.Exists)
{
Assert.Inconclusive(String.Format("Could not find {0}",result.FullName));
return null;
}
return result.OpenRead();
}
protected void AssertTargetInvocation<T>(Action action)
where T: Exception
{
Assert.Throws<T>(() =>
{
try
{
action();
}
catch (TargetInvocationException tie)
{
throw tie.InnerException;
}
});
}
}

View File

@ -0,0 +1,31 @@
using System.Reflection;
using skyscraper5.Mpeg2;
using skyscraper8.Tests.Properties;
namespace skyscraper8.Tests;
public class GsType1SanityTest
{
[Fact]
public void CheckBfbsCrc()
{
byte[] blob = Resources.Frame00001343_TSGS1_MIS000_SYNC001;
MemoryStream ms = new MemoryStream(blob, false);
bool result = DvbCrc32.ValidateCrc(ms, 0, (int)ms.Length);
Assert.True(result);
blob = Resources.Frame00000008_TSGS1_MIS000_SYNC001;
ms = new MemoryStream(blob, false);
result = DvbCrc32.ValidateCrc(ms, 0, (int)ms.Length);
Assert.True(result);
}
[Fact]
public void CheckBfbsCrcSpan()
{
byte[] blob = Resources.Frame00000012_TSGS1_MIS000_SYNC001;
ReadOnlySpan<byte> span = new ReadOnlySpan<byte>(blob);
bool result = DvbCrc32.ValidateCrc(span);
Assert.True(result);
}
}

View File

@ -1,35 +0,0 @@
using System;
using System.IO;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using skyscraper5.Skyscraper;
using skyscraper8.Skyscraper.Scraper.Storage.Tar;
namespace skyscraper8.Tests;
[TestClass]
public class IntegrationTests
{
[TestMethod]
public void CreateTarArchive()
{
string filename = String.Format("{0}.tar", DateTime.Now.ToUnixTime());
FileInfo fi = new FileInfo(filename);
FileStream fileStream = fi.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read);
fi.Refresh();
Assert.IsTrue(fi.Exists);
Random rng = new Random();
TarArchive tar = new TarArchive(fileStream);
for (int i = 0; i < 42; i++)
{
filename = String.Format("{0}.bin", i);
int randomSize = rng.Next(4096);
byte[] buffer = new byte[randomSize];
rng.NextBytes(buffer);
tar.WriteEntry(filename, buffer);
}
}
}

View File

@ -1,10 +1,9 @@
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// Dieser Code wurde von einem Tool generiert. // This code was generated by a tool.
// Laufzeitversion:4.0.30319.42000
// //
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn // Changes to this file may cause incorrect behavior and will be lost if
// der Code erneut generiert wird. // the code is regenerated.
// </auto-generated> // </auto-generated>
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
@ -12,46 +11,32 @@ namespace skyscraper8.Tests.Properties {
using System; using System;
/// <summary> [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
/// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. [System.Diagnostics.DebuggerNonUserCodeAttribute()]
/// </summary> [System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
// Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
// -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
// Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
// mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources { internal class Resources {
private static global::System.Resources.ResourceManager resourceMan; private static System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture; private static System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() { internal Resources() {
} }
/// <summary> [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
/// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. internal static System.Resources.ResourceManager ResourceManager {
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get { get {
if (object.ReferenceEquals(resourceMan, null)) { if (object.Equals(null, resourceMan)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("skyscraper8.Tests.Properties.Resources", typeof(Resources).Assembly); System.Resources.ResourceManager temp = new System.Resources.ResourceManager("skyscraper8.Tests.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp; resourceMan = temp;
} }
return resourceMan; return resourceMan;
} }
} }
/// <summary> [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
/// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle internal static System.Globalization.CultureInfo Culture {
/// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get { get {
return resourceCulture; return resourceCulture;
} }
@ -59,5 +44,96 @@ namespace skyscraper8.Tests.Properties {
resourceCulture = value; resourceCulture = value;
} }
} }
internal static byte[] ModemCapabilitiesEncodingTest {
get {
object obj = ResourceManager.GetObject("ModemCapabilitiesEncodingTest", resourceCulture);
return ((byte[])(obj));
}
}
internal static byte[] MultipartRegistrationResponseTest {
get {
object obj = ResourceManager.GetObject("MultipartRegistrationResponseTest", resourceCulture);
return ((byte[])(obj));
}
}
internal static byte[] PushMacManagementMessage_Version4_Type45 {
get {
object obj = ResourceManager.GetObject("PushMacManagementMessage_Version4_Type45", resourceCulture);
return ((byte[])(obj));
}
}
internal static byte[] ranging_response_test {
get {
object obj = ResourceManager.GetObject("ranging_response_test", resourceCulture);
return ((byte[])(obj));
}
}
internal static byte[] MultipartRegistrationResponseTest2 {
get {
object obj = ResourceManager.GetObject("MultipartRegistrationResponseTest2", resourceCulture);
return ((byte[])(obj));
}
}
internal static byte[] test_1packet_01 {
get {
object obj = ResourceManager.GetObject("test-1packet-01", resourceCulture);
return ((byte[])(obj));
}
}
internal static byte[] test_2packets_02_03 {
get {
object obj = ResourceManager.GetObject("test-2packets-02-03", resourceCulture);
return ((byte[])(obj));
}
}
internal static byte[] test_3packets_04_05_06 {
get {
object obj = ResourceManager.GetObject("test-3packets-04-05-06", resourceCulture);
return ((byte[])(obj));
}
}
internal static byte[] TransmitChannelConfigurationObject {
get {
object obj = ResourceManager.GetObject("TransmitChannelConfigurationObject", resourceCulture);
return ((byte[])(obj));
}
}
internal static byte[] UpstreamChannelDescriptorTest {
get {
object obj = ResourceManager.GetObject("UpstreamChannelDescriptorTest", resourceCulture);
return ((byte[])(obj));
}
}
internal static byte[] Frame00001343_TSGS1_MIS000_SYNC001 {
get {
object obj = ResourceManager.GetObject("Frame00001343_TSGS1_MIS000_SYNC001", resourceCulture);
return ((byte[])(obj));
}
}
internal static byte[] Frame00000008_TSGS1_MIS000_SYNC001 {
get {
object obj = ResourceManager.GetObject("Frame00000008_TSGS1_MIS000_SYNC001", resourceCulture);
return ((byte[])(obj));
}
}
internal static byte[] Frame00000012_TSGS1_MIS000_SYNC001 {
get {
object obj = ResourceManager.GetObject("Frame00000012_TSGS1_MIS000_SYNC001", resourceCulture);
return ((byte[])(obj));
}
}
} }
} }

View File

@ -1,101 +1,160 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<root> <root>
<!-- <!--
Microsoft ResX Schema Microsoft ResX Schema
Version 1.3 Version 2.0
The primary goals of this format is to allow a simple XML format The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes various data types are done through the TypeConverter classes
associated with the data types. associated with the data types.
Example: Example:
... ado.net/XML headers & schema ... ... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader> <resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">1.3</resheader> <resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1">this is my long string</data> <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
[base64 mime encoded serialized .NET Framework object] <value>[base64 mime encoded serialized .NET Framework object]</value>
</data> </data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
[base64 mime encoded string representing a byte array form of the .NET Framework object] <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
</data> <comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple There are any number of "resheader" rows that contain simple
name/value pairs. name/value pairs.
Each data row contains a name, and value. The row also contains a Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture. text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the Classes that don't support this are serialized and stored with the
mimetype set. mimetype set.
The mimetype is used for serialized objects, and tells the The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly: extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below. read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64 mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64 mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64 mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter : using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
--> -->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true"> <xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType> <xsd:complexType>
<xsd:choice maxOccurs="unbounded"> <xsd:choice maxOccurs="unbounded">
<xsd:element name="data"> <xsd:element name="metadata">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> <xsd:element name="value" type="xsd:string" minOccurs="0" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> </xsd:sequence>
</xsd:sequence> <xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> <xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> <xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="resheader"> <xsd:element name="assembly">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:attribute name="alias" type="xsd:string" />
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> <xsd:attribute name="name" type="xsd:string" />
</xsd:sequence> </xsd:complexType>
<xsd:attribute name="name" type="xsd:string" use="required" /> </xsd:element>
</xsd:complexType> <xsd:element name="data">
</xsd:element> <xsd:complexType>
</xsd:choice> <xsd:sequence>
</xsd:complexType> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:element> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:schema> </xsd:sequence>
<resheader name="resmimetype"> <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<value>text/microsoft-resx</value> <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
</resheader> <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<resheader name="version"> <xsd:attribute ref="xml:space" />
<value>1.3</value> </xsd:complexType>
</resheader> </xsd:element>
<resheader name="reader"> <xsd:element name="resheader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <xsd:complexType>
</resheader> <xsd:sequence>
<resheader name="writer"> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </xsd:sequence>
</resheader> <xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="ModemCapabilitiesEncodingTest" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ModemCapabilitiesEncodingTest.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="MultipartRegistrationResponseTest" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\T45_V4_MultipartRegistrationResponseTest.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="PushMacManagementMessage_Version4_Type45" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\PushMacManagementMessage_Version4_Type45.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="ranging_response_test" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ranging_response_test.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="MultipartRegistrationResponseTest2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\T45_V4_MultipartRegistrationResponseTest2.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="test-1packet-01" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\test-1packet-01.ts;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="test-2packets-02-03" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\test-2packets-02-03.ts;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="test-3packets-04-05-06" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\test-3packets-04-05-06.ts;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="TransmitChannelConfigurationObject" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\TransmitChannelConfigurationObject.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="UpstreamChannelDescriptorTest" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\UpstreamChannelDescriptorTest.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="Frame00001343_TSGS1_MIS000_SYNC001" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Frame00001343_TSGS1_MIS000_SYNC001.bbf;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="Frame00000008_TSGS1_MIS000_SYNC001" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Frame00000008_TSGS1_MIS000_SYNC001.bbf;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="Frame00000012_TSGS1_MIS000_SYNC001" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Frame00000012_TSGS1_MIS000_SYNC001.bbf;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root> </root>

View File

@ -0,0 +1,28 @@
using skyscraper5.Docsis.MacManagement;
using System.Net.NetworkInformation;
using skyscraper8.Tests.Properties;
namespace skyscraper8.Tests
{
public class RangingResponseTest
{
[Fact]
public void OffsetBreakerTest()
{
byte[] blob = Resources.ranging_response_test;
Random rng = new Random();
byte[] sourceMacBuffer = new byte[6];
rng.NextBytes(sourceMacBuffer);
PhysicalAddress sourceAddress = new PhysicalAddress(sourceMacBuffer);
byte[] targetMacBuffer = new byte[6];
rng.NextBytes(targetMacBuffer);
PhysicalAddress targetAddress = new PhysicalAddress(targetMacBuffer);
RangingResponse rangingResponse = new RangingResponse(sourceAddress, targetAddress, blob);
Assert.True(rangingResponse.Valid);
}
}
}

View File

@ -1,33 +0,0 @@
using System;
using System.IO;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using skyscraper5.Mpeg2;
namespace skyscraper8.Tests.ResourceTests;
[TestClass]
public class GsType1SanityTest : Feyllure
{
[TestMethod]
public void CheckBfbsCrc()
{
byte[] blob = Resources1.Frame00001343_TSGS1_MIS000_SYNC001;
MemoryStream ms = new MemoryStream(blob, false);
bool result = DvbCrc32.ValidateCrc(ms, 0, (int)ms.Length);
Assert.IsTrue(result);
blob = Resources1.Frame00000008_TSGS1_MIS000_SYNC001;
ms = new MemoryStream(blob, false);
result = DvbCrc32.ValidateCrc(ms, 0, (int)ms.Length);
Assert.IsTrue(result);
}
[TestMethod]
public void CheckBfbsCrcSpan()
{
byte[] blob = Resources1.Frame00000012_TSGS1_MIS000_SYNC001;
ReadOnlySpan<byte> span = new ReadOnlySpan<byte>(blob);
bool result = DvbCrc32.ValidateCrc(span);
Assert.IsTrue(result);
}
}

View File

@ -1,36 +0,0 @@
using System.IO;
using System.Net.NetworkInformation;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using skyscraper5.Skyscraper.IO;
namespace skyscraper8.Tests.ResourceTests;
[TestClass]
public class NtbuDoability
{
[TestMethod]
public void DecodeUnifiInform()
{
byte[] bytes = Resources1.ubnt;
MemoryStream stream = new MemoryStream(bytes,false);
if (stream.ReadUInt32BE() != 1414414933u)
Assert.Fail();
if (stream.ReadUInt32BE() != 0)
Assert.Fail();
PhysicalAddress apMac = new PhysicalAddress(stream.ReadBytes(6));
ushort flags = stream.ReadUInt16BE();
bool encrypted = (flags & 0x0001) != 0;
bool zlib = (flags & 0x0002) != 0;
bool snappy = (flags & 0x0004) != 0;
bool aesGcm = (flags & 0x0008) != 0;
byte[] iv = stream.ReadBytes(16);
uint dataVersion = stream.ReadUInt32BE();
uint payloadLength = stream.ReadUInt32BE();
byte[] payload = stream.ReadBytes(payloadLength);
}
}

View File

@ -1,25 +0,0 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using skyscraper8.Ietf.Rfc4566_SDP;
namespace skyscraper8.Tests.ResourceTests
{
[TestClass]
public class SdpTest : Feyllure
{
[TestMethod]
public void TestSdpParser()
{
MemoryStream ms = new MemoryStream(Resources1.sdpTest, false);
Assert.IsTrue(SDP.IsSDP(ms));
SDP loaded = SDP.Load(ms);
Assert.IsNotNull(loaded);
}
}
}

View File

@ -1,19 +0,0 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using skyscraper8.GS;
using skyscraper8.GS.GSE_RollingSyncByte;
using skyscraper8.GSE;
namespace skyscraper8.Tests.ResourceTests;
[TestClass]
public class Ses12GseTest
{
[TestMethod]
public void TestShortPdu()
{
byte[] datasource = Resources1.Frame00000357_TSGS1_MIS000_SYNC184;
GsContextDto dto = new GsContextDto();
GseWithRollingSyncByteReader reader = new GseWithRollingSyncByteReader(dto);
reader.PushFrame(new BBHeader(new byte[10], 0), datasource);
}
}

View File

@ -1,10 +0,0 @@
v=0
o=enensys Announcement-BM-SC 3962468565 IN IP4 10.10.10.20
s=Announcement delivery session
t=0 0
a=mbms-mode:broadcast-mbsfn 61712
a=source-filter: incl IN IP4 * 10.10.10.20
a=flute-tsi:9
m=application 50001 FLUTE/UDP 0
c=IN IP4 224.0.2.20/10
b=AS:200

View File

@ -1,160 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace skyscraper8.Tests {
using System;
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources1 {
private static System.Resources.ResourceManager resourceMan;
private static System.Globalization.CultureInfo resourceCulture;
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources1() {
}
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
internal static System.Resources.ResourceManager ResourceManager {
get {
if (object.Equals(null, resourceMan)) {
System.Resources.ResourceManager temp = new System.Resources.ResourceManager("skyscraper8.Tests.Resources1", typeof(Resources1).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
internal static System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
internal static byte[] ModemCapabilitiesEncodingTest {
get {
object obj = ResourceManager.GetObject("ModemCapabilitiesEncodingTest", resourceCulture);
return ((byte[])(obj));
}
}
internal static byte[] MultipartRegistrationResponseTest {
get {
object obj = ResourceManager.GetObject("MultipartRegistrationResponseTest", resourceCulture);
return ((byte[])(obj));
}
}
internal static byte[] PushMacManagementMessage_Version4_Type45 {
get {
object obj = ResourceManager.GetObject("PushMacManagementMessage_Version4_Type45", resourceCulture);
return ((byte[])(obj));
}
}
internal static byte[] ranging_response_test {
get {
object obj = ResourceManager.GetObject("ranging_response_test", resourceCulture);
return ((byte[])(obj));
}
}
internal static byte[] MultipartRegistrationResponseTest2 {
get {
object obj = ResourceManager.GetObject("MultipartRegistrationResponseTest2", resourceCulture);
return ((byte[])(obj));
}
}
internal static byte[] test_1packet_01 {
get {
object obj = ResourceManager.GetObject("test-1packet-01", resourceCulture);
return ((byte[])(obj));
}
}
internal static byte[] test_2packets_02_03 {
get {
object obj = ResourceManager.GetObject("test-2packets-02-03", resourceCulture);
return ((byte[])(obj));
}
}
internal static byte[] test_3packets_04_05_06 {
get {
object obj = ResourceManager.GetObject("test-3packets-04-05-06", resourceCulture);
return ((byte[])(obj));
}
}
internal static byte[] TransmitChannelConfigurationObject {
get {
object obj = ResourceManager.GetObject("TransmitChannelConfigurationObject", resourceCulture);
return ((byte[])(obj));
}
}
internal static byte[] UpstreamChannelDescriptorTest {
get {
object obj = ResourceManager.GetObject("UpstreamChannelDescriptorTest", resourceCulture);
return ((byte[])(obj));
}
}
internal static byte[] Frame00001343_TSGS1_MIS000_SYNC001 {
get {
object obj = ResourceManager.GetObject("Frame00001343_TSGS1_MIS000_SYNC001", resourceCulture);
return ((byte[])(obj));
}
}
internal static byte[] Frame00000008_TSGS1_MIS000_SYNC001 {
get {
object obj = ResourceManager.GetObject("Frame00000008_TSGS1_MIS000_SYNC001", resourceCulture);
return ((byte[])(obj));
}
}
internal static byte[] Frame00000012_TSGS1_MIS000_SYNC001 {
get {
object obj = ResourceManager.GetObject("Frame00000012_TSGS1_MIS000_SYNC001", resourceCulture);
return ((byte[])(obj));
}
}
internal static byte[] sdpTest {
get {
object obj = ResourceManager.GetObject("sdpTest", resourceCulture);
return ((byte[])(obj));
}
}
internal static byte[] Frame00000357_TSGS1_MIS000_SYNC184 {
get {
object obj = ResourceManager.GetObject("Frame00000357_TSGS1_MIS000_SYNC184", resourceCulture);
return ((byte[])(obj));
}
}
internal static byte[] ubnt {
get {
object obj = ResourceManager.GetObject("ubnt", resourceCulture);
return ((byte[])(obj));
}
}
}
}

View File

@ -1,169 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="ModemCapabilitiesEncodingTest" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\ModemCapabilitiesEncodingTest.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="MultipartRegistrationResponseTest" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\T45_V4_MultipartRegistrationResponseTest.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="PushMacManagementMessage_Version4_Type45" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\PushMacManagementMessage_Version4_Type45.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="ranging_response_test" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\ranging_response_test.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="MultipartRegistrationResponseTest2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\T45_V4_MultipartRegistrationResponseTest2.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="test-1packet-01" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\test-1packet-01.ts;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="test-2packets-02-03" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\test-2packets-02-03.ts;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="test-3packets-04-05-06" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\test-3packets-04-05-06.ts;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="TransmitChannelConfigurationObject" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\TransmitChannelConfigurationObject.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="UpstreamChannelDescriptorTest" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\UpstreamChannelDescriptorTest.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="Frame00001343_TSGS1_MIS000_SYNC001" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\Frame00001343_TSGS1_MIS000_SYNC001.bbf;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="Frame00000008_TSGS1_MIS000_SYNC001" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\Frame00000008_TSGS1_MIS000_SYNC001.bbf;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="Frame00000012_TSGS1_MIS000_SYNC001" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\Frame00000012_TSGS1_MIS000_SYNC001.bbf;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="sdpTest" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\sdpTest.sdp;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="Frame00000357_TSGS1_MIS000_SYNC184" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\Frame00000357_TSGS1_MIS000_SYNC184.bbframe;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="ubnt" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\ubnt.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>

File diff suppressed because it is too large Load Diff

View File

@ -1,16 +0,0 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using skyscraper5.Mpeg2;
namespace skyscraper8.Tests.RootTests;
[TestClass]
public class Mpeg2Tests : Feyllure
{
[TestMethod]
public void PsiSectionTest()
{
PsiSection section = new PsiSection();
section.Append(new byte[] { 3 });
}
}

View File

@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using skyscraper5.Skyscraper.IO;
namespace skyscraper8.Tests
{
public class SanityTests
{
[Fact]
public void Test15bits()
{
byte[] bcd = new byte[] { 0xa9, 0x23 };
MemoryStream ms = new MemoryStream(bcd);
byte readUInt8 = ms.ReadUInt8();
bool msbSet = (readUInt8 & 0x80) != 0;
Assert.True(msbSet);
readUInt8 &= 0b01111111;
int result = ms.ReadUInt8();
result <<= 8;
result += readUInt8;
Assert.Equal(9001, result);
}
}
}

View File

@ -1,24 +1,22 @@
using System.IO; using skyscraper5.Mpeg2;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using skyscraper5.Mpeg2;
using skyscraper5.Skyscraper.Scraper; using skyscraper5.Skyscraper.Scraper;
using skyscraper5.Skyscraper.Scraper.Storage.InMemory; using skyscraper5.Skyscraper.Scraper.Storage.InMemory;
using skyscraper8.Tests.Properties;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using skyscraper8.Skyscraper.Scraper.Storage; using skyscraper8.Skyscraper.Scraper.Storage;
namespace skyscraper8.Tests.ResourceTests namespace skyscraper8.Tests
{ {
[TestClass] public class TsDuckTestPatterns
public class SkyscraperTests : Feyllure
{ {
[TestMethod] [Fact]
public void RunTestPatterns() public void RunTestPatterns()
{ {
byte[][] buffers = new byte[][] byte[][] buffers = new byte[][] { Resources.test_1packet_01, Resources.test_2packets_02_03, Resources.test_3packets_04_05_06 };
{
Resources1.test_1packet_01,
Resources1.test_2packets_02_03,
Resources1.test_3packets_04_05_06
};
InMemoryScraperStorageFactory imssf = new InMemoryScraperStorageFactory(); InMemoryScraperStorageFactory imssf = new InMemoryScraperStorageFactory();

View File

@ -0,0 +1,13 @@
using skyscraper5.Mpeg2;
namespace skyscraper8.Tests;
public class UselessCodeCoverageTests
{
[Fact]
void PsiSectionTest()
{
PsiSection section = new PsiSection();
section.Append(new byte[] { 3 });
}
}

View File

@ -1,36 +1,42 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<!-- Target .NET 8 -->
<TargetFramework>net8.0</TargetFramework> <TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<!-- Mark this as a test project --> <IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject> <IsTestProject>true</IsTestProject>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<!-- MSTest framework --> <PackageReference Include="coverlet.collector" Version="6.0.4">
<PackageReference Include="Allure.Net.Commons" Version="2.14.1" /> <PrivateAssets>all</PrivateAssets>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.1" /> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PackageReference Include="MSTest.TestAdapter" Version="4.0.2" /> </PackageReference>
<PackageReference Include="MSTest.TestFramework" Version="4.0.2" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
<PackageReference Include="xunit" Version="2.9.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Xunit.SkippableFact" Version="1.5.23" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\skyscraper8\skyscraper8.csproj" /> <ProjectReference Include="..\skyscraper8\skyscraper8.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Using Include="Xunit" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Update="Properties\Resources.Designer.cs"> <Compile Update="Properties\Resources.Designer.cs">
<DesignTime>True</DesignTime> <DesignTime>True</DesignTime>
<AutoGen>True</AutoGen> <AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon> <DependentUpon>Resources.resx</DependentUpon>
</Compile> </Compile>
<Compile Update="Resources1.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Resources1.resx</DependentUpon>
</Compile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@ -38,10 +44,6 @@
<Generator>ResXFileCodeGenerator</Generator> <Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput> <LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Update="Resources1.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources1.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -51,6 +51,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "skyscraper5.DNS", "MpePlugi
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "skyscraper5.Gimmicks.IptvCollector", "Gimmicks\skyscraper5.Gimmicks.IptvCollector\skyscraper5.Gimmicks.IptvCollector.csproj", "{8F17668C-623C-F9B3-EAD4-2922E5414B75}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "skyscraper5.Gimmicks.IptvCollector", "Gimmicks\skyscraper5.Gimmicks.IptvCollector\skyscraper5.Gimmicks.IptvCollector.csproj", "{8F17668C-623C-F9B3-EAD4-2922E5414B75}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "skyscraper8.Tests", "skyscraper8.Tests\skyscraper8.Tests.csproj", "{84EE9FCD-2C7F-DF84-C1BA-99D018CE9412}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UIs", "UIs", "{E23457C5-3A34-48EE-8107-C91E2C174B2D}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UIs", "UIs", "{E23457C5-3A34-48EE-8107-C91E2C174B2D}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "skyscraper5.UI.WindowsForms", "GUIs\skyscraper5.UI\skyscraper5.UI.WindowsForms.csproj", "{46CACA1C-F9B2-2FE0-2068-716F381325E9}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "skyscraper5.UI.WindowsForms", "GUIs\skyscraper5.UI\skyscraper5.UI.WindowsForms.csproj", "{46CACA1C-F9B2-2FE0-2068-716F381325E9}"
@ -65,8 +67,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "skyscraper8.UI.MonoGame", "
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "skyscraper8.UI.MonoGame.Bridge", "GUIs\skyscraper8.UI.ImGui.MonoGame.Bridge\skyscraper8.UI.MonoGame.Bridge.csproj", "{1A29F6E6-4B6A-DCCD-1DF1-AA8D020E17D2}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "skyscraper8.UI.MonoGame.Bridge", "GUIs\skyscraper8.UI.ImGui.MonoGame.Bridge\skyscraper8.UI.MonoGame.Bridge.csproj", "{1A29F6E6-4B6A-DCCD-1DF1-AA8D020E17D2}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "skyscraper8.Tests", "skyscraper8.Tests\skyscraper8.Tests.csproj", "{84EE9FCD-2C7F-DF84-C1BA-99D018CE9412}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
@ -78,75 +78,97 @@ Global
{8DAAE3A2-72EA-4908-8F62-911D293043E8}.Release|Any CPU.ActiveCfg = Release|Any CPU {8DAAE3A2-72EA-4908-8F62-911D293043E8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8DAAE3A2-72EA-4908-8F62-911D293043E8}.Release|Any CPU.Build.0 = Release|Any CPU {8DAAE3A2-72EA-4908-8F62-911D293043E8}.Release|Any CPU.Build.0 = Release|Any CPU
{E52A1723-7193-EC3C-7371-01A3BB58E0EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E52A1723-7193-EC3C-7371-01A3BB58E0EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E52A1723-7193-EC3C-7371-01A3BB58E0EA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E52A1723-7193-EC3C-7371-01A3BB58E0EA}.Release|Any CPU.ActiveCfg = Release|Any CPU {E52A1723-7193-EC3C-7371-01A3BB58E0EA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E52A1723-7193-EC3C-7371-01A3BB58E0EA}.Release|Any CPU.Build.0 = Release|Any CPU {E52A1723-7193-EC3C-7371-01A3BB58E0EA}.Release|Any CPU.Build.0 = Release|Any CPU
{1015ACF1-E812-5410-66A5-E92DE682D2C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1015ACF1-E812-5410-66A5-E92DE682D2C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1015ACF1-E812-5410-66A5-E92DE682D2C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1015ACF1-E812-5410-66A5-E92DE682D2C6}.Release|Any CPU.ActiveCfg = Release|Any CPU {1015ACF1-E812-5410-66A5-E92DE682D2C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1015ACF1-E812-5410-66A5-E92DE682D2C6}.Release|Any CPU.Build.0 = Release|Any CPU {1015ACF1-E812-5410-66A5-E92DE682D2C6}.Release|Any CPU.Build.0 = Release|Any CPU
{C4262F19-0648-A1A1-3D62-748A45BC5329}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C4262F19-0648-A1A1-3D62-748A45BC5329}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C4262F19-0648-A1A1-3D62-748A45BC5329}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C4262F19-0648-A1A1-3D62-748A45BC5329}.Release|Any CPU.ActiveCfg = Release|Any CPU {C4262F19-0648-A1A1-3D62-748A45BC5329}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C4262F19-0648-A1A1-3D62-748A45BC5329}.Release|Any CPU.Build.0 = Release|Any CPU {C4262F19-0648-A1A1-3D62-748A45BC5329}.Release|Any CPU.Build.0 = Release|Any CPU
{1B8696DA-8A81-8F1F-9463-49C727959EDA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1B8696DA-8A81-8F1F-9463-49C727959EDA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1B8696DA-8A81-8F1F-9463-49C727959EDA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1B8696DA-8A81-8F1F-9463-49C727959EDA}.Release|Any CPU.ActiveCfg = Release|Any CPU {1B8696DA-8A81-8F1F-9463-49C727959EDA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1B8696DA-8A81-8F1F-9463-49C727959EDA}.Release|Any CPU.Build.0 = Release|Any CPU {1B8696DA-8A81-8F1F-9463-49C727959EDA}.Release|Any CPU.Build.0 = Release|Any CPU
{68EB7299-FC65-654E-B972-D79514B91BAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {68EB7299-FC65-654E-B972-D79514B91BAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{68EB7299-FC65-654E-B972-D79514B91BAD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{68EB7299-FC65-654E-B972-D79514B91BAD}.Release|Any CPU.ActiveCfg = Release|Any CPU {68EB7299-FC65-654E-B972-D79514B91BAD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{68EB7299-FC65-654E-B972-D79514B91BAD}.Release|Any CPU.Build.0 = Release|Any CPU {68EB7299-FC65-654E-B972-D79514B91BAD}.Release|Any CPU.Build.0 = Release|Any CPU
{60F519BA-49C0-7C7B-E26F-E4313A9B1697}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {60F519BA-49C0-7C7B-E26F-E4313A9B1697}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{60F519BA-49C0-7C7B-E26F-E4313A9B1697}.Debug|Any CPU.Build.0 = Debug|Any CPU
{60F519BA-49C0-7C7B-E26F-E4313A9B1697}.Release|Any CPU.ActiveCfg = Release|Any CPU {60F519BA-49C0-7C7B-E26F-E4313A9B1697}.Release|Any CPU.ActiveCfg = Release|Any CPU
{60F519BA-49C0-7C7B-E26F-E4313A9B1697}.Release|Any CPU.Build.0 = Release|Any CPU {60F519BA-49C0-7C7B-E26F-E4313A9B1697}.Release|Any CPU.Build.0 = Release|Any CPU
{71CFF3DD-4F6C-3A21-B2C3-2F3A59D4FB4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {71CFF3DD-4F6C-3A21-B2C3-2F3A59D4FB4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{71CFF3DD-4F6C-3A21-B2C3-2F3A59D4FB4A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{71CFF3DD-4F6C-3A21-B2C3-2F3A59D4FB4A}.Release|Any CPU.ActiveCfg = Release|Any CPU {71CFF3DD-4F6C-3A21-B2C3-2F3A59D4FB4A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{71CFF3DD-4F6C-3A21-B2C3-2F3A59D4FB4A}.Release|Any CPU.Build.0 = Release|Any CPU {71CFF3DD-4F6C-3A21-B2C3-2F3A59D4FB4A}.Release|Any CPU.Build.0 = Release|Any CPU
{AD0F65A7-3257-BB3B-46F5-C16BFDF9DBCC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AD0F65A7-3257-BB3B-46F5-C16BFDF9DBCC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AD0F65A7-3257-BB3B-46F5-C16BFDF9DBCC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AD0F65A7-3257-BB3B-46F5-C16BFDF9DBCC}.Release|Any CPU.ActiveCfg = Release|Any CPU {AD0F65A7-3257-BB3B-46F5-C16BFDF9DBCC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AD0F65A7-3257-BB3B-46F5-C16BFDF9DBCC}.Release|Any CPU.Build.0 = Release|Any CPU {AD0F65A7-3257-BB3B-46F5-C16BFDF9DBCC}.Release|Any CPU.Build.0 = Release|Any CPU
{868A7453-E1B7-A619-F447-41E42420405C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {868A7453-E1B7-A619-F447-41E42420405C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{868A7453-E1B7-A619-F447-41E42420405C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{868A7453-E1B7-A619-F447-41E42420405C}.Release|Any CPU.ActiveCfg = Release|Any CPU {868A7453-E1B7-A619-F447-41E42420405C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{868A7453-E1B7-A619-F447-41E42420405C}.Release|Any CPU.Build.0 = Release|Any CPU {868A7453-E1B7-A619-F447-41E42420405C}.Release|Any CPU.Build.0 = Release|Any CPU
{2296DA0C-AD28-DB06-1984-13B4AE5DE61D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2296DA0C-AD28-DB06-1984-13B4AE5DE61D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2296DA0C-AD28-DB06-1984-13B4AE5DE61D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2296DA0C-AD28-DB06-1984-13B4AE5DE61D}.Release|Any CPU.ActiveCfg = Release|Any CPU {2296DA0C-AD28-DB06-1984-13B4AE5DE61D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2296DA0C-AD28-DB06-1984-13B4AE5DE61D}.Release|Any CPU.Build.0 = Release|Any CPU {2296DA0C-AD28-DB06-1984-13B4AE5DE61D}.Release|Any CPU.Build.0 = Release|Any CPU
{96D43A77-C1DA-16EF-2084-BA939C0BEB4D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {96D43A77-C1DA-16EF-2084-BA939C0BEB4D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{96D43A77-C1DA-16EF-2084-BA939C0BEB4D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{96D43A77-C1DA-16EF-2084-BA939C0BEB4D}.Release|Any CPU.ActiveCfg = Release|Any CPU {96D43A77-C1DA-16EF-2084-BA939C0BEB4D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{96D43A77-C1DA-16EF-2084-BA939C0BEB4D}.Release|Any CPU.Build.0 = Release|Any CPU {96D43A77-C1DA-16EF-2084-BA939C0BEB4D}.Release|Any CPU.Build.0 = Release|Any CPU
{17C2E095-B952-8919-2C68-F2EAA7A601C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {17C2E095-B952-8919-2C68-F2EAA7A601C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{17C2E095-B952-8919-2C68-F2EAA7A601C3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{17C2E095-B952-8919-2C68-F2EAA7A601C3}.Release|Any CPU.ActiveCfg = Release|Any CPU {17C2E095-B952-8919-2C68-F2EAA7A601C3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{17C2E095-B952-8919-2C68-F2EAA7A601C3}.Release|Any CPU.Build.0 = Release|Any CPU {17C2E095-B952-8919-2C68-F2EAA7A601C3}.Release|Any CPU.Build.0 = Release|Any CPU
{07214423-32B2-DDE8-8D38-511D55ADC206}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {07214423-32B2-DDE8-8D38-511D55ADC206}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{07214423-32B2-DDE8-8D38-511D55ADC206}.Debug|Any CPU.Build.0 = Debug|Any CPU
{07214423-32B2-DDE8-8D38-511D55ADC206}.Release|Any CPU.ActiveCfg = Release|Any CPU {07214423-32B2-DDE8-8D38-511D55ADC206}.Release|Any CPU.ActiveCfg = Release|Any CPU
{07214423-32B2-DDE8-8D38-511D55ADC206}.Release|Any CPU.Build.0 = Release|Any CPU {07214423-32B2-DDE8-8D38-511D55ADC206}.Release|Any CPU.Build.0 = Release|Any CPU
{0E4C7079-228A-B94C-379A-8A14B08BAB34}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0E4C7079-228A-B94C-379A-8A14B08BAB34}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0E4C7079-228A-B94C-379A-8A14B08BAB34}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0E4C7079-228A-B94C-379A-8A14B08BAB34}.Release|Any CPU.ActiveCfg = Release|Any CPU {0E4C7079-228A-B94C-379A-8A14B08BAB34}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0E4C7079-228A-B94C-379A-8A14B08BAB34}.Release|Any CPU.Build.0 = Release|Any CPU {0E4C7079-228A-B94C-379A-8A14B08BAB34}.Release|Any CPU.Build.0 = Release|Any CPU
{3B52C24E-58E2-F982-F9B7-B9E7465B82A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3B52C24E-58E2-F982-F9B7-B9E7465B82A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3B52C24E-58E2-F982-F9B7-B9E7465B82A2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3B52C24E-58E2-F982-F9B7-B9E7465B82A2}.Release|Any CPU.ActiveCfg = Release|Any CPU {3B52C24E-58E2-F982-F9B7-B9E7465B82A2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3B52C24E-58E2-F982-F9B7-B9E7465B82A2}.Release|Any CPU.Build.0 = Release|Any CPU {3B52C24E-58E2-F982-F9B7-B9E7465B82A2}.Release|Any CPU.Build.0 = Release|Any CPU
{8F17668C-623C-F9B3-EAD4-2922E5414B75}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8F17668C-623C-F9B3-EAD4-2922E5414B75}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8F17668C-623C-F9B3-EAD4-2922E5414B75}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8F17668C-623C-F9B3-EAD4-2922E5414B75}.Release|Any CPU.ActiveCfg = Release|Any CPU {8F17668C-623C-F9B3-EAD4-2922E5414B75}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8F17668C-623C-F9B3-EAD4-2922E5414B75}.Release|Any CPU.Build.0 = Release|Any CPU {8F17668C-623C-F9B3-EAD4-2922E5414B75}.Release|Any CPU.Build.0 = Release|Any CPU
{46CACA1C-F9B2-2FE0-2068-716F381325E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{46CACA1C-F9B2-2FE0-2068-716F381325E9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{46CACA1C-F9B2-2FE0-2068-716F381325E9}.Release|Any CPU.Build.0 = Release|Any CPU
{BDBDB7A9-D0A4-9B89-0801-2935B2066551}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BDBDB7A9-D0A4-9B89-0801-2935B2066551}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BDBDB7A9-D0A4-9B89-0801-2935B2066551}.Release|Any CPU.Build.0 = Release|Any CPU
{CF21D250-9804-4191-89F5-95821E3AF39D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CF21D250-9804-4191-89F5-95821E3AF39D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CF21D250-9804-4191-89F5-95821E3AF39D}.Release|Any CPU.Build.0 = Release|Any CPU
{EBB6B1CF-2597-4962-AA31-2B42B4C28C7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EBB6B1CF-2597-4962-AA31-2B42B4C28C7D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EBB6B1CF-2597-4962-AA31-2B42B4C28C7D}.Release|Any CPU.Build.0 = Release|Any CPU
{839C3783-020F-77D6-C22C-D50DCC97CDD6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{839C3783-020F-77D6-C22C-D50DCC97CDD6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{839C3783-020F-77D6-C22C-D50DCC97CDD6}.Release|Any CPU.Build.0 = Release|Any CPU
{1A29F6E6-4B6A-DCCD-1DF1-AA8D020E17D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1A29F6E6-4B6A-DCCD-1DF1-AA8D020E17D2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1A29F6E6-4B6A-DCCD-1DF1-AA8D020E17D2}.Release|Any CPU.Build.0 = Release|Any CPU
{84EE9FCD-2C7F-DF84-C1BA-99D018CE9412}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {84EE9FCD-2C7F-DF84-C1BA-99D018CE9412}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{84EE9FCD-2C7F-DF84-C1BA-99D018CE9412}.Debug|Any CPU.Build.0 = Debug|Any CPU {84EE9FCD-2C7F-DF84-C1BA-99D018CE9412}.Debug|Any CPU.Build.0 = Debug|Any CPU
{84EE9FCD-2C7F-DF84-C1BA-99D018CE9412}.Release|Any CPU.ActiveCfg = Release|Any CPU {84EE9FCD-2C7F-DF84-C1BA-99D018CE9412}.Release|Any CPU.ActiveCfg = Release|Any CPU
{84EE9FCD-2C7F-DF84-C1BA-99D018CE9412}.Release|Any CPU.Build.0 = Release|Any CPU {84EE9FCD-2C7F-DF84-C1BA-99D018CE9412}.Release|Any CPU.Build.0 = Release|Any CPU
{46CACA1C-F9B2-2FE0-2068-716F381325E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{46CACA1C-F9B2-2FE0-2068-716F381325E9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{46CACA1C-F9B2-2FE0-2068-716F381325E9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{46CACA1C-F9B2-2FE0-2068-716F381325E9}.Release|Any CPU.Build.0 = Release|Any CPU
{BDBDB7A9-D0A4-9B89-0801-2935B2066551}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BDBDB7A9-D0A4-9B89-0801-2935B2066551}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BDBDB7A9-D0A4-9B89-0801-2935B2066551}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BDBDB7A9-D0A4-9B89-0801-2935B2066551}.Release|Any CPU.Build.0 = Release|Any CPU
{CF21D250-9804-4191-89F5-95821E3AF39D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CF21D250-9804-4191-89F5-95821E3AF39D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CF21D250-9804-4191-89F5-95821E3AF39D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CF21D250-9804-4191-89F5-95821E3AF39D}.Release|Any CPU.Build.0 = Release|Any CPU
{EBB6B1CF-2597-4962-AA31-2B42B4C28C7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EBB6B1CF-2597-4962-AA31-2B42B4C28C7D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EBB6B1CF-2597-4962-AA31-2B42B4C28C7D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EBB6B1CF-2597-4962-AA31-2B42B4C28C7D}.Release|Any CPU.Build.0 = Release|Any CPU
{839C3783-020F-77D6-C22C-D50DCC97CDD6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{839C3783-020F-77D6-C22C-D50DCC97CDD6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{839C3783-020F-77D6-C22C-D50DCC97CDD6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{839C3783-020F-77D6-C22C-D50DCC97CDD6}.Release|Any CPU.Build.0 = Release|Any CPU
{1A29F6E6-4B6A-DCCD-1DF1-AA8D020E17D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1A29F6E6-4B6A-DCCD-1DF1-AA8D020E17D2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1A29F6E6-4B6A-DCCD-1DF1-AA8D020E17D2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1A29F6E6-4B6A-DCCD-1DF1-AA8D020E17D2}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE

View File

@ -1,73 +1,22 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> <wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AAllureContext_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003Fc09614b59cc98c343d268f55e356aaafe85d13755cd5ca217988e9c5362ff_003FAllureContext_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AAllureFeatureAttribute_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003F405349a6f42433abaa8b1d6d06bb6f21c66899533fa9f9648cb1cde8755143_003FAllureFeatureAttribute_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AArgumentNullException_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003Ff2_003F6872d84e_003FArgumentNullException_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AArray_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003F6e_003Fd247db11_003FArray_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AArray_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003F6e_003Fd247db11_003FArray_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AAssert_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F053cba69424c47858472194d509c3cdc12bb0_003F37_003F58cc70f4_003FAssert_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AAssert_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fa840692e98b74557bc005b38213a22c72dad0_003Fc8_003F58c2e0c9_003FAssert_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AAssert_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003F62bb4746d7d14dc1cd4274a28788572a7a4641bd3a7d5736479c9697bcb4794_003FAssert_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AAssert_002EInconclusive_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003F8e305e26401afcd395b5be2da0e23d61432655dc5f2c2e5e6d5bd873bb0cb90_003FAssert_002EInconclusive_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AAssert_002EThrowsException_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003Fe6930caf46f7fcaa445fdd26a3884170a45a4766298259e7a29bae560adef_003FAssert_002EThrowsException_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ACultureInfo_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003F8e_003Fe58e5b4a_003FCultureInfo_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADictionary_00602_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003F83_003Fc73c45bc_003FDictionary_00602_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADictionary_00602_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2026_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Ffd0d7846a16a4147ad767b7c3ae2cf57b2e200_003F4a_003Ff8de026f_003FDictionary_00602_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AFastResourceComparer_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003F8f_003Ffb4ed86c_003FFastResourceComparer_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AFileInfo_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fe1ab690537c44e02a014076312b886b7b2e200_003F5a_003Fcf76af61_003FFileInfo_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AFileInfo_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fe1ab690537c44e02a014076312b886b7b2e200_003F5a_003Fcf76af61_003FFileInfo_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AInterop_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003Fea_003F7d70064b_003FInterop_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AInterop_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003Fea_003F7d70064b_003FInterop_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AList_00601_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003F6b_003Fa410ee2c_003FList_00601_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AList_00601_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003F6b_003Fa410ee2c_003FList_00601_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AMemberInfo_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003Fce_003F751a2c1f_003FMemberInfo_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AMemoryStream_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003F0d_003F068af3a6_003FMemoryStream_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AMemoryStream_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003F0d_003F068af3a6_003FMemoryStream_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AMethodBaseInvoker_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003F7a_003F86728bdc_003FMethodBaseInvoker_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ANotImplementedException_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003Fa3_003F2c4f9089_003FNotImplementedException_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ANullable_00601_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003F0d_003F6549c49b_003FNullable_00601_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ANullable_00601_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003F0d_003F6549c49b_003FNullable_00601_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ANullAsserts_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003F3f4719f7ce375226774d6991a6afc2f6932e58b42fd58ff13c7c03771642e_003FNullAsserts_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AObject_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003F55_003F6efc7017_003FObject_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AObject_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003F55_003F6efc7017_003FObject_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AQueue_00601_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003Fb6_003F498e7c75_003FQueue_00601_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AQueue_00601_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003Fb6_003F498e7c75_003FQueue_00601_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AReadOnlyDictionary_00602_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003F0d_003F1270c638_003FReadOnlyDictionary_00602_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AResourceManager_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003F0c_003Fb548fbc6_003FResourceManager_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ARuntimeInformation_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003F4c_003F5f771d10_003FRuntimeInformation_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ARuntimeResourceSet_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003Fe1_003Ff15f6bbe_003FRuntimeResourceSet_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ASafeFileHandle_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003Fc6_003Fd8e0f2f2_003FSafeFileHandle_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ASafeFileHandle_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2026_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Ffd0d7846a16a4147ad767b7c3ae2cf57b2e200_003F95_003Ff0feb47b_003FSafeFileHandle_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ASkip_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003Fd8c543d93f1559af2ea2be8e9d55839b5bb1a3605f22daa45ea63772e3b4bc_003FSkip_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ASpan_00601_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2026_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F48f7bf031b2942d3831d66d46fe3bc99b2e200_003F49_003F017cad58_003FSpan_00601_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ASpan_00601_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2026_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Ffd0d7846a16a4147ad767b7c3ae2cf57b2e200_003F35_003F161711de_003FSpan_00601_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ASR_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003F4d_003F7edc51d9_003FSR_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AString_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003F2e_003F1a14f40f_003FString_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ATestMethodInfo_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003F9ea467e7c7b4671a214143293021e7ec337916b71125d896e17a0b7fc_003FTestMethodInfo_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AThrowHelper_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003Feb_003F3c476997_003FThrowHelper_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AThrowHelper_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003Feb_003F3c476997_003FThrowHelper_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AThrowHelper_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fe1ab690537c44e02a014076312b886b7b2e200_003F4f_003F7bfc5050_003FThrowHelper_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AThrowHelper_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fe1ab690537c44e02a014076312b886b7b2e200_003F4f_003F7bfc5050_003FThrowHelper_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AThrowHelper_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Ffb63d7b4f026464dbf9b2db60c7f76bc2ac00_003Fbd_003F4080deac_003FThrowHelper_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ATuple_00602_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003F9f_003F0d16f921_003FTuple_00602_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ATuple_00602_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003F9f_003F0d16f921_003FTuple_00602_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/Environment/AssemblyExplorer/XmlDocument/@EntryValue">&lt;AssemblyExplorer&gt;
&lt;Assembly Path="/home/schiemas/.dotnet/packs/Microsoft.NETCore.App.Ref/8.0.21/ref/net8.0/System.Windows.dll" /&gt;
&lt;Assembly Path="/home/schiemas/.nuget/packages/allure.net.commons/2.14.1/lib/netstandard2.0/Allure.Net.Commons.dll" /&gt;
&lt;/AssemblyExplorer&gt;</s:String>
<s:String x:Key="/Default/Environment/Highlighting/HighlightingSourceSnapshotLocation/@EntryValue">/home/schiemas/.cache/JetBrains/Rider2025.1/resharper-host/temp/Rider/vAny/CoverageData/_skyscraper8.1808907683/Snapshot/snapshot.utdcvr</s:String> <s:String x:Key="/Default/Environment/Highlighting/HighlightingSourceSnapshotLocation/@EntryValue">/home/schiemas/.cache/JetBrains/Rider2025.1/resharper-host/temp/Rider/vAny/CoverageData/_skyscraper8.1808907683/Snapshot/snapshot.utdcvr</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=145b05c0_002D83b0_002D4386_002Db9fb_002De55ec3152557/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" Name="All tests from &amp;lt;skyscraper8.Tests&amp;gt;" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;&#xD; <s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=1108d3f2_002D5e6f_002D416b_002Da8ee_002D3c9502a978e2/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" IsActive="True" Name="CheckBfbsCrc #2" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;
&lt;And&gt;&#xD; &lt;Solution /&gt;
&lt;Namespace&gt;skyscraper8.Tests&lt;/Namespace&gt;&#xD;
&lt;Project Location="\home\schiemas\RiderProjects\skyscraper8\skyscraper8.Tests" Presentation="&amp;lt;skyscraper8.Tests&amp;gt;" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/SessionState&gt;</s:String> &lt;/SessionState&gt;</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=58c56b00_002Df81e_002D48fd_002Da74f_002Dc8e84271fcf4/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" Name="Continuous Testing" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;&#xD; <s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=8cbe9c8f_002Dfc55_002D47f1_002D9df1_002Dcb4c7fbbc56b/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" Name="CheckBfbsCrc" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;
&lt;Project Location="\home\schiemas\RiderProjects\skyscraper8\skyscraper8.Tests" Presentation="&amp;lt;skyscraper8.Tests&amp;gt;" /&gt;&#xD; &lt;TestAncestor&gt;
&lt;TestId&gt;xUnit::84EE9FCD-2C7F-DF84-C1BA-99D018CE9412::net8.0::skyscraper8.Tests.GsType1SanityTest.CheckBfbsCrc&lt;/TestId&gt;
&lt;/TestAncestor&gt;
&lt;/SessionState&gt;</s:String> &lt;/SessionState&gt;</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=ce70f33b_002D9024_002D4750_002Da24e_002D78f4e8e5e879/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" IsActive="True" Name="All tests from &amp;lt;skyscraper8.Tests&amp;gt;" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;&#xD; <s:String x:Key="/Default/Profiling/Configurations/=1/@EntryIndexedValue">&lt;data&gt;&lt;HostParameters type="LocalHostParameters" /&gt;&lt;Argument type="StandaloneArgument"&gt;&lt;Arguments IsNull="False"&gt;&lt;/Arguments&gt;&lt;FileName IsNull="False"&gt;&lt;/FileName&gt;&lt;WorkingDirectory IsNull="False"&gt;&lt;/WorkingDirectory&gt;&lt;Scope&gt;&lt;ProcessFilters /&gt;&lt;/Scope&gt;&lt;/Argument&gt;&lt;Info type="TimelineInfo" /&gt;&lt;CoreOptions type="CoreOptions"&gt;&lt;CoreTempPath IsNull="False"&gt;&lt;/CoreTempPath&gt;&lt;RemoteEndPoint IsNull="False"&gt;&lt;/RemoteEndPoint&gt;&lt;AdditionalEnvironmentVariables /&gt;&lt;/CoreOptions&gt;&lt;HostOptions type="HostOptions"&gt;&lt;HostTempPath IsNull="False"&gt;&lt;/HostTempPath&gt;&lt;/HostOptions&gt;&lt;/data&gt;</s:String></wpf:ResourceDictionary>
&lt;Solution /&gt;&#xD;
&lt;/SessionState&gt;</s:String>
<s:String x:Key="/Default/Profiling/Configurations/=1/@EntryIndexedValue">&lt;data&gt;&lt;HostParameters type="LocalHostParameters" /&gt;&lt;Argument type="StandaloneArgument"&gt;&lt;Arguments IsNull="False"&gt;&lt;/Arguments&gt;&lt;FileName IsNull="False"&gt;&lt;/FileName&gt;&lt;WorkingDirectory IsNull="False"&gt;&lt;/WorkingDirectory&gt;&lt;Scope&gt;&lt;ProcessFilters /&gt;&lt;/Scope&gt;&lt;/Argument&gt;&lt;Info type="TimelineInfo" /&gt;&lt;CoreOptions type="CoreOptions"&gt;&lt;CoreTempPath IsNull="False"&gt;&lt;/CoreTempPath&gt;&lt;RemoteEndPoint IsNull="False"&gt;&lt;/RemoteEndPoint&gt;&lt;AdditionalEnvironmentVariables /&gt;&lt;/CoreOptions&gt;&lt;HostOptions type="HostOptions"&gt;&lt;HostTempPath IsNull="False"&gt;&lt;/HostTempPath&gt;&lt;/HostOptions&gt;&lt;/data&gt;</s:String>
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=skyscraper8_002ETests_002FProperties_002FResources/@EntryIndexedValue">False</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=skyscraper8_002ETests_002FResources1/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/Initialized/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/ShowOnlyErrors/@EntryValue">False</s:Boolean>
<s:Boolean x:Key="/Default/UnloadedProject/UnloadedProjects/=46caca1c_002Df9b2_002D2fe0_002D2068_002D716f381325e9_0023skyscraper5_002EUI_002EWindowsForms/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UnloadedProject/UnloadedProjects/=ebb6b1cf_002D2597_002D4962_002Daa31_002D2b42b4c28c7d_0023skyscraper8_002EAnagramViewer/@EntryIndexedValue">True</s:Boolean>
</wpf:ResourceDictionary>

View File

@ -1,15 +0,0 @@
[
{
"Name": "Neues Profil",
"Projects": [
{
"Path": "IoPlugins\\skyscraper5.IO.StreamReader.RemoteStreamReaderServer\\skyscraper5.IO.StreamReader.RemoteStreamReaderServer.csproj",
"Action": "Start"
},
{
"Path": "GUIs\\skyscraper8.UI.ImGui\\skyscraper8.UI.SDL2.csproj",
"Action": "Start"
}
]
}
]

View File

@ -26,9 +26,13 @@ namespace skyscraper5.Abertis
public void PushPacket(TsPacket packet) public void PushPacket(TsPacket packet)
{ {
Span<byte> payload = packet.GetPayload(); byte[] packetPayload = packet.Payload;
MemoryStream ms = new MemoryStream(payload.ToArray(), false); MemoryStream ms = new MemoryStream(packetPayload);
if (packet.AdaptionFieldControl == 3)
{
ms.ReadByte();
}
int syncLossCheck = 0; int syncLossCheck = 0;
while (ms.GetAvailableBytes() > 0) while (ms.GetAvailableBytes() > 0)

View File

@ -11,7 +11,7 @@ namespace skyscraper5.Docsis.AnnexC
public EthernetLlcPacketClassificationEncoding(byte[] buffer) public EthernetLlcPacketClassificationEncoding(byte[] buffer)
{ {
MemoryStream ms = new MemoryStream(buffer, false); MemoryStream ms = new MemoryStream(buffer, false);
while (ms.GetAvailableBytes() >= 3) while (ms.GetAvailableBytes() > 3)
{ {
byte type = ms.ReadUInt8(); byte type = ms.ReadUInt8();
ushort length = ms.ReadUInt8(); ushort length = ms.ReadUInt8();

View File

@ -149,6 +149,6 @@ namespace skyscraper5.Docsis.AnnexC
public uint? ServiceFlowIdentifier { get; set; } public uint? ServiceFlowIdentifier { get; set; }
public EthernetLlcPacketClassificationEncoding EthernetLlcPacketClassificationEncodings { get; } public EthernetLlcPacketClassificationEncoding EthernetLlcPacketClassificationEncodings { get; }
public Ipv6PacketClassificationEncoding Ipv6PacketClassification { get; } internal Ipv6PacketClassificationEncoding Ipv6PacketClassification { get; }
} }
} }

View File

@ -3,7 +3,7 @@ using System.Net;
namespace skyscraper5.Docsis.AnnexC namespace skyscraper5.Docsis.AnnexC
{ {
public class Ipv6PacketClassificationEncoding internal class Ipv6PacketClassificationEncoding
{ {
public Ipv6PacketClassificationEncoding(byte[] buffer) public Ipv6PacketClassificationEncoding(byte[] buffer)
{ {

View File

@ -12,7 +12,7 @@ namespace skyscraper5.Docsis.AnnexC
{ {
private readonly bool? ExpandedUnicastSidSpace; private readonly bool? ExpandedUnicastSidSpace;
private readonly byte? DpvCapability; private readonly byte? DpvCapability;
private readonly byte? EnergyManagementPreference; private readonly byte EnergyManagementPreference;
private byte? UpstreamScQamSymbolRateSupport; private byte? UpstreamScQamSymbolRateSupport;
private byte? _512MspsUpstreamTransmitScQamChannelSupport; private byte? _512MspsUpstreamTransmitScQamChannelSupport;
private byte? _256MspsUpstreamTransmitScQamChannelSupport; private byte? _256MspsUpstreamTransmitScQamChannelSupport;
@ -207,7 +207,7 @@ namespace skyscraper5.Docsis.AnnexC
DownstreamFrequencyRangeStarting = 108; DownstreamFrequencyRangeStarting = 108;
else if (v[0] == 0x02) else if (v[0] == 0x02)
DownstreamFrequencyRangeStarting = 258; DownstreamFrequencyRangeStarting = 258;
else if (v[0] == 0x03) else if (v[0] == 0x003)
DownstreamFullDuplex = true; DownstreamFullDuplex = true;
break; break;
case 61: case 61:
@ -235,7 +235,7 @@ namespace skyscraper5.Docsis.AnnexC
break; break;
default: default:
//CM-SP-MULPIv4.0-I01-190815.pdf, page 688 //CM-SP-MULPIv4.0-I01-190815.pdf, page 688
throw new NotImplementedException(String.Format("{0} {1}", nameof(ModemCapabilitiesEncoding), type)); throw new NotFiniteNumberException(String.Format("{0} {1}", nameof(ModemCapabilitiesEncoding), type));
} }
} }
Valid = true; Valid = true;
@ -268,7 +268,7 @@ namespace skyscraper5.Docsis.AnnexC
public byte? TransmitPreEqualizerTapsPerModulationInterval { get; } public byte? TransmitPreEqualizerTapsPerModulationInterval { get; }
public byte? NumberOfTransmitEqualizerTaps { get; } public byte? NumberOfTransmitEqualizerTaps { get; }
public bool? DccSupport { get; } public bool? DccSupport { get; }
public RangingHoldOffSupport RangingHoldOffSupport { get; } internal RangingHoldOffSupport RangingHoldOffSupport { get; }
public bool? L2VPN { get; } public bool? L2VPN { get; }
public ESafeHostCapability ESafeHostCapability { get; } public ESafeHostCapability ESafeHostCapability { get; }
public bool? DownstreamUnencryptedTrafficFiltering { get; } public bool? DownstreamUnencryptedTrafficFiltering { get; }
@ -446,5 +446,5 @@ namespace skyscraper5.Docsis.AnnexC
Level5 = 5, Level5 = 5,
NoSpecifiedPerformance = 6, NoSpecifiedPerformance = 6,
} }
} }
} }

View File

@ -6,7 +6,7 @@ using System.Threading.Tasks;
namespace skyscraper8.Docsis.AnnexC namespace skyscraper8.Docsis.AnnexC
{ {
public class RangingHoldOffSupport internal class RangingHoldOffSupport
{ {
public RangingHoldOffSupport(byte a, byte b, byte c, byte d) public RangingHoldOffSupport(byte a, byte b, byte c, byte d)
{ {

View File

@ -27,7 +27,7 @@ namespace skyscraper5.Docsis.AnnexC
SimplifiedReceiveChannelConfiguration = new SimplifiedReceiveChannelAssignmentEncoding(v); SimplifiedReceiveChannelConfiguration = new SimplifiedReceiveChannelAssignmentEncoding(v);
break; break;
default: default:
throw new NotImplementedException(String.Format("{0} {1}", nameof(ModemCapabilitiesEncoding), type)); throw new NotFiniteNumberException(String.Format("{0} {1}", nameof(ModemCapabilitiesEncoding), type));
} }
} }
} }
@ -59,7 +59,7 @@ namespace skyscraper5.Docsis.AnnexC
break; break;
default: default:
//page 728, CM-SP-MULPIv4.0-I01-190815.pdf //page 728, CM-SP-MULPIv4.0-I01-190815.pdf
throw new NotImplementedException(String.Format("{0} {1}", nameof(SimplifiedReceiveChannelAssignmentEncoding), type)); throw new NotFiniteNumberException(String.Format("{0} {1}", nameof(SimplifiedReceiveChannelAssignmentEncoding), type));
} }
} }
} }

View File

@ -339,7 +339,18 @@ namespace skyscraper5.Docsis
break; break;
case nameof(PrivacyKeyManagementResponse): case nameof(PrivacyKeyManagementResponse):
PrivacyKeyManagementResponse privacyKeyManagementResponse = (PrivacyKeyManagementResponse)mmm; PrivacyKeyManagementResponse privacyKeyManagementResponse = (PrivacyKeyManagementResponse)mmm;
eventHandler.OnKeyManagementResponse(privacyKeyManagementResponse); switch (privacyKeyManagementResponse.Code)
{
case 5:
//Contains a scrambled authentication key, so not interesting for us
break;
case 8:
//Since the key is encrypted as well, this isn't interesting.
break;
default:
//CM-SP-SECv4.0-I01-190815.pdf page 50
throw new NotImplementedException(String.Format("{0}.{1} {2}", nameof(PrivacyKeyManagementResponse), nameof(privacyKeyManagementResponse.Code), privacyKeyManagementResponse.Code));
}
break; break;
case nameof(DynamicServiceChangeResponse): case nameof(DynamicServiceChangeResponse):
//Nothing of interesent in here either. //Nothing of interesent in here either.
@ -351,8 +362,7 @@ namespace skyscraper5.Docsis
//not interesting //not interesting
break; break;
case nameof(DynamicServiceAdditionResponse): case nameof(DynamicServiceAdditionResponse):
DynamicServiceAdditionResponse dynamicServiceAdditionResponse = (DynamicServiceAdditionResponse)mmm; //not interesting
eventHandler.OnDynamicServiceAddition(dynamicServiceAdditionResponse.TransactionId, dynamicServiceAdditionResponse.ConfirmationCode, dynamicServiceAdditionResponse.TlvEncodedInformation);
break; break;
case nameof(DynamicServiceDeletionResponse): case nameof(DynamicServiceDeletionResponse):
//nothing in there //nothing in there

View File

@ -88,24 +88,21 @@ namespace skyscraper5.Docsis
public void PushPacket(TsPacket packet) public void PushPacket(TsPacket packet)
{ {
TsAdaptionField adaptionField = packet.AdaptionField; if (packet.AdaptionFieldControl != 1)
Span<byte> payload = packet.GetPayload();
if (adaptionField != null || payload == null)
{ {
PacketLoss(); PacketLoss();
return; return;
} }
bool packetPayloadUnitStart = packet.PayloadUnitStart; bool packetPayloadUnitStart = packet.PayloadUnitStart;
MemoryStream ms = new MemoryStream(payload.ToArray(), false); MemoryStream ms = new MemoryStream(packet.Payload, false);
if (!currentPayloadUnitPresent && !packetPayloadUnitStart) if (!currentPayloadUnitPresent && !packetPayloadUnitStart)
return; return;
if (!currentPayloadUnitPresent && packetPayloadUnitStart) if (!currentPayloadUnitPresent && packetPayloadUnitStart)
{ {
ms.Position = packet.PID; ms.Position = packet.PayloadStartOffset;
currentPayloadUnitPresent = true; currentPayloadUnitPresent = true;
currentPayloadBuffer = new MemoryStream(); currentPayloadBuffer = new MemoryStream();
} }

View File

@ -5,7 +5,6 @@ using System.Net;
using System.Net.NetworkInformation; using System.Net.NetworkInformation;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using skyscraper5.Docsis.AnnexC;
using skyscraper5.Docsis.MacManagement; using skyscraper5.Docsis.MacManagement;
namespace skyscraper5.Docsis namespace skyscraper5.Docsis
@ -17,7 +16,5 @@ namespace skyscraper5.Docsis
void OnUpstreamChannel(UpstreamChannelDescriptor mmm); void OnUpstreamChannel(UpstreamChannelDescriptor mmm);
void OnDownstreamChannel(PhysicalAddress physicalAddress, MacDomainDescriptor.DownstreamActiveChannel downstreamActiveChannel); void OnDownstreamChannel(PhysicalAddress physicalAddress, MacDomainDescriptor.DownstreamActiveChannel downstreamActiveChannel);
void OnLearnedIpFromMac(PhysicalAddress arpHeaderSenderHardwareAddress, IPAddress arpHeaderSenderProtocolAddress); void OnLearnedIpFromMac(PhysicalAddress arpHeaderSenderHardwareAddress, IPAddress arpHeaderSenderProtocolAddress);
void OnKeyManagementResponse(PrivacyKeyManagementResponse privacyKeyManagementResponse);
void OnDynamicServiceAddition(ushort transactionId, byte confirmationCode, CommonTlvEncodingObject tlvEncodedInformation);
} }
} }

View File

@ -4,7 +4,7 @@ using System.IO;
namespace skyscraper5.Docsis.MacManagement.BaselinePrivacyKeyManagementMessages namespace skyscraper5.Docsis.MacManagement.BaselinePrivacyKeyManagementMessages
{ {
public class AuthReply : PrivacyKeyManagementResponse.BpkmMessageObject internal class AuthReply : PrivacyKeyManagementResponse.BpkmMessageObject
{ {
public AuthReply(byte[] buffer) : base(buffer) public AuthReply(byte[] buffer) : base(buffer)
{ {
@ -39,7 +39,7 @@ namespace skyscraper5.Docsis.MacManagement.BaselinePrivacyKeyManagementMessages
public byte[] AuthKey { get; private set; } public byte[] AuthKey { get; private set; }
public SaDescriptorObject SaDescriptor { get; private set; } public SaDescriptorObject SaDescriptor { get; private set; }
public class SaDescriptorObject internal class SaDescriptorObject
{ {
public SaDescriptorObject(byte[] buffer) public SaDescriptorObject(byte[] buffer)
{ {
@ -70,10 +70,10 @@ namespace skyscraper5.Docsis.MacManagement.BaselinePrivacyKeyManagementMessages
} }
} }
public ushort SAID { get; private set; } public ushort SAID { get; }
public SaTypeEnum SaType { get; private set; } public SaTypeEnum SaType { get; }
public DataEncryptionAlgorithmIdentifiers DataEncryptionAlgorithm { get; private set; } public DataEncryptionAlgorithmIdentifiers DataEncryptionAlgorithm { get; }
public DataAuthenticationIdentifiers DataAuthenticationAlgorithm { get; private set; } public DataAuthenticationIdentifiers DataAuthenticationAlgorithm { get; }
public enum SaTypeEnum public enum SaTypeEnum
{ {

View File

@ -8,7 +8,7 @@ using skyscraper5.Skyscraper.IO;
namespace skyscraper5.Docsis.MacManagement.BaselinePrivacyKeyManagementMessages namespace skyscraper5.Docsis.MacManagement.BaselinePrivacyKeyManagementMessages
{ {
public class KeyReply : PrivacyKeyManagementResponse.BpkmMessageObject internal class KeyReply : PrivacyKeyManagementResponse.BpkmMessageObject
{ {
public KeyReply(byte[] buffer) : base(buffer) public KeyReply(byte[] buffer) : base(buffer)
{ {

View File

@ -13,7 +13,7 @@ namespace skyscraper5.Docsis.MacManagement
{ {
[SkyscraperPlugin] [SkyscraperPlugin]
[MacManagementMessageType(1,13)] [MacManagementMessageType(1,13)]
public class PrivacyKeyManagementResponse : MacManagementMessage internal class PrivacyKeyManagementResponse : MacManagementMessage
{ {
public PrivacyKeyManagementResponse(PhysicalAddress source, PhysicalAddress destination, byte[] buffer) : base(source, destination, buffer) public PrivacyKeyManagementResponse(PhysicalAddress source, PhysicalAddress destination, byte[] buffer) : base(source, destination, buffer)
{ {
@ -22,11 +22,7 @@ namespace skyscraper5.Docsis.MacManagement
Identifier = ms.ReadUInt8(); Identifier = ms.ReadUInt8();
ushort length = ms.ReadUInt16BE(); ushort length = ms.ReadUInt16BE();
if (length > ms.GetAvailableBytes()) if (length > ms.GetAvailableBytes())
{
Valid = false;
return; return;
}
byte[] subbuffer = ms.ReadBytes(length); byte[] subbuffer = ms.ReadBytes(length);
switch (Code) switch (Code)
@ -56,7 +52,7 @@ namespace skyscraper5.Docsis.MacManagement
protected BpkmMessageObject(byte[] buffer) protected BpkmMessageObject(byte[] buffer)
{ {
MemoryStream ms = new MemoryStream(buffer, false); MemoryStream ms = new MemoryStream(buffer, false);
while (ms.GetAvailableBytes() >= 3) while (ms.GetAvailableBytes() > 3)
{ {
byte type = ms.ReadUInt8(); byte type = ms.ReadUInt8();
ushort length = ms.ReadUInt16BE(); ushort length = ms.ReadUInt16BE();

View File

@ -1,6 +1,5 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Net.NetworkInformation; using System.Net.NetworkInformation;
@ -37,7 +36,7 @@ namespace skyscraper5.Docsis.MacManagement
Valid = false; Valid = false;
return; return;
} }
if (length == 0 && type != 15 && type != 16) if (length == 0)
{ {
Valid = false; Valid = false;
return; return;
@ -100,7 +99,8 @@ namespace skyscraper5.Docsis.MacManagement
SCdmaPowerHeadroom = v[0]; SCdmaPowerHeadroom = v[0];
break; break;
case 12: case 12:
UpstreamChannelAdjustments = new UpstreamChannelAdjustmentsObject(v); byte[] upstreamChannelAdjustmentsBuffer = ms.ReadBytes(length);
UpstreamChannelAdjustments = new UpstreamChannelAdjustmentsObject(upstreamChannelAdjustmentsBuffer);
break; break;
case 13: case 13:
T4TimeoutMultiplier = v[0]; T4TimeoutMultiplier = v[0];
@ -118,13 +118,13 @@ namespace skyscraper5.Docsis.MacManagement
newLen = (ushort)ms.GetAvailableBytes(); newLen = (ushort)ms.GetAvailableBytes();
} }
v = ms.ReadBytes(newLen); v = ms.ReadBytes(newLen);
TransmitEqualizationEncodingsForOfdmaChannels result1516 = Parse1516(v);
if (type == 15) if (type == 15)
TransmitEqualizationAdjustForOfdmaChannels = Parse1516(v); TransmitEqualizationAdjustForOfdmaChannels = Parse1516(v);
else else if (type == 16)
{
Debug.Assert(type == 16);
TransmitEqualizationSetForOfdmaChannels = Parse1516(v); TransmitEqualizationSetForOfdmaChannels = Parse1516(v);
} else
throw new NotImplementedException(String.Format("2-byte TLV entry in Ranging Response with ID {0}", type));
break; break;
case 17: case 17:
CommandPower = new CommandPowerObject(v); CommandPower = new CommandPowerObject(v);
@ -145,6 +145,11 @@ namespace skyscraper5.Docsis.MacManagement
} }
break; break;
default: default:
if (type > 18)
{
Valid = false;
return;
}
//see CM-SP-MULPIv4.0-I01-190815.pdf page 141 //see CM-SP-MULPIv4.0-I01-190815.pdf page 141
throw new NotImplementedException(String.Format("{0} Type {1}", nameof(RangingResponse), type)); throw new NotImplementedException(String.Format("{0} Type {1}", nameof(RangingResponse), type));
} }
@ -179,8 +184,8 @@ namespace skyscraper5.Docsis.MacManagement
} }
public TransmitEqualizationEncodingsForOfdmaChannels TransmitEqualizationAdjustForOfdmaChannels { get; private set; } public TransmitEqualizationEncodingsForOfdmaChannels TransmitEqualizationAdjustForOfdmaChannels { get; private set; }
public CommandPowerObject CommandPower { get; set; } private CommandPowerObject CommandPower { get; set; }
public class CommandPowerObject : Validatable class CommandPowerObject : Validatable
{ {
public CommandPowerObject(byte[] buffer) public CommandPowerObject(byte[] buffer)
{ {
@ -250,7 +255,7 @@ namespace skyscraper5.Docsis.MacManagement
public byte? UpstreamChannelIdOverride { get; private set; } public byte? UpstreamChannelIdOverride { get; private set; }
public byte? SCdmaPowerHeadroom { get; } public byte? SCdmaPowerHeadroom { get; }
public UpstreamChannelAdjustmentsObject UpstreamChannelAdjustments { get; private set; } public UpstreamChannelAdjustmentsObject UpstreamChannelAdjustments { get; private set; }
public CommandPowerObject FdxCommandedPower { get; } private CommandPowerObject FdxCommandedPower { get; }
public byte? TimingAdjustFractionalPart { get; } public byte? TimingAdjustFractionalPart { get; }
public byte? SCdmaMaximumScheduledCodes { get; } public byte? SCdmaMaximumScheduledCodes { get; }

View File

@ -30,6 +30,8 @@ namespace skyscraper5.Docsis
{ {
Type type = this.GetType(); Type type = this.GetType();
object[] customAttributes = type.GetCustomAttributes(typeof(MacManagementMessageTypeAttribute), false); object[] customAttributes = type.GetCustomAttributes(typeof(MacManagementMessageTypeAttribute), false);
if (customAttributes == null)
return null;
if (customAttributes.Length == 0) if (customAttributes.Length == 0)
return null; return null;
MacManagementMessageTypeAttribute attribute = (MacManagementMessageTypeAttribute)customAttributes[0]; MacManagementMessageTypeAttribute attribute = (MacManagementMessageTypeAttribute)customAttributes[0];

View File

@ -1,92 +0,0 @@
using System.Collections.Frozen;
using System.Collections.ObjectModel;
using System.Net;
using System.Net.NetworkInformation;
using skyscraper5.Docsis.AnnexC;
using skyscraper5.Docsis.MacManagement;
namespace skyscraper5.Docsis;
public class NullDocsisEventHandler : IDocsisEventHandler
{
private HashSet<PhysicalAddress> participants;
private uint? timing;
private Dictionary<PhysicalAddress, IPAddress> knownIps;
public void OnParticipantDetected(PhysicalAddress pa)
{
if (participants == null)
participants = new HashSet<PhysicalAddress>();
participants.Add(pa);
}
public void OnCmtsTimestamp(PhysicalAddress source, uint timing)
{
OnParticipantDetected(source);
this.timing = timing;
}
public void OnUpstreamChannel(UpstreamChannelDescriptor mmm)
{
if (_queue == null)
_queue = new Queue<object>();
_queue.Enqueue(mmm);
}
public void OnDownstreamChannel(PhysicalAddress physicalAddress, MacDomainDescriptor.DownstreamActiveChannel downstreamActiveChannel)
{
if (_queue == null)
_queue = new Queue<object>();
_queue.Enqueue(downstreamActiveChannel);
}
public void OnLearnedIpFromMac(PhysicalAddress arpHeaderSenderHardwareAddress, IPAddress arpHeaderSenderProtocolAddress)
{
if (knownIps == null)
knownIps = new Dictionary<PhysicalAddress, IPAddress>();
knownIps.Add(arpHeaderSenderHardwareAddress, arpHeaderSenderProtocolAddress);
}
public void OnKeyManagementResponse(PrivacyKeyManagementResponse privacyKeyManagementResponse)
{
if (_queue == null)
_queue = new Queue<object>();
_queue.Enqueue(privacyKeyManagementResponse);
}
public void OnDynamicServiceAddition(ushort transactionId, byte confirmationCode,
CommonTlvEncodingObject tlvEncodedInformation)
{
if (_queue == null)
_queue = new Queue<object>();
_queue.Enqueue(tlvEncodedInformation);
}
private Queue<object> _queue;
public Queue<object> GetQueue()
{
return _queue;
}
public HashSet<PhysicalAddress> GetParticipants()
{
return participants;
}
public uint GetTiming()
{
return timing.Value;
}
public ReadOnlyDictionary<PhysicalAddress, IPAddress> GetKnownIps()
{
return knownIps.AsReadOnly();
}
}

View File

@ -1,6 +1,9 @@
using Ionic.Zlib; using System;
using log4net; using System.Collections.Generic;
using log4net.Repository.Hierarchy; using System.Diagnostics;
using System.IO;
using System.Linq;
using Ionic.Zlib;
using skyscraper5.DsmCc; using skyscraper5.DsmCc;
using skyscraper5.DsmCc.Descriptors; using skyscraper5.DsmCc.Descriptors;
using skyscraper5.DsmCc.Message; using skyscraper5.DsmCc.Message;
@ -13,20 +16,13 @@ using skyscraper5.Mpeg2.Psi.Model;
using skyscraper5.Skyscraper.IO; using skyscraper5.Skyscraper.IO;
using skyscraper5.Skyscraper.Scraper; using skyscraper5.Skyscraper.Scraper;
using skyscraper5.Skyscraper.Scraper.Utils; using skyscraper5.Skyscraper.Scraper.Utils;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using Tsubasa.IO; using Tsubasa.IO;
namespace skyscraper5.Dvb.DataBroadcasting namespace skyscraper5.Dvb.DataBroadcasting
{ {
class DataCarouselDecoder : IPsiProcessor, IDisposable class DataCarouselDecoder : IPsiProcessor, IDisposable
{ {
private static readonly ILog logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name); private SiDumper siDumper;
private SiDumper siDumper;
private List<ModuleInfo> waitingModuleInfos; private List<ModuleInfo> waitingModuleInfos;
private ProgramMappingStream programMappingStream; private ProgramMappingStream programMappingStream;
private ProgramMapping programMapping; private ProgramMapping programMapping;
@ -69,7 +65,6 @@ namespace skyscraper5.Dvb.DataBroadcasting
//Undocumented, manufacterer specific data. //Undocumented, manufacterer specific data.
break; break;
default: default:
//logger.Warn(String.Format("Unknown DSM-CC Section type: 0x{0:X2}", dataCopy[0]));
return; return;
} }
} }

View File

@ -9,32 +9,114 @@ namespace skyscraper5.Dvb.DataBroadcasting.IntModel
{ {
public class IpMacNotification public class IpMacNotification
{ {
public IpMacNotification(Platform platform, Target target, Operational operational) public IpMacNotification(Platform platform, int targetType, string targetName, Operational operational)
{
Platform = platform;
Target = target;
Operational = operational;
}
public Platform Platform { get; }
public Target Target { get; }
public Operational Operational { get; }
public static IEnumerable<IpMacNotification> FlatMap(Platform platform, Target target, Operational operational)
{ {
yield return new IpMacNotification(platform, target, operational); PlatformName = platform.Name;
PlatformProviderName = platform.ProviderName;
PlatformProviderNameLanguageCode = platform.ProviderNameLanguageCode;
PlatformActionType = platform.ActionType;
PlatformNameLanguageCode = platform.NameLanguageCode;
PlatformId = platform.PlatformId;
PlatformProcessingOrder = platform.ProcessingOrder;
TargetType = targetType;
TargetName = targetName;
OperationalNetworkId = operational.NetworkId;
OperationalMpeFecAlgorithm = operational.MpeFecAlgorithm;
OperationalComponentTag = operational.ComponentTag;
OperationalTransportStreamId = operational.TransportStreamId;
OperationalTimeSliceFecId = operational.TimeSliceFecId;
OperationalTimeSlicing = operational.TimeSlicing;
OperationalOriginalNetworkId = operational.OriginalNetworkId;
OperationalServiceId = operational.ServiceId;
OperationalTimeSliceFrameSize = operational.TimeSliceFrameSize;
OperationalTimeSliceMaxAverageRate = operational.TimeSliceMaxAverageRate;
OperationalTimeSliceMaxBurstDuration = operational.TimeSliceMaxBurstDuration;
} }
public override bool Equals(object? obj) public byte? OperationalTimeSliceMaxBurstDuration { get; set; }
{
return obj is IpMacNotification notification &&
EqualityComparer<Platform>.Default.Equals(Platform, notification.Platform) &&
EqualityComparer<Target>.Default.Equals(Target, notification.Target);
}
public override int GetHashCode() public int? OperationalTimeSliceMaxAverageRate { get; set; }
{
return HashCode.Combine(Platform, Target); public int? OperationalTimeSliceFrameSize { get; set; }
}
} public ushort? OperationalServiceId { get; set; }
public ushort? OperationalOriginalNetworkId { get; set; }
public bool? OperationalTimeSlicing { get; set; }
public int? OperationalTimeSliceFecId { get; set; }
public ushort? OperationalTransportStreamId { get; set; }
public byte? OperationalComponentTag { get; set; }
public int? OperationalMpeFecAlgorithm { get; set; }
public ushort? OperationalNetworkId { get; set; }
public string TargetName { get; set; }
public int TargetType { get; set; }
public byte PlatformProcessingOrder { get; set; }
public uint PlatformId { get; set; }
public string PlatformNameLanguageCode { get; set; }
public byte PlatformActionType { get; set; }
public string PlatformProviderNameLanguageCode { get; set; }
public string PlatformProviderName { get; set; }
public string PlatformName { get; set; }
public static IEnumerable<IpMacNotification> FlatMap(Platform platform, Target target, Operational operational)
{
int results = 0;
if (target.AllReceivers)
{
yield return new IpMacNotification(platform, -1, null, operational);
yield break;
}
if (target.TargetIpSlashes != null)
{
foreach (CidrSubnet targetTargetIpSlash in target.TargetIpSlashes)
{
results++;
yield return new IpMacNotification(platform, 1, targetTargetIpSlash.ToString(), operational);
}
}
if (results == 0)
{
throw new NotImplementedException("Some Targets are not implemented properly.");
}
}
protected bool Equals(IpMacNotification other)
{
return TargetName == other.TargetName && TargetType == other.TargetType && PlatformId == other.PlatformId;
}
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((IpMacNotification)obj);
}
public override int GetHashCode()
{
return HashCode.Combine(TargetName, TargetType, PlatformId);
}
}
} }

View File

@ -27,16 +27,5 @@ namespace skyscraper5.Dvb.DataBroadcasting.IntModel
PlatformId = platformId; PlatformId = platformId;
ProcessingOrder = processingOrder; ProcessingOrder = processingOrder;
} }
}
public override bool Equals(object? obj)
{
return obj is Platform platform &&
PlatformId == platform.PlatformId;
}
public override int GetHashCode()
{
return HashCode.Combine(PlatformId);
}
}
} }

View File

@ -1,7 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Net;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using skyscraper5.Skyscraper.Net; using skyscraper5.Skyscraper.Net;
@ -15,51 +14,5 @@ namespace skyscraper5.Dvb.DataBroadcasting.IntModel
//Was Loop empty? //Was Loop empty?
public bool AllReceivers { get; set; } public bool AllReceivers { get; set; }
public override bool Equals(object? obj)
{
return obj is Target target &&
EqualityComparer<List<CidrSubnet>>.Default.Equals(TargetIpSlashes, target.TargetIpSlashes) &&
AllReceivers == target.AllReceivers;
}
public override int GetHashCode()
{
return HashCode.Combine(TargetIpSlashes, AllReceivers);
}
public uint GenerateId()
{
if (AllReceivers)
return uint.MaxValue;
foreach(CidrSubnet subnet in TargetIpSlashes)
{
IPAddress ipAddress = subnet.IpAddress;
byte[] bytes = ipAddress.GetAddressBytes();
return BitConverter.ToUInt32(bytes);
}
throw new NotImplementedException(String.Format("Failed to derive an identifier for a IP/MAC Notification target. This is a bug, the developers would need a sample of this TS to fix this."));
}
public override string ToString()
{
if (AllReceivers)
return "<All Receivers>";
StringBuilder sb = new StringBuilder();
foreach (CidrSubnet subnet in TargetIpSlashes)
{
sb.Append(subnet.ToString());
sb.Append(",");
}
return sb.ToString();
}
public object GenerateName()
{
throw new NotImplementedException();
}
} }
} }

View File

@ -17,7 +17,6 @@ namespace skyscraper5.Dvb.Descriptors
public NetworkNameDescriptor(byte[] buffer) public NetworkNameDescriptor(byte[] buffer)
{ {
NetworkName = En300468AnnexATextDecoder.GetInstance().Decode(buffer); NetworkName = En300468AnnexATextDecoder.GetInstance().Decode(buffer);
Valid = true;
} }
public string NetworkName { get; private set; } public string NetworkName { get; private set; }

View File

@ -50,8 +50,6 @@ namespace skyscraper5.Dvb.Descriptors
break; break;
} }
} }
Valid = true;
} }
public int ModulationType { get; private set; } public int ModulationType { get; private set; }
@ -102,20 +100,5 @@ namespace skyscraper5.Dvb.Descriptors
NineOfTen = 9, NineOfTen = 9,
NoConventionalCoding = 15 NoConventionalCoding = 15
} }
public override string ToString()
{
StringBuilder sb = new StringBuilder();
sb.Append(this.OrbitalPosition);
sb.Append("°");
sb.Append(this.East ? 'E' : 'W');
sb.Append("/");
sb.Append(Frequency / 100);
sb.Append("/");
sb.Append(this.Polarization.ToString()[0]);
sb.Append("/");
sb.Append(this.SymbolRate / 10);
return sb.ToString();
}
} }
} }

Some files were not shown because too many files have changed in this diff Show More