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