The Launcher's XP11 port (8730b9b) now extends to everything: one net40
flavor across Console, vPOD, Contract, and SecureConfig (Newtonsoft.Json
everywhere; the net48/System.Text.Json legs and their #if splits are gone
since nothing consumed them).
Console (net40, single TFM like the Launcher):
- The ~31 BinaryFormatter bitmap blobs in the .resx files became raw
embedded files under assets/icons/ (extracted byte-faithfully via a
serialization surrogate — the animated square_throbber.gif survives),
loaded by Properties.Resources.EmbeddedBitmap/EmbeddedIcon. Reason:
System.Resources.Extensions' DeserializingResourceReader is net461+
and cannot load on net40. Strings stay in the .resx.
- IReadOnlyList -> IList in AppRegistry (net45+ interface).
vPOD (net40, single TFM):
- Zip extraction now shares the Launcher's MiniZip.cs (linked source), so
the diff-test install round-trip exercises it against ZipArchive zips.
- RPC args as JTokens; LaunchApps.json persistence via Newtonsoft;
Thread.VolatileRead instead of Volatile.Read.
Contract/SecureConfig: net40-only; Client/** (PodManagerConnection) now
ships in the one build. The Launcher package gains
TeslaSecureConfiguration.dll as a dependency of the client half.
Tests: the net48 xunit host loads the net40 assemblies (both CLR4), so
the suite exercises exactly what ships — 106/106 green. Also verified
live: net40 console provisioned, managed, and ran a full RP mission
against net40 vPOD (beacon/passphrase/RSA, 53290 RPC, egg load,
Run/Stop Mission).
Version: 4.11.4.3 across Launcher, Console, and vPOD (vPOD joins the
suite version line; was 1.0.0). Ship the dotNetFx40 redistributable in
Launcher/assets for XP-era pods.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
118 lines
5.7 KiB
Markdown
118 lines
5.7 KiB
Markdown
# 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](https://github.com/icsharpcode/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 managed `Munga Net.dll` above, 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` (net40, like the
|
|
whole suite since XP11): the single source of truth for the
|
|
Console↔Launcher RPC contract (wire types, the
|
|
`PodManagerConnection` client, and the framed-JSON `PodRpc` protocol), shared with the
|
|
Launcher. The assembly keeps the
|
|
`TeslaConsoleLaunchLib` name 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` (net40),
|
|
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 JSON**
|
|
frames over the existing OFB-encrypted stream — see `Contract/PodRpcProtocol.cs`,
|
|
shared verbatim by both ends (Newtonsoft.Json — net40 has no System.Text.Json).
|
|
This replaced the original `BinaryFormatter` +
|
|
serialized-`MethodBase` scheme (a remote-code-execution sink, and what had pinned the
|
|
Launcher to an old runtime); dispatch is now by method-name string. The Launcher and
|
|
the Console both target **net40** (XP11: XP SP3 through Windows 11). Note the Console
|
|
still uses `BinaryFormatter` for *local* disk persistence (`Site` config, mission
|
|
results) — that is local file I/O, 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 string resources + icon
|
|
assets/icons/ UI images (raw originals, embedded as manifest resources —
|
|
the resx BinaryFormatter blobs cannot build for net40)
|
|
TeslaConsole.csproj net40 project (XP11: runs on XP SP3 through Windows 11)
|
|
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 net40 reference assemblies, so a standalone Framework
|
|
targeting pack is **not** required.
|
|
|
|
```
|
|
dotnet build TeslaConsole.csproj -c Release
|
|
```
|
|
|
|
Output: `bin/Release/net40/TeslaConsole.exe` (with `RedPlanet/` and all
|
|
dependency DLLs copied alongside it).
|
|
|
|
## Runtime content
|
|
|
|
- `RedPlanet\RPConfig.xml`, `RedPlanet\RPStrings.xml` are 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 `.resx` resources embed BinaryFormatter-serialized bitmaps. The project
|
|
sets `GenerateResourceUsePreserializedResources` and references
|
|
`System.Resources.Extensions` so these build under the modern SDK.
|
|
- Namespaces: `TeslaConsole` (UI + pod management), `TeslaConsole.RedPlanet`
|
|
(the Red Planet game scenario/mission model), `TeslaConsole.Properties`
|
|
(settings + resources).
|