diff --git a/src/logic.rs b/src/logic.rs index c4ac370..f72800a 100644 --- a/src/logic.rs +++ b/src/logic.rs @@ -35,7 +35,7 @@ pub fn on_total_size(ctx: Arc, _: SocketAddr) -> Result, _: SocketAddr, - _: Option, // sent_size + _sent_size: Option, ) -> Result, Box> { if let Some(url) = ctx.args.proxy_to.as_ref() { return read_messages( @@ -69,7 +69,7 @@ pub fn on_total_data( pub fn on_chunked_data( ctx: Arc, _: SocketAddr, - _: Option, // sent_size + _sent_size: Option, client_has: u64, ) -> Result, Box> { if let Some(url) = ctx.args.proxy_to.as_ref() { @@ -203,3 +203,7 @@ pub fn on_register_user( Ok(None) } + +pub fn on_server_info(_: Arc, _: SocketAddr) -> Result<(u8, String), Box> { + Ok((0x03, format!("sRAC {}", env!("CARGO_PKG_VERSION")))) +} diff --git a/src/proto/rac.rs b/src/proto/rac.rs index 0fdb843..0233dfb 100644 --- a/src/proto/rac.rs +++ b/src/proto/rac.rs @@ -44,7 +44,7 @@ pub fn accept_rac_stream( on_send_message(ctx.clone(), addr, buf)?; } else if buf[0] == 0x02 { - let mut buf = vec![0; ctx.args.message_limit + 2 + 512]; // FIXME: softcode this (512 = name + password) + let mut buf = vec![0; ctx.args.message_limit + 2 + 512]; // TODO: softcode this (512 = name + password) let size = stream.read(&mut buf)?; buf.truncate(size); @@ -84,6 +84,14 @@ pub fn accept_rac_stream( if let Some(resp_id) = on_register_user(ctx.clone(), addr, name, password)? { stream.write_all(&[resp_id])?; } + } else if buf[0] == 0x69 { + let (protocol_version, name) = on_server_info(ctx.clone(), addr)?; + + let mut data = Vec::new(); + data.push(protocol_version); + data.append(&mut name.as_bytes().to_vec()); + + stream.write_all(&data)?; } Ok(()) diff --git a/src/proto/wrac.rs b/src/proto/wrac.rs index 7134a6c..1b381b7 100644 --- a/src/proto/wrac.rs +++ b/src/proto/wrac.rs @@ -105,6 +105,15 @@ pub fn accept_wrac_stream( websocket.write(Message::Binary(Bytes::from(vec![resp_id])))?; websocket.flush()?; } + } else if id == 0x69 { + let (protocol_version, name) = on_server_info(ctx.clone(), addr)?; + + let mut data = Vec::new(); + data.push(protocol_version); + data.append(&mut name.as_bytes().to_vec()); + + websocket.write(Message::Binary(Bytes::from(data)))?; + websocket.flush()?; } } }