Exemple #1
0
        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;
                }
            }
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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");
            }
        }
Exemple #4
0
        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");
        }
Exemple #5
0
        public ServerCert GetCert()
        {
            var rawData = _softEther.CallMethod("GetServerCert");

            return(ServerCert.Deserialize(rawData));
        }