You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@teaclave.apache.org by ms...@apache.org on 2020/01/10 06:07:24 UTC
[incubator-teaclave] 02/02: [rpc] Handle client disconnect error
This is an automated email from the ASF dual-hosted git repository.
mssun pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/incubator-teaclave.git
commit 74ff1591a394b236bfeaf5416e878da3d77702a6
Author: Mingshen Sun <bo...@mssun.me>
AuthorDate: Thu Jan 9 22:01:47 2020 -0800
[rpc] Handle client disconnect error
---
rpc/src/protocol.rs | 11 ++++++++++-
rpc/src/transport.rs | 16 ++++++++++++++--
2 files changed, 24 insertions(+), 3 deletions(-)
diff --git a/rpc/src/protocol.rs b/rpc/src/protocol.rs
index 544d709..fe6aaea 100644
--- a/rpc/src/protocol.rs
+++ b/rpc/src/protocol.rs
@@ -5,6 +5,15 @@ use serde_json;
use std::io;
use std::mem::transmute;
use std::vec::Vec;
+use thiserror::Error;
+
+#[derive(Error, Debug)]
+pub enum ProtocolError {
+ #[error("IoError")]
+ IoError(#[from] io::Error),
+ #[error("SerdeError")]
+ SerdeError(#[from] serde_json::error::Error),
+}
pub(crate) struct JsonProtocol<'a, T>
where
@@ -21,7 +30,7 @@ where
Self { transport }
}
- pub fn read_message<V>(&mut self) -> Result<V>
+ pub fn read_message<V>(&mut self) -> std::result::Result<V, ProtocolError>
where
V: for<'de> Deserialize<'de> + std::fmt::Debug,
{
diff --git a/rpc/src/transport.rs b/rpc/src/transport.rs
index 8ea9c77..d97d6a2 100644
--- a/rpc/src/transport.rs
+++ b/rpc/src/transport.rs
@@ -32,6 +32,7 @@ mod sgx_trusted_tls {
use crate::transport::{ClientTransport, ServerTransport};
use crate::TeaclaveService;
use anyhow::Result;
+ use log::debug;
use rustls;
use serde::{Deserialize, Serialize};
@@ -64,7 +65,9 @@ mod sgx_trusted_tls {
{
let mut protocol = protocol::JsonProtocol::new(&mut self.stream);
protocol.write_message(request)?;
- protocol.read_message()
+ protocol
+ .read_message()
+ .map_err(|_| anyhow::anyhow!("InternalError"))
}
}
@@ -81,7 +84,16 @@ mod sgx_trusted_tls {
let mut protocol = protocol::JsonProtocol::new(&mut self.stream);
loop {
- let request: V = protocol.read_message()?;
+ let request: V = match protocol.read_message() {
+ Ok(r) => r,
+ Err(e) => match e {
+ protocol::ProtocolError::IoError(_) => {
+ debug!("Connection disconnected.");
+ return Ok(());
+ }
+ _ => return Err(anyhow::anyhow!("InternalError")),
+ },
+ };
let response = service.handle_request(request);
protocol.write_message(response)?;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@teaclave.apache.org
For additional commands, e-mail: commits-help@teaclave.apache.org