# skyscraper5 TODO

* [DONE] LocalStreamReader (und rsr-server) ausgliedern, damit Main Assembly wieder in MSIL kompiliert werden kann.
* [DONE] LocalStreamReader als eigene Assembly (Library)
* [DONE] rsr-server als eigene eigene Assembly (Console Application)
* [DONE] dvbtmagic als eigene Assembly, hat ja nicht wirklich was mit skyscraping zu tun.
* AC3 Parser (kein Decoder) fur Ancillary Data
* MP2 Parser (kein Decoder) fur Ancillary Data
* AAC Parser (kein Decoder) fur Ancillary Data
* MPEG-2 Parser (kein Decoder) fur Auxillary Data
* H.264 Parser (kein Decoder) fur Auxillary Data
* H.265 Parser (kein Decoder) fur Auxillary Data
* [DONE] LNB Typen definieren, und in der UI einstellbar machen
* [DONE] LNB Typen sollten pro Tuner-Anschluss, nicht pro Satellit definiert werden.
* [DONE] Antennen Typen definieren, und in der UI einstellbar machen
* [DONE] GPS Position sollte ermittelt werden konnen.
  * [DONE] manuell
  * [DONE] direkt angeschlossenes Gerat per SerialPort
  * [DONE] via TCP aus gpsd
  * [DONE] via UDP Broadcast/Multicast
* [DONE] Blindscan-Jobs in Datenbank schreiben. (inkl. Tuner-ID/MAC, LNB-Typ, Antennen-Typ und GPS Daten)
* [DONE] Blindscan-Ergebnisse in Datenbank schreiben
* rudimanteren Java-Port 
  * (inkl. Disketten-Image for the lulz - keine Abhangigkeiten außer vielleicht Apache Commons ;) )
* [DONE] uberlegen, ob sich satbeams.com scrapen lasst. 
  * [DONE] Dabei einzelne Satelliten, Beams und Footprints dieser Beams in DB schreiben, 
  * und dann in der UI Moglichkeit bieten, anhand von GPS-Daten, Antennen-Typ und LNB-Typ zu ermitteln welche Beams empfangbar sind.
  * [DONE] satbeams.com geht definitiv nicht.
  * [DONE] Aber das da: https://genmap.lyngsat.org/server2/kml
  * [DONE] Das ist ein JSON, welches eine Liste an KML-Files zuruckgibt.
  * [DONE] KML File parsen trivial - ist XML.
  * [DONE] mithilfe von https://gis.stackexchange.com/questions/42879/check-if-lat-long-point-is-within-a-set-of-polygons-using-google-maps/46720#46720 testen ob in shape
* Blockstream parsen. Dazu Blog-Post "Anatomy of Blockstream Satellite" zur Hilfe nehmen. ( https://destevez.net/2022/10/anatomy-of-blockstream-satellite/ )
* Client/Server-Architektur fur ScraperStorage
* [DONE] Architektur aufbauen, um Handler fur eingehende MPE/IP Pakete auszugliedern
  * [DONE] APRS in eben jenes ausgliedern
* [DONE] Plugin-System so ausbauen, dass Assembly-Scanning nur noch an einer Stelle notwendig ist.
  * [DONE] T2MI Packet Types
  * [DONE] StreamTypeAutodetection 
	* [DONE] Behandlung des Gewinners nicht im SkyscraperContext sondern im Contestant selber, sonst ist's witzlos.
  * [DONE] ScraperStorageFactoryConnectionManager
  * [DONE] TunerFactoryConnectionManager
  * [DONE] TsDescriptorUnpacker
  * [DONE] Mpeg2ExtensionDescriptorConverter
  * [DONE] UserDefinedDescriptorUnpacker
	* [DONE] bereits vorhandene PrivateDataSpecifiers in eigene Assemblys auslagern
  * [DONE] DvbExtensionDescriptorConverter
  * [DONE] DsmCcMessageUnpacker
  * [DONE] PushMacManagementMessage
* [DONE] GPS in der UI auswählbar machen
  * [DONE] Optional Fenster mit GPS Daten einblenden lassen
* [DONE] GPS via GeoIP simulieren
* [DONE] Kabel-TV Frequenzlistengenerator
* [DONE] sauberen Exception-Tree aufbauen, mit Vererbung und allem drum und dran.
* Tests mit Code-Coverage
* [DONE] TS-Generator als System.IO.Stream
  * [DONE] PAT-Generator
  * [DONE] PMT-Generator
  * [DONE] SDT-Generator
  * [DONE] CAT-Generator
  * [DONE] TDT-Generator
  * [DONE] TOT-Generator
* [DONE] Namespaces aufräumen
* [DONE] StreamReader Versionen prüfen. Eventuell eine KnownIssues Funktion zum Server hinzufügen? (Beispiel: StreamReader 1.2.4.101 sehr gut, StreamReader 1.2.5.176 doof)
  * [DONE] Dafür PE-Parser hinzufügen (um DLLs und EXEn zu parsen)
  * [DONE] DLL-Versionsinfo aus PE lesen.
  * [DONE] 1.2.5.194	-> bad
  * [DONE] 1.2.5.176 	-> bad
  * [DONE] 1.2.4.101	-> good
* Inhalte von einer Datenbank in eine andere kopieren.
* [DONE] Im SDT Parser sollte der Message Descriptor geparst werden.
  * [DONE] Die Messages sollten natürlich auch in eine Datenbank geschrieben werden.
* [DONE] In TestDrid: Kooperativer Blindscan. Scannen mit einer Karte, zappen mit einer anderen.
  * Tuning Retries
* ExternalEsIdDescriptor implementieren.
  * Natürlich auch in die Datenbank schreiben.
* Unbekanntes Text Encoding auf Eutelsat 7, 12648 H, MIS3
* [DONE] "Unknown Protocol" 50
* [DONE] "Unknown Protocal" 47
* [DONE] In MinioObjectStorage.cs bei Zeile 132 - behandeln dass nicht immer unbedingt eine MinioException rauskommt!
* skyscraper5.Ietf.Rfc971.InternetHeader sollte Validatable implementieren.
* In Testdrid: Einen Notizblock
* Wenn ein Blindscan false zurückgibt, aber dennoch Ergebnisse geliefert hat, diese trotzdem abklopfen.
* [DONE] Paketfiltersystem hinzufügen, statt Pakete manuell zu droppen.
	* [DONE] Aufzeichnungssystem in den Paketfilter verlagern.
	* [DONE] Scramble Paket Dropper
	* Tester ob zwischen Scramble und Non-Scramble geswitcht wird.
		* Den Screenshotter da dran hängen!
	* [DONE] TEI Paket Dropper
	* [DONE] Prioritätensystem da dran hängen. (Schließlich sollen die Pakete immer zuerst aufgezeichnet werden)
	* [DONE] Skip x  (512) Packets Filter
	* PCR Monitor dorthin verlagern
	* TCP Proxy dorthin verlagern
* Descriptor 0x2E (46) bei PMT (TsDescriptorUnpacker.cs, Zeile 81)
* Netzwerkschnittstelle einbauen
	* PCAP Writer
	* UDPDump
	* TAP Adapter (siehe https://github.com/HBSnail/UniversalTunTapDriver/blob/master/README.md )
	* /dev/null
	* IP-in-IP Encapsulation, new Socket(AddressFamily.InterNetwork, Socket.Raw, ProtocolType.IP)
* [DONE] Intelsat Internet reverse engineeren. Gutes Beispiel auf Intelsat 68,5°E 12625/H. TS Header ist nicht 4 sondern 9 Bytes
	* [DONE] Oder auf Intelsat 72,1°E 12718/H
	* [DONE] Hängt möglicherweise mit Digital Devices BBFRAMES zusammen?
		* Ja, tut es, deshalb auch BBFRAME Header parsen
* SeaweedFS als File-Storage implementieren
* In GSE und MPE Paketen:
  * [DONE] DNS Responses parsen und daraus "lernen" 
	* [DONE] DNS Type 39
  * UDP L2TP & L2F Pakete parsen & reingucken. (z.B. in skyscraper_20240830_1254_0235E_11620_H_5931.ts)
  * NTP parsen (z.B. in 12551_h_intelsat_like_internet.ts)
  * [DONE] Von hier klauen: https://github.com/kapetan/dns
  * In IP-in-IP Pakete reingucken.
  * In IPv6 Encapsulation Pakete reingucken.
  * In GRE Pakete reingucken.
  * In RFC3652 Pakete (Type 253) reingucken. Ist in der Payload das Offset 6 = 0x45, so ist ein getunneltes IPv4 Paket. :)
* [DONE] ServiceListDescriptor im BatParser
* [DONE] ExtensionDescriptor 32, in DvbExtensionDescriptorConverter, Zeile 35
* [DONE] CAID 0x0649 in CaSystemNames
* [DONE] DNS Record Type 48 [ {Z:\Freebies\Datasets\SkyscraperLibrarian\DVB-S\E0008_Ku_Thor\skyscraper_20230404_2125_0010W_11876_V_19999.ts}, {Z:\Freebies\Datasets\SkyscraperLibrarian\DVB-S August 2024\Telstar15\skyscraper_20240826_1530_0150W_12596_V_44999.ts}  ]
* [DONE] RCS Maps parsen
* [DONE] RCS Maps in DB schreiben
* [DONE] NuGet Caching Proxy
* [DONE] DNS Record Type 49213
* HLS Stream
  * benötigt vorher einen PCR delayten Stream
	* benötigt vorher einen Rate-Limited Stream
* [DONE] ScraperStorage ablösen, und stattdessen DataStorage und FileStorage einzeln setzen.
* .tar/.tar.gz File mit FilesystemStorage Inhalt importieren
* WGS84 zu Lat/Lon konvertieren - für RCS-Map.
	* Beispielcode in C# hier: https://stackoverflow.com/a/16660841
	* Benötigt vorher eine Ermittelung der UTM-Zone:
		* Beispielcode zur Ermittelung der UTM-Zone (in R) hier: https://stackoverflow.com/a/68725547
* [DONE] IP-Protokoll 139 (skyscraper_20230408_1727_0390E_12739_H_3926_gse.ts)
* [DONE] DNS Record Type 20366 (skyscraper_20230410_1450_0660E_12626_V_38329.ts)
* [DONE] DNS IN ( {Z:\Freebies\Datasets\SkyscraperLibrarian\DVB-S August 2024\Telstar15\skyscraper_20240826_1530_0150W_12596_V_44999.ts} )
* [DONE] Für BigFiles: Gesplitteter Stream, für FAT32 und Freunde
* [DONE] Einen "Forget Blindscan Job" Button in der UI
* TransportProtocolDescriptor - unbekannte ProtocolIDs ohne Exception behandeln. (Vielleicht eine Warning?)
* Weitere Datenbanktreiber
  * Microsoft SQL Server
  * Oracle
  * Cassandra
  * SQLite 
  * MongoDB
  * Redis
  * IBM DB2
  * Firebird
  * ScraperStorage: Big File
  * ScraperStorage: Big File mit Index
