Make the Console<->Launcher system source-built and modern now that the console is under our control and the WinXP-era pods are gone. Contract extraction (Contract/Tesla.Contract.csproj): - One multi-targeted (net48;net8.0-windows) source project for the RPC contract, replacing the vendored TeslaConsoleLaunchLib.dll and the hand-synced Tesla.Net replica in Launcher/LaunchModels_Shared.cs. Emits assembly TeslaConsoleLaunchLib. SecureConfig extraction (SecureConfig/Tesla.SecureConfig.csproj): - net48 source of the first-boot provisioning protocol (UDP beacons, OFB crypto, RSA key exchange), replacing the vendored TeslaSecureConfiguration.dll. Remove BinaryFormatter from the wire (RCE sink + the reason net6 was pinned): - Console<->Launcher RPC is now length-prefixed System.Text.Json frames (Contract/PodRpcProtocol.cs) over the unchanged OFB transport; dispatch by method name. Deleted the SerializationBinder / MethodInfoProxy machinery. - Console-local BinaryFormatter (Site config, mission replays) intentionally retained: local net48 file I/O, not the network surface. Runtime modernization: - Launcher Service + Agent: net6 -> net8, win-x86 -> win-x64 (all pods are 64-bit Win10). Kept the SHA1-default PBKDF2 (Console key-derivation compat) with SYSLIB0041 suppressed and documented. Tests: differential suite now 73 green. Added SecureConfigCompatTests (OFB ciphertext byte-identical to the vendored DLL) and PodRpcProtocolTests (JSON round-trip of every request/response shape); removed the now-obsolete BinaryFormatter byte-identity guard. Build hygiene: per-project obj dirs (Launcher/Directory.Build.props) fix a NuGet restore collision between the two Launcher projects sharing one folder. NOT runtime-verified against a live pod. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
5.4 KiB
TeslaConsole
Reconstructed C# source for the original TeslaConsole.exe — the operator
console that drives the cockpit pods (the counterpart to TeslaLauncherService
/ TeslaLauncherAgent).
Provenance
This source was recovered by decompiling the original managed assembly with
ILSpy (ilspycmd 7.2). The original
TeslaConsole.exe is a .NET Framework 2.0 WinForms application
(assets/Tesla Console/TeslaConsole.exe, dated 2012). The reconstructed project
here is retargeted to .NET Framework 4.8 so it builds with current tooling;
it is otherwise a faithful decompilation, not a rewrite.
Decompiled code is functionally equivalent to the original but not character-for-character identical to the lost sources. Local variable names, some control flow, and compiler-generated members differ. Treat this as a recovered baseline, not pristine source.
Dependencies
The console references these assemblies. Most are vendored as binaries under
lib/ (copied from assets/Tesla Console/):
| Assembly | Origin |
|---|---|
WeifenLuo.WinFormsUI.Docking.dll |
Third-party docking UI (open source, see assets/Tesla Console/WeifenLuo.txt) |
TeslaConsoleLaunchLib.dll |
Wire types / launch protocol — now built from source (see below) |
TeslaSecureConfiguration.dll |
First-boot secure config protocol — now built from source (see below) |
Munga Net.dll |
Managed C# client for the Red Planet game's Munga protocol (TCP 1501); manual binary serialization, no BinaryFormatter (proprietary, vendored) |
BitmapLibrary.dll |
Plasma-display bitmap rendering (proprietary, vendored) |
The Red Planet game itself is C++ and lives in its own repo (
c:\vwe\rp411/gitea.mysticmachines.com/VWE/RP411.git). That source defines the Munga protocol but is not a drop-in for the managedMunga Net.dllabove, so it is not vendored here.
Two of these are no longer vendored binaries — they are built from source and shared across the suite:
TeslaConsoleLaunchLib←../Contract/Tesla.Contract.csproj, a multi-targetednet48;net8.0-windowsproject: the single source of truth for the Console↔Launcher RPC contract (wire types, thePodManagerConnectionclient, and the framed-JSONPodRpcprotocol), shared with the Launcher Service. The assembly keeps theTeslaConsoleLaunchLibname so the original-exe baseline still resolves in the differential tests; the wire no longer embeds assembly names (see RPC note below).TeslaSecureConfiguration←../SecureConfig/Tesla.SecureConfig.csproj(net48), the first-boot provisioning protocol (UDP beacons, OFB crypto, RSA key exchange).
The original TeslaSecureConfiguration.dll is retained under lib/ as the baseline
for the byte-identical crypto guard (SecureConfigCompatTests). The remaining
vendored assemblies (Munga Net, BitmapLibrary) are .NET 2.0 managed and could be
decompiled to source the same way if full-source builds are needed.
Console ↔ Launcher RPC (no BinaryFormatter)
The pod-management channel (TCP 53290) runs length-prefixed System.Text.Json
frames over the existing OFB-encrypted stream — see Contract/PodRpcProtocol.cs,
shared verbatim by both ends. This replaced the original BinaryFormatter +
serialized-MethodBase scheme (a remote-code-execution sink and the reason the
Launcher was pinned to EOL .NET 6); dispatch is now by method-name string. The
Launcher Service/Agent target net8. Note the Console still uses BinaryFormatter
for local disk persistence (Site config, mission results) — that is local file
I/O on net48, not the network surface, and is intentionally left alone.
Layout
This folder is self-contained — it can be lifted out into its own repository and still build and run.
TeslaConsole/
*.cs, TeslaConsole.*/ decompiled source (by namespace)
*.resx, app.ico embedded resources + icon
TeslaConsole.csproj net48 project
RedPlanet/ runtime content (RPConfig.xml, RPStrings.xml) — copied to output
images/ source art (pod art / maps / vehicles) — reference only
installer_banner.bmp installer artwork — reference only
lib/ referenced binaries + WeifenLuo license
original/ original TeslaConsole.exe + .InstallState — reference baseline
Building
Requirements: .NET SDK (6.0+) — the Microsoft.NETFramework.ReferenceAssemblies
NuGet package supplies the net48 reference assemblies, so a standalone Framework
targeting pack is not required.
dotnet build TeslaConsole.csproj -c Release
Output: bin/Release/net48/TeslaConsole.exe (with RedPlanet/ and all
dependency DLLs copied alongside it).
Runtime content
RedPlanet\RPConfig.xml,RedPlanet\RPStrings.xmlare loaded relative to the exe and are copied to the build output automatically.Plasma Images\*.bmp(under%ProgramData%) is an optional override set; when absent the console renders plasma-display text procedurally, so it is not required to build or run.
Notes
- The
.resxresources embed BinaryFormatter-serialized bitmaps. The project setsGenerateResourceUsePreserializedResourcesand referencesSystem.Resources.Extensionsso these build under the modern SDK. - Namespaces:
TeslaConsole(UI + pod management),TeslaConsole.RedPlanet(the Red Planet game scenario/mission model),TeslaConsole.Properties(settings + resources).