11#![ deny( warnings) ]
22use fnv:: FnvHashMap ;
33use nix:: sys:: select:: { select, FdSet } ;
4- use log:: { error, info, warn} ;
4+ use log:: { error, info, log , warn} ;
55use serde_cbor:: { self , StreamDeserializer } ;
66use serde_cbor:: de:: IoRead ;
77use std:: cmp;
@@ -14,6 +14,7 @@ use std::sync::{Arc, Mutex, RwLock};
1414use fortanix_vme_abi:: { self , Addr , Error as VmeError , Response , Request } ;
1515use vsock:: { self , SockAddr as VsockAddr , Std , Vsock , VsockListener , VsockStream } ;
1616
17+ const MAX_MESSAGE_LEN : usize = 80 ;
1718const PROXY_BUFF_SIZE : usize = 4192 ;
1819
1920enum Direction {
@@ -207,26 +208,32 @@ impl<'de> ClientConnection<'de> {
207208 self . sender . peer ( ) ?. parse ( ) . map_err ( |e| IoError :: new ( IoErrorKind :: InvalidData , e) )
208209 }
209210
210- fn log_communication ( src : & str , src_port : u32 , dst : & str , dst_port : u32 , msg : & str , arrow : Direction , prot : & str ) {
211+ fn log_communication ( level : log :: Level , src : & str , src_port : u32 , dst : & str , dst_port : u32 , msg : & str , arrow : Direction , prot : & str , max_len : Option < usize > ) {
211212 let src = format ! ( "{}:{}" , src, src_port) ;
212213 let dst = format ! ( "{}:{}" , dst, dst_port) ;
213- let msg = & msg[ 0 .. cmp:: min ( msg. len ( ) , 80 ) ] ;
214+ let msg = if let Some ( max) = max_len {
215+ & msg[ 0 .. cmp:: min ( msg. len ( ) , max) ]
216+ } else {
217+ & msg[ ..]
218+ } ;
214219 let arrow = match arrow {
215220 Direction :: Left => format ! ( "<{:-^width$}" , prot, width = 10 ) ,
216221 Direction :: Right => format ! ( "{:-^width$}>" , prot, width = 10 ) ,
217222 } ;
218- info ! ( "{:>20} {} {:<20}: {:?}" , src, arrow, dst, msg) ;
223+ log ! ( level , "{:>20} {} {:<20}: {:?}" , src, arrow, dst, msg) ;
219224 }
220225
221226 pub fn send ( & mut self , response : & Response ) -> Result < ( ) , IoError > {
222227 Self :: log_communication (
228+ log:: Level :: Info ,
223229 "runner" ,
224230 self . sender . local_port ( ) . unwrap_or_default ( ) ,
225231 "enclave" ,
226232 self . sender . peer_port ( ) . unwrap_or_default ( ) ,
227233 & format ! ( "{:?}" , response) ,
228234 Direction :: Right ,
229- "vsock" ) ;
235+ "vsock" ,
236+ None ) ;
230237 let response: Vec < u8 > = serde_cbor:: ser:: to_vec ( response)
231238 . map_err ( |_| IoError :: new ( IoErrorKind :: InvalidData , "Serialization failed" ) ) ?;
232239 self . sender . write ( & response) ?;
@@ -238,13 +245,15 @@ impl<'de> ClientConnection<'de> {
238245 . ok_or ( IoError :: new ( IoErrorKind :: Other , "Failed to read request" ) ) ?
239246 . map_err ( |e| IoError :: new ( IoErrorKind :: InvalidInput , e) ) ?;
240247 Self :: log_communication (
248+ log:: Level :: Info ,
241249 "runner" ,
242250 self . sender . local_port ( ) . unwrap_or_default ( ) ,
243251 "enclave" ,
244252 self . sender . peer_port ( ) . unwrap_or_default ( ) ,
245253 & format ! ( "{:?}" , & req) ,
246254 Direction :: Left ,
247- "vsock" ) ;
255+ "vsock" ,
256+ None ) ;
248257 Ok ( req)
249258 }
250259}
0 commit comments