private KMSResponse CreateKMSResponse(KMSRequest kmsRequest, IKMSServerSettings serverSettings, ILogger logger) { KMSResponse response = new KMSResponse { Version = kmsRequest.Version }; string kmsPID; if (serverSettings.GenerateRandomKMSPID) { KMSPIDGenerator generator = new KMSPIDGenerator(); kmsPID = generator.CreateKMSPID(kmsRequest); logger.LogMessage("KMS PID: " + kmsPID); logger.LogMessage("Application ID: " + kmsRequest.ApplicationId); logger.LogMessage("Client Machine ID: " + kmsRequest.ClientMachineId); logger.LogMessage("KMS Counted ID: " + kmsRequest.KmsCountedId); logger.LogMessage("SKUID ID: " + kmsRequest.SkuId); logger.LogMessage("KMS Activation Response (KMS V" + kmsRequest.MajorVersion + "." + kmsRequest.MinorVersion + ") sent." + Environment.NewLine); } else { kmsPID = serverSettings.DefaultKMSPID; } response.KMSPID = kmsPID; response.ClientMachineId = kmsRequest.ClientMachineId; response.RequestTime = kmsRequest.RequestTime; response.CurrentClientCount = serverSettings.CurrentClientCount; response.VLActivationInterval = serverSettings.VLActivationInterval; response.VLRenewalInterval = serverSettings.VLRenewalInterval; return(response); }
/// <summary> /// Start KMS Server /// </summary> /// <param name="logger">Any Logger method that implements ILogger.</param> /// <param name="settings">KMS Server Settings Object</param> public static void Start(ILogger logger, KMSServerSettings settings = null) { // Prevent Running Twice if (_listener != null && _listener.Running) { //throw new Exception("Cannot run two instances of KMS Server."); _listener.Stop(); } // Initialize Logger if No Logger was Set if (logger == null) { logger = new StringLogger(); } // Initialize KMS Server Settings to use with RPC Message Handler if (settings != null) { Settings = settings; } else { Settings = new KMSServerSettings(); } RpcMessageHandler messageHandler = new RpcMessageHandler(Settings, new KMSRequestHandler(Settings, logger)); // Kill Any Processes using the desired TCP/IP Port if (settings != null && settings.KillProcessOnPort) { foreach (TcpRow tcpRow in ManagedIpHelper.GetExtendedTcpTable(true)) { if (tcpRow.LocalEndPoint.Port == Settings.Port) { Process.GetProcessById(tcpRow.ProcessId).Kill(); Thread.Sleep(5000); break; } } } // Configure and Start KMS Server _listener = new TCPServer(messageHandler, logger); _listener.Start(Settings.Port); // Log KMS Server TCP Server Startup if (_listener.Running) { logger.LogMessage("KMS Port: " + Settings.Port); logger.LogMessage("KMS HWID: " + Settings.DefaultKMSHWID); logger.LogMessage("KMS Activation Interval: " + Settings.VLActivationInterval); logger.LogMessage("KMS Renewal Interval: " + Settings.VLRenewalInterval); logger.LogMessage("KMS Port Process Termination: " + Settings.KillProcessOnPort); logger.LogMessage(""); logger.LogMessage("KMS Server Emulator started successfully."); logger.LogMessage(""); } }
public RpcBindMessageHandler(IKMSServerSettings setting) { _settings = setting; }
public KMSServer(IKMSServerSettings settings) { _serverSettings = settings; }
public KMSRequestHandler(IKMSServerSettings settings, ILogger logger) { _serverSettings = settings; _logger = logger; }
public RpcMessageHandler(IKMSServerSettings settings, IMessageHandler requestMessageHandler) { RequestMessageHandler = requestMessageHandler; Settings = settings; }