Files
TeslaSuite/Launcher
CydandClaude Opus 4.8 b9d8027cf6 Extract shared contract, drop BinaryFormatter wire, modernize to net8/x64
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>
2026-06-30 08:15:17 -05:00
..

TeslaLauncher

.NET 6 rewrite of the original Elsewhen Studios LLC software (Windows 2000 / .NET Framework 2.0).

Architecture

TeslaLauncher has three components that work together:

TeslaLauncherService (Windows Service, Session 0)

  • Runs at boot before any user logs in
  • Listens on TCP 53290 for OFB-encrypted BinaryFormatter RPC from TeslaConsole
  • Forwards commands to the Agent via Named Pipe (TeslaLauncherIPC)
  • Handles first-boot network configuration (SecureConfig)
  • Handles game file transfers from the Console (InstallProduct)

TeslaLauncherAgent (WinForms tray app, user session)

  • Runs in the logged-in user's desktop session
  • Executes commands that require desktop access: launching/killing apps, volume control
  • Manages LaunchApps.xml (installed games registry)
  • On first boot, displays SecureConfig Request ID and Passphrase

SecureConfig (first-boot protocol)

  • Assigns a temporary IP and broadcasts a UDP beacon so the Console can discover the pod
  • Operator reads the Passphrase off the pod screen and enters it into the Console
  • Console sends AES-encrypted network configuration (IP, mask, gateway, DNS, hostname)
  • TCP handshake establishes an OFB-encrypted session with RSA key exchange
  • Session key is saved for all subsequent Console connections

Communication Flow

TeslaConsole ──TCP 53290 (OFB + BinaryFormatter)──> TeslaLauncherService
                                                          │
                                                    Named Pipe (JSON)
                                                          │
                                                          v
                                                    TeslaLauncherAgent

Files

File Description
TeslaLauncherService.cs Windows Service implementation
TeslaLauncherService.csproj Service project (net6.0-windows, x86, self-contained)
TeslaLauncherAgent.cs Userspace Agent implementation
TeslaLauncherAgent.csproj Agent project (WinForms, net6.0-windows, x86)
LaunchModels_Shared.cs Wire types (Tesla.Net) and IPC types (Tesla.Launcher.Shared)
SecureConfig.cs First-boot secure configuration protocol
build.bat Builds both components
install.bat Installs on a cockpit PC (run as Administrator)

Building

Requirements:

  • .NET 6 SDK
  • Internet access for NuGet restore
build.bat              :: build both components
build.bat /service     :: build Service only
build.bat /agent       :: build Agent only

Output goes to TeslaLauncher\ with Service\ and Agent\ subdirectories.

Installation

  1. Copy the TeslaLauncher\ folder to each cockpit PC
  2. Run TeslaLauncher\install.bat as Administrator

The installer:

  • Registers the Service (delayed auto-start)
  • Configures the Agent for auto-login startup
  • Installs OpenAL and DirectX runtimes
  • Enables SMB1 file sharing
  • Creates C:\Games with appropriate permissions
  • Resets network adapters to DHCP for SecureConfig

First Boot

  1. Cockpit boots with DHCP (unconfigured state)
  2. Service runs SecureConfig: broadcasts beacon, displays codes on screen
  3. Console operator sees the pod's Request ID and enters the Passphrase
  4. Console sends encrypted network configuration
  5. Pod applies the configuration and is ready for normal operation

Normal Operation

The Console connects to each configured pod on TCP 53290 and can:

  • Install/uninstall simulation games
  • Launch/kill applications
  • Get/set volume level
  • Query pod status (FullUpdate)
  • Shutdown or reboot the pod

Key Paths

Path Purpose
C:\ProgramData\TeslaLauncher\TeslaKeyStore.key Session key (32 bytes)
C:\ProgramData\TeslaLauncher\LaunchApps.xml Installed games registry
C:\ProgramData\TeslaLauncher\configuring.json Transient: SecureConfig codes for Agent display
C:\Games\ Game installation directory

Wire Protocol

The Console uses BinaryFormatter over OFB-encrypted TCP streams. All types in the Tesla.Net namespace are exact replicas of the original structs from TeslaConsoleLaunchLib.dll to maintain serialization compatibility.

The Service-to-Agent IPC uses length-prefixed JSON over a Named Pipe, with flat types that avoid the nested struct layout of the wire format.