From 51a83ea68dd3ee75ece49214d23750669db1691d Mon Sep 17 00:00:00 2001 From: Julian Kiedaisch Date: Tue, 29 Sep 2026 21:14:01 +0000 Subject: [PATCH] feat(fls): file systems of PCs and notebooks as Java loads them readSystemSoftware reads a host's file system: Java's tree of DefaultMutableTreeNodes, directories named by their user object, files as Datei (by setters or the three-argument constructor), rooted at arbeitsVerzeichnis (up to 1.10) or root. All 23 corpus files match Java, every file compared by name, type and the SHA-256 of its content. Routers and home routers have files in Java too, but their constructor makes them from templates (the start page of the firewall's web interface); they are not in the file and not claimed here. Co-Authored-By: Claude Opus 5.5 --- CHANGES.md | 2 +- corpus/corpus.java.json | 2754 ++++++++++++++++++++++++++ packages/fls/src/systemSoftware.ts | 66 +- packages/fls/test/topology.test.ts | 74 +- tools/java-oracle/README.md | 5 +- tools/java-oracle/src/FlsOracle.java | 40 + 6 files changed, 2936 insertions(+), 5 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index e9862cd..4e55863 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -35,7 +35,7 @@ Swift-Pfade relativ zu `filius-ipad/ios/FiliusPad/TopologyEditor/` (Stand | `src/javabeans.ts`, `src/javaDefaults.json` | — | neu: XMLEncoder-Leser nach den Regeln von `java.beans.XMLDecoder` (Swift liest elementweise und verliert geteilte Werte); Getter-Standardwerte und statische Konstanten mit `tools/java-oracle` gemessen | | `src/importProject.ts` | `Persistence/TopologyProjectStore.swift` (Knoten, Ports, Kabel, IP-Konfiguration, Switch/WLAN, Routen, RIP, Firewall, DHCP, Portweiterleitung, Modem, Doku-Elemente des Imports) | übertragen, Eingabe ist Javas Sicht: Name und Port-Anzahl wie Java, abgelehnte Adresse → Swift-Standard, Router-Standardgateway wie Java (Swift verliert es), jede Router-Firewall eingetragen, Konfigurationstexte wie in Swift getrimmt; gegen Swifts importiertes Modell auf 13 Dateien geprüft | | `test/importProject.test.ts` | — | neu: Swifts importiertes Modell (13 Dateien, zwei begründete Abweichungen), Vollständigkeit aller 23, Pings im Kern (über einen Router; über drei Router mit manuellen Routen und Router-Gateways) | -| `src/systemSoftware.ts` | Java `SwitchFirmware`, `Betriebssystem`, `VermittlungsrechnerBetriebssystem`, `GatewayFirmware`, `Weiterleitungstabelle`, `Firewall`, `FirewallRule`, `DHCPServer`, `ModemFirmware` | neu nach Java: SSID, Lernzeit, RIP, manuelle Routen, Router-Firewall (an allen Stellen, an denen die Datei sie erreicht), DHCP, statische NAT, Modem; `Character.isWhitespace` am JDK gemessen; gegen Java geprüft | +| `src/systemSoftware.ts` | Java `SwitchFirmware`, `Betriebssystem`, `VermittlungsrechnerBetriebssystem`, `GatewayFirmware`, `Weiterleitungstabelle`, `Firewall`, `FirewallRule`, `DHCPServer`, `ModemFirmware`, `Dateisystem`, `Datei` | neu nach Java: SSID, Lernzeit, RIP, manuelle Routen, Router-Firewall (an allen Stellen, an denen die Datei sie erreicht), DHCP, statische NAT, Modem, Dateisystem von Rechner und Notebook; `Character.isWhitespace` am JDK gemessen; gegen Java geprüft | | `src/javaIp.ts` | Java `IP.inetAton`/`ipCheck` | neu nach Java; an 46 Fällen mit Java gemessen | | `src/topology.ts` | Java `SzenarioVerwaltung.netzwerkLaden`, Konstruktoren und Setter der Geräte; Swift `Persistence/TopologyProjectStore.swift` (Parser) als Vergleich | neu nach Java statt Übertragung: Geräteart aus der Klasse statt aus der Beschriftung, Geräte ohne Koordinaten bei 0,0 statt verworfen, Werte durch Javas Setter | | `test/javabeans.test.ts` | — | neu: je XMLDecoder-Regel ein Test; alle 23 Korpus-Dateien, Klasse und Position jedes Geräts wie Java | diff --git a/corpus/corpus.java.json b/corpus/corpus.java.json index 8c7f2d1..19c0d4d 100644 --- a/corpus/corpus.java.json +++ b/corpus/corpus.java.json @@ -26,6 +26,10 @@ "system": { "ssid": "MyWiFi", "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": true, "dhcpServer": { "aktiv": false, @@ -66,6 +70,30 @@ ], "system": { "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 243, + "sha256": "82d08041730728a01f9c7714db912699ff79a7a1b2211c48e283d6b8aec3f272", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": true, @@ -123,6 +151,30 @@ "system": { "ripEnabled": true, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 394, + "sha256": "df21e97824b59cc7c88e1cfdedad94f20ca595af4577751b641ef42b9d918bca", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -167,6 +219,30 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 538, + "sha256": "1966c377d3651754cfc513da8f425ec0e943e6cc5e8f7112aa06102e21eb0775", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -203,6 +279,23 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "dns", + "children": [ + { + "file": "hosts", + "type": null, + "length": 36, + "sha256": "c4f62d9c112a0def5f67e6b803e8a55886a46712b52bfb73941e12f2f8a63c59", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -239,6 +332,10 @@ "system": { "ssid": "MyWiFi", "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": true, "dhcpServer": { "aktiv": false, @@ -688,6 +785,23 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "dns", + "children": [ + { + "file": "hosts", + "type": null, + "length": 84, + "sha256": "84d02c9a311e5cc7d1c45f3da3f30331903e8f8fc6c45e0d8a2500d393a6adb9", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -724,6 +838,34 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 557, + "sha256": "7d56103add4688141350c5901c1c9bb2c9495a054531b71a32cc9f96aed4ef45", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + }, + { + "directory": "www.conf", + "children": [] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -760,6 +902,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -796,6 +942,23 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "dns", + "children": [ + { + "file": "hosts", + "type": null, + "length": 47, + "sha256": "d6fcb4528251a65a261ddefad36602c40aa55574cdb88d711a8955d999f2473a", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -873,6 +1036,23 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "dns", + "children": [ + { + "file": "hosts", + "type": null, + "length": 68, + "sha256": "2f916dbcb3ff8d29840ee37fe341fd8d323960526e0c891128963217d4039e53", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -909,6 +1089,23 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "dns", + "children": [ + { + "file": "hosts", + "type": null, + "length": 34, + "sha256": "fdba09cf276c8c66cf4676b2c5b741075268911b5ebac2c384c187a6f7137282", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -1126,6 +1323,54 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "dns", + "children": [ + { + "file": "hosts", + "type": null, + "length": 33, + "sha256": "3d801783d135a0e42a61ecbba025a318f92c79945e0ca7ae6ea54698b6f5e917", + "children": [] + } + ] + }, + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 557, + "sha256": "156dfa798344ce7f75e3f40ab416c5e2c994c68a110cec5c8d686c31a403f10b", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + }, + { + "directory": "www.conf", + "children": [ + { + "file": "vhosts", + "type": null, + "length": 52, + "sha256": "528219400a878871604b1ed891f8926fcf142fbaa329722d1b6fcec159c54241", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -1162,6 +1407,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -1198,6 +1447,42 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 557, + "sha256": "7d56103add4688141350c5901c1c9bb2c9495a054531b71a32cc9f96aed4ef45", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + }, + { + "directory": "www.conf", + "children": [ + { + "file": "vhosts", + "type": null, + "length": 50, + "sha256": "49583d26538d3b0a66f4332e97ffeaeee1b91c4199dc44deaaa5f1e40ffc6089", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -1239,6 +1524,42 @@ "system": { "ripEnabled": false, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 394, + "sha256": "df21e97824b59cc7c88e1cfdedad94f20ca595af4577751b641ef42b9d918bca", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + }, + { + "directory": "www.conf", + "children": [ + { + "file": "vhosts", + "type": null, + "length": 50, + "sha256": "49583d26538d3b0a66f4332e97ffeaeee1b91c4199dc44deaaa5f1e40ffc6089", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -1356,6 +1677,18 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "file": "konten.txt", + "type": "text/txt", + "length": 84, + "sha256": "011c91d5e632db92ddd42ddf351d2741a99be3410f76b6528fbeca029ce90ab5", + "children": [] + } + ] + }, "dhcpClient": true, "dhcpServer": { "aktiv": false, @@ -1433,6 +1766,18 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "file": "konten.txt", + "type": "text/txt", + "length": 88, + "sha256": "f4692cfecba61e6a4f0c6db1009cf76756d0a0239b1d2ca4ab5bd95693c3d63f", + "children": [] + } + ] + }, "dhcpClient": true, "dhcpServer": { "aktiv": false, @@ -1481,6 +1826,34 @@ "system": { "ripEnabled": true, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 394, + "sha256": "df21e97824b59cc7c88e1cfdedad94f20ca595af4577751b641ef42b9d918bca", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + }, + { + "directory": "www.conf", + "children": [] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -1544,6 +1917,34 @@ "system": { "ripEnabled": true, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 394, + "sha256": "df21e97824b59cc7c88e1cfdedad94f20ca595af4577751b641ef42b9d918bca", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + }, + { + "directory": "www.conf", + "children": [] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -1600,6 +2001,34 @@ "system": { "ripEnabled": true, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 394, + "sha256": "df21e97824b59cc7c88e1cfdedad94f20ca595af4577751b641ef42b9d918bca", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + }, + { + "directory": "www.conf", + "children": [] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -1670,6 +2099,34 @@ "system": { "ripEnabled": true, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 394, + "sha256": "df21e97824b59cc7c88e1cfdedad94f20ca595af4577751b641ef42b9d918bca", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + }, + { + "directory": "www.conf", + "children": [] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -1726,6 +2183,34 @@ "system": { "ripEnabled": true, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 394, + "sha256": "df21e97824b59cc7c88e1cfdedad94f20ca595af4577751b641ef42b9d918bca", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + }, + { + "directory": "www.conf", + "children": [] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -1775,6 +2260,34 @@ "system": { "ripEnabled": true, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 394, + "sha256": "df21e97824b59cc7c88e1cfdedad94f20ca595af4577751b641ef42b9d918bca", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + }, + { + "directory": "www.conf", + "children": [] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -1819,6 +2332,30 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "dns", + "children": [ + { + "file": "hosts", + "type": null, + "length": 214, + "sha256": "8c8286bc4ce20a063fd6bcea621c7e576ec1b55b172c3f33d226be0d34cb32a4", + "children": [] + }, + { + "file": "restored-1770036475063", + "type": "text", + "length": 215, + "sha256": "024f81af0105fc629070ef4c3de21426c0e37cac4a415c1cb3ad01edf726e8ab", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -1855,6 +2392,30 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 500, + "sha256": "94fc9cc5ea871634a045e3e2c01838796d4623ec4488ea23cff50e949c2929b4", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -1891,6 +2452,23 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "mailserver", + "children": [ + { + "file": "konten.txt", + "type": "txt", + "length": 90, + "sha256": "378f8265131d36031047d7918f0e5931c746c52bea39758143f7a42ed16cc379", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -1927,6 +2505,23 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "mailserver", + "children": [ + { + "file": "konten.txt", + "type": "txt", + "length": 46, + "sha256": "d860c7be31f9fa05c689eba6f5b527371e3c81de5e54aa93719a09decd44fb93", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -1963,6 +2558,42 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 502, + "sha256": "742fcdde965a05cb80624374067cab0560a9196d224d97d5e7ab9bae6c507127", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + }, + { + "directory": "dns", + "children": [ + { + "file": "hosts", + "type": null, + "length": 33, + "sha256": "5f8235d016bcc8024b554ec91df22ec0bebab7f799fc6009bbd34073224c87d4", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": true, @@ -2006,6 +2637,30 @@ ], "system": { "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 243, + "sha256": "82d08041730728a01f9c7714db912699ff79a7a1b2211c48e283d6b8aec3f272", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": true, "dhcpServer": { "aktiv": true, @@ -2051,6 +2706,18 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "file": "konten.txt", + "type": "text/txt", + "length": 78, + "sha256": "37acca898f0c5587824be7fe2ea7ca4771976a2a16b90dc262531126d4970437", + "children": [] + } + ] + }, "dhcpClient": true, "dhcpServer": { "aktiv": false, @@ -2087,6 +2754,18 @@ "system": { "ssid": "MyWiFiNetwork", "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "file": "konten.txt", + "type": "text/txt", + "length": 81, + "sha256": "cd35dc5dacfe0681c4ca63b0930d64586328f35313bfd207fe90c9647361de63", + "children": [] + } + ] + }, "dhcpClient": true, "dhcpServer": { "aktiv": false, @@ -2123,6 +2802,10 @@ "system": { "ssid": "MyWiFiNetwork", "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": true, "dhcpServer": { "aktiv": false, @@ -2159,6 +2842,10 @@ "system": { "ssid": "MyWiFiNetwork", "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": true, "dhcpServer": { "aktiv": false, @@ -2195,6 +2882,10 @@ "system": { "ssid": "MyWiFiNetwork", "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": true, "dhcpServer": { "aktiv": false, @@ -2276,6 +2967,30 @@ ], "system": { "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 243, + "sha256": "82d08041730728a01f9c7714db912699ff79a7a1b2211c48e283d6b8aec3f272", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -2388,6 +3103,30 @@ "system": { "ripEnabled": true, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 394, + "sha256": "df21e97824b59cc7c88e1cfdedad94f20ca595af4577751b641ef42b9d918bca", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -2432,6 +3171,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": false, "dhcpServer": { "aktiv": true, @@ -3130,6 +3873,18 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "file": "konten.txt", + "type": "text/txt", + "length": 81, + "sha256": "cd35dc5dacfe0681c4ca63b0930d64586328f35313bfd207fe90c9647361de63", + "children": [] + } + ] + }, "dhcpClient": true, "dhcpServer": { "aktiv": false, @@ -3207,6 +3962,18 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "file": "konten.txt", + "type": "text/txt", + "length": 85, + "sha256": "584f97b2108104e758f2896f914a8c02f91bedc28dc4d762714596c116c853c5", + "children": [] + } + ] + }, "dhcpClient": true, "dhcpServer": { "aktiv": false, @@ -3255,6 +4022,34 @@ "system": { "ripEnabled": true, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 394, + "sha256": "df21e97824b59cc7c88e1cfdedad94f20ca595af4577751b641ef42b9d918bca", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + }, + { + "directory": "www.conf", + "children": [] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -3318,6 +4113,34 @@ "system": { "ripEnabled": true, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 394, + "sha256": "df21e97824b59cc7c88e1cfdedad94f20ca595af4577751b641ef42b9d918bca", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + }, + { + "directory": "www.conf", + "children": [] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -3374,6 +4197,34 @@ "system": { "ripEnabled": true, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 394, + "sha256": "df21e97824b59cc7c88e1cfdedad94f20ca595af4577751b641ef42b9d918bca", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + }, + { + "directory": "www.conf", + "children": [] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -3444,6 +4295,34 @@ "system": { "ripEnabled": true, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 394, + "sha256": "df21e97824b59cc7c88e1cfdedad94f20ca595af4577751b641ef42b9d918bca", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + }, + { + "directory": "www.conf", + "children": [] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -3500,6 +4379,34 @@ "system": { "ripEnabled": true, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 394, + "sha256": "df21e97824b59cc7c88e1cfdedad94f20ca595af4577751b641ef42b9d918bca", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + }, + { + "directory": "www.conf", + "children": [] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -3549,6 +4456,34 @@ "system": { "ripEnabled": true, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 394, + "sha256": "df21e97824b59cc7c88e1cfdedad94f20ca595af4577751b641ef42b9d918bca", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + }, + { + "directory": "www.conf", + "children": [] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -3593,6 +4528,23 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "dns", + "children": [ + { + "file": "hosts", + "type": null, + "length": 210, + "sha256": "609f4ac4d06ac54a04b080458b83ed7ee2f523807ffa2bf9a64849117c921368", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -3629,6 +4581,30 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 500, + "sha256": "94fc9cc5ea871634a045e3e2c01838796d4623ec4488ea23cff50e949c2929b4", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -3665,6 +4641,23 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "mailserver", + "children": [ + { + "file": "konten.txt", + "type": "txt", + "length": 88, + "sha256": "d5eef2ffc8970f093433912ff9ef74e0b0d166310d9ed56f5f4f8ff3ed7c97e6", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -3701,6 +4694,23 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "mailserver", + "children": [ + { + "file": "konten.txt", + "type": "txt", + "length": 45, + "sha256": "63cba5c91ef0bc92aec8c3c5b800397a59f4959dde5a818dde9abd8ab37946b6", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -3737,6 +4747,42 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 518, + "sha256": "534e5a8f60e38149d47c863b4b7c143ade68a31744a44e02ed1e770f9e7a7b3f", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + }, + { + "directory": "dns", + "children": [ + { + "file": "hosts", + "type": null, + "length": 33, + "sha256": "5f8235d016bcc8024b554ec91df22ec0bebab7f799fc6009bbd34073224c87d4", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": true, @@ -3780,6 +4826,30 @@ ], "system": { "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 243, + "sha256": "82d08041730728a01f9c7714db912699ff79a7a1b2211c48e283d6b8aec3f272", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": true, "dhcpServer": { "aktiv": true, @@ -3825,6 +4895,18 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "file": "konten.txt", + "type": "text/txt", + "length": 75, + "sha256": "6d8585e1f74b612e758505a156694dfb412b842bdc28e8ed3841199a3970682c", + "children": [] + } + ] + }, "dhcpClient": true, "dhcpServer": { "aktiv": false, @@ -3861,6 +4943,18 @@ "system": { "ssid": "MyWiFiNetwork", "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "file": "konten.txt", + "type": "text/txt", + "length": 81, + "sha256": "cd35dc5dacfe0681c4ca63b0930d64586328f35313bfd207fe90c9647361de63", + "children": [] + } + ] + }, "dhcpClient": true, "dhcpServer": { "aktiv": false, @@ -3897,6 +4991,10 @@ "system": { "ssid": "MyWiFiNetwork", "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": true, "dhcpServer": { "aktiv": false, @@ -3933,6 +5031,10 @@ "system": { "ssid": "MyWiFiNetwork", "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": true, "dhcpServer": { "aktiv": false, @@ -3969,6 +5071,10 @@ "system": { "ssid": "MyWiFiNetwork", "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": true, "dhcpServer": { "aktiv": false, @@ -4050,6 +5156,30 @@ ], "system": { "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 243, + "sha256": "82d08041730728a01f9c7714db912699ff79a7a1b2211c48e283d6b8aec3f272", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -4162,6 +5292,30 @@ "system": { "ripEnabled": true, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 394, + "sha256": "df21e97824b59cc7c88e1cfdedad94f20ca595af4577751b641ef42b9d918bca", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -4206,6 +5360,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": false, "dhcpServer": { "aktiv": true, @@ -4862,6 +6020,10 @@ "system": { "ssid": "MyWiFi", "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": true, "dhcpServer": { "aktiv": false, @@ -4902,6 +6064,30 @@ ], "system": { "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 243, + "sha256": "82d08041730728a01f9c7714db912699ff79a7a1b2211c48e283d6b8aec3f272", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": true, @@ -4959,6 +6145,30 @@ "system": { "ripEnabled": true, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 394, + "sha256": "df21e97824b59cc7c88e1cfdedad94f20ca595af4577751b641ef42b9d918bca", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -5003,6 +6213,30 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 538, + "sha256": "1966c377d3651754cfc513da8f425ec0e943e6cc5e8f7112aa06102e21eb0775", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -5039,6 +6273,23 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "dns", + "children": [ + { + "file": "hosts", + "type": null, + "length": 36, + "sha256": "c4f62d9c112a0def5f67e6b803e8a55886a46712b52bfb73941e12f2f8a63c59", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -5075,6 +6326,10 @@ "system": { "ssid": "MyWiFi", "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": true, "dhcpServer": { "aktiv": false, @@ -5483,6 +6738,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -5519,6 +6778,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -5596,6 +6859,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -5679,6 +6946,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": false, "dhcpServer": { "aktiv": true, @@ -5715,6 +6986,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": true, "dhcpServer": { "aktiv": false, @@ -5751,6 +7026,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -5828,6 +7107,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": true, "dhcpServer": { "aktiv": false, @@ -5868,6 +7151,30 @@ ], "system": { "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 243, + "sha256": "82d08041730728a01f9c7714db912699ff79a7a1b2211c48e283d6b8aec3f272", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": true, @@ -5913,6 +7220,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": true, "dhcpServer": { "aktiv": false, @@ -6063,6 +7374,23 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "dns", + "children": [ + { + "file": "hosts", + "type": null, + "length": 84, + "sha256": "84d02c9a311e5cc7d1c45f3da3f30331903e8f8fc6c45e0d8a2500d393a6adb9", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -6099,6 +7427,34 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 557, + "sha256": "7d56103add4688141350c5901c1c9bb2c9495a054531b71a32cc9f96aed4ef45", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + }, + { + "directory": "www.conf", + "children": [] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -6135,6 +7491,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -6171,6 +7531,23 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "dns", + "children": [ + { + "file": "hosts", + "type": null, + "length": 47, + "sha256": "d6fcb4528251a65a261ddefad36602c40aa55574cdb88d711a8955d999f2473a", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -6248,6 +7625,23 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "dns", + "children": [ + { + "file": "hosts", + "type": null, + "length": 68, + "sha256": "2f916dbcb3ff8d29840ee37fe341fd8d323960526e0c891128963217d4039e53", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -6284,6 +7678,23 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "dns", + "children": [ + { + "file": "hosts", + "type": null, + "length": 34, + "sha256": "fdba09cf276c8c66cf4676b2c5b741075268911b5ebac2c384c187a6f7137282", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -6419,6 +7830,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -6455,6 +7870,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -6491,6 +7910,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -6527,6 +7950,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -6563,6 +7990,68 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 615, + "sha256": "c7682b3a9758588021d73ec7a01769c1a3056b666a252822ecaea18514b6e784", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + }, + { + "file": "800px-Loewe_3.JPG", + "type": "image", + "length": 117116, + "sha256": "04d6353a6e750e8af80058fc299ebaaf85a14d740eaa7c19b5db8b42e9000f9d", + "children": [] + }, + { + "file": "meine-seite.html", + "type": "text", + "length": 121, + "sha256": "3f9f9a107b72e97f97671f00232db9ab60e96859d6be66553faf329b64136427", + "children": [] + } + ] + }, + { + "directory": "www.conf", + "children": [ + { + "file": "vhosts", + "type": null, + "length": 52, + "sha256": "528219400a878871604b1ed891f8926fcf142fbaa329722d1b6fcec159c54241", + "children": [] + } + ] + }, + { + "directory": "dns", + "children": [ + { + "file": "hosts", + "type": null, + "length": 64, + "sha256": "94c7a19c36a5e11af62ffba031840ce9c238231f18f1e999f1a908b3956540aa", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": true, @@ -6640,6 +8129,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": true, "dhcpServer": { "aktiv": false, @@ -6676,6 +8169,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": true, "dhcpServer": { "aktiv": false, @@ -6712,6 +8209,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": true, "dhcpServer": { "aktiv": false, @@ -6748,6 +8249,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": true, "dhcpServer": { "aktiv": false, @@ -7017,6 +8522,30 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 557, + "sha256": "7d56103add4688141350c5901c1c9bb2c9495a054531b71a32cc9f96aed4ef45", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -7053,6 +8582,18 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "file": "konten.txt", + "type": "text/txt", + "length": 82, + "sha256": "db07ea20f140dc28e0c08d4379c3745c527012935d14b006c481c4e66db101b9", + "children": [] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -7089,6 +8630,18 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "file": "konten.txt", + "type": "text/txt", + "length": 82, + "sha256": "46fda62f5183c745e1ea1fc627511761a3532c6240a70230b8d2b7c022fad134", + "children": [] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -7125,6 +8678,18 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "file": "konten.txt", + "type": "text/txt", + "length": 82, + "sha256": "a1d89620fc770742f30003283d9db30a2993b0f22eb53eed5bfb9fd38bb5514b", + "children": [] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -7161,6 +8726,18 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "file": "konten.txt", + "type": "text/txt", + "length": 82, + "sha256": "0884e1ff30882ed87c758e949b05df36a3c38f8af9a2461d449517f143eeb92b", + "children": [] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -7238,6 +8815,23 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "dns", + "children": [ + { + "file": "hosts", + "type": null, + "length": 173, + "sha256": "597ad9f41447233f8bb178a0ade919345ac79dbb599d748abea2564b496193eb", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -7274,6 +8868,23 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "mailserver", + "children": [ + { + "file": "konten.txt", + "type": "txt", + "length": 92, + "sha256": "0899cce8e063b7287c0b73b011adf1e02bfab11e834765b3e6d43ebf3a37d478", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -7310,6 +8921,23 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "mailserver", + "children": [ + { + "file": "konten.txt", + "type": "txt", + "length": 92, + "sha256": "bb3604ef16c2182b5097e628624b62e95c4872b45ffecba550e983cef5b066ab", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -7545,6 +9173,30 @@ "system": { "ripEnabled": false, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 394, + "sha256": "df21e97824b59cc7c88e1cfdedad94f20ca595af4577751b641ef42b9d918bca", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -7614,6 +9266,30 @@ "141.99.4.1" ] ], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 394, + "sha256": "df21e97824b59cc7c88e1cfdedad94f20ca595af4577751b641ef42b9d918bca", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -7663,6 +9339,30 @@ "system": { "ripEnabled": false, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 394, + "sha256": "df21e97824b59cc7c88e1cfdedad94f20ca595af4577751b641ef42b9d918bca", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -7748,6 +9448,23 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "dns", + "children": [ + { + "file": "hosts", + "type": null, + "length": 33, + "sha256": "6d4d6e43368e520d27734832db0ba83ba078865398d0ee6c57b3345a733b66ba", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -7784,6 +9501,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -7820,6 +9541,30 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 557, + "sha256": "7d56103add4688141350c5901c1c9bb2c9495a054531b71a32cc9f96aed4ef45", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -7856,6 +9601,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -7892,6 +9641,30 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 557, + "sha256": "7d56103add4688141350c5901c1c9bb2c9495a054531b71a32cc9f96aed4ef45", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -7928,6 +9701,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -8005,6 +9782,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -8218,6 +9999,18 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "file": "konten.txt", + "type": "text/txt", + "length": 71, + "sha256": "2bc178b534af284e8e997b2306c83630e4eca07bf5ffcd110e6de9725c103a4f", + "children": [] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -8254,6 +10047,42 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "file": "konten.txt", + "type": "text/txt", + "length": 82, + "sha256": "46fda62f5183c745e1ea1fc627511761a3532c6240a70230b8d2b7c022fad134", + "children": [] + }, + { + "directory": "dns", + "children": [ + { + "file": "hosts", + "type": null, + "length": 144, + "sha256": "15be56da82ced21860c3c859f7d615a2e0e2393ddba8823fb603958ee875cd4e", + "children": [] + } + ] + }, + { + "directory": "mailserver", + "children": [ + { + "file": "konten.txt", + "type": "txt", + "length": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -8290,6 +10119,18 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "file": "konten.txt", + "type": "text/txt", + "length": 63, + "sha256": "e8c73d7f647fad92ef790fe273b4685b376c3ebfab403e66e2982b077eabe1bc", + "children": [] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -8367,6 +10208,23 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "dns", + "children": [ + { + "file": "hosts", + "type": null, + "length": 180, + "sha256": "0978bc12de5a52832ee7b7df9d5aa2bbdcd2e6b506f8a5ea58173dc148b0daf0", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -8403,6 +10261,23 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "mailserver", + "children": [ + { + "file": "konten.txt", + "type": "txt", + "length": 216, + "sha256": "96e965caacdef402e4041d55f337e1113f7d59b500658ec2b74ae20a9feca59c", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -8439,6 +10314,23 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "mailserver", + "children": [ + { + "file": "konten.txt", + "type": "txt", + "length": 40, + "sha256": "336d0c1e9a13c917c64d91f072e56891c7685562d7cefcb9d8c548e13bb11b41", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -8621,6 +10513,34 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 504, + "sha256": "28c812abf90ecf38cb27490ba231b3ae2b9c9a5311744038a7c248d4ebdbd145", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + }, + { + "directory": "www.conf", + "children": [] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -8657,6 +10577,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -8769,6 +10693,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -8805,6 +10733,22 @@ "system": { "ssid": "Filius Wi Fi", "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "peer2peer", + "children": [] + }, + { + "file": "test.txt", + "type": "txt", + "length": 5, + "sha256": "6382c29c5fdcdc94705afc46f1d9b37c21e1663042ae0a3778ade3f5556a9254", + "children": [] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -8841,6 +10785,10 @@ "system": { "ssid": "Filius Wi Fi", "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -8969,6 +10917,30 @@ ], "system": { "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 243, + "sha256": "82d08041730728a01f9c7714db912699ff79a7a1b2211c48e283d6b8aec3f272", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -9014,6 +10986,30 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 538, + "sha256": "1966c377d3651754cfc513da8f425ec0e943e6cc5e8f7112aa06102e21eb0775", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -9050,6 +11046,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -9261,6 +11261,30 @@ "system": { "ripEnabled": false, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 394, + "sha256": "df21e97824b59cc7c88e1cfdedad94f20ca595af4577751b641ef42b9d918bca", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -9330,6 +11354,30 @@ "141.99.4.1" ] ], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 394, + "sha256": "df21e97824b59cc7c88e1cfdedad94f20ca595af4577751b641ef42b9d918bca", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -9379,6 +11427,30 @@ "system": { "ripEnabled": false, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 394, + "sha256": "df21e97824b59cc7c88e1cfdedad94f20ca595af4577751b641ef42b9d918bca", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -9423,6 +11495,23 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "dns", + "children": [ + { + "file": "hosts", + "type": null, + "length": 69, + "sha256": "39238be537759ecfb24fc46723a27fe5e7136996792df18c6daa647929017529", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -9459,6 +11548,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -9495,6 +11588,30 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 557, + "sha256": "7d56103add4688141350c5901c1c9bb2c9495a054531b71a32cc9f96aed4ef45", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -9531,6 +11648,30 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 213, + "sha256": "36a1dbc59a58840d2308fbecefa3646902a143938c36892628bd12d2e5645928", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -9567,6 +11708,30 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 393, + "sha256": "a914b401e99f75d1d9becb3e290e92f0a77b6d7bff44b5f2f4039bafc18d974b", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -9644,6 +11809,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -9684,6 +11853,30 @@ ], "system": { "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 243, + "sha256": "82d08041730728a01f9c7714db912699ff79a7a1b2211c48e283d6b8aec3f272", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -9740,6 +11933,30 @@ ], "system": { "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 243, + "sha256": "82d08041730728a01f9c7714db912699ff79a7a1b2211c48e283d6b8aec3f272", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -10235,6 +12452,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": true, "dhcpServer": { "aktiv": false, @@ -10271,6 +12492,30 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 557, + "sha256": "7d56103add4688141350c5901c1c9bb2c9495a054531b71a32cc9f96aed4ef45", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": true, "dhcpServer": { "aktiv": false, @@ -10311,6 +12556,30 @@ ], "system": { "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 243, + "sha256": "82d08041730728a01f9c7714db912699ff79a7a1b2211c48e283d6b8aec3f272", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": true, "dhcpServer": { "aktiv": true, @@ -10397,6 +12666,42 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "dns", + "children": [ + { + "file": "hosts", + "type": null, + "length": 34, + "sha256": "83b965bcc5eef638772b9cb7e0db056797e9a1201da798dd100151a0413a0043", + "children": [] + } + ] + }, + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 429, + "sha256": "225419200943fbe708a6680b66570b3fe609cbbd4e05f1c2faa0d96d9e98b980", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": true, @@ -10687,6 +12992,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": true, "dhcpServer": { "aktiv": false, @@ -10723,6 +13032,30 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 557, + "sha256": "7d56103add4688141350c5901c1c9bb2c9495a054531b71a32cc9f96aed4ef45", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": true, "dhcpServer": { "aktiv": false, @@ -10763,6 +13096,30 @@ ], "system": { "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 243, + "sha256": "82d08041730728a01f9c7714db912699ff79a7a1b2211c48e283d6b8aec3f272", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": true, "dhcpServer": { "aktiv": true, @@ -10849,6 +13206,42 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "dns", + "children": [ + { + "file": "hosts", + "type": null, + "length": 31, + "sha256": "91576d35c0857efcc36c4af0ed40a90cd231f3a905ee4c411ed929f0ed2e0bae", + "children": [] + } + ] + }, + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 445, + "sha256": "7436e0ed47fdaaefc06b8ee991cae129e09231007a302f8af83eb9ee14182b3f", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": true, @@ -10897,6 +13290,30 @@ "system": { "ripEnabled": true, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 394, + "sha256": "df21e97824b59cc7c88e1cfdedad94f20ca595af4577751b641ef42b9d918bca", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -10941,6 +13358,30 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 540, + "sha256": "c31760d4ecb049671d80666845f315f35f44bcb94ecc8905cdad5976aa95047c", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -10977,6 +13418,23 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "dns", + "children": [ + { + "file": "hosts", + "type": null, + "length": 36, + "sha256": "2ada78d7cdaf174e4657b0ab6fe37b912287577c07d65ec43db3ffc4768d1f4b", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -11025,6 +13483,30 @@ "system": { "ripEnabled": true, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 394, + "sha256": "df21e97824b59cc7c88e1cfdedad94f20ca595af4577751b641ef42b9d918bca", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -11389,6 +13871,48 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 443, + "sha256": "61e19fe97d2681ae0ec7c8a53ccda98577a0716b92af0c7f5e8d9bbe2bedffcd", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + }, + { + "file": "Ahornblatt.jpg", + "type": "image", + "length": 33069, + "sha256": "bf38aff1cafd1bf38df6cf47c25448b3c25ee0a9ffa35f28e98f327902c111ac", + "children": [] + }, + { + "file": "beispiel.html", + "type": "text", + "length": 149, + "sha256": "8ba3a312c296ee02d5dfcb69a931d95582ac5b5d67884d25230fc27f1e16208a", + "children": [] + } + ] + }, + { + "directory": "www.conf", + "children": [] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -11425,6 +13949,18 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "file": "test", + "type": "txt", + "length": 5, + "sha256": "6382c29c5fdcdc94705afc46f1d9b37c21e1663042ae0a3778ade3f5556a9254", + "children": [] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -11618,6 +14154,54 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "dns", + "children": [ + { + "file": "hosts", + "type": null, + "length": 33, + "sha256": "3d801783d135a0e42a61ecbba025a318f92c79945e0ca7ae6ea54698b6f5e917", + "children": [] + } + ] + }, + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 557, + "sha256": "156dfa798344ce7f75e3f40ab416c5e2c994c68a110cec5c8d686c31a403f10b", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + }, + { + "directory": "www.conf", + "children": [ + { + "file": "vhosts", + "type": null, + "length": 52, + "sha256": "528219400a878871604b1ed891f8926fcf142fbaa329722d1b6fcec159c54241", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -11654,6 +14238,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -11690,6 +14278,42 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 557, + "sha256": "7d56103add4688141350c5901c1c9bb2c9495a054531b71a32cc9f96aed4ef45", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + }, + { + "directory": "www.conf", + "children": [ + { + "file": "vhosts", + "type": null, + "length": 50, + "sha256": "49583d26538d3b0a66f4332e97ffeaeee1b91c4199dc44deaaa5f1e40ffc6089", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -11731,6 +14355,42 @@ "system": { "ripEnabled": false, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 394, + "sha256": "df21e97824b59cc7c88e1cfdedad94f20ca595af4577751b641ef42b9d918bca", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + } + ] + }, + { + "directory": "www.conf", + "children": [ + { + "file": "vhosts", + "type": null, + "length": 50, + "sha256": "49583d26538d3b0a66f4332e97ffeaeee1b91c4199dc44deaaa5f1e40ffc6089", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -11848,6 +14508,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -11884,6 +14548,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -11920,6 +14588,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -11956,6 +14628,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -11992,6 +14668,68 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [ + { + "directory": "webserver", + "children": [ + { + "file": "index.html", + "type": "html", + "length": 615, + "sha256": "c7682b3a9758588021d73ec7a01769c1a3056b666a252822ecaea18514b6e784", + "children": [] + }, + { + "file": "splashscreen-mini.png", + "type": "png", + "length": 8397, + "sha256": "c876b828d7258ddfce4aa01ecaa69d4685d238bccf6a94842972165bd1a0107c", + "children": [] + }, + { + "file": "800px-Loewe_3.JPG", + "type": "image", + "length": 117116, + "sha256": "04d6353a6e750e8af80058fc299ebaaf85a14d740eaa7c19b5db8b42e9000f9d", + "children": [] + }, + { + "file": "meine-seite.html", + "type": "text", + "length": 121, + "sha256": "3f9f9a107b72e97f97671f00232db9ab60e96859d6be66553faf329b64136427", + "children": [] + } + ] + }, + { + "directory": "www.conf", + "children": [ + { + "file": "vhosts", + "type": null, + "length": 52, + "sha256": "528219400a878871604b1ed891f8926fcf142fbaa329722d1b6fcec159c54241", + "children": [] + } + ] + }, + { + "directory": "dns", + "children": [ + { + "file": "hosts", + "type": null, + "length": 64, + "sha256": "94c7a19c36a5e11af62ffba031840ce9c238231f18f1e999f1a908b3956540aa", + "children": [] + } + ] + } + ] + }, "dhcpClient": false, "dhcpServer": { "aktiv": true, @@ -12069,6 +14807,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": true, "dhcpServer": { "aktiv": false, @@ -12105,6 +14847,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": true, "dhcpServer": { "aktiv": false, @@ -12141,6 +14887,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": true, "dhcpServer": { "aktiv": false, @@ -12177,6 +14927,10 @@ "system": { "ssid": null, "manualRoutes": [], + "fileSystem": { + "directory": "root", + "children": [] + }, "dhcpClient": true, "dhcpServer": { "aktiv": false, diff --git a/packages/fls/src/systemSoftware.ts b/packages/fls/src/systemSoftware.ts index 014a803..cbc6b3d 100644 --- a/packages/fls/src/systemSoftware.ts +++ b/packages/fls/src/systemSoftware.ts @@ -11,8 +11,14 @@ // table (port forwarding) and a modem's connection settings. // Java counterparts as well: filius.software.dhcp.DHCPServer, ModemFirmware. // -// Checked against Java (corpus.java.json, `system`). File systems and -// applications are later layers. +// And the file system of a PC or notebook: Java's tree of +// DefaultMutableTreeNodes, a directory's user object its name, a file's a +// filius.software.system.Datei. Routers and home routers have files too, but +// Java's constructor makes them from its own templates (the start page of +// the firewall's web interface); they are not in the file. +// +// Checked against Java (corpus.java.json, `system`). Applications are a +// later layer. // // A router's firewall is one object its constructor makes and hangs in two // places: the installed applications and the configuration plug-ins of its @@ -67,6 +73,12 @@ export interface FlsModem { ipAddress: string | null; } +export type FlsFileTree = + | { kind: 'directory'; name: string | null; children: FlsFileTree[] } + | { kind: 'file'; name: string | null; type: string | null; content: string | null; children: FlsFileTree[] } + /** A node whose user object is neither a name nor a file. */ + | { kind: 'other'; className: string; children: FlsFileTree[] }; + export interface FlsSystemSoftware { /** * Switch: its SSID, undefined when the file has none (Java rolls one). @@ -89,6 +101,8 @@ export interface FlsSystemSoftware { staticNAT?: (string | null)[][]; /** Modem. */ modem?: FlsModem; + /** Rechner, Notebook: the root directory (named "root" by Java's constructor). */ + fileSystem?: FlsFileTree; } type Warn = (message: string) => void; @@ -110,6 +124,7 @@ export function readSystemSoftware(device: JavaObject, javaClass: FlsNodeClass, case 'Rechner': case 'Notebook': result.ssid = optionalString(value('ssid'), 'ssid', warn) ?? null; + result.fileSystem = fileSystem(value('dateisystem'), warn); break; case 'Vermittlungsrechner': result.ripEnabled = boolean(value('ripEnabled'), false, 'ripEnabled', warn); @@ -150,6 +165,53 @@ function modemAddress(value: string | null | undefined): string | null { return value === undefined ? 'localhost' : value; } +/** + * Dateisystem: its root is `arbeitsVerzeichnis` in files up to 1.10 and + * `root` after. The constructor's root is a node named "root"; a node the + * file makes with `new DefaultMutableTreeNode()` has no user object. + */ +function fileSystem(system: JavaValue | undefined, warn: Warn): FlsFileTree { + const at = (property: string) => (isJavaObject(system) ? system.properties.get(property) : undefined); + const root = at('root') ?? at('arbeitsVerzeichnis'); + if (root === undefined) return { kind: 'directory', name: 'root', children: [] }; + return fileTreeNode(root, true, warn); +} + +function fileTreeNode(node: JavaValue, constructorRoot: boolean, warn: Warn): FlsFileTree { + if (!isJavaObject(node)) { + warn(`file system: a node is ${describe(node)}, left empty`); + return { kind: 'other', className: 'unknown', children: [] }; + } + for (const call of node.calls) { + if (call.method !== 'add') warn(`file system: ${call.method} on a node is not read`); + } + const children = listItems(node).map((child) => fileTreeNode(child, false, warn)); + const userObject = node.properties.has('userObject') + ? node.properties.get('userObject')! + : node.fromGetter && constructorRoot + ? 'root' + : (node.args[0] ?? null); + if (userObject === null || typeof userObject === 'string') return { kind: 'directory', name: userObject, children }; + if (isJavaObject(userObject) && userObject.className === 'filius.software.system.Datei') { + // new Datei(name, typ, inhalt), then the setters. + const [name, type, content] = userObject.args.length === 3 ? userObject.args : []; + const text = (property: string, fromConstructor: JavaValue | undefined) => { + const value = userObject.properties.get(property) ?? fromConstructor ?? null; + if (typeof value === 'string' || value === null) return value; + warn(`file system: file ${property} is ${describe(value)}, ignored`); + return null; + }; + return { + kind: 'file', + name: text('name', name), + type: text('dateiTyp', type), + content: text('dateiInhalt', content), + children, + }; + } + return { kind: 'other', className: isJavaObject(userObject) ? userObject.className : typeof userObject, children }; +} + /** A list of String arrays (routes, static NAT); anything but a string is null. */ function rowsOfStrings(list: JavaValue | undefined): (string | null)[][] { return listItems(list).map((row) => listItems(row).map((cell) => (typeof cell === 'string' ? cell : null))); diff --git a/packages/fls/test/topology.test.ts b/packages/fls/test/topology.test.ts index 9d5fe1f..1f20a14 100644 --- a/packages/fls/test/topology.test.ts +++ b/packages/fls/test/topology.test.ts @@ -3,6 +3,7 @@ // position and interfaces, each cable with both ends, each documentation // item — field by field. Then the rules the corpus does not exercise. +import { createHash } from 'node:crypto'; import { readdirSync, readFileSync, statSync } from 'node:fs'; import { dirname, join, relative } from 'node:path'; import { fileURLToPath } from 'node:url'; @@ -12,6 +13,7 @@ import { readFlsArchive, readTopology, type FlsDhcpServer, + type FlsFileTree, type FlsModem, type FlsNodeClass, type FlsTopology, @@ -42,6 +44,25 @@ const TYPE_LABELS: Record = { Modem: 'Modem', }; +/** FlsOracle.fileTree's shape: contents as length and SHA-256 of their UTF-8 bytes. */ +function javaFileTree(tree: FlsFileTree): unknown { + const children = tree.children.map(javaFileTree); + switch (tree.kind) { + case 'directory': + return { directory: tree.name, children }; + case 'file': + return { + file: tree.name, + type: tree.type, + length: tree.content?.length ?? null, + sha256: tree.content === null ? null : createHash('sha256').update(tree.content, 'utf8').digest('hex'), + children, + }; + case 'other': + return { userObject: tree.className, children }; + } +} + /** Java's property names, as FlsOracle.java writes them. */ function javaDhcpServer(server: FlsDhcpServer) { return { @@ -84,6 +105,7 @@ function asJavaView(topology: FlsTopology, javaBounds: (number[] | null)[]) { dhcpServer: javaDhcpServer(node.system.dhcpServer), }), ...(node.system.modem === undefined ? {} : { modem: javaModem(node.system.modem) }), + ...(node.system.fileSystem === undefined ? {} : { fileSystem: javaFileTree(node.system.fileSystem) }), ...(node.system.firewall === undefined ? {} : { @@ -116,6 +138,23 @@ function asJavaView(topology: FlsTopology, javaBounds: (number[] | null)[]) { }; } +/** + * Java's view without the file systems of routers and home routers: their + * files come from Java's constructor (templates of the firewall's web + * interface), not from the .fls file, and the reader does not claim them. + */ +function withoutTemplateFiles(view: unknown): unknown { + const { nodes, ...rest } = view as { nodes: { class: string; system: Record }[] }; + return { + ...rest, + nodes: nodes.map((node) => { + if (node.class !== 'Vermittlungsrechner' && node.class !== 'Gateway') return node; + const { fileSystem: _templateFiles, ...system } = node.system; + return { ...node, system }; + }), + }; +} + describe('corpus: the topology as Java loads it', () => { for (const file of flsFiles(corpusRoot)) { const name = relative(corpusRoot, file); @@ -124,7 +163,7 @@ describe('corpus: the topology as Java loads it', () => { const topology = readTopology(values); const expected = javaView[name] as { nodes: { bounds: number[] | null }[] }; - expect(asJavaView(topology, expected.nodes.map((node) => node.bounds))).toEqual(expected); + expect(asJavaView(topology, expected.nodes.map((node) => node.bounds))).toEqual(withoutTemplateFiles(expected)); expect(topology.warnings).toEqual([]); }); } @@ -296,6 +335,39 @@ describe('readTopology rules', () => { ]); }); + it('reads a file system from `root` or `arbeitsVerzeichnis`, with files by setters or constructor', () => { + const { nodes, warnings } = topologyOf(` + ${nodeItem('')} + ${nodeItem(` + / + + + a.txttexthallo + txt + + + + 0 + + `)}`); + + expect(nodes.map((node) => node.system.fileSystem)).toEqual([ + { kind: 'directory', name: 'root', children: [] }, + { + kind: 'directory', + name: '/', + children: [ + { + kind: 'directory', + name: null, + children: [{ kind: 'file', name: 'a.txt', type: 'txt', content: 'hallo', children: [] }], + }, + ], + }, + ]); + expect(warnings).toEqual(['node 2: file system: insert on a node is not read']); + }); + it("gives a modem Java's defaults and keeps an address the file sets to null", () => { const { nodes } = topologyOf(` ${nodeItem('')} diff --git a/tools/java-oracle/README.md b/tools/java-oracle/README.md index 3bb0131..f2b2dc0 100644 --- a/tools/java-oracle/README.md +++ b/tools/java-oracle/README.md @@ -27,7 +27,10 @@ virtuellen Bildschirm statt „headless". Schnittstellen, bei Rechner/Notebook `useIPAsName`/`useMACAsName`), unter `system` SSID, Lernzeit des Switches, RIP, manuelle Routen, die Firewall von Router und Heimrouter, DHCP-Client und -Server, die statische - NAT-Tabelle des Heimrouters und die Verbindung eines Modems; Kabel (Enden als Gerät/Schnittstelle), + NAT-Tabelle des Heimrouters, die Verbindung eines Modems und das + Dateisystem (Inhalte als Länge und SHA-256, damit die Referenz klein + bleibt; die Dateien von Router und Heimrouter erzeugt Javas Konstruktor aus + eigenen Vorlagen, sie stehen nicht in der Datei); Kabel (Enden als Gerät/Schnittstelle), Doku-Elemente. Systemsoftware, Dateisysteme und Anwendungen folgen schrittweise. diff --git a/tools/java-oracle/src/FlsOracle.java b/tools/java-oracle/src/FlsOracle.java index 39aa4b7..a439a41 100644 --- a/tools/java-oracle/src/FlsOracle.java +++ b/tools/java-oracle/src/FlsOracle.java @@ -19,6 +19,7 @@ import filius.software.dhcp.DHCPServer; import filius.software.firewall.Firewall; import filius.software.firewall.FirewallRule; import filius.software.system.Betriebssystem; +import filius.software.system.Datei; import filius.software.system.GatewayFirmware; import filius.software.system.InternetKnotenBetriebssystem; import filius.software.system.ModemFirmware; @@ -237,6 +238,7 @@ public class FlsOracle { } } json.put("manualRoutes", routes); + json.put("fileSystem", system.getDateisystem() == null ? null : fileTree(system.getDateisystem().getRoot())); json.put("dhcpClient", system.isDHCPKonfiguration()); DHCPServer server = system.getDHCPServer(); if (server != null) { @@ -285,6 +287,44 @@ public class FlsOracle { return json; } + /** + * A file system tree: a directory is a node whose user object is its name, + * a file one whose user object is a Datei. Contents as SHA-256 and length + * of their UTF-8 bytes, to keep the reference small. + */ + static Map fileTree(javax.swing.tree.DefaultMutableTreeNode node) { + Map json = new LinkedHashMap<>(); + Object user = node.getUserObject(); + if (user instanceof Datei file) { + json.put("file", file.getName()); + json.put("type", file.getDateiTyp()); + String content = file.getDateiInhalt(); + json.put("length", content == null ? null : content.length()); + json.put("sha256", content == null ? null : sha256(content)); + } else if (user == null || user instanceof String) { + json.put("directory", user); + } else { + json.put("userObject", user.getClass().getName()); + } + List children = new ArrayList<>(); + for (int index = 0; index < node.getChildCount(); index++) { + children.add(fileTree((javax.swing.tree.DefaultMutableTreeNode) node.getChildAt(index))); + } + json.put("children", children); + return json; + } + + static String sha256(String text) { + try { + byte[] digest = java.security.MessageDigest.getInstance("SHA-256").digest(text.getBytes(StandardCharsets.UTF_8)); + StringBuilder hex = new StringBuilder(); + for (byte value : digest) hex.append(String.format("%02x", value)); + return hex.toString(); + } catch (java.security.NoSuchAlgorithmException error) { + throw new IllegalStateException(error); + } + } + /** Just enough JSON: maps, lists, strings, numbers, booleans, null. */ static final class Json { static String write(Object value, String indent) {