コード例 #1
0
ファイル: Program.cs プロジェクト: jansaris/SettopBox
 private void HandleKeyblock(IAsyncResult res)
 {
     Logger.Info("start handling keyblock request");
     StartAccept(_vks, HandleKeyblock); //listen for new connections again
     try
     {
         var client = _vks.EndAcceptTcpClient(res);
         //proceed
         var vks = new KeyblockCall();
         vks.Handle(client.GetStream(), true);
         client.Close();
     }
     catch (Exception ex)
     {
         if (!_stopping)
         {
             Logger.Warn($"Failed to handle Keyblock: {ex.Message}");
         }
     }
 }
コード例 #2
0
ファイル: Program.cs プロジェクト: jansaris/SettopBox
        private void HandleStartBox(IAsyncResult res)
        {
            Logger.Info("start handling start box request");
            StartAccept(_start, HandleStartBox); //listen for new connections again

            try
            {
                var client = _start.EndAcceptTcpClient(res);
                //proceed
                Logger.Debug("Handle the start box stream");
                var clientStream = client.GetStream();
                var data         = KeyblockCall.Read(clientStream);
                Logger.Debug($"Read {data.Length} bytes from the start box stream");
                File.WriteAllBytes(Path.Combine(_appDataFolder, "KeyblockMessages", "12686.request"), data);

                Logger.Info("Connect to remote to handle start box request");
                var remote = new TcpClient();
                remote.Connect(_fallbackKeyServer, 12686);
                var remoteStream = remote.GetStream();
                remoteStream.Write(data, 0, data.Length);
                var buff = new byte[2048];
                var size = remoteStream.Read(buff, 0, buff.Length);
                File.WriteAllBytes(Path.Combine(_appDataFolder, "KeyblockMessages", "12686.response"), buff.Take(size).ToArray());

                var response = File.ReadAllBytes(Path.Combine(_appDataFolder, "KeyblockMessages", "12686.response"));
                Logger.Info($"Write {response.Length} bytes to the start box stream");
                clientStream.Write(response, 0, response.Length);
                clientStream.Flush();
                client.Close();
            }
            catch (Exception ex)
            {
                if (!_stopping)
                {
                    Logger.Warn($"Something went wrong when handling start box request: {ex.Message}");
                }
            }
        }
コード例 #3
0
ファイル: SslTcpServer .cs プロジェクト: jansaris/SettopBox
        public bool ProcessClient(TcpClient client)
        {
            Logger.Debug("Handle a client...");
            // A client has connected. Create the
            // SslStream using the client's network stream.
            SslStream sslStream = new SslStream(client.GetStream(), false);

            // Authenticate the server but don't require the client to authenticate.
            try
            {
                var vcas = new KeyblockCall();
                sslStream.AuthenticateAsServer(_serverCertificate, false, SslProtocols.Tls, false);
                // Read a message from the client.
                return(vcas.Handle(sslStream, false));
            }
            catch (Exception e)
            {
                Logger.Info($"Exception: {e.Message}");
                if (e.InnerException != null)
                {
                    Logger.Info($"Inner exception: {e.InnerException.Message}");
                }
                Logger.Info("Authentication failed - closing the connection.");
                sslStream.Close();
                client.Close();
            }
            finally
            {
                // The client stream will be closed with the sslStream
                // because we specified this behavior when creating
                // the sslStream.
                sslStream.Close();
                client.Close();
            }
            return(false);
        }