コード例 #1
0
ファイル: TlsServerSingle.cs プロジェクト: waffle-iron/nequeo
        /// <summary>
        /// Initialise the server.
        /// </summary>
        private void Init()
        {
            try
            {
                // Get the certificate reader.
                Nequeo.Security.Configuration.Reader certificateReader = new Nequeo.Security.Configuration.Reader();
                Nequeo.Net.Configuration.Reader      hostReader        = new Nequeo.Net.Configuration.Reader();

                string remoteHostPrefix           = "TlsServerSingle_";
                string remoteHostProviderFullName = remoteHostPrefix + "RemoteHost";
                string socketProviderHostPrefix   = "ProxyTlsServerSingle_";
                string hostProviderFullNameSecure = socketProviderHostPrefix + "SocketProviderV6Ssl";

                // If the host has not been set then get the
                // remote host from the configuration file.
                if (String.IsNullOrEmpty(_remoteHost))
                {
                    _remoteHost = hostReader.GetRemoteHost(remoteHostProviderFullName).Host;
                }

                // If the port has not been set then get the
                // remote port from the configuration file.
                if (_remotePort < 1)
                {
                    _remotePort = hostReader.GetRemoteHost(remoteHostProviderFullName).Port;
                }

                // Get the data, add the remote server.
                _remoteServers = new ConcurrentBag <RemoteServer>();
                _remoteServers.Add(
                    new RemoteServer()
                {
                    Name = _remoteHost,
                    Host = _remoteHost,
                    Port = _remotePort
                }
                    );

                // Start the server.
                _serverSecureV6                        = new Nequeo.Net.ProxyServer(System.Net.IPAddress.IPv6Any, hostReader.GetServerHost(hostProviderFullNameSecure).Port, _remoteServers, _algorithmType);
                _serverSecureV6.Name                   = "Proxy TLS Server";
                _serverSecureV6.ServiceName            = "ProxyTLSServer";
                _serverSecureV6.InterceptItems         = _interceptItems;
                _serverSecureV6.Timeout                = hostReader.GetServerHost(hostProviderFullNameSecure).ClientTimeOut;
                _serverSecureV6.ReadBufferSize         = 32768;
                _serverSecureV6.WriteBufferSize        = 32768;
                _serverSecureV6.ResponseBufferCapacity = 10000000;
                _serverSecureV6.RequestBufferCapacity  = 10000000;

                // Start the server.
                _serverSecureV4                        = new Nequeo.Net.ProxyServer(System.Net.IPAddress.Any, hostReader.GetServerHost(hostProviderFullNameSecure).Port, _remoteServers, _algorithmType);
                _serverSecureV4.Name                   = "Proxy TLS Server";
                _serverSecureV4.ServiceName            = "ProxyTLSServer";
                _serverSecureV4.InterceptItems         = _interceptItems;
                _serverSecureV4.Timeout                = hostReader.GetServerHost(hostProviderFullNameSecure).ClientTimeOut;
                _serverSecureV4.ReadBufferSize         = 32768;
                _serverSecureV4.WriteBufferSize        = 32768;
                _serverSecureV4.ResponseBufferCapacity = 10000000;
                _serverSecureV4.RequestBufferCapacity  = 10000000;

                // Look for the certificate information in the configuration file.
                // Get the certificate if any.
                X509Certificate2 serverCertificate = certificateReader.GetServerCredentials();

                // If a certificate exists.
                if (serverCertificate != null)
                {
                    // Get the secure servers.
                    _serverSecureV6.UseSslConnection  = true;
                    _serverSecureV6.WaitForTlsCommand = true;
                    _serverSecureV6.X509Certificate   = serverCertificate;
                    _serverSecureV4.UseSslConnection  = true;
                    _serverSecureV4.WaitForTlsCommand = true;
                    _serverSecureV4.X509Certificate   = serverCertificate;
                }
            }
            catch (Exception)
            {
                if (_serverSecureV6 != null)
                {
                    _serverSecureV6.Dispose();
                }

                if (_serverSecureV4 != null)
                {
                    _serverSecureV4.Dispose();
                }

                _serverSecureV6 = null;
                _serverSecureV4 = null;
                throw;
            }
        }