# External Integrations **Analysis Date:** 2026-05-18 ## CNC Machine Protocols **Fanuc FOCAS1/FOCAS2 (proprietary):** - Used for: Program upload/download, tool data, work zero offset, machine state - SDK/Client: `fwlib32.cs` (11,569 lines, P/Invoke wrapper, Fanuc copyright 2002-2014) - Native DLLs: `Cnc/Fanuc/libs/Fwlib32.dll`, `fwlibe1.dll`, `fwlibNCG.dll` - Transport: Ethernet TCP (port 8193 default) or HSSB (legacy serial bus) - Main implementation: `Cnc/Fanuc/FanucMachine.cs` - Dialect abstraction: `Cnc/Fanuc/IFocasDialect.cs` → `LegacyFocasDialect.cs` / `ModernFocasDialect.cs` - Auto-detection: `Cnc/Fanuc/FanucDialectDetector.cs` (detects FOCAS version at connect time) - Config: `Cnc/Fanuc/FanucConnectionConfig.cs` (IP, port, HSSB node, transport type) - Platform: Windows only (DLL is 32-bit native) **Heidenhain LSV2 (proprietary TCP protocol):** - Used for: Program transfer to/from Heidenhain iTNC/TNC controllers - Client: Custom TCP implementation `Cnc/Heidenhain/Lsv2Client.cs` - Default port: 19000 - Auth: Username + password required - Framing: STX, SIZE, CMD, data, CRC-16/CCITT - Commands implemented: T_LS_SELECT, T_LS_LOG_IN, T_LS_LOG_OUT, T_R_FL (read file), T_S_FL (send file), T_FD - Main implementation: `Cnc/Heidenhain/HeidenhainMachine.cs` - Config: `Cnc/Heidenhain/HeidenhainConnectionConfig.cs` - Note: ReadActiveProgramAsync / SelectMainProgram not implemented (LSV2 limitation) **Siemens Sinumerik FTP:** - Used for: Program transfer to/from Siemens Sinumerik controllers - Protocol: Standard FTP (RFC 959) via `System.Net.FtpWebRequest` - Default port: 21 - Default program dir: `/_N_MPF_DIR/` - Auth: Username + password - Client: `Cnc/Siemens/SiemensFtpClient.cs` - Main implementation: `Cnc/Siemens/SiemensMachine.cs` - Config: `Cnc/Siemens/SiemensConnectionConfig.cs` - Requirement: Sinumerik FTP option must be enabled on machine **Mitsubishi M-Series FTP:** - Used for: Program transfer to/from Mitsubishi M-series controllers - Protocol: Standard FTP (RFC 959) via `System.Net.FtpWebRequest` - Default port: 21 - Default program dir: `/PRG/` - Auth: Username + password - Client: `Cnc/Mitsubishi/MitsubishiFtpClient.cs` - Main implementation: `Cnc/Mitsubishi/MitsubishiMachine.cs` - Config: `Cnc/Mitsubishi/MitsubishiConnectionConfig.cs` ## Licensing System **RSA Offline License Validation:** - Used for: Binding license to specific machine hardware - Mechanism: RSA-SHA256 signature verification - Public key: Embedded as const string in `Licensing/LicenseValidator.cs` - Private key: Vendor-only, stored at `~/Documents/mine/c#/LicenseGenerator/private.key.xml` (gitignored) - Machine fingerprint: WMI queries (CPU ID + motherboard serial) via `Licensing/MachineFingerprint.cs` - License file: `license.lic` (Base64-encoded RSA signature) next to EXE - Crypto: `RSACryptoServiceProvider` + `SHA256CryptoServiceProvider` (.NET 4.7.2 compatible) - Generator tool: Separate repo `ssh://git@3nt-git.duckdns.org:222/davide.trentin/license-generator.git` ## Hardware Access **WMI (Windows Management Instrumentation):** - Used for: Machine fingerprinting in licensing - Queries: `Win32_Processor` (processorID), `Win32_BaseBoard` (SerialNumber) - Package: `System.Management 7.0.1` - Files: `Licensing/MachineFingerprint.cs` - Platform: Windows only ## Data Storage **File System (local):** - NC program files written/read from local path specified via `-pathprogramma=` CLI arg - License file read from `AppDomain.CurrentDomain.BaseDirectory` - No database, no cloud storage ## Monitoring & Observability - No error tracking service (Sentry, etc.) - No analytics - Logging: `Console.WriteLine` only (no structured logging framework) --- *Integrations analysis: 2026-05-18* *Update when new protocols or services are added*