Skip to content

Commit efcbabc

Browse files
committed
refactor: move JsonTransport trait to a separate module
1 parent 31a8d42 commit efcbabc

3 files changed

Lines changed: 42 additions & 37 deletions

File tree

enclaver/src/json_transport.rs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
use async_trait::async_trait;
2+
use serde::{de::DeserializeOwned, Serialize};
3+
use tokio::io::{AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt};
4+
5+
#[async_trait]
6+
pub trait JsonTransport: Sized + Sync {
7+
async fn send<W: AsyncWrite + Unpin + Send>(&self, w: &mut W) -> anyhow::Result<()>;
8+
async fn recv<R: AsyncRead + Unpin + Send>(r: &mut R) -> anyhow::Result<Self>;
9+
}
10+
11+
#[async_trait]
12+
impl<M: Serialize + DeserializeOwned + Sync> JsonTransport for M {
13+
async fn send<W: AsyncWrite + Unpin + Send>(&self, w: &mut W) -> anyhow::Result<()> {
14+
// Frame and serialize
15+
// use JSON serialization to avoid pulling in another dependency
16+
let msg = serde_json::to_vec(self)?;
17+
// frame it by a 2 byte length
18+
let len = msg.len() as u16;
19+
let mut pkt = Vec::with_capacity(2 + msg.len());
20+
pkt.extend_from_slice(&len.to_le_bytes());
21+
pkt.extend_from_slice(&msg);
22+
w.write_all(&pkt).await?;
23+
Ok(())
24+
}
25+
26+
async fn recv<R: AsyncRead + Unpin + Send>(r: &mut R) -> anyhow::Result<Self> {
27+
let mut len_buf = [0u8; 2];
28+
r.read_exact(&mut len_buf).await?;
29+
let len = u16::from_le_bytes(len_buf);
30+
31+
let mut msg = vec![0u8; len as usize];
32+
r.read_exact(&mut msg).await?;
33+
34+
let req: Self = serde_json::from_slice(&msg)?;
35+
Ok(req)
36+
}
37+
}

enclaver/src/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ pub mod nsm;
2626
#[cfg(feature = "odyn")]
2727
pub mod api;
2828

29+
#[cfg(any(feature = "odyn", feature = "proxy"))]
30+
pub mod json_transport;
31+
2932
#[cfg(feature = "proxy")]
3033
pub mod proxy;
3134

enclaver/src/proxy/egress_http.rs

Lines changed: 2 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ use std::sync::Arc;
33

44
use crate::utils;
55
use anyhow::anyhow;
6-
use async_trait::async_trait;
76
use futures::{Stream, StreamExt};
87
use http_body_util::combinators::BoxBody;
98
use http_body_util::Full;
@@ -16,47 +15,13 @@ use hyper::service::service_fn;
1615
use hyper::{Method, Request, Response, StatusCode};
1716
use hyper_util::rt::TokioIo;
1817
use log::{debug, error};
19-
use serde::{de::DeserializeOwned, Deserialize, Serialize};
20-
use tokio::io::{AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt};
18+
use serde::{Deserialize, Serialize};
2119
use tokio::net::{TcpListener, TcpStream};
2220
use tokio_vsock::VsockStream;
2321

22+
use crate::json_transport::JsonTransport;
2423
use crate::policy::EgressPolicy;
2524

26-
#[async_trait]
27-
trait JsonTransport: Sized + Sync {
28-
async fn send<W: AsyncWrite + Unpin + Send>(&self, w: &mut W) -> anyhow::Result<()>;
29-
async fn recv<R: AsyncRead + Unpin + Send>(r: &mut R) -> anyhow::Result<Self>;
30-
}
31-
32-
#[async_trait]
33-
impl<M: Serialize + DeserializeOwned + Sync> JsonTransport for M {
34-
async fn send<W: AsyncWrite + Unpin + Send>(&self, w: &mut W) -> anyhow::Result<()> {
35-
// Frame and serialize
36-
// use JSON serialization to avoid pulling in another dependency
37-
let msg = serde_json::to_vec(self)?;
38-
// frame it by a 2 byte length
39-
let len = msg.len() as u16;
40-
let mut pkt = Vec::with_capacity(2 + msg.len());
41-
pkt.extend_from_slice(&len.to_le_bytes());
42-
pkt.extend_from_slice(&msg);
43-
w.write_all(&pkt).await?;
44-
Ok(())
45-
}
46-
47-
async fn recv<R: AsyncRead + Unpin + Send>(r: &mut R) -> anyhow::Result<Self> {
48-
let mut len_buf = [0u8; 2];
49-
r.read_exact(&mut len_buf).await?;
50-
let len = u16::from_le_bytes(len_buf);
51-
52-
let mut msg = vec![0u8; len as usize];
53-
r.read_exact(&mut msg).await?;
54-
55-
let req: Self = serde_json::from_slice(&msg)?;
56-
Ok(req)
57-
}
58-
}
59-
6025
#[derive(Serialize, Deserialize)]
6126
struct ConnectRequest {
6227
host: String,

0 commit comments

Comments
 (0)