@@ -3,7 +3,6 @@ use std::sync::Arc;
33
44use crate :: utils;
55use anyhow:: anyhow;
6- use async_trait:: async_trait;
76use futures:: { Stream , StreamExt } ;
87use http_body_util:: combinators:: BoxBody ;
98use http_body_util:: Full ;
@@ -16,47 +15,13 @@ use hyper::service::service_fn;
1615use hyper:: { Method , Request , Response , StatusCode } ;
1716use hyper_util:: rt:: TokioIo ;
1817use log:: { debug, error} ;
19- use serde:: { de:: DeserializeOwned , Deserialize , Serialize } ;
20- use tokio:: io:: { AsyncRead , AsyncReadExt , AsyncWrite , AsyncWriteExt } ;
18+ use serde:: { Deserialize , Serialize } ;
2119use tokio:: net:: { TcpListener , TcpStream } ;
2220use tokio_vsock:: VsockStream ;
2321
22+ use crate :: json_transport:: JsonTransport ;
2423use 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 ) ]
6126struct ConnectRequest {
6227 host : String ,
0 commit comments