Merge remote-tracking branch 'remotes/origin/sauerland'
Some checks failed
🚀 Pack skyscraper8 / make-zip (push) Failing after 1m9s

# Conflicts:
#	skyscraper8/GS/GSE/GseReader.cs
#	skyscraper8/Properties/launchSettings.json
This commit is contained in:
feyris-tan 2025-11-06 20:02:37 +01:00
commit 28d9b9b2f8
21 changed files with 203 additions and 60 deletions

View File

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

View File

@ -2,7 +2,9 @@
using Npgsql;
using skyscraper5.src.InteractionChannel.Model;
using skyscraper5.src.InteractionChannel.Model.Descriptors;
using skyscraper5.src.InteractionChannel.Model2;
using skyscraper5.src.Skyscraper.Scraper.Storage.Utilities;
using skyscraper8.InteractionChannel.Model2;
using System;
using System.Collections.Generic;
using System.Diagnostics;
@ -969,5 +971,30 @@ namespace skyscraper5.Data.PostgreSql
command.Parameters.AddWithValue("@nid", NpgsqlTypes.NpgsqlDbType.Integer, (int)coordinate.Item1);
command.ExecuteNonQuery();
}
}
public bool TestForTerminalBurstTimePlan2(ushort interactiveNetworkId, byte tbtp2GroupId, byte frameFrameNumber)
{
throw new NotImplementedException();
}
public void StoreTerminalBurstTimePlan2(ushort interactiveNetworkId, byte tbtp2GroupId, Tbtp2.Frame frame)
{
throw new NotImplementedException();
}
public bool TestForFrameComposition2(ushort networkId, Fct2.Frame fct2)
{
throw new NotImplementedException();
}
public void InsertFct2Frame(ushort networkId, Fct2.Frame frame)
{
throw new NotImplementedException();
}
public bool TestForBroadcastConfiguration(ushort networkId, byte txTypeTxType)
{
throw new NotImplementedException();
}
public void InsertBroadcastConfiguration(ushort networkId, Bct.BroadcastConfiguration txType)
{
throw new NotImplementedException();
}
}
}

View File

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

View File

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

View File

@ -588,11 +588,9 @@ namespace skyscraper5.Skyscraper.IO.CrazycatStreamReader
{
this.wrapped = client;
this.bufferedStream = new BufferedStream(wrapped.GetStream(), 96256);
this.packetsRemainBeforeStart = 512;
}
internal TcpClient wrapped;
internal BufferedStream bufferedStream;
private int packetsRemainBeforeStart;
public void Dispose()
{
@ -615,15 +613,6 @@ namespace skyscraper5.Skyscraper.IO.CrazycatStreamReader
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);
}
}

View File

@ -80,7 +80,15 @@ namespace skyscraper5.IO.StreamReader
public bool SetChannel(int freq, int symbrate, int pol, VITERBIRATE_TYPE fec, int lof1, int lof2, int lofsw)
{
return UnsafeStreamReaderMethods.SetChannel(freq, symbrate, pol, fec, lof1, lof2, lofsw);
try
{
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)

View File

@ -0,0 +1,15 @@
[
{
"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

@ -33,6 +33,8 @@ internal class GseReader : IMisHandler
GsePacket child = new GsePacket(startIndicator, endIndicator, labelTypeIndicator);
if (!startIndicator || !endIndicator)
{
if (ms.Position == ms.Length)
return;
child.FragmentId = ms.ReadUInt8();
gseLength--;
}
@ -45,6 +47,8 @@ internal class GseReader : IMisHandler
if (startIndicator)
{
if (ms.GetAvailableBytes() < 2)
return;
child.ProtocolType = ms.ReadUInt16BE();
gseLength -= 2;
if (!endIndicator)
@ -52,6 +56,8 @@ internal class GseReader : IMisHandler
switch (labelTypeIndicator)
{
case 0:
if (ms.GetAvailableBytes() < 6)
return;
child.Label = new _6byteLabel(ms.ReadBytes(6));
gseLength -= 6;
if (!endIndicator)
@ -59,6 +65,8 @@ internal class GseReader : IMisHandler
lastLabel = child.Label;
break;
case 1:
if (ms.GetAvailableBytes() < 3)
return;
child.Label = new _3byteLabel(ms.ReadBytes(3));
gseLength -= 3;
if (!endIndicator)
@ -81,6 +89,8 @@ internal class GseReader : IMisHandler
if (gseLength > ms.GetAvailableBytes())
return;
if (gseLength <= -1)
return;
child.GseDataBytes = ms.ReadBytes(gseLength);
if (!startIndicator && endIndicator)
@ -120,6 +130,21 @@ internal class GseReader : IMisHandler
return;
}
if (!child.StartIndicator && !child.EndIndicator)
{
if (fragmentations == null)
{
//We haven't seen any starting frames yet, so we can't use an inbetween frame. We can throw this away.
return;
}
if (fragmentations[child.FragmentId.Value] == null)
{
//fragment beginning missing, we can throw this away.
return;
}
throw new NotImplementedException(child.ToString());
}
if (child.StartIndicator && child.EndIndicator)
{
switch (child.ProtocolType)
@ -129,10 +154,10 @@ internal class GseReader : IMisHandler
break;
default:
if (warnedEthertypes == null)
warnedEthertypes = new bool[0xffff];
warnedEthertypes = new bool[ushort.MaxValue];
if (!warnedEthertypes[child.ProtocolType.Value])
{
logger.WarnFormat("This GSE contains other traffic types (type {0:X4}) besides IP (type 0x0800). If it's not too much trouble, please consider submitting a sample.",child.ProtocolType.Value);
logger.WarnFormat("This GSE contains other traffic types (type 0x{0:X4}) besides IP (type 0x0800). If it's not too much trouble, please consider submitting a sample.",child.ProtocolType.Value);
warnedEthertypes[child.ProtocolType.Value] = true;
}
break;

View File

@ -236,7 +236,10 @@ namespace skyscraper5.Mpeg2
//Marker Flag
markerBit = (escrBinary & 0x0000000000000001) != 0;
if (!markerBit)
throw new DvbException("invalid pes packet");
{
//invalid PES
return;
}
}
if (EsRateFlag)

View File

@ -34,6 +34,7 @@ using skyscraper8.SatIp;
using skyscraper8.SatIp.RtspResponses;
using skyscraper8.SimpleServiceDiscoveryProtocol;
using skyscraper8.Skyscraper.Math;
using skyscraper8.Skyscraper;
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config")]
namespace skyscraper5

View File

@ -2,7 +2,11 @@
"profiles": {
"skyscraper8": {
"commandName": "Project",
<<<<<<< HEAD
"commandLineArgs": "\"D:\\sorglos-iww-rww-aca-oca.ts\"",
=======
"commandLineArgs": "udpin udp://127.0.0.1:6970",
>>>>>>> remotes/origin/sauerland
"remoteDebugEnabled": false
},
"Container (Dockerfile)": {

View File

@ -572,6 +572,12 @@ namespace skyscraper8.Skyscraper.FrequencyListGenerator
if (caps.HasFlag(Caps.SR_SIGINFO))
{
int polarity = result.SearchResult.Pol;
int freq = result.SearchResult.Freq;
bool isHighBand = freq > config.LnbType.LofSw * 1000;
bool isHorizontal = polarity == 0;
SendDiseqcCommand(isHighBand, isHorizontal);
logger.Log(PluginLogLevel.Info, string.Format("Trying to BLScanEx..."), 8);
if (!config.StreamReader.BLScanEx(result.SearchResult.Freq, 5000, result.SearchResult.Pol,
config.LnbType.Lof1 * 1000, config.LnbType.Lof2 * 1000,
@ -587,35 +593,31 @@ namespace skyscraper8.Skyscraper.FrequencyListGenerator
if (!satelliteSr.Lock)
{
logger.Log(PluginLogLevel.Info, string.Format("Trying to SetChannel..."), 8);
bool channel = config.StreamReader.SetChannel(result.SearchResult.Freq, result.SearchResult.SR, result.SearchResult.Freq, result.SearchResult.FEC, config.LnbType.Lof1 * 1000, config.LnbType.Lof2 * 1000, config.LnbType.LofSw * 1000);
if (!channel)
int attempts = (result.SearchResult.Freq / 1000).GetHighestDigit();
bool success = false;
for (int i = 0; i < attempts; i++)
{
result.State = BlindscanResultState.TuningFailed;
config.Ui.OnBlindscanLockFail(satelliteSr, result.State);
config.DataStorage.UpdateTransponderState(jobInDb, result.IsSatellite(), result.SearchResult, result.State, result.SearchResult2);
return;
}
else
{
logger.Log(PluginLogLevel.Info, string.Format("Trying to get SignalInfo..."), 8);
bool signalInfo = config.StreamReader.SignalInfo(ref satelliteSr);
if (!signalInfo)
Thread.Sleep(1000);
result.State = BlindscanResultState.Retrying;
logger.Log(PluginLogLevel.Info, string.Format("Retrying BLScanEx... ({0}/{1})", i + 1, attempts + 1), 8);
bool retryResult = config.StreamReader.BLScanEx(result.SearchResult.Freq, 5000, result.SearchResult.Pol, config.LnbType.Lof1 * 1000, config.LnbType.Lof2 * 1000, config.LnbType.LofSw * 1000, 1000000, (STD_TYPE)result.SearchResult.StdType,ref satelliteSr);
if (!retryResult)
{
result.State = BlindscanResultState.TuningFailed;
config.DataStorage.UpdateTransponderState(jobInDb, result.IsSatellite(), result.SearchResult, result.State, result.SearchResult2);
config.Ui.OnBlindscanLockFail(satelliteSr, result.State);
return;
}
result.State = BlindscanResultState.BlScanFailure;
continue;
}
if (!satelliteSr.Lock)
{
result.State = BlindscanResultState.NoLock;
config.DataStorage.UpdateTransponderState(jobInDb, result.IsSatellite(), result.SearchResult, result.State, result.SearchResult2);
config.Ui.OnBlindscanLockFail(satelliteSr, result.State);
return;
continue;
}
}
success = true;
break;
}
config.DataStorage.UpdateTransponderState(jobInDb, result.IsSatellite(), result.SearchResult, result.State, result.SearchResult2);
if (!success)
return;
logger.Log(PluginLogLevel.Debug, "Sucessfully tuned with retries.");
}
if (caps.HasFlag(Caps.SR_MISSEL))

View File

@ -27,6 +27,7 @@ namespace skyscraper5.src.Skyscraper.FrequencyListGenerator
BlScanFailure = 108,
DataSaving = 4,
IqCollecting = 5,
IqSaving = 6
}
IqSaving = 6,
Retrying = 7
}
}

View File

@ -52,11 +52,19 @@ namespace skyscraper8.Skyscraper.FrequencyListGenerator
if (!_proxiedStreamReader.StartDvbEx(targetTuner))
return false;
if (lastDiseqcType != uint.MaxValue)
/*if (lastDiseqcType != uint.MaxValue)
{
if (!_proxiedStreamReader.SendDiSEqC(lastDiseqcType, lastDiseqcOpcode))
return false;
}
}*/
if (lastDiseqcOpcode.HasFlag(DiSEqC_Opcode.DISEQC_HORIZONTAL))
{
if (!_proxiedStreamReader.StopDVB())
return false;
if (!_proxiedStreamReader.StartDvbEx(targetTuner))
return false;
}
currentlySelectedTuner = targetTuner;
return true;
@ -260,9 +268,13 @@ namespace skyscraper8.Skyscraper.FrequencyListGenerator
if (!SwitchTuner(_setFilterTuner))
return false;
bool diseqc = SendDiSEqC(lastDiseqcType, lastDiseqcOpcode);
if (!_proxiedStreamReader.BLScanEx(freq, freq_range, pol, lof1, lof2, lofsw, minsr, std, ref pSearchResult))
return false;
logger.InfoFormat("Frequency: {0}, Polarity: {1}, Lock: {2}", freq, pol, pSearchResult.Lock);
return true;
}

View File

@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace skyscraper8.Skyscraper
{
internal static class IntegerExtensions
{
public static int GetHighestDigit(this int source)
{
int result = 0;
while (source > 0)
{
int currentDigit = source % 10;
if (currentDigit > result)
result = currentDigit;
source /= 10;
}
return result;
}
}
}

View File

@ -30,9 +30,10 @@ namespace skyscraper5.src.Skyscraper
string versionString = version.ToString();
switch(versionString)
{
case "1.2.5.208": return QualificationToolResultEnum.Good;
case "1.2.5.194": return QualificationToolResultEnum.Bad; //Won't find most transponders with a 6903x
case "1.2.5.176": return QualificationToolResultEnum.Bad; //Won't find most transponders with a 6903x
case "1.2.4.101": return QualificationToolResultEnum.Good; //Works great, but is reather slow with a 6903x
case "1.2.4.101": return QualificationToolResultEnum.Bad; //Breaks GS encapsulation on 6903x.
default: return QualificationToolResultEnum.Unknown;
}
}

View File

@ -1276,14 +1276,21 @@ namespace skyscraper5.Skyscraper.Scraper.Storage.InMemory
return 0;
}
private byte[][] _tmst;
public byte[] GetTmst(ushort interactiveNetworkId)
{
throw new NotImplementedException();
if (_tmst == null)
return null;
if (_tmst[interactiveNetworkId] == null)
return null;
return _tmst[interactiveNetworkId];
}
public void InsertTmst(ushort interactiveNetworkId, byte[] modes)
{
throw new NotImplementedException();
if (_tmst == null)
_tmst = new byte[ushort.MaxValue][];
_tmst[interactiveNetworkId] = modes;
}
public void UpdateTmst(ushort interactiveNetworkId, byte[] modes)

View File

@ -32,6 +32,7 @@ namespace skyscraper5.Skyscraper.Text.Encodings
case 0xc7: resultBuilder.Append('Ç'); break;
case 0xc9: resultBuilder.Append('É'); break;
case 0xcb: resultBuilder.Append('¼'); break;
case 0xcd: resultBuilder.Append('Í'); break;
case 0xd6: resultBuilder.Append('Ö'); break;
case 0xdc: resultBuilder.Append('Ü'); break;
case 0xdf: resultBuilder.Append('ß'); break;
@ -59,6 +60,7 @@ namespace skyscraper5.Skyscraper.Text.Encodings
case 0xfa: resultBuilder.Append('ú'); break;
case 0xfb: resultBuilder.Append('û'); break;
case 0xfc: resultBuilder.Append('ü'); break;
case 0xfd: resultBuilder.Append('ý'); break;
default:
throw new NotImplementedException(String.Format("0x{0:X2}", preprocessed[i]));
}

View File

@ -78,19 +78,21 @@ namespace skyscraper5.Skyscraper.Text.Encodings
case 0xee: resultBuilder.Append('ī'); break;
case 0xf0: resultBuilder.Append('š'); break;
case 0xf1: resultBuilder.Append('ń'); break;
case 0xf2: resultBuilder.Append('ņ'); break;
case 0xf3: resultBuilder.Append('ó'); break;
case 0xf5: resultBuilder.Append('õ'); break;
case 0xf6: resultBuilder.Append('ö'); break;
case 0xf8: resultBuilder.Append('ų'); break;
case 0xf9: resultBuilder.Append('ł'); break;
case 0xfa: resultBuilder.Append('ś'); break;
case 0xfb: resultBuilder.Append('ū'); break;
case 0xfc: resultBuilder.Append('ü'); break;
case 0xfd: resultBuilder.Append('ż'); break;
case 0xfe: resultBuilder.Append('ž'); break;
case 0xff: resultBuilder.Append(''); break;
default:
throw new NotImplementedException(String.Format("0x{0:X2}", preprocessed[i]));
}
case 0xf8: resultBuilder.Append('ų'); break;
case 0xf9: resultBuilder.Append('ł'); break;
case 0xfa: resultBuilder.Append('ś'); break;
case 0xfb: resultBuilder.Append('ū'); break;
case 0xfc: resultBuilder.Append('ü'); break;
case 0xfd: resultBuilder.Append('ż'); break;
case 0xfe: resultBuilder.Append('ž'); break;
case 0xff: resultBuilder.Append(''); break;
default:
throw new NotImplementedException(String.Format("0x{0:X2}", preprocessed[i]));
}
}
return resultBuilder.ToString().ToCharArray();

View File

@ -26,6 +26,7 @@ namespace skyscraper5.Skyscraper.Text.Encodings
case 0xa2: resultBuilder.Append(''); break;
case 0xa3: resultBuilder.Append('£'); break;
case 0xa4: resultBuilder.Append('€'); break;
case 0xa8: resultBuilder.Append('¨'); break;
case 0xa9: resultBuilder.Append('©'); break;
case 0xab: resultBuilder.Append('«'); break;
case 0xad: resultBuilder.Append('\u00AD'); break;

View File

@ -32,17 +32,26 @@ namespace skyscraper5.Teletext
{
//Non-Displayable Packet Y = 26 to 31
if (ms.GetAvailableBytes() == 0)
{
Valid = false;
return;
}
DesignationCode = ms.ReadUInt8();
if (ms.GetAvailableBytes() < 39)
return;
{
Valid = false;
return;
}
CharacterCodes = ms.ReadBytes(39);
}
else
{
//Normal Packet (Y = 1 to 25)
if (ms.GetAvailableBytes() < 40)
return;
{
Valid = false;
return;
}
CharacterCodes = ms.ReadBytes(40);
}
}