public void Run(int port) { NatashaInitializer.InitializeAndPreheating(); _Logger?.LogInformation("初始化动态代码引擎"); this.Port = port; _requestReception = ServiceProvider.GetService <IRequestReception>(); _tcpListener = new TcpListener(IPAddress.Any, port); _tcpListener.Start(); _Logger?.LogInformation("Gateway started, port:{0}", port); if (ServerCert != null) { _Logger?.LogInformation("Use ssl,certificate hash:{0}", ServerCert.GetCertHashString()); } while (true) { try { var socket = _tcpListener.AcceptSocket(); Task.Run(() => _requestReception.Interview(socket)); } catch (Exception ex) { _Logger?.LogError(ex, ex.Message); break; } } }
public override int GetHashCode() { int hash = 1; if (ServerKey.Length != 0) { hash ^= ServerKey.GetHashCode(); } if (ServerCert.Length != 0) { hash ^= ServerCert.GetHashCode(); } if (CustomCa.Length != 0) { hash ^= CustomCa.GetHashCode(); } if (ClientVerify != false) { hash ^= ClientVerify.GetHashCode(); } if (_unknownFields != null) { hash ^= _unknownFields.GetHashCode(); } return(hash); }
public void Stop() { if (Stopped) { return; } lock (lockStop) { if (Stopped) { return; } Log.Info("Stopping admin process"); AppDomain.CurrentDomain.ProcessExit -= ProcessExit; try { CancelOperationTS.Cancel(); HandshakeWithinTimeout?.Abort(); SendTerminateToAdminProcess(); AdminProcessAliveChecker?.Stop(); ShutdownWebSocketServerServices(); TerminateAdminProcess(); ShutdownWebSocketServer(); if (!AdminComConfig.UnencryptedServerCom) { Log.Info("Disposing cert"); ServerCert?.Dispose(); } } catch (Exception ex) { Log.Error(ex); } finally { Stopped = true; } Log.Debug("Done"); } }
private void LaunchWebSocketServer() { if (!AdminComConfig.UnencryptedServerCom) { CreateSelfSignedCert(); } AdminComConfig.ComPort = (ushort)NetworkUtil.GetFreeTcpPort(); Server = new WebSocketServer(IPAddress.Loopback, AdminComConfig.ComPort, !AdminComConfig.UnencryptedServerCom); // regression of https://github.com/sta/websocket-sharp/issues/43 in a new version Server.KeepClean = false; // Auth Server.AuthenticationSchemes = WebSocketSharp.Net.AuthenticationSchemes.Basic; Server.UserCredentialsFinder = id => { if (id.Name != AdminComConfig.Username) { return(null); } return(new WebSocketSharp.Net.NetworkCredential(id.Name, AdminComConfig.Password)); }; // Sec if (!AdminComConfig.UnencryptedServerCom) { Log.Info("Using an encrypted connection"); Server.SslConfiguration.ServerCertificate = ServerCert; AdminComConfig.ServerCertPublicKey = ServerCert.GetPublicKeyString(); } else { Log.Warn("Using an UNENCRYPTED connection - this may be insecure"); } InitServices(); Log.Info($"Launching WebsocketServer on Port {AdminComConfig.ComPort}"); Server.Start(); Log.Info($"Started Server"); }
public ServerCert GetCert() { var rawData = _softEther.CallMethod("GetServerCert"); return(ServerCert.Deserialize(rawData)); }