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}"); } } }
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}"); } } }
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); }