diff options
-rw-r--r-- | tvix/nix-compat/src/wire/worker_protocol.rs | 13 | ||||
-rw-r--r-- | users/picnoir/tvix-daemon/src/main.rs | 23 |
2 files changed, 15 insertions, 21 deletions
diff --git a/tvix/nix-compat/src/wire/worker_protocol.rs b/tvix/nix-compat/src/wire/worker_protocol.rs index c9d055319273..121b9b2ea5cb 100644 --- a/tvix/nix-compat/src/wire/worker_protocol.rs +++ b/tvix/nix-compat/src/wire/worker_protocol.rs @@ -11,14 +11,11 @@ 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; +pub static WORKER_MAGIC_1: u64 = 0x6e697863; // "nixc" +pub static WORKER_MAGIC_2: u64 = 0x6478696f; // "dxio" +pub static STDERR_LAST: u64 = 0x616c7473; // "alts" +/// Protocol version (1.35) +pub static PROTOCOL_VERSION: u64 = 1 << 8 | 35; /// 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 46cb813e3e38..398c8af01fcc 100644 --- a/users/picnoir/tvix-daemon/src/main.rs +++ b/users/picnoir/tvix-daemon/src/main.rs @@ -124,20 +124,17 @@ async fn perform_init_handshake<'a, R: 'a>( where &'a mut R: AsyncReadExt + AsyncWriteExt + Unpin + std::fmt::Debug, { - let mut magic_hello = vec![0; 8]; - conn.read_exact(&mut magic_hello).await?; + let worker_magic_1 = primitive::read_u64(&mut conn).await?; debug!("Hello read"); - if magic_hello != worker_protocol::MAGIC_HELLO { + if worker_magic_1 != worker_protocol::WORKER_MAGIC_1 { Err(anyhow!( "Invalid client hello received: {:?}, expected {:?}", - magic_hello, - worker_protocol::MAGIC_HELLO + worker_magic_1, + worker_protocol::WORKER_MAGIC_1 )) } else { - conn.write_all(&worker_protocol::MAGIC_HELLO_RESPONSE[..]) - .await?; - conn.write_all(&worker_protocol::PROTOCOL_VERSION[..]) - .await?; + primitive::write_u64(&mut conn, worker_protocol::WORKER_MAGIC_2).await?; + primitive::write_u64(&mut conn, worker_protocol::PROTOCOL_VERSION).await?; conn.flush().await?; debug!("Hello responded"); let client_version = primitive::read_u64(&mut conn).await?; @@ -198,12 +195,12 @@ mod integration_tests { #[tokio::test] async fn test_init_handshake() { let mut test_conn = tokio_test::io::Builder::new() - .read(&worker_protocol::MAGIC_HELLO) - .write(&worker_protocol::MAGIC_HELLO_RESPONSE) - .write(&worker_protocol::PROTOCOL_VERSION) + .read(&worker_protocol::WORKER_MAGIC_1.to_le_bytes()) + .write(&worker_protocol::WORKER_MAGIC_2.to_le_bytes()) + .write(&worker_protocol::PROTOCOL_VERSION.to_le_bytes()) // Let's say the client is in sync with the daemon // protocol-wise - .read(&worker_protocol::PROTOCOL_VERSION) + .read(&worker_protocol::PROTOCOL_VERSION.to_le_bytes()) // cpu affinity .read(&vec![0; 8]) // reservespace |