diff --git a/tvix/nix-compat/src/wire/primitive.rs b/tvix/nix-compat/src/wire/primitive.rs index 119053b89..ee0f5fc42 100644 --- a/tvix/nix-compat/src/wire/primitive.rs +++ b/tvix/nix-compat/src/wire/primitive.rs @@ -4,13 +4,6 @@ use tokio::io::{AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt}; -// LE-encoded nixc on 64 bits. Because why not. -pub static MAGIC_HELLO: [u8; 8] = *b"cxin\0\0\0\0"; -// LE-encoded dxio on 64 bits. What's dxio? I have no clue. -pub static MAGIC_HELLO_RESPONSE: [u8; 8] = *b"oixd\0\0\0\0"; -// LE-encoded protocol version. -pub static PROTOCOL_VERSION: [u8; 8] = [0x23, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]; - #[allow(dead_code)] /// Read a u64 from the AsyncRead (little endian). pub async fn read_u64(r: &mut R) -> std::io::Result { diff --git a/tvix/nix-compat/src/wire/worker_protocol.rs b/tvix/nix-compat/src/wire/worker_protocol.rs index 77d510425..c9d055319 100644 --- a/tvix/nix-compat/src/wire/worker_protocol.rs +++ b/tvix/nix-compat/src/wire/worker_protocol.rs @@ -11,6 +11,13 @@ use crate::wire::primitive; use super::bytes::read_string; +// LE-encoded nixc on 64 bits. Because why not. +pub static MAGIC_HELLO: [u8; 8] = *b"cxin\0\0\0\0"; +// LE-encoded dxio on 64 bits. What's dxio? I have no clue. +pub static MAGIC_HELLO_RESPONSE: [u8; 8] = *b"oixd\0\0\0\0"; +// LE-encoded protocol version. +pub static PROTOCOL_VERSION: [u8; 8] = [0x23, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]; + pub static STDERR_LAST: u64 = 0x616c7473; /// Max length of a Nix setting name/value. In bytes. diff --git a/users/picnoir/tvix-daemon/src/main.rs b/users/picnoir/tvix-daemon/src/main.rs index d18ff2471..46cb813e3 100644 --- a/users/picnoir/tvix-daemon/src/main.rs +++ b/users/picnoir/tvix-daemon/src/main.rs @@ -127,15 +127,17 @@ where let mut magic_hello = vec![0; 8]; conn.read_exact(&mut magic_hello).await?; debug!("Hello read"); - if magic_hello != primitive::MAGIC_HELLO { + if magic_hello != worker_protocol::MAGIC_HELLO { Err(anyhow!( "Invalid client hello received: {:?}, expected {:?}", magic_hello, - primitive::MAGIC_HELLO + worker_protocol::MAGIC_HELLO )) } else { - conn.write_all(&primitive::MAGIC_HELLO_RESPONSE).await?; - conn.write_all(&primitive::PROTOCOL_VERSION).await?; + conn.write_all(&worker_protocol::MAGIC_HELLO_RESPONSE[..]) + .await?; + conn.write_all(&worker_protocol::PROTOCOL_VERSION[..]) + .await?; conn.flush().await?; debug!("Hello responded"); let client_version = primitive::read_u64(&mut conn).await?; @@ -192,16 +194,16 @@ where #[cfg(test)] mod integration_tests { - use nix_compat::wire::primitive; + use nix_compat::wire::worker_protocol; #[tokio::test] async fn test_init_handshake() { let mut test_conn = tokio_test::io::Builder::new() - .read(&primitive::MAGIC_HELLO) - .write(&primitive::MAGIC_HELLO_RESPONSE) - .write(&primitive::PROTOCOL_VERSION) + .read(&worker_protocol::MAGIC_HELLO) + .write(&worker_protocol::MAGIC_HELLO_RESPONSE) + .write(&worker_protocol::PROTOCOL_VERSION) // Let's say the client is in sync with the daemon // protocol-wise - .read(&primitive::PROTOCOL_VERSION) + .read(&worker_protocol::PROTOCOL_VERSION) // cpu affinity .read(&vec![0; 8]) // reservespace