# azrin619/linux-kms architecture

> Architecture diagram of the GitHub repository azrin619/linux-kms, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/azrin619/linux-kms
- Repository: https://github.com/azrin619/linux-kms

## Overview

This is a C# KMS server emulator: activation clients send requests over TCP, which are dispatched through RPC and version-specific KMS handlers; the server constructs activation responses. The graph also preserves the documented container deployment capability. Edges follow shown calls, source-index references, or README statements; several implementation details, including the TCP listener internals and V4 cryptographic path, were not fully sampled.

Main entry points: [`KMSEmulator/KMS/KMSServer.cs`](https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/KMS/KMSServer.cs) (Activation logic), [`KMSEmulator/KMS/KMSRequestHandler.cs`](https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/KMS/KMSRequestHandler.cs) (Version dispatcher), [`KMSEmulator/KMSEmulator.cs`](https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/KMSEmulator.cs) (Server lifecycle), [`KMSEmulator/RPC/RpcMessageHandler.cs`](https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/RPC/RpcMessageHandler.cs) (RPC dispatcher)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Server runtime"]
  node_program["Console entry<br/>[Program.cs]"]
  node_emulator["Server lifecycle<br/>[KMSEmulator.cs]"]
  node_tcp["TCP listener<br/>[TcpServer.cs]"]
end

subgraph group_rpc["RPC transport"]
  node_rpcdispatch["RPC dispatcher"]
  node_rpcbind["Bind negotiation"]
  node_rpcrequest["RPC request handler"]
  node_rpcbase["RPC message model<br/>[RpcMessageBase.cs]"]
end

subgraph group_kms["KMS activation"]
  node_kmsdispatch["Version dispatcher"]
  node_v4["KMS V4 handler<br/>[KMSV4Handler.cs]"]
  node_v5["KMS V5 handler<br/>[KMSV5Handler.cs]"]
  node_v6["KMS V6 handler<br/>[KMSV6Handler.cs]"]
  node_kmslogic["Activation logic<br/>[KMSServer.cs]"]
  node_requestmodel["Activation request<br/>[KMSRequest.cs]"]
  node_responsemodel["Activation response<br/>[KMSResponseBase.cs]"]
  node_pid["PID generation<br/>[KMSPIDGenerator.cs]"]
end

subgraph group_ops["Configuration and logging"]
  node_settings["Server settings"]
  node_logger["Logging<br/>[ILogger.cs]"]
  node_docker["Container deployment"]
end

node_client(("Activation client"))

node_client -->|"sends activation"| node_tcp
node_program -->|"starts"| node_emulator
node_emulator -->|"starts listener"| node_tcp
node_emulator -->|"configures handler"| node_rpcdispatch
node_tcp -->|"dispatches requests"| node_rpcdispatch
node_rpcdispatch -->|"routes bind"| node_rpcbind
node_rpcdispatch -->|"routes request"| node_rpcrequest
node_rpcrequest -->|"forwards activation"| node_kmsdispatch
node_rpcbind -->|"reads port"| node_settings
node_kmsdispatch -->|"dispatches V4"| node_v4
node_kmsdispatch -->|"dispatches V5"| node_v5
node_kmsdispatch -->|"dispatches V6"| node_v6
node_kmsdispatch -->|"uses settings"| node_settings
node_v4 -->|"executes activation"| node_kmslogic
node_v5 -->|"executes activation"| node_kmslogic
node_v6 -->|"executes activation"| node_kmslogic
node_kmslogic -->|"parses request"| node_requestmodel
node_kmslogic -->|"builds response"| node_responsemodel
node_kmslogic -->|"generates PID"| node_pid
node_kmslogic -->|"reads activation values"| node_settings
node_kmsdispatch -->|"logs requests"| node_logger
node_kmslogic -->|"logs activation"| node_logger
node_docker -.->|"packages service"| node_emulator

click node_program "https://github.com/azrin619/linux-kms/blob/main/KMSEmulator.NET/Program.cs"
click node_emulator "https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/KMSEmulator.cs"
click node_tcp "https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/TcpServer.cs"
click node_rpcdispatch "https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/RPC/RpcMessageHandler.cs"
click node_rpcbind "https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/RPC/Bind/RpcBindMessageHandler.cs"
click node_rpcrequest "https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/RPC/Request/RpcRequestMessageHandler.cs"
click node_rpcbase "https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/RPC/RpcMessageBase.cs"
click node_kmsdispatch "https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/KMS/KMSRequestHandler.cs"
click node_v4 "https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/KMS/V4/KMSV4Handler.cs"
click node_v5 "https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/KMS/V5/KMSV5Handler.cs"
click node_v6 "https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/KMS/V6/KMSV6Handler.cs"
click node_kmslogic "https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/KMS/KMSServer.cs"
click node_requestmodel "https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/KMS/KMSRequest.cs"
click node_responsemodel "https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/KMS/KMSResponseBase.cs"
click node_pid "https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/KMS/KMSPIDGenerator.cs"
click node_settings "https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/KMSServerSettings.cs"
click node_logger "https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/Logging/ILogger.cs"
click node_docker "https://github.com/azrin619/linux-kms/blob/main/Dockerfile"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_program,node_emulator,node_tcp,node_client toneBlue
class node_rpcdispatch,node_rpcbind,node_rpcrequest,node_rpcbase toneAmber
class node_kmsdispatch,node_v4,node_v5,node_v6,node_kmslogic,node_requestmodel,node_responsemodel,node_pid toneMint
class node_settings,node_logger,node_docker toneRose
```

## Components

### Server runtime

- [Console entry](https://github.com/azrin619/linux-kms/blob/main/KMSEmulator.NET/Program.cs): `KMSEmulator.NET/Program.cs`
- [Server lifecycle](https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/KMSEmulator.cs): `KMSEmulator/KMSEmulator.cs`
- [TCP listener](https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/TcpServer.cs): `KMSEmulator/TcpServer.cs`

### RPC transport

- [RPC dispatcher](https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/RPC/RpcMessageHandler.cs): `KMSEmulator/RPC/RpcMessageHandler.cs`
- [Bind negotiation](https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/RPC/Bind/RpcBindMessageHandler.cs): `KMSEmulator/RPC/Bind/RpcBindMessageHandler.cs`
- [RPC request handler](https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/RPC/Request/RpcRequestMessageHandler.cs): `KMSEmulator/RPC/Request/RpcRequestMessageHandler.cs`
- [RPC message model](https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/RPC/RpcMessageBase.cs): `KMSEmulator/RPC/RpcMessageBase.cs`

### KMS activation

- [Version dispatcher](https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/KMS/KMSRequestHandler.cs): `KMSEmulator/KMS/KMSRequestHandler.cs`
- [KMS V4 handler](https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/KMS/V4/KMSV4Handler.cs): `KMSEmulator/KMS/V4/KMSV4Handler.cs`
- [KMS V5 handler](https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/KMS/V5/KMSV5Handler.cs): `KMSEmulator/KMS/V5/KMSV5Handler.cs`
- [KMS V6 handler](https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/KMS/V6/KMSV6Handler.cs): `KMSEmulator/KMS/V6/KMSV6Handler.cs`
- [Activation logic](https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/KMS/KMSServer.cs): `KMSEmulator/KMS/KMSServer.cs`
- [Activation request](https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/KMS/KMSRequest.cs): `KMSEmulator/KMS/KMSRequest.cs`
- [Activation response](https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/KMS/KMSResponseBase.cs): `KMSEmulator/KMS/KMSResponseBase.cs`
- [PID generation](https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/KMS/KMSPIDGenerator.cs): `KMSEmulator/KMS/KMSPIDGenerator.cs`

### Configuration and logging

- [Server settings](https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/KMSServerSettings.cs): `KMSEmulator/KMSServerSettings.cs`
- [Logging](https://github.com/azrin619/linux-kms/blob/main/KMSEmulator/Logging/ILogger.cs): `KMSEmulator/Logging/ILogger.cs`
- [Container deployment](https://github.com/azrin619/linux-kms/blob/main/Dockerfile): `Dockerfile`

### Other components

- **Activation client**

## Connections

- Activation client → TCP listener: sends activation (evidence: `README.md`)
- Console entry → Server lifecycle: starts (evidence: `KMSEmulator.NET/Program.cs`)
- Server lifecycle → TCP listener: starts listener (evidence: `KMSEmulator/KMSEmulator.cs`)
- Server lifecycle → RPC dispatcher: configures handler (evidence: `KMSEmulator/KMSEmulator.cs`)
- TCP listener → RPC dispatcher: dispatches requests (evidence: `KMSEmulator/TcpServer.cs`)
- RPC dispatcher → Bind negotiation: routes bind (evidence: `KMSEmulator/RPC/RpcMessageHandler.cs`)
- RPC dispatcher → RPC request handler: routes request (evidence: `KMSEmulator/RPC/RpcMessageHandler.cs`)
- RPC request handler → Version dispatcher: forwards activation (evidence: `KMSEmulator/RPC/Request/RpcRequestMessageHandler.cs`)
- Bind negotiation → Server settings: reads port (evidence: `KMSEmulator/RPC/Bind/RpcBindMessageHandler.cs`)
- Version dispatcher → KMS V4 handler: dispatches V4 (evidence: `KMSEmulator/KMS/KMSRequestHandler.cs`)
- Version dispatcher → KMS V5 handler: dispatches V5 (evidence: `KMSEmulator/KMS/KMSRequestHandler.cs`)
- Version dispatcher → KMS V6 handler: dispatches V6 (evidence: `KMSEmulator/KMS/KMSRequestHandler.cs`)
- Version dispatcher → Server settings: uses settings (evidence: `KMSEmulator/KMS/KMSRequestHandler.cs`)
- KMS V4 handler → Activation logic: executes activation (evidence: `KMSEmulator/KMS/V4/KMSV4Handler.cs`)
- KMS V5 handler → Activation logic: executes activation (evidence: `KMSEmulator/KMS/V5/KMSV5Handler.cs`)
- KMS V6 handler → Activation logic: executes activation (evidence: `KMSEmulator/KMS/V6/KMSV6Handler.cs`)
- Activation logic → Activation request: parses request (evidence: `KMSEmulator/KMS/KMSServer.cs`)
- Activation logic → Activation response: builds response (evidence: `KMSEmulator/KMS/KMSServer.cs`)
- Activation logic → PID generation: generates PID (evidence: `KMSEmulator/KMS/KMSServer.cs`)
- Activation logic → Server settings: reads activation values (evidence: `KMSEmulator/KMS/KMSServer.cs`)
- Version dispatcher → Logging: logs requests (evidence: `KMSEmulator/KMS/KMSRequestHandler.cs`)
- Activation logic → Logging: logs activation (evidence: `KMSEmulator/KMS/KMSServer.cs`)
- Container deployment → Server lifecycle: packages service (evidence: `README.md`)
